收藏 分享(赏)

数据结构课程设计报告学生成绩管理系统.doc

上传人:精品资料 文档编号:10743301 上传时间:2020-01-04 格式:DOC 页数:29 大小:484KB
下载 相关 举报
数据结构课程设计报告学生成绩管理系统.doc_第1页
第1页 / 共29页
数据结构课程设计报告学生成绩管理系统.doc_第2页
第2页 / 共29页
数据结构课程设计报告学生成绩管理系统.doc_第3页
第3页 / 共29页
数据结构课程设计报告学生成绩管理系统.doc_第4页
第4页 / 共29页
数据结构课程设计报告学生成绩管理系统.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 学生成绩管理系统 系 ( 院): 计算机工程学院 设计时间: 2013.12.232013.1.5 设计地点: 软件工程实验室、教室 指导教师评语:签名: 年 月 日数据结构课程设计报告 第 1 页,共 页1课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发

2、,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2课程设计任务与要求:任务根据教材数据结构-C 语言描述 (耿国华主编)和参考书数据结构题集(C 语言版) (严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过 2 人。学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。学生自选课题需在 18 周前报课程设计指导教

3、师批准方可生效。要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、.设计的题目要求达到一定工作量(300 行以上代码) ,并具有一定的深度和难度。3、程序设计语言推荐使用 C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5 、每位同学需独立提交设计报告书(每人一份) ,要求编排格式统一、规范、内容充实,不少于 10 页(

4、代码不算) ;6、课程设计实践作为培养学生动手能力的一种手段,单独考核。数据结构课程设计报告 第 2 页,共 页3课程设计说明书一 需求分析该程序是模拟成绩管理系统,实现对学生成绩的录入,修改,插入,查询,删除,排序,统计等基本功能,本程序有以下规定:1. 管理员可以进行学生信息的录入,包括姓名,学号,班级,性别,各科成绩等信息2. 管理员和学生都可以进行成绩的查询(通过姓名,学号进行查询)3. 管理员还可以对学生信息进行管理(修改(整个或者单个记录项进行修改) ,插入(在已有的信息下进行有顺序的插入) ,删除(将整个记录删除) ) ,排序(按各科成绩高低进行排序,或者按姓名进行排序,或者是按

5、学号进行排序),统计(各个学科的最高分,最低分,及格率) 。二 概要设计 系统用到的抽象数据类型定义: ADT LinearList数据元素:D=a i|aiD0,i=1,2,n,n0,D 0 为某一数据对象 关系:S=|ai,ai+1D0,i=1,2,n-1基本操作:Locate(L,e)DestroyList(L)ClearList(L )GetData(L,i)InsList(L,i,e )DelList( L,i, 输入学生信息项的个数;数据结构课程设计报告 第 3 页,共 页输入学生信息项的表头;for(j=1;jlength;i+)for(j=1;jstunum;j+)if(学生某

6、个信息与记录项相同)找到该位置;数据结构课程设计报告 第 4 页,共 页输出查找到的学生的信息;否则的话输出你查找的学生不存在;int Sort(StudentList *st,char sc20) 对学生信息排序for(j=1;jstunum;j+)找到要进行排序的那一列;进行该列排序;/*冒泡排序*/输出排序结果;void Jige(StudentList st,char subnum20) 统计学科及格率for(j=1;jstunum;j+)找到要统计的成绩的那一列;for(int i=1;ilength=len;printf(“输入学生信息项的个数:“);scanf(“%d“,st-s

7、tunum=a;printf(“输入学生信息项的表头:“);for(j=1;jr0.dataj);printf(“依次录入学生信息:n“);for(i=1;iri.dataj);printf(“是否保存信息(输入 1 或者 2):“);scanf(“%d“,if(k=1)fprint(st);printf(“保存成功!“);if(k=2)printf(“未保存!“);printf(“输出学生信息:n“);for(j=1;jr0.dataj);printf(“n“);for(i=1;iri.dataj);printf(“n“);void Amst(StudentList *st, char na

8、me) 修改学生信息int i,j;数据结构课程设计报告 第 6 页,共 页int len=st-length;int a=st-stunum;int k,p;char str20; 修改的项目char ne20;for(i=1;iri.data1,name)=0)p=i;for(i=0;iri.dataj);printf(“n“);printf(“输入你要修改的学生信息项目:“);scanf(“%s“,for(j=1;jr0.dataj,str)=0)k=j;printf(“n 输入修改信息:“);scanf(“%s“,strcpy(st-rp.datak,ne);printf(“n 修改的

9、学生信息为:n“);for(j=1;jr0.dataj);printf(“%st“,st-rp.dataj);int Deletest(StudentList *st,StudentType *e) 删除学生信息int i;printf(“n 输入你要删除的位置:“);scanf(“%d“,if(ist-length)printf(“删除的位置不合法!“);return(ERROR);*e=st-ri;for(int k=i;klength;k+)st-rk=st-rk+1;数据结构课程设计报告 第 7 页,共 页st-length-;for(int p=0;plength;p+)for(in

10、t j=1;jstunum;j+)printf(“%st“,st-r0.dataj);printf(“%st“,st-rp.dataj);printf(“n“);return(OK);int Search(StudentList *st,char n20) 查找int a=0;int r;int k;int j;for(int i=1;ilength;i+)for(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;jstunum;j+)printf(“%st“,

11、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;数据结构课程设计报告 第 8 页,共 页for(j=1;jstunum;j+)if(strcmp(st-r0.dataj,sc)=0)p=j;n=st-length;int change=1;for(i=1;irk.datap,st-rk+1.datap)0)x=st-rk;st-rk=st-rk+1;st-rk+1=x;change

12、=1;for(i=1;ilength;i+)for(j=1;jstunum;j+)printf(“%st“,st-ri.dataj);printf(“n“);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=0)a+;数据结构课程设计报告 第 9 页,共 页s=(a*(1.0)/(n*1.0);printf(“%s 的学科及格率为%f“,st.r0.datap,s);四 设计与调试分析1.这个程

13、序采用一个结构体:学生信息结构体。采用的是顺序表的存储结构,顺序表的长度表示学生的个数。每个数组里面还有一个二维数组,表示每个学生含有的数据项。2.由于前期工作考虑的不是很周全,采用了顺序表,这对于实现程序的插入和删除的功能显然效率不是很高3.由于先前成绩定义成了字符型,所以对于成绩的比大小有些麻烦。我对于字符型转化成数字进行加减不是很清楚,所以在实现统计功能中并没有包括成绩的总分计算以及平均分的计算,这是该系统的漏洞。五 用户手册【 使用说明 】1. 进入学生成绩管理系统主页面2. 根据身份的不同进入不同的系统界面(如果是管理员则进入含有五个子系统选择的界面,而学生则只可以进入查询学生信息的

14、界面)3. 如果要录入学生的信息,则选择 1,可以人工的控制要输入的学生个数以及每个学生含有的记录项,注意输完了保存进文件4. 如果要对学生进行管理,就选择 2,将进入对学生管理的三项选择界面。如果要修改学生信息,选择 1,输入要修改的学生的名字,找到该学生并输入要修改的学生的记录项,进行修改。如果要插入学生信息,选择 2,选择插入的位置,当你插入的位置不合法时,会有提示。如果要删除学生信息,输入你要删除的学生的位置,如果没该学生则删除不合法。5. 如果要查找学生信息,则选择 3,输入你要查找的学生的姓名或者学号,如果没有该学生就提示你查找的学生不存在。有该学生就会输出该学生的所以信息。6.

15、如果要对学生信息进行排序,就选择 4,输入你要进行排序的学生的记录项,它就会将该记录项把学生信息进行升序排列7. 如果要对学生信息进行统计,就选择 5.如果要对学科成绩进行最高分统计,就选择 1,然后输入你要统计的学科名,系统会找出该学科的最高分。如果要对学科成绩进行及格率的统计,则选择 2,输入你要统计的学科名,系统会算出该学科的及格率。如果要对学科成绩进行最低分统计,则选择 3,输入你要统计的学科名,系统会找出该学科的最低分。8. 如果系统结束,则按 6 结束。【 程序中的头文件 】#include#include#include#include#define ERROR 0#define

16、 OK 1数据结构课程设计报告 第 10 页,共 页#define MAX_size 20 #define LIST_SIZE 100 /线性表长度typedef char KeyType;FILE *fp; /*定义全局变量 */六 测试成果1. 录入学生信息2. 插入学生信息数据结构课程设计报告 第 11 页,共 页3. 修改学生数据结构课程设计报告 第 12 页,共 页4. 删除学生信息5. 对学生信息排序(1) 学号排序 (2) 姓名排序数据结构课程设计报告 第 13 页,共 页(3) 成绩排序 6. 查找学生(1)学号查找数据结构课程设计报告 第 14 页,共 页(2)姓名查找7.

17、统计(1) 最高分(2) 及格率(3) 最低分数据结构课程设计报告 第 15 页,共 页8. 学生查询七 附录(源程序清单)#include#include#include#include#define ERROR 0#define OK 1#define MAX_size 20 #define LIST_SIZE 100 /线性表长度typedef char KeyType;typedef structKeyType dataMAX_sizeMAX_size;StudentType;typedef struct数据结构课程设计报告 第 16 页,共 页StudentType rLIST_SI

18、ZE+1;int length;int stunum;StudentList;FILE *fp;void Menu()printf(“n*学生成绩管理系统*n“);printf(“*1.录 入 学 生 的 基 本 信 息*n“);printf(“* 2.对 学 生 信 息 进 行 管 理 *n“);printf(“* 3.查 找 学 生 信 息 *n“);printf(“* 4.对 学 生 信 息 进 行 排 序 *n“);printf(“* 5.对 学 生 信 息 进 行 统 计 *n“);printf(“* 6.退 出 系 统 *n“);void fprint(StudentList *s

19、t) /保存到文件 int len=st-length;int a=st-stunum;if(fp=fopen(“students_list.txt“,“wb“)=NULL) printf(“File open error!n“); exit(0); for(int i=0;iri,sizeof(StudentList),1,fp);/*将学生信息写入文件*/ fclose(fp); /*关闭文件*/ printf(“n 学生信息已成功保存到文件 students_list.txt 中!n“); /getchar(); StudentList *create(StudentList *st,i

20、nt n) /读出文件 if(fp=fopen(“students_list.txt“,“rb“)=NULL) printf(“File open error!n“); exit(0); for(int i=0;iri,sizeof(StudentList),1,fp);fclose(fp); return st; void Createseq(StudentList *st) /录入学生信息数据结构课程设计报告 第 17 页,共 页int k;int i;int len; / 学生的个数int a; /学生信息项的个数int j;printf(“输入学生的个数:“);scanf(“%d“,s

21、t-length=len;printf(“输入学生信息项的个数:“);scanf(“%d“,st-stunum=a;printf(“输入学生信息项的表头:“);for(j=1;jr0.dataj);printf(“依次录入学生信息:n“);for(i=1;iri.dataj);printf(“是否保存信息(输入 1 或者 2):“);scanf(“%d“,if(k=1)fprint(st);printf(“保存成功!“);if(k=2)printf(“未保存!“);printf(“输出学生信息:n“);for(j=1;jr0.dataj);printf(“n“);for(i=1;iri.dat

22、aj);printf(“n“);void Amst(StudentList *st, char name) /修改学生信息数据结构课程设计报告 第 18 页,共 页int i,j;int len=st-length;int a=st-stunum;int k,p;char str20; / 修改的项目char ne20;for(i=1;iri.data1,name)=0)p=i;for(i=0;iri.dataj);printf(“n“);printf(“输入你要修改的学生信息项目:“);scanf(“%s“,for(j=1;jr0.dataj,str)=0)k=j;printf(“n 输入修

23、改信息:“);scanf(“%s“,strcpy(st-rp.datak,ne);printf(“n 修改的学生信息为:n“);for(j=1;jr0.dataj);printf(“%st“,st-rp.dataj);int Insertst(StudentList *st) /插入学生信息int i;printf(“n 输入你要插入的位置:“);scanf(“%d“,if(ist-length+1)printf(“插入的位置不合法!“);return(ERROR);if(st-length=LIST_SIZE)数据结构课程设计报告 第 19 页,共 页printf(“表已满,无法插入“);r

24、eturn(ERROR);for(int k=st-length;k=i;k-)st-rk+1=st-rk;for(int j=1;jstunum;j+)printf(“%s“,st-r0.dataj);scanf(“%s“,st-length+;for(int p=0;plength;p+)for(j=1;jstunum;j+)printf(“%st“,st-rp.dataj);printf(“n“);fprint(st);return(OK);int Deletest(StudentList *st,StudentType *e)/删除学生信息int i;printf(“n 输入你要删除的

25、位置:“);scanf(“%d“,if(ist-length)printf(“删除的位置不合法!“);return(ERROR);*e=st-ri;for(int k=i;klength;k+)st-rk=st-rk+1;st-length-;for(int p=0;plength;p+)for(int j=1;jstunum;j+)printf(“%st“,st-rp.dataj);printf(“n“);fprint(st);return(OK);数据结构课程设计报告 第 20 页,共 页int Search(StudentList *st,char n20) /查找int a=0;int

26、 r;int k;int j;for(int i=1;ilength;i+)for(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;jstunum;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;js

27、tunum;j+)if(strcmp(st-r0.dataj,sc)=0)p=j;n=st-length;int change=1;for(i=1;irk.datap,st-rk+1.datap)0)x=st-rk;st-rk=st-rk+1;st-rk+1=x;change=1;for(i=1;ilength;i+)for(j=1;jstunum;j+)printf(“%st“,st-ri.dataj);printf(“n“);return(OK);void Jige(StudentList st,char subnum20) /统计学科及格率char b10=“60“;double s;i

28、nt a=0;int p;int n=st.length;for(int j=1;j=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;j0)max=i;printf(“%s 的学科的最高分为%s“,st.r0.datap,st.rmax.datap);void Leastscore(StudentList st,char subn

29、um) /统计学科最低分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;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

30、(StudentType);int a;printf(“1.修 改 学 生 信 息n“);printf(“2.插 入 学 生 信 息n“);printf(“3.删 除 学 生 信 息n“);printf(“n 输入序号:n“);scanf(“%d“,switch(a)case 1:char na20;printf(“请输入你要修改的学生的姓名:“);scanf(“%s“,Amst(st,na);break;数据结构课程设计报告 第 23 页,共 页case 2:Insertst(st);break;case 3:Deletest(st,x);break;void main() /主函数int

31、a;int e;int flag=1;char i;StudentList *st;st=(StudentList*)malloc(sizeof(StudentList);printf(“-欢迎使用学生管理系统-n“);printf(“请输入你的身份:(提示:管理员为 0,一般学生为 1)“);scanf(“%d“,if(e=0)while(flag)Menu();printf(“n 请输入你选择的序号:“);scanf(“%d“,switch(a)case 1:Createseq(st);printf(“n 是否返回主菜单?(是 Y 不是 N)“);scanf(“%c“,if(i=Y|i=y

32、)flag=1;if(i=N|i=n)flag=0;printf(“-退出系统,谢谢使用-“);break;case 2:menu(st);break;case 3:数据结构课程设计报告 第 24 页,共 页char str120;printf(“输入查询的姓名或者学号“);scanf(“%s“,Search(st,str1);printf(“n 是否返回主菜单?(是 Y 不是 N)“);scanf(“%s“,if(i=Y|i=y)flag=1;if(i=N|i=n)flag=0;printf(“-退出系统,谢谢使用-“);break;case 4:char str220;printf(“输入

33、你要按照什么条件排序:“);scanf(“%s“,Sort(st,str2);printf(“n 是否返回主菜单?(是 Y 不是 N)“);scanf(“%s“,if(i=Y|i=y)flag=1;if(i=N|i=n)flag=0;printf(“-退出系统,谢谢使用-“);break;case 5:char str320;int x;printf(“输入你要按照什么学科进行统计:“);scanf(“%s“,printf(“输入选择:(最高分选 1,及格率选 2,最低分选 3)“);scanf(“%d“,if(x=1)Bestscore(*st,str3);else if(x=2)Jige(

34、*st,str3);else if(x=3)Leastscore(*st,str3);数据结构课程设计报告 第 25 页,共 页printf(“n 是否返回主菜单?(是 Y 不是 N)“);scanf(“%s“,if(i=Y|i=y)flag=1;if(i=N|i=n)flag=0;printf(“-退出系统,谢谢使用-“);break;case 6:printf(“-退出系统,谢谢使用-“);flag=0;if(e=1)int n;printf(“输入数据项的长度:“);scanf(“%d“,create(st,n);char s120;printf(“n*欢迎使用查询系统*n“);prin

35、tf(“请输入查询的姓名或者学号:“);scanf(“%s“,Search(st,s1);八课程设计心得这次课程设计我选择的是学生成绩管理系统。我们进行这次课程设计,在老师的带领下,把软件工程的设计过程走了一遍。因此对于软件工程的设计有了一定的了解。刚开始的时候,我对这个流程并不是很重视,在我的概念里设计就是把代码写出来然后能够运行出来就算完成了。但是我还是按照老师的要求一步一步的来,渐渐地发现写代码之前的需求分析,大体设计以及具体设计是很重要的。我们所有的设计都是以需求分析为基础的,我们只有知道该系统的用途才能够根据用途设计出适合用户使用的系统。我的课程设计功能包括对学生信息的录入,管理(包

36、括修改学生信息,插入学生信息,删除学生信息) ,查找学生信息,对学生信息进行相应的排序以及对学生成绩信息进行统计。该学生系统对两部分人的登陆有不同的权限,管理员可以实现所有的功能,而一般的学生只能查询学生信息。在概要设计中,我选择了线性表的存储结构,并且将学生信息的数据类型都定义成字符型,这显数据结构课程设计报告 第 26 页,共 页然是没有考虑周全。对线性表这个结构进行删除和插入的操作,比较的浪费时间效率。数据类型的定义也是不科学的,主要表现在对成绩的操作上面,由于字符的复杂性,有些对成绩的操作功能没有能够实现,这是该系统的漏洞之一。可见概要设计是很重要的,我认为概要设计整个设计的灵魂。因为

37、它控制了全局的操作。因此我们一定要在概要设计上好好下一些的功夫才行。概要设计完成之后就是就是详细设计,所谓详细设计就是对每个功能用代码表示出来从而实现这些功能。很多人认为详细设计就直接进行敲代码不就可以了吗,其实不然,老师说只有你在详细设计好好完成,这会大大节省后面所花费的时间。否则的话后面会花费更多的时间。可见详细设计的重要性。详细设计完之后就是上机调试,这是我最熟悉的过程。虽然这是我最熟悉的过程,但是还是遇到些问题。首先是文件的应用,上学期我们在 C+中学习了文件的使用,但是我并没有完全的掌握。并且也不是很理解。于是我放弃了 C+。在网上找到了 c 语言的版本,最终选择了 fread 和

38、fwrite这两个读写方法,虽然最后是写入文件并且能够从文件中读出来,但是我保存的 txt 文件中的信息都是乱码,这是我不能理解的,我觉得我对读写方法的使用还是有些缺陷的。然后就是好多情况就是语法上上并没有错误,但是到了运行的时候就出现乱码甚至停止运行。大多数是出现在小的细节上,比如说少写了个等于号,忘记赋值之类的。还有的问题就是看着感觉没有问题,但是运行过程就是达不到我想到的结果,例如应该要输入,但是它不让你输入,直接跳过。对于这些请问题,有的是我瞎捣鼓弄出来的,有的是在同学的帮助下完成的。出现这种情况,我觉得是我对 c 语言的内部运行情况没有很好的理解,也就是说我在这方面还有许多知识的欠缺,这就需要我好好补补这方面的知识。课程设计让我们独立完成了一个系统,虽然系统不是很完善,但是我还是满欣喜的,至少我可以运用所学的知识进行微小的系统实现。在这个过程中,我也学到了很多,拓展了我的知识面,提高了我的动手能力以及对知识的综合运用的能力。同时也发现了自己的缺陷。总的来说这是一次不错实践,数据结构课程设计报告 第 27 页,共 页数据结构课程设计报告 第 28 页,共 页

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报