m0_73740280 2023-02-03 18:03 采纳率: 86.8%
浏览 48
已结题

这个C语言代码应该怎样修改(开发工具-visualstudio)

请问这个应该怎样修改呀?可以帮忙调试一下吗?非常感谢!今天就要交了


#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
#include<graphics.h> //Easyx的图形库头文件
#include<ctype.h>
#define _CRT_SECURE_NO_WARNINGS
struct Student
{
    char id[14];
    char name[10];
    char age[4];
    char sex[4];
    char date[16];
    char address[20];
    char phone[12];
    char email[20];
};
struct Student stu[50], ss;
void menu();
int search(Student stu[], int count, char* key);
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 
//正常插入,返回学生数;否则,返回-1
int add(Student stu[], int count, Student ss);
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
int modify(Student stu[], int count, Student ss);
//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
int Delete(Student stu[], int count, Student ss);
void writeFile(Student stu[], int count);
int readFile(Student stu[]);
void Showall();
void PrintUI();
void Printfind();
//按钮数组
int R[] = { 250,80,550,130 };
int r1[] = { 300,150,500,200 };
int r2[] = { 300,220,500,270 };
int r3[] = { 300,290,500,340 };
int r4[] = { 300,360,500,410 };
int r5[] = { 300,430,500,480 };
int r6[] = { 300,500,500,550 };
int count;
void menu()
{
    
    initgraph(640, 600);
    ExMessage m1;
    cleardevice();
    setbkcolor(BLUE);
    setbkmode(TRANSPARENT);
    setfillcolor(WHITE);
    fillrectangle(R[0], R[1], R[2], R[3]);
    fillrectangle(r1[0], r1[1], r1[2], r1[3]);//画矩形,即按钮
    fillrectangle(r2[0], r2[1], r2[2], r2[3]);
    fillrectangle(r3[0], r3[1], r3[2], r3[3]);
    fillrectangle(r4[0], r4[1], r4[2], r4[3]);
    fillrectangle(r5[0], r5[1], r5[2], r5[3]);
    fillrectangle(r6[0], r6[1], r6[2], r6[3]);

    RECT R1 = { R[0],R[1],R[2],R[3] };//矩形指针R1,方便后面在里面写字,不用计算字的位置
    RECT R2 = { r1[0],r1[1],r1[2],r1[3] };
    RECT R3 = { r2[0],r2[1],r2[2],r2[3] };
    RECT R4 = { r3[0],r3[1],r3[2],r3[3] };
    RECT R5 = { r4[0],r4[1],r4[2],r4[3] };
    RECT R6 = { r5[0],r5[1],r5[2],r5[3] };
    RECT R7 = { r6[0],r6[1],r6[2],r6[3] };

    setbkmode(TRANSPARENT);             //字体背景透明
    settextcolor(BLACK);
    drawtext("学生信息管理系统", &R1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R1内输入文字,水平居中,垂直居中,单行显示
    drawtext("录入", &R2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext("查询", &R3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext("信息修改", &R4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext("显示信息", &R5, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    drawtext("退出系统", &R6, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    char* key[20];
    int  i;
    int tag = 1;
    count = readFile(stu);
    while (1)
    {
        m1 = getmessage();//获取鼠标操作
        if (m1.x > r1[0] && m1.x < r1[2] && m1.y>r1[1] && m1.y < r1[3]) {
            setlinecolor(RED);
            rectangle(r1[0], r1[1], r1[2], r1[3]);
            if (m1.message == WM_LBUTTONDOWN)
            {
                add(stu, count, ss);//录入
            }
        }
        else if (m1.x >= r2[0] && m1.x <= r2[2] && m1.y >= r2[1] && m1.y <= r2[3]) {
            setlinecolor(RED);
            rectangle(r2[0], r2[1], r2[2], r2[3]);
            if (m1.message == WM_LBUTTONDOWN)
            {
                Printfind();//查询
            }
        }
        else if (m1.x >= r3[0] && m1.x <= r3[2] && m1.y >= r3[1] && m1.y <= r3[3]) {
            setlinecolor(RED);
            rectangle(r3[0], r3[1], r3[2], r3[3]);
            if (m1.message == WM_LBUTTONDOWN)
            {
                modify(stu, count, ss);//修改
            }
        }
        else if (m1.x >= r4[0] && m1.x <= r4[2] && m1.y >= r4[1] && m1.y <= r4[3]) {
            setlinecolor(RED);
            rectangle(r4[0], r4[1], r4[2], r4[3]);
            if (m1.message == WM_LBUTTONDOWN) {
                Delete(stu, count, ss);//删除
            }
        }
        else if (m1.x >= r5[0] && m1.x <= r5[2] && m1.y >= r5[1] && m1.y <= r5[3]) {
            setlinecolor(RED);
            rectangle(r5[0], r5[1], r5[2], r5[3]);
            if (m1.message == WM_LBUTTONDOWN) {
                Showall(); //打印
            }
        }
        else if (m1.x >= r6[0] && m1.x <= r6[2] && m1.y >= r6[1] && m1.y <= r6[3]) {
            setlinecolor(RED);
            rectangle(r6[0], r6[1], r6[2], r6[3]);
            if (m1.message == WM_LBUTTONDOWN) {
                closegraph();//退出
            }
        }
        else {
            setlinecolor(WHITE);
            rectangle(r1[0], r1[1], r1[2], r1[3]);
            rectangle(r2[0], r2[1], r2[2], r2[3]);
            rectangle(r3[0], r3[1], r3[2], r3[3]);
            rectangle(r4[0], r4[1], r4[2], r4[3]);
            rectangle(r5[0], r5[1], r5[2], r5[3]);
            rectangle(r6[0], r6[1], r6[2], r6[3]);
        }
    }
}
int search(Student stu[], int count, char* key)  //int searchID(Student stu[], int count, char key) 修改
{
    int i;
    char* p = NULL;
    InputBox(key, 10, "请输入学生信息的关键词");
    for (i = 0; i < count; i++)  //先排查 学号
    {
        p = strstr(stu[i].id, key);
        if (p) return i;
    }
    for (i = 0; i < count; i++) //其次 姓名
    {
        p = strstr(stu[i].name, key);
        if (p) return i;
    }
    for (i = 0; i < count; i++) //再次 电话
    {
        p = strstr(stu[i].phone, key);
        if (p) return i;
    }
    for (i = 0; i < count; i++) //四次 email
    {
        p = strstr(stu[i].email, key);
        if (p) return i;
    }
    return -1;
}
void PrintUI(int q)//输出成绩界面
{
    ExMessage m2;
    initgraph(640, 480);
    setbkcolor(GREEN);
    setfillcolor(WHITE);
    fillrectangle(300, 380, 380, 410);
    setbkmode(TRANSPARENT);
    settextcolor(BLACK);

    settextstyle(20, 0, "黑体");
    outtextxy(40, 100, "学号");
    outtextxy(200, 100, "姓名");
    outtextxy(300, 100, "年龄");
    outtextxy(380, 100, "性别");
    outtextxy(440, 100, "出生日期");
    outtextxy(500, 100, "地址");
    outtextxy(580, 100, "电话");
    outtextxy(660, 100, "电子邮箱");

    outtextxy(40, 140, (TCHAR)stu[q].id);
    outtextxy(200, 140, (TCHAR)stu[q].name);
    outtextxy(300, 140, (TCHAR)stu[q].age);
    outtextxy(380, 140, (TCHAR)stu[q].sex);
    outtextxy(440, 140, (TCHAR)stu[q].date);
    outtextxy(500, 140, (TCHAR)stu[q].address);
    outtextxy(580, 140, (TCHAR)stu[q].phone);
    outtextxy(660, 140, (TCHAR)stu[q].email);
    while (1) {
        m2 = getmessage();
        if (m2.x > 300 && m2.x < 380 && m2.y>380 && m2.y < 410) {
            setlinecolor(RED);
            rectangle(300, 380, 380, 410);
        }
        else {
            setlinecolor(WHITE);
            rectangle(300, 380, 380, 410);
        }
        if (m2.message == WM_LBUTTONDOWN) {
            menu();//返回到主菜单
        }
    }
}
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 
void Printfind()//调用cha()
{
    int fan1 = search(stu, count, key);//返回值
    if (fan1 == -1)//没找到
    {
        //获取窗口句柄
        HWND hndtipsF = GetHWnd();
        int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
    }
    else
    {
        PrintUI(fan1);
    }
}
int add(Student stu[], int count, Student ss)
{
    InputBox(stu[count].id, 14, "请输入该学生的学号");
    int pos;
    //先判断添加的信息是否原本已有这个学生
    pos = search(stu, count, ss.id);
    //如果本来不存在,就添加 
    if (pos == -1)
    {
        stu[count] = ss;
        return count + 1;
    }
    else {
        HWND hwndInput1 = GetHWnd();
        int isok = MessageBox(hwndInput1, "该学生已经存在,请重新输入", "提示", MB_OK);
    }
    InputBox(stu[count].name, 10, "请输入该学生的姓名");
    InputBox(stu[count].age, 4, "请输入该学生的年龄");
    InputBox(stu[count].date, 16, "请输入该学生的出生日期");
    InputBox(stu[count].address,20 , "请输入该学生的地址");
    InputBox(stu[count].phone, 12, "请输入该学生的电话");
    InputBox(stu[count].email, 20, "请输入该学生的电子邮箱");
    writeFile(stu,count);
}
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
int modify(Student stu[], int count, Student ss)
{
    int pos;
    InputBox(ss.id, 9, "请输入需要修改的学生的学号");
    pos = search(stu, count, ss.id);
    if (pos == -1)
    {
        HWND hndtipsM = GetHWnd();//获取窗口句柄
        int isok = MessageBox(hndtipsM, "查无此人!", "提示", MB_OK);
    }
    else {
        stu[pos] = ss;
        InputBox(ss.id, 9, "请输入需要修改的学生的学号");
        InputBox(ss.name, 9, "请输入需要修改的学生的姓名");
        InputBox(ss.age, 9, "请输入需要修改的学生的年龄");
        InputBox(ss.sex, 9, "请输入需要修改的学生的性别");
        InputBox(ss.date, 9, "请输入需要修改的学生的出生日期");
        InputBox(ss.address, 9, "请输入需要修改的学生的地址");
        InputBox(ss.phone, 9, "请输入需要修改的学生的电话");
        InputBox(ss.email, 9, "请输入需要修改的学生的电子邮箱");
    }
    return count;
}

//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
int Delete(Student stu[], int count, Student ss)
{
    int pos, i;
    pos = search(stu, count, ss.id);
    if (pos == -1) {
        HWND hndtipsD = GetHWnd();
        int isok = MessageBox(hndtipsD, "查无此人!", "提示", MB_OK);
        return -1;
    }
    else
    {
        HWND hndtipsDS = GetHWnd();
        int isok = MessageBox(hndtipsDS, "确定删除?", "提示", MB_OKCANCEL);
        if (isok == IDOK) {
            for (i = pos + 1; i < count; i++)
                stu[i - 1] = stu[i];
            return count - 1;
        }
        else if (isok == IDCANCEL) {

        }
    }
}
void writeFile(Student stu[], int count)
{
    FILE* fp;
    int i;
    //"w"是写文件 
    fp = fopen("student.dat", "w");
    for (i = 0; i < count; i++)
        //fprinf()是把文件内容输出到屏幕 
        fprintf(fp, "%s  %s  %s %s  %s  %s  %s  %s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email);
    fclose(fp);
}
//只读文件 
int readFile(Student stu[])
{
    FILE* fp;
    int i;
    fp = fopen("student.dat", "r");
    //如果文件不存在,返回0 
    if (fp == NULL)
        return 0;
    //foef()判断文件是否结束,结束返回1,未结束返回0,用!feof()作为循环条件 
    //fscanf()将文件中的数据读入数组变量id,name...中 
    for (i = 0;; i++)
        if (fscanf(fp, "%s %s %s%s %s %s %s %s", stu[i].id, stu[i].name, &stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email) != 8) break;
    fclose(fp);
    return i;
}
void Showall() //打印所以成绩
{
    ExMessage m3;
    initgraph(640, 480);
    setfillcolor(WHITE);
    fillrectangle(300, 430, 380, 460);
    setbkmode(TRANSPARENT);
    settextcolor(BLACK);
    settextstyle(20, 0, "黑体");
    outtextxy(40, 100, "学号");
    outtextxy(200, 100, "姓名");
    outtextxy(300, 100, "年龄");
    outtextxy(380, 100, "性别");
    outtextxy(440, 100, "出生日期");
    outtextxy(500, 100, "地址");
    outtextxy(580, 100, "电话");
    outtextxy(660, 100, "电子邮箱");//返回按钮
    readFile(stu);
    for (int q = 0; q <= count; q++) {
        outtextxy(40, 140, stu[q].id);
        outtextxy(200, 140, stu[q].name);
        outtextxy(300, 140, stu[q].age);
        outtextxy(380, 140, stu[q].sex);
        outtextxy(440, 140, stu[q].date);
        outtextxy(500, 140, stu[q].address);
        outtextxy(580, 140, stu[q].phone);
        outtextxy(660, 140, stu[q].email);
    }


    while (1) {
        m3 = getmessage();
        if (m3.x > 300 && m3.x < 430 && m3.y>380 && m3.y < 460) {
            setlinecolor(RED);
            rectangle(300, 430, 380, 460);
        }
        else {
            setlinecolor(WHITE);
            rectangle(300, 430, 380, 460);
        }
        if (m3.message == WM_LBUTTONDOWN) {
            menu();//返回主菜单
        }
    }
}
int main(void)//主函数调用
{
    menu();
    return 0;
}


  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-02-04 10:48
    关注

    void Showall() //打印所有成绩, 打印函数分页没做(当记录较多,一页显示不下时需分页),留给题主试写下,其他修改完善如下,供参考:

    #include <stdio.h>
    #include <windows.h>
    #include <conio.h>
    #include <string.h>
    #include <graphics.h> 
    #include <ctype.h>
    #define _CRT_SECURE_NO_WARNINGS
    struct Student
    {
        char id[14];
        char name[10];
        char age[4];
        char sex[4];
        char date[16];
        char address[20];
        char phone[12];
        char email[30];
    };
    struct Student stu[50];
    int count = 0;
    void menu();
    int searchID(char* keyID = NULL);
    //功能:在stu的count个元素,查找ss
    //返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 
    int searchNAME();
    int searchPHONE();
    int searchEMAIL();
    //正常插入,返回学生数;否则,返回-1
    int add();
    //若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
    int modify();
    //若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
    int  Delete();
    void writeFile();
    int  readFile();
    void Showall();
    void PrintUI(int);
    //按钮数组
    int R[] =  { 150,50,650,150 };
    int r1[] = { 200,200,600,250 };
    int r2[] = { 200,270,600,320 };
    int r3[] = { 200,340,600,390 };
    int r4[] = { 200,410,600,460 };
    int r5[] = { 200,480,600,530 };
    int r6[] = { 200,550,600,600 };
    int r7[] = { 200,620,600,670 };
    int r8[] = { 200,690,600,740 };
    int r9[] = { 200,760,600,810 };
    
    void menu()
    {
        initgraph(1000, 860); 
        ExMessage m1;
        cleardevice();
        setbkcolor(BACKGROUND_BLUE);
        setbkmode(TRANSPARENT);
        setfillcolor(WHITE);
        fillrectangle(R[0], R[1], R[2], R[3]);    //修改
        fillrectangle(r1[0], r1[1], r1[2], r1[3]);//画矩形,即按钮
        fillrectangle(r2[0], r2[1], r2[2], r2[3]);
        fillrectangle(r3[0], r3[1], r3[2], r3[3]);
        fillrectangle(r4[0], r4[1], r4[2], r4[3]);
        fillrectangle(r5[0], r5[1], r5[2], r5[3]);
        fillrectangle(r6[0], r6[1], r6[2], r6[3]);
        fillrectangle(r7[0], r7[1], r7[2], r7[3]);
        fillrectangle(r8[0], r8[1], r8[2], r8[3]);
        fillrectangle(r9[0], r9[1], r9[2], r9[3]);
        RECT R1 = { R[0],R[1],R[2],R[3] };//矩形指针R1,方便后面在里面写字,不用计算字的位置
        RECT R2 = { r1[0],r1[1],r1[2],r1[3] };
        RECT R3 = { r2[0],r2[1],r2[2],r2[3] };
        RECT R4 = { r3[0],r3[1],r3[2],r3[3] };
        RECT R5 = { r4[0],r4[1],r4[2],r4[3] };
        RECT R6 = { r5[0],r5[1],r5[2],r5[3] };
        RECT R7 = { r6[0],r6[1],r6[2],r6[3] };
        RECT R8 = { r7[0], r7[1], r7[2], r7[3] };
        RECT R9 = { r8[0], r8[1], r8[2], r8[3] };
        RECT R10 = { r9[0], r9[1], r9[2], r9[3] };
        LOGFONT f;                          //字体样式指针
        gettextstyle(&f);                    //获取字体样式
        f.lfHeight = 60;
        _tcscpy(f.lfFaceName, _T("宋体"));    //宋体
        f.lfQuality = ANTIALIASED_QUALITY;  // 抗锯齿 
        settextstyle(&f);                   // 设置字体样式
        setbkmode(TRANSPARENT);             //字体背景透明
        settextcolor(BLACK);
        drawtext("学生信息管理系统", &R1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R1内输入文字,水平居中,垂直居中,单行显示
        drawtext("录入", &R2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("查询(按学号)", &R3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("查询(按姓名)", &R4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("查询(按电话)", &R5, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("查询(按邮箱)", &R6, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("信息修改", &R7, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("信息删除", &R8, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("显示信息", &R9, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        drawtext("退出系统", &R10, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        char keyID[14];
        int  i;
        int select, tag = 1;
        while (1)
        {
            m1 = getmessage();//获取鼠标操作
            if (m1.x > r1[0] && m1.x < r1[2] && m1.y>r1[1] && m1.y < r1[3]) {
                setlinecolor(RED);
                rectangle(r1[0], r1[1], r1[2], r1[3]);
                if (m1.message == WM_LBUTTONDOWN)
                {
                    i = add();//录入 
                }
            }
            else if (m1.x >= r2[0] && m1.x <= r2[2] && m1.y >= r2[1] && m1.y <= r2[3]) {
                setlinecolor(RED);
                rectangle(r2[0], r2[1], r2[2], r2[3]);
                if (m1.message == WM_LBUTTONDOWN)
                {
                    i = searchID();//查询学号  修改
                    if (i != -1)                    //修改
                        PrintUI(i);                 //修改
                    else {
                         //修改
                        HWND hndtipsF = GetHWnd();;
                        int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
                    }
                }
            }
            else if (m1.x >= r3[0] && m1.x <= r3[2] && m1.y >= r3[1] && m1.y <= r3[3]) {
                setlinecolor(RED);
                rectangle(r3[0], r3[1], r3[2], r3[3]);
                if (m1.message == WM_LBUTTONDOWN)
                {
                    i = searchNAME();//名字  修改
                    if (i != -1)
                        PrintUI(i);                 //修改
                }
            }
            else if (m1.x >= r4[0] && m1.x <= r4[2] && m1.y >= r4[1] && m1.y <= r4[3]) {
                setlinecolor(RED);
                rectangle(r4[0], r4[1], r4[2], r4[3]);
                if (m1.message == WM_LBUTTONDOWN) {
                    i = searchPHONE();//电话  修改
                    if (i != -1)
                        PrintUI(i);                 //修改
                }
            }
            else if (m1.x >= r5[0] && m1.x <= r5[2] && m1.y >= r5[1] && m1.y <= r5[3]) {
                setlinecolor(RED);
                rectangle(r5[0], r5[1], r5[2], r5[3]);
                if (m1.message == WM_LBUTTONDOWN) {
                    i = searchEMAIL();//电子邮箱  修改
                    if (i != -1)
                        PrintUI(i);                 //修改
                }
            }
            else if (m1.x >= r6[0] && m1.x <= r6[2] && m1.y >= r6[1] && m1.y <= r6[3]) {
                setlinecolor(RED);
                rectangle(r6[0], r6[1], r6[2], r6[3]);
                if (m1.message == WM_LBUTTONDOWN) {
                    i = modify(); //修改
                    if (i != -1) 
                        PrintUI(i);
                }
            }
            else if (m1.x >= r7[0] && m1.x <= r7[2] && m1.y >= r7[1] && m1.y <= r7[3]) {
                setlinecolor(RED);
                rectangle(r7[0], r7[1], r7[2], r7[3]);
                if (m1.message == WM_LBUTTONDOWN) {
                    i = Delete();//删除
                }
            }
            else if (m1.x >= r8[0] && m1.x <= r8[2] && m1.y >= r8[1] && m1.y <= r8[3]) {
                setlinecolor(RED);
                rectangle(r8[0], r8[1], r8[2], r8[3]);
                if (m1.message == WM_LBUTTONDOWN) {
                    Showall(); //打印
                }
            }
            else if (m1.x >= r9[0] && m1.x <= r9[2] && m1.y >= r9[1] && m1.y <= r9[3]) {
                setlinecolor(RED);
                rectangle(r9[0], r9[1], r9[2], r9[3]);
                if (m1.message == WM_LBUTTONDOWN) {
                    writeFile();
                    closegraph();//退出
                }
            }
            else {
                setlinecolor(WHITE);
                rectangle(r1[0], r1[1], r1[2], r1[3]);
                rectangle(r2[0], r2[1], r2[2], r2[3]);
                rectangle(r3[0], r3[1], r3[2], r3[3]);
                rectangle(r4[0], r4[1], r4[2], r4[3]);
                rectangle(r5[0], r5[1], r5[2], r5[3]);
                rectangle(r6[0], r6[1], r6[2], r6[3]);
            }
        }
    }
    
    int searchID(char* keyID)  //int searchID(Student stu[], int count, char key) 修改
    {
        int i;
        char* p = NULL;
        if (!keyID) {
            keyID = (char*)malloc(sizeof(char) * 14);
            InputBox(keyID, 14, "请输入学生的学号关键词"); //InputBox(i, 10, "请输入学生的学号关键词");
        }
        for (i = 0; i < count; i++)  //先排查 学号
        {
            p = strstr(stu[i].id, keyID);
            if (p) return i;
        }
        return  -1;
    }
    int searchNAME()  //int searchID(Student stu[], int count, char key) 修改
    {
        int i; 
        char* p = NULL, keyNAME[10];
        InputBox(keyNAME, 10, "请输入学生的姓名关键词"); //InputBox(i, 10, "请输入学生的姓名关键词");
        for (i = 0; i < count; i++)
        {
            p = strstr(stu[i].name, keyNAME);
            if (p) return i;
        }
        if (!p) {           //修改
            HWND hndtipsF = GetHWnd();
            int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
            if (isok)
                return -1;    //修改
        }
    }
    int searchPHONE()  //int searchID(Student stu[], int count, char key) 修改
    {
        int i;
        char* p = NULL, keyPHONE[12];
        InputBox(keyPHONE, 12, "请输入学生的电话关键词");  //InputBox(i, 10, "请输入学生的电话关键词");
        for (i = 0; i < count; i++)  //先排查 学号
        {
            p = strstr(stu[i].phone, keyPHONE);
            if (p) return i;
        }
        if (!p) {             //修改
            HWND hndtipsF = GetHWnd();
            int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
            if (isok)
                return -1;    //修改
        }
    }
    int searchEMAIL()  //int searchID(Student stu[], int count, char key) 修改
    {
        int i;
        char* p = NULL, keyEMAIL[30];
        InputBox(keyEMAIL, 30, "请输入学生的电子邮箱关键词");  //InputBox(i, 10, "请输入学生的电子邮箱关键词");
        for (i = 0; i < count; i++)  //先排查 学号
        {
            p = strstr(stu[i].email, keyEMAIL);
            if (p) return i;
        }
        if (!p) {              //修改
            HWND hndtipsF = GetHWnd();
            int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
            if (isok)
                return -1;    //修改
        }
    }
    void PrintUI(int q)//输出单条记录界面
    {
        int rt[] = { 300, 430, 380, 460 };
        ExMessage m2;
        initgraph(880, 480);
        setfillcolor(WHITE);
        fillrectangle(300, 430, 380, 460);
        setbkmode(TRANSPARENT);
    
        RECT r = { rt[0],rt[1],rt[2],rt[3] };
        settextcolor(BLACK);
        drawtext("退出", &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    
        settextcolor(WHITE); //BLACK
    
        settextstyle(20, 0, "黑体");
        outtextxy(40, 100, "学号");
        outtextxy(200, 100, "姓名");
        outtextxy(300, 100, "年龄");
        outtextxy(380, 100, "性别");
        outtextxy(440, 100, "出生日期");
        outtextxy(550, 100, "地址");
        outtextxy(620, 100, "电话");
        outtextxy(700, 100, "电子邮箱");
    
        outtextxy(40,  140, stu[q].id);  //ss[q].id      修改
        outtextxy(200, 140, stu[q].name); //ss[q].name); 修改
        outtextxy(300, 140, stu[q].age); //ss[q].age     修改
        outtextxy(380, 140, stu[q].sex);  //ss[q].sex 
        outtextxy(440, 140, stu[q].date);  //ss[q].date
        outtextxy(550, 140, stu[q].address); //ss[q].address
        outtextxy(620, 140, stu[q].phone); //ss[q].phone
        outtextxy(700, 140, stu[q].email); //ss[q].email
        while (1) {
            m2 = getmessage();
            if (m2.x > 300 && m2.x < 380 && m2.y>380 && m2.y < 410) {
                setlinecolor(RED);
                rectangle(300, 430, 380, 460);
            }
            else {
                setlinecolor(WHITE);
                rectangle(300, 430, 380, 460);
            }
            if (m2.message == WM_LBUTTONDOWN) {
                menu();//返回到主菜单
            }
        }
    }
    //功能:在stu的count个元素,查找ss
    //返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 
    
    int add()
    {
        Student ss;
        InputBox(ss.id, 14, "请输入该学生的学号");         //修改
        //InputBox(stu[count].id, 14, "请输入该学生的学号");
        int pos;
        //先判断添加的信息是否原本已有这个学生
        pos = searchID(ss.id);
        //如果本来不存在,就添加 
        if (pos == -1)
        {
            InputBox(ss.name, 10, "请输入该学生的姓名"); //InputBox(stu[count].name, 10, "请输入该学生的姓名");
            InputBox(ss.age, 4, "请输入该学生的年龄"); //InputBox(stu[count].age, 4, "请输入该学生的年龄");
            InputBox(ss.sex, 4, "请输入该学生的性别");
            InputBox(ss.date, 16, "请输入该学生的出生日期"); //InputBox(stu[count].date, 16, "请输入该学生的出生日期");
            InputBox(ss.address, 20, "请输入该学生的地址"); //InputBox(stu[count].address, 20, "请输入该学生的地址");
            InputBox(ss.phone, 12, "请输入该学生的电话"); //InputBox(stu[count].phone, 12, "请输入该学生的电话");
            InputBox(ss.email, 30, "请输入该学生的电子邮箱"); //InputBox(stu[count].email, 20, "请输入该学生的电子邮箱");
            stu[count] = ss;
            count++;
            return count;
        }
        else {
            HWND hwndInput1 = GetHWnd();
            int isok = MessageBox(hwndInput1, "该学生已经存在,请重新输入", "提示", MB_OK);
            return -1;
        }
    }
    //若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
    int modify()
    {
        int pos = -1;
        Student ss;
        InputBox(ss.id, 14, "请输入该学生的学号"); //修改
        pos = searchID(ss.id);  //search(stu, count, ss); 修改
        if (pos == -1) {
            HWND hndtipsF = GetHWnd();
            int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
            return -1;
        }
        else
        {
            InputBox(ss.name, 10, "请输入该学生的姓名");
            InputBox(ss.age, 4, "请输入该学生的年龄");
            InputBox(ss.sex, 4, "请输入该学生的性别");
            InputBox(ss.date, 16, "请输入该学生的出生日期");
            InputBox(ss.address, 20, "请输入该学生的地址");
            InputBox(ss.phone, 12, "请输入该学生的电话");
            InputBox(ss.email, 30, "请输入该学生的电子邮箱");
            stu[pos] = ss;
            return pos;
        }
    }
    
    //若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
    int Delete()
    {
        int pos, i;
        Student ss;
        InputBox(ss.id, 14, "请输入该学生的学号"); //修改
        pos = searchID(ss.id);  //search(stu, count, ss); 修改
        if (pos == -1) {
            HWND hndtipsD = GetHWnd();
            int isok = MessageBox(hndtipsD, "查无此人!", "提示", MB_OK);
            return -1;
        }
        else
        {
            for (i = pos + 1; i < count; i++)
                stu[i - 1] = stu[i];
            count--;
            return count;
        }
    }
    void writeFile()
    {
        FILE* fp;
        int i;
        //"w"是写文件 
        fp = fopen("student.dat", "w");
        for (i = 0; i < count; i++)
            //fprinf()是把文件内容输出到屏幕 
            fprintf(fp, "%s  %s  %s  %s  %s  %s  %s  %s\n", stu[i].id, stu[i].name, stu[i].age, 
                          stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email);
        fclose(fp);
    }
    //只读文件 
    int readFile()
    {
        FILE* fp;
        int i;
        fp = fopen("student.dat", "r");
        //如果文件不存在,返回0 
        if (fp == NULL)
            return 0;
        //foef()判断文件是否结束,结束返回1,未结束返回0,用!feof()作为循环条件 
        //fscanf()将文件中的数据读入数组变量id,name...中 
        for (i = 0;; i++)
            if (fscanf(fp, "%s %s %s %s %s %s %s %s", stu[i].id, stu[i].name, stu[i].age, 
                stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email) != 8) break;
        fclose(fp);
        return i;
    }
    void Showall() //打印所以成绩 打印函数还有分页的问题没解决
    {
        int rt[] = { 300, 430, 380, 460 };
        ExMessage m3;
        initgraph(880, 480);
        setfillcolor(WHITE);
        fillrectangle(300, 430, 380, 460);
        setbkmode(TRANSPARENT);
    
        RECT r = { rt[0],rt[1],rt[2],rt[3] };
        settextcolor(BLACK);
        drawtext("退出", &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    
        settextcolor(WHITE); //BLACK
    
        settextstyle(20, 0, "黑体");
        outtextxy(40, 100, "学号");
        outtextxy(200, 100, "姓名");
        outtextxy(300, 100, "年龄");
        outtextxy(380, 100, "性别");
        outtextxy(440, 100, "出生日期");
        outtextxy(550, 100, "地址");
        outtextxy(620, 100, "电话");
        outtextxy(700, 100, "电子邮箱");//返回按钮
    
        for (int q = 0, tl = 0; q < count; q++, tl += 20) {
            outtextxy(40,  140+tl, stu[q].id);    //ss[q].id     修改
            outtextxy(200, 140+tl, stu[q].name);  //ss[q].name  修改
            outtextxy(300, 140+tl, stu[q].age);  //ss[q].age    修改
            outtextxy(380, 140+tl, stu[q].sex);  //ss[q].sex    修改
            outtextxy(440, 140+tl, stu[q].date);  //ss[q].date  修改
            outtextxy(550, 140+tl, stu[q].address);//ss[q].address 
            outtextxy(620, 140+tl, stu[q].phone);  //ss[q].phone
            outtextxy(700, 140+tl, stu[q].email);  //ss[q].email
        }
        while (1) {
            m3 = getmessage();
            if (m3.x > 300 && m3.x < 430 && m3.y>380 && m3.y < 460) {
                setlinecolor(RED);
                rectangle(300, 430, 380, 460);
            }
            else {
                setlinecolor(WHITE);
                rectangle(300, 430, 380, 460);
            }
            if (m3.message == WM_LBUTTONDOWN) {
                menu();//返回主菜单
            }
        }
    }
    int main(void)//主函数调用
    {
        count = readFile();
        menu();
        
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月3日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效