scanf(\ /*接受字符b*/ for(i=0;i if(strcmp(b,stu[i].name)==0) /*比较字符串的长度*/ { printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ getche(); /*添加getche语句使程序暂停*/ break; /*退出循环*/ } else printf(\ } } 4.修改函数int modify(): 修改个别学生成绩信息,实现修改功能。首先输入密码,有三次机会输入密码,用i来控制输入密码的次数,密码正确才可输入修改学生的姓名。通过用字符串比较函数strcmp比较学生姓名的字符串来实现通过学生姓名来修改学生成绩信息。 int modify() { char password[7]=\ /*设定密码*/ int i,flag; /*定义变量i,flag*/ char b[M],s[8]; /*定义字符b,s*/ flag=0; /*给变量赋值*/ out(); /*读入信息*/ for(i=0;i<3&&(flag==0);i++) /*在机会小于三次时循环*/ { printf(\ /*输入密码*/ scanf(\ if(strcmp(s,password)==0) /*通过字符串比较来验证密码正确性*/ { flag=1; /*密码正确*/ break; /*退出循环*/ } else { printf(\ /*密码错误,再次输入*/ } } if(i==3) /*若i为3*/ { printf(\ /*超过三次就会*/ getche(); /*暂停程序*/ } if(flag==1) /*密码输入成功*/ { printf(\ /*输入需要修改的名字*/ scanf(\ for(i=0;i if(strcmp(b,stu[i].name)==0) /*通过字符串比较出结构体中名 字的正确性*/ { printf(\ /*输入需要修改的语文成绩*/ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } } } } 5. 排序函数int sort(): 将信息按顺序输出,便于浏览,实现排序功能。将总评成绩的高低来排序输出学生信息。此模块的排序用到冒泡排序法来实现总评排序。 int sort() { int sum[M],i,t,j; /*定义数组sum和临时变量t*/ out(); /*读入信息*/ for(i=0;i sum[i]=stu[i].chinesepingshi*stu[i].percentage+stu[i].chinese*(100-stu[i].percentage)/100+stu[i].mathpingshi*stu[i].percentage+stu[i].math*(100-stu[i].percentage)/100; /*计算总评成绩*/ for(i=0;i for(j=0;j if(sum[j] for(i=0;i printf(\printf(\printf(\} getche(); /*暂停程序*/ } 6. 统计函数int count(): 统计学生成绩的信息,计算出学生的每门平均成绩以及打印出低于每门平均成绩的学生的信息。 int count() { int chin_aver=0,math_aver=0,chin_sum=0,math_sum=0; int i; out(); for(i=0;i chin_sum+=stu[i].chinese; /*计算所有学生此科目总成绩*/ } chin_aver=chin_sum/M; /*计算语文科目的平均成绩*/ printf(\ for(i=0;i math_sum+=stu[i].math; /*计算所有科目此学生的总成绩*/ } math_aver=math_sum/M; /*计算数学科目的平均成绩*/ printf(\ for(i=0;i if(stu[i].chinese printf(\of chin_aver information:\\n%s\\n%d\\n%d\\n\ printf(\of math_aver information:\\n%s\\n%d\\n%d\\n\} student student } getche(); } 7. 打印函数int display(): 打印出学生的所有成绩信息,再通过比较找出每门科目中高于90分和低于60分的学生信息,并打印出来。 int display() { int i; out(); for(i=0;i printf(\ printf(\ printf(\ printf(\ printf(\ printf(\printf(\} for(i=0;i if(stu[i].chinese>90||stu[i].math>90) /*比较成绩是否高于90分*/ printf(\90 score student information:%s\\n%d\\n%d\\n%d\\n\else if(stu[i].chinese<60||stu[i].math<60) /*比较成绩是否低于60分*/ printf(\60 score student information:%s\\n%d\\n%d\\n%d\\n\else continue; } getche(); } 8. 保存文件函数void save(): 将信息保存到文件中,运行修改﹑增加﹑删除﹑排序﹑统计等功能后,可将文件另存为或保存到源文件中。 void save() { FILE *fp; int i; if((fp=fopen(\ /*打开位于e盘的文件*/ { printf(\ return; } for(i=0;i if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*将fp指向的数组中每次写入 一个信息到文件*/ printf(\ /*写入错误*/ fclose(fp); /*关闭文件*/ } 9. 读出文件函数int out(): 将文件中的信息读出来,以便对其进行操作。 int out() { FILE *fp; int i; if((fp=fopen(\{ printf(\ file\\n\ return; } for(i=0;i if(fread(&stu[i],sizeof(struct student),1,fp)!=1) /*将fp指向的数组中每次读出 一个信息循环读出*/ { if(feof(fp)) { fclose(fp); return; } } fclose(fp); /*关闭文件*/ } 10.主函数void main(): void main() 目录 一﹑需求分析???????????????????????2 二﹑概要设计???????????????????????2 三﹑详细设计???????????????????????4 四﹑调试分析???????????????????????8 五﹑用户手册???????????????????????9 六﹑测试数据???????????????????????9 七﹑附 录????????????????????????10 一﹑需求分析 学生信息管理系统主要提供成绩查询,方便管理的网上信息查阅平台,根据开发要求,学生信息管理系统主要应用于教育系统,完成对学生成绩的计算机化的管理。程序需要以下规定: 1.输入形式也输入值范围:需要输入的包括学生姓名﹑学号﹑chinese﹑math ﹑chinesepingshi﹑mathpingshi﹑percentage等信息,因为分数信息都是采用int类型,所 以输入的数据是需要是整数,输入值的范围在0-100之间。 2. 输出的形式:将所输入的信息全部显示出来。 3. 程序所能达到的功能: ⑴更新学生成绩信息:录入学生成绩信息:姓名,学号,chinese,math, chinesepingshi,mathpingshi,percentage; 增加学生成绩信息; 修改学生成绩信息:输入密码“888888”,再按照学生姓名进行修改。 ⑵查询学生成绩信息:按照姓名查询学生的信息。 ⑶排序:计算总评成绩,将学生的总评成绩按照由大到小的顺序进行排序。 ⑷统计信息:该模块主要应用于计算chinese和math的平均成绩average,之后再显示和比较出低于chinese和math的平均分的学生的信息。 ⑸显示信息:该模块主要是显示出文件中的所有学生信息,并且找出chinese和math成绩中,90分以上和60分以下的学生成绩信息。 ⑹文件操作:保存和读取文件中的数据信息。 ⑺退出程序。 二﹑概要设计 1. 本程序所用的数据类型是整型int ,所用的调用函数也是整型int。 2. 本程序所用的是数据结构,定义了一个结构体类型struct student,来保存学生信息的数据到结构体,形式为stu[i].name ,stu[i].num, stu[i].chinese,stu[i].math,stu[i].chinesepingshi,stu[i].mathpingshi,stu[i].percentage。 3. 各自定义的子函数的名称分别为录入函数int input(),增加函数int add(),查找函数int search(),修改函数int modify(),排序函数int sort(),统计 函数int count(),打印函数int display(),保存文件函数void save(),读出文件函数int out() 4. 本程序模块结构 主函数模块: Void main {定义变量i; While{ Menu(); Switch(i){ 选择调用函数接受命令; Break;} } } 主程序流程和个函数之间的层次关系: 主 函 数 菜 单 录 入 信 息 增 加 信 息 查 找 信 息 修 改 信 息 排 序 统 计 删 除 信 息 打 印 信 息 保 存 信 息 读 入 信 息 退 出 姓 名 查 找 密 码 姓 总评每门低于名 成绩平均每门修 排序 分 平均改 分 全 9060部 分以分以信 上 下 息 三﹑详细设计 模块流程图: #include #define N 20 #define M 2 /*宏定义学生样本容量*/ void save(); /*保存文件函数*/ typedef struct student{ /*定义结构体变量struct student*/ char name[N]; int num; int chinese; int math; int chinesepingshi; /*语文平时成绩*/ int mathpingshi; /*数学平均成绩*/ int percentage; /*平时成绩所占百分比*/ }Stu; Stu stu[M]; //----------基本操作的算法描述-------------------- 1.录入函数input(): 输入学生成绩信息,实现录入功能,将成绩保存在结构体数组stu[i]中。 int input() { int i; /*定义变量i*/ for(i=0;i printf(\ /*输入姓名*/ scanf(\ /*保存在结构体数组stu中*/ printf(\ /*输入学号*/ scanf(\ printf(\ /*输入语文成绩*/ scanf(\ printf(\ /*输入数学成绩*/ scanf(\ printf(\ /*输入语文平时成绩*/ scanf(\ printf(\ /*输入数学平时成绩*/ scanf(\ printf(\ /*平时成绩所占百分比*/ scanf(\ } for(i=0;i { printf(\ printf(\ printf(\ printf(\ printf(\ printf(\} save(); /*保存信息到文件*/ } 2.增加函数add(): 添加学生信息到结构体stu[i]并保存到文件中,实现添加功能。 int add() { int i; /*定义结构体变量*/ for(i=0;i out(); /*读入信息*/ { printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } save(); /*保存信息*/ } 3.查找函数int search(): 查询个别学生成绩信息,实现查询功能。通过用字符串比较函数strcmp比较学生姓名的字符串来实现通过学生姓名来查询学生成绩信息。 int search() { char b[N]; /*定义字符b*/ int i; /*定义变量i*/ out(); /*读入信息*/ printf(\/*输入查找的学生姓名*/ { int i; int menu(); /*菜单*/ while(1) /*循环开始*/ { printf(\to nanchang hangkong university the school of software!**************\ menu(); printf(\ printf(\ /*进行选择语句1-8*/ scanf(\ switch(i) /* switch语句选择功能*/ { case 1:input(); break; /*输入函数*/ case 2:add(); break; /*增加函数*/ case 3:search();break; /*查找函数*/ case 4:modify();break; /*修改函数*/ case 5:sort(); break; /*排序函数*/ case 6:count();break; /*统计函数*/ case 7:display();break; /*统计函数*/ case 8:exit();break; /*退出程序*/ default: break; } } }?? 四﹑调试分析 1. 调试过程中遇到的问题及解决方法: ⑴在成绩录入input模块中,第一名学生的成绩录入成功,但是后来的学生的成绩出现乱码的情况,无法录入学生的姓名等信息。 解决方法:后来经过仔细检查发现各个子函数均采用的int类型,而平均成绩所占百分比percentage使用的是float 类型,所以后来把其改为int类型后,在计算总评成绩时做了修改,避免了大范围的修改,同时也完成了原本的功能。 ⑵在使用增加模块增加add学生信息后,使用打印模块display打印所有学 生的成绩时出现了乱码的情况。 解决方法:检查发现是程序所申请的样本空间太小,所以打印不出超出样本 空间的数据,后来修改了样本空间,在前部分宏定义了define M ,解决了不能打印的情况。 ⑶程序出现了警告warming,许多警告是指没有定义就使用了变量。 解决方法:在主函数和子函数中均定义了变量,并对变量进行了赋值后,解 决了问题,使得运行正常了。 2. 经验与体会: 我体会到程序的设计需要经过精细的计算和设计,使用的变量之前都要先进行定义,遇到问题及困难的时候要多想想,自己独立查找资料来解决问题。虽然采取了许多防止出错的方法,特别是对输入错误数据的防范措施,但系统测试仍然是发现系统存在错误,后来我在老师的帮助下进行了一系列的改正﹑修复﹑以及重新编写某些函数,并对程序中的每一个块﹑一条语句和逻辑思路都进行了反复测试,运行结果基本符合要求。同时,我也积累了一定的经验,熟悉了许多子函数的编写以及循环的使用,这次课设是我对之前的知识漏洞有了一个补充和掌握,对之前学的知识进行了巩固。多谢老师和同学的帮助! 五﹑用户手册 用户使用说明: 1. 本程序运行环境为TC系统,按ctrl+f9进入运行界面,后会显示程序菜单;包括8个功能模块; 2. 使用键盘输入需要选择功能的数字,如按下1+enter ,则进入input 输入界面,此时输入需要录入的学生信息,如按下name+enter ,则将学生姓名的信息进行了输入,按照这个方式依据提示一次输入学生的姓名﹑学号﹑chinese﹑math﹑ chinesepingshi﹑mathpingshi﹑percentage的信息,最后按下enter 完成输入; 3. 此时程序又进入到菜单界面,方法同上按下2+enter,则进入add增加界面,此时输入需要增加的学生信息,方法同上,最后按下enter 完成学生成绩的增加输入; 4. 此时程序又进入到菜单界面,方法同上按下3+enter,则进入到查找界面,此时显示打开文件“can open file”,之后输入需要查找的学生姓名按下enter ,即完成查找,显示学生查找学生信息,最后按下enter 完成学生成绩的查找; 5. 此时程序又进入到菜单界面,方法同上按下4+enter,则进入到修改界面,之后输入需要修改时的密码“888888”,密码输入成功之后,按照提示enter输入需 要查找的学生姓名,此时则可以输入要修改的学生信息,最后按下enter 完成学生信息的修改; 6. 此时程序又进入到菜单界面,方法同上按下5+enter,则程序进入排序界 面,显示出排好序的学生姓名﹑学号﹑总评成绩等信息,最后按下enter 完成学生信息的排序; 7. 此时程序又进入到菜单界面,方法同上按下6+enter,则程序显示出运行好的chinese average grade和math average gread,之后显示出低于chinese average 和math average的学生信息,最后按下 enter完成; 8. 此时程序又进入到菜单界面,方法同上按下7+enter,则程序会显示所有的学生的所有的信息,同时,还会显示出每门科目的分数高于90分和低于60分的学生信息,最后按下enter 完成display 打印; 9. 此时程序又进入到菜单界面,方法同上按下8+enter,则退出程序。 六﹑测试数据 七﹑附录 #include typedef struct student /*定义结构体数组*/ { char name[N]; int num; int chinese; int math; int chinesepingshi; int mathpingshi; int percentage; }Stu; Stu stu[M]; int menu() { system(\ printf(\ printf(\ (1)input the data\\n\ printf(\ (2)add the data\\n\ printf(\ (3)search the data\\n\ printf(\ (4)modify the data\\n\ printf(\ (5)sort the data\\n\ printf(\ (6)count the data\\n\ printf(\ (7)display the data\\n\ printf(\ (8)quit the system\\n\ printf(\**\} int input() { int i; for(i=0;i printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } for(i=0;i printf(\ printf(\ printf(\ printf(\ printf(\ printf(\} save(); } int add() { int i; for(i=0;i { printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\} save(); } int search() { char b[N]; int i; out(); printf(\ scanf(\ for(i=0;i if(strcmp(b,stu[i].name)==0) /*字符串比较*/ { printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ getche(); break; } else printf(\ } } int modify() { char password[7]=\ /*输入密码*/ int i,flag; char b[M],s[8]; flag=0; out(); for(i=0;i<3&&(flag==0);i++) { printf(\ scanf(\ if(strcmp(s,password)==0) /*字符串比较*/ { flag=1; break; } else { printf(\ } } if(i==3) { printf(\ getche(); } if(flag==1) /*密码输入正确*/ { printf(\ scanf(\ for(i=0;i if(strcmp(b,stu[i].name)==0) /*字符串比较*/ { printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ } } } } int sort() { int sum[M],i,t,j; out(); for(i=0;i sum[i]=stu[i].chinesepingshi*stu[i].percentage+stu[i].chinese*(100-stu[i].percentage)/100+stu[i].mathpingshi*stu[i].percentage+stu[i].math*(100-stu[i].percentage)/100; for(i=0;i for(i=0;i getche(); } int count() { int chin_aver=0,math_aver=0,chin_sum=0,math_sum=0; int i; out(); for(i=0;i chin_sum+=stu[i].chinese; } chin_aver=chin_sum/M; /*平均分*/ printf(\ for(i=0;i math_sum+=stu[i].math; 计算总分*/ /* } math_aver=math_sum/M; printf(\ for(i=0;i if(stu[i].chinese printf(\of math_aver information:\\n%s\\n%d\\n%d\\n\ } } getche(); } int display() { int i; out(); for(i=0;i printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ } for(i=0;i information:%s\\n%d\\n%d\\n%d\\n\ else if(stu[i].chinese<60||stu[i].math<60) /*比较每门成绩小雨60*/ printf(\60 score information:%s\\n%d\\n%d\\n%d\\n\ else continue; } getche(); /*输入过程中完成暂停的功能*/ } void save() { student student student student FILE *fp; int i; if((fp=fopen(\ /*打开文件*/ { printf(\ return; } for(i=0;i if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*写入信息*/ printf(\ fclose(fp); /*关闭文件*/ } int out() { FILE *fp; int i; if((fp=fopen(\ { printf(\ file\\n\ return; } for(i=0;i if(fread(&stu[i],sizeof(struct student),1,fp)!=1) /*读出信息*/ { if(feof(fp)) { fclose(fp); return; } } fclose(fp); } void main() { int i; int menu(); while(1) { printf(\to nanchang hangkong university software!**************\ menu(); printf(\ printf(\ scanf(\ the school of switch(i) /*switch语句选择功能*/ { case 1:input(); break; case 2:add(); break; case 3:search();break; case 4:modify();break; case 5:sort(); break; case 6:count();break; case 7:display();break; case 8:exit();break; default: break; } } }??
C程序设计之学生信息管理报告
2018-10-20 17:34
C程序设计之学生信息管理报告.doc
将本文的Word文档下载到电脑
下载失败或者文档不完整,请联系客服人员解决!