m0_73740280 2023-02-03 10:52 采纳率: 86.8%
浏览 144
已结题

请问这个C语言代码的界面怎样修改

img


#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 searchID(Student stu[], int count, char* keyID);
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 
int searchNAME(Student stu[], int count, char* keyNAME);
int searchPHONE(Student stu[], int count, char* keyPHONE);
int searchEMAIL(Student stu[], int count, char* keyEMAIL);
//正常插入,返回学生数;否则,返回-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();
//按钮数组
int R[] = { 150,50,650,150 };
int r1[] = { 200,100,600,200 };
int r2[] = { 200,150,600,250 };
int r3[] = { 200,200,600,300 };
int r4[] = { 200,250,600,350 };
int r5[] = { 200,300,600,400 };
int r6[] = { 200,350,600,450 };
int r7[] = { 200,400,600,500 };
int r8[] = { 200,450,600,550 };
int r9[] = { 200,500,600,600 };
int count;
void menu()
{
    initgraph(800, 640);
    ExMessage m1;
    cleardevice();
    setbkcolor(BLUE);
    setbkmode(TRANSPARENT);
    setfillcolor(WHITE);
    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] };

    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[20], keyNAME[10], keyPHONE[12], keyEMAIL[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)
            {
                searchID(stu, count, keyID);//查询学号
            }
        }
        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)
            {
                searchNAME(stu, count, keyNAME);//名字
            }
        }
        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) {
                searchPHONE(stu, count, keyPHONE);//电话
            }
        }
        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) {
                searchEMAIL(stu, count, keyEMAIL);//电子邮箱
            }
        }
        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) {
                modify(stu, count, ss);//修改
            }
        }
        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) {
                Delete(stu, count, ss);//删除
            }
        }
        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) {
                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]);
            rectangle(r7[0], r7[1], r7[2], r7[3]);
            rectangle(r8[0], r8[1], r8[2], r8[3]);
            rectangle(r9[0], r9[1], r9[2], r9[3]);
        }
    }
}

    

int searchID(Student stu[], int count, char* keyID)  //int searchID(Student stu[], int count, char key) 修改
{
    int i;
    char* p = NULL;
    InputBox(keyID, 10,"请输入学生的学号关键词");
    for (i = 0; i < count; i++)  //先排查 学号
    {
        p = strstr(stu[i].id, keyID);
        if (p) return i;
    }
    if (!p) {
        HWND hndtipsF = GetHWnd();
        int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
        return -1;
    }
}
int searchNAME(Student stu[], int count, char* keyNAME)  //int searchID(Student stu[], int count, char key) 修改
{
    int i;
    char* p = NULL;
    InputBox(keyNAME, 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);
        return -1;
    }
}
int searchPHONE(Student stu[], int count, char* keyPHONE)  //int searchID(Student stu[], int count, char key) 修改
{
    int i;
    char* p = NULL;
    InputBox(keyPHONE, 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);
        return -1;
    }
}
int searchEMAIL(Student stu[], int count, char* keyEMAIL)  //int searchID(Student stu[], int count, char key) 修改
{
    int i;
    char* p = NULL;
    InputBox(keyEMAIL, 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);
        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 

int add(Student stu[], int count, Student ss)
{
    InputBox(stu[count].id, 14, "请输入该学生的学号");
    int pos;
    //先判断添加的信息是否原本已有这个学生
    pos = searchID(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, "请输入该学生的电子邮箱");
    return -1;
}
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
int modify(Student stu[], int count, Student ss)
{
    int pos;
    pos = searchID(stu, count, ss.id);
    if (pos == -1)
        return -1;
    else
    {
        stu[pos] = ss;
        return count;
    }
}

//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
int Delete(Student stu[], int count, Student ss)
{
    int pos, i;
    pos = searchID(stu, count, ss.id);
    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];
        return count - 1;
    }
}
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, "电子邮箱");//返回按钮

    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;
}


  • 写回答

6条回答 默认 最新

  • 爱学习的man 2023-02-03 14:25
    关注

    我理解是R3有问题,同时使用R3,导致界面重叠了,加新的R

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 修改了问题 2月3日
  • 修改了问题 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之后自动重连失效