关联两个文件中的数据.docx
《关联两个文件中的数据.docx》由会员分享,可在线阅读,更多相关《关联两个文件中的数据.docx(14页珍藏版)》请在冰点文库上搜索。
关联两个文件中的数据
沈阳航空航天大学
课程设计
学号2010041102022
班级04110201
姓名孔洋
指导教师郭建新
2012年6月27日
沈阳航空航天大学
课程设计任务书
系:
材料科学与工程学院专业:
材料成型及工程
班级:
04110201
学号:
2010041102022题目:
关联两个文件中的数据
一、课程设计时间
2011~12第2学期第16周,即6月18日~6月21日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
设有两个文件(教师提供):
file07_1.txt,file07_2.txt。
file07_1.txt中存储着学生名单,每位学生有学号、姓名2项内容;file07_2.txt存储着学生成绩,每位学生有学号、数学成绩、英语成绩3项内容。
可见,学号是2个文件的共有的数据。
请按照一定顺序在用户屏幕显示所有同学的学号、姓名、数学成绩、英语成绩4项内容。
三、课程设计要求
程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“显示file07_1.txt”、“file07_2.txt”、“全部显示”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
✧四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
目录
一、需求分析1
二、设计分析2
三、主要界面截图4
四、技术要点6
五、个人总结9
六、参考文献9
七、源程序10
一、需求分析
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
通过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是:
显示文件file07_1.txt函数,显示文件file07_2.txt函数以及全部显示函数。
其中最主要的程序是对文件的读取,以及将文件内的数据按要求显示在界面上。
文件中包括学生的姓名,学号,数学成绩,英语成绩,因此在读取文件时要建立结构体,将所要显示的内容定义为结构体,而在读取文件时要用到fopen和fscanf这两个函数
除上面介绍的功能之外,程序还具有退出功能即程序返回到菜单界面,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
二、设计分析
该程序主要有4个功能模块,每一个模块对应一个C语言自定义函数。
1、程序总体结构图(传统流程图)
程序总体结构图
2、主要功能模块框图(N-S框图)
(1)显示文件file07_1函数part1():
是是否能打开否
打开文件
退出
读取文件中的数据
在界面上显示
关闭文件
(2)显示文件file07_2函数part2():
与
(1)同理
(3)显示全部文件:
是文件1是否能打开否
是文件2是否能打开否
退出
打开两个文件
退出
分别读取两个文件
除去相同的部分,将其余部分都显示在截面上
关闭文件
三、主要界面截图
图1程序主界面
图2显示file07_1.txt
图3显示file07_2.txt
图4显示全部文件
四、技术要点
本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,对文件中数据的读取是核心内容。
尤其要注意文件中的数据格式为结构体,因此定义时要注意,还有就是文件的读取,要将文件先打开,再读出数据,并显示在屏幕上。
以下为相应程序的说明。
1、显示菜单选项
voidmenu()
{printf("\n<<菜单>>\n");
printf("\n---------------------------------------------------------");
printf("\n----------------------------------------------------------\n");
printf("\n1.显示file07_1.txt");
printf("\n2.显示file07_2.txt");
printf("\n3.显示file07_1.txt,file07_2.txt");
printf("\n4.退出\n");
printf("\n---------------------------------------------------------------");
printf("\n---------------------------------------------------------------\n");
printf("\n程序功能:
关联两个文件中的数据\n");
}
2、显示文件file07_1.txt函数
先判断文件能否打开,将所要显示的内容定义为结构体,读取所需文件,具体程序如下:
voidpart1()
{
FILE*fp;
inti;
system("cls");
if((fp=fopen("E:
\\file07_1.txt","rb"))==NULL)
{printf("无法打开文件\n");}
for(i=0;i<8;i++)
{fscanf(fp,"%s%s",&stu[i].size,&stu[i].name);
printf("\n%s%s\n",stu[i].size,&stu[i].name);
if(feof(fp))
break;
}
}
3、显示文件file07_2.txt函数(同上)
4、显示全部文件函数判断两个文件是否能打开,将所要显示的内容定义为结构体,分别读取,除去相同的部分(即取文件的并集)打印,具体程序如下:
voidpart3()
{
system("cls");
menu();
FILE*fp1,*fp2;
inti,j;
system("cls");
if((fp1=fopen("D:
\\file07_1.txt","rb"))==NULL)
{printf("无法打开文件\n");}
if((fp2=fopen("D:
\\file07_2.txt","rb"))==NULL)
{printf("无法打开文件\n");}
for(i=0;i<8;i++)
fscanf(fp1,"%s%s",&stu[i].size,&stu[i].name);
for(j=0;j<8;j++)
fscanf(fp2,"%s%d%d",&stu[j].size,&stu[j].math,&stu[j].english);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(strcmp(stu[i].size,stu[j].size)==0)
printf("\n%s%s%d%d\n",stu[i].name,stu[i].size,stu[i].math,stu[i].english);
}
}
}
五、个人总结
在这次的课设中我接到了“关联两个文件中的数据”这个课题,刚开始看到这个题目感觉到很难,无从下手,但是在仔细的分析课题题目与要求之后我发现这个程序还是很容易上手的,借助大一学习的计算机基础以及对书本的翻阅,终于在多次的实验调试中设计出了理想的程序,在老师的帮助与校验下我终于完成了我的课设及答辩,通过这次的设计我对c语言的知识更加了解与熟练,在今后的学习生活中我会继续学习程序知识,希望在这方面可以走的很远!
!
!
六、参考文献
1.谭浩强C程序设计基础北京:
清华大学出版社2005
七、源程序
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#include"string.h"
structstudent
{
charsize[20];
charname[10];
intmath;
intenglish;
}stu[8];
voidmenu()
{printf("\n<<菜单>>\n");
printf("\n------------------------------------------------------------");
printf("\n------------------------------------------------------------\n");
printf("\n1.显示file07_1.txt");
printf("\n2.显示file07_2.txt");
printf("\n3.显示file07_1.txt,file07_2.txt");
printf("\n4.退出\n");
printf("\n-------------------------------------------------------------");
printf("\n-------------------------------------------------------------\n");
printf("\n程序功能:
关联两个文件中的数据\n");
}
voidpart1()
{
FILE*fp;
inti;
system("cls");
if((fp=fopen("D:
\\file07_1.txt","rb"))==NULL)
{printf("无法打开文件\n");}
for(i=0;i<8;i++)
{fscanf(fp,"%s%s",&stu[i].size,&stu[i].name);
printf("\n%s%s\n",stu[i].size,&stu[i].name);
if(feof(fp))
break;
}
}
voidpart2()
{
system("cls");
menu();
FILE*fp;
inti;
system("cls");
if((fp=fopen("D:
\\file07_2.txt","rb"))==NULL)
{printf("无法打开文件\n");}
for(i=0;i<8;i++)
{fscanf(fp,"%s%d%d",&stu[i].size,&stu[i].math,&stu[i].english);
printf("\n%s%d%d\n",stu[i].size,stu[i].math,stu[i].english);
if(feof(fp))
break;
}
}
voidpart3()
{
system("cls");
menu();
FILE*fp1,*fp2;
inti,j;
system("cls");
if((fp1=fopen("D:
\\file07_1.txt","rb"))==NULL)
{
printf("无法打开文件\n");
}
if((fp2=fopen("D:
\\file07_2.txt","rb"))==NULL)
{printf("无法打开文件\n");}
for(i=0;i<8;i++)
fscanf(fp1,"%s%s",&stu[i].size,&stu[i].name);
for(j=0;j<8;j++)
fscanf(fp2,"%s%d%d",&stu[j].size,&stu[j].math,&stu[j].english);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(strcmp(stu[i].size,stu[j].size)==0)
printf("\n%10s%10s%5d%5d\n",stu[i].name,stu[i].size,stu[i].math,stu[i].english);}
}
}
voidmain()
{
charchoice;
menu();
choice=getch();
while
(1)
{
switch(choice)
{
case'1':
part1();break;
case'2':
part2();break;
case'3':
part3();break;
case'4':
exit(0);break;
default:
printf("\n输入错误!
!
!
请输入1-4选择");
}
choice=getch();
}
}