




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 学生成绩管理系统 系 (院): 计算机工程学院 设计时间: 2013.12.232013.1.5 设计地点: 软件工程实验室、教室 指导教师评语: 签名: 年 月 日数据结构课程设计报告 第 28 页,共 页1课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2课程设计任务与要求:任务根据教材数据结构-C语言描述(耿国华主编)和参考书数据结构题集(C语言版)(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过2人。学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。学生自选课题需在18周前报课程设计指导教师批准方可生效。要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3、程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。 3课程设计说明书一 需求分析该程序是模拟成绩管理系统,实现对学生成绩的录入,修改,插入,查询,删除,排序,统计等基本功能,本程序有以下规定:1. 管理员可以进行学生信息的录入,包括姓名,学号,班级,性别,各科成绩等信息2. 管理员和学生都可以进行成绩的查询(通过姓名,学号进行查询)3. 管理员还可以对学生信息进行管理(修改(整个或者单个记录项进行修改),插入(在已有的信息下进行有顺序的插入),删除(将整个记录删除),排序(按各科成绩高低进行排序,或者按姓名进行排序,或者是按学号进行排序),统计(各个学科的最高分,最低分,及格率)。二 概要设计l 系统用到的抽象数据类型定义: ADT LinearList数据元素:D=ai|aiD0,i=1,2,n,n0,D0为某一数据对象关系: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,&e)ADT LinearListl 系统中的子程序和功能说明:fprint(StudentList *st) 保存到文件StudentList *create(StudentList *st,int n)Createseq(StudentList *st)录入学生信息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 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 *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;ilength;i+)for(j=1;jstunum;j+)if(学生某个信息与记录项相同) 找到该位置; 输出查找到的学生的信息;否则的话输出你查找的学生不存在;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,&a); st-stunum=a; printf(输入学生信息项的表头:); for(j=1;jr0.dataj); printf(依次录入学生信息:n); for(i=1;i=len;i+) for(j=1;jri.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;jri.dataj); printf(n); void Amst(StudentList *st, char name) 修改学生信息 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;i=len;i+) for(j=1;jri.dataj); printf(n); printf(输入你要修改的学生信息项目:); scanf(%s,&str); for(j=1;jr0.dataj,str)=0)k=j; printf(n输入修改信息:); scanf(%s,&ne); strcpy(st-rp.datak,ne); printf(n修改的学生信息为:n); for(j=1;jr0.dataj); printf(%st,st-rp.dataj); int Deletest(StudentList *st,StudentType *e) 删除学生信息int i;printf(n输入你要删除的位置:);scanf(%d,&i);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-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,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;jstunum;j+)if(strcmp(st-r0.dataj,sc)=0)p=j;n=st-length;int change=1;for(i=1;i=n-1&change;i+)change=0;for(int k=1;krk.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;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=0)a+;s=(a*(1.0)/(n*1.0);printf(%s的学科及格率为%f,st.r0.datap,s);四 设计与调试分析1.这个程序采用一个结构体:学生信息结构体。采用的是顺序表的存储结构,顺序表的长度表示学生的个数。每个数组里面还有一个二维数组,表示每个学生含有的数据项。2.由于前期工作考虑的不是很周全,采用了顺序表,这对于实现程序的插入和删除的功能显然效率不是很高3.由于先前成绩定义成了字符型,所以对于成绩的比大小有些麻烦。我对于字符型转化成数字进行加减不是很清楚,所以在实现统计功能中并没有包括成绩的总分计算以及平均分的计算,这是该系统的漏洞。五 用户手册【 使用说明 】1. 进入学生成绩管理系统主页面2. 根据身份的不同进入不同的系统界面(如果是管理员则进入含有五个子系统选择的界面,而学生则只可以进入查询学生信息的界面)3. 如果要录入学生的信息,则选择1,可以人工的控制要输入的学生个数以及每个学生含有的记录项,注意输完了保存进文件4. 如果要对学生进行管理,就选择2,将进入对学生管理的三项选择界面。如果要修改学生信息,选择1,输入要修改的学生的名字,找到该学生并输入要修改的学生的记录项,进行修改。如果要插入学生信息,选择2,选择插入的位置,当你插入的位置不合法时,会有提示。如果要删除学生信息,输入你要删除的学生的位置,如果没该学生则删除不合法。5. 如果要查找学生信息,则选择3,输入你要查找的学生的姓名或者学号,如果没有该学生就提示你查找的学生不存在。有该学生就会输出该学生的所以信息。6. 如果要对学生信息进行排序,就选择4,输入你要进行排序的学生的记录项,它就会将该记录项把学生信息进行升序排列7. 如果要对学生信息进行统计,就选择5.如果要对学科成绩进行最高分统计,就选择1,然后输入你要统计的学科名,系统会找出该学科的最高分。如果要对学科成绩进行及格率的统计,则选择2,输入你要统计的学科名,系统会算出该学科的及格率。如果要对学科成绩进行最低分统计,则选择3,输入你要统计的学科名,系统会找出该学科的最低分。8. 如果系统结束,则按6结束。【 程序中的头文件 】#include#include#include#include#define ERROR 0#define OK 1#define MAX_size 20 #define LIST_SIZE 100 /线性表长度typedef char KeyType;FILE *fp; /*定义全局变量*/六 测试成果1. 录入学生信息2. 插入学生信息3. 修改学生4. 删除学生信息5. 对学生信息排序(1) 学号排序 (2) 姓名排序(3) 成绩排序 6. 查找学生(1)学号查找(2)姓名查找7. 统计(1) 最高分(2) 及格率(3) 最低分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 structStudentType rLIST_SIZE+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 *st) /保存到文件 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,int 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) /录入学生信息int k;int i; int len; / 学生的个数 int a; /学生信息项的个数 int j; printf(输入学生的个数:); scanf(%d,&len); st-length=len; printf(输入学生信息项的个数:); scanf(%d,&a); st-stunum=a; printf(输入学生信息项的表头:); for(j=1;jr0.dataj); printf(依次录入学生信息:n); for(i=1;i=len;i+) for(j=1;jri.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;jri.dataj); printf(n); void Amst(StudentList *st, char name) /修改学生信息 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;i=len;i+) for(j=1;jri.dataj); printf(n); printf(输入你要修改的学生信息项目:); scanf(%s,&str); for(j=1;jr0.dataj,str)=0)k=j; printf(n输入修改信息:); scanf(%s,&ne); 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,&i);if(ist-length+1)printf(插入的位置不合法!);return(ERROR);if(st-length=LIST_SIZE)printf(表已满,无法插入);return(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-ri.dataj);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输入你要删除的位置:);scanf(%d,&i);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);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,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;jstunum;j+)if(strcmp(st-r0.dataj,sc)=0)p=j;n=st-length;int change=1;for(i=1;i=n-1&change;i+)change=0;for(int k=1;krk.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;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=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(strcmp(st.r0.dataj,subnum)=0)p=j;for(int i=1;i0)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;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 flag=1;char i;StudentList *st;st=(StudentList*)malloc(sizeof(StudentList);printf(-欢迎使用学生管理系统-n); printf(请输入你的身份:(提示:管理员为0,一般学生为1);scanf(%d,&e);if(e=0)while(flag)Menu();printf(n请输入你选择的序号:);scanf(%d,&a);switch(a)case 1:Createseq(st); printf(n是否返回主菜单?(是Y不是N); scanf(%c,&i); if(i=Y|i=y) flag=1; if(i=N|i=n)flag=0;printf(-退出系统,谢谢使用-);break;case 2:menu(st);break; case 3: char str120; printf(输入查询的姓名或者学号); scanf(%s,&str1); Search(st,str1); printf(n是否返回主菜单?(是Y不是N); scanf(%s,&i); if(i=Y|i=y) flag=1; if(i=N|i=n)flag=0;printf(-退出系统,谢谢使用-);break;case 4:char str220;printf(输入你要按照什么条件排序:);scanf(%s,&str2);Sort(st,str2);printf(n是否返回主菜单?(是Y不是N); scanf(%s,&i); 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,&str3);printf(输入选择:(最高分选1,及格率选2,最低分选3);scanf(%d,&x);if(x=1)Bestscore(*st,str3);else if(x=2)Jige(*st,str3);else if(x=3)Leastscore(*st,str3);printf(n是否返回主菜单?(是Y不是N); scanf(%s,&i); 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,&n);create(st,n);char s120;printf(n*欢迎使用查询系统*n);printf(请输入查询的姓名或者学号:);scanf(%s,&s1); Search(st,s1);八课程设计心得这次课程设计我选择的是学生成绩管理系统。我们进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能交通系统中的行人行为预测模型考核试卷
- 企业安全生产培训教材的数字化转型升级考核试卷
- 2025年中国pps滤袋数据监测研究报告
- 2025年中国M氢基甲酯数据监测报告
- 2025年中国BR型板式换热器数据监测研究报告
- 2025年中国2U形电子节能灯数据监测研究报告
- 2025至2030年中国震击标准震筛机市场分析及竞争策略研究报告
- 2025至2030年中国铝合金野营床市场分析及竞争策略研究报告
- 2025至2030年中国远程通讯器市场分析及竞争策略研究报告
- 2025至2030年中国茶叶天然保鲜剂市场分析及竞争策略研究报告
- 农产品产业园项目可行性研究报告专用模板
- 2025至2030中国医药软包装行业市场发展分析及竞争格局与投资发展报告
- 2025年中国氯化聚醚项目投资计划书
- DB37-T5311-2025建筑工程消防设计文件编制标准
- 成都市高新区2023年七年级《历史》下册期末试卷与参考答案
- 中国上市银行2024年回顾及未来展望-安永-202505
- TSG Z7002-2022特种设备检测机构核准规则
- 2025年数字经济下的创业政策调整策略试题及答案
- 政治 (道德与法治)八年级下册自由平等的追求教案
- 山东省济南市高新区学卷B2024-2025学年数学五下期末教学质量检测试题含答案
- 订单外发合同协议
评论
0/150
提交评论