学生管理系统(C语言)(Easy-x)

     

                                                          课 程  名 称:     程序设计实践             

                                                          专     XXXXX XXXXX          

                                                          学      XXX                            

                                                          学       号      XXXXXXXXXX              

                                                          任     XXX                            

                                                          学       期 :XXXX-XXXX学年第X学期   



                                                        课程报告任务书

 

学生成绩管理系统

主要

内容

用C语言开发一个简单的学生成绩管理系统。实现学生信息管理,并且有界面和跳转。
【数据结构】
1.学生成绩信息。包括:学号,姓名,成绩。
2.登陆账号信息。包括:密码、 权限级别(区别系统管理员用户和普通用户)。
3.学生个人信息。包括:学号,姓名,性别,学院,专业,联系方式。
【系统实现功能】
1.系统登陆
  使用登陆账号和密码登陆,判断用户编号和密码是否一致,正确,则根据角色不同显示不同的界面。管理员显示管理员菜单。普通用户显示普通用户界面。
2.系统管理员
(1)学生信息管理:学生信息和成绩的增、删、改、查功能。
(2)全部展示所有学生的信息和成绩在一个交互界面上。
3. 普通用户(学生)
(1)学生可以注册自己的个人信息。
(2)学生可以根据自己的学号查询自己的个人信息和成绩。

任务

要求

一、提交材料应包括:

(1)系统源代码

(2)课程报告

二、整个设计过程具体要求

(1)需求分析

要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;要有系统结构图

(2)设计过程

要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等),至少有一个关键模块的流程图。

(3)实现过程

要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;

(4)总结阶段

按照要求完成系统设计和实现报告,并进行总结。

 目录

一、需求分析. .........................................3

二、概要设计.......................................... 3

三、详细设计. .........................................4

(一)函数变量名的定义.................. 4

(二)功能函数模块展示. .................6

(三)主函数.................................... 6

(四)管理员界面............................. 7

(五)管理员.................................... 8

(六)首页学分表............................. 9

(七)次页学分表. ..........................12

(八)尾页学分表. ..........................13

(九)首页学生信息表................... .14

(十)次页学生信息表................... .16

(十一)尾页学生信息表.................18

(十二)对学生数据进行操作. ........19

(十三)录入学生信息.................... 20

(十四)删除学生信息.....................29

(十五)查找学生信息.....................34

(十六)修改学生信息.....................37

(十七)学生窗口. .................... .....45

(十八)载入学生数目. ...................46

(十九)存储学生数目.....................46

(二十)学生注册. .................... .....46

(二十一)学生登录..................... .. 52

四、调试分析..................... ....................55

五、测试结果..................... ....................55

六、课程心得总结. .................... ............61

七、参考文献. .................... ...................61

一、需求分析

        学生基本信息和学生学分信息动态化绑定,管理员与学生操作相结合的学生信息管理系统,与此同时丰富了一些界面的跳转和防止用户错误输入的提醒。

二、概要设计

        总览流程图,如图1-1所示,进入首页后,可以选择进入管理员界面或者学生操作界面。进入管理员界面后,可以选择所有学生的数据或者对他们的数据进行增删查改。进入学生操作界面后,可以选择学生登录和学生注册。

图1-1 总流程图

        管理员展示流程图,如图2-1所示,进入管理员界面后,可以显示所有学生的学分表和信息表,也可以对他们的数据进行增加,删除,修改,查询的操作。

图2-1 管理员流程图

        学生界面流程图,如图3-1所示,进入学生界面,可以选择学生登录或者注册,如果你登录没有注册的学号信息的话,会跳转到注册页面去完成相应的注册操作。

图3-1 学生流程图

三、详细设计

(一)函数变量名的定义

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<graphics.h>#define RecordNums 42//结构体数组数量——可以记录学生数据最大容量
#define Transverse 173//信息表格横向
#define longitudinal 38//信息表格纵向
#define Transverse_s 145//学分表格横向
#define longitudinal_s 39//学分表格纵向typedef struct Student//学生信息结构体定义
{char s_studentID[15];//学号char s_Name[15];//姓名char s_gender[15];//性别char s_faculty[15];//院系char s_speciality[15];//专业char s_grade[15];//年级char s_number[15];//手机号
}Student;typedef struct Score//学生学分结构体定义
{char studentID[15];//学号char Name[15];//姓名char compulsory[6];//必修char select[6];//选修char morality[6];//德育char innovate[6];//创新char other[6];//其它char sum[6];//总和
}Score;typedef struct app//学生信息缓冲结构体
{char s_studentID[15];//学号char s_Name[15];//姓名char s_gender[15];//性别char s_faculty[15];//院系char s_speciality[15];//专业char s_grade[15];//年级char s_number[15];//手机号
}app;typedef struct add//学生学分缓冲结构体
{char studentID[15];//学号char Name[15];//姓名char compulsory[6];//必修char select[6];//选修char morality[6];//德育char innovate[6];//创新char other[6];//其它char sum[6];//总和
}add;

(二)功能函数模块展示

void main();//主窗口
void password();//管理员认证
void managewindows();//管理员
void summary();//对学生数据进行操作
void information_homepage();//首页学生信息表
void information_secondarypage();//次页学生信息表
void credit_homepage();//首页学分表
void credit_secondarypage();//次页学分表
void information_secondarypage_final();//尾页学生信息表
void credit_secondarypage_final();//尾页学生学分表
void increase();//录入学生信息
void erasure();//删除学生信息
void view();//查找学生信息
void correct();//修改学生信息
void studentwindows();//学生窗口
void student_registration();//学生注册
void student_login();// 学生登录

(三)主函数

void main()//主窗口的建立
{initgraph(1280, 720);IMAGE host_a;loadimage(&host_a, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\首页.png", 1280,720);HWND hnd = GetHWnd();SetWindowText(hnd, "学生信息管理系统");putimage(0, 0, &host_a);settextcolor(WHITE);//设置字体颜色为白色setbkmode(TRANSPARENT);//消除字体背景颜色settextstyle(40,0,_T("Consolas"));//设置字体大小while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG host_b = GetMouseMsg();//设置变量引入消息switch (host_b.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键if (host_b.x > 667.02 && host_b.x < 854.47 && host_b.y>401.39 && host_b.y < 454.68){password();//进入管理员界面break;}else if (host_b.x > 683.65 && host_b.x< 837.08 && host_b.y> 500.50 && host_b.y < 600.17){studentwindows();//进入学生界面break;}}}}
}

全局变量:

int nowstudentnums=0;//学生信息数据个数
//int num = 0;//统计学生人数
char code[20] = "666666";//管理员密码
int interdict=0;//阻断循环变量Student information[RecordNums];//创建学生信息结构体数组Score credit[RecordNums];//创建学生学分结构体数组app information_buffer;//创建学生信息缓冲结构体add credit_buffer;//创建学生学分缓冲结构体

(四)管理员界面

void password()//管理员认证
{char password_a[15];TCHAR password_s[] = _T("输入管理员密码");InputBox(password_a, 15, password_s);if (strcmp(code, password_a) == 0){managewindows();}else{HWND hnd = GetHWnd();int isok=MessageBox(hnd, "输入密码错误,请重新输入", "错误提示", MB_OKCANCEL);if (isok == IDOK){password();}else if (IDCANCEL == isok){main();}}
}

(五)管理员

void managewindows()//管理员
{IMAGE manage_a;loadimage(&manage_a, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\管理员操作界面.png", 1280,720);putimage(0, 0, &manage_a);FILE* informationfile_s;//定义存取学生信息文件指针FILE* creditfile_s;//定义存取学分信息文件指针//打开文档进行分析操作informationfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r+");creditfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r+");//提取学生学分数据for (int i = 0; i < 42; i++){//判断数据是否读完if (feof(creditfile_s) == 1)//informationfile_s{break;}//将文件数据保存在结构数组中fscanf(informationfile_s, "%s %s %s %s %s %s %s\n",information[i].s_studentID,information[i].s_Name,information[i].s_gender,information[i].s_faculty,information[i].s_speciality,information[i].s_grade,information[i].s_number);fscanf(creditfile_s, "%s %s %s %s %s %s %s %s\n",credit[i].studentID,credit[i].Name,credit[i].compulsory,credit[i].select,credit[i].morality,credit[i].innovate,credit[i].other,credit[i].sum);}fclose(informationfile_s);//关闭文件fclose(creditfile_s);//关闭文件while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG manage_b = GetMouseMsg();//设置变量引入消息switch (manage_b.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键if (manage_b.x > 703.68 && manage_b.x < 1038.89 && manage_b.y>351.12 && manage_b.y < 410.83){credit_homepage();//首页学分表break;}else if (manage_b.x >681.00 && manage_b.x <1054.38&& manage_b.y>507.21 && manage_b.y < 567.31){summary();//对学生数据进行操作break;}else if (manage_b.x > 21.92 && manage_b.x < 122.82 && manage_b.y>19.28 && manage_b.y < 80.88){main();//主窗口break;}}}}
}

 

(六)首页学分表

void credit_homepage()//首页学分表
{IMAGE creditpicture_s;//定义界面图片指针loadimage(&creditpicture_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\首页学生学分表.png", 1280, 720);putimage(0, 0, &creditpicture_s);settextstyle(25, 0, _T("Consolas"));//设置字体大小settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色//冒泡排序法——总分排序int i = 0, j;for (i; i < nowstudentnums; i++){for (j = 0; j < nowstudentnums - i - 1; j++){if (atof(credit[j].sum) > atof(credit[j + 1].sum)){strcpy(credit_buffer.sum, credit[j].sum);strcpy(credit[j].sum, credit[j + 1].sum);strcpy(credit[j + 1].sum, credit_buffer.sum);strcpy(credit_buffer.studentID, credit[j].studentID);strcpy(credit[j].studentID, credit[j + 1].studentID);strcpy(credit[j + 1].studentID, credit_buffer.studentID);strcpy(credit_buffer.Name, credit[j].Name);strcpy(credit[j].Name, credit[j + 1].Name);strcpy(credit[j + 1].Name, credit_buffer.Name);strcpy(credit_buffer.compulsory, credit[j].compulsory);strcpy(credit[j].compulsory, credit[j + 1].compulsory);strcpy(credit[j + 1].compulsory, credit_buffer.compulsory);strcpy(credit_buffer.select, credit[j].select);strcpy(credit[j].select, credit[j + 1].select);strcpy(credit[j + 1].select, credit_buffer.select);strcpy(credit_buffer.morality, credit[j].morality);strcpy(credit[j].morality, credit[j + 1].morality);strcpy(credit[j + 1].morality, credit_buffer.morality);strcpy(credit_buffer.innovate, credit[j].innovate);strcpy(credit[j].innovate, credit[j + 1].innovate);strcpy(credit[j + 1].innovate, credit_buffer.innovate);strcpy(credit_buffer.other, credit[j].other);strcpy(credit[j].other, credit[j + 1].other);strcpy(credit[j + 1].other, credit_buffer.other);}}}//输出数据for (int b = 0; b < 14; b++){//将结构数组中数据输出到主表格outtextxy(63, 113 + b * longitudinal_s, credit[b].studentID);outtextxy(245, 113 + b * longitudinal_s, credit[b].Name);outtextxy(352, 113 + b * longitudinal_s, credit[b].compulsory);outtextxy(352+Transverse_s, 113 + b * longitudinal_s, credit[b].select);outtextxy(352 +2 * Transverse_s , 113+ b * longitudinal_s, credit[b].morality);outtextxy(352 + 3 * Transverse_s, 113 + b * longitudinal_s, credit[b].innovate);outtextxy(352 +4 * Transverse_s , 113 + b * longitudinal_s, credit[b].other);outtextxy(352 + 5* Transverse_s, 113 + b * longitudinal_s, credit[b].sum);}//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG credit_s = GetMouseMsg();//设置变量引入消息switch (credit_s.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(返回)按钮if (credit_s.x > 21.54 && credit_s.x < 102.04 && credit_s.y>661.42 && credit_s.y < 706.39){managewindows();//管理员界面break;}//(显示学生基本信息)按钮else if (credit_s.x > 915.69 && credit_s.x < 1094.07 && credit_s.y>661.8 && credit_s.y < 706.39){information_homepage();//首页学生信息表break;}//(下一页)按钮else if (credit_s.x > 1114.1 && credit_s.x < 1221.42 && credit_s.y>661.8 && credit_s.y < 706.39){credit_secondarypage();//次页学分表break;}}}}
}

 

(七)次页学分表

void credit_secondarypage()//次页学分表
{IMAGE creditpicture_c;//定义界面图片指针loadimage(&creditpicture_c, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\次页学生学分表.png", 1280, 720);putimage(0, 0, &creditpicture_c);settextstyle(25, 0, _T("Consolas"));//设置字体大小settextcolor(WHITE);//设置字体颜色为白色setbkmode(TRANSPARENT);//消除字体背景颜色int a = 0;//输出数据for (int b = 14; b < 28; b++){if (strlen(credit[b].studentID) == 0){break;}//将结构数组中数据输出到主表格outtextxy(63, 84 + a * longitudinal_s, credit[b].studentID);outtextxy(245, 84 + a * longitudinal_s, credit[b].Name);outtextxy(352, 84 + a * longitudinal_s, credit[b].compulsory);outtextxy(352 + Transverse_s, 84 + a * longitudinal_s, credit[b].select);outtextxy(352 + 2 * Transverse_s, 84 + a * longitudinal_s, credit[b].morality);outtextxy(352 + 3 * Transverse_s, 84+ a * longitudinal_s, credit[b].innovate);outtextxy(352 + 4 * Transverse_s, 84 + a * longitudinal_s, credit[b].other);outtextxy(352 + 5 * Transverse_s, 84+ a * longitudinal_s, credit[b].sum);a++;}//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG credit_c = GetMouseMsg();//设置变量引入消息switch (credit_c.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(上一页)按钮if (credit_c.x > 973.51 && credit_c.x < 1074.04 && credit_c.y>650.83 && credit_c.y < 696.19){credit_homepage();//首页学分表break;}//(下一页)按钮else if (credit_c.x > 1107.29 && credit_c.x < 1213.49 && credit_c.y>650.83 && credit_c.y < 696.19){credit_secondarypage_final();//尾页学生学分表break;}}}}
}

(八)尾页学分表

void credit_secondarypage_final()//尾页学生学分表
{IMAGE creditpicture_w;//定义界面图片指针loadimage(&creditpicture_w, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\尾页学生学分表.png", 1280, 720);putimage(0, 0, &creditpicture_w);settextstyle(25, 0, _T("Consolas"));//设置字体大小settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色int a = 0;//输出数据for (int b = 28; b < 42; b++){if (strlen(credit[b].studentID)==0){break;}//将结构数组中数据输出到主表格outtextxy(63, 84 + a * longitudinal_s, credit[b].studentID);outtextxy(245, 84 + a * longitudinal_s, credit[b].Name);outtextxy(352, 84 + a * longitudinal_s, credit[b].compulsory);outtextxy(352 + Transverse_s, 84 + a * longitudinal_s, credit[b].select);outtextxy(352 + 2 * Transverse_s, 84 + a * longitudinal_s, credit[b].morality);outtextxy(352 + 3 * Transverse_s, 84 + a * longitudinal_s, credit[b].innovate);outtextxy(352 + 4 * Transverse_s, 84 + a * longitudinal_s, credit[b].other);outtextxy(352 + 5 * Transverse_s, 84 + a * longitudinal_s, credit[b].sum);a++;}//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG credit_w = GetMouseMsg();//设置变量引入消息switch (credit_w.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(上一页)按钮if (credit_w.x > 1120.52 && credit_w.x < 1219.91 && credit_w.y>649.7 && credit_w.y < 693.92){credit_secondarypage();//次页学分表break;}}}}
}

 

(九)首页学生信息表

void information_homepage()//首页学生信息表
{IMAGE informationpicture_s;//定义界面图片指针loadimage(&informationpicture_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\首页学生信息表.png", 1280, 720);putimage(0, 0, &informationpicture_s);settextstyle(25, 0, _T("Consolas"));//设置字体大小settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色UseStudentNumber();//载入学生数目//冒泡排序法——学号排序int i = 0, j;for (i = 0; i < nowstudentnums; i++){for (j = 0; j < nowstudentnums - i - 1; j++){if (atof(information[j].s_studentID) > atof(information[j + 1].s_studentID)){strcpy(information_buffer.s_studentID, information[j].s_studentID);strcpy(information[j].s_studentID, information[j + 1].s_studentID);strcpy(information[j + 1].s_studentID, information_buffer.s_studentID);strcpy(information_buffer.s_Name, information[j].s_Name);strcpy(information[j].s_Name, information[j + 1].s_Name);strcpy(information[j + 1].s_Name, information_buffer.s_Name);strcpy(information_buffer.s_gender, information[j].s_gender);strcpy(information[j].s_gender, information[j + 1].s_gender);strcpy(information[j + 1].s_gender, information_buffer.s_gender);strcpy(information_buffer.s_faculty, information[j].s_faculty);strcpy(information[j].s_faculty, information[j + 1].s_faculty);strcpy(information[j + 1].s_faculty, information_buffer.s_faculty);strcpy(information_buffer.s_speciality, information[j].s_speciality);strcpy(information[j].s_speciality, information[j + 1].s_speciality);strcpy(information[j + 1].s_speciality, information_buffer.s_speciality);strcpy(information_buffer.s_grade, information[j].s_grade);strcpy(information[j].s_grade, information[j + 1].s_grade);strcpy(information[j + 1].s_grade, information_buffer.s_grade);strcpy(information_buffer.s_number, information[j].s_number);strcpy(information[j].s_number, information[j + 1].s_number);strcpy(information[j + 1].s_number, information_buffer.s_number);}}}//输出数据for (int a = 0; a < 14; a++){//将结构数组中数据输出到表格outtextxy(33.25, 118 + a * longitudinal, information[a].s_studentID);//credit[b].studentIDouttextxy(33.25+ Transverse, 118 + a * longitudinal, information[a].s_Name);outtextxy(33.25 + 2 * Transverse, 118 + a * longitudinal, information[a].s_gender);outtextxy(33.25 + 3 * Transverse, 118 + a * longitudinal, information[a].s_faculty);outtextxy(33.25+ 4 * Transverse, 118+ a * longitudinal, information[a].s_speciality);outtextxy(33.25 + 5 * Transverse, 118 + a * longitudinal, information[a].s_grade);outtextxy(33.25 + 6 * Transverse, 118 + a * longitudinal, information[a].s_number);}//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG information_s = GetMouseMsg();//设置变量引入消息switch (information_s.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(返回)按钮if (information_s.x > 21.24 && information_s.x < 122.44 && information_s.y>663.31 && information_s.y < 706.77){managewindows();//管理员界面break;}//(显示学分)按钮else if (information_s.x > 956.13 && information_s.x < 1085.75 && information_s.y>663.31 && information_s.y < 706.77){credit_homepage();//首页学分表break;}//(下一页)按钮else if (information_s.x > 1122.41 && information_s.x < 1227.47 && information_s.y>633.31 && information_s.y < 706.77){information_secondarypage();//次页学生信息表break;}}}}
}

 

(十)次页学生信息表

void information_secondarypage()//次页学生信息表
{IMAGE informationpicture_c;//定义界面图片指针loadimage(&informationpicture_c, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\次页学生信息表.png", 1280, 720);putimage(0, 0, &informationpicture_c);settextstyle(25, 0, _T("Consolas"));//设置字体大小settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色int b=0;//输出数据for (int a = 14; a <28 ; a++){//将结构数组中数据输出到表格outtextxy(33.26, 90 + b * longitudinal, information[a].s_studentID);outtextxy(33.26 + Transverse, 90 + b * longitudinal, information[a].s_Name);outtextxy(33.26 + 2 * Transverse, 90 + b * longitudinal, information[a].s_gender);outtextxy(33.26 + 3 * Transverse, 90 + b * longitudinal, information[a].s_faculty);outtextxy(33.26 + 4 * Transverse, 90 + b* longitudinal, information[a].s_speciality);outtextxy(33.26 + 5 * Transverse, 90 + b * longitudinal, information[a].s_grade);outtextxy(33.26 + 6 * Transverse, 90 + b * longitudinal, information[a].s_number);b++;}//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG information_c = GetMouseMsg();//设置变量引入消息switch (information_c.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(上一页)按钮if (information_c.x > 996.94 && information_c.x < 1100.87 && information_c.y>651.21 && information_c.y < 695.07){information_homepage();//首页学生信息表break;} //(下一页)按钮else if (information_c.x > 1117.11 && information_c.x < 1221.42 && information_c.y>651.21 && information_c.y < 695.44){information_secondarypage_final();//尾页学生信息表break;}}}}
}

 

(十一)尾页学生信息表

void information_secondarypage_final()//尾页学生信息表
{IMAGE informationpicture_w;//定义界面图片指针loadimage(&informationpicture_w, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\尾页学生信息表.png", 1280, 720);putimage(0, 0, &informationpicture_w);settextstyle(25, 0, _T("Consolas"));//设置字体大小settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色int b = 0;//输出数据for (int a =28; a < 42; a++){if (strlen(information[a].s_studentID)==0){break;}//将结构数组中数据输出到表格outtextxy(33.26, 90 + b * longitudinal, information[a].s_studentID);outtextxy(33.26 + Transverse, 90 + b * longitudinal, information[a].s_Name);outtextxy(33.26 + 2 * Transverse, 90 + b * longitudinal, information[a].s_gender);outtextxy(33.26 + 3 * Transverse, 90 + b * longitudinal, information[a].s_faculty);outtextxy(33.26 + 4 * Transverse, 90 + b * longitudinal, information[a].s_speciality);outtextxy(33.26 + 5 * Transverse, 90 + b * longitudinal, information[a].s_grade);outtextxy(33.26 + 6 * Transverse, 90 + b * longitudinal, information[a].s_number);b++;}//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG information_w = GetMouseMsg();//设置变量引入消息switch (information_w.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(上一页)按钮if (information_w.x > 1138.66 && information_w.x < 1246.74 && information_w.y>656.13 && information_w.y < 700.72){information_secondarypage();//次页学生信息表break;}}}}
}

 

(十二)对学生数据进行操作

void summary()//对学生数据进行操作
{IMAGE summary_s;//定义界面图片指针loadimage(&summary_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\增删查改主界面.png", 1280, 720);putimage(0, 0, &summary_s);//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG summary_q = GetMouseMsg();//设置变量引入消息switch (summary_q.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(返回)按钮if (summary_q.x > 25.70 && summary_q.x < 101.28 && summary_q.y>22.30&& summary_q.y < 67.28){managewindows();//管理员break;}//(录入学生信息)按钮else if(summary_q.x > 758.85 && summary_q.x <985.98&& summary_q.y>232.44 && summary_q.y < 330.24)//420{if (strlen(information[41].s_studentID)!=0){int isok = MessageBox(NULL, "数据库已满,无法存入数据", "数据输入", MB_OKCANCEL);//创建提示窗口}else{increase();//录入学生信息break;}}//(删除学生信息)按钮else if (summary_q.x > 758.85 && summary_q.x < 985.98&& summary_q.y>325.04 && summary_q.y < 420.98){erasure();//删除学生信息break;}//(查找学生信息)按钮else if (summary_q.x > 758.85 && summary_q.x < 985.98 && summary_q.y>417.64 && summary_q.y < 474.72){view();//查找学生信息break;}//(修改学生信息)按钮else if (summary_q.x > 758.85 && summary_q.x < 985.98 && summary_q.y>510.24 && summary_q.y < 568.46){correct();//修改学生信息break;}}}}
}

 

(十三)录入学生信息

void increase()
//录入学生信息
{IMAGE increase_s;//定义界面图片指针loadimage(&increase_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\录入学生信息.png", 1280, 720);putimage(0, 0, &increase_s);settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色settextstyle(30, 0, _T("Consolas"));FILE* informationfile_s;//定义存取学生信息文件指针FILE* creditfile_s;//定义存取学分信息文件指针//打开文档进行分析操作informationfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r+");creditfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r+");UseStudentNumber();//载入学生数目//提取学生学分数据for (int i = 0; i < 42; i++){//判断数据是否读完if (feof(informationfile_s) == 1){break;}//将文件数据保存在结构数组中fscanf(informationfile_s, "%s %s %s %s %s %s %s\n",information[i].s_studentID,information[i].s_Name,information[i].s_gender,information[i].s_faculty,information[i].s_speciality,information[i].s_grade,information[i].s_number);fscanf(creditfile_s, "%s %s %s %s %s %s %s %s\n",credit[i].studentID,credit[i].Name,credit[i].compulsory,credit[i].select,credit[i].morality,credit[i].innovate,credit[i].other,credit[i].sum);}fclose(informationfile_s);//关闭文件fclose(creditfile_s);//关闭文件int accumulation = 0;interdict = 0;//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG increase_q = GetMouseMsg();//设置变量引入消息switch (increase_q.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(返回)按钮if (increase_q.x > 26.45 && increase_q.x < 101.66 && increase_q.y>23.43 && increase_q.y < 60.28){summary();//对学生数据进行操作break;}//(学号)格else if (increase_q.x > 63.87 && increase_q.x < 255.47 && increase_q.y>317.86 && increase_q.y < 359.81){TCHAR InputWindow_studentID[] = _T("请输入该学生的学号");InputBox(information_buffer.s_studentID, 15, InputWindow_studentID);//检测是否重复for (int n = 0; n < nowstudentnums; n++)//找的话是小于,不呢能等于{if (strcmp(information_buffer.s_studentID, information[n].s_studentID) == 0){HWND hnd = GetHWnd();int isok = MessageBox(hnd, "输入学号重复错误,请重新输入", "错误提示", MB_OKCANCEL);if (isok == IDOK){   interdict = 1;break;}else if (IDCANCEL == isok){interdict = 1;break;}}}if (interdict == 1){continue;}//检测完成——进行屏幕输出outtextxy(63.87, 322.86, information_buffer.s_studentID);//保存在结构数组中strcpy(information[nowstudentnums].s_studentID, information_buffer.s_studentID);strcpy(credit[nowstudentnums].studentID, information_buffer.s_studentID);accumulation += 1;}//(姓名)格else if (increase_q.x > 255.47 && increase_q.x < 379.43 && increase_q.y>317.86 && increase_q.y < 359.81){TCHAR InputWindow_Name[] = _T("请输入该学生的姓名");InputBox(information_buffer.s_Name, 15, InputWindow_Name);//进行输出outtextxy(255.47, 322.86, information_buffer.s_Name);//保存在结构数组中strcpy(information[nowstudentnums].s_Name, information_buffer.s_Name);strcpy(credit[nowstudentnums].Name, information_buffer.s_Name);accumulation += 1;}//(性别)格else if (increase_q.x > 379.43 && increase_q.x < 452.36 && increase_q.y>317.86 && increase_q.y < 359.81){TCHAR InputWindow_gender[] = _T("请输入该学生的性别");InputBox(information_buffer.s_gender, 15, InputWindow_gender);//进行输出outtextxy(379.43, 322.86, information_buffer.s_gender);//保存在结构数组中strcpy(information[nowstudentnums].s_gender, information_buffer.s_gender);accumulation += 1;}//(院系)格else if (increase_q.x > 452.36 && increase_q.x < 691.59 && increase_q.y>317.86 && increase_q.y < 359.81){TCHAR InputWindow_faculty[] = _T("请输入该学生的院系全称");InputBox(information_buffer.s_faculty, 15, InputWindow_faculty);//进行输出outtextxy(452.36, 322.86, information_buffer.s_faculty);//保存在结构数组中strcpy(information[nowstudentnums].s_faculty, information_buffer.s_faculty);accumulation += 1;}//(专业)格else if (increase_q.x > 691.59 && increase_q.x < 865.43 && increase_q.y>317.86 && increase_q.y < 359.81){TCHAR InputWindow_speciality[] = _T("请输入该学生的专业");InputBox(information_buffer.s_speciality, 15, InputWindow_speciality);//进行输出outtextxy(691.59, 322.86, information_buffer.s_speciality);//保存在结构数组中strcpy(information[nowstudentnums].s_speciality, information_buffer.s_speciality);accumulation += 1;}//(年级)格else if (increase_q.x > 865.43 && increase_q.x < 987.12 && increase_q.y>317.86 && increase_q.y < 359.81){TCHAR InputWindow_grade[] = _T("请输入该学生的年级,例(2201)22届1班");InputBox(information_buffer.s_grade, 15, InputWindow_grade);//进行输出outtextxy(865.43, 322.86, information_buffer.s_grade);//保存在结构数组中strcpy(information[nowstudentnums].s_grade, information_buffer.s_grade);accumulation += 1;}//(手机号)格else if (increase_q.x > 987.12 && increase_q.x < 1216.51 && increase_q.y>317.86 && increase_q.y < 359.81){TCHAR InputWindow_number[] = _T("请输入该学生的手机号");InputBox(information_buffer.s_number, 15, InputWindow_number);// 进行输出outtextxy(987.12, 322.86, information_buffer.s_number);//保存在结构数组中strcpy(information[nowstudentnums].s_number, information_buffer.s_number);accumulation += 1;}//(必修)格else if (increase_q.x > 63 && increase_q.x <144 && increase_q.y>459.21 && increase_q.y < 500){TCHAR InputWimdow_compulsory[] = _T("请输入该学生的必修");InputBox(credit_buffer.compulsory, 15, InputWimdow_compulsory);// 进行输出outtextxy(63.87, 464.21, credit_buffer.compulsory);//保存在结构数组中strcpy(credit[nowstudentnums].compulsory, credit_buffer.compulsory);accumulation += 1;}//(选修)格else if (increase_q.x > 144.74 && increase_q.x < 225.61 && increase_q.y>459.21 && increase_q.y < 500.03){TCHAR InputWimdow_select[] = _T("请输入该学生的选修");InputBox(credit_buffer.select, 15, InputWimdow_select);// 进行输出outtextxy(145, 464, credit_buffer.select);//保存在结构数组中strcpy(credit[nowstudentnums].select, credit_buffer.select);accumulation += 1;}//(德育)格else if (increase_q.x > 225.61 && increase_q.x < 306.48 && increase_q.y>459.21 && increase_q.y < 500.03){TCHAR InputWimdow_morality[] = _T("请输入该学生的德育");InputBox(credit_buffer.morality, 15, InputWimdow_morality);// 进行输出outtextxy(226, 464, credit_buffer.morality);//保存在结构数组中strcpy(credit[nowstudentnums].morality, credit_buffer.morality);accumulation += 1;}//(选修)格else if (increase_q.x > 27 && increase_q.x < 102 && increase_q.y>592 && increase_q.y < 632){TCHAR InputWimdow_select[] = _T("请输入该学生的选修");InputBox(credit_buffer.select, 15, InputWimdow_select);// 进行输出outtextxy(307, 464, credit_buffer.select);//保存在结构数组中strcpy(credit[nowstudentnums].select, credit_buffer.select);accumulation += 1;}//(创新)格else if (increase_q.x > 306.48 && increase_q.x < 387.35 && increase_q.y>459.21 && increase_q.y < 500.03){TCHAR InputWimdow_innovate[] = _T("请输入该学生的创新");InputBox(credit_buffer.innovate, 15, InputWimdow_innovate);// 进行输出outtextxy(307, 464, credit_buffer.innovate);//保存在结构数组中strcpy(credit[nowstudentnums].innovate, credit_buffer.innovate);accumulation += 1;}//(其它)格else if (increase_q.x > 387.35 && increase_q.x < 468.22 && increase_q.y>459.21 && increase_q.y < 500.03){TCHAR InputWimdow_other[] = _T("请输入该学生的其它学分");InputBox(credit_buffer.other, 15, InputWimdow_other);// 进行输出outtextxy(388, 464, credit_buffer.other);//保存在结构数组中strcpy(credit[nowstudentnums].other, credit_buffer.other);accumulation += 1;}//(总分)格else if (increase_q.x > 468.22 && increase_q.x < 549.09 && increase_q.y>459.21 && increase_q.y < 500.03){//计算总分int sum_s = atof(credit[nowstudentnums].compulsory) + atof(credit[nowstudentnums].select) + atof(credit[nowstudentnums].morality) + atof(credit[nowstudentnums].innovate) + atof(credit[nowstudentnums].other);//赋予数组sprintf(credit[nowstudentnums].sum, "%d", sum_s);//进行输出outtextxy(469, 464, credit[nowstudentnums].sum);accumulation += 1;}//(确定)按钮else if (increase_q.x > 853.33 && increase_q.x < 974.06 && increase_q.y>588.47 && increase_q.y < 642.14){//如果有一个没输入完,就不能保存if (accumulation !=13){HWND hnd = GetHWnd();int isok = MessageBox(hnd, "数据没有录完,请继续录入", "错误提示", MB_OKCANCEL);if (isok == IDOK){interdict = 1;continue;}else if (IDCANCEL == isok){interdict = 1;continue;}}else{FILE* increase_g;//定义输入信息文件指针FILE* increase_l;//定义存取信息文件指针//打开文档进行分析操作increase_g = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "w+");increase_l = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "w+");UseStudentNumber();//载入学生人数int y;//循环变量//存入学生数据for (y = 0; y <= nowstudentnums ; y++)//42{//判断数据是否存完if (strlen(information[y].s_studentID) == 0){break;}//将结构数据保存在文件中fprintf(increase_g, "%s %s %s %s %s %s %s\n",information[y].s_studentID,information[y].s_Name,information[y].s_gender,information[y].s_faculty,information[y].s_speciality,information[y].s_grade,information[y].s_number);fprintf(increase_l, "%s %s %s %s %s %s %s %s\n",credit[y].studentID,credit[y].Name,credit[y].compulsory,credit[y].select,credit[y].morality,credit[y].innovate,credit[y].other,credit[y].sum);}fclose(increase_g);//关闭文件fclose(increase_l);//关闭文件nowstudentnums = nowstudentnums + 1;SaveStudentNumber();//记录学生人数HWND hnd = GetHWnd();int isok = MessageBox(hnd, "录入成功!", "成功提示", MB_OKCANCEL);if (isok == IDOK){interdict = 1;continue;}else if (IDCANCEL == isok){interdict = 1;continue;}}}//(再填下一个)按钮else if (increase_q.x > 975.78 && increase_q.x < 1163.60 && increase_q.y>588.47 && increase_q.y < 642.14){increase();//录入学生信息UseStudentNumber();//载入学生数目}}}}
}

(十四)删除学生信息

void erasure()//删除学生信息
{IMAGE erasure_s;//定义界面图片指针loadimage(&erasure_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\删除学生信息.png", 1280, 720);putimage(0, 0, &erasure_s);settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色UseStudentNumber();//载入学生数目FILE* informationfile_s;//定义存取学生信息文件指针FILE* creditfile_s;//定义存取学分信息文件指针//打开文档进行分析操作informationfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r");creditfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r");//提取学生学分数据for (int i = 0; i < 42; i++){//判断数据是否读完if (feof(informationfile_s) == 1){break;}//将文件数据保存在结构数组中fscanf(informationfile_s, "%s %s %s %s %s %s %s\n",information[i].s_studentID,information[i].s_Name,information[i].s_gender,information[i].s_faculty,information[i].s_speciality,information[i].s_grade,information[i].s_number);fscanf(creditfile_s, "%s %s %s %s %s %s %s %s\n",credit[i].studentID,credit[i].Name,credit[i].compulsory,credit[i].select,credit[i].morality,credit[i].innovate,credit[i].other,credit[i].sum);}fclose(informationfile_s);//关闭文件fclose(creditfile_s);//关闭文件int u = 0,k=0;//获取鼠标操作while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG erasure_b = GetMouseMsg();//设置变量引入消息switch (erasure_b.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//返回按钮if (erasure_b.x >26.45 && erasure_b.x < 101.66&& erasure_b.y>23.43 && erasure_b.y < 67.28){summary();//对学生数据进行操作break;}//学号按钮else if (erasure_b.x > 410 && erasure_b.x < 810 && erasure_b.y>270 && erasure_b.y < 370){TCHAR InputWindow_studentID[] = _T("请输入要删除学生的学号");InputBox(information_buffer.s_studentID, 15, InputWindow_studentID);//定位该生所在位置for (u ; u < 42; u++){if (strcmp(information_buffer.s_studentID, information[u].s_studentID) == 0){break;}}for (k; k < 42; k++){if (strcmp(information_buffer.s_studentID, credit[k].studentID) == 0){break;}}if (u == 42){HWND mmm = GetHWnd();int i = MessageBox(mmm, "没有该学生,无法进行删除", "错误提示", MB_OKCANCEL);if (i == IDOK){continue;}else if (IDCANCEL == i){continue;}}//在指定的图框中显示outtextxy(450, 270.24, information[u].s_studentID);settextstyle(25, 0, _T("Consolas"));outtextxy(170.06, 444.47, information[u].s_Name);outtextxy(297.42, 444.47, information[u].s_gender);outtextxy(369.98, 444.47, information[u].s_faculty);outtextxy(608.44, 444.47, information[u].s_speciality);outtextxy(781.15, 444.47, information[u].s_grade);outtextxy(903.97, 444.47, information[u].s_number);}//确定按钮else if (erasure_b.x > 853.71 && erasure_b.x < 947.43 && erasure_b.y>588.09 && erasure_b.y < 643.65){//char a[15] = "555555555555";//strcpy(information[u].s_studentID, a);FILE* erasure_g;//定义输入信息文件指针FILE* erasure_l;//定义存取信息文件指针//打开文档进行分析操作erasure_g = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "w+");erasure_l = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "w+");UseStudentNumber();//载入学生数据nowstudentnums = nowstudentnums - 1;//删除后学生人数减1int y;//循环变量//存入学生数据for (y = 0; y <= nowstudentnums; y++){if (y == u){continue;}//将结构数据保存在文件中fprintf(erasure_g, "%s %s %s %s %s %s %s\n",information[y].s_studentID,information[y].s_Name,information[y].s_gender,information[y].s_faculty,information[y].s_speciality,information[y].s_grade,information[y].s_number);}for (y = 0; y < nowstudentnums; y++)//for (y = 0; y < 42; y++){if (y == k){continue;}fprintf(erasure_l, "%s %s %s %s %s %s %s %s\n",credit[y].studentID,credit[y].Name,credit[y].compulsory,credit[y].select,credit[y].morality,credit[y].innovate,credit[y].other,credit[y].sum);}fclose(erasure_g);//关闭文件fclose(erasure_l);//关闭文件//nowstudentnums = nowstudentnums - 1;//删除后学生人数减1SaveStudentNumber();//记录当前学生人数//打开文档进行分析操作erasure_g = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r+");erasure_l = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r+");int o;//学生信息数据个数//提取学生学分数据for (o = 0; o < 42; o++){//判断数据是否读完if (feof(erasure_g) == 1){break;}//将文件数据保存在结构数组中fscanf(erasure_g, "%s %s %s %s %s %s %s\n",information[o].s_studentID,information[o].s_Name,information[o].s_gender,information[o].s_faculty,information[o].s_speciality,information[o].s_grade,information[o].s_number);fscanf(erasure_l, "%s %s %s %s %s %s %s %s\n",credit[o].studentID,credit[o].Name,credit[o].compulsory,credit[o].select,credit[o].morality,credit[o].innovate,credit[o].other,credit[o].sum);}fclose(erasure_g);//关闭文件fclose(erasure_l);//关闭文件HWND mmm = GetHWnd();int i = MessageBox(mmm, "删除成功", "成功提示", MB_OKCANCEL);if (i == IDOK){interdict = 1;continue;}else if (IDCANCEL == i){interdict = 1;continue;}}//再删下一个按钮else if (erasure_b.x > 975.78 && erasure_b.x < 1165.50 && erasure_b.y>588.09 && erasure_b.y < 643.65){erasure();//删除学生信息UseStudentNumber();//载入学生数目break;}  } }}
}

(十五)查找学生信息

void view()//查找学生信息
{IMAGE view_s;//定义界面图片指针loadimage(&view_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\查询学生信息.png", 1280, 720);putimage(0, 0, &view_s);settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色UseStudentNumber();//载入学生数目FILE* informationfile_s;//定义存取学生信息文件指针FILE* creditfile_s;//定义存取学分信息文件指针//打开文档进行分析操作informationfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r+");creditfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r+");//提取学生学分数据for (int i = 0; i < 42; i++){//判断数据是否读完if (feof(informationfile_s) == 1){break;}//将文件数据保存在结构数组中fscanf(informationfile_s, "%s %s %s %s %s %s %s\n",information[i].s_studentID,information[i].s_Name,information[i].s_gender,information[i].s_faculty,information[i].s_speciality,information[i].s_grade,information[i].s_number);fscanf(creditfile_s, "%s %s %s %s %s %s %s %s\n",credit[i].studentID,credit[i].Name,credit[i].compulsory,credit[i].select,credit[i].morality,credit[i].innovate,credit[i].other,credit[i].sum);}fclose(informationfile_s);//关闭文件fclose(creditfile_s);//关闭文件int u = 0;//获取鼠标操作while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG view_b = GetMouseMsg();//设置变量引入消息switch (view_b.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//返回按钮if (view_b.x > 24.94 && view_b.x < 101.66 && view_b.y>22.68 && view_b.y <67.28){summary();//对学生数据进行操作break;}//显示学号按钮else if (view_b.x > 500 && view_b.x < 800 && view_b.y>250 && view_b.y < 300){TCHAR InputWindow_studentID[] = _T("请输入要查找学生的学号,点击确认键查找");InputBox(information_buffer.s_studentID, 15, InputWindow_studentID);settextstyle(40, 0, _T("Consolas"));//定位该生所在位置for (u ; u < 42; u++){if (strcmp(information_buffer.s_studentID, information[u].s_studentID) == 0){break;}}if (u == 42){HWND hnd = GetHWnd();int isok = MessageBox(hnd, "该学生不存在", "错误提示", MB_OKCANCEL);if (isok == IDOK){continue;}else if (IDCANCEL == isok){continue;}}else{outtextxy(500, 250, information[u].s_studentID);}}//确定按钮else if (view_b.x > 853.71 && view_b.x < 946.68 && view_b.y>588.09 && view_b.y < 642.53){if (strlen(information_buffer.s_studentID) == 0){HWND hnd = GetHWnd();int isok = MessageBox(hnd, "你还没有输入学号哦,请输入", "错误提示", MB_OKCANCEL);if (isok == IDOK){continue;}else if (IDCANCEL == isok){continue;}}else{settextstyle(25, 0, _T("Consolas"));outtextxy(143.61, 400, information[u].s_Name);outtextxy(270.94, 400, information[u].s_gender);outtextxy(342.39, 400, information[u].s_faculty);outtextxy(580.86, 400, information[u].s_speciality);outtextxy(753.94, 400, information[u].s_grade);outtextxy(875.63, 400, information[u].s_number);outtextxy(368.47, 540, credit[u].compulsory);outtextxy(450.85, 540, credit[u].select);outtextxy(533.23, 540, credit[u].morality);outtextxy(615.61, 540, credit[u].innovate);outtextxy(697.99, 540, credit[u].other);outtextxy(780.37, 540, credit[u].sum);}}//再查下一个按钮else if (view_b.x > 976.16 && view_b.x < 1163.98 && view_b.y>588.09 && view_b.y < 642.53){view();//查找学生信息break;}}}}
}

 

(十六)修改学生信息

void correct()//修改学生信息
{IMAGE correct_s;//定义界面图片指针loadimage(&correct_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\修改学生信息.png", 1280, 720);putimage(0, 0, &correct_s);settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色settextstyle(25, 0, _T("Consolas"));UseStudentNumber();//载入学生数目FILE* informationfile_s;//定义存取学生信息文件指针FILE* creditfile_s;//定义存取学分信息文件指针//打开文档进行分析操作informationfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r+");creditfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r+");//提取学生学分数据for (int i = 0; i < 42; i++){//判断数据是否读完if (feof(informationfile_s) == 1){break;}//将文件数据保存在结构数组中fscanf(informationfile_s, "%s %s %s %s %s %s %s\n",information[i].s_studentID,information[i].s_Name,information[i].s_gender,information[i].s_faculty,information[i].s_speciality,information[i].s_grade,information[i].s_number);fscanf(creditfile_s, "%s %s %s %s %s %s %s %s\n",credit[i].studentID,credit[i].Name,credit[i].compulsory,credit[i].select,credit[i].morality,credit[i].innovate,credit[i].other,credit[i].sum);}fclose(informationfile_s);//关闭文件fclose(creditfile_s);//关闭文件int u = 0;//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG correct_q = GetMouseMsg();//设置变量引入消息switch (correct_q.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(返回)按钮if (correct_q.x >16.63 && correct_q.x < 93.72 && correct_q.y>17.01 && correct_q.y < 60.85){summary();//对学生数据进行操作break;}//(输入学号按钮)else if (correct_q.x > 530 && correct_q.x < 830 && correct_q.y>187 && correct_q.y < 237){char a[15];TCHAR InputWindow_studentID[] = _T("请输入要修改学生的学号");InputBox(a, 15, InputWindow_studentID);//定位该生所在位置for (u; u < 42; u++){if (strcmp(a, information[u].s_studentID) == 0){break;}}if (u == 42){HWND hnd = GetHWnd();int isok = MessageBox(hnd, "该学生不存在", "错误提示", MB_OKCANCEL);if (isok == IDOK){continue;}else if (IDCANCEL == isok){continue;}}else{outtextxy(530.74, 187.53, information[u].s_studentID);outtextxy(100, 321.26, information[u].s_Name);outtextxy(100, 359.81, information[u].s_gender);outtextxy(100, 398, information[u].s_faculty);outtextxy(100, 436, information[u].s_speciality);outtextxy(100, 475, information[u].s_grade);outtextxy(120, 515, information[u].s_number);outtextxy(354, 321.26, credit[u].compulsory);outtextxy(354, 359.81, credit[u].select);outtextxy(354, 398, credit[u].morality);outtextxy(354, 436, credit[u].innovate);outtextxy(354, 475, credit[u].other);outtextxy(354, 515, credit[u].sum);}}//(姓名)格else if (correct_q.x > 789 && correct_q.x < 971&& correct_q.y>321 && correct_q.y < 359){TCHAR InputWindow_Name[] = _T("请输入该学生的姓名");InputBox(information_buffer.s_Name, 15, InputWindow_Name);//进行输出outtextxy(789, 321, information_buffer.s_Name);//保存在结构数组中strcpy(information[u].s_Name, information_buffer.s_Name);strcpy(credit[u].Name, information_buffer.s_Name);}//(性别)格else if (correct_q.x > 789 && correct_q.x < 971 && correct_q.y>359 && correct_q.y < 397){TCHAR InputWindow_gender[] = _T("请输入该学生的性别");InputBox(information_buffer.s_gender, 15, InputWindow_gender);//进行输出outtextxy(789, 359, information_buffer.s_gender);//保存在结构数组中strcpy(information[u].s_gender, information_buffer.s_gender);}//(院系)格else if (correct_q.x > 789 && correct_q.x < 971 && correct_q.y>397 && correct_q.y < 435){TCHAR InputWindow_faculty[] = _T("请输入该学生的院系全称");InputBox(information_buffer.s_faculty, 15, InputWindow_faculty);//进行输出outtextxy(789, 398, information_buffer.s_faculty);//保存在结构数组中strcpy(information[u].s_faculty, information_buffer.s_faculty);}//(专业)格else if (correct_q.x > 789 && correct_q.x < 971 && correct_q.y>435 && correct_q.y < 473){TCHAR InputWindow_speciality[] = _T("请输入该学生的专业");InputBox(information_buffer.s_speciality, 15, InputWindow_speciality);//进行输出outtextxy(789, 436, information_buffer.s_speciality);//保存在结构数组中strcpy(information[u].s_speciality, information_buffer.s_speciality);}//(年级)格else if (correct_q.x > 789 && correct_q.x < 971 && correct_q.y>473 && correct_q.y < 511){TCHAR InputWindow_grade[] = _T("请输入该学生的年级,例(2201)22届1班");InputBox(information_buffer.s_grade, 15, InputWindow_grade);//进行输出outtextxy(789, 475, information_buffer.s_grade);//保存在结构数组中strcpy(information[u].s_grade, information_buffer.s_grade);}//(手机号)格else if (correct_q.x > 822 && correct_q.x < 971 && correct_q.y>511 && correct_q.y < 549){TCHAR InputWindow_number[] = _T("请输入该学生的手机号");InputBox(information_buffer.s_number, 15, InputWindow_number);// 进行输出outtextxy(822, 515.53, information_buffer.s_number);//保存在结构数组中strcpy(information[u].s_number, information_buffer.s_number);}//(必修)格else if (correct_q.x > 971 && correct_q.x < 1153 && correct_q.y>321 && correct_q.y < 359){TCHAR InputWimdow_compulsory[] = _T("请输入该学生的必修");InputBox(credit_buffer.compulsory, 15, InputWimdow_compulsory);// 进行输出outtextxy(1043, 321, credit_buffer.compulsory);//保存在结构数组中strcpy(credit[u].compulsory, credit_buffer.compulsory);}//(选修)格else if (correct_q.x > 1043 && correct_q.x < 1225 && correct_q.y>359 && correct_q.y < 397){TCHAR InputWimdow_select[] = _T("请输入该学生的选修");InputBox(credit_buffer.select, 15, InputWimdow_select);// 进行输出outtextxy(1043, 359, credit_buffer.select);//保存在结构数组中strcpy(credit[u].select, credit_buffer.select);}//(德育)格else if (correct_q.x > 1043 && correct_q.x < 1225 && correct_q.y>397 && correct_q.y < 435){TCHAR InputWimdow_morality[] = _T("请输入该学生的德育");InputBox(credit_buffer.morality, 15, InputWimdow_morality);// 进行输出outtextxy(1043, 398, credit_buffer.morality);//保存在结构数组中strcpy(credit[u].morality, credit_buffer.morality);}//(创新)格else if (correct_q.x > 1043 && correct_q.x < 1225 && correct_q.y>435 && correct_q.y < 473){TCHAR InputWimdow_innovate[] = _T("请输入该学生的创新");InputBox(credit_buffer.innovate, 15, InputWimdow_innovate);// 进行输出outtextxy(1043, 436, credit_buffer.innovate);//保存在结构数组中strcpy(credit[u].innovate, credit_buffer.innovate);}//(其它)格else if (correct_q.x > 1043 && correct_q.x < 1225 && correct_q.y>473 && correct_q.y < 511){TCHAR InputWimdow_other[] = _T("请输入该学生的其它学分");InputBox(credit_buffer.other, 15, InputWimdow_other);// 进行输出outtextxy(1043, 475, credit_buffer.other);//保存在结构数组中strcpy(credit[u].other, credit_buffer.other);}//(总分)格else if (correct_q.x > 1043 && correct_q.x < 1225 && correct_q.y>511 && correct_q.y < 549){//计算总分int sum_s = atof(credit[u].compulsory) + atof(credit[u].select) + atof(credit[u].morality) + atof(credit[u].innovate) + atof(credit[u].other);//赋予数组sprintf(credit[u].sum, "%d", sum_s);//进行输出outtextxy(1043, 515, credit[u].sum);}//(确定)按钮else if (correct_q.x > 852 && correct_q.x < 979 && correct_q.y>638 && correct_q.y < 684){FILE* correct_g;//定义输入信息文件指针FILE* correct_l;//定义存取信息文件指针//打开文档进行分析操作correct_g = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "w+");correct_l = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "w+");UseStudentNumber();//载入学生数目int y;//循环变量//存入学生数据for (y = 0; y <= nowstudentnums; y++)//42{//判断数据是否存完if (strlen(information[y].s_studentID) == 0 && y == 42){break;}//将结构数据保存在文件中fprintf(correct_g, "%s %s %s %s %s %s %s\n",information[y].s_studentID,information[y].s_Name,information[y].s_gender,information[y].s_faculty,information[y].s_speciality,information[y].s_grade,information[y].s_number);fprintf(correct_l, "%s %s %s %s %s %s %s %s\n",credit[y].studentID,credit[y].Name,credit[y].compulsory,credit[y].select,credit[y].morality,credit[y].innovate,credit[y].other,credit[y].sum);}fclose(correct_g);//关闭文件fclose(correct_l);//关闭文件HWND hnd = GetHWnd();int isok = MessageBox(hnd, "修改成功!", "成功提示", MB_OKCANCEL);if (isok == IDOK){interdict = 1;continue;}else if (IDCANCEL == isok){interdict = 1;continue;}}//(再填下一个)按钮else if (correct_q.x > 1013 && correct_q.x < 1190 && correct_q.y>638 && correct_q.y < 684){correct();//修改学生信息UseStudentNumber();//载入学生数目}}}}
}

 

(十七)学生窗口

void studentwindows()//学生窗口
{IMAGE correct_s;//定义界面图片指针loadimage(&correct_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\学生主页.png", 1280, 720);putimage(0, 0, &correct_s);//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG credit_c = GetMouseMsg();//设置变量引入消息switch (credit_c.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(返回)按钮if (credit_c.x > 15.48 && credit_c.x < 92.97 && credit_c.y>14 && credit_c.y < 58){main();//主窗口break;}//(我要登录)按钮else if (credit_c.x > 806.09 && credit_c.x < 981.07 && credit_c.y>323.15 && credit_c.y < 383.62){UseStudentNumber();//载入学生数目student_login();break;}//(我要注册)按钮else if (credit_c.x > 806.09 && credit_c.x < 981.07 && credit_c.y>464.88 && credit_c.y < 525.35){UseStudentNumber();//载入学生数目student_registration();//学生注册break;}}}}
}

 

(十八)载入学生数目

void UseStudentNumber()
{FILE *fp = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生数据.txt","r+");fscanf(fp,"%d",&nowstudentnums);fclose(fp);
}

(十九)存储学生数目

void SaveStudentNumber()
{FILE *fp = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生数据.txt","w");fprintf(fp,"%d",nowstudentnums);fclose(fp);
}

 

(二十)学生注册

void student_registration()//学生注册
{IMAGE correct_s;//定义界面图片指针loadimage(&correct_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\学生注册界面.png", 1280, 720);putimage(0, 0, &correct_s);settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色settextstyle(25, 0, _T("Consolas"));UseStudentNumber();//载入学生数目FILE* informationfile_s;//定义存取学生信息文件指针FILE* creditfile_s;//定义存取学分信息文件指针//打开文档进行分析操作informationfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r+");creditfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r+");//提取学生学分数据for (int i = 0; i < 42; i++){//判断数据是否读完if (feof(informationfile_s) == 1){break;}//将文件数据保存在结构数组中fscanf(informationfile_s, "%s %s %s %s %s %s %s",information[i].s_studentID,information[i].s_Name,information[i].s_gender,information[i].s_faculty,information[i].s_speciality,information[i].s_grade,information[i].s_number);fscanf(creditfile_s, "%s %s %s %s %s %s %s %s",credit[i].studentID,credit[i].Name,credit[i].compulsory,credit[i].select,credit[i].morality,credit[i].innovate,credit[i].other,credit[i].sum);}fclose(informationfile_s);//关闭文件fclose(creditfile_s);//关闭文件//nowstudentnums = 0;//初始化为0TCHAR InputWindow_studentID[] = _T("请输入你的学号");InputBox(information_buffer.s_studentID, 15, InputWindow_studentID);for (int n = 0; n < nowstudentnums; n++)//找没有等于{if (strcmp(information_buffer.s_studentID, information[n].s_studentID) == 0 ){HWND h = GetHWnd();int i = MessageBox(h, "此用户已注册", "错误提示", MB_OKCANCEL);if (i == IDOK){student_registration();}else if (IDCANCEL == i){studentwindows();}}}//保存在结构数组中strcpy(information[nowstudentnums].s_studentID, information_buffer.s_studentID);strcpy(credit[nowstudentnums].studentID, information_buffer.s_studentID);//对于成绩学生无权操作,直接赋值无char NO[3] = "无";strcpy(credit[nowstudentnums].compulsory, NO);strcpy(credit[nowstudentnums].select, NO);strcpy(credit[nowstudentnums].morality, NO);strcpy(credit[nowstudentnums].innovate, NO);strcpy(credit[nowstudentnums].other, NO);strcpy(credit[nowstudentnums].sum, NO);int v = 0;//按键的响应while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG correct_q = GetMouseMsg();//设置变量引入消息switch (correct_q.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//(返回)按钮if (correct_q.x > 16.63 && correct_q.x < 94.10 && correct_q.y>16.25 && correct_q.y < 60.47){studentwindows();//学生窗口break;}//(姓名)格else if (correct_q.x > 481.84 && correct_q.x < 877.14 && correct_q.y>236.98 && correct_q.y < 274.02){TCHAR InputWindow_Name[] = _T("请输入你的姓名");InputBox(information_buffer.s_Name, 15, InputWindow_Name);//进行输出outtextxy(481.84, 240, information_buffer.s_Name);//保存在结构数组中strcpy(information[nowstudentnums].s_Name, information_buffer.s_Name);strcpy(credit[nowstudentnums].Name, information_buffer.s_Name);v += 1;}//(性别)格else if (correct_q.x > 481.84 && correct_q.x < 877.14 && correct_q.y>274.02 && correct_q.y < 311.06){TCHAR InputWindow_gender[] = _T("请输入你的性别");InputBox(information_buffer.s_gender, 15, InputWindow_gender);//进行输出outtextxy(481.84, 280, information_buffer.s_gender);//保存在结构数组中strcpy(information[nowstudentnums].s_gender, information_buffer.s_gender);v += 1;}//(院系)格else if (correct_q.x > 481.84 && correct_q.x < 877.14 && correct_q.y>311.06 && correct_q.y < 348.1){TCHAR InputWindow_faculty[] = _T("请输入你的院系全称");InputBox(information_buffer.s_faculty, 15, InputWindow_faculty);//进行输出outtextxy(481.84, 320, information_buffer.s_faculty);//保存在结构数组中strcpy(information[nowstudentnums].s_faculty, information_buffer.s_faculty);v += 1;}//(专业)格else if (correct_q.x > 481.84 && correct_q.x < 877.14 && correct_q.y>348.1 && correct_q.y < 385.14){TCHAR InputWindow_speciality[] = _T("请输你的专业");InputBox(information_buffer.s_speciality, 15, InputWindow_speciality);//进行输出outtextxy(481.84, 360, information_buffer.s_speciality);//保存在结构数组中strcpy(information[nowstudentnums].s_speciality, information_buffer.s_speciality);v += 1;}//(年级)格else if (correct_q.x > 481.84 && correct_q.x < 877.14 && correct_q.y>385.14 && correct_q.y < 422.18){TCHAR InputWindow_grade[] = _T("请输入你的年级,例(2201)22届1班");InputBox(information_buffer.s_grade, 15, InputWindow_grade);//进行输出outtextxy(481.84, 400, information_buffer.s_grade);//保存在结构数组中strcpy(information[nowstudentnums].s_grade, information_buffer.s_grade);v += 1;}//(手机号)格else if (correct_q.x > 503.76 && correct_q.x < 877.14 && correct_q.y>422.18 && correct_q.y < 459.22){TCHAR InputWindow_number[] = _T("请输入你的手机号");InputBox(information_buffer.s_number, 15, InputWindow_number);// 进行输出outtextxy(503.76, 435, information_buffer.s_number);//保存在结构数组中strcpy(information[nowstudentnums].s_number, information_buffer.s_number);v += 1;}//(确定注册)按钮else if (correct_q.x > 576 && correct_q.x < 703 && correct_q.y>549 && correct_q.y < 591){if (v != 6){HWND hn = GetHWnd();int iso = MessageBox(hn, "还有数据没有输入完哦", "错误提示", MB_OKCANCEL);if (iso == IDOK){interdict = 1;continue;}else if (IDCANCEL == iso){interdict = 1;continue;}}else{FILE* correct_g;//定义输入信息文件指针FILE* correct_l;//定义存取信息文件指针//打开文档进行分析操作correct_g = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "w+");correct_l = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "w+");//UseStudentNumber();//载入学生数目int y;//循环变量//int num;//num = nowstudentnums + 1;//存入学生数据for (y = 0; y <= nowstudentnums; y++)//for (y = 0; y < 42; y++) nowstudentnums{//判断数据是否存完if (strlen(information[y].s_studentID) == 0 && y == 42){break;}//将结构数据保存在文件中fprintf(correct_g, "%s %s %s %s %s %s %s\n",information[y].s_studentID,information[y].s_Name,information[y].s_gender,information[y].s_faculty,information[y].s_speciality,information[y].s_grade,information[y].s_number);fprintf(correct_l, "%s %s %s %s %s %s %s %s\n",credit[y].studentID,credit[y].Name,credit[y].compulsory,credit[y].select,credit[y].morality,credit[y].innovate,credit[y].other,credit[y].sum);}fclose(correct_g);//关闭文件fclose(correct_l);//关闭文件nowstudentnums = nowstudentnums + 1;//SaveStudentNumber();//保存现有学生数量HWND hnd = GetHWnd();int isok = MessageBox(hnd, "注册成功!", "成功提示", MB_OKCANCEL);if (isok == IDOK){interdict = 1;continue;}else if (IDCANCEL == isok){interdict = 1;continue;}}}}}}
}

 

(二十一)学生登录

void student_login()// 学生登录
{IMAGE correct_s;//定义界面图片指针loadimage(&correct_s, "E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\界面图片\\学生登录界面.png", 1280, 720);putimage(0, 0, &correct_s);settextcolor(BLACK);//设置字体颜色为黑色setbkmode(TRANSPARENT);//消除字体背景颜色settextstyle(25, 0, _T("Consolas"));//设置字体大小UseStudentNumber();//载入学生数目FILE* informationfile_s;//定义存取学生信息文件指针FILE* creditfile_s;//定义存取学分信息文件指针//打开文档进行分析操作informationfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生信息.txt", "r+");creditfile_s = fopen("E:\\C语言的软件\\VS\\系统菜单\\图片和数据存放地\\数据\\学生学分.txt", "r+");//提取学生学分数据for (int i = 0; i < 42; i++){//判断数据是否读完if (feof(informationfile_s) == 1){break;}//将文件数据保存在结构数组中fscanf(informationfile_s, "%s %s %s %s %s %s %s\n",&information[i].s_studentID,&information[i].s_Name,&information[i].s_gender,&information[i].s_faculty,&information[i].s_speciality,&information[i].s_grade,&information[i].s_number);fscanf(creditfile_s, "%s %s %s %s %s %s %s %s\n",&credit[i].studentID,&credit[i].Name,&credit[i].compulsory,&credit[i].select,&credit[i].morality,&credit[i].innovate,&credit[i].other,&credit[i].sum);}fclose(informationfile_s);//关闭文件fclose(creditfile_s);//关闭文件TCHAR InputWindow_studentID[] = _T("请输入你的学号");InputBox(information_buffer.s_studentID, 15, InputWindow_studentID);int u = 0;//定位该生所在位置for (u = 0; u < 42; u++){if (strcmp(information_buffer.s_studentID, information[u].s_studentID) == 0){break;}}if (u == 42){HWND hnd = GetHWnd();int isok = MessageBox(hnd, "你还没有注册,请注册", "错误提示", MB_OKCANCEL);if (isok == IDOK){student_registration();//学生注册}else if (IDCANCEL == isok){studentwindows();//学生窗口}}//在指定的图框中显示outtextxy(742.6, 280, information[u].s_Name);outtextxy(742.6, 337, information[u].s_gender);outtextxy(742.6, 393, information[u].s_faculty);outtextxy(742.6, 452, information[u].s_speciality);outtextxy(742.6, 511, information[u].s_grade);outtextxy(762, 570, information[u].s_number);outtextxy(1053, 275, credit[u].compulsory);outtextxy(1053, 334, credit[u].select);outtextxy(1053, 393, credit[u].morality);outtextxy(1053, 452, credit[u].innovate);outtextxy(1053, 511, credit[u].other);outtextxy(1053, 570, credit[u].sum);//获取鼠标操作while (1)//时刻获取鼠标信息{if (MouseHit())//如果有消息{MOUSEMSG correct_b = GetMouseMsg();//设置变量引入消息switch (correct_b.uMsg)//判断是什么信息{case WM_LBUTTONDOWN://左键//返回按钮if (correct_b.x > 17.76 && correct_b.x < 60 && correct_b.y>17.76 && correct_b.y < 90){studentwindows();//学生窗口break;}}}}
}

四、调试分析

        从主界面到管理员界面或者学生界面使用Easy-x坐标定位来进行调试,再到之后的显示学生信息和学分全揽,发现是空白,什么都没有,所以推测是输入的问题,也可能是文件的问题。于是找到对应模块进行调试,进入管理员界面内的录入学生信息和学生注册,发现录入学生信息显示录入学生已满,所以现在数据已经达到了最大容量值了,但为什么还是写不上去。于是我打开文件,看了一下有42行空白,有字节数,说明是写进去了,但是没有完全将有用的数据写入,而且还有无用的数据写入,于是将对应模块的代码断点逐行调试,发现是变量nowstudentsnum的问题,基于这个问题,写了两个函数来控制认识的变化,每次需要看人数时,调用UseStudentNumber函数,用完之后,人数增加或者减少,再用SaveStudentNumber函数,来控制变量的范围,于是改了之后代码达到了预期的效果。

五、测试结果

        从主界面能顺利跳转到(第一个按钮)管理员界面或者(第二个按钮)学生界面,如图1-1,进入管理员界面需要输入密码,如图1-2。

图1-1 首界面

图1-2 管理员登录密码

        进入管理员界面,可以正常跳转到管理员界面,如图2-1.在管理员界面,(第一个按钮)到查看所有学生的个人信息表和学分信息表,如图2-2和2-3。(第二个按钮)可以到对学生数据进行操作(增加,删除,查找,修改),并且将操作后的数据存储到文件中。

图2-1 管理员界面

图2-2 学生学分全揽

图2-3 学生信息全揽

        进入修改,添加学生数据界面,如图3-1。有对应的4个按钮,有录入学生信息(第一个按钮),如图3-2。删除学生信息(第二个按钮),如图3-3。查找学生信息(第三个按钮),如图3-4。修改学生信息(第四个按钮),如图3-5,将学生数据进行对应的操作后可以将对应信息储存到相应的文件中。

图3-1 管理员操作全揽

图3-2 录入操作

图3-3 删除操作

图3-4 查询操作

图3-5 修改操作

        进入学生界面,如图4-1。可以跳转到(第一个按钮)学生登录界面,如图4-2。或者可以跳转到(第二个按钮)学生注册界面,如图4-3。也可以点击页面返回回溯到首页面,如图4-4。进入对应的页面进行可以进行学生登录或者注册,完成流程后的同时可以直接将学生信息(如图4-5),学生学分(如图4-6),学生人数(如图4-7)直接写入文件中。

图4-1 同学界面

图4-2 登录界面

图4-3 注册界面

图4-4 主界面

图4-5 学生信息存储文件

图4-6 学生学分存储文件

图4-7 学生人数存储文件

六、课程心得总结

        通过完成这个学生管理系统的创作,从开始的界面,到中间的页面之间的跳转,我从学习Easy-x的函数到逐步掌握,通过写这个学生管理系统也是见证了我代码能力的成长,逐渐熟练掌握调试,断点,检查代码错误,文件的存储,页面的变换,按钮的设计,通过这次学生管理系统的创作,也是助推我代码能力的成长助推器,也愿在以后的代码求学路上,我仍能保持初心,一直走下去。

七、参考文献

        [1]甘勇,李晔,卢冰.C语言程序设计[M].北京:中国铁道出版社,2014.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381533.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析 简介 本文档适用于合宙Air780E、Air780EP、Air780EQ、Air201 关联文档和使用工具&#xff1a; 从Ramdump里分析内存泄漏问题 无法抓底层log的情况下如何导出死机dump Luatools下载调试工具 EPAT抓取底层日志 F…

vue视频、图片自动轮播并伴随进度条

废话不多说直接上代 多余没用的部分自己看着删除 <template><div class"showImg"><el-carousel ref"carousel" trigger"hover" :autoplay"false" class"dimControl" :height"${(currenInnerWith*0.37…

探索Python自然语言处理的新篇章:jionlp库介绍

探索Python自然语言处理的新篇章&#xff1a;jionlp库介绍 1. 背景&#xff1a;为什么选择jionlp&#xff1f; 在Python的生态中&#xff0c;自然语言处理&#xff08;NLP&#xff09;是一个活跃且不断发展的领域。jionlp是一个专注于中文自然语言处理的库&#xff0c;它提供了…

BUUCTF逆向wp [MRCTF2020]Xor

第一步 查壳&#xff0c;该题是32位&#xff0c;无壳。 第二步 跟进main&#xff0c;发现反汇编不了 通过下图我们可以发现一串类似字符串的东西 第三步 我们看一下汇编 我们可以得到这些信息&#xff1a;flag的长度为27&#xff08;下面是对本条指令cmp edx 27指令的应用…

英福康INFICON UL1000检漏仪介绍PPT

英福康INFICON UL1000检漏仪介绍PPT

【C++】C++类和对象详解(上)

目录 思维导图大纲&#xff1a; 思维方面&#xff1a; 1. 类的定义&#xff1a; 2. 类的特点&#xff1a; 3. this指针&#xff1a; 4. 类的默认成员函数 默认构造函数 1.构造函数 2.析构函数 3.拷贝构造函数 4. 赋值运算符重载 1. 运算符重载 5. 日期类实现&#…

【IntelliJ IDEA】一篇文章集合所有IDEA的所有设置

IntelliJ IDEA 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;其设置涵盖了多个方面&#xff0c;以满足不同开发者的需求和偏好。由于 IDEA 的设置相当复杂和详尽&#xff0c;这里无法在一篇简短的文章中详细介绍所有设置。然而&#xff0c;我可以提供一…

AV1技术学习:Intra Prediction

对于帧内预测模式编码块&#xff0c;亮度分量的预测模式和色度分量的预测模式在比特流中分别发出信号。亮度预测模式是基于相邻左侧和上侧两个编码块预测上下文的概率模型进行熵编码的。色度预测模式的熵编码取决于色度预测模式的状态。帧内预测以变换块为单位&#xff0c;并使…

VB之制作一个简易计算器

文章目录 创建制作界面设置文本样式技巧双击控件实现功能完整代码vb.net十分适合用于快速开发windows下的桌面程序 创建 制作界面 20个button 一个richtextbox 设置文本样式技巧 ‘左键框选全部控件,进行统一属性设置!’ 双击控件实现功能 注意控件ID与函数对应 完整代码…

首个WebAgent在线评测框架和流程数据管理平台来了,GPT-4、Qwen登顶闭源和开源榜首!

在当今科技迅速发展的时代&#xff0c;大型语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;正以前所未有的速度改变着我们与数字世界的互动方式。基于LLM的智能代理&#xff08;LLM Agent&#xff09;&#xff0c;从简单的信息搜索到复杂的网页操作&…

压缩pdf大小的方法 指定大小软件且清晰

在数字化时代&#xff0c;pdf文件因其良好的兼容性和稳定性&#xff0c;已成为文档分享的主流格式。然而&#xff0c;高版本的pdf文件往往体积较大&#xff0c;传输和存储都相对困难。本文将为您详细介绍几种简单有效的方法&#xff0c;帮助您减小pdf文件的大小&#xff0c;让您…

MacOS M1 安装item2 并配置Zsh

文章目录 1 下载item22 美化item22.1 配置主题2.2 设置黑色的主题&#xff1a;2.3 配置显示状态栏 status bar 3 安装 Oh my zsh3.1 设置主题3.2 设置插件3.3 安装第三方插件1 下载仓库解压2 使用 git clone 一些常用插件以及其作用 参考 1 下载item2 MacOS自带终端&#xff0…

使用小波分析实现文字种类自动识别

文章目录 数据简介开始实验小波分解得出结果结果分析误差分析参考文献 数据简介 各找一篇中文&#xff0c;日文&#xff0c;韩文&#xff0c;英文&#xff0c;俄文较长的学术论文。将论文转化为JPG格式。拆分每张JPG生成更多小的JPG。最终获得很多5个不同语言的JPG并且自带标签…

go中map

文章目录 Map简介哈希表与Map的概念Go语言内建的Map类型Map的声明Map的初始化Map的访问Map的添加和修改Map的删除Map的遍历 Map的基本使用Map的声明与初始化Map的访问与操作Map的删除Map的遍历Map的并发问题实现线程安全的Map 3. Map的访问与操作3.1 访问Map元素代码示例&#…

python—爬虫爬取视频样例

下面是一个使用Python爬虫爬取视频的基本例子。创建一个Python爬虫来爬取视频通常涉及到几个步骤&#xff1a;发送HTTP请求、解析网页内容、提取视频链接、下载视频文件。 import jsonimport requests from lxml import etreeif __name__ __main__:# UA伪装head {"User…

持续集成07--Jenkins配置Allure测试报告

前言 在持续集成&#xff08;CI&#xff09;流程中&#xff0c;自动化测试报告是评估软件质量和追踪问题的重要工具。Allure Framework作为一个轻量级且功能丰富的测试报告工具&#xff0c;能够生成详细的测试报告&#xff0c;帮助团队更好地理解测试结果。本章节“持续集成07-…

深度学习每周学习总结N4:中文文本分类-Pytorch实现(基本分类(熟悉流程)、textCNN分类(通用模型)、Bert分类(模型进阶))

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结&#xff1a;1. 基础模型a. 数据加载b. 数据预处理c. 模型搭建与初始化d. 训练函数e. 评估函数f.拆分数据集运行模型g. 结果可…

Qt QProcess 进程间通信读写数据通信

本文介绍了如何使用Qt的QProcess 进行程序开发&#xff0c;包括启动进程间通信、设置环境变量、通用方法&#xff1b;方便在日常开发中使用&#xff1b; 1.使用Qt进行程序开发&#xff0c;可以通过QProcess类用于启动外部程序并与其进行通信.&#xff1b; 进程A&#xff08;…

Grafana :利用Explore方式实现多条件查询

背景 日志统一推送到Grafana上管理。所以&#xff0c;有了在Grafana上进行日志搜索的需求&#xff0c;而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤&#xff1a; 在主页搜索框中输入“Explore” 进入这个界面…

Linux下开放指定端口

比如需要开放82端口&#xff1a; #查询是否开通 firewall-cmd --query-port82/tcp#开放端口82 firewall-cmd --zonepublic --add-port82/tcp --permanent#重新加载防火墙 firewall-cmd --reload