1、淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 学生成绩管理系统 系 (院): 计算机工程学院设计时间: 2013.12.232013。1.5 设计地点: 软件工程实验室、教室指导教师评语: 签名: 年 月 日数据结构课程设计报告 第 22 页,共 页1课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3。提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4。训练用系统的观点和软件开发一般规范进行软件开发,
2、巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2课程设计任务与要求:任务根据教材数据结构C语言描述(耿国华主编)和参考书数据结构题集(C语言版)(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过2人。学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。学生自选课题需在18周前报课程设计指导教师批准方可生效。要求
3、:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率.在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、。设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3、程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为
4、培养学生动手能力的一种手段,单独考核。3课程设计说明书一 需求分析该程序是模拟成绩管理系统,实现对学生成绩的录入,修改,插入,查询,删除,排序,统计等基本功能,本程序有以下规定:1. 管理员可以进行学生信息的录入,包括姓名,学号,班级,性别,各科成绩等信息2. 管理员和学生都可以进行成绩的查询(通过姓名,学号进行查询)3. 管理员还可以对学生信息进行管理(修改(整个或者单个记录项进行修改),插入(在已有的信息下进行有顺序的插入),删除(将整个记录删除),排序(按各科成绩高低进行排序,或者按姓名进行排序,或者是按学号进行排序),统计(各个学科的最高分,最低分,及格率)。二 概要设计l 系统用到的
5、抽象数据类型定义: ADT LinearList数据元素:D=aiaiD0,i=1,2,,n,n0,D0为某一数据对象关系:S=ai,ai+1ai,ai+1D0,i=1,2,n1基本操作:Locate(L,e)DestroyList(L)ClearList(L)GetData(L,i)InsList(L,i,e)DelList(L,i,&e)ADT LinearListl 系统中的子程序和功能说明:fprint(StudentList st) 保存到文件StudentList create(StudentList st,int n)Createseq(StudentList st)录入学生信息
6、Amst(StudentList st, char name)修改学生信息Insertst(StudentList *st)插入学生信息Deletest(StudentList *st,StudentType e)删除学生信息Search(StudentList st,char n20)学生信息查询系统Sort(StudentList st,char sc20)学生信息排序系统Jige(StudentList st,char subnum20) 统计学科及格率Bestscore(StudentList st,char subnum) 统计学科最高分Leastscore(StudentList
7、st,char subnum)统计学科最低分Menu()主菜单menu(StudentList st)小菜单main()主函数l 功能实现过程void Createseq(StudentList *st) 录入学生信息 输入学生的个数; 输入学生信息项的个数;输入学生信息项的表头; for(j=1;j=len;j+) 输入表头信息;依次录入学生信息:for(i=1;i=a;i+)for(j=1;j=学生信息项的个数;j+) 输入学生信息;是否保存信息(输入1或者2):输入选择;if(选择为1) 调用保存函数;if(选择为2)输出未保存; 输出学生信息;void Amst(StudentList
8、 st, char name) 修改学生信息 for(i=1;i=len;i+) if(输入的修改名字和记录中的学生的名字相同) 找到该学生的位置;输入你要修改的该学生记录项;for(j=1;j=a;j+) 找到该记录项;输入修改后的信息;显示修改的学生的信息;int Deletest(StudentList st,StudentType e) 删除学生信息 输入删除的位置; if(删除的位置不在范围内) 输出删除的位置不合法; 找到该位置进行删除; 输出删除后全部学生信息;int Search(StudentList *st,char n20) 查询学生信息 for(int i=1;ilen
9、gth;i+)for(j=1;j=ststunum;j+)if(学生某个信息与记录项相同) 找到该位置; 输出查找到的学生的信息;否则的话输出你查找的学生不存在;int Sort(StudentList *st,char sc20) 对学生信息排序 for(j=1;j=st-stunum;j+) 找到要进行排序的那一列;进行该列排序;/冒泡排序/输出排序结果;void Jige(StudentList st,char subnum20) 统计学科及格率 for(j=1;j=st-stunum;j+) 找到要统计的成绩的那一列; for(int i=1;ir0.dataj); printf(依次
10、录入学生信息:n); for(i=1;iri.dataj); printf(”n); void Amst(StudentList st, char name) 修改学生信息 int i,j; int len=stlength; int a=ststunum; int k,p; char str20; 修改的项目 char ne20; for(i=1;iri。dataj); printf(n); printf(输入你要修改的学生信息项目:); scanf(”s,&str); for(j=1;j=a;j+) if(strcmp(str0。dataj,str)=0)k=j; printf(”n输入修
11、改信息:); scanf(%s,ne); strcpy(st-rp。datak,ne); printf(”n修改的学生信息为:n); for(j=1;j=a;j+) printf(”st”,str0.dataj); printf(”st,st-rp。dataj); int Deletest(StudentList *st,StudentType e) 删除学生信息int i;printf(”n输入你要删除的位置:”);scanf(d”,i);if((ilength))printf(”删除的位置不合法!”);return(ERROR);e=stri;for(int k=i;k=stlength;
12、k+)st-rk=strk+1;stlength;for(int p=0;p=st-length;p+) for(int j=1;jstunum;j+)if(strcmp(st-ri。dataj,n)=0)k=i;r=j;a=1;if(a=1)printf(”n查找的学生信息为:n);for(j=1;j=st-stunum;j+)printf(”%st”,strk。dataj);else if(a=0)printf(”你查找的学生不存在!!);return(OK);int Sort(StudentList st,char sc20) /冒泡排序StudentType x;int j,i;int
13、 p;int n;for(j=1;j=st-stunum;j+)if(strcmp(st-r0。dataj,sc)=0)p=j;n=stlength;int change=1;for(i=1;i=n-1&change;i+)change=0;for(int k=1;k=n-i;k+)if(strcmp(strk。datap,st-rk+1.datap)0)x=strk;strk=strk+1;st-rk+1=x;change=1; for(i=1;i=stlength;i+) for(j=1;j=ststunum;j+) printf(”%st”,st-ri。dataj); printf(”n
14、”); return(OK);void Jige(StudentList st,char subnum20) /统计学科及格率char b10=”60;double s;int a=0;int p;int n=st。length;for(int j=1;j=st.stunum;j+)if(strcmp(st。r0。dataj,subnum)=0)p=j;for(int i=1;i=n;i+)if(strcmp(st。ri.datap,b)=0)a+;s=(a(1.0))/(n*1。0);printf(%s的学科及格率为f,st。r0.datap,s);四 设计与调试分析1。这个程序采用一个结构
15、体:学生信息结构体。采用的是顺序表的存储结构,顺序表的长度表示学生的个数。每个数组里面还有一个二维数组,表示每个学生含有的数据项.2。由于前期工作考虑的不是很周全,采用了顺序表,这对于实现程序的插入和删除的功能显然效率不是很高3。由于先前成绩定义成了字符型,所以对于成绩的比大小有些麻烦。我对于字符型转化成数字进行加减不是很清楚,所以在实现统计功能中并没有包括成绩的总分计算以及平均分的计算,这是该系统的漏洞。五 用户手册【 使用说明 】1. 进入学生成绩管理系统主页面2. 根据身份的不同进入不同的系统界面(如果是管理员则进入含有五个子系统选择的界面,而学生则只可以进入查询学生信息的界面)3. 如
16、果要录入学生的信息,则选择1,可以人工的控制要输入的学生个数以及每个学生含有的记录项,注意输完了保存进文件4. 如果要对学生进行管理,就选择2,将进入对学生管理的三项选择界面。如果要修改学生信息,选择1,输入要修改的学生的名字,找到该学生并输入要修改的学生的记录项,进行修改。如果要插入学生信息,选择2,选择插入的位置,当你插入的位置不合法时,会有提示。如果要删除学生信息,输入你要删除的学生的位置,如果没该学生则删除不合法。5. 如果要查找学生信息,则选择3,输入你要查找的学生的姓名或者学号,如果没有该学生就提示你查找的学生不存在。有该学生就会输出该学生的所以信息.6. 如果要对学生信息进行排序
17、,就选择4,输入你要进行排序的学生的记录项,它就会将该记录项把学生信息进行升序排列7. 如果要对学生信息进行统计,就选择5.如果要对学科成绩进行最高分统计,就选择1,然后输入你要统计的学科名,系统会找出该学科的最高分。如果要对学科成绩进行及格率的统计,则选择2,输入你要统计的学科名,系统会算出该学科的及格率。如果要对学科成绩进行最低分统计,则选择3,输入你要统计的学科名,系统会找出该学科的最低分。8. 如果系统结束,则按6结束.【 程序中的头文件 】includestdio。hincludestdlib.hincludeincludestring。h#includefstream.hdefin
18、e ERROR 0define OK 1define MAX_size 20 define LIST_SIZE 100 /线性表长度typedef char KeyType;typedef structKeyType dataMAX_sizeMAX_size;StudentType;typedef structStudentType rLIST_SIZE+1;int length;int stunum;StudentList;FILE fp;void Menu()printf(”n*学生成绩管理系统*n”);printf(”*1。录 入 学 生 的 基 本 信 息*n”);printf(* 2
19、。对 学 生 信 息 进 行 管 理 *n”);printf(* 3。查 找 学 生 信 息 *n”);printf(”* 4。对 学 生 信 息 进 行 排 序 *n);printf(”* 5.对 学 生 信 息 进 行 统 计 *n);printf(”* 6.退 出 系 统 *n);void fprint(StudentList st) /保存到文件 int len=stlength;int a=st-stunum;if((fp=fopen(”students_list.txt,”wb)=NULL) printf(File open error!n”); exit(0); for(int
20、i=0;i=len;i+)fwrite(stri,sizeof(StudentList),1,fp);/将学生信息写入文件*/ fclose(fp); /关闭文件*/ printf(n学生信息已成功保存到文件 students_list.txt 中!n); /getchar(); StudentList create(StudentList st,int n) /读出文件 if(fp=fopen(students_list.txt”,rb”)=NULL) printf(File open error!n”); exit(0); for(int i=0;i=n;i+)fread(&stri,si
21、zeof(StudentList),1,fp);fclose(fp); return st; void Createseq(StudentList st) /录入学生信息int k;int i; int len; / 学生的个数 int a; /学生信息项的个数 int j; printf(”输入学生的个数:); scanf(d”,len); st-length=len; printf(输入学生信息项的个数:”); scanf(”d”,&a); ststunum=a; printf(输入学生信息项的表头:); for(j=1;j=a;j+)scanf(”%s,str0。dataj); prin
22、tf(”依次录入学生信息:n”); for(i=1;i=len;i+) for(j=1;j=a;j+) scanf(s”,&stri.dataj); printf(是否保存信息(输入1或者2):”);scanf(”d”,k);if(k=1)fprint(st);printf(”保存成功!”);if(k=2)printf(未保存!); printf(输出学生信息:n); for(j=1;jr0.dataj); printf(n”); for(i=1;i=len;i+) for(j=1;j=a;j+) printf(”st,stri.dataj); printf(n”); void Amst(St
23、udentList *st, char name) /修改学生信息 int i,j; int len=stlength; int a=ststunum; int k,p; char str20; / 修改的项目 char ne20; for(i=1;iri。data1,name)=0) p=i; for(i=0;i=len;i+) for(j=1;j=a;j+) printf(”%st,stri.dataj); printf(”n”); printf(”输入你要修改的学生信息项目:); scanf(”s”,str); for(j=1;j=a;j+) if(strcmp(str0。dataj,s
24、tr)=0)k=j; printf(”n输入修改信息:”); scanf(s,ne); strcpy(strp。datak,ne); printf(n修改的学生信息为:n); for(j=1;jrp。dataj); int Insertst(StudentList st) /插入学生信息int i;printf(n输入你要插入的位置:”);scanf(”%d”,i);if(i1)|(ist-length+1)printf(”插入的位置不合法!”);return(ERROR);if(stlength=LIST_SIZE)printf(”表已满,无法插入);return(ERROR);for(in
25、t k=st-length;k=i;k-)strk+1=strk;for(int j=1;j=st-stunum;j+)printf(”%s”,st-r0.dataj);scanf(”%s,&stri。dataj);stlength+; for(int p=0;plength;p+) for(j=1;j=st-stunum;j+) printf(st,strp。dataj); printf(”n”); fprint(st);return(OK);int Deletest(StudentList *st,StudentType e)/删除学生信息int i;printf(”n输入你要删除的位置:
26、”);scanf(”%d”,i);if((ilength)printf(”删除的位置不合法!!”);return(ERROR);*e=st-ri;for(int k=i;k=stlength;k+)strk=st-rk+1;stlength;for(int p=0;p=st-length;p+) for(int j=1;jrp。dataj); printf(n); fprint(st);return(OK);int Search(StudentList st,char n20) /查找int a=0;int r;int k;int j;for(int i=1;i=stlength;i+)for
27、(j=1;jstunum;j+)if(strcmp(st-ri。dataj,n)=0)k=i;r=j;a=1;if(a=1)printf(”n查找的学生信息为:n);for(j=1;j=ststunum;j+)printf(”st”,st-rk。dataj);else if(a=0)printf(”你查找的学生不存在!);return(OK);int Sort(StudentList st,char sc20) /冒泡排序StudentType x;int j,i;int p;int n;for(j=1;j=st-stunum;j+)if(strcmp(str0.dataj,sc)=0)p=j
28、;n=stlength;int change=1;for(i=1;i=n-1&change;i+)change=0;for(int k=1;k=ni;k+)if(strcmp(strk.datap,strk+1。datap)0)x=strk;strk=st-rk+1;st-rk+1=x;change=1; for(i=1;i=st-length;i+) for(j=1;jri.dataj); printf(”n); return(OK);void Jige(StudentList st,char subnum20) /统计学科及格率char b10=”60;double s;int a=0;i
29、nt p;int n=st.length;for(int j=1;j=st。stunum;j+)if(strcmp(st.r0。dataj,subnum)=0)p=j;for(int i=1;i=n;i+)if(strcmp(st。ri。datap,b)=0)a+;s=(a(1。0))/(n*1。0);printf(s的学科及格率为f”,st.r0。datap,s);void Bestscore(StudentList st,char subnum) /统计学科最高分int max=1;int j;int p;int n=st。length;for(j=1;j=st。stunum;j+)if(
30、strcmp(st。r0。dataj,subnum)=0)p=j;for(int i=1;i=n;i+)if(strcmp(st.ri.datap,st。rmax。datap)0)max=i;printf(”%s的学科的最高分为s”,st.r0。datap,st。rmax。datap);void Leastscore(StudentList st,char subnum) /统计学科最低分int min=st。length;int j;int p;int n=st.length;for(j=1;j=st。stunum;j+)if(strcmp(st.r0.dataj,subnum)=0)p=j
31、;for(int i=1;i=n;i+)if(strcmp(st.ri。datap,st.rmin。datap)0)min=i;printf(%s的学科的最低分为s”,st。r0。datap,st。rmin。datap);void menu(StudentList *st)StudentType x;x=(StudentType*)malloc(sizeof(StudentType);int a;printf(1。修 改 学 生 信 息n”);printf(2.插 入 学 生 信 息n);printf(3。删 除 学 生 信 息n”);printf(”n输入序号:n”);scanf(”d”,&a);switch(a)case 1:char na20;printf(”请输入你要修改的学生的姓名:”);scanf(”s”,&na);Amst(st,na);break;case 2:Insertst(st);break;case 3:Deletest(st,x);break;void main() /主函数int a;int e;int
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100