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

下载本文档

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

文档简介

1、数据结构数据结构课课 程程 设设 计计 报报 告告 学生成绩管理系统学生成绩管理系统学学 院:院: 信信 息息 与与 工工 程程 学学 院院 专专 业:业: 计算机科学与技术计算机科学与技术 目 录第一章 需求分析1.1 课程设计题目及要求1.2 课程设计思想及开发环境第二章 概要设计2.1 总体方案 2.2 模板功能分析及其外部设计2.3 主要数据结构第三章 详细设计第四章 调试与操作说明 4.1 主要模板调试 4.2 系统缺陷及原因第五章 课程设计总结与体会第六章 参考文献 第一章 需求分析1.1 课程设计题目及要求题目:学生成绩管理系统题目:学生成绩管理系统学生成绩表:学生成绩表:要求如

2、下:1) 实现对两个文件数据进行合并,生成新文件 3.txt2) 抽取出三科成绩中有补考的学生并保存在一个新文件 4.txt3) 对合并后的文件 3.txt 中的数据按总分降序排序(至少采用两种排序方法实现)4) 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5) 要求使用结构体,链或数组等实现上述要求.1.2 课程设计思想及开发环境设计思想:本课题的实质是完成对学生成绩表的合并、提取、排序、查询等功能,可以首先定义项目的数据结构,然后将每个功学生成绩信息文件 1(1.txt) ,内容如下姓名 学号 语文 数学 英语 张明明 01 67 78 82李成友 02

3、78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47. . . . 学生成绩信息文件 2(2.txt),内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77. . . . 能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。可将此系统分为如下模块,合并两个信息表、从表中提取信息、降序排序模块、按条件进行查询、退出系统。编写语言: C 语言开发工具: Visual C+ 6.0VC

4、+是微软公司开发的一个 IDE(集成开发环境)。学习 VC 要了解很多 Windows 平台的特性并且还要掌握 MFC、ATL、COM 等的知识, VC 基于 C,C+语言,主要由是 MFC 组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说 VC 在 Windows 平台无所不能。 最大缺点是开发效率不高。 第二章概要设计2.1 总体方案2.2 模板功能分析及其外部设计 合并两个信息主要是将两个成绩表中的成绩信息先读取,然后写进新的文本中,从而建立一个新的成绩表;提取信息主要是在合并信息之后所得文本中,按要求提取出所需信息,并写进新的文

5、本中;降序排序主要用两种方法进行降序排序,分别为冒泡排序和快速排序; 系统菜单 退出系统合并两个信息表 提取信息降序排序查询信息降序排序查询信息在结构体中查询在合并后的表中查询冒泡排序二分插入排序查询信息主要是按条件输入信息,根据信息在文本中查询所对应的信息并输出结果。 程序的外部设计主要是通过写一个功能菜单来实现每个功能模板的调用,从而更好的协调各个功能之间的关系和使用。 2.3 主要数据结构学生数据是用链表存放的,因为学生的人数是不定的,若用一个数组存放数据时,有固定长度限制,若太大则可能导致内存浪费,太小就不够用。而链表可动态分配内存,根据需要而开辟内存单元,这是本程序的链表数据结构,相

6、关学生需要储存的信息也如下; typedef struct char name8; char id2; int chinese; int math; int english; int sum; ;student 第三章 详细设计本程序分为合并模板、提取模板、排序模板、查询模板。在合并两个信息表是,采用 Unitedfile()来实现,调用该函数打开文件1.txt 并读取,再打开 3.txt 将从 1.txt 中读取的信息写入,完成后关闭 1.txt;然后打开 2.txt 读取,并写入 3.txt,完成后输出并关闭两个文本。void Unitedfile()/合并 1.txt 和 2.txt 为

7、 3.txt FILE *fp,*p; Student studd; fp=fopen(1.txt,r); /*以读的方式打开 1.txt*/p=fopen(3.txt,w); /*以写的方式打开 3.txt*/while( fscanf(fp,%s%s%d%d%d,,studd.id,&studd.chinese,&studd.math,&studd.english )!=EOF)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,stud

8、d.english );printf(%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); /*读取 1.txt 的数据写入3.txt,继续读取直结束*/fclose(fp); /*关闭文件 1.txt*/fp=fopen(2.txt,r); /*以写的方式打开 2.txt*/while( fscanf(fp,%s%s%d%d%d,,studd.id,&studd.chinese,&studd.math,&studd.englis

9、h )!=EOF)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); printf(%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); /*输出文本 3.txt 中的信息*/fclose(fp); /*关闭文件 2.txt*/fclose(p); /*关闭文件 3.txt*/在提取信息模板中,主要是从合成后的 3.txt 文本中提

10、取,先打开 3.txt 文本并读取,再开打 4.txt 文本并写入,通过 if 语句都读取的信息进行判断,是否符合,符合的就写入 4.txt 文本中,不符合的就跳过,继续读取下一个信息,一次进行,知道文本结束,输出文本 4.txt 的信息,并关闭两个文本。void findout() /*提取有补考学生的信息写入 4.txt 中*/FILE *fp,*p;Student studd; fp=fopen(3.txt,r);p=fopen(4.txt,w);while( fscanf(fp,%s%s%d%d%d,,studd.id,&studd.chinese,&

11、;studd.math,&studd.english )!=EOF)if(studd.chinese60|studd.math60|studd.english60)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english );printf(%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); /*输出文本 4.txt 中的信息*/fcl

12、ose(fp);fclose(p);在降序排序模块中,有两种排序方法;一种是冒泡排序,一种是快速排序;两种排序方法都是采用先定义函数排序方法,然后再后面调用该函数进行排顺序,在此之前都会将成绩信息总分计算出来,然后按总分进行降序排序,然后将排序后的信息写入到 3.txt中,并输出,最后关闭文本。冒泡排序:void Bsort(int R,int n) int t, flag=1; /*当 flag 为 0 时则停止排序*/for(int j=1;j=j;k-) if(RkRk-1) t=Rk; Rk=Rk-1; Rk-1=t;flag=1;if(flag=0)return; void maop

13、ao() int i,n; FILE *fp;fp=fopen(3.txt,r);i=0;while(fscanf(fp,%s%s%d%d%d,,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)studi.sum=studi.english+studi.chinese+studi.math;i+; fclose(fp); n=i-1; Bsort(stud,n); /*冒泡排序*/ fp=fopen(3.txt,w); /*将信息写入 3.txt 中*/ for(int m=0;mi

14、;m+)fprintf(fp,%-8s %-8s %-8d %-8d %-8d %-8dn,,studm.id,studm.chinese,studm.math,studm.english,studm.sum );fclose(fp);快速排序:int Partition(int low,int high) int pivotkey;Student temp;temp=studlow;pivotkey=studlow.sum;while(lowhigh) while(lowhigh&studhigh.sum=pivotkey)-high;studlow=studhi

15、gh;while(low=pivotkey)+low;studhigh=studlow; studlow=temp; return low; void QSort(int low,int high) /*快速排序*/ int privotloc; if(lowhigh) privotloc=Partition(low,high);QSort(low,privotloc-1);QSort(privotloc+1,high); void kuaisu() /*读取文件排序后将结果写入 3.txt*/ int i,low,high; FILE *fp; fp=fopen(3.txt,r); i=0;

16、while(fscanf(fp,%s%s%d%d%d,,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF) studi.sum=studi.english+studi.chinese+studi.math;i+; fclose(fp);low=0; high=i-1;QSort(low,high); /*快速排序*/fp=fopen(3.txt,w); /*将排序后的数据写入 3.txt 中*/for(int j=0;jName;for(k=1;k=n;k+)if(strcmp(stu

17、,Name)=0)flag=1;cout-姓名-学号-语文-数学-英语-总分-endl;cout studk.id ;coutstudk.chinese studk.math studk.english studk.sumendl;break; if(flag=0)cout无此学生相关信息endl; 要实现各个功能之间的调用,在主函数中使用while、if、case 等语句进行调用是各个功能之间串联起来,把各个功能看成单个的事件,利用 case 语句来对各个事件进行选择;利用 printf 输出语句来形成主菜单界面。 int main() int choic

18、e; while(1) /*主菜单*/if(sign3=0)printf(*n);printf(* 学生成绩管理系统 *n);printf(* 1. 合并 1 和 2 得 3 *n); printf(* 2. 把 3 中有成绩不及格的放入新文件 4 中 *n); printf(* 3. 把 3 中成绩总分按降序排列 *n); printf(* 4. 输入姓名,查找该成绩信息并输出结果 *n);printf(* 5. 退出系统 *n);printf(*n);printf(请输入(1-5)选择要使用的功能:); sign3=1;scanf(%d,&choice);switch(choice

19、) case 1: Unitedfile();sign=1;cout1 和 2 合并成功!endl;cout请选择下一步操作:endl;break; case 2: if(sign=0)cout请执行操作 1 后再执行此项操作!endl;cout请选择下一步操作:endl;break;cout4.txt 生成成功!endl; findout();cout请选择下一步操作:endl;break; case 3:if(sign=0)cout请执行操作 1 后再执行此项操作!endl;cout请选择下一步操作:endl;break;sortfile();cout降序排列成功!endl;cout请选择

20、下一步操作:endl;sign1=1;break; case 4:while(1)char c;findoutstudent();cout继续查找或返回主菜单请输入 Y/N:c;if(c=N|c=n)break; system(cls);sign3=0;break;case 5:exit(0);break; return 0; 第四章 调试与操作说明 4.1 主要模板调式菜单显示图:合并两个成绩表,选择菜单 1,调试结果:提取有成绩不及格学生的信息,选择功能 2,调试结果:降序排序,将 3.txt 中学生成绩总分计算出,选择功能 1 和功能2,调试结果一样:选择 1 时:选择 2 时:排序后,进行查询功能,都是输入姓名查找,选择功能 1 和功能2,调试完成后,如果还要继续查询选择 Y,不查询选择 N 退到主菜单:选择 1:选择 2 时:选择 Y 继续查询时:不查询退到主菜单。退出系统,选择 5,调试之后按任意键关闭界面: 4.2 系统缺陷及原因缺陷:该系统功能存在一些缺陷,在第一步到第二步过程中,没有

温馨提示

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

评论

0/150

提交评论