数据结构课程设计说明书学生成绩管理程序的设计与实现.doc

上传人:laozhun 文档编号:2396784 上传时间:2023-02-17 格式:DOC 页数:39 大小:159.50KB
返回 下载 相关 举报
数据结构课程设计说明书学生成绩管理程序的设计与实现.doc_第1页
第1页 / 共39页
数据结构课程设计说明书学生成绩管理程序的设计与实现.doc_第2页
第2页 / 共39页
数据结构课程设计说明书学生成绩管理程序的设计与实现.doc_第3页
第3页 / 共39页
数据结构课程设计说明书学生成绩管理程序的设计与实现.doc_第4页
第4页 / 共39页
数据结构课程设计说明书学生成绩管理程序的设计与实现.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《数据结构课程设计说明书学生成绩管理程序的设计与实现.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计说明书学生成绩管理程序的设计与实现.doc(39页珍藏版)》请在三一办公上搜索。

1、课程设计任务书学生姓名: XXX 专业班级: 计算机0502 指导教师: XXX 工作单位:计算机科学与技术学院 题 目: 学生成绩管理程序的设计与实现初始条件:理论:学习了数据结构课程,掌握了基本的数据结构和常用的算法;实践:计算机技术系实验室提供计算机及软件开发环境。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能:(1)对学生的姓名、各科成绩进行输入和修改;(2)老师可以对成绩按各种条件进行查询、统计、排序;(3)以班为单位打印成绩单;(4)学生对自己的成绩和排名进行查询。2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰

2、写课程设计报告,包括:(1)设计题目;(2)摘要和关键字;(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、结果分析、设计体会等;(4)结束语;(5)参考文献。时间安排: 2007年7月2日7日 (第18周)7月2日 查阅资料7月3日 系统设计,数据结构设计,算法设计7月4日-5日 编程并上机调试7月6日 撰写报告7月7日 验收程序,提交设计报告书。指导教师签名: 2007年7月2日系主任(或责任教师)签名: 2007年7月2日学生成绩管理系统摘要:本次设计的程序主要实现对班级同学成绩的管理,在初始化时输入班级总人数。老师可以通过系统输入学生的学号、姓名、各科成绩,对学生

3、的成绩可以按照平均分数进行排名,学生对自己的成绩和排名可以进行查询,另外就是信息的添加、删除、修改、以及信息的保存等功能。关键字:学生成绩管理,数组,结构体0.引言数据结构是计算机科学的算法理论基础和软件设计的技术基础,主要研究信息的逻辑结构及其基本操作在计算机中的表示和实现。数据结构不仅是计算机专业的核心课程,而且已成为其他理工科专业的热门选修课。课程的教学要求之一是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,其重要程度不亚于知识传授。在计算机高速发展的今天,它已经应用到了各个行业,当然,学校也不例外。以前学校对学生的成绩是用人管理,而作为计算机应用的一部分,使用计算机对学生成绩

4、进行信息管理,有着手工管理所无法比拟的优点,如:查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学校对学生成绩管理的效率。因此,开发一套学生成绩管理系统是有必要的。1.需求分析改学生成绩管理系统主要可以实现以下功能,具体如下:(1)输入学生的姓名、学号、成绩;(2)在输入基本信息以后,将信息按照平均成绩进行排名,还可以实现对数据的修改、插入、删除、打印、保存等;(3)学生可以根据自己的学号对成绩进行查询。2.数据结构设计学生结构体的定义:struct student /*定义数据结构*/ char number8; char name16; float scor

5、e3; float average; studM,temp;3.算法设计3.1主函数模块void main() /*主函数*/ 以printf语句打印欢迎界面语句 load(); /*调用读入记录函数*/ for(;) /*无限循环*/ switch /*调用主菜单函数,返回值整数作开关语句的条件*/ case 1:输入记录case 2:显示要看的一页的记录case 3:查找记录case 4:排序case 5:插入记录case 6:保存文件case 7:改变记录case 8:删除记录 case 9:如菜单返回值为9程序结束 3.2输入数据函数模块void enter(struct studen

6、t stud) 输出:How many students record do you want to enter? n= ? 输入一次要输入记录的个数 for( ; ; ) /*统记三科总分*/ 输出:Input the %dth students number 输入学号 /*以下if-else语句判断所输记录是否存在*/ if(flag(stud) /*调用返回值为0或1函数,判断所输入的学号是否已经存在,存在就执行if语句*/ 输出:The record has exist 输出:Input again. else 输出:Input the %dth students name 输入姓名

7、for( ; ; ) do 输出:Input the %dth students score(%d) /*打印提示*/ 输入分数 studN.scorej=atof(b); /*将字符串强制转换成实型,得值赋给studN.scorej*/ if判断分数是否在0-100之间 分数不在0-100之间时k值为1 输出:Error input ! 输出:Input again . /*打印出错提示*/ else 分数在0-100之间时k值为0 while(k); /*由k值决定是否要循环*/ 统记三科总分 求平均分 输出:Enter success ! 输出:Press any key to retu

8、rn. 记录数加1 清屏 清屏 3.3显示记录函数模块void print(struct student stud) if(N=0) 输出:There are not record; 输出: Press any key to return.; 当N为0时(即没有记录)打印没有记录 获取字符; else while(flag不等于n) do if(页数%10!=0) 输出 :共有N/10+1页; 输出:你想看哪页; else 输出:共有N/11+1页; 输出:你想看哪页; 输入m值; /*输入要显示的页数*/ /*强制把m转换成整形*/ 把m赋给整型k; if(k不为0) k=10*(k-1);

9、 /*此时k变为第k页的第一条信息的序号*/ if(k大于等于N) /*判断页数是否存在*/ 输出这页 不存在; 输出“请输入”; else k=N+1; while(k大于等于N); /*如果页数不存在进入do-whie循环*/ /*以下if-else语句是判断第k页是否有10条语句*/ if(k+10)大于N) max=N; /*当第k页不够10条记录时*/ else max=k+10; /*当第k页够10条记录时*/ 清屏; for(i=k;istudk.average) k等于j; 交换i和k处的值 文件中记录数减1 输出: * Delete success ! * 当要删除的不存在是

10、执行下列else语句 else输出: tError input! 输出:If you want to go on press: 输出:Else press any key to menu: 获取一个字符判断是否要继续删除 清屏 3.5排序函数模块void inorder(struct student stud ) for( ; ; ) k等于i; /*以下for语句为选择法排序*/ for( ; ; ) if(studj.average大于studk.average) k等于j if(k不等于i) 交换k和i处的值 输出:* Has been inoder! * /*排序成功提示*/ slee

11、p(2); /*调用暂停函数 暂停2秒钟*/清屏 3.6插入记录函数模块 void insert(struct student stud) 清屏 while(flag=y) 输出:Input the students number you want to insert: 输入要插入记录的学号 for ; ; ) if查找要插入记录是否存在 k=1; if(k) 判断要插入记录是否存在输出:The record has exist. else 输出:Input the students name you want to insert: 输入要插入记录的名字 for ( ; ;) do 输出:In

12、put the students score(%d): 输入分数 studN.scorej=atof(b); if语句判断分数是否在0-100之间 k等于1; 输出:Error input ! 输出:Input again . else k等于0; while(k); 三科总分 求平均分 /*以下for语句为插入*/ for( ; ; ) if(studj.average小于studN.average) 将N处的值赋给j处 j处值后移 记录数加1 输出:Insert success ! 输出:If you want to go on press:y 输出:Else press any key

13、to menu: 获取一个字符判断是否要继续插入 清屏 3.7读入记录函数模块void load(void) FILE *fp; 以rb形式打开score文件 for( ; ; ) 读入记录 读完后退出 关闭文件int flag(struct student stud ) 判断学号是否相同 相同返回1,否则返回03.8保存记录函数模块void save(struct student stud) FILE *fp;输出:* Saving file.* /*保存提示*/ sleep(1); /*调用暂停函数 暂停1秒钟*/ if(fp=fopen(score,wb)=NULL) /*以wb形式打开

14、文件score*/ 输出:Can not open the file sleep(1); /*调用暂停函数 暂停1秒钟*/ 返回 for( ; ; ) if(fwrite(&studi,sizeof(struct student),1,fp)!=1) 把记录保存到score文件中 输出:File write error 返回 关闭文件 清屏 输出:* Saving success ! * /*保存成功提示*/ sleep(2); /*调用暂停函数 暂停1.5秒钟*/ 清屏 3.9查找函数模块void search(struct student stud) 清屏 while(flag!=n) 输

15、出:The number-name list /*以下while语言句为输出已有的记录的学号与名字*/ while(iN) 输出的学号和名字总长度不长于14 长出部分用.省略表示 输出:Input the students number you want to search: 输入要查找的记录的学号 while(iN) if(strcmp(studi.number,number)=0) /*查找记录*/ /*输出找到的记录*/ /*当名字长度小于8时执行if语句*/ if(strlen(studi.name)8) 输出: |-|-|-|-|-|-|- 输出: |NO:| number | na

16、me |score(1)|score(2)|score(3)|average | 输出: |-|-|-|-|-|-|-|n); 输出: | %-2d| %-6s|%-8s| %-5.1f | %-5.1f | %-5.1f | %-7.2f| , studi.name,studi.score0,studi.score1, studi.score2,studi.average); 输出: |-|-|-|-|-|-|-| /*当名字长度大于8时执行else语句*/ else 输出: |-|-|-|-|-|-|-| 输出: |NO:| number | name |score(1)|score(2)

17、|score(3)|average 输出: |-|-|-|-|-|-|-| 输出: | %-2d| %-6s|%-16s| %-5.1f | %-5.1f | %-5.1f | %-7.2f studi.name,studi.score0,studi.score1, studi.score2,studi.average); 输出: |-|-|-|-|-|-|-| Flag等于0; 找到并打印后i=N退出while循环 找不到时i自加 if(flag) 当找到记录时flag为0,否则为1 输出:our input is error 输出: Do you want to go on? y or n

18、? 获取一个字符判断是否要继续查找 清屏 3.10改变记录函数 void change(void) while(flag=y) 输出: The number-name list: 以while语句为输出文件中已有记录的学号与人名输出:Input the students number you want to change. 输入要改变记录的人名 for( ; ; ) 查找要改变记录的人名 /*a为判断是否找到*/ if(i小于N) a=1; h=i; else a=0; /*以下if语句为找到要改变的 并输入新记录*/ if(a) 输出:Input new number: 输入学号 for(

19、; ; ) if 查找要改变记录是否存在 k=1; if(k) 判断要改变记录是否存在 输出:The record has exist.n); 获取一个字符 else 复制学号 输出:Input new name: 输入姓名 for( ; ; ) do 输出:Input new score(%d) 输入分数 studh.scorek=atof(b); 将字符串强制转换成整形 if语句判断输入是否在0-100之间 n=1; 输出:Error input ! 输出:Input again . else n=0; while(n); 统记三科总分 求平均分 输出:* Change success !

20、 * 改变成功提示 H=1; else 输出:nttttError input! 输出:If you want to go on press:y 输出:Else press any key to menu: 获取一个字符判断是否要继续改变 清屏 3.11主要技术说明在该程序中定义了一个学生结构体,每个功能都用不同的函数块实现。在程序的设计中较多功能都用数组来实现,整个程序在TC软件下开发的。 4.程序实现4.1所有函数 void load(void); /*读入记录*/void enter(struct student stud) /*输入数据函数*/void inorder(struct s

21、tudent stud); /*排列记录*/ void insert(struct student stud); /*插入记录*/ void save(struct student stud); /*保存记录*/ void print(struct student stud); /*显示记录*/ void search(struct student stud); /*查找记录*/ void enter(struct student stud); / *输入记录*/ void del(void); /*删除记录*/ void change(void); /*改变记录*/ void quit(vo

22、id); /*退出系统*/ int flag(struct student stud); /*返回值为0或1*/ int menu(void); /*菜单*/4.2主要方法代码实现4.2.1输入数据函数void enter(struct student stud) int n=0,i,j,k,c; char b4; float sum; printf(How many students record do you want to enter? n= ?bbb); scanf(%d,&n); /*输入一次要输入记录数*/ for(i=0;in;) sum=0; /*统记三科总分*/ printf

23、(Input the %dth students number ,N+1); scanf(%s,studN.number); /*输入学号*/ /*以下if-else语句判断所输记录是否存在*/ if(flag(stud) /*调用返回值为0或1函数,判断所输入的学号是否已经存在,存在就执行if语句*/ printf(The record has exist.n); printf(Input again.); getch(); else printf(Input the %dth students name ,N+1); scanf(%s,studN.name); /*输入姓名*/ for(j

24、=0;j3;j+) do printf(Input the %dth students score(%d),N+1,j+1); /*打印提示*/ scanf(%s,b); /*输入分数*/ studN.scorej=atof(b); /*将字符串强制转换成实型,得值赋给studN.scorej*/ if(studN.scorej100) /*判断分数是否在0-100之间*/ k=1; /*分数不在0-100之间时k值为1*/ printf(Error input !n); printf(Input again .n); /*打印出错提示*/ else k=0; /*分数在0-100之间时k值为

25、0*/ while(k); /*由k值决定是否要循环*/ sum+=studN.scorej; /*统记三科总分*/ studN.average=sum/3.0; /*平均分*/ printf(nEnter success !n); printf(nPress any key to return.); getch(); N+; /*记录数加1*/ i+; H=1; clrscr(); /*清屏*/ clrscr(); /*清屏*/ 4.2.2显示记录函数void print(struct student stud) int i=0,k,max,maxb,n,flag=y; char m6; /*以下if-else为判断文件中是否有记录*/ if(N=0) printf(There are not record.n); printf(Press any key to return.); /*当N为0时(即没有记录)打印没有记录提示*/ getch(); else while(flag!=n) maxb=0;i=0; /*以下分页输出记录*/ do if(N%10!=0) printf(nttThere are %d pages in all.,N/10+1); printf(nttWh

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号