数据文件处理.docx
《数据文件处理.docx》由会员分享,可在线阅读,更多相关《数据文件处理.docx(13页珍藏版)》请在冰豆网上搜索。
数据文件处理
沈阳航空工业学院
课程设计
学号200704021028
班级7402101
姓名吴广大
指导教师吴杰宏
2008年9月13日
沈阳航空工业学院
课程设计任务书
院系:
电子信息工程专业:
电子信息工程班级:
7402101
学号:
200704021028题目:
数据文件处理
一、课程设计时间
2008~09第1学期第2周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
先向一个文件中写入20个整型数据,然后把这些数据读入到数组中,按照由小到大的顺序排列后,再写入到另外一个文件sort.dat中。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“显示原文件数据”、“生成新文件”、“显示新文件数据”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段4
四、课设总结9
五、参考文献9
六、源程序10
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,它们的功能分别是:
1存入数据函数,2读出数据函数,3排序函数,4菜单函数。
前三个函数实现对数据的处理,从而实现本软件功能,第四个函数为辅助对前三个函数的操作。
1、存入数据函数主要实现程序对数据的存入文件的功能。
2、读出数据函数实现的功能是打开相应的文件,读出文件中的数据。
3、排序函数按照题目的具体要求实现不同的数据从小到大排列。
4、菜单函数辅助软件操作,方便操作者实现软件的各个功能。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
软件的操作对象主要是数据,因此定义了一个数组a[20],用来存放最初输入的数据。
为了程序的简洁因此我们还定义了一个全局变量a1[20],使书数据能连续的传递。
二、程序流程图.
1程序总体结构N-S流程图
2、具体功能框图
(1)存入数据函数cun_pan()N-S流程图
(2)读出数据函数read()N-S流程图
(3)排序函数pai_xu()N-S流程图
三、核心技术的实现说明及相应程序段
本程序主要由四个自定义函数和一个主函数组成,其中主函数在程序开始运行的时候建立num.dat文件,向文件输入20个整型数据。
然后以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,读出数据函数,排序函数和存盘函数是程序中较为核心的部分,下面分别进行说明。
1、存入数据函数
具体的程序段如下:
intcun_pan(charfilename[])/*存盘函数*/
{
intn;
FILE*fpp;
fpp=fopen(filename,"w");/*新建文件*/
for(n=0;n<20;n++)
putw(a1[n],fpp);/*将数组存到文件中*/
fclose(fpp);/*关闭文件*/
returna1[20];
printf("数据已经存盘。
\n");
}
2、读出数据函数
该函数的核心内容是读出文件中的数据,该函数运行时,首先是以只读的放式打开文件,然后用for循环依次从文件中读出数据,并且将数据存放到数组a1[20]中,打印到屏幕。
具体的程序段如下:
intread(charfilename[])/*读取函数*/
{
intm;
FILE*p;
p=fopen(filename,"r");/*以只读的方式打开文件*/
for(m=0;m<20;m++)
a1[m]=getw(p);/*读出数据*/
fclose(p);
for(m=0;m<20;m++)
printf("%d",a1[m]);
printf("\n");
printf("数据读出完毕。
\n");
returna1[20];
}
3、排序函数
对于数据的排序采用的排序算法是冒泡法排序,这部分程序调用了reads函数读出的数据,整个排序过程在数组a1中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。
排序函数使整型数据的排列顺序发生了变化,排序后将数据输出到屏幕上;
具体的程序段如下:
intpai_xu(intb1[],intn)/*排序函数*/
{
inti,j,t;
for(i=0;i<19;i++)
for(j=0;j<19-i;j++)
if(b1[j]>b1[j+1])
{
t=b1[j];
b1[j]=b1[j+1];
b1[j+1]=t;
}
for(i=0;ia1[i]=b1[i];
printf("数据已经存入中文件sort.dat中。
\n");
returna1[n];
}
4、菜单函数
本函数主要功能时辅助操作者方便操作。
具体程序如下
voidmenu()
{printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("1输入数据(数据存入num.dat中)\n");
printf("2读出文件num.dat中的数据\n");
printf("3排序后将数据存如sort.dat中\n");
printf("4读出sort.dat中的数据\n");
printf("5退出程序\n");
printf("请选择操作:
\n");
}
四、课设总结
在这次课设中,我学会了许多东西,最重要的是要把知识学得牢固才会在实际中运用自如,不至于毫无头绪,忙乱之极,另外让我懂得做事情要谨慎、细心、要动脑,不要慌张,要平静得对待发生的事情,例如,编出来的程序却总是运行不了,这时就要冷静慢慢的调试,检查错误发生的原因。
虽然这次C语言程序设计的时间很短,只有五天的时间,却让我们体会到了酸甜苦辣,从沮丧到欢喜的转变,另外这次课设让我的编成能力也有所提高,知道从何下手,这次课设我收获很大。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2007
六、源程序
#include"stdio.h"
#include"stdlib.h"
inta1[20];
intcun_pan(charfilename[])/*存盘函数*/
{
intn;
FILE*fpp;
fpp=fopen(filename,"w");
for(n=0;n<20;n++)
putw(a1[n],fpp);
fclose(fpp);
returna1[20];
printf("数据已经存盘。
\n");
}
intread(charfilename[])/*读取函数*/
{
intm;
FILE*p;
p=fopen(filename,"r");
for(m=0;m<20;m++)
a1[m]=getw(p);
fclose(p);
for(m=0;m<20;m++)
printf("%d",a1[m]);
printf("\n");
printf("数据读出完毕。
\n");
returna1[20];
}
intpai_xu(intb1[],intn)/*排序函数*/
{
inti,j,t;
for(i=0;i<19;i++)
for(j=0;j<19-i;j++)
if(b1[j]>b1[j+1])
{
t=b1[j];
b1[j]=b1[j+1];
b1[j+1]=t;
}
for(i=0;ia1[i]=b1[i];
printf("数据已经存入中文件sort.dat中。
\n");
returna1[n];
}
voidmenu()
{printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("1输入数据(数据存入num.dat中)\n");
printf("2读出文件num.dat中的数据\n");
printf("3排序后将数据存如sort.dat中\n");
printf("4读出sort.dat中的数据\n");
printf("5退出程序\n");
printf("请选择操作:
\n");
}
voidmain()
{
inta[20];
inti,p;
printf("*****************************欢迎进入此系统!
*******************************\n");
FILE*fp;
fp=fopen("d:
\\num.dat","w");
while
(1)
{
menu();
scanf("%d",&p);
switch(p)
{
case1:
printf("#######################请输入20个整型数据:
(以空格键隔开)#######################\n");
for(i=0;i<20;i++)
scanf("%d",&a[i]);/*从键盘读取数据*/
for(i=0;i<20;i++)
putw(a[i],fp);
fclose(fp);
printf("\n");
printf("数据已经存入文件num.dat中\n");
break;
case2:
read("d:
\\num.dat");break;
case3:
pai_xu(a1,20);cun_pan("d:
\\sort.dat");break;
case4:
read("d:
\\sort.dat");break;
case5:
printf("程序已经结束,按任意键退出\n");
exit(0);break;
default:
printf("输入错误,请重新输入!
\n");
}
}
}