请问这个C语言代码如何修改,用的VS2022,写的学生信息管理系统加界面设计,第一次用VS,也是第一次写界面设计,很多不明白的地方,非常感谢解答!
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
#include <graphics.h>
#include <easyx.h>
struct Student
{
char id[14];
char name[10];
int age;
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);
int search(Student stu[], int count, Student ss);
//正常插入,返回学生数;否则,返回-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[]);
ExMessage msg = { 0 };
bool inArea(int x, int y, int rx, int ry, int rw, int rh)
{
if (x > rx && x < rx + rw && y > ry && y < ry + rh) {
return true;
}
return false;
}
bool button(int x, int y, int w, int h, const char* text)
{
if (inArea(msg.x, msg.y, x, y, w, h)) {
setfillcolor(RGB(187, 198, 241));
}
else {
setfillcolor(WHITE);
}
fillrectangle(x, y, x + w, y + h);
settextcolor(BLACK);
int hspace = (w - textwidth(text)) / 2;
int vspace = (h - textheight(text)) / 2;
outtextxy(x + hspace, y + vspace, text);
return false;
}
int main()
{
initgraph(1280, 640, EW_SHOWCONSOLE);
setbkmode(TRANSPARENT);
char keyID[20], keyNAME[10], keyPHONE[12], keyEMAIL[20];
int count = 0, i;
int select, tag = 1;
count = readFile(stu);
while (tag)
{
//菜单
while (true) {
getmessage(&msg);
BeginBatchDraw();
if (button(20, 20, 300, 30, "1、插入学生信息")) {
printf("请输入待插入的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
scanf("%s %s %d %s %s %s %s %s", ss.id, ss.name, &ss.age, ss.sex, ss.date, ss.address, ss.phone, ss.email);
i = add(stu, count, ss);
//如果本来不存在这个学生信息
if (i != -1)
{
printf("插入成功\n");
count = i;
}
else
printf("录入失败\n");
break;
}
if (button(20, 50, 300, 30, "2、查找学生信息(按学号)")) {
printf("请输入学号关键字:");
scanf("%s", keyID);
i = searchID(stu, count, keyID); //i = searchID(stu, count, key); 修改
if (i != -1)
{
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s %s %d %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);
}
else
printf("%s不存在!\n", keyID);
break;
}
if (button(20, 80, 300, 30, "3、查找学生信息(按姓名)")) {
printf("请输入姓名关键字:");
scanf("%s", keyNAME);
i = searchNAME(stu, count, keyNAME);
if (i != -1) {
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s %s %d %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);
}
else
printf("%s不存在!\n", keyNAME);
break;
}
if (button(20, 110, 300, 30, "4、查找学生信息(按电话)")) {
printf("请输入电话关键字:");
scanf("%s", keyPHONE);
i = searchPHONE(stu, count, keyPHONE);
if (i != -1) {
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s %s %d %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);
}
else
printf("%s不存在!\n", keyPHONE);
break;
}
if (button(20, 140, 300, 30, "5、查找学生信息(按电子邮箱)")) {
printf("请输入电子邮箱关键字:");
scanf("%s", keyEMAIL);
i = searchEMAIL(stu, count, keyEMAIL);
if (i != -1) {
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s %s %d %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);
}
else
printf("%s不存在!\n", keyEMAIL);
break;
}
if (button(20, 170, 300, 30, "6、修改学生信息")) {
printf("请输入待修改的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
scanf("%s %s %d %s %s %s %s %s", ss.id, ss.name, &ss.age, ss.sex, ss.date, ss.address, ss.phone, ss.email);
i = modify(stu, count, ss);
if (i == -1) {
printf("%s 不存在,修改失败!\n", ss.id);
}
else
printf("修改成功\n");
break;
}
}
if (button(20, 200, 300, 30, "7、删除学生信息")) {
printf("请输入待删除的学生学号:");
scanf("%s", ss.id);
i = Delete(stu, count, ss);
if (i != -1)
{
printf("删除成功\n");
count = i;
}
else
printf("%s 不存在,删除失败\n", ss.id);
break;
}
if (button(20, 230, 300, 30, "8、显示学生信息")) {
printf("学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
for (i = 0; i < count; i++)
printf("%s %s %d %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);
break;
}
if (button(20, 270, 300, 30, "0、退出系统")) {
system("cls");
printf("欢迎再次使用学生信息管理系统......\n");
tag = 0;
writeFile(stu, count);
break;
}
printf("按任意键继续......\n");
printf("%d %d %d\n", msg.message, msg.x, msg.y);
getch();
EndBatchDraw();
msg.message = 0;
}
return 0;
}
void menu()
{
printf(" *学生信息管理系统* \n");
printf("1、插入学生信息\n");
printf("2、查找学生信息(按学号)\n");
printf("3、查找学生信息(按姓名)\n");
printf("4、查找学生信息(按电话)\n");
printf("5、查找学生信息(按电子邮箱)\n");
printf("6、修改学生信息\n");
printf("7、删除学生信息\n");
printf("8、显示学生信息\n");
printf("0、退出系统\n");
printf("__________________________\n");
printf("请选择(0-8):");
}
int searchID(Student stu[], int count, char* keyID) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].id, keyID);
if (p) return i;
}
return -1;
}
int searchNAME(Student stu[], int count, char* keyNAME) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].name, keyNAME);
if (p) return i;
}
return -1;
}
int searchPHONE(Student stu[], int count, char* keyPHONE) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].phone, keyPHONE);
if (p) return i;
}
return -1;
}
int searchEMAIL(Student stu[], int count, char* keyEMAIL) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].email, keyEMAIL);
if (p) return i;
}
return -1;
}
int search(Student stu[], int count, Student ss)
{
int i;
for (i = 0; i < count; i++)
if (strcmp(stu[i].name, ss.id) == 0) return i;
return -1;
}
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
int add(Student stu[], int count, Student ss)
{
int pos;
//先判断添加的信息是否原本已有这个学生
pos = searchID(stu, count, ss.id);
//如果本来不存在,就添加
if (pos == -1)
{
stu[count] = ss;
return count + 1;
}
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)
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 %d %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 %d %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;
}