个人收支管理系统_第1页
个人收支管理系统_第2页
个人收支管理系统_第3页
个人收支管理系统_第4页
个人收支管理系统_第5页
已阅读5页,还剩25页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

计算机科学与信息工程学院课程设计报告2023-2023第二学期课程设计名称C语言课程设计设计题目个人收支管理系统学生姓名学号专业班级指导教师2023年7月4日

个人收支管理一、设计目的一些比较发达国家人的生活中对理财有着很严格的计划,因此国外的理财系统总体来说比较普遍,做的也比较完善.国内的理财系统重要偏重于办公财务软件,而个人理财和家庭理财方面的比较少,因此需要开发相关的系统软件,从而达成引导理性消费,合理安排收支。进行账目的记录,假如是手动记录的话,一方面,假如天天记录的话,用于记录的账本和记录会越来越多,不利于保管,容易导致丢失;另一方面,随着纪录的增多,假如要查找以前的记录,会变的越来越困难。因此,需要一个功能比较完善的记账系统来代替传统的手工记录。个人收支管理系统可以方便地记录您家庭的每日收支情况。二、功能描述如图1所示,本系统重要有8个板块构成:1.个人收支管理系统显示界面。个人收支管理系统必须在系统运营后第一时间显示出来。此界面显示了一个收入模式、一个支出模式、一个明细表、一个查询与记录、一个记录数据写入文献、一个读取文献的功能。2.收入模式。用户可以在收入模式中输入以下数据:顺序号、日期、摘要、金额、余额、币种,收入或支出标志。默认币种为人民币,也可以是美圆、欧元、日币或英镑。3.支出模式。用户可以在支出模式中输入以下数据:顺序号、日期、摘要、金额、余额、币种,收入或支出标志。默认币种为人民币,也可以是美圆、欧元、日币或英镑。4.明细表。用户可以根据需要输入起止时间来查询一段时间内的收入支出情况,系统会通过列表的形式把内容展示出来。5.查询与记录。在此功能模式下,用户可以对一段时间的收入支出情况进行查询,可以得到总收入、总支出和余额。此数据是按月或按年份记录计算的。6.此板块属于拓展功能1---写入文献,记录数据。在此模块下,用户可以根据需要爆当前输入的数据保存下来,以备后用。7.此板块属于拓展功能2—读取文献,读取数据。在此模块下,用户可以读取以前所记录的数据并进行查看。8.退出系统。

个人收支管理系统个人收支管理系统退出系统读取文献写入文献查询与记录明细表支出模式收入模式退出系统读取文献写入文献查询与记录明细表支出模式收入模式图1简易系统功能模块图图1简易系统功能模块图三、总体设计1.系统执行主程序本系统执行主程序如图2所示。一方面,调用main函数,是系统进入主显示面。然后由用户选择所需要的功能,并进入相应功能程序,按照用户需求进行相应操作后回到主显示界面,等待用户继续按键选择功能进行操作。2.系统显示界面此系统界面重要由可供选择的功能组成:收入、支出、明细表、查询与记录、写入文献、读取文献。用户在进行选择后可通过switch语句进行跳转进入相应分程序。主显示界面开始主显示界面开始退出系统摘要写入文献查询与记录币种金额日期明细表支出收入起始日期截止日期列表按年查询按月查询总收入退出系统摘要写入文献查询与记录币种金额日期明细表支出收入起始日期截止日期列表按年查询按月查询总收入总支出余额输入文献名保存文献读取文献输入文献名读取文献图2系统执行主流程图图2系统执行主流程图四、数据结构设计data结构体structdata{ intn;//顺序 inty,m,d; charzy[100];//摘要 floatmoney,rmoney;//金额,余额 charbiz[5];//币种 intx;//收支类型(标记,明细表或查询记录用) }p[100];本程序中重要数据都需要显示顺序、日期、摘要、金额、余额、币种和收支类型,所以需要定义data结构体。Intn:表达顺序。Inty,m,d:用来定义日期。Charzy:摘要。Floatmoney、rmoney:金额、余额。Charbiz[5]:币种。Intx:定义收支类型。五、函数功能描述1.check():函数原型:intcheck()check函数重要用于检查输入日期的合法性、日期的先后顺序是否对的,并查找符合日期规定的数据。2.fflush()函数原型:fflush(stdin)重要用于清除缓存,方便用户接下来的操作。3.gets()函数原型:gets()函数重要用于把用户输入的数据保存到指定数据中。4.strlen()函数原型:size_tstrlen(constchar*s)该函数是用来计算字符串的长度,用于用户接下来的操作。5.strcpy()函数原型:char*strcpy(char*s1,constchar*s2)该函数用于把字符串s2复制给字符串s1。6.file*()函数原型:file*fp1;通过文献指针便于对流的访问。7.Fopen()函数原型:fopen(FILE_NAME,”r或w”)该函数用于打开文献,进行读取或写入。8.Fclose()函数原型:fclose()该函数重要用来关闭用户打开的文献。9.Main()函数原型:voidmain()Main()为主函数。四、程序实现1.源码分析(1)程序预解决#include<stdio.h>//标准输入输出函数库#include<stdlib.h>//标准函数库#include<string.h>//字符串操作函数库intincome()//收入模式intexpend()//支出模式intlist()//明细表intdestat()//查询与记录voidwrite()//写入文献voidread()//读取文献(2)主函数main()Main()函数重要实现了对整个程序的调用,以及相关功能模块的调用。它重要的工作是初始化程序。voidmain(){intn;//拟定用户需要进入的功能模块do{ printf("++++++++++++++++++\n"); printf("个人收支管理\n");//用户可以进行的功能操作选项 printf("1.收入\n"); printf("2.支出\n"); printf("3.明细表\n"); printf("4.查询与记录\n"); printf("5.写入文献\n"); printf("6.读取文献\n"); printf("0.退出系统\n"); printf("++++++++++++++++++\n"); printf("请输入你要进行操作:"); scanf("%d",&n);//捕获用户要进行的操作 switch(n){ case1:income(p);system("cls");break;//进入收入模块,结束后返回case2:expend(p);system("cls");break;//进入指出模块,结束后返回case3:list(p);system("cls");break;//进入明细表,结束后返回case4:destat(p);system("cls");break;//进入查询与记录,结束后返回case5:write(p);system("cls");break;//进入写入文献,结束后返回case6:read(p);system("cls");break;//进入读取文献,结束后返回} }while(n!=0);//退出系统}2.程序运营结果显示初始化界面进入收入模式结束时按Enter返回主界面进入支出模式结束时按Enter返回主界面(4)明细表结束时按Enter返回主界面(5)查询与记录按年查询按月查询(6)写入文献(7)读取文献在这我们重要显示退出系统后读取文献操作显示:之后用户可以根据需要进行相应操作查看数据。(8)退出系统六、课程设计总结通过2个星期的努力,终于完毕了个人收支管理系统的设计。本来,在开始上课之前,我们都认为这是很简朴的东西,毕竟我们都学习了这么时间,并且也在课上进行了一次次的实战训练。可是,没想到,别看平时比较容易,在这一刻,要把课上学到的知识融会贯通,要想设计出自己心满意足的东西是多么的困难。但是,还好,总算完毕了,也感受到了成功的喜悦。努力奋斗,并不是没有回报的!!!当然,在这2个星期的过程中,我们也发现了许多问题并克服了它们。这些问题或许是上课时没注意到的细节问题,或是自己之前一直没能搞懂的知识点,但不管如何,它都让我们学会了好多新的东西,有了新的感悟。在此,感谢老师们的辛勤工作,无私奉献,感谢老师们的指导。七、源代码#include<stdio.h>#include<stdlib.h>#include<string.h> structdata{ intn; inty,m,d; charzy[100];//摘要 floatmoney,rmoney;//金额,余额 charbiz[5];//币种 intx;//收支类型(标记,明细表或查询记录用) }p[100];intk=1;intcheck1(inty,intm,intd)//检测日期合法性{ inta[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if(y>0){ if(m>0&&m<13){ if(d>0&&d<=a[m-1]) return1; if((((y%4==0)&&(y%100!=0))||(y%400==0))&&(m==2)&&(d==29)) return1; } } return0;}intcheck2(inty1,intm1,intd1,inty2,intm2,intd2)//检测日期的先后顺序是否对的{ if(y2>y1)return1; if(y2==y1&&m2>m1) return1; if(y2==y1&&m2==m1&&d2>d1)return1;if(y2==y1&&m2==m1&&d2==d1)return1; else return0;}intcheck3(inty1,intm1,intd1,inty2,intm2,intd2)//查找符合规定的日期{ inti,k=0; for(i=0;i<100;i++) { if((check2(y1,m1,d1,p[i].y,p[i].m,p[i].d)) &&(check2(p[i].y,p[i].m,p[i].d,y2,m2,d2))) k=k+1; } if(k=1) return1; else return0;} intincome(structdatap[]){ inti;charq[100]; for(i=k-1;;i++){ do{ printf("请输入日期(例:2023-7-1):"); scanf("%d-%d-%d",&p[i].y,&p[i].m,&p[i].d); } while(!check1(p[i].y,p[i].m,p[i].d)); fflush(stdin); printf("请输入摘要(默认:无):"); gets(p[i].zy); if(strlen(p[i].zy)==0)strcpy(p[i].zy,"无"); fflush(stdin); printf("请输入金额:"); scanf("%f",&p[i].money); fflush(stdin);printf("请输入币种(默认RMB):");gets(p[i].biz);if(strlen(p[i].biz)==0)strcpy(p[i].biz,"RMB");p[i].x=1;p[i].rmoney=p[i-1].rmoney+p[i].money;p[i].n=k;k=k+1;;printf("请输入Enter继续:");fflush(stdin);gets(q);return0;}}intexpend(structdatap[])//支出{inti;charq[100];for(i=k-1;;i++){do{ printf("请输入日期(例:2023-7-1):"); scanf("%d-%d-%d",&p[i].y,&p[i].m,&p[i].d); }while(!check1(p[i].y,p[i].m,p[i].d)); fflush(stdin); printf("请输入摘要(默认:无):"); gets(p[i].zy); if(strlen(p[i].zy)==0)strcpy(p[i].zy,"无"); fflush(stdin); printf("请输入金额:"); scanf("%f",&p[i].money);fflush(stdin); printf("请输入币种(默认RMB):");gets(p[i].biz);if(strlen(p[i].biz)==0)strcpy(p[i].biz,"RMB");p[i].x=0;p[i].rmoney=p[i-1].rmoney+p[i].money;p[i].n=k;k=k+1;printf("请输入Enter继续:");fflush(stdin);gets(q);return0;}}intlist(structdatap[]){ charq[100]; inti,y1,m1,d1,y2,m2,d2; do{printf("输入时请注意日期的先后顺序!!!\n"); do{ printf("请输入起始时间(例2023-1-1):"); scanf("%d-%d-%d",&y1,&m1,&d1); } while(!check1(y1,m1,d1)); do{ printf("请输入截至时间(例2023-1-1):"); scanf("%d-%d-%d",&y2,&m2,&d2); } while(!check1(y2,m2,d2)); } while(!check2(y1,m1,d1,y2,m2,d2)); if(check3(y1,m1,d1,y2,m2,d2)==0) {printf("此时间段内没有收支记录!\n"); }else{printf("顺序号\t日期\t\t摘要\t金额\t余额\t币种\t标志\n");for(i=0;i<k;i++)printf("%d\t%d-%d-%d\t%s\t%g\t%g\t%s\t%d\n",p[i].n,p[i].y,p[i].m,p[i].d, p[i].zy,p[i].money,p[i].rmoney,p[i].biz,p[i].x); printf("注意:标志1为收入,标志0为支出!"); } printf("请按Enter继续!"); fflush(stdin); gets(q); return0;}intdestat(structdatap[])//查询与记录{ inty,m,z,i;charq[100]; floatsum1=0,sum2=0,rmoney; printf("请选择查询方式:\n"); printf("1.查询年份:\n"); printf("2.查询月份:\n"); scanf("%d",&z); if(z==1) { printf("请输入要查询的年份:"); scanf("%d",&y); for(i=0;i<100;i++) { if((y==p[i].y)&&(p[i].x==1)) sum1=sum1+p[i].rmoney; if((y==p[i].y)&&(p[i].x==0)) sum2=sum2+p[i].rmoney; } } if(z==2) { printf("请输入年份:"); scanf("%d",&y); do{ printf("请输入月份:"); scanf("%d",&m); } while(m<1||m>12); for(i=0;i<100;i++) { if((p[i].y==y)&&(p[i].x==1)&&(p[i].m==m)) sum1=sum1+p[i].rmoney; if((p[i].y==y)&&(p[i].x==0)&&(p[i].m==m)) sum2=sum2+p[i].rmoney; } } rmoney=sum1-sum2; printf("总收入:%g\n",sum1); printf("总支出:%g\n",sum2); printf("余额:%g\n",rmoney);printf("请按Enter继续:"); fflush(stdin); gets(q); return0;}voidwrite(structdatap[])//写入文献{ inti; FILE*fp; charq[20],t[100];if(k-1==0)printf("请先输入数据!!");else{printf("请输入文献名:");fflush(stdin);gets(q);if(strlen(q)==0){strcpy(q,"record.dat");printf("已保存为默认文献data.dat\n");}fp=fopen(q,"w");for(i=0;i<k;i++) { fwrite(&p[i],sizeof(structdata),1,fp); }printf("记录已存储!\n");}printf("\n请按Enter键继续:"); fflush(stdin); gets(t);}voidread(structdatap[])//读取文献{ FILE*fp; charq[20],t[100]; k=0;printf("输入文献名:");fflush(stdin); gets(q); if(strlen(q)==0){ strcpy(q,"record.dat"); printf("已打开默认文献data.dat\n");} if((fp=fopen(q,"rb"))==NULL) printf("文献不存在!\n"); else { fp=fope

温馨提示

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

评论

0/150

提交评论