




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用C语言编写个人财务管理程序青岛理工大学 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 三、函数调用关系图 四、各函数功能说明 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); else fwrite(&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; /*退出查询收支信息函数*/ else printf( 输入错误!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+; else s=(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); 六、程序运行效果图 七、总结 通过做个人财务管理程序这课程设计,我意识到逻辑分析能力理清问题的思路以及函数间的相互调用关系很重要。 在程序设计时采用模块化程序设将一个程序分解为若干个函数,函数间是通过调用来执行的。这样程序设计就变得清晰容易了。像在做个人财务管理程序时,我先列出该程序的主要功能即主模块:输入、查询、删除。在查询和删除主模块中又划分部分查询、全部查询、部分删除、全部删除子模块。各模块的功能通过调用来实现。这样个人财务管理程序就可以分为主函数调用输入函数、查询函数和删除函数。查询函数调用部分查询函数和全部查询函数。删除函数调用部分删除函数和全部删除函数。各函数间关系明确,程序清晰明了,结构层次分明。 通过这次课程设计我对结构体、链表、文件的运用更加熟练了。结构体是构成链表的单元,运用结构体、函数fread()和函数fwrite()可以对文件进行数据块的读去和读入。通过运用链表可以对文件中记录的信息进行选择性删除。 程序调试是一件很考验人耐心的事,在调试出现很多错误时我们往往会心烦想要放弃。所以我们在调试程序时要有足够的耐心经得住寂寞小心地排除错误。 通过这次课程设计我发现我对c语言的基础知识掌握的还不够全面。有些知识要找课本才能正确运用。我在算法方面了解也很少,这样使得程序变得有些繁琐。在做个人财务管理程序师对程序的功能考虑不够全面。所以我还有很多东西需要像老师学习,在很多方面的错误需要老师指正。 八、参考文献 1李春葆 曾平 喻丹丹。C语言程序设计教程(第2版),清华大学出版社,2011 2王为青 张圣亮。C语言实战105例,人民邮电出版社,2007 九、程序清单#include #include struct money data; /*存放一天的#include 收支信息*/ void input(); struct Mon *next; void Output(); List; /*自定义链表void Allput(); 节点类型*/ void Dateput(); /*void Delete(); *void Delpart(); */ void Delall(); void main() void Monput(); void Yearput(); struct money int i; printf(*_欢迎进入float shou; /*收入*/ 个人财务管理程序float zhi; /*支出*/ _*n); float yu; /*余额*/ printf( 1 输入收支信息n); char a50; /*收入来源*/ printf( 2 查询收支信息n); char b50; /*支出去向*/ printf( 3 删除收支信息n); int year; /*年*/ printf( 0 退出n); int mon; /*月*/ printf( 请选择要执行的功能:); int day; /*日*/ scanf(%d,&i); RMB; /*定义结 while(i!=0) 构体变量*/ typedef struct Mon if(i=1) 谢您的使input(); 用!_=n); /*调用输入收支信息函数*/ printf( 1 输入收支信息n); printf( 2 查询收支信息n); printf( 3 删除收支信息n); /*printf( 0 退出n); *printf( 请选择要执行的功能:); */ scanf(%d,&i); void input() /*输入收支信 息函数*/ else if(i=2) FILE *ap; Output(); printf(t输入收入:); /*输入收/*调用查询收支信息函数*/ 入*/ printf( 1 输入收支信息n); scanf(%g,&RMB.shou); printf( 2 查询收支信息n); printf(t收入来源:); /*输入收printf( 3 删除收支信息n); 入来源*/ printf( 0 退出n); scanf(%s,RMB.a); printf( 请选择要执行的功能:); printf(t输入支出:); scanf(%d,&i); scanf(%g,&RMB.zhi); /*输入 支出*/ printf(t支出去向:); else if(i=3) scanf(%s,RMB.b); /*输入支/*调用删除收支信息函数*/ 出去向*/ RMB.yu=RMB.shou-RMB.zhi; Delete(); printf(t输入年 月 日:); printf( 1 输入收支信息n); scanf(%d,&RMB.year); /*输入年printf( 2 查询收支信息n); 月日*/ printf( 3 删除收支信息n); scanf(%d,&RMB.mon); printf( 0 退出n); scanf(%d,&RMB.day); printf( 请选择要执行的功能:); if(ap=fopen(money.txt,ab)=NULL) scanf(%d,&i); /*打开文件*/ printf(不能建立文件money.txtn); else else /*用户输入错误时提示*/ fwrite(&RMB,sizeof(struct money),1,ap); /*将收支信息记录在money.txt文件*/ printf(n 只能输入1或2或3或 fclose(ap); 0!n); /*关闭文件*/ printf( 请重新选择要执行的功 printf(*能:); *n); scanf(%d,&i); /* *printf(=_ 谢*/ void Output() /*查询收支 信息函数*/ int i; /*while(1) * */ printf(n 1 按天查询部分收支信息n); void Allput() /*查询全部printf( 2 按月查询部分收支信息n); 收支信息函数*/ printf( 3 按年查询部分收支信息n); printf( 4 查询全部收支信息n); FILE *ap; printf( 0 退出查询n); float s=0,zs=0,zz=0; printf( 请选择查询方式:); /* if(ap=fopen(money.txt,r)=NULL) 输入选择*/ printf(不能读取money.txt文件n); scanf(%d,&i); while(1) if(i=1) if(fread(&RMB,sizeof(struct Dateput(); /*调用money),1,ap)0) /*在money.txt文件中读取信按日期查询收支信息函数*/ 息*/ else if(i=2) printf(t日Monput(); 期:%d %d %dn,RMB.year,RMB.mon,RMB.day); else if(i=3) /*输出年、月、日*/ Yearput(); printf(t收入:%gnt收入来else if(i=4) 源:%sn,RMB.shou,RMB.a); /*输出查询的 收入、收入来源*/ Allput(); /*调用 printf(t支出:%gnt支出去查询全部收支信息函数*/ 向:%sn,RMB.zhi,RMB.b); /*输出查询的 支出、支出去向*/ else if(i=0) printf(t余额:%gnn,RMB.yu); /*输出余额*/ zs+=RMB.shou; /*统printf(*计总收入*/ *n); zz+=RMB.zhi; /*统break; /*退出计总支出*/ 查询收支信息函数*/ s+=RMB.yu; /*统 计总余额*/ else else break; printf( 输入错误!n); printf(*printf(*n); *n); printf(t总收入:%gnt总支出:%gnt总余break; /*用户输入错误额:%gn,zs,zz,s); /*输出总收入、总支出、时退出*/ 总余额*/ printf(* fclose(ap); /*关闭文件*/ *n); if(n=0) printf(t无该日期的收支信息!n); fclose(ap); /*关闭 if(n=2) /*若该天收支次数大文件*/ 于1则输出该天的总收入、总支出、总余额*/ /* printf(nt该天有%d次收支信息n,n); * printf(t该天总收入:%gn,zs); */ printf(t该天总支出:%gn,zz); void Dateput() /*按日期查询 printf(t该天总余额:%gn,s); 收支信息函数*/ printf(*FILE *ap; *n); 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) void Delete() /*删除收支信息printf(不能读取money.txt文件n); 函数*/ while(1) int i; if(fread(&RMB,sizeof(struct while(1) money),1,ap)0) /*从文件读取信息*/ printf(n 1 按日期部分删除n); printf( 2 全部删除n); if(y=RMB.year&m=RMB.mon&d=RMB.day) printf( 0 退出删除n); /*查找用户查询的收支信息并将其输出*/ printf( 请选择删除方式:); scanf(%d,&i); /*收受用户输printf(t收入:%gnt收入来入的删除方式*/ 源:%sn,RMB.shou,RMB.a); if(i=1) /*按日期删除部分printf(t支出:%gnt支出去收支信息*/ 向:%sn,RMB.zhi,RMB.b); printf(t余 Delpart(); /*调用按日额:%gnn,RMB.yu); 期删除部分收支信息函数*/ zs+=RMB.shou; /*统计该天的总收入、总支出、总余额*/ else if(i=2) /*删除全部信zz+=RMB.zhi; 息*/ s+=RMB.yu; n+; /* Delall(); /*调用删除全统计该天的收支次数*/ 部收支信息函数*/ else if(i=0) /*退出删除*/ else break; printf(* s-data=RMB; *n); r-next=s; break; r=s; else /*用户输入的信息错误*/ r-next=NULL; /*为节点的printf( 输入错误!n); next置为NULL*/ fclose(ap); /*关闭文件*/ printf(* printf( 确定要删除%d年%d月%d日的收支*n); 信息吗?n 1 是n 2 否n,y,m,d); break; printf(请选择:); scanf(%d,&a); if(a=1) /* if(n) /*要删除的信息存在*/ */ void Delpart() /*按日期删除部分收支 ap=fopen(money.txt,wb); /*信息函数*/ 重新打开文件并删除原全部记录*/ pb=head-next; FILE *ap; while(pb!=NULL) List *head,*r,*s,*pb; int n=0,y,m,d,a=0; fwrite(&pb-data,sizeof(struct head=(List *)malloc(sizeof(List); money),1,ap); /*将链表数据域中的数据读/*创建头节点*/ 入文件得到删除后的新文件*/ head-next=NULL; pb=pb-next; r=head; if(ap=fopen(money.txt,r)=NULL) fclose(ap); /*删除成功,关闭文件printf(不能打开money.txt文件!n); */ printf( 输入要删除的年 月 日:); printf( n 成功删除%d年%d月%dscanf(%d%d%d,&y,&m,&d); 日的收支信息!n,y,m,d); while(fread(&RMB,sizeof(struct money),1,ap)0) /*在文件中读取信息查找要 printf(*删除的信息*/ *n); else /*要删除的信息部存在*/ if(y=RMB.year&m=RMB.mon&d=RM B.day) printf( n 无%d年%d月%d日的收支信n+; 息!n,y,m,d); else printf(*s=(List *)malloc(sizeof(List); *n); /*尾插入法创建链表并将不需要删除的信息存在数 据域*/ 源:%sn,RMB.shou,RMB.a); /* printf(t支出:%gnt支出去*向:%sn,RMB.zhi,RMB.b); */ printf(t余额:%gnn,RMB.yu); vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 度初中数学5月月考卷-相似小题-1431952016946944-874-A4
- 医疗设备组装防滑工艺考核试卷及答案
- 陶瓷釉料搅拌均化工艺考核试卷及答案
- 信号干扰源排查工艺考核试卷及答案
- 合成气生产工艺模拟工艺考核试卷及答案
- 铜材压延模具验证工艺考核试卷及答案
- 飞行器传感器集成工艺考核试卷及答案
- 园林技师考试题库及答案
- 沈阳人证考试题库及答案
- 合唱乡间的小路教学课件
- JG/T 232-2008卫浴型散热器
- 灭火员初级习题库
- T/CAQP 001-2017汽车零部件质量追溯体系规范
- 燃气入户可行性报告
- 技术赋能医疗创新-深入解析数字化口腔诊所建设指南
- 眼内炎护理疑难病例讨论
- 配送车辆消毒管理制度
- 理发店消防安全制度
- 脾脏解剖学与脾切除术指导
- 工厂改善方案
- 中医治疗眼病的技巧
评论
0/150
提交评论