《数据结构--学生成绩管理系统(共39页).doc》由会员分享,可在线阅读,更多相关《数据结构--学生成绩管理系统(共39页).doc(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上课 程 设 计 课程名称_数据结构基础_ _ 题目名称_ 学生成绩管理系统 学生学院_ 管理学院_专业班级_学 号_ 学生姓名_ 指导教师_ _目 录专心-专注-专业1 系统分析1.1系统性能分析1、操作界面美观、友好,有必要的容错处理(如:能判定学号位数和只能由09数字字符组成、能判定合理的成绩0100等);2、查询应根据查询条件合理选择先进的查询方法3、排序算法要求采用堆排序实现;4、分数段统计结果要求保存在单独的文件中;1.2 系统功能需求分析本系统应具有以下功能:1、提供身份验证,和使用系统的权限设置、判定。2、(教师用户)能实现本班同学各学期各科成绩的录入、
2、编辑,数据必须保存在文件中,以便反复使用。3、(学生用户)提供对学号或姓名,各学科成绩的查询。4、(学生和教师用户)能按各学期、各学科分数排序输出(每一科都要能排序输出)。5、(教师用户)能统计各科成绩分数段的分布(60以下、6070、7080、8090、90100)情况,并输出。1.3 数据分析1.3.1.问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么? 1.3.2.逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类
3、型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;1.3.3.详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作作出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;1.3.4.程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;1.3.5.程序调试与测试:采用自底向上,分模块进行,即先调试低层
4、函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;2 系统设计2.1 总体设计按系统分析的功能要求将系统划分为以下几个主要功能模块:1-学生记录录入 2-学生成绩查询:按学号查询、按姓名查询3-删除记录4-排序5-修改数据6-显示全部学生记录7-统计8-更换用户9-保存记录0-退出系统2.2 详细设计2.2.1 界面设计1、菜单设计菜单主要有学生成绩录入、成绩查询、成绩排序、更换用户设计时主要采用switch-case这个结构,从而选择调用相应的函数。子菜单也是利用这个原理方法设计
5、的2、信息显示界面的设计信息显示主要用了for(;)循环,输出信息,并设置好输出格式,运行时如下:2.2.2 各功能模块的设计主函数主要作用是控制调用其它函数协调工作。其流程图如下:查询窗口排序窗口 按总分排序修改窗口删除窗口统计窗口 统计结果2.2.2 系统编码设计 3.1 预处理命令及结构体类型的声明#includestdio.h#includestdlib.h#includestring.h#includewindows.h#define M 1003.2 main函数void main()welcome();IO_ReadInfo();Login();3.3 程序代码#includes
6、tdio.h#includestdlib.h#includestring.h#includewindows.h#define M 100void Login();/*/ typedef struct stuchar StuID12;char StudName12; float Score5;float Av;float Sum;int tag;Stud;Stud studM;int num=0;/*/float sum(Stud stud) int j; float sum=0; for(j=0;j5;j+) sum+=stud.Scorej; return sum;/*/int Studen
7、t_SearchByIndex(char id) int i; for (i=0;inum;i+) if (strcmp(studi.StuID,id)=0) return i; return -1; /*/int Student_SearchByName(char name) int i; for (i=0;inum;i+) if (strcmp(studi.StudName,name)=0) return i; return -1; /*/int ConflictID(Stud stud,int n,char ID) int i; for(i=0;inum;i+) if(i!=n) if(
8、strcmp(studi.StuID,ID)=0) return TRUE; break; if(i=num)return FALSE;/*/void Student_DisplaySingle(int index) printf(n*学生成绩单*n); printf(tt姓名:t学号:,studindex.StudName,studindex.StuID); printf(ntt计算机操作系统:,(&studindex)-Score0); printf(ntt大学英语 :,(&studindex)-Score1); printf(ntt基础会计 :,(&studindex)-Score2);
9、 printf(ntt数据结构 :,(&studindex)-Score3); printf(nttJava语言设计:,(&studindex)-Score4); printf(ntt总 分:,(&studindex)-Sum); printf(ntt平均分:nnn,(&studindex)-Av);/*/void Student_Display() int i;printf(n%-4s%st %-8s%-10s%-10s%-10s%-10s%-10s%-9sn,编号, 学 号,姓 名,操作系统,大学英语,会计基础,数据结构,Java设计,总分);printf(-n); for(i=0;iSt
10、uID,(&studi)-StudName,(&studi)-Score0,(&studi)-Score1,(&studi)-Score2,(&studi)-Score3,(&studi)-Score4,(&studi)-Sum);printf(-n);/*/void Student_Insert() char c;printf(n); printf(nnn);while(1) printf(请输入学号:); scanf(%s,&studnum.StuID); while(ConflictID(stud,num,studnum.StuID) getchar(); printf(学号已经存在2n
11、请重新输入学号: ); scanf(%s,&studnum.StuID); getchar();printf(请输入学生姓名:); scanf(%s,&studnum.StudName);getchar(); printf(请输入计算机操作系统成绩: );scanf(%f,&studnum.Score0);while(studnum.Score0100|studnum.Score00)getchar(); printf(输入有误2请重新输入n计算机操作系统成绩: ); scanf(%f,&studnum.Score0); getchar(); printf(请输入大学英语成绩: );scanf
12、(%f,&studnum.Score1);while(studnum.Score1100|studnum.Score10)getchar(); printf(输入有误2请重新输入n大学英语成绩: ); scanf(%f,&studnum.Score1); getchar(); printf(请输入基础会计成绩: );scanf(%f,&studnum.Score2);while(studnum.Score2100|studnum.Score20)getchar(); printf(输入有误2请重新输入n基础会计成绩: ); scanf(%f,&studnum.Score2); getchar(
13、); printf(请输入数据结构基础成绩: );scanf(%f,&studnum.Score3);while(studnum.Score3100|studnum.Score30)getchar(); printf(输入有误2请重新输入n数据结构基础成绩: ); scanf(%f,&studnum.Score3); getchar(); printf(请输入Java语言设计成绩: );scanf(%f,&studnum.Score4);while(studnum.Score4100|studnum.Score40)getchar(); printf(输入有误2请重新输入nJava语言设计成绩
14、: ); scanf(%f,&studnum.Score4); getchar(); studnum.Sum=sum(studnum) ;studnum.Av=studnum.Sum/5; num+; printf(是否继续?(y/n); scanf(%c,&c);getchar(); if (c=N|c=n) break; /*/void sift(Stud r,int t,int w,int tag)if(tag=1)int i1,j1;Stud x1;i1=t;x1=ri1;j1=2*i1+1;while(j1=w)if(j10)j1+;if(strcmp(x1.StuID,rj1.St
15、uID)0)ri1=rj1;i1=j1;j1=2*j1+1;elsebreak;ri1=x1;if(tag=2)int i2,j2;Stud x2;i2=t;x2=ri2;j2=2*i2+1;while(j2=w)if(j2rj2+1.Sum)j2+;if(x2.Sumrj2.Sum)ri2=rj2;i2=j2;j2=2*j2+1;elsebreak;ri2=x2;void heapsort(Stud r,int n,int tag)/*堆排序*/int i,xx=0;Stud x;for(i=n/2-1;i=0;i-)sift(r,i,n-1,tag);for(i=n-1;i0;i-)x=r
16、0;r0=ri;ri=x;sift(r,0,i-1,tag);printf(n%-4s%st %-8s%-10s%-10s%-10s%-10s%-10s%-9sn,编号, 学 号,姓 名,操作系统,大学英语,会计基础,数据结构,Java设计,总分);printf(-n); for(i=num-1;i=0;i-) +xx;printf( %-4d%st%-8s%-10.2f%-10.2f%-10.2f%-10.2f%-10.2f%-10.1fn,xx,(&studi)-StuID,(&studi)-StudName,(&studi)-Score0,(&studi)-Score1,(&studi)
17、-Score2,(&studi)-Score3,(&studi)-Score4,(&studi)-Sum);printf(-n);/*/void Student_ModifyByID() while(1) char id20; char c;int index; printf(请输入要修改的学生的学号:); scanf(%s,&id);getchar(); index=Student_SearchByIndex(id); if (index=-1) printf(学生不存在!n); else printf(你要修改的学生信息为:n); Student_DisplaySingle(index);
18、 printf(- 请输入新值-n); printf(请输入学号:); scanf(%s,studindex.StuID); getchar(); printf(请输入姓名:); scanf(%s,&studindex.StudName); getchar();printf(是否要修改该学生的成绩?);scanf(%c,&c);getchar();if(c=121|c=89)printf(请输入计算机操作系统成绩: );scanf(%f,&studindex.Score0);while(studindex.Score0100|studindex.Score00)getchar(); print
19、f(输入有误2请重新输入n计算机操作系统成绩: ); scanf(%f,&studindex.Score0); getchar(); printf(请输入大学英语成绩: );scanf(%f,&studindex.Score1);while(studindex.Score1100|studindex.Score10)getchar(); printf(输入有误2请重新输入n大学英语成绩: ); scanf(%f,&studindex.Score1); getchar(); printf(请输入基础会计成绩: );scanf(%f,&studindex.Score2);while(studind
20、ex.Score2100|studindex.Score20)getchar(); printf(输入有误2请重新输入n基础会计成绩: ); scanf(%f,&studindex.Score2); getchar(); printf(请输入数据结构基础成绩: );scanf(%f,&studindex.Score3);while(studindex.Score3100|studindex.Score30)getchar(); printf(输入有误2请重新输入n数据结构基础成绩: ); scanf(%f,&studindex.Score3); getchar(); printf(请输入Jav
21、a语言设计成绩: );scanf(%f,&studindex.Score4);while(studindex.Score4100|studindex.Score40)getchar(); printf(输入有误2请重新输入nJava语言设计成绩: ); scanf(%f,&studindex.Score4); getchar(); studindex.Sum=sum(studindex) ;studindex.Av=studindex.Sum/5; printf(是否继续?(y/n); if (getchar()=n) break; /*/void Student_ModifyByName()
22、 while(1) char name20; char c;int index; printf(请输入要修改的学生的姓名:); scanf(%s,&name);getchar(); index=Student_SearchByName(name);if (index=-1) printf(学生不存在!n); else printf(你要修改的学生信息为:n); Student_DisplaySingle(index); printf(- 请输入新值-n); printf(请输入学号:); scanf(%s,studindex.StuID); getchar(); printf(请输入姓名:);
23、 scanf(%s,&studindex.StudName); getchar();printf(是否要修改该学生的成绩?);scanf(%c,&c);getchar();if(c=121|c=89)printf(请输入计算机操作系统成绩: );scanf(%f,&studindex.Score0);while(studindex.Score0100|studindex.Score00)getchar(); printf(输入有误2请重新输入n计算机操作系统成绩: ); scanf(%f,&studindex.Score0); getchar(); printf(请输入大学英语成绩: );sc
24、anf(%f,&studindex.Score1);while(studindex.Score1100|studindex.Score10)getchar(); printf(输入有误2请重新输入n大学英语成绩: ); scanf(%f,&studindex.Score1); getchar(); printf(请输入基础会计成绩: );scanf(%f,&studindex.Score2);while(studindex.Score2100|studindex.Score20)getchar(); printf(输入有误2请重新输入n基础会计成绩: ); scanf(%f,&studinde
25、x.Score2); getchar(); printf(请输入数据结构基础成绩: );scanf(%f,&studindex.Score3);while(studindex.Score3100|studindex.Score30)getchar(); printf(输入有误2请重新输入n数据结构基础成绩: ); scanf(%f,&studindex.Score3); getchar(); printf(请输入Java语言设计成绩: );scanf(%f,&studindex.Score4);while(studindex.Score4100|studindex.Score40)getcha
26、r(); printf(输入有误2请重新输入nJava语言设计成绩: ); scanf(%f,&studindex.Score4); getchar(); studindex.Sum=sum(studindex) ;studindex.Av=studindex.Sum/5; printf(是否继续?(y/n); if (getchar()=n) break; /*/void Student_DeleteByID() int i; char id20; int index; printf(请输入要删除的学生的学号:); scanf(%s,&id); getchar(); index=Studen
27、t_SearchByIndex(id); if (index=-1) printf(学生不存在!n); else printf(你要删除的学生信息为:n); Student_DisplaySingle(index); printf(是否真的要删除?(y/n); if (getchar()=y) for (i=index;inum-1;i+) studi=studi+1; num-; printf(删除成功!n); getchar(); /*/void Student_DeleteByName() int i; char name20; int index; printf(请输入要删除的学生的姓
28、名:); scanf(%s,&name); getchar(); index=Student_SearchByName(name); if (index=-1) printf(学生不存在!n); else printf(你要删除的学生信息为:n); Student_DisplaySingle(index); printf(是否真的要删除?(y/n); if (getchar()=y) for (i=index;inum-1;i+) studi=studi+1; num-; printf(删除成功!n); getchar(); /*/void StudentName_Select() char
29、name20; int index; printf(请输入要查询的学生的姓名:); scanf(%s,&name); getchar(); index=Student_SearchByName(name); if(index=-1) printf(学生不存在!n); else printf(n你要查询的学生信息为:n); Student_DisplaySingle(index); /*/void StudentID_Select()char id20; int index; printf(请输入要查询的学生的学号:); scanf(%s,&id); getchar(); index=Student_SearchByIndex(id); if(index=-1) printf(学生不存在!n); else printf(n你要查询的学生信息为:n); Student_DisplaySingle(index); /*/void TongJi()int a5=0,b5=0,c5=0,d5=0,e5=0; int i,k;for(i=0;inum;i+) for(k=0;k=90&studi.Scorek=80&studi.Scorek=70&studi.Scorek)ck+;if(studi.Scorek=60&studi.Scorek=0&studi.Scor
限制150内