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

下载本文档

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

文档简介

要用的请复制,要转载的请注明,要问的免了题目如下25.学生成绩管理系统现有学生成绩信息文件1.txt,内容如下姓名 学号 语文 数学 英语 张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47学生成绩信息文件2.txt,内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77试编写一管理系统,要求如下:1)实现对两个文件数据进行合并,生成新文件3.txt2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3)合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)要求使用结构体,链或数组等实现上述要求.6)采用多种方法且算法正确者,可适当加分.源代码如下#include#include#includechar top50; /成绩文件顶部的标题用top保存typedef struct student /单个学生成绩的记录char name10; /姓名int number; /学号int chinese; /语文int math; /数学int english; /英语struct student *next;student,*gradelist;gradelist fileread(char *adress) /读取成绩文件FILE * fp;if(fp=fopen(adress,r)=NULL) /打开文件printf(文件打开出错);exit(0);gradelist file=(student *)malloc(sizeof(student); /申请空间file-next=NULL;student * p=file; /操作指针int n=0; /循环标记,具体作用是在第一次循环时方便处理标题while(!feof(fp)if(n=0)fgets(top,50,fp); /处理标题,并且文件指针移到第二行if(n=1) /申请空间(p-next)=(student *)malloc(sizeof(student);p=p-next;p-next=NULL;fscanf(fp,%s%d%d%d%d,p-name,&p-number,&p-chinese,&p-math,&p-english); /将文件的数据输入到链表中n=1;if(fclose(fp) /关闭文件printf(文件关闭失败);exit(0);return file;void FilePrint(gradelist file) /将成绩文件打印到屏幕上student *p=file;printf(%sn,top); /打印标题while(p-next!=NULL)printf(%6s %2d %d %d %dn,p-name,p-number,p-chinese,p-math,p-english); /循环打印p=p-next;void merger() /合并文件char * address1=1.txt,*address2=2.txt,*address3=3.txt;gradelist file1=fileread(address1),file2=fileread(address2);FILE *fp;if(fp=fopen(3.txt,w+)=NULL) /先新建一个3.txt,然后将1.txt和2.txt的内容输入到里面printf(合并成绩文档失败,原因:建立文档出错);exit(0);student *p1=file1,*p2=file2;fprintf(fp,%s,top); /先输入标题while(p1-next!=NULL)fprintf(fp,%6s %2d %d %d %dn,p1-name,p1-number,p1-chinese,p1-math,p1-english); /输入1.txt p1=p1-next;while(p2-next!=NULL)fprintf(fp,%6s %2d %d %d %dn,p2-name,p2-number,p2-chinese,p2-math,p2-english); /输入2.txtp2=p2-next;if(fclose(fp)printf(文件关闭失败);exit(0);void extract() /抽取补考的成绩记录char * address4=4.txt,*address3=3.txt;FILE *fp;if(fp=fopen(4.txt,w+)=NULL) /新建文件4.txtprintf(抽取补考学生成绩记录建立新文件失败);exit(0);gradelist file3=fileread(address3);student *p=file3;fprintf(fp,%s,top); /先输入标题while(p-next!=NULL)if(p-chinese)math)english)name,p-number,p-chinese,p-math,p-english);p=p-next;if(fclose(fp)printf(文件关闭失败);exit(0);void sort(int i)char * address3=3.txt;gradelist file3=fileread(address3); /先将3.txt读入链表student *p=file3;if(remove(3.txt) /由于排序后的内容也要保存到3.txt,故删除3.txtprintf(删除文件出错);exit(0);int n=0; /学生个数FILE *fp;if(fp=fopen(3.txt,w+)=NULL) /新建一个空的3.txtprintf(新建文件出错);exit(0);fprintf(fp,%s,top); /标题先输入while(p-next!=NULL)n+;p=p-next;typedef struct /链表不容易操作,故而新建一个结构数组int totalgrade;char name10;int number;int chinese;int math;int english;gradenote; /成绩记录typedef structgradenote r100; /只初始化了100了空间,学生人数超过100就不能了,懒得动态分配了grade_list; /待排序成绩表grade_list L;p=file3;for(int t=1;tnext) /将链表的内容复制到结构数组里strcpy(L.,p-name);L.rt.number=p-number;L.rt.chinese=p-chinese;L.rt.math=p-math;L.rt.english=p-english;L.rt.totalgrade=p-chinese+p-math+p-english;if(i=1) /直接插入排序,具体思想参考数据结构,严蔚敏主编for(int k=2;k=n;+k)if(L.rk.totalgradeL.rk-1.totalgrade)L.r0=L.rk;L.rk=L.rk-1;for(int j=k-2;L.r0.totalgradeL.rj.totalgrade;-j)L.rj+1=L.rj;L.rj+1=L.r0;if(i=2) /折半插入排序,参考同上int m;for(int k=2;k=n;+k)L.r0=L.rk;int low=1,high=k-1;while(low=high)m=(low+high)/2;if(L.r0.totalgrade=high+1;-j)L.rj+1=L.rj;L.rhigh+1=L.r0;for(int q=n;q=1;q-) /将排序好的内容输入到3.txtfprintf(fp,%6s %2d %d %d %dn,L.,L.rq.number,L.rq.chinese,L.rq.math,L.rq.english);if(fclose(fp)printf(文件关闭失败);exit(0);void search(char *name) /按姓名查找gradelist file=fileread(3.txt);student * p=file;while(p-next!=NULL)if(strcmp(name,p-name)=0)printf(%6s %2d %d %d %dn,p-name,p-number,p-chinese,p-math,p-english);return;p=p-next;printf(查无此人,请确定名字输入正确n);exit(0);void main(void) int chioce;gradelist file1=fileread(1.txt),file2=fileread(2.txt);printf(现有成绩记录文件1n);printf(*n);FilePrint(file1);printf(*n);printf(现有成绩记录文件2n);printf(*n);FilePrint(file2);printf(*n);printf(第一步,合并成绩记录文件n);merger();printf(合并成功n);system(PAUSE);printf(现有合并后的成绩记录文件3n);printf(*n);gradelist file3=fileread(3.txt);FilePrint(file3);printf(*n);printf(第二步,抽取补考成绩记录n);extract();system(PAUSE);printf(现有补考成绩记录文件4n);printf(*n);gradelist file4=fileread(4.txt);FilePrint(file4);printf(*n);printf(第三步,对文件3进行排序n);printf(请输入排序方式(1/2)n1:直接插入排序n2:折半插入排序n);scanf(%d,&chioce);if(chioce=1)sort(1);else if(chioce=2)sort(2)

温馨提示

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

评论

0/150

提交评论