个人帐簿管理系统课程设计论文_第1页
个人帐簿管理系统课程设计论文_第2页
个人帐簿管理系统课程设计论文_第3页
个人帐簿管理系统课程设计论文_第4页
个人帐簿管理系统课程设计论文_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计教学学院课程名称数据结构课程设计话题个人图书管理系统目录 TOC o h z HYPERLINK l _Toc375834075 概述 PAGEREF _Toc375834075 h 2 HYPERLINK l _Toc375834076 二 整体方案设计 PAGEREF _Toc375834076 h 3 HYPERLINK l _Toc375834077 三个详细设计 PAGEREF _Toc375834077 h 7 HYPERLINK l _Toc375834078 四个程序的调试运行结果 PAGEREF _Toc375834078 h 22 HYPERLINK l _Toc3

2、75834079 五门课程设计总结 PAGEREF _Toc375834079 h 25 HYPERLINK l _Toc375834080 参考文献 PAGEREF _Toc375834080 h 27 HYPERLINK l _Toc375834081 附录 PAGEREF _Toc375834081 h 28一、概述课程设计的目的(1)。了解并掌握本课程的基本概念、编程思想和方法。(2)。培养综合运用所学知识独立完成项目的能力。(3)。培养科技人员勇于探索、推理严谨、实事求是、纠正错误、用实践检验理论、全面思考问题等应有的素质。(4)。掌握从文献和科学实验中获取知识的能力,提高学生从别人

3、的经验中寻找新方法解决问题的认识,初步培养工程意识和创新能力。课程设计要求个人账簿管理系统记录一个人的月收入和各项支出,包括伙食费、房租、子女教育费、水电费、医疗费、储蓄等。系统采用Windows XP操作系统结合Visual C+ 6.0、TC 2.0等软件开发,可以输入和修改某月的收支,可以按月支出从小到大排序,可以根据输入的当月收支查询月支出。C语言文件操作的知识点在课程设计中经常用到,而文件操作在我们平时的学习中很少用到,所以在课程设计之前,我们组的成员们花了一个专门的课时间,重新阅读C编程教程了解C入门加中的文件操作。二 整体方案设计一、整体系统设计思路本课程的程序主要通过C语言文件

4、操作实现文件的读写操作来存储管理数据。主要包含接收键盘输入数据,将数据写入指定文件,将.dat文件转换为.txt文件显示等功能。出来,找到对应的月份,对一个月的费用进行排序,修改其中一个数据删除整月数据。整个系统的接口和对各个功能函数的调用都放在main函数中。一个指针变量a贯穿整个程序,使得每个函数都可以共享指针变量a所指向的存储区的数据。整个程序涉及的功能很多,代码一般比较长。根据课程设计大纲的要求和我们对程序的整体设计,我们将整个程序分为6个功能,其中7个功能功能与主要功能相关。调度每个函数以实现该功能。2.算法的总体思路数据类型设置为:类型定义结构国际月份;内装船;诠释方族;诠释 zi

5、nv;int水电;int yiao;诠释初许;诠释手足; 信息;为了方便使用,每个变量基本都使用拼音。另外,为了方便查询和排序,另外定义类型定义结构诠释没有;整数数据;p类型;排序时使用方便。整个程序流程图如下:整个程序通过main函数中的switch调用来执行整个程序。三、主要特点该程序可以在控制台输入数据后将数据写入文件。即使退出程序,也可以随时通过程序对文件中的任何数据进行增删改查,只要不删除自己编写的文件即可。在修改数据时,我们可以在指定文件中修改指定月份的指定数据项,体现了修改的灵活性。查询时,我们可以在控制台的一个文件中查询一个月的数据。在控制台中查询指定文件中直径月份的数据,并删

6、除指定文件中指定月份的全部数据。最后,程序还可以将每个月的开支从小到大排序。4.具有功能程序可以接收键盘输入的数据,将数据写入指定文件,将.dat文件转换成txt文件显示方便查看,查找对应月份,对一个月的支出进行排序,修改其中一个数据为删除一整月的数据,最后在main函数中调用,对团队成员的功能进行整体调试。详情见下表:无效输入(信息 *a)这个函数接受一个从main函数传来的指针变量,并将数据写入a指向的存储区无效 writeinfor(Infor *a)该函数将a指向的存储区的数据写入指定的.dat文件无效更改格式()该函数用于查询时,将.dat文件中的数据写入控制台,转换为.txt文件并

7、显示,最后关闭文件。该函数完成执行并删除 .txt 文件整数搜索(信息 *a)从main函数中接受指针变量,在指针指向的内存区域中找到a-month等于你需要找到的月份值的位置,使a指针正好指向this的数据月份,如果标志找到为1则正确返回,如果没有找到,则显示为找到对应的月份。void paixu(Infor *a)将指定月份的数据项中的数据从小到大排序。无效修改(Infor *a,int mon)修改指定文件指定月份指定数据项的数据无效删除记录(int mon)整月删除指定文件中指定月份的数据我在这个程序中承担的主要任务是查找对应的月份,查询数据或修改月份中的数字。这三个函数主要解决的问题

8、是如何在指定文件中找到对应的数据项,并对数据项进行相应的操作。最后在main函数中,通过switch将各个功能模块作为一个整体调用,最终实现系统。我要解决的主要问题是如何使用正确的文件读写操作模式字符串打开文件读取指定的.dat文件并转换为.txt文件最后以一定的格式显示在屏幕上.另外,在查询函数中,我们需要在对应的文件中找到对应的月份,并将这里的指针移到数据区,这样我们就可以使用指针变量方便的查询和修改数据,也就是还体现在指针变量使用的灵活性上。其中,fopen函数模式字符串在文件操作中的作用如下:模式串意义 r 打开过去的文件,可以读取文件“ w ”打开文件,可以写入文件,先将文件长度截断

9、为0,如果文件不存在,则创建“一个”打开一个文本文件,可以写入文件,将内容追加到现有文件的末尾,如果文件不存在,先创建 r+ 打开一个文本文件,该文件可以更新,也可以读取和写入文件 w+ 打开分隔的文本文件,可以更新(写入),如果文件存在,会先将其长度截断为0;如果它不存在,它将首先创建。“一个+ ”打开一个文本文件,可以更新(读写),将内容追加到现有文件的末尾,如果文件不存在,先创建;您可以读取整个文件,但只能在写入时附加内容“ rb ” 、 “ wb+ ” 、 “ ab ” 、 “ ab+ ” 、 “ a+b ” 、 “ wb+ ” 、 “ w+b ”“ ab+ ” 、 “ a+b ”和之

10、前的模式一样,只是用二进制模式而不是文本模式打开文件三个详细的设计更改格式()该函数首先在控制台打印一行语句提示用户输入要搜索的文件名,如果文件不存在则程序终止。如果文件存在,使用文件类型指针fp1指向文件,以二进制文件读写方式打开文件,然后我再创建一个同名但后缀为.txt的文件,并使用文件类型指针fp2 指向它,并在这个文件中打印一些显示文本,使输出结果更好看,同时在控制台打印这些文本,最后将 fp1 文件指向的格式化输出 fprintf 写入 fp2,最后分别关闭 fp1 和 fp2。 ,并显示刚才的.txt文件,并删除刚刚创建的.txt文件。无效更改格式()文件 *fp1,*fp2;信息

11、 *a;字符文件名100;诠释我;a=(Infor *)malloc(sizeof(Infor);printf(请输入您要查询的数据的文件名(.dat后缀的文件名);scanf(%s,文件名);fp1=fopen(filename,rb+);/打开一个二进制文件进行读写如果(fp1=NULL)printf(找不到文件n);退出(0);for(i=0;文件名i!=.;i+)文件名2i=文件名i;if(filename2i!=.)strcat(filename2,.txt);/将文件名后缀改为.txt文件fp2=fopen(filename2,wb+);如果(fp2=NULL)printf(创建文

12、件失败n);返回 ; /返回主函数fputs(n个人账簿管理系统rn,fp2);fputs(记录每月的伙食费、房租、子女费、水电费、医疗费和储蓄费的收入rn,fp2);fputs( rn,fp2);printf(n记录每个月的伙食费、房租、小孩费、水电费、医疗费和储蓄费的收入n);printf( n);rewind(fp1);/使fp1指向文件开头fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/从原文件.dat中读取数据写入显示文件.txtprintf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin

13、,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);fprintf(fp2,%7d %8d %8d %8d %8d %8d %8d %8drn,a-month,a-shipin,a-fangzu,a-zinv,a- shuidian,a-yiliao,a-chuxu,a-shouru);/格式化文件输出fread(a,sizeof(Infor),1,fp1);fputs( rn,fp2);fputs(r关闭这个程序,继续原来的程序!n,fp2);fclose(fp1);fclose(fp2);系统(文件名2); /调用打开转换后的文本文件删除(文

14、件名2);搜索(信息 *a)该函数首先在控制台打印一行语句提示用户输入要搜索的文件名,如果文件不存在则程序终止。如果文件存在,使用文件类型指针fp1指向文件,以二进制文件读写方式打开文件,然后我再创建一个同名但后缀为.txt的文件,并使用文件类型指针fp2 指向它,并在这个文件中打印一些显示文本,使输出结果更好看,同时在控制台打印这些文本,最后将 fp1 文件指向的格式化输出 fprintf 写入 fp2,最后分别关闭 fp1 和 fp2。 ,并显示刚才的.txt文件,并删除刚刚创建的.txt文件。整数搜索(信息 *a)文件 *fp1;周一;int isfound=0;/标志变量,初始值为0表

15、示找到对应的月份,如果找到对应的月份,则设置为1字符文件名100;printf(请输入文件名(.dat文件):);scanf(%s,文件名);printf(请输入正确的月份:);scanf(%d,&mon);刷新(标准输入); /清空缓冲区fp1=fopen(文件名,rb+);如果(fp1=NULL)printf(找不到文件n);退出(0);rewind(fp1);/将fp1指向文件头,比较严谨fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/查询操作如果(a-月=星期一)发现=1;休息;别的发现=0;fread(a,sizeof(Infor),1,f

16、p1);fclose(fp1);如果(发现)返回确定;别的printf(未找到对应月份n);返回 1;无效修改(Infor *a,int mon)该函数的主要作用是修改指定文件下指定月份的指定数据项。首先用fp1指向指定文件,用fp2打开一个temp.dat文件。上一个搜索函数找到月份后,通过指针变量a “传递”该月份。首先选择要修改的数据项,然后将要修改的数据的内容输入到a所指向的存储区中对应的数据项中。此时,我们使用 printf 在控制台打印出修改月份的数据。然后使用指针变量b来存储从fp1文件中读取的数据。不是对应月份时,直接写入fp2指向的temp.dat文件。当是对应月份的时候,a

17、指向的存储区就是将数据写入fp2指向的temp.dat文件,这个过程还是一个函数,直到fp1指向文件末尾才结束.最后关闭fp1和fp2指向的文件,删除源文件,将temp.dat文件命名为和之前的文件同名,在控制台打印修改成功。void modify(Infor *a,int mon)/修改数据文件 *fp1,*fp2;诠释我;诠释金钱;字符文件名100;信息 *b;b=(Infor *)malloc(sizeof(Infor);printf(要插入修改数据的文件(注意文件名必须和之前的文件名一致!);scanf(%s,文件名);fp1=fopen(文件名,rb+);fp2=fopen(temp

18、.dat,wb+);/temp.dat作为临时文件printf(你要修改哪些数据?(1个食物,2个房租,3个孩子开销,4个水电费,5个医疗费,6个储蓄,7个收入):);scanf(%d,&i);而(i7)printf(请重新输入:);scanf(%d,&i);printf(请输入修改后的数据:);scanf(%d,&money);开关(一)情况1:a-shipin=钱;休息;案例2:a-fangzu=钱;休息;案例3:a-zinv=钱;休息;案例4:a-水电=钱;休息;案例5:a-yiliao=钱;休息;案例6:a-chuxu=钱;休息;案例7:a-shouru=钱;休息;默认:休息;prin

19、tf(修改:n);printf(n记录每个月的伙食费、房租、小孩费、水电费、医疗费和储蓄费的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);倒带(fp1);fread(b,sizeof(Infor),1,fp1);while (!feof(fp1)/重写数据如果(b-月=星期一)fwrite(a,sizeof(Infor),1,fp2);/修改数据别的fwrite(b,sizeof(Infor),1,

20、fp2);fread(b,sizeof(Infor),1,fp1);fclose(fp1);fclose(fp2);删除(文件名); /删除源文件rename(temp.dat,filename);/重命名中间文件printf(修改数据成功!n );4.主要功能调试主要功能部分通过switch语句实现整个程序功能的调度。首先在case1中,通过input函数将变量写入a指向的存储区域,然后调用writeinfor函数将指针变量a指向的区域的数据写入用户指定的文件中. case2是对整个文件查询用户指定文件的数据,结果最终会在控制台打印出来并显示一个.txt文件,比较方便直观。在case3中,调

21、用search函数,通过flag变量flag接收到search函数返回的值。如果标志值不OK,则打印没有满足条件的记录的语句。如果标志正常,则通过指针变量 a 传递。将指向的存储区的数据格式化打印在屏幕上,然后调用修改函数修改月份数据指定的数据项。 case4前面部分的流程和case3一样。同样是调用搜索函数在指定文件中查找指定月份的数据并指向它,最后通过指针变量a将其打印到屏幕上。在case5中,使用search函数查找指定月份,然后使用paixu函数将指定月份的数据从小到大排序,最后打印到控制台。在案例6中,通过搜索功能也找到了指定的月份,并删除了该月的所有数据。 case7 通过 函数中

22、的exit() 函数退出整个程序。主函数的整个流程图见算法总体思路中的函数流程图,这里不再赘述。主函数()而(真)int flag;/标志位,用于保存查询函数返回的结果int item;/函数项号周一;Infor *a;/信息指针a=(Infor *)malloc(sizeof(Infor);/动态分配内存空间做printf(nt*欢迎使用个人账簿管理系统* *n ); printf(t*t *n);printf(t*t 主菜单 *n);printf(t*t *n);printf(t*t 1. 输入数据*n);printf(t* t 2. 查看数据*n);printf(t*t 3. 修改数据*

23、n);printf(t*t 4. 查询数据*n);printf(t*t 5. 数据排序*n);printf(t*t 6. 删除数据*n);printf(t*t 0. 退出系统*n);printf(t*t *n);printf(t* * *nn);printf(请输入要执行的动作:);scanf(%d,&item);while(item7 | item月;if (flag!=OK) printf(n没有匹配的记录!n);别的printf(n记录每个月的伙食费、房租、小孩费、水电费、医疗费和储蓄费的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d

24、 %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);修改(一,周一);休息;/查询数据案例4:标志=搜索(一);if (flag!=OK) printf(n没有匹配的记录!n);别的printf(n记录每个月的伙食费、房租、小孩费、水电费、医疗费和储蓄费的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);休息;/

25、排序数据案例5:标志=搜索(一);如果(标志!=确定)printf(n没有找到符合排序条件的记录!n);别的派虚(一);休息;/删除数据案例6:标志=搜索(一);星期一=a-月;if (flag!=OK) printf(n没有匹配的记录!n);别的printf(n记录每个月的伙食费、房租、小孩费、水电费、医疗费和储蓄费的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-shuidian,a- yiliao,a-chuxu,a-shouru);delRecord(m

26、on);break;/Exit systemcase 0:printf(nInstructor: Shann);printf(Group members: Xia Neng, Wang Huan, Qiu Shaoxiong, Luo Siwein);exit(0);break;free(a);/Release storage spacereturn 0;Debugging and running results of the four programs1.查询功能首先是测试查询功能。数据已经通过第一个函数提前写入了test.dat文件。我们在主功能界面输入2,选择查看数据。在控制台中,我们可

27、以看到数据是以某种格式输出的,同时打开了一个名为 test.txt 的文件,显示的是相同的数据。这是当我们看到目录结构中同时存在 test.dat 和 test.txt 文件时。 test.txt 文件提示用户关闭程序。继续源码程序,关闭程序后,发现回到主函数界面,text.txt文件被删除。2.查询数据接下来,测试第四个查询数据功能。这个函数和前者的区别在于前者是查询整个文件的数据,而这个函数是查询指定文件的指定月份。我们先在功能主界面输入4选择功能,然后控制台会提示我们输入要查询的文件名,或者输入刚才的test.dat,然后控制台会提示用户输入月份查询中,我们输入 10 ,然后你会发现控制

28、台直接在控制台打印了十月的数据。3.修改数据然后测试修改数据的功能。这时候我们在主界面输入3,这里我们调用前面的搜索来指定文件和月份,所以谁在控制台提示我们输入对应的文件和响应的月份,我们就输入test。在dat和10之后,你会发现控制台提示我们选择要修改的项目。这时候我们选择修改第一项,即食物消费,把它的数字从150改为380,最后在控制台显示出来,我们发现结果完全正确。五门课程设计总结课程设计主要是通过C语言的文件操作读写文件来实现一个账簿管理系统,从这个角度看类似于一个小型文件类型的数据库。本程序实现了文件的增删改查等基本功能,界面也非常友好,有很多提示输出语句,操作起来更方便。查询的文

29、件可以通过.txt文件显示,也可以在控制栏指定打印对应文件中对应月份的数据。并且可以使用这个程序来管理多个文件,这点和基于文件的DBMS是一样的(当然功能没那么强大)。整个程序的编写过程中遇到的最大难点就是文件的读写,以及如何输出好的格式,让用户看得更清楚、更直观。首先,我们对文件操作函数中模式字符串的含义有一个模糊的认识。如果没有正确使用,我们在执行文件操作后忘记重定向文件指针的位置,导致文件指针指向异常。我们期望实现的功能有很大的不同,所以我们在操作文件指针之前先定位指针的位置。另外,如果我们在函数2中将整个文件的数据输出为.txt文件,这里的格式看起来比较舒服,但是一开始显示的效果就不是

30、这样了。当时我们忽略了windows中的换行符和dos命令控制台中换行符的转义符不同,所以不管怎么用 n ,最终的结果就是所有的数据都挤在一行,这特别难看。但是后来我突然想起,windows中的换行符是 r 然后换成 n ,经过调试,输出效果还算满意。此外,整个程序是用模块编写的。如何让各个模块共享数据成为了一个大问题。后来经过讨论,我们决定在整个程序的main函数中创建一个Infor类型的指针变量。它可以轻松共享其指向的存储区域,以达到共享数据的效果。整个程序的缺点是程序的某些步骤操作起来比较麻烦。比如前面修改数据项的功能,前面已经指定了文件名,后面需要重新指定文件名。问题主要是因为子模块写

31、导致的缺陷,曾经想过用全局变量来弥补缺陷,但是后来由于时间问题,一旦修改,难免会做出一些改动到整个程序并停止它。另外,整个程序设计的异常处理是很不完善的,但是这个责任也不全在我们身上,因为C语言是面向过程的语言,它没有像C+和JAVA那样强大的异常处理机制(没有那么多定义)。异常类),所以整个程序虽然可以正常使用,但并不健壮。一旦遇到非法的运行程序,必然会崩溃。如果使用 C+ 或 JAVA 等面向对象的语言进行编程,则程序的设计应该更加完善一些。毕竟是图书管理系统,我们应该为不同的用户限制不同的使用权限。这个程序更进一步的想法是希望实现一个用户权限管理,可以通过不同的文件操作模式字符串来指定不

32、同类型的用户拥有不同权限的操作。比如对于一些用户,我们在打开文件的时候给他指定“只读”类型,那么他在整个操作过程中只能查询,不能创建、添加、删除、修改数据,有的还有更高的级别。我们将用户指定为“可读可写”类型,则他拥有最高权限,可以在整个程序运行过程中对数据进行任意操作。如果这个修改成功,程序将真正实现一个小文件DBMS。总的来说,完成本课程设计课题后,我原本的弱文件操作知识得到了加强,在数据库课程中学到的一些数据库思想也能在程序中得到一定的体现。还是很大的。参考1 谭浩强,C 编程问题求解与计算机指导(第二版),清华大学,2000 年 9 月。2 Stephen Prata,C Primer

33、 plus(第 4 版),人民邮电,2005 年 2 月。3 严为民,数据结构(C语言版),清华大学,2007年3月4 谭浩强,C程序设计(第四版),清华大学,附录#include#include#include#定义确定 1#定义错误 0#define 真 1/个人信息类型定义结构国际月份;内装船;诠释方族;诠释 zinv;int水电;int yiao;诠释初许;诠释手足; Infor;/每个变量的名字为了方便使用拼音字符文件名1100,文件名2100;typedef struct / 自定义查询数据类型诠释没有;整数数据;p类型;void input(Infor *a)/接收键盘输入的数据

34、printf(n请按顺序输入数据(数据之间用空格隔开):n(本月伙食费、房租、子女费、水电费、医疗费、储蓄费、收入费)n) ;scanf(%d%d%d%d%d%d%d%d,&a-month,&a-shipin,&a-房族,&a-zinv,&a-水店,&a-yiliao ,&a-chuxu,&a-shouru);fflush(stdin);/清空文件缓冲区,打开文件写入时将缓冲区内容写入文件void writeinfor(Infor *a)/将内容写入文件字符 ch;文件 *fp;printf(请输入要写入的文件名(请使用.dat作为文件名后缀):);scanf(%s,filename1);ch

35、=getchar();/回收换行键if(fp=fopen(filename1,ab+)=NULL)/第一次以读写方式新建二进制文件,如果以后文件名存在,则打开文件并追加内容printf(创建文件失败n);退出(0);fwrite(a,sizeof(Infor),1,fp);/向fp指向的文件写入一个数据项fclose(fp);printf(数据写入成功n);无效更改格式()文件 *fp1,*fp2;信息 *a;字符文件名100;诠释我;a=(Infor *)malloc(sizeof(Infor);printf(请输入您要查询的数据的文件名(.dat后缀的文件名);scanf(%s,文件名);

36、fp1=fopen(filename,rb+);/打开一个二进制文件进行读写如果(fp1=NULL)printf(找不到文件n);退出(0);for(i=0;文件名i!=.;i+)文件名2i=文件名i;if(filename2i!=.)strcat(filename2,.txt);/将文件名后缀改为.txt文件fp2=fopen(filename2,wb+);如果(fp2=NULL)printf(创建文件失败n);返回 ; /返回主函数fputs(n个人账簿管理系统rn,fp2);fputs(记录每月的伙食费、房租、子女费、水电费、医疗费和储蓄费的收入rn,fp2);fputs( rn,fp2

37、);printf(n记录每个月的伙食费、房租、小孩费、水电费、医疗费和储蓄费的收入n);printf( n);rewind(fp1);/使fp1指向文件开头fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/从原文件.dat中读取数据写入显示文件.txtprintf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);fprintf(fp2,%7d %8d %8d %8d %8d %8d %8d %8drn,a

38、-month,a-shipin,a-fangzu,a-zinv,a- shuidian,a-yiliao,a-chuxu,a-shouru);/格式化文件输出fread(a,sizeof(Infor),1,fp1);fputs( rn,fp2);fputs(r关闭这个程序,继续原来的程序!n,fp2);fclose(fp1);fclose(fp2);系统(文件名2); /调用打开转换后的文本文件删除(文件名2);整数搜索(信息 *a)文件 *fp1;周一;int isfound=0;/标志变量,初始值为0表示找到对应的月份,如果找到对应的月份,则设置为1字符文件名100;printf(请输入文

39、件名(.dat文件):);scanf(%s,文件名);printf(请输入正确的月份:);scanf(%d,&mon);刷新(标准输入); /清空缓冲区fp1=fopen(文件名,rb+);如果(fp1=NULL)printf(找不到文件n);退出(0);rewind(fp1);/将fp1指向文件头,比较严谨fread(a,sizeof(Infor),1,fp1);while(!feof(fp1)/查询操作如果(a-月=星期一)发现=1;休息;别的发现=0;fread(a,sizeof(Infor),1,fp1);fclose(fp1);如果(发现)返回确定;别的printf(未找到对应月份n

40、);返回 1;void paixu(Infor *a)诠释 i=0,j=0;国际温度;pType px8=0,0;char str810=记录月份,食品消费,房租,儿童费用,水电费,医疗费,储蓄费,月收入 ;/一个二维字符数组for(;i月;px1.data=a-shipin;px2.data=a-方形族;px3.data=a-zinv;px4.data=a-水电;px5.data=a-yiliao;px6.data=a-chuxu;px7.data=a-shouru;对于 (i=0;i8;i+)for(j=0;j=pxj+1.data)温度=pxj.no;pxj.no=pxj+1.no;px

41、j+1.no=温度;温度=pxj.data;pxj.data=pxj+1.data;pxj+1.data=temp;其他继续;对于 (i=0;i8;i+)printf(%s|,strpxi.no);printf(n);对于 (i=0;i8;i+)printf(%d,pxi.data);void modify(Infor *a,int mon)/修改数据文件 *fp1,*fp2;解释我;解读金钱;字符文件名100;信息*b;b=(Infor *)malloc(sizeof(Infor);printf(要插入修改数据的文件(注意文件名必须和之前的文件名一致!);scanf(%s,文件名);fp1=

42、fopen(文件名,rb+);fp2=fopen(temp.dat,wb+);/temp.dat作为临时文件printf(你要修改哪些数据?(1个食物,2个房租,3个孩子开销,4个水电费,5个医疗费,6个储蓄,7个收入):);scanf(%d,&i);而(i7)printf(请重新输入:);scanf(%d,&i);printf(请输入修改后的数据:);scanf(%d,&money);开关 (1)情况1:a-shipin=钱;休息;案例二:a-fangzu=钱;休息;案例3:a-zinv=钱;休息;案例4:a-水电=钱;休息;案例5:a-yiliao=钱;休息;案例6:a-chuxu=钱;休

43、息;案例7:a-shouru=钱;休息;默认:休息;printf(修改:n);printf(n记录每个月的伙食费、房租、小孩费、水电费、医疗费和储蓄费的收入n);printf( n);printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zinv,a-水店,a- yiliao,a-chuxu,a-shouru);倒带(fp1);fread(b,sizeof(Infor),1,fp1);while (!feof(fp1)/重写数据如果(b-月=星期一)fwrite(a,sizeof(Infor),1,fp2);/修改数据别的fwrite(b,sizeof(Infor),1,fp2);fread(b,sizeof(Infor),1,fp1);fclose(fp1);fclose(fp2);删除(文件名); /删除源文件rename(temp.dat,filename);/重命名中间文件printf(修改数据成功!n );void delRecord(int mon) / 删除数据文件 *fp1,*fp2;字符文件名100;信息 *b;b=(Infor *)malloc(sizeof(Infor);printf(删除数据的文件名:n);scanf(%s,文件名);fp1=fopen(文件名,“rb”

温馨提示

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

最新文档

评论

0/150

提交评论