C语言课程设计文件合并.docx
《C语言课程设计文件合并.docx》由会员分享,可在线阅读,更多相关《C语言课程设计文件合并.docx(13页珍藏版)》请在冰豆网上搜索。
![C语言课程设计文件合并.docx](https://file1.bdocx.com/fileroot1/2023-5/20/c52cd4e7-1cfa-461f-b730-0f257226dd64/c52cd4e7-1cfa-461f-b730-0f257226dd641.gif)
C语言课程设计文件合并
沈阳航空航天大学
课程设计报告
课程设计名称:
C语言课程设计
课程设计题目:
学生成绩文件合并
院(系):
理学院
专业:
信息与计算科学
班级:
14140101
学号:
2011041401017
姓名:
彭君君
指导教师:
丛丽晖
完成日期:
2012年3月16日
目录
第1章概要设计1
1.1题目的内容与要求1
1.2总体结构1
第2章详细设计2
2.1显示模块2
2.2合并模块.2
第3章调试分析4
第4章使用说明与执行结果5
参考文献7
附录(程序清单)8
第1章概要设计
1.1题目的内容与要求
内容:
将两个班学生成绩文件合并,产生一个有序文件并演示合并过程。
具体内容包括:
1.学生成绩输入两个有序文件。
2.将两个有序文件合并成一个有序文件。
3.演示归并排序后的结果。
要求:
1.独立完成系统设计﹑编码和调试。
2.系统利用C语言实现。
3.按照课程设计规范书写课程设计报告。
4.熟练掌握基本的调试方法,并将程序调试通过。
1.2总体结构
本程序主要分为三个模块:
显示模块:
输入信息到文件,显示文本文件的内容。
合并模块:
将两个文件的内容合并到一个文件。
排序模块:
对文件中的内容按照一定顺序排列信息。
图1.1功能模块图
第2章详细设计
2.1显示模块
输入要输入的文本文件名,能显示文件的内容,并将文件内容输出,流程如图2.2所示。
图2.1显示模块PAD图
注释:
1.定义一个文件指针变量。
2.输入文件名,打开该文件。
3.循环输入一个个结构体,判断不是结束,循环输出。
2.2合并模块.
1.输入文件A的信息。
2输入文件B的信息。
3.一个循环,根据是否到达文件信息尾部结束。
4.根据sum值进行大小比较。
5.将信息有序输入文件C。
第3章调试分析
1.在编译时,出现了不能运行程序的警告,马上发现是没有写头文件#include"stdax.h",后立马添上。
2.在输出C文件信息时,由于没有按照数组形式输出,后导致输出紊乱,后根据信息输入的写法编写了信息输出编码。
3.j的初值问题:
因为j的初值默认为0,可能造成主模块中的while语句不执行,所以要对j赋非0初值;
4.复制模块的定义指针问题:
未定义文件指针*f1,*f2,*f3.
5.关于合并后的文件中多出字符:
因为文本文件结束后还有回车键,所以会多出字符,应该用feof语句来判断文本文件的结束。
第4章使用说明与执行结果
1.输入信息到文件A。
2.输入信息到文件B。
2.文件合并后的结果。
参考文献
[1]张长海.C语言程设计[M].北京:
高等教育出版社,2006
[2]谭浩强.C程序设计[M].北京:
清华大学出版社,2005.7
[3]张长海.陈娟.C程序设计[M].北京:
高等教育出版社,2004
[4]严蔚敏.吴伟民.数据结构(C程序版)[M].北京:
清华大学出版社,
[5]湛为芳高效实用VisualC++库函数设计清华大学出版社。
.附录(程序清单)
#include"stdafx.h"
#include"stdio.h"
#include"stdlib.h"
structstudent
{charname[10];//建立结构体student
intscore[3];
intsum;
}stu[20];
structfile
{charname[10];//建立结构体file
intscore[3];
intsum;
}fil1[10];
structFile
{charname[10];
intscore[3];
intsum;
}fil2[10];
voidmain()
{
FILE*f1,*f2,*f3;
inti,j,sum1;
charch;
for(i=0;i<10;i++)
{printf("\nFileAinputscoreofstudent%d:
\n",i+1);
printf("Name:
");
scanf("%s",stu[i].name);
sum1=0;
for(j=0;j<3;j++)
{printf("score%d:
",j+1);
scanf("%d",&stu[i].score[j]);
stu[i].sum=sum1;
sum1+=stu[i].score[j];}
}
for(i=10;i<20;i++)
{printf("\nFileBinputscoreofstudent%d:
\n",i-9);//输入学生信息到数组
printf("Name:
");
scanf("%s",stu[i].name);
sum1=0;
for(j=0;j<3;j++)
{printf("score%d:
",j+1);
scanf("%d",&stu[i].score[j]);
sum1+=stu[i].score[j];}
stu[i].sum=sum1;
}
printf("\n合并后C文件中学生成绩如下:
\n");
if((f1=fopen("G:
\\c语言\\FileA.dat","w"))==NULL)//打开文件A
{
printf("文件打开出错");
exit(0);
}
for(i=0;i<10;i++)
fwrite(&stu[i],sizeof(structstudent),1,f1);
//信息输入文件A
if((f2=fopen("G:
\\c语言\\FileB.dat","w"))==NULL)//打开文件B
{
printf("文件打开出错");
exit(0);
}
for(i=10;i<20;i++)
fwrite(&stu[i],sizeof(structstudent),1,f2);
//信息输入文件B
if((f3=fopen("G:
\\c语言\\FileC.dat","w"))==NULL)//打开文件C
{
printf("文件打开出错");
exit(0);
}
i=0;
j=0;
fread(&fil1[0],sizeof(structstudent),1,f1);
fread(&fil2[0],sizeof(structstudent),1,f2);//按照排序合并文件A.B
while(!
feof(f1)&&!
feof(f2))
{if(fil1[i].sum>fil2[j].sum)
{fwrite(&fil1[i],sizeof(structstudent),1,f3);fread(&fil1[i+1],sizeof(structstudent),1,f1);i++;}else{fwrite(&fil2[j],sizeof(structstudent),1,f3);fread(&fil2[j+1],sizeof(structstudent),1,f2);j++;}
}
while(!
feof(f1))
{fwrite(&fil1[i],sizeof(structstudent),1,f3);}
while(!
feof(f2))
{fwrite(&fil2[j],sizeof(structstudent),1,f3);}
fclose(f1);
fclose(f2);
for(i=0;i<20;i++)
{fread(&stu[i],sizeof(structstudent),1,f3);
printf("name:
",stu[i].name);
for(j=0;j<3;j++)
printf("score%d:
%d",j+1,stu[i].score[j]);
}
fclose(f3);
}//输出文件C中排序后的信息
课程设计总结:
通过本次课程设计,进一步熟悉和了解了文件合并设计的基本设计思想,加深了对于结构体文件的认识。
此程序为学生成绩文件合并,可以简单的解决一些实际生活中的学生成绩排序合并问题。
学会选择合适地数据结构,并定义数据结构的结构体;学会根据程序所要完成的基本要求和程序实现提示,设计出完整的算法;学会按照格式写书课程设计说明书及任务书。
遇到问题时应当端正态度,本着自己解决问题的决心。
不怕困难,提高自己的专业素养。
在程序的编写和实现当中,发现了自己对于数据结构的掌握还不是很全面,对两种查找的要求不明白。
在今后的学习当中,应当查缺补漏,努力完善自己的实践能力。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩