数据结构课程设计--学生成绩管理系统_第1页
数据结构课程设计--学生成绩管理系统_第2页
数据结构课程设计--学生成绩管理系统_第3页
数据结构课程设计--学生成绩管理系统_第4页
数据结构课程设计--学生成绩管理系统_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长治学院 课程设计报告 课程名称:课程名称:数据结构课程设计 设计题目设计题目: 学生成绩管理系统 系系 别:别: 计算机系 专专 业:业: 计算机科学与技术 组组 别:别: 第二十五题 学生姓名学生姓名: : 学学 号号: 起止日期起止日期: 2010 年 6 月 25 日 2010 年 7 月 10 日 指导教师指导教师: 马强 目 录 第一章 需求分析.1 1.1 课程设计任务及要求.1 1.2 课程设计思想及开发环境.1 第二章 概要设计.2 2.1 总体方案 .2 2.2 功能模块设计 .2 2.3 主要数据结构 .2 第三章 详细设计.3 第四章 调试与操作说明.4 第五章 课程设计总结与体会.6 第六章 致谢.6 第七章 参考文献.6 第八章 附录.7 8.1 详细程序设计.7 8.2 指导教师评语.14 1 第一章 需求分析 1.1 课程设计任务及要求 题目:学生成绩管理系统 要求:(1)界面友好,易于操作。可采用菜单或其它人机对话方式进行选 择。 (2)实现对学生成绩信息进行排序与查找。可按学生学号、姓名等信 息进行 查询。每个学生信息包含:学号,姓名,班级,语文,数学,英语,物理, 化学等项。 (3)学生信息的存储结构可以选择顺序结构,也可以选择链式结构。 1.2 课程设计思想及开发环境 设计思想:本课题的实质是完成对学生成绩信息的建立、查找、排序等功 能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数 据的操作,最后完成主函数以验证各个函数功能并得出运行结果。可将此系统 分为如下模块,输入初始的学生信息、查询模块、排序模块、退出系统。 编写语言: C 语言 开发工具: Visual C+ Visual Studio 6.0 VC+是微软公司开发的一个 IDE(集成开发环境)。学习 VC 要了解很多 Windows 平台的特性并且还要掌握 MFC、ATL、COM 等的知识, VC 基于 C,C+ 语言,主要由是 MFC 组成,是与系统联系非常紧密的编程工具,它兼有高级, 和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说 VC 在 Windows 平台无所不能。 最大缺点是开发效率不高。 2 第二章 概要设计 2.1 总体方案 信息输入信息查询信息排序 退出系统 系统菜单选择功能号进入 下步工作 总体结构图 2-1 其中每步操作完成后按任意键返回系统菜单 2.2 功能模块设计 输入总和小于 100依次输入学生信息, 完成后返回主菜单。 选择输入人数 输入总和大于 100超出范围返回主菜单 选择学号选择查询方式 选择姓名 找到相关信息立即显 示,未找到相关信息 则返回主菜单。 按姓名排序选择排序方式 按学号排序 排序并显示所有信息 2.3 主要数据结构 学生数据是用链表存放的,因为学生的人数是不定的,若用一个数组存放 数据时,有固定长度限制,若太大则可能导致内存浪费,太小就不够用。而链 表可动态分配内存,根据需要而开辟内存单元,这是本程序的链表数据结构, 相关学生需要储存的信息也如下: struct students int Num; char Name10; int Class; int Chinesescore; int Mathscore; int Englishscore; int Physicsscore; int Chemistryscore; 3 第三章 详细设计 本程序分为输入模块、查询模块、排序模块。具体设计方案见附录。 在学生信息录入时,先限定本次录入人数,若超过 100,则返回,重新录 入。 int InforInput(STUDENT stu,int m) int number; printf(n 限定本次输入学生人数: ); scanf(%d, if(numberMAX_NUM) printf(输入人数过多,应不超过%d 人!n,MAX_NUM); return (0); input(stu,number,m) ; return (number+m); 在查询模块中,采用 for 循环,查找相应的学号或者姓名所对应的信息。 如,下面的程序是按学号查询,若所查找信息不存在则提示错误。 int FoundNum(STUDENT stu,int findNum,int Max) int i; for(i=0;iMax;i+) if(stui.Num=findNum) break; if(iMax) return i; else return -1; 在排序模块中,分为按学号排序和按姓名排序,采用冒泡排序法。如以下 程序是在功能菜单中选择 2,按姓名排序: else if(i=2) for(b=0;aMax;a+) for(;b0) student.Num=stub+1.Num; strcpy(student.Name,stub+1.Name); student.Class=stub+1.Class; 4 student.Chinesescore=stub+1. Chinesescore; student.Mathscore=stub+1. Mathscore; student.Englishscore=stub+1. Englishscore; student.Physicsscore=stub+1. Physicsscore; student.Chemistryscore=stub+1. Chemistryscore; stub+1.Num=stub.Num; strcpy(stub+1.Name,stub.Name); stub+1.Class=stub.Class; stub+1.Chinesescore=stub. Chinesescore; stub+1.Mathscore=stub. Mathscore; stub+1.Englishscore=stub. Englishscore; stub+1.Physicsscore=stub. Physicsscore; stub+1.Chemistryscore=stub. Chemistryscore; stub.Num=student.Num; strcpy(stub.Name,student.Name); stub.Class=student.Class; stub.Chinesescore=student.Chinesescore; stub.Mathscore=student.Mathscore; stub.Englishscore=student.Englishscore; stub.Physicsscore=student.Physicsscore; stub.Chemistryscore=student.Chemistryscore; printf(n 学号t 姓名t 班级t 语文t 数学t 英语t 物理t 化学n); for(i=0;iMAX_NUM) printf(输入人数过多,应不超过%d 人!n,MAX_NUM); return (0); input(stu,number,m) ; return (number+m); void input(STUDENT stu,int Max,int m) int i; for(i=m;iMax+m;i+) printf(nThe %d student Num:,i+1); scanf(%d, printf(nName:); scanf(%s,stui.Name); printf(nClass:); scanf(%d, printf(nChinesescore:); scanf(%d, printf(nMathscore:); scanf(%d, printf(nEnglishscore:); scanf(%d, printf(nPhysicsscore:); 10 scanf(%d, printf(nChemistryscore:); scanf(%d, printf(n 本次输入学生信息:n); ShowInfor(stu,Max+m); void ShowInfor(STUDENT stu,int Max) int i; printf(n 学号t 姓名t 班级t 语文t 数学t 英语t 物理t 化学n); for(i=0;iMax;i+) printf(%dt%st%dt%dt%dt%dt%dt%dn,stui.Num,stui.Name, stui.Class,stui.Chinesescore,stui.Mathscore,stui.Englishscore, stui.Physicsscore,stui.Chemistryscore); int FoundNum(STUDENT stu,int findNum,int Max) int i; for(i=0;iMax;i+) if(stui.Num=findNum) break; if(iMax) return i; else return -1; int FoundNAME(STUDENT stu,char findNAME10,int Max) int i; for(i=0;iMax;i+) if(!strcmp(stui.Name,findNAME) break; if(iMax) return i; else return -1; void QueryInfor(STUDENT stu,int Max) 11 char Number; int i; int findNum; char findNAME10; ChoiceMenu(); Number=choice(); switch (Number) case 1: printf(n 请输入学生的学号: ); scanf(%d, if (i=FoundNum(stu,findNum,Max)!=-1) printf(SearchRecord:n); printf(n 学号t 姓名t 班级t 语文t 数学t 英语t 物理t 化学n); printf(%dt%st%dt%dt%dt%dt%dt%dn,stui.Num,stui.Name, stui.Class,stui.Chinesescore,stui.Mathscore,stui.Englishscore, stui.Physicsscore,stui.Chemistryscore); else printf(Not Found!n); break; case 2: printf(n 请输入学生的姓名: ); scanf(%s, if (i=FoundNAME(stu,findNAME,Max)!=-1) printf(SearchRecord:n); printf(n 学号t 姓名t 班级t 语文t 数学t 英语t 物理t 化学n); printf(%dt%st%dt%dt%dt%dt%dt%dn,stui.Num,stui.Name, stui.Class,stui.Chinesescore,stui.Mathscore,stui.Englishscore, stui.Physicsscore, stui.Chemistryscore); else printf( Not Found!n); break; default : printf(无相关信息选择错误!n); void SortInfor(STUDENT stu,int Max,char i) STUDENT student; int a=0,b,l=0; 12 if(i=1) for(b=0;aMax;a+) for(;bstub+1.Num) student.Num=stub+1.Num; strcpy(student.Name,stub+1.Name); student.Class=stub+1.Class; student.Chinesescore=stub+1. Chinesescore; student.Mathscore=stub+1. Mathscore; student.Englishscore=stub+1. Englishscore; student.Physicsscore=stub+1. Physicsscore; student.Chemistryscore=stub+1. Chemistryscore; stub+1.Num=stub.Num; strcpy(stub+1.Name,stub.Name); stub+1.Class=stub.Class; stub+1.Chinesescore=stub. Chinesescore; stub+1.Mathscore=stub. Mathscore; stub+1.Englishscore=stub. Englishscore; stub+1.Physicsscore=stub. Physicsscore; stub+1.Chemistryscore=stub. Chemistryscore; stub.Num=student.Num; strcpy(stub.Name,student.Name); stub.Class=student.Class; stub.Chinesescore=student.Chinesescore; stub.Mathscore=student.Mathscore; stub.Englishscore=student.Englishscore; stub.Physicsscore=student.Physicsscore; stub.Chemistryscore=student.Chemistryscore; printf(n 学号t 姓名t 班级t 语文t 数学t 英语t 物理t 化学n); for(i=0;iMax;i+) printf(%dt%st%dt%dt%dt%dt%dt%dn,stui.Num,stui.Name, stui.Class,stui.Chinesescore,stui.Mathscore,stui.Englishscore, stui.Physicsscore, stui.Chemistryscore); printf(n); else if(i=2) for(b=0;aMax;a+) for(;b0) 13 student.Num=stub+1.Num; strcpy(student.Name,stub+1.Name); student.Class=stub+1.Class; student.Chinesescore=stub+1. Chinesescore; student.Mathscore=stub+1. Mathscore; student.Englishscore=stub+1. Englishscore; student.Physicsscore=stub+1. Physicsscore; student.Chemistryscore=stub+1. Chemistryscore; stub+1.Num=stub.Num; strcpy(stub+1.Name,stub.Name); stub+1.Class=stub.Class; stub+1.Chinesescore=stub. Chinesescore; stub+1.Mathscore=stub. Mathscore; stub+1.Englishscore=stub. Englishscore; stub+1.Physicsscore=stub. Physicsscore; stub+1.Chemistryscore=stub. Chemistryscore; stub.Num=student.Num; strcpy(stub.Name,student.Name); stub.Class=student.Class; stub.Chinesescor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论