case 10:exit(0); /*退出*/ case 11:menu(); /*返回主界面*/ getch(); } return 0; }
/****************密码函数****************/ distin() /*密码函数*/ { int f;
char mima[]={\char mi[6];
printf(\输入密码:\
scanf(\ if(strcmp(mima,mi)==0) { teacher(); } else {
printf(\密码错误!\\n\
printf(\请选择:\\n\\t1).目录 2).退出 [ ]\\b\\b\ scanf(\ switch(f) { case 1: menu(); break; case 2: exit(0); break; } } return 0; }
/****************学生界面****************/ st() /*学生界面*/ {int i,n,k,w1=1,w2,w3,w4; struct student s;
21
n=load(); do
{system(\ do {k=-1;
printf(\请输入学号 NO.:\ scanf(\ printf_face(); for(i=0;i if(strcmp(s.num,stu[i].num)==0) {k=i; printf_one(k);break; } if(k==-1) {printf(\不存在! 重输入\ printf(\是否重新输入?\\n\\t1).是 [ ]\\b\\b\ scanf(\ } } while(k==-1&&w1==1); w4=0;w3=0; if(k!=-1) {printf(\请选择:\\n\\t1).返回目录 [ ]\\b\\b\ scanf(\ switch(w2) {case 1:menu();break; case 3:{printf(\是否确定?\\n\\t1).否且返回 scanf(\ if(w4==1) stu[k].ave=0; break; } } if(w3==1||w4==1) {save(n); printf(\★成功★ ^-^.\ printf(\请选择:\\n\\t1).返回 [ ]\\b\\b\ scanf(\ } [ ]\\b\\b\22 } } while(w2==1); menu(); return 0; } /****************主界面****************/ menu() /*主界面*/ { int c; { system(\ /*清屏*/ printf(\ printf(\ 欢迎使用学生成绩管理系统\\n\\n\ puts(\★★★★★★★★★★★目录★★★★★★★★★★★\\n\\n\ printf(\ 1.教师登陆\\n\ printf(\ printf(\ 2.学生登录\\n\ printf(\ printf(\ 3.退出\ puts(\★★★★★★★★★★★★★★★★★★★★★★★★\\n\ scanf(\ switch(c) { case 1: distin(); break; case 2: st(); break; case 3: exit(0); break; } } return 0; } /*****************主函数****************/ main() 23 {menu(); getch(); return 0; } [调试分析] 本程序主要的操作对象是记录数组,使用的存储结构是结构体数组。另外还有对C语言中关于文件的操作,这是本程序中的一个重点也是难点,是此程序出现问题的主要原因之一: 问题一: 现象:输出的成绩不是正确的数字,而是一些类似于地址值的数字。 原因:程序中对各数组的下标操作不统一。因为程序要分别对三个科目的成绩进行统计,所以程序中就要有一个临时数组来存放成绩值,然而在将学科成绩存放在临时数组的过程中如果出现了下标不统一的情况,即在原记录数组中是1…n号元素存放数据,在临时数组中却是0…n-1号元素存放数据。就会引起程序的错误。解决的方法是将整个程序中相互有关的数组使用统一的下标存放数据,就可以避免这种问题。 问题二: 现象:这是一个关于文件操作的问题。在将记录存入文件以后再从文件中读取时就出现原因:在使用fwrite和fread命令的时候函数的参数没有写正确。fwrite和fread 命令的错误。 第一个参数是存储数据的首地址,如果没有地址没有正确,那么就不能正常地将数据存到文件中也不能正常地读取。 [运行结果及分析](从屏幕上截图,说明运行结果,并分析是否正确,正确的原因) 1.主界面 2. 在教师界面显示全部学生信息 24 3.在教师界面修改学号为002的信息 4. 在教师界面按数学成绩各等级统计学生人数 25