用C语言编写个人财务管理程序.doc_第1页
用C语言编写个人财务管理程序.doc_第2页
用C语言编写个人财务管理程序.doc_第3页
用C语言编写个人财务管理程序.doc_第4页
用C语言编写个人财务管理程序.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

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

文档简介

青岛理工大学C语言程序设计题目 个人财务管理程序 一、内容 个人财务管理程序主要实现对每次财务收支的管理,具有输入收支信息、按天查询信息、按月查询信息、按年查询信息、查询全部信息、删除全部收支信息、按天删除部分收支信息、退出等功能。 本系统操作十分简单用户只需按提示选择所需要执行的功能或输入相应信息即可。在主功能区中有1、2、3、0四种选择。选主功能区中的 1 是输入收支信息。选择主功能区中的2 是进入查询收支信息功能区,在查询功能区有五个子功能选择1、2、3、4、0;选择1 是按天查询收支信息;选择2 是按月查询收支信息,选择3 是按年查询收支信息,选择4是查询全部收支信息,其中2、3、4查询方式还可以显示总收入、总支出和总余额;选择0 是退出查询功能区。选择主功能区中的3是进入删除收支信息功能区,在删除功能区中有1、2、0三种子功能选择,选择1 是按日期删除某天的收支信息,选择2 是删除所有的收支信息;选择0是退出删除功能区。选择主功能区的0是退出个人财务管理系统。二、上机环境操作系统:Windows XP开发工具:VC6.0 3、 函数调用关系图四、各函数功能说明1、 void main() 主函数2、 void input() 输入收支信息函数3、 void Output() 查询收支信息函数4、 void Dateput() 按天查询收支信息函数5、 void Monput() 按月查询收支信息函数6、 void Yearput() 按年查询收支信息函数7、 void Allput() 查询所有收支信息8、 void Delete() 删除收支信息函数9、 void Delpart() 按日期删除部分信息函数10、 void Delall() 删除所有信息函数五、算法描述或流程图算法描述:函数一:void input() /*输入收支信息函数*/ FILE *ap;printf(t输入收入:); /*输入收入*/scanf(%g,&RMB.shou); printf(t收入来源:); /*输入收入来源*/scanf(%s,RMB.a);printf(t输入支出:);scanf(%g,&RMB.zhi); /*输入支出*/printf(t支出去向:);scanf(%s,RMB.b); /*输入支出去向*/RMB.yu=RMB.shou-RMB.zhi;printf(t输入年 月 日:);scanf(%d,&RMB.year); /*输入年月日*/scanf(%d,&RMB.mon);scanf(%d,&RMB.day);if(ap=fopen(money.txt,ab)=NULL) /*打开文件*/printf(不能建立文件money.txtn);elsefwrite(&RMB,sizeof(struct money),1,ap); /*将收支信息记录在money.txt文件*/fclose(ap); /*关闭文件*/printf(*n);函数二:void Output() /*查询收支信息函数*/int i;while(1)printf(n 1 按天查询部分收支信息n);printf( 2 按月查询部分收支信息n);printf( 3 按年查询部分收支信息n);printf( 4 查询全部收支信息n);printf( 0 退出查询n);printf( 请选择查询方式:); /*输入选择*/scanf(%d,&i);if(i=1)Dateput(); /*调用按日期查询收支信息函数*/else if(i=2)Monput();else if(i=3)Yearput();else if(i=4)Allput(); /*调用查询全部收支信息函数*/else if(i=0) printf(*n);break; /*退出查询收支信息函数*/elseprintf( 输入错误!n);printf(*n);break; /*用户输入错误时退出*/函数三:void Dateput() /*按日期查询收支信息函数*/FILE *ap;int y,m,d,n=0;float zs=0,zz=0,s=0;printf(t输入要查询的年 月 日:); /*输入要查询的年、月、日*/scanf(%d%d%d,&y,&m,&d);if(ap=fopen(money.txt,r)=NULL)printf(不能读取money.txt文件n);while(1)if(fread(&RMB,sizeof(struct money),1,ap)0) /*从文件读取信息*/ if(y=RMB.year&m=RMB.mon&d=RMB.day) /*查找用户查询的收支信息并将其输出*/ printf(t收入:%gnt收入来源:%sn,RMB.shou,RMB.a);printf(t支出:%gnt支出去向:%sn,RMB.zhi,RMB.b);printf(t余额:%gnn,RMB.yu);zs+=RMB.shou; /*统计该天的总收入、总支出、总余额*/zz+=RMB.zhi;s+=RMB.yu;n+; /*统计该天的收支次数*/else break;fclose(ap); /*关闭文件*/if(n=0) printf(t无该日期的收支信息!n);if(n=2) /*若该天收支次数大于1则输出该天的总收入、总支出、总余额*/printf(nt该天有%d次收支信息n,n);printf(t该天总收入:%gn,zs);printf(t该天总支出:%gn,zz);printf(t该天总余额:%gn,s);printf(*n);函数四:void Monput() /*按月查询收支信息函数*/FILE *ap;int y,m;float zs=0,zz=0,s=0;printf(输入要查询的年月:);scanf(%d%d,&y,&m);if(ap=fopen(money.txt,r)=NULL)printf(不能打开money.txt文件!n);while(fread(&RMB,sizeof(struct money),1,ap)0)if(y=RMB.year&m=RMB.mon) /*在文件中查找符合条件的信息并输出*/printf(t%d年%d月%d日n,RMB.year,RMB.mon,RMB.day); printf(t收入:%gnt收入来源:%sn,RMB.shou,RMB.a);printf(t支出:%gnt支出去向:%sn,RMB.zhi,RMB.b);printf(t余额:%gnn,RMB.yu);zs+=RMB.shou; /*统计查询月份的总收入、总支出、总余额*/zz+=RMB.zhi; s+=RMB.yu;fclose(ap);printf(t%d年%d月总收入:%gn,y,m,zs); /*输出所查询月份的总收入、总支出、总余额*/printf(t%d年%d月总支出:%gn,y,m,zz);printf(t%d年%d月总余额:%gn,y,m,s);printf(*);函数五:void Yearput() /*按年查询收支信息函数*/FILE *ap;int y;float zs=0,zz=0,s=0;printf(输入要查询的年份:);scanf(%d,&y);if(ap=fopen(money.txt,r)=NULL)printf(不能打开money.txt文件!n);while(fread(&RMB,sizeof(struct money),1,ap)0)if(y=RMB.year) /*输出符合条件的信息*/printf(t%d年%d月%d日n,RMB.year,RMB.mon,RMB.day); printf(t收入:%gnt收入来源:%sn,RMB.shou,RMB.a);printf(t支出:%gnt支出去向:%sn,RMB.zhi,RMB.b);printf(t余额:%gnn,RMB.yu);zs+=RMB.shou; /*统计查询年份的总收入、总支出、总余额*/zz+=RMB.zhi;s+=RMB.yu;fclose(ap);printf(t%d年总收入:%gn,y,zs); /*输出年度总收入、总支出、总余额*/printf(t%d年总支出:%gn,y,zz);printf(t%d年总余额:%gn,y,s);printf(*n);函数六:void Allput() /*查询全部收支信息函数*/ FILE *ap;float s=0,zs=0,zz=0;if(ap=fopen(money.txt,r)=NULL)printf(不能读取money.txt文件n);while(1)if(fread(&RMB,sizeof(struct money),1,ap)0) /*在money.txt文件中读取信息*/ printf(t日期:%d %d %dn,RMB.year,RMB.mon,RMB.day); /*输出年、月、日*/ printf(t收入:%gnt收入来源:%sn,RMB.shou,RMB.a); /*输出查询的收入、收入来源*/printf(t支出:%gnt支出去向:%sn,RMB.zhi,RMB.b); /*输出查询的支出、支出去向*/printf(t余额:%gnn,RMB.yu); /*输出余额*/ zs+=RMB.shou; /*统计总收入*/ zz+=RMB.zhi; /*统计总支出*/ s+=RMB.yu; /*统计总余额*/else break;printf(*n);printf(t总收入:%gnt总支出:%gnt总余额:%gn,zs,zz,s); /*输出总收入、总支出、总余额*/printf(*n);fclose(ap); /*关闭文件*/函数七:void Delete() /*删除收支信息函数*/ int i; while(1) printf(n 1 按日期部分删除n); printf( 2 全部删除n);printf( 0 退出删除n); printf( 请选择删除方式:); scanf(%d,&i); /*收受用户输入的删除方式*/if(i=1) /*按日期删除部分收支信息*/ Delpart(); /*调用按日期删除部分收支信息函数*/else if(i=2) /*删除全部信息*/ Delall(); /*调用删除全部收支信息函数*/else if(i=0) /*退出删除*/printf(*n);break;else /*用户输入的信息错误*/printf( 输入错误!n);printf(*n);break;函数八:void Delpart() /*按日期删除部分收支信息函数*/FILE *ap;List *head,*r,*s,*pb;int n=0,y,m,d;head=(List *)malloc(sizeof(List); /*创建头节点*/head-next=NULL;r=head;if(ap=fopen(money.txt,r)=NULL)printf(不能打开money.txt文件!n); printf( 输入要删除的年 月 日:);scanf(%d%d%d,&y,&m,&d);while(fread(&RMB,sizeof(struct money),1,ap)0) /*在文件中读取信息查找要删除的信息*/if(y=RMB.year&m=RMB.mon&d=RMB.day) n+;elses=(List *)malloc(sizeof(List); /*尾插入法创建链表并将不需要删除的信息存在数据域*/s-data=RMB;r-next=s;r=s;r-next=NULL; /*为节点的next置为NULL*/fclose(ap); /*关闭文件*/if(n) /*要删除的信息存在*/ap=fopen(money.txt,wb); /*重新打开文件并删除原全部记录*/pb=head-next;while(pb!=NULL)fwrite(&pb-data,sizeof(struct money),1,ap); /*将链表数据域中的数据读入文件得到删除后的新文件*/pb=pb-next;fclose(ap); /*删除成功,关闭文件*/printf( n 成功删除%d年%d月%d日的收支信息!n,y,m,d);printf(*n);else /*要删除的信息部存在*/printf( n 无%d年%d月%d日的收支信息!n,y,m,d);printf(*n);函数九:void Delall() /*删除全部收支信息函数*/FILE *ap;ap=fopen(money.txt,wb);fclose(ap);printf( n 成功删除全部收支信息!n);printf(*n);函数函数十:void main()int i;printf(*_欢迎进入个人财务管理程序_*n);printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);while(i!=0)if(i=1)input(); /*调用输入收支信息函数*/printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);else if(i=2)Output(); /*调用查询收支信息函数*/printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);else if(i=3) /*调用删除收支信息函数*/Delete();printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);else /*用户输入错误时提示*/printf(n 只能输入1或2或3或0!n);printf( 请重新选择要执行的功能:);scanf(%d,&i);printf(=_ 谢谢您的使用!_=n); 6、 程序运行效果图七、总结通过做个人财务管理程序这课程设计,我意识到逻辑分析能力理清问题的思路以及函数间的相互调用关系很重要。在程序设计时采用模块化程序设将一个程序分解为若干个函数,函数间是通过调用来执行的。这样程序设计就变得清晰容易了。像在做个人财务管理程序时,我先列出该程序的主要功能即主模块:输入、查询、删除。在查询和删除主模块中又划分部分查询、全部查询、部分删除、全部删除子模块。各模块的功能通过调用来实现。这样个人财务管理程序就可以分为主函数调用输入函数、查询函数和删除函数。查询函数调用部分查询函数和全部查询函数。删除函数调用部分删除函数和全部删除函数。各函数间关系明确,程序清晰明了,结构层次分明。通过这次课程设计我对结构体、链表、文件的运用更加熟练了。结构体是构成链表的单元,运用结构体、函数fread()和函数fwrite()可以对文件进行数据块的读去和读入。通过运用链表可以对文件中记录的信息进行选择性删除。程序调试是一件很考验人耐心的事,在调试出现很多错误时我们往往会心烦想要放弃。所以我们在调试程序时要有足够的耐心经得住寂寞小心地排除错误。通过这次课程设计我发现我对c语言的基础知识掌握的还不够全面。有些知识要找课本才能正确运用。我在算法方面了解也很少,这样使得程序变得有些繁琐。在做个人财务管理程序师对程序的功能考虑不够全面。所以我还有很多东西需要像老师学习,在很多方面的错误需要老师指正。8、 参考文献1李春葆 曾平 喻丹丹。C语言程序设计教程(第2版),清华大学出版社,20112王为青 张圣亮。C语言实战105例,人民邮电出版社,2007九、程序清单#include #include #include void input();void Output();void Allput();void Dateput();void Delete();void Delpart();void Delall();void Monput();void Yearput(); struct moneyfloat shou; /*收入*/float zhi; /*支出*/float yu; /*余额*/char a50; /*收入来源*/char b50; /*支出去向*/int year; /*年*/int mon; /*月*/int day; /*日*/ RMB; /*定义结构体变量*/typedef struct Monstruct money data; /*存放一天的收支信息*/struct Mon *next; List; /*自定义链表节点类型*/*/void main()int i;printf(*_欢迎进入个人财务管理程序_*n);printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);while(i!=0)if(i=1)input(); /*调用输入收支信息函数*/printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);else if(i=2)Output(); /*调用查询收支信息函数*/printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);else if(i=3) /*调用删除收支信息函数*/Delete();printf( 1 输入收支信息n);printf( 2 查询收支信息n);printf( 3 删除收支信息n);printf( 0 退出n);printf( 请选择要执行的功能:);scanf(%d,&i);else /*用户输入错误时提示*/printf(n 只能输入1或2或3或0!n);printf( 请重新选择要执行的功能:);scanf(%d,&i);printf(=_ 谢谢您的使用!_=n);/*/void input() /*输入收支信息函数*/ FILE *ap;printf(t输入收入:); /*输入收入*/scanf(%g,&RMB.shou); printf(t收入来源:); /*输入收入来源*/scanf(%s,RMB.a);printf(t输入支出:);scanf(%g,&RMB.zhi); /*输入支出*/printf(t支出去向:);scanf(%s,RMB.b); /*输入支出去向*/RMB.yu=RMB.shou-RMB.zhi;printf(t输入年 月 日:);scanf(%d,&RMB.year); /*输入年月日*/scanf(%d,&RMB.mon);scanf(%d,&RMB.day);if(ap=fopen(money.txt,ab)=NULL) /*打开文件*/printf(不能建立文件money.txtn);elsefwrite(&RMB,sizeof(struct money),1,ap); /*将收支信息记录在money.txt文件*/fclose(ap); /*关闭文件*/printf(*n);/*/void Output() /*查询收支信息函数*/int i;while(1)printf(n 1 按天查询部分收支信息n);printf( 2 按月查询部分收支信息n);printf( 3 按年查询部分收支信息n);printf( 4 查询全部收支信息n);printf( 0 退出查询n);printf( 请选择查询方式:); /*输入选择*/scanf(%d,&i);if(i=1)Dateput(); /*调用按日期查询收支信息函数*/else if(i=2)Monput();else if(i=3)Yearput();else if(i=4)Allput(); /*调用查询全部收支信息函数*/else if(i=0) printf(*n);break; /*退出查询收支信息函数*/elseprintf( 输入错误!n);printf(*n);break; /*用户输入错误时退出*/*/void Allput() /*查询全部收支信息函数*/ FILE *ap;float s=0,zs=0,zz=0;if(ap=fopen(money.txt,r)=NULL)printf(不能读取money.txt文件n);while(1)if(fread(&RMB,sizeof(struct money),1,ap)0) /*在money.txt文件中读取信息*/ printf(t日期:%d %d %dn,RMB.year,RMB.mon,RMB.day); /*输出年、月、日*/ printf(t收入:%gnt收入来源:%sn,RMB.shou,RMB.a); /*输出查询的收入、收入来源*/printf(t支出:%gnt支出去向:%sn,RMB.zhi,RMB.b); /*输出查询的支出、支出去向*/printf(t余额:%gnn,RMB.yu); /*输出余额*/ zs+=RMB.shou; /*统计总收入*/ zz+=RMB.zhi; /*统计总支出*/ s+=RMB.yu; /*统计总余额*/else break;printf(*n);printf(t总收入:%gnt总支出:%gnt总余额:%gn,zs,zz,s); /*输出总收入、总支出、总余额*/printf(*n);fclose(ap); /*关闭文件*/*/void Dateput() /*按日期查询收支信息函数*/FILE *ap;int y,m,d,n=0;float zs=0,zz=0,s=0;printf(t输入要查询的年 月 日:); /*输入要查询的年、月、日*/scanf(%d%d%d,&y,&m,&d);if(ap=fopen(money.txt,r)=NULL)printf(不能读取money.txt文件n);while(1)if(fread(&RMB,sizeof(struct money),1,ap)0) /*从文件读取信息*/ if(y=RMB.year&m=RMB.mon&d=RMB.day) /*查找用户查询的收支信息并将其输出*/ printf(t收入:%gnt收入来源:%sn,RMB.shou,RMB.a);printf(t支出:%gnt支出去向:%sn,RMB.zhi,RMB.b);printf(t余额:%gnn,RMB.yu);zs+=RMB.shou; /*统计该天的总收入、总支出、总余额*/zz+=RMB.zhi;s+=RMB.yu;n+; /*统计该天的收支次数*/else break;fclose(ap); /*关闭文件*/if(n=0) printf(t无该日期的收支信息!n);if(n=2) /*若该天收支次数大于1则输出该天的总收入、总支出、总余额*/printf(nt该天有%d次收支信息n,n);printf(t该天总收入:%gn,zs);printf(t该天总支出:%gn,zz);printf(t该天总余额:%gn,s);printf(*n);/*/void Delete() /*删除收支信息函数*/ int i; while(1) printf(n 1 按日期部分删除n); printf( 2 全部删除n);printf( 0 退出删除n); printf( 请选择删除方式:); scanf(%d,&i); /*收受用户输入的删除方式*/if(i=1) /*按日期删除部分收支信息*/ Delpart(); /*调用按日期删除部分收支信息函数*/else if(i=2) /*删除全部信息*/ Delall(); /*调用删除全部收支信息函数*/else if(i=0) /*退出删除*/printf(*n);break;else /*用户输入的信息错误*/printf( 输入错误!n);printf(*n);break;/*/void Delpart() /*按日期删除部分收支信息函数*/FILE *ap;List *head,*r,*s,*pb

温馨提示

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

评论

0/150

提交评论