ImageVerifierCode 换一换
格式:DOCX , 页数:51 ,大小:294.18KB ,
资源ID:29558428      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29558428.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(个人帐簿管理系统课程设计论文.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

个人帐簿管理系统课程设计论文.docx

1、个人帐簿管理系统课程设计论文课 程 设 计教 学 院计算机学院课程名称数据结构课程设计题 目个人帐簿管理系统专 业网络工程班 级姓 名同组人员指导教师一 概述1. 课程设计的目的(1)理解和掌握该课程中的有关基本概念,程序设计思想和方法。(2)培养综合运用所学知识独立完成课题的能力。(3)培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。(4)掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。2. 课程设计的要求个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品

2、消费,房租,子女教育费用,水电费,医疗费,储蓄等。该系统采用了Windows XP操作系统结合Visual C+ 6.0,TC 2.0等软件开发,可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。该课程设计中会频繁的使用到C语言里的文件操作的知识点,而文件操作又是我们平常的学习当中使用的比较少的地方,所以在课程设计之前我们组的成员专门花了一节课的时间重新阅读了C程序设计教程以及C primer plus里的文件操作的相关知识。二 总体方案设计1.系统整体设计思路本课程序中主要通过C语言的文件操作实现文件的读写操作来存放管理数据,里面主要包含功

3、能函数有接收键盘输入数据、将数据写入指定文件、将.dat文件文件转换.txt文件显示出来、找到对应月份、对一个月内各项支出进行排序、修改其中一项数据以及删除整月数据。整个系统的界面以及对各功能函数的调用都放在了主函数之中。整个程序中一个指针变量a贯穿始终,可以使各个函数共享指针变量a所指向的内存区域的数据。整个程序涉及到的功能较多,代码普遍较长,根据课程设计教学大纲里的要求以及我们对程序的整体设计我们将整个程序分为了6个功能,7个功能函数以及主函数来调度各个函数以来实现功能。2.算法的整体思路 数据类型设定为:typedef struct int month; int shipin; int

4、fangzu; int zinv; int shuidian; int yiliao; int chuxu; int shouru; Infor;为了方便使用,所以每一个变量基本上都使用了拼音。另外为了方便查询与排序,又另外定义了typedef struct int no; int data; pType;方便排序时候使用。整个程序流程图如下: 整个程序在主函数中由switch调用各个功能函数来执行整个程序。3.主要特点本程序可以在控制台里录入数据后写入文件当中,即使退出了程序,只要不删除自己所写的文件都可以随时通过程序对文件里的任意数据进行增删改查,并且可以实现对多文件的管理,在修改数据的时

5、候我们可以对指定文件里的指定月份的指定数据项进行修改体现了修改的灵活性,在查询的时候我们可以在控制台中查询一个文件中里的一个月的数据也可以在控制台中查询指定文件里的直径月份的数据,还可以对指定文件里的指定月份的数据整项删除。最后该程序还可以对每个月中的各项开支进行从小到大的排序。4.具备功能该程序可以接收键盘输入数据、将数据写入指定文件、将.dat文件文件转换为txt文件显示出来方便查看、找到对应月份、对一个月内各项支出进行排序、修改其中一项数据以及删除整月数据最后在主函数中对小组成员的各个函数进行整体的调试调用。详细情况见下表:void input(Infor *a)该函数接受一个从主函数传

6、过来的指针变量,将数据写入a所指向的内存区域void writeinfor(Infor *a)该函数将a所指向的内存区域的数据写入到指定的.dat文件中void changeFormat()该函数用于查询的时候将.dat文件里的数据写入到控制台中,并转化一个.txt文件显示出来,最后关闭这个文件。函数执行完毕并删除该.txt文件int search(Infor *a)接受主函数中传来的指针变量,寻找该指针指向的内存区域中a-month与你所需要查找的month值相等的位置,使a指针刚好指向这个月的数据,若找到了标志位为1返回正确,如果没找到的话就显示为找到对应月份。void paixu(Inf

7、or *a)对指定月份里的数据项里的数据从小到大进行排序。void modify(Infor *a,int mon)对指定文件的指定月份的指定的数据项的数据进行修改void delRecord(int mon) 对指定的文件的指定月份的数据整月进行删除我在本程序中承担的主要任务是查找对应月份,查询数据或修改该月份中的一项数。该三项功能主要解决的问题是如何在指定的文件中找到对应的数据项并对该数据项进行相应的操作。最后在主函数中通过switch对各个功能模块进行整体调用最终实现该系统。我所主要要解决的问题是如何使用正确的文件读写操作模式字符串来打开文件以及对指定的.dat文件读取后转换为.txt文

8、件并最终按照以定的格式显示在屏幕上。另外在查询函数中我们要在相应的文件中找到对应的月份,并将指针移动到这里指向该数据区域,这样的话我们就可以利用该指针变量方便的查询、修改数据,这也正是体现出指针变量使用的灵活性。其中文件操作中fopen函数模式字符串的功能如下:模式字符串意义“r”打开已过文件,可以读取文件“w”打开已文件,可以写入文件,先将文件的长度截为0,如果该文件不存在则创建之“a”打开一个文本文件,可以写入文件,向已有文件的尾部追加内容,如果该文件不存在则先创建之“r+”打开一个文本文件,可以进行更新,也可以读取和写入文件“w+”打开已隔文本文件,可以进行更新(写入),如果该文件存在则

9、首先将其长度截为0;如果不存在则先创建之“a+”打开一个文本文件,可以进行更新(读取和写入),向已有的文件的尾部追加内容,如果该文件不存在则先创建之;可以读取整个文件,但写入时只能追加内容“rb”,”wb+”,”ab”,”ab+”,”a+b”,”wb+”,”w+b”“ab+”,”a+b”与前面的模式相同,只是使用二进制模式而非文本模式打开文件三 详细设计1. changeFormat()该函数功首先在控制台上打印一排语句提示用户输入想要查找的文件名,若该文件不存在的话该程序就会终止。若该文件存在的话使用文件类型指针fp1指向该文件,以二进制文件读写方式打开该文件,接着我用相通的名字却用.txt

10、后缀创建了另一个文件,并用文件类型指针fp2指向它,并在该文件中打印一些展示文字使输出结果更加好看,同时将这些文字也打印在了控制台上,最后将fp1文件指向的内容用格式化输出fprintf全部写入fp2中,最后分别关闭fp1,fp2,并将刚刚的.txt文件显示出来,同时删除刚刚创建的.txt文件。void changeFormat() FILE *fp1,*fp2; Infor *a; char filename100; int i; a=(Infor *)malloc(sizeof(Infor); printf(请输入您要查询的数据所在的文件名(以.dat为后缀的文件名)); scanf(%s

11、,filename); fp1=fopen(filename,rb+);/以读写方式打开一个二进制文件 if(fp1=NULL) printf(无法找到文件n); exit(0); for(i=0;filenamei!=.;i+) filename2i=filenamei; if(filename2i!=.) strcat(filename2,.txt);/将filename的后缀改为.txt文件 fp2=fopen(filename2,wb+); if(fp2=NULL) printf(无法创建文件n); return ; /返回主函数 fputs( n个人帐簿管理系统rn,fp2); fp

12、uts(记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 rn,fp2); fputs(- rn,fp2); printf(n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n); printf(- n); rewind(fp1);/使fp1指向文件开头 fread(a,sizeof(Infor),1,fp1); while(!feof(fp1)/从原文件.dat中读数据写入显示文件.txt中 printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-shipin,a-fangzu,a-zi

13、nv,a-shuidian,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); system(filename2); /调用打开转换的文本文件 r

14、emove(filename2);2. search(infor *a)该函数功首先在控制台上打印一排语句提示用户输入想要查找的文件名,若该文件不存在的话该程序就会终止。若该文件存在的话使用文件类型指针fp1指向该文件,以二进制文件读写方式打开该文件,接着我用相通的名字却用.txt后缀创建了另一个文件,并用文件类型指针fp2指向它,并在该文件中打印一些展示文字使输出结果更加好看,同时将这些文字也打印在了控制台上,最后将fp1文件指向的内容用格式化输出fprintf全部写入fp2中,最后分别关闭fp1,fp2,并将刚刚的.txt文件显示出来,同时删除刚刚创建的.txt文件。int search(

15、Infor *a) FILE *fp1; int mon; int isfound=0;/标志变量,初始为0代表为找到对应的月份,若找到对应的月份这设置为1 char filename100; printf(请输入文件名字(.dat文件):); scanf(%s,filename); printf(请正确输入月份:); scanf(%d,&mon); fflush(stdin); /清除缓冲区 fp1=fopen(filename,rb+); if(fp1=NULL) printf(无法找到文件n); exit(0); rewind(fp1);/将fp1指向文件头,这样更加严谨 fread(a

16、,sizeof(Infor),1,fp1); while(!feof(fp1)/查询操作 if(a-month=mon) isfound=1; break; else isfound=0; fread(a,sizeof(Infor),1,fp1); fclose(fp1); if(isfound) return OK; else printf(未找到对应的月份n); return 1; 3. void modify(Infor *a,int mon)该函数主要功能在于修改指定文件下指定月份的指定数据项,首先用fp1指向指定的文件,同时用fp2打开一个temp.dat文件。月份是通过前面的sea

17、rch函数找到后,通过指针变量a”传递”过来的。首先选择修改哪一项数据,然后输入要修改的数据的内容将其写入a指向的内存区域里对应的数据项。此时我们用printf在控制台打印出修改后的月份的数据。然后用指针变量b来存储从fp1文件中读取的数据,当它不是对应的月份就直接写入fp2指向的temp.dat文件中,当它是对应的月份的时候就将a指向的内存区域的数据写入fp2指向的temp.dat文件中,该过程还是一个直到fp1指向文件结尾时才结束的函数。最后关闭fp1,fp2指向的文件,删除源文件,将temp.dat文件的名字命名为与先前文件相同的名字并在控制台上打印出修改成功的字样。void modif

18、y(Infor *a,int mon)/修改数据 FILE *fp1,*fp2; int i; int money; char filename100; Infor *b; b=(Infor *)malloc(sizeof(Infor); printf(修改后的数据所要插入的文件(注意与前面的文件名一定要是一致的!)); scanf(%s,filename); fp1=fopen(filename,rb+); fp2=fopen(temp.dat,wb+);/temp.dat作为临时文件 printf(你要修改哪一项数据?(1代表食品,2代表房租,3代表子女费用,4代表水电费用,5代表医疗费用

19、,6代表储蓄,7代表收入):); scanf(%d,&i); while(i7) printf(请重新输入:); scanf(%d,&i); printf(请将修改后的数据输入进来:); scanf(%d,&money); switch(i) case 1: a-shipin=money; break; case 2: a-fangzu=money; break; case 3: a-zinv=money; break; case 4: a-shuidian=money; break; case 5: a-yiliao=money; break; case 6: a-chuxu=money;

20、break; case 7: a-shouru=money; break; default: break; 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-shuidian,a-yiliao,a-chuxu,a-shouru); rewind(fp1); fread(b,sizeof(Infor),1,fp1); while (!fe

21、of(fp1)/重写数据 if(b-month=mon) fwrite(a,sizeof(Infor),1,fp2);/修改数据 else fwrite(b,sizeof(Infor),1,fp2); fread(b,sizeof(Infor),1,fp1); fclose(fp1); fclose(fp2); remove(filename); /删除源文件 rename(temp.dat,filename);/重命名中间文件 printf(修改数据成功!n );4主函数调试主函数部分通过switch语句来对实现整个程序功能的调度。首先case1里通过input函数将变量写入a所指向的内存区

22、域,然后调用writeinfor函数将指针变量a所指向区域的数据写入用户自己指定的文件中。case2是对用户指定的文件的数据进行整个文件查询,结果最终会打印在控制台中并且还会显示一个.txt文件这样更加方便更加直观。case3中调用了search函数,并且通过标志位变量flag来接收search函数所返回的值,若flag值不是OK的话就打印出没有符合条件的记录的语句,flag是OK的话就通过指针变量a将其所指向的内存区域的数据格式化的打印在屏幕上,然后调用modify函数对该该月份的数据指定的数据项进行修改。case4中前面部分的流程与case3还是一样的,同样是调用search函数找到指定文

23、件里的指定月份的数据并使a指向它,最后通过指针变量a打印在屏幕上。case5中还是通过search函数来找到指定的月份然后通过paixu函数来对指定月份的数据进行从小到大的排序,最后还是打印到控制台上。case6中同样是通过search函数找到指定的月份,并删除这个月份的所有数据。case7中通过函数中的exit()函数来退出整个程序。主函数的整个流程图如算法整体思路里的函数流程图所示,在这里就省略掉了。int main() while(TRUE) int flag;/标志位,用来保存查询函数所返回的结果 int item;/功能项目号 int mon; Infor *a;/信息指针 a=(I

24、nfor *)malloc(sizeof(Infor);/动态分配内存空间 do 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.修 改 数 据 *n); printf(t*t 4.查 询 数 据 *n); printf(t*t 5.排 序 数 据 *n); printf(t*t 6.删 除 数 据 *n); printf(t*t 0.退 出 系 统 *n

25、); printf(t*t *n); printf(t*nn); printf(请输入要进行的操作: ); scanf(%d,&item); while(item7 | itemmonth; if (flag!=OK) printf(n没有符合条件的记录!n); else 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-chu

26、xu,a-shouru); modify(a,mon); break; /查询数据 case 4: flag=search(a); if (flag!=OK) printf(n没有符合条件的记录!n); else 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); break; /排序数据 case 5: flag=search(a); if (flag!=OK) printf(n没有找到符合排序条件的记录!n); else paixu(a); break; /删除数据 case

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1