学生成绩管理系统C语言

上传人:无*** 文档编号:87890995 上传时间:2022-05-10 格式:DOC 页数:21 大小:155KB
收藏 版权申诉 举报 下载
学生成绩管理系统C语言_第1页
第1页 / 共21页
学生成绩管理系统C语言_第2页
第2页 / 共21页
学生成绩管理系统C语言_第3页
第3页 / 共21页
资源描述:

《学生成绩管理系统C语言》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言(21页珍藏版)》请在装配图网上搜索。

1、 工程学院计算机与信息科学系实验报告2012 2013 学年第 1 学期 任课老师: 章静 课程名称 结构化程序综合设计班级计算机1001座号3100301114扬文实验题目学生成绩管理系统实验时间实验开始日期:2012/2/24报告提交日期:2012/3/10实验目的、要求1该实验的课学时是4个课时。2程序完成后应该完成如下基本功能:1)用自定义结构体typedef struct设计该软件的数据结构;2)用数组或指针链表将所有学生的数据按照学号顺序起来;3)程序能够按照学号顺序输入学生的三门成绩,并计算平均成绩和总成绩。4)程序能够显示已经输入的指定学号的学生成绩以与平均成绩和总成绩。5)程

2、序能够按要求显示指定分数段的学生成绩以与平均成绩和总成绩。6)能够统计班级总人数、班级平均成绩。7)能够增加和删除指定学生的成绩。8)按照指定的要求以与顺序(升序或降序)显示学生成绩以与平均成绩和总成绩。实验步骤与容 按如下顺序写:1、 主要设计思想;学生成绩管理系统包含多种功能,可以输入学生成绩,删除,插入,排序,查找等等。输入的信息又包含学生,学号,各科成绩。所以首先要定义一个结构体:typedef struct node char id20; char name15; int scoreMAXCOURSE; int sum; double average; struct node *ne

3、xt;Student;根据结构体中的容飙血程序。2、 主要数据结构与其解释在此次程序设计中用了链表来实现对数据的处理,并设计了菜单界面如图,根据switch语句来对用户的选择:3、 模块关系图;主函数输入学生信息打印成绩计算平均分和总分查找学生成绩插入学生成绩显示分数段的学生按总分平均分降序排列菜单4、 所有函数的简要说明;1) 插入函数Insert_Before();主要是要重新加入学生的信息,通过头插法。2) 计算平均分和总分Count_Score();将输入的数据计算出学生的平均分和总分。3) 删除学生信息Del_Student();删除某个学生的成绩。4) 按查找Searchname_

4、Student();通过输入学生的找到学生的成绩。5) 计算班级总人数people=Count_People();将总的输入学生人数打印出来。6) 显示某分数段学生信息Section_Score();首先选择你要某科目的成绩并输入成绩的围,按条件输出学生成绩。7) 按总分,平均分降序排列Descend_English();将输入的全部学生成绩按总分排序。 5、 所有源代码;/*学生成绩管理系统 C语言*/#include #include #include #define MAXID 10#define MAXNAME 20#define MAXCOURSE 3/* 学生数据结构 */type

5、def struct node char id20; char name15; int scoreMAXCOURSE; int sum; double average; struct node *next;Student;/* 头指针 */Student *head = NULL;/*课程名称*/char ClassNameMAXCOURSE20=数学,英语,计算机;/* 菜单 */int Menu() system(cls); fflush(stdin); printf( 计算机1001 扬文 3100301114 n); printf(n); printf(*学生成绩管理系统*n); pr

6、intf(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( 9-插入学生信息到链表中n); printf( 10-按总分或平均分降序排列学生成绩n); printf( 0-退出n); return 0;/*初始化*/Student *Init() int i; S

7、tudent *head; head=(Student *)malloc(sizeof(Student); head-next=NULL; return head;/*检查学号*/char Check_ID(char *s) int i; if(strlen(s)=0|strlen(s)MAXID)return 0; for(i=0;i 0 & si MAXNAME) return 0; for(i=0; i= a & si = A & si =0 & snext; while(p!=NULL) if(strcmp(s,p-id)=0) return 1; p=p-next; return 0

8、;/* 输入学生信息 */void Input_Score(Student *p) /* 学号 */ printf(n请输入学号: ); do gets(p-id); if (!Check_ID(p-id) printf(输入不正确!请重新输入学号: ); else if (Is_SameID(p-id) printf(存在已学号!请重新输入学号: ); while (!(Check_ID(p-id) & !Is_SameID(p-id); /* */ printf(请输入: ); do gets(p-name); if (!Check_Name(p-name) printf(输入不正确!请重

9、新输入: ); while (!Check_Name(p-name); /输入成绩 int i; for(i=0; iscorei); if(!Check_Score(p-scorei) printf(输入成绩不正确!n请重新输入%s成绩:,ClassNamei); while(!Check_Score(p-scorei); p-average = -1; p-sum = -1; /* 头插法插入节点 */void Insert_Before() Student *s =(Student*) malloc(sizeof(Student); Input_Score(s); s-next = he

10、ad-next; head-next = s;/*输出学生成绩信息*/void Output_Score(Student *p) int i; printf(n:%s, _%s n,p-name,p-id); for(i=0; iscorei); printf(总分:%d 平均分:%.2f n,p-sum,p-average);/*删除节点q*/void Del_Node(Student *q) Student *p=head; while(p-next!=q) p=p-next; p-next=q-next; free(q);/*插入学生成绩*/void Insert_List() int

11、x; printf(输入你要插入的学生数:); scanf(%d,&x); while(x!=0) getchar(); Student *p =(Student*) malloc(sizeof(Student); printf(n请输入学号: ); do gets(p-id); if (!Check_ID(p-id) printf(输入不正确!请重新输入学号: ); else if (Is_SameID(p-id) printf(存在已学号!请重新输入学号: ); while (!(Check_ID(p-id) & !Is_SameID(p-id); /* */ printf(请输入: );

12、 do gets(p-name); if (!Check_Name(p-name) printf(输入不正确!请重新输入: ); while (!Check_Name(p-name); /输入成绩 int i; for(i=0; iscorei); do if(!Check_Score(p-scorei) printf(输入成绩不正确!请重新输入%s成绩:,ClassNamei); while(!Check_Score(p-scorei); p-average = -1; p-sum = -1; p-next = head-next; head-next = p; x-; /*按学号查找*/S

13、tudent *Search_ID(char *id) Student *p=head-next; while(p!=NULL) if(strcmp(p-id,id)=0)break; p=p-next; return p;/*按查找节点*/Student *Search_Name(char *name) Student *p=head-next; while(p!=NULL) if(strcmp(p-name,name)=0)break; p=p-next; return p;/*输出链表*/void Output_List() Student *p; p=head-next; while(

14、p!=NULL) Output_Score(p); p=p-next; /*删除指定学生信息*/void Del_Student() Student *p; fflush(stdin); char str15; char judge10; printf(请输入要删除的学生的 学号或:); do gets(str); if(!(Check_ID(str)|Check_Name(str) printf(输入错误!请重新输入:); while(!(Check_ID(str)|Check_Name(str); /判断是否为学号还是 if(str00&str0next; while(p != NULL)

15、 Quit(p-next); free(p); exit(0);/*计算个人平均分和总分*/void Count_Score() Student *p; int i; p=head-next; while(p!=NULL) for(i=0;isum = p-sum + p-scorei; p-average = p-sum * 1.0 / MAXCOURSE; p=p-next; /*计算班级总人数*/int Count_People() Student *p; int people=0; p=head-next; while(p!=NULL) people=people+1; p=p-nex

16、t; return people;/*计算班级平均分*/void Count_Mark() Student *p; int m; float avecla=0; p=head-next; while(p!=NULL) avecla=avecla+p-sum; p=p-next; m=Count_People(); printf(班级平均分为:%.2f,avecla/m);/*根据某科成绩段显示成绩*/void Section_Score() char x; int m,n,i,flag=0;Student *p; p=head-next; printf(请输入指定分数段的科目(A:数学 B:英

17、语 C:计算机):n); scanf(%c,&x); printf(请输入你要显示的分数段(从n到m):);scanf(%d,&n); scanf(%d,&m);switch(x) case A: while(p!=NULL) if(n score0 & p-score0name,p-id); for(i=0; iscorei); printf(总分为:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; case B: while(p!=NULL) flag=1; if(n score1 & p-score1name,p-id); for(i=0

18、; iscorei); printf(总分为:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; case C: while(p!=NULL) flag=1; if(n score2 & p-score2 name,p-id); for(i=0; iscorei); printf(总分为:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; default: printf(输入无效!n); fflush(stdin); if(flag=0) printf(在%d到%d的分数段学生为零!);/*比较成绩

19、大小*/Student *Descby_English(Student *Newhead,Student *sort) Student *p,*q; p=Newhead; while(p!=NULL) if(sort-sum p-sum) break; q=p; p=p-next; if(p=Newhead) sort-next = p; return sort; else q-next = sort; sort-next = p; return Newhead; /*按总分或平均分降序排列*/void Descend_English() Student *p,*q,*Newhead; int

20、 i,j=1,people; Newhead = NULL; p = head; while(p != NULL) q = p-next; Newhead = Descby_English(Newhead,p); p = q; if(p = head) printf(学生信息库为空!n); else p = Newhead-next; people=Count_People(); printf(按总分和平均分排序如下:n); while(p!=NULL) if(jname,p-id); for(i=0; iscorei); printf(总分:%d 平均分:%.2f ,p-sum,p-aver

21、age); j+; printf(n); p=p-next; /*按查找学生成绩*/void *Searchname_Student() char name10; int i=0; Student *p=head-next; getchar(); printf(请输入你要查找的学生:); do gets(name); if(!Check_Name(name) printf(输入不正确!重新输入:); while(!Check_Name(name); while(p!=NULL) if(strcmp(p-name,name)=0) Output_Score(p); i=1; p=p-next;

22、if(i=0) printf(找不到此!); /*按学号查找学生成绩*/void *SearchID_Student() char id10; int i=0; Student *p=head-next; getchar(); printf(请输入你要查找的学生学号:); do gets(id); if(!Check_ID(id) printf(输入学号不正确!重新输入:); while(!Check_ID(id); while(p!=NULL) if(strcmp(p-id,id)=0) Output_Score(p); i=1; p=p-next; if(i=0) printf(找不到此学

23、号!); /*主函数*/void main() int x,n,people; Student *q; Menu(); while(1) printf(n请输入命令编号: ); scanf(%d, &x); switch(x) case 1: /初始化 head = Init(); printf(初始化成功!n); break; case 2: /输入成绩 printf(输入序号:); scanf(%d,&n); getchar(); while(n!=-1) Insert_Before(); printf(输入序号:); scanf(%d,&n); getchar(); break; cas

24、e 3: /计算平均分和总分 Count_Score(); printf(计算平均分和总分成功!); break; case 4: /打印出所有成绩 Output_List(); break; case 5: Del_Student(); break; case 6: /按查找学生成绩 Searchname_Student(); break; case 7: /按学号查找学生成绩 SearchID_Student(); break; case 8: /计算班级人数 people=Count_People(); printf(班级总人数为:%d n,people); break; case 9:

25、 /*插入学生成绩*/ Insert_List(); break; case 10: /*显示某科分数段的学生*/ getchar(); Section_Score(); break; case 11: /*按总分或平均分降序排列*/ Descend_English(); break; case 0: /*完毕*/ Quit(); break; default:printf(输入错误!nn); 试验过程记录记录试验中遇到的困难与解决方法;实验结果记录以与与预期结果比较以与分析记录每次实验结果以与分析情况初始化输入学生成绩计算平均分 总分打印学生成绩删除学生成绩查找学生成绩插入学生成绩显示某分数

26、段学生成绩总结以与心得体会实验总体还是比较顺利,但也遇到了一些困难,通过与同学交流和查找资料已经解决了。 在做实验之前,一定要把课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时久听不懂,这会使实验难度加大,浪费做实验的宝贵时间。做实验一定要亲力亲为,务必要将每个细节,每个步骤弄清楚,弄明白,还要复习,思考。这样,你的印象才深刻,才记得牢固,否则,过后就忘了还不如不做。 每次的实验都让我受益非浅,这次课程设计更使我有了更大的收获。明白了字符串的很多操作算法的编写和理解,并且查阅了大量的资料,对字符串的相关知识有了很大的了解。期间遇到了很多的问题,其实我觉得编写程序,调试,遇到问题耐心的查错,总会有解决方法的,比较困难的错误其实是能够运行之后结果不稳定,有时候对,有时候错,这样的问题往往是程序设计的算法的问题,虽然这次程序没有太复杂的算法,但是一些小的地方没有考虑到,往往会给运行结果造成很多难以解释的错误。我觉得我的程序在经过很多种情况的测试后,基本上能满足我自己的要求了,可能还有很多不完善的地方,但是确实收获了很多东西,随着以后的学习运用,估计会有更深入的认识。指导老师评阅意见指导年月日填写容时,可把表格扩大。实验的源程序代码(要有注释)附在表后。21 / 21

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!