版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题目学生成绩管理系统一、 功能1. 每一条记录包括一个学生的学号、姓名、语数外3门成绩、平均成绩2. 输入功能:可以一次完成有限(不大于2000)条记录的输入3. 显示功能:完成全部学生记录的显示4. 查找功能:完成按学号或姓名查找学生记录,并显示5. 排序功能:按学生学号或平均成绩进行排序6. 保存功能:将学生记录保存在Information.txt文件中7. 读取功能:将保存在文件中的学生记录读取出来8. 有一个清晰美观界面来调用各个功能二、 要求1. 整个系统均用C语言实现2. 利用指针、结构体数组或链表来实现学生成绩的数据结构设计3. 系统具有输入、显示、查询、修改、删除、排序、保存、
2、读取等基本功能4. 系统的各个功能模块都用函数的形式来实现5. 可以将学生成绩信息保存在文件中6. 可以将学生信息从文件中读取出来三、 设计内容整个学生成绩管理系统由主函数及12个子函数构成,实现学生成绩录入、显示、查询、排序、修改、保存、读取和删除共8项功能,各函数功能相信说明如下:1.主函数 int main()利用无限次循环while和switch实现对各个函数的调用,使用时根据输入的数字来调用相应的函数2. 显示主菜单函数void DispMainMenu()这是一个无参函数,用来显示程序主菜单,用户通过输入对应功能前的数字来实现相应的功能3. 学生成绩录入函数int Informat
3、ionInput(STUDENT stu,int cn)这是一个有返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int cn为当前学生人数,返回值为当前学生人数。其作用是输入有限个学生的成绩信息。算法:定义3个变量,num用来存放本次录入学生人数,i、j为循环变量。由键盘输入学生人数赋值给num,判断num是否大于MAX_NUM(2000),若大于,则提示输入人数太多,函数返回值0;若不大于,则依次输入num个学生信息。4. 显示所有学生信息函数void DispInformation(STUDENT stu,int MAX)这是一个无
4、返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int MAX为为当前学生人数。其作用是现实当前所有学生成绩信息。5. 查找指定学号的学生的信息函数int FindStudentnumber(STUDENT stu,int findnumber,int MAX)这是一个有返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int MAX为当前学生人数。其作用是根据指定学号查询学生成绩信息,若查找到指定学号学生信息,则返回该学生学号,否则返回-1。算法:6. 查找指定姓名的学生的信息函数i
5、nt FindStudentname(STUDENT stu,char findname,int MAX)这是一个有返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int MAX为当前学生人数。其作用是根据指定姓名查询学生成绩信息,若查找到指定姓名学生信息,则返回该学生学号,否则返回-1。算法:7. 学生信息查询函数void QueryInformation(STUDENT stu,int MAX)这是一个无返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int MAX为当前学生人数
6、。其作用是可以根据学号或姓名查找到指定学生的成绩信息。算法:定义查询方式字符变量select,指定学号整型变量findnumber,指定姓名字符串数组findname10,整型变量i,循环变量j。调用函数时,屏幕提示选择查询方式,若选择按学号查询,则输入学号后调用查找指定学号的学生的信息函数int FindStudentnumber(STUDENT stu,int findnumber,int MAX)将返回值赋给变量i,若变量i不为-1,则查找成功,输出学生信息,否则在屏幕显示“输入学号不存在”;若选择按姓名查询则输入姓名后调用查找指定姓名的学生的信息函数int FindStudentnam
7、e(STUDENT stu,char findname,int MAX)将返回值赋给i,若变量i不为-1,则查找成功,输出学生信息,否则在屏幕显示“输入学号不存在”。若在选择查询方式时输入除“1”、“2”外的其他字符,则提示“选择错误”。N-S图8. 修改学生信息函数 void EditInformation(STUDENT stu,int MAX)这是一个无返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int MAX为当前学生人数。其作用是修改或删除指定学生的成绩信息。算法:定义整型变量i、j,j为循环变量;浮点型变量sum,用来寻访
8、总成绩;整形变量findnum用来存放需要修改信息的学生学号;字符变量select用来存放修改方式代号。输入学号后调用查找指定学号的学生的信息函数int FindStudentnumber(STUDENT stu,int findnumber,int MAX)将返回值赋给变量i,若变量i不为-1,则存在该学号学生。在屏幕提示选择修改方式,若选择修改信息,则先在屏幕输出原信息,后按提示依次修改信息;若选择删除信息,则调用删除信息函数void Delete(STUDENT stu,int n,int MAX)删除该学号学生信息。若未查找到指定学号,则在屏幕输出“您输入的学号不存在”。N-S图9.
9、按学号排序函数void SortNum(STUDENT stu,int MAX)这是一个无返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int MAX为当前学生人数。其作用是用冒泡法将学生成绩信息按学号由小到大排列。算法:定义循环变量i、j,结构体变量p作为中间变量。冒泡法完成排序后,调用显示所有学生信息函数void DispInformation(STUDENT stu,int MAX)在屏幕打印出排序后的学生成绩信息。N-S图10. 按平均成绩排序函数void SortScore(STUDENT stu,int MAX)这是一个无返
10、回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int MAX为当前学生人数。其作用是用冒泡法将学生成绩信息按平均成绩由大到小排列。算法:定义循环变量i、j,结构体变量p作为中间变量。冒泡法完成排序后,调用显示所有学生信息函数void DispInformation(STUDENT stu,int MAX)在屏幕打印出排序后的学生成绩信息。N-S图11. 保存数据到文件函数void Save(STUDENT stu,int MAX)这是一个无返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,
11、形参int MAX为当前学生人数。其作用是将存放在结构体数组中的学生成绩信息保存到文件Information.txt中。算法:定义整型变量i,文件指针*fp。若成功打开文件Information.txt,则用fwrite()将存放在结构体数组中的学生成绩信息保存到文件Information.txt中;若打开失败,则在屏幕输出“can not open file”。N-S图12. 打开数据文件函数int Read(STUDENT stu)这是一个有返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,返回值为读取到的学生信息个数,即学生人数。其作用是
12、将存放在文件Information.txt中的学生成绩信息存放到结构体数组中。算法:定义整型变量i,文件指针*fp。若成功打开文件Information.txt,则计数变量赋值为0,每完成一次读取,i自加1。若打开失败,则在屏幕输出“can not open file”。N-S图13.删除信息函数void Delete(STUDENT stu,int n,int MAX)这是一个无返回值的有参函数,形参STUDENT stu为结构体数组指针,表示存有学生信息的结构体数组的头指针,形参int n表示血药删除的学生序号,形参int MAX为当前学生人数。其作用是删除第n个学生的信息。算法:定义循环
13、变量i、j,文件指针*fp。打开存有学生成绩信息的文件Information.txt,在屏幕显示源信息。然后将存放在结构体数组中的信息,从第n个开始,之后每一组数据覆盖前一组数据,以达到删除信息的同时又保证结构体数组中信息连续的目的。之后当前学生人数自减1,重新保存数据到文件Information.txt,在屏幕输出当前所有学生信息。N-S图五、调试分析1.运行时输入信息没有按照scanf()函数格式输入,导致程序无法正常继续运行。2.按照正确格式输入完信息后按回车键后出现“烫烫烫烫”字样的乱码,后经检查发现在学生成绩输入函数int InformationInput(STUDENT stu,i
14、nt cn)中调用了显示所有学生信息函数void DispInformation(STUDENT stu,int MAX),而显示所有学生信息函数void DispInformation(STUDENT stu,int MAX)中,语句for (i=0;i<MAX;i+)后误按了一个“;”导致不能正常执行循环体,后经考虑,决定删除输入完后显示学生信息和排序的语句。3.经2修改后再次运行,出现了运行结果一闪而过的情况,所以上网查找解决方法。先开始查到的方法是需要添加头文件#include<conio.h>并且在需要停留的地方输入语句“getch();”,再次运行发现运行结果还是
15、一闪而过。再次查询后,将getch()改为“system("pause");”。再次运行能正常显示。4.经3修改后再次运行,在排序部分,发现按照平均成绩排序时是由小到大排序的,不符合实际应用中最常用的由大到小排序,遂进行修改。5.经4修改后,在修改信息时,结果不能正常输入学号,检查代码后发现语句“scanf("%d",&stui.number);”中“stui.number”前漏掉了取地址符号“&”。6.经5修改后,程序能完整运行,但是在查看文件内容是发现信息均为乱码,后有查阅教科书,其解释为fread()和fwrite()一般用于二进制
16、文件的处理。7.程序运行后,界面内容太多,容易混乱,查询后添加清屏函数“system("cls");”六、总结经过这次C语言实践活动,我觉得我的C语言水平相对上学期期末又提高了不少。过去只是对单个知识点较为清楚,如今已经能够形成体系,并且写出有使用价值的程序。虽然程序很小,但是万事都要有个循序渐进、由易到难的过程。另外,这次实践对我通过江苏省计算机等级考试(二级C)也有很大的帮助。过去我们都是软件的使用者,看到的都是软件给我们处理日常事务的便捷之处,如今我们已经能深入后台,自己设计、编写程序了,今后还要躲在易用性和美观上面多下功夫。我相信,这次实践会成为我今后进行编程、开发
17、的良好开端和基础。附程序源代码:/*头文件*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#include<conio.h>#define MAX_NUM 2000 /*人数上限2000*/*定义数据结构*/typedef struct studentint number; /*学号*/char name10; /*姓名*/float score3; /*三门课成绩*/float aver; /*平均成绩*/STUDENT;/*函数原型
18、*/void DispMainMenu(); /*显示主菜单*/int InformationInput(STUDENT stu,int cn); /*学生成绩录入*/void DispInformation(STUDENT stu,int MAX); /*显示所有学生信息*/int FindStudentnumber(STUDENT stu,int findnumber,int MAX); /*查找指定学号的学生的信息*/int FindStudentname(STUDENT stu,char findname,int MAX); /*查找指定姓名的学生的信息*/void QueryInfo
19、rmation(STUDENT stu,int MAX); /*学生信息查询*/void EditInformation(STUDENT stu,int MAX); /*修改学生信息*/void SortNum(STUDENT stu,int MAX); /*按学号排序*/void SortScore(STUDENT stu,int MAX); /*按平均成绩排序*/void Save(STUDENT stu,int MAX); /*保存数据到文件*/int Read(STUDENT stu); /*打开数据文件*/void Delete(STUDENT stu,int n,int MAX);
20、 /*删除信息*/*显示主菜单*/void DispMainMenu()printf("*学生成绩管理系统*n");printf(" t1.信息录入 t2.按学号排序n");printf(" t3.按平均成绩排序 t4.信息修改n");printf(" t5.信息查询 t6.保存到数据文件n");printf(" t7.打开数据文件 t8.显示所有学生信息n");printf(" t0.退出");printf("n*n");printf("请选择
21、0-8:"); /*显示菜单信息*/*学生成绩录入*/int InformationInput(STUDENT stu,int cn)int num,i,j;float sum=0;printf("n请输入本次录入的学生人数:");scanf("%d",&num);if(num>MAX_NUM)printf("您输入的人数太多,大于%d人!n",MAX_NUM);system("pause");return 0;for(i=cn;i<num+cn;i+) /*输入num个学生的信息*/
22、printf("请输入第%d个学生的学号:",i+1);scanf("%d",&stui.number);printf(" 姓名:");scanf("%s",);printf(" 语数外成绩:");for(j=0;j<3;j+)scanf("%f",&stui.scorej);sum=sum+stui.scorej;stui.aver=sum/3;sum=0;system("pause"); return (num+
23、cn);/*显示所有学生信息*/void DispInformation(STUDENT stu,int MAX)int i,j;printf("n序号t学号t姓名t语数外成绩tt平均成绩n");for(i=0;i<MAX;i+)printf("%dt%dt%st",i+1,stui.number,);for(j=0;j<3;j+)printf("%.2ft",stui.scorej);printf("%.2f",stui.aver);printf("n");pri
24、ntf("n");system("pause");/*查找指定学号的学生的信息*/int FindStudentnumber(STUDENT stu,int findnumber,int MAX)int i;for(i=0;i<MAX;i+)if(stui.number=findnumber)break;if(i<MAX) /*判断找到的i是否小于MAX,若小于,则执行了break跳出循环,即找到该指定学号的学生*/return i;elsereturn -1;/*查找指定姓名的学生的信息*/int FindStudentname(STUDE
25、NT stu,char findname,int MAX)int i;for(i=0;i<MAX;i+)if(strcmp(,findname)=0)break;if(i<MAX) /*判断找到的i是否小于MAX,若小于,则执行了break跳出循环,即找到该指定姓名的学生*/return i;elsereturn -1;/*学生信息查询*/void QueryInformation(STUDENT stu,int MAX)char select;int i,j;int findnumber;char findname10;printf("*请选择查询方式
26、*n");printf(" t1.按学号查询;t2.按姓名查询n");printf("*n");printf("请选择1或2:"); select=getche();switch(select)case '1':printf("n您选择的是按学号查询n请输入学生的学号:"); /*按学号查询*/scanf("%d",&findnumber);if(i=FindStudentnumber(stu,findnumber,MAX)!=-1)printf("n
27、查找结果如下:n");printf("n学号t姓名t语数外成绩tt平均成绩n");printf("%dt%st",stui.number,);for(j=0;j<3;j+)printf("%.2ft",stui.scorej); printf("%.2fn",stui.aver);elseprintf("您输入的学号不存在!n");break;case '2':printf("n您选择的是按姓名查询n请输入学生的姓名:");
28、/*按学号查询*/scanf("%s",&findname);if(i=FindStudentname(stu,findname,MAX)!=-1)printf("n查找结果如下:n");printf("n学号t姓名t语数外成绩tt平均成绩n");printf("%dt%st",stui.number,);for(j=0;j<3;j+)printf("%.2ft",stui.scorej); printf("%.2fn",stui.aver);
29、elseprintf("您输入的学号不存在!n");system("pause");break;default:printf("选择错误!n");/*修改学生信息*/void EditInformation(STUDENT stu,int MAX)int i,j;float sum=0;int findnum;char select;printf("n请输入学生学号:");scanf("%d",&findnum);if(i=FindStudentnumber(stu,findnum,MA
30、X)!=-1)printf("*请选择修改方式*n");printf("t1.修改信息;t2.删除信息n");printf("*n");printf("请选择1或2:");select=getche();switch(select)case '1':printf("您选择的是修改信息!n");printf("姓 名:%sn",);printf("原信息:n 学号:%dt语数外成绩:",stui.number);for(j=
31、0;j<3;j+) printf("%.2ft",stui.scorej); printf("t平均成绩:%.2fn",stui.aver);printf("请输入新信息n");printf("学号:t");scanf("%d",&stui.number);printf("姓名:t");scanf("%s",);printf("语数外成绩:t");for(j=0;j<3;j+) scanf(&quo
32、t;%f",&stui.scorej); sum=sum+stui.scorej; stui.aver=sum/3;break;case '2': printf("您选择的是删除信息!n");Delete(stu,i,MAX);break;elseprintf("您输入的学号不存在!n"); system("pause");/*按学号排序*/void SortNum(STUDENT stu,int MAX) /*冒泡法由小到大排序*/int i,j;STUDENT p;for(i=0;i<MAX
33、-1;i+)for(j=0;j<MAX-1-i;j+)if(stuj.number>=stuj+1.number)p=stuj;stuj=stuj+1;stuj+1=p;printf("按学号排序后:n");DispInformation(stu,MAX);/*按平均成绩排序*/void SortScore(STUDENT stu,int MAX) /*冒泡法由大到小排序*/ int i,j;STUDENT p;for(i=0;i<MAX-1;i+)for(j=0;j<MAX-1-i;j+)if(stuj.aver>=stuj+1.aver)p
34、=stuj;stuj=stuj+1;stuj+1=p;printf("按平均成绩排序后:n");DispInformation(stu,MAX);/*保存数据到文件*/void Save(STUDENT stu,int MAX)int i;FILE *fp;if(fp=fopen("Information.txt","w+")!=NULL)for(i=0;i<MAX;i+)fwrite(&stui,sizeof(STUDENT),1,fp);fclose(fp);elseprintf("cannot open
35、file!n");/*打开数据文件*/int Read(STUDENT stu)int i;int result=-1;FILE *fp;if(fp=fopen("Information.txt","r")!=NULL)i=0;while(fread(&stui,sizeof(STUDENT),1,fp)!=0)i+; /*读取到一个信息时,i作为学生人数自加1*/result=i;fclose(fp);elseprintf("cannot open the file!n");return result;/*删除信息
36、*/void Delete(STUDENT stu,int n,int MAX)FILE *fp;int i,j;if(fp=fopen("Information.txt","rb")=NULL)printf("cannot open the file!n");exit(0);printf("n源信息:n");DispInformation(stu,MAX);for(i=n;i<MAX-1;i+)stui.number=stui+1.number;strcpy(,stui+1.name);for(j=0;j<3;j+)stui.scorej=stui+1.scorej;stui.aver=stui+1.aver;MAX-; /*删除一个学生信息后人数MAX自减1*/printf("当前文件内容:n");Save(st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓鼠养鼠知识培训课件
- 2024年行政流程优化协议3篇
- 舞蹈演艺场所卫生规范
- 环保行业工程师工作心得分享
- 产品设计行业设计师职责分析
- 扬州中瑞酒店职业学院《走近医学》2023-2024学年第一学期期末试卷
- 亲子健身操教学报告模板
- 温州理工学院《礼仪文化》2023-2024学年第一学期期末试卷
- 互动教学效果报告模板
- 学校秋季家庭教育讲座安排计划
- 2025年度爱读书学长主办的读书挑战赛组织合同
- 2024年沧州经济开发区招聘社区工作者笔试真题
- 2025年安徽省铜陵市公安局交警支队招聘交通辅警14人历年高频重点提升(共500题)附带答案详解
- 零碳智慧园区解决方案
- 2025年林权抵押合同范本
- 服务推广合同协议(2025年)
- 2024年北师大版四年级数学上学期学业水平测试 期末卷(含答案)
- 2024年高考物理一轮复习讲义(新人教版):第七章动量守恒定律
- 人教版八年级上学期物理期末复习(压轴60题40大考点)
- 企业环保知识培训课件
- 浙江省宁波市慈溪市2023-2024学年高三上学期语文期末测试试卷
评论
0/150
提交评论