收藏 分销(赏)

个人收支管理系统.doc

上传人:可**** 文档编号:5143829 上传时间:2024-10-27 格式:DOC 页数:15 大小:53.54KB
下载 相关 举报
个人收支管理系统.doc_第1页
第1页 / 共15页
个人收支管理系统.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述
计算机科学与信息工程学院 课程设计报告 2011-2012第二学期 课程设计名称 C语言课程设计 设计题目 个人收支管理系统 学生姓名 学号 专业班级 指导教师 2012年7月4日 个人收支管理 一、设计目的 一些比较发达国家人的生活中对理财有着很严格的计划,因此国外的理财系统总体来说比较普遍,做的也比较完善。国内的理财系统主要偏重于办公财务软件,而个人理财和家庭理财方面的比较少,因此需要开发相关的系统软件,从而达到引导理性消费,合理安排收支。 进行账目的统计,如果是手动统计的话,首先,如果每天统计的话,用于统计的账本和记录会越来越多,不利于保管,容易造成丢失;其次,随着纪录的增多,如果要查找以前的记录,会变的越来越困难.因此,需要一个功能比较完善的记账系统来代替传统的手工统计. 个人收支管理系统可以方便地记录您家庭的每日收支情况。 二、功能描述 如图1所示,本系统主要有8个板块构成: 1。个人收支管理系统显示界面。个人收支管理系统必须在系统运行后第一时间显示出来。此界面显示了一个收入模式、一个支出模式、一个明细表、一个查询与统计、一个记录数据写入文件、一个读取文件的功能。 2。收入模式.用户可以在收入模式中输入以下数据:顺序号、日期、摘要、金额、余额、币种,收入或支出标志.默认币种为人民币,也可以是美圆、欧元、日币或英镑。 3.支出模式。用户可以在支出模式中输入以下数据:顺序号、日期、摘要、金额、余额、币种,收入或支出标志.默认币种为人民币,也可以是美圆、欧元、日币或英镑。 4。明细表.用户可以根据需要输入起止时间来查询一段时间内的收入支出情况,系统会通过列表的形式把内容展示出来. 5.查询与统计。在此功能模式下,用户可以对一段时间的收入支出情况进行查询,可以得到总收入、总支出和余额。此数据是按月或按年份统计计算的。 6。此板块属于拓展功能1—-—写入文件,记录数据。在此模块下,用户可以根据需要爆当前输入的数据保存下来,以备后用. 7。此板块属于拓展功能2—读取文件,读取数据。在此模块下,用户可以读取以前所记录的数据并进行查看。 8.退出系统。 个人收支管理系统 退出系统 读取文件 写入文件 查询与统计 明细表 支出模式 收入模式 图1 简易系统功能模块图 三、总体设计 1。系统执行主程序 本系统执行主程序如图2所示。首先,调用main函数,是系统进入主显示面。然后由用户选择所需要的功能,并进入相应功能程序,按照用户需求进行相应操作后回到主显示界面,等待用户继续按键选择功能进行操作。 2。系统显示界面 此系统界面主要由可供选择的功能组成:收入、支出、明细表、查询与统计、写入文件、读取文件。用户在进行选择后可通过switch语句进行跳转进入相应分程序。 主显示界面 开始 退出系统 摘要 写入文件 查询与统计 币种 金额 日期 明细表 支出 收入 起始日期 截止日期 列表 按年查询 按月查询 总收入 总支出 余额 输入文件名 保存文件 读取文件 输入文件名 读取文件 图2 系统执行主流程图 四、数据结构设计 data 结构体 struct data{ int n;//顺序 int y,m,d; char zy[100]; //摘要 float money,rmoney;//金额,余额 char biz[5]; //币种 int x; //收支类型(标记,明细表或查询统计用) }p[100]; 本程序中主要数据都需要显示顺序、日期、摘要、金额、余额、币种和收支类型,所以需要定义data 结构体. Int n:表示顺序。 Int y,m,d:用来定义日期. Char zy: 摘要。 Float money、rmoney:金额、余额. Char biz[5]:币种. Int x: 定义收支类型。 五、函数功能描述 1.check(): 函数原型:int check() check函数主要用于检查输入日期的合法性、日期的先后顺序是否正确,并查找符合日期要求的数据。 2.fflush() 函数原型:fflush(stdin) 主要用于清除缓存,方便用户接下来的操作。 3.gets() 函数原型:gets() 函数主要用于把用户输入的数据保存到指定数据中。 4。 strlen() 函数原型:size_t strlen(const char *s) 该函数是用来计算字符串的长度,用于用户接下来的操作。 5。 strcpy() 函数原型:char *strcpy(char *s1,const char *s2) 该函数用于把字符串s2复制给字符串s1。 6。file *() 函数原型:file *fp1; 通过文件指针便于对流的访问。 7.Fopen() 函数原型:fopen (FILE_NAME, "r或w”) 该函数用于打开文件,进行读取或写入。 8.Fclose () 函数原型:fclose() 该函数主要用来关闭用户打开的文件。 9.Main() 函数原型:void main() Main()为主函数. 四、程序实现 1.源码分析 (1)程序预处理 #include <stdio。h〉  //标准输入输出函数库 #include 〈stdlib。h> //标准函数库 #include 〈string。h〉 //字符串操作函数库 int income()  //收入模式 int expend()   //支出模式 int list()   //明细表 int destat ()  //查询与统计 void write()   //写入文件 void read ()   //读取文件 (2)主函数main() Main()函数主要实现了对整个程序的调用,以及相关功能模块的调用. 它主要的工作是初始化程序。 void main() { int n; //确定用户需要进入的功能模块 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){ case 1:income(p); system(”cls");break; //进入收入模块,结束后返回   case 2:expend(p); system(”cls");break; //进入指出模块,结束后返回   case 3:list(p); system(”cls");break; //进入明细表,结束后返回     case 4:destat(p); system("cls”);break; //进入查询与统计,结束后返回   case 5:write(p); system(”cls”);break; //进入写入文件,结束后返回   case 6:read(p); system("cls”);break; //进入读取文件,结束后返回 } }while(n!=0); //退出系统 } 2.程序运行结果显示 (1) 初始化界面 (2) 进入收入模式 结束时按Enter返回主界面 (3) 进入支出模式 结束时按Enter返回主界面 (4)明细表 结束时按Enter返回主界面 (5)查询与统计 按年查询 按月查询 (6)写入文件 (7)读取文件 在这我们主要显示退出系统后读取文件操作显示: 之后用户可以根据需要进行相应操作查看数据。 (8)退出系统 六、课程设计总结 经过2个星期的努力,终于完成了个人收支管理系统的设计.本来,在开始上课之前,我们都以为这是很简单的东西,毕竟我们都学习了这么时间,并且也在课上进行了一次次的实战训练。可是,没想到,别看平时比较容易,在这一刻,要把课上学到的知识融会贯通,要想设计出自己心满意足的东西是多么的困难。不过,还好,总算完成了,也感受到了成功的喜悦.努力奋斗,并不是没有回报的!!!当然,在这2个星期的过程中,我们也发现了许多问题并克服了它们。这些问题或许是上课时没注意到的细节问题,或是自己之前一直没能搞懂的知识点,但不论如何,它都让我们学会了好多新的东西,有了新的感悟。 在此,感谢老师们的辛勤工作,无私贡献,感谢老师们的指导。 七、源代码 #include <stdio.h> #include 〈stdlib。h> #include 〈string。h> struct data{ int n; int y,m,d; char zy[100]; //摘要 float money,rmoney;//金额,余额 char biz[5]; //币种 int x; //收支类型(标记,明细表或查询统计用) }p[100]; int k=1; int check1(int y, int m, int d)//检测日期合法性 { int a[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]) return 1; if((((y%4==0)&&(y%100!=0))||(y%400==0))&&(m==2)&&(d==29)) return 1; } } return 0; } int check2(int y1,int m1,int d1,int y2,int m2,int d2)//检测日期的先后顺序是否正确 { if(y2〉y1) return 1; if(y2==y1&&m2〉m1) return 1; if(y2==y1&&m2==m1&&d2〉d1) return 1; if(y2==y1&&m2==m1&&d2==d1) return 1; else return 0; } int check3(int y1,int m1,int d1,int y2,int m2,int d2) //查找符合要求的日期 { int i,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) return 1; else return 0; } int income(struct data p[]) { int i;char q[100]; for(i=k-1;;i++){ do{ printf(”请输入日期(例:2012—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); return 0; } } int expend(struct data p[])//支出 { int i;char q[100]; for (i=k-1;;i++){ do{ printf("请输入日期(例:2012-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); return 0; } } int list(struct data p[]) { char q[100]; int i,y1,m1,d1,y2,m2,d2; do{ printf(”输入时请注意日期的先后顺序!!!\n”); do{ printf(”请输入起始时间(例2000—1—1):”); scanf("%d-%d—%d”,&y1,&m1,&d1); } while(!check1(y1,m1,d1)); do{ printf("请输入截至时间(例2000—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); return 0; } int destat (struct data p[]) //查询与统计 { int y,m,z,i; char q[100]; float sum1=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); return 0; } void write(struct data p[])//写入文件 { int i; FILE *fp; char q[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(struct data),1,fp); } printf (”记录已存储!\n"); } printf (”\n请按Enter键继续:"); fflush(stdin); gets(t); } void read (struct data p[])//读取文件 { FILE *fp; char q[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=fopen(q,”r"); while(!feof(fp)) { fread(&p[k++],sizeof(struct data),1,fp); } fclose(fp); k=k-1; printf ("文件已读取!\n"); } printf ("\n请按Enter键继续:"); fflush(stdin); gets(t); } void main() { int n; 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){ case 1:income(p); system("cls”);break; case 2:expend(p); system("cls”);break; case 3:list(p); system("cls”);break; case 4:destat(p); system("cls”);break; case 5:write(p); system(”cls");break; case 6:read(p); system(”cls");break; } }while(n!=0); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服