
数据结构课程设计说明书学生成绩管理程序的设计与实现.doc
39页武汉理工大学<数据结构>课程设计说明书课程设计任务书学生姓名: XXX 专业班级: 计算机0502 指导教师: XXX 工作单位:计算机科学与技术学院 题 目: 学生成绩管理程序的设计与实现初始条件:理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法;实践:计算机技术系实验室提供计算机及软件开发环境要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能:(1)对学生的姓名、各科成绩进行输入和修改;(2)老师可以对成绩按各种条件进行查询、统计、排序;(3)以班为单位打印成绩单;(4)学生对自己的成绩和排名进行查询2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰写课程设计报告,包括:(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日1武汉理工大学<数据结构>课程设计说明书学生成绩管理系统摘要:本次设计的程序主要实现对班级同学成绩的管理,在初始化时输入班级总人数老师可以通过系统输入学生的学号、姓名、各科成绩,对学生的成绩可以按照平均分数进行排名,学生对自己的成绩和排名可以进行查询,另外就是信息的添加、删除、修改、以及信息的保存等功能关键字:学生成绩管理,数组,结构体0.引言 数据结构是计算机科学的算法理论基础和软件设计的技术基础,主要研究信息的逻辑结构及其基本操作在计算机中的表示和实现数据结构不仅是计算机专业的核心课程,而且已成为其他理工科专业的热门选修课课程的教学要求之一是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,其重要程度不亚于知识传授在计算机高速发展的今天,它已经应用到了各个行业,当然,学校也不例外以前学校对学生的成绩是用人管理,而作为计算机应用的一部分,使用计算机对学生成绩进行信息管理,有着手工管理所无法比拟的优点,如:查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高学校对学生成绩管理的效率因此,开发一套学生成绩管理系统是有必要的1.需求分析改学生成绩管理系统主要可以实现以下功能,具体如下:(1)输入学生的姓名、学号、成绩;(2)在输入基本信息以后,将信息按照平均成绩进行排名,还可以实现对数据的修改、插入、删除、打印、保存等;(3)学生可以根据自己的学号对成绩进行查询2.数据结构设计学生结构体的定义:struct student /*定义数据结构*/ { char number[8]; char name[16]; float score[3]; float average; }stud[M],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 student stud[]) { 输出:How many student's record do you want to enter? n= ? 输入一次要输入记录的个数 for( ; ; ) /*统记三科总分*/{ 输出:Input the %dth student's number 输入学号 /*以下if-else语句判断所输记录是否存在*/ if(flag(stud)) /*调用返回值为0或1函数,判断所输入的学号是否已经存在,存在就执行if语句*/ { 输出:The record has exist 输出:Input again. } else { 输出:Input the %dth student's name 输入姓名 for( ; ; ) { do { 输出:Input the %dth student's score(%d) /*打印提示*/ 输入分数 stud[N].score[j]=atof(b); /*将字符串强制转换成实型,得值赋给stud[N].score[j]*/ 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 return. 记录数加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); /*此时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;i<最大值;i++) { n等于stud[i].name的长度; if(n大于maxb) maxb=n; } i=k; if(maxb小于8) { while(i小于max) { /*以下为输出记录*/ if(i%10==0) { 输出 N/10+1 页; 输出|---|--------|--------|--------|--------|--------|--------|; 输出: |NO:| number | name |score(1)|score(2)|score(3)|average |; } 输出:\t|---|--------|--------|--------|--------|--------|--------|\; 输出:| %-2d| %-6s|%-8s| %-5.1f | %-5.1f | %-5.1f | %-7.2f|\n",i+1,stud[i].number, stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2], stud[i].average); i++; } } else { while(i小于max) if(i%10==0) { 输出 /+N/11+1 页; 输出:|---|--------|----------------|--------|--------|--------|--------|; 输出:|NO:| number | name |score(1)|score(2)|score(3)|average |; } 输出:|---|--------|----------------|--------|--------|----。
