个人收支管理系统.doc
《个人收支管理系统.doc》由会员分享,可在线阅读,更多相关《个人收支管理系统.doc(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); }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 收支 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文