收藏 分享(赏)

实现对两个文件数据进行合并,生成新文件.doc

上传人:lufeng10010 文档编号:2290183 上传时间:2018-09-09 格式:DOC 页数:8 大小:41.01KB
下载 相关 举报
实现对两个文件数据进行合并,生成新文件.doc_第1页
第1页 / 共8页
实现对两个文件数据进行合并,生成新文件.doc_第2页
第2页 / 共8页
实现对两个文件数据进行合并,生成新文件.doc_第3页
第3页 / 共8页
实现对两个文件数据进行合并,生成新文件.doc_第4页
第4页 / 共8页
实现对两个文件数据进行合并,生成新文件.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、要用的请复制,要转载的请注明,要问的免了题目如下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)抽取出

2、三科成绩中有补考的学生并保存在一个新文件 4.txt3)合并后的文件 3.txt 中的数据按总分降序排序(至少采用两种排序方法实现)4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)要求使用结构体,链或数组等实现上述要求.6)采用多种方法且算法正确者,可适当加分.源代码如下#include#include#includechar top50; /成绩文件顶部的标题用 top 保存typedef struct student /单个学生成绩的记录char name10; /姓名int number; /学号int chinese; /语文int math; /

3、数学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(

4、!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, /将文件的数据输入到链表中n=1;if(fclose(fp) /关闭文件printf(“文件关闭失败“);exit(0);return file;void FilePrint(gradelist file) /将成绩文件打印到屏幕上student *p=file;printf(“%

5、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)

6、/先新建一个 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 %

7、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

8、);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

9、.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;in

10、t math;int english;gradenote; /成绩记录typedef structgradenote r100; /只初始化了 100 了空间,学生人数超过 100 就不能了,懒得动态分配了grade_list; /待排序成绩表grade_list L;p=file3;for(int t=1;tnext) /将链表的内容复制到结构数组里strcpy(L.rt.name,p-name);L.rt.number=p-number;L.rt.chinese=p-chinese;L.rt.math=p-math;L.rt.english=p-english;L.rt.totalgrad

11、e=p-chinese+p-math+p-english;if(i=1) /直接插入排序,具体思想参考数据结构,严蔚敏主编for(int k=2;k=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.rq.name,L.rq.number,L.rq.chinese,L.rq.math,L.rq.english);if(fclose(fp)printf(“文件关闭失败“);exit(0);void search(char *name)

12、 /按姓名查找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) /本代码由武汉工业学院计科 09 级,百度 ID 轻盈流飞雪 所编,转载注明,完成作业请删除此句,不懂勿问,哥很忙int c

13、hioce;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“);gr

14、adelist 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“,if(chioce=1)sort(1);else if(chioce=2)sort(2);elseprintf(“输入不合理,程序默认采用 1 方式n“);sort(1);file3=fileread(“3.txt“);printf(“现有按总分降序的成绩记录 3n“);printf(“*n“);FilePrint(file3);printf(“*n“);printf(“第四步,查找学生信息n“);char name100;printf(“请输入学生姓名n“);scanf(“%s“,name);search(name);printf(“按任意键结束程序n“);getchar();

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

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报