家庭支出管理系统的程序设计_第1页
家庭支出管理系统的程序设计_第2页
家庭支出管理系统的程序设计_第3页
家庭支出管理系统的程序设计_第4页
家庭支出管理系统的程序设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、家庭支出管理系统一、课程内容和要求内容:该系统要求对一个家庭某月的支出情况进行统计和分析。通过此课题,熟练掌握数组、指针的各种操作,以及一些算法思想的应用。要求:(1)支出信息包括:支出类型(主要可以分为饮食,服饰装扮,礼金,教育培训,电器,健身,通讯,子女培养,旅游,文化娱乐,医疗,交通,聚会,居住等小项),金额,消费地点,消费时间等。(2)需要实现的功能1) 用户根据口令进入系统2)输入某一月份,完成该月份的支出管理3)输入并统计该月的支出情况4)显示该月支出信息表,内容应包括日期,金额等5)按支出类型进行分类统计和排序6)进行本月消费分析,即分析每项支出所占总支出的百分比,并显示分析结果

2、7)显示按支出类型排序后的支出信息8)将排序后的内容存为文件。(3)界面友好,输入信息符合逻辑如存款金额不为负数、不可能有非数字的字符等。(4)数据结构和函数自行定义,要求清晰明确。二、需求分析 结构体定义:用结构体来定义所要的消费信息的种类(消费类型,消费金额,消费地点,消费时间)。 菜单函数int menu_select():显示该系统所拥有的功能,并利于用户选择自己所需要实现的功能。密码函数void password():验证用户所输入的密码是否正确,并且根据用户意愿修改密码,从而进入系统。输入密码时密码要用*表示。输入函数int inputitems(family sum,int n)

3、:输入用户所要的消费情况。求总金额函数void getsum(family sum, int n):实现简单的求和功能,计算出用户所输入的消费的总金额。输出函数void showitems(family sum,int n):输出用户所输入的信息。排序函数void paixu(family sum,int n):对用户所输入的消费情况进行归类,并对同种类型的金额进行从小到大排序。分析函数void analyseitems(family sum,int n):对用户所输入的消费情况中的同种类型进行叠加,计算各类型金额占总金额的百分比,通过它们各类型金额所占的百分比来直观显示哪种类型比较重要。保存

4、函数void save(family sum,int n):保存用户所要保存的消费信息进入文件。主函数void main():通过该函数调用上述各函数,从而实现该系统的管理功能。三、概要设计程序框架:主菜单月份菜单密码验证及修改退出系统输入总和输出排序分析保存退出开始先编写一菜单函数来显示该系统所能实现的功能,让用户了解并使用该系统所拥有的管理功能,并且编辑密码函数来实现根据用户指令进入管理系统;之后通过主函数来调用菜单函数menu_select,密码函数password,求总金额函数getsum,输入函数inputitems,输出函数showitems,排序函数paixu,分析函数analy

5、seitems,保存函数save,从而来实现该系统的管理功能。而添加数据的功能是采用调用输入函数inputitems来实现的。定义结构体:定义消费的类型,声明各结构成员的变量含义typedef struct /定义结构体char type20;/消费类型float getsum;/消费金额char place20;/消费地点int time;/消费时间family;菜单函数:通过getchar语句来读入所要实现的功能序号,从而进入相应的函数模块。密码函数:通过文件指针应用,用scanf语句来读取用户所输入的密码,并与文件中所保存的密码相比较,看是否能够进入管理系统,并通过指针的应用来修改密码。

6、输入函数:通过scanf语句逐项输入消费的信息(类型,金额,地点,时间),输入完毕后,跳回管理菜单重新选择。求总函数:通过for循环来实现消费金额getsum的叠加,从而求出所输入的消费情况的总金额getsum。输出函数:应用for循环来逐项输出消费情况。排序函数:用for双循环来对消费情况进行归类以及对同种类型的金额运用选择排序法从小到大排序,并对文件指针*fp的应用来使排序之后的消费信息存入文件。分析函数:通过对排序函数的调用,来使消费信息进行归类,通过for双循环来计算出各类型的金额sum1,并求出各类型的花费占总金额的百分比a。保存函数:应用文件指针*fp来将消费信息存入文件。主函数:

7、通过switch语句和case语句来调用各函数,从而实现各函数的功能。四、源程序代码#include #include #include #include #include #include #include typedef struct /定义结构体char type20;/消费类型float getsum;/消费金额char place20;/消费地点int time;/消费时间family;family fam80;int menu_select()/显示该系统所具备的功能char c;dosystem(cls);/清屏printf(tt*n);printf(tt*菜单系统*n);pri

8、ntf(tt|1.输入消费信息|n);printf(tt|2.计算消费总和|n);printf(tt|3.显示消费情况|n);printf(tt|4.对同种类型消费进行排序并显示|n);printf(tt|5.消费情况分析|n);printf(tt|6.添加消费信息|n);printf(tt|7.保存数据|n);printf(tt|0.退出系统|n);printf(tt*n);printf(tt*n);printf(ttt请对应选择所需选项(0-7):);c=getchar();while(c7);return(c-0);void password()/密码验证或密码修改int m;print

9、f(tt*n);printf(tt*n);printf(tt*tt1.密码修改 *n);printf(tt*tt2.登陆 *n);printf(tt*n);printf(tt*n);printf(ttt请输入您所要的选项(1,2):);scanf(%d,&m);getchar();switch(m)case 1:/密码修改int i,j;char a7,b7,c7,d7;file *fp1; file *fp2;fp1=fopen(d:密码.txt,r);if(!fp1)printf(file cannot be opened);exit(1);for(i=0;!feof(fp1);i+)ai

10、=fgetc(fp1);fclose(fp1);printf(ttt请输入原密码:);for(j=0;j=0&bj=a&bj=a&bj=z)putchar(*);if(a0=b0&a1=b1&a2=b2&a3=b3&a4=b4&a5=b5)doprintf(ttt请设置您的新密码: );for(j=0;j=0&cj=a&cj=a&cj=z)putchar(*);printf(ttt请确认您的新密码: );for(j=0;j=0&dj=a&dj=a&dj=z)putchar(*);while(!(c0=d0&c1=d1&c2=d2&c3=d3&c4=d4&c5=d5);fp2=fopen(d:密

11、码.txt,w+);if(!fp2)printf(the file cannot be opened!);exit(1);i=0;while (i6)fprintf(fp2,%c,ci);i+;fclose(fp2);printf(ttt密码修改成功!n);elseprintf(ttt密码错误n);exit(0); case 2:/密码验证char e7,f7;int n=0;int i,j;file *fp1;fp1=fopen(d:密码.txt,r); if(!fp1)printf(the file cannot be opened!);exit(1);for(i=0;!feof(fp1)

12、;i+) ei=fgetc(fp1); fclose(fp1);doprintf(ttt请输入六位数密码:);for(j=0;j=0&fj=a&fj=a&fj3)printf(errorn);exit(0);while(!(e0=f0&e1=f1&e2=f2&e3=f3&e4=f4&e5=f5);printf(nttt欢迎使用!n);int inputitems(family sum,int n)/输入消费信息int i=0;char sign=y,x10;while(sign!=n&sign!=n)printf(ttt种类:); scanf(ttt%s,sumn+i.type);printf

13、(ttt支出(大于0):);scanf(ttt%f,&sumn+i.getsum);printf(ttt地点:);scanf(ttt%s,sumn+i.place);printf(ttt时间(0-31):);scanf(ttt%d,&sumn+i.time);if(sumn+i.time31)return false;gets(x);printf(ttt需要再次输入吗?(y/n);scanf(ttt%c,&sign);i+;return(n+i);void getsum(family sum, int n) /计算消费总金额float getsum=0;int i=0;for(i=0;in;i

14、+)getsum+=sumi.getsum;printf(ttt%fn,getsum);void showitems(family sum,int n)/输出所输入的消费信息int i;printf(ttt-n);printf(ttt种类 支出 地点 时间n);printf(ttt-n);for(i=1;i1&i%10=0)printf(ttt-n);printf(ttt);system(pause);printf(ttt-n);printf(ttt);system(pause);void paixu(family sum,int n)/对消费信息进行归类和选择法排序int i,j;famil

15、y temp; file *fp;fp=fopen(d:支出信息.txt,a+); if(fp=null)printf(tttthe file cannot be opened!n);exit(1); for(i=0;in-1;i+)for(j=i+1;jsumj.getsum) temp=sumj; sumj=sumi; sumi=temp; fprintf(fp,排序后:n);for(i=0;in;i+)fprintf(fp,%-8s %-12f %-8s %-10dn,sumi.type,sumi.getsum,sumi.place,sumi.time);fclose(fp);print

16、f(ttt保存成功!n);void analyseitems(family sum,int n) /求各种消费类型的金额占总金额的百分比paixu(sum,n); float total=0,a=0,sum1;int i,j;for(i=0;in;i+)total+=sumi.getsum;for(i=0;in;i+) sum1=sumi.getsum;for(j=i+1;jn;j+)if(strcmp(sumi.type,sumj.type)=0)sum1+=sumj.getsum;i+;a=(sum1/total)*100;printf(ttt%-8s%-10f%n,sumi.type,a

17、); void save(family sum,int n)/保存消费信息 int i;file *fp;fp=fopen(d:支出信息.txt,a+);if(fp=null)printf(tttthe file cannot be opened!n);exit(1);fseek(fp,-1,seek_end);fputc(n,fp);for(i=0;in;i+)fprintf(fp,%-8s %-12f %-8s %-10dn,sumi.type,sumi.getsum,sumi.place,sumi.time);fclose(fp);printf(ttt保存成功!n);void main(

18、)/主函数password();getch();int n=0,m;char c;do printf(ttt请输入您所要管理的月份(1-12):);scanf(%d,&m);while(m12);for(;)switch(menu_select() /选择菜单序号case 1:printf(ttt请输入相应消费情况n);n=inputitems(fam,n);printf(ttt想保存数据请输入y/y!n);getchar();scanf(%c,&c);if(c=y|c=y)save(fam,n);printf(ttt);system(pause);break;case 2:printf(tt

19、t消费总和n);getsum(fam,n);printf(ttt);system(pause);break;case 3:printf(ttt消费情况n);showitems(fam,n);break;case 4:printf(ttt消费排序n);paixu(fam,n);showitems(fam,n);printf(ttt);system(pause);break;case 5:printf(ttt消费金额分析n);analyseitems(fam,n);printf(ttt想保存数据请输入y/y!n);getchar();scanf(%c,&c);if(c=y|c=y)save(fam

20、,n);printf(ttt);system(pause);break; case 6:printf(ttt添加消费情况n);n=inputitems(fam,n);getchar();scanf(%c,&c);if(c=y|c=y)save(fam,n);break;case 7:printf(ttt保存消费数据n);save(fam,n);printf(ttt);system(pause);case 0:printf(ttt谢谢使用!n);system(pause);exit(0);五、测试数据及其结果分析第一步,根据用户指令看是否先进入系统还是修改密码:1)若进行密码修改:选择1 * *

21、 * 1.密码修改 * * 2.登陆 * * * 请输入您所要的选项(1,2):1 请输入原密码:123456* 请设置您的新密码: 000000* 请确认您的新密码: 000000* 密码修改成功! 请输入六位数密码:000000* 欢迎使用!2) 若进行密码验证:选择2 * * * 1.密码修改 * * 2.登陆 * * * 请输入您所要的选项(1,2):2 请输入六位数密码:000000* 欢迎使用!第二步,选择所要管理的月份请输入您所要管理的月份(1-12):3第三步,根据菜单系统选择所要运行的功能1)选择1,输入消费情况,如果不想继续输入就选择n,否则选择y * *菜单系统* |1.

22、输入消费信息| |2.计算消费总和| |3.显示消费情况| |4.对同种类型消费进行排序并显示| |5.消费情况分析| |6.添加消费信息| |7.保存数据| |0.退出系统| * * 请对应选择所需选项(0-7):1 请输入相应消费情况 种类:yi 支出(大于0):2 地点:nan 时间(0-31):9 需要再次输入吗?(y/n)y 种类:shi 支出(大于0):4 地点:re 时间(0-31):9 需要再次输入吗?(y/n)y 种类:yi 支出(大于0):1 地点:jing 时间(0-31):7 需要再次输入吗?(y/n)n 想保存数据请输入y/y!n 请按任意键继续. . .2)选择2,

23、计算消费的总金额 * *菜单系统* |1.输入消费信息| |2.计算消费总和| |3.显示消费情况| |4.对同种类型消费进行排序并显示| |5.消费情况分析| |6.添加消费信息| |7.保存数据| |0.退出系统| * * 请对应选择所需选项(0-7):2 消费总和 7.000000 请按任意键继续. . .3)选择3,显示消费的情况 * *菜单系统* |1.输入消费信息| |2.计算消费总和| |3.显示消费情况| |4.对同种类型消费进行排序并显示| |5.消费情况分析| |6.添加消费信息| |7.保存数据| |0.退出系统| * * 请对应选择所需选项(0-7):3 消费情况 -

24、种类 支出 地点 时间 - yi 2.000000 nan 9 shi 4.000000 re 9 yi 1.000000 jing 7 请按任意键继续. . .4)选择4,对同种类型消费进行排序并显示和保存 * *菜单系统* |1.输入消费信息| |2.计算消费总和| |3.显示消费情况| |4.对同种类型消费进行排序并显示| |5.消费情况分析| |6.添加消费信息| |7.保存数据| |0.退出系统| * * 请对应选择所需选项(0-7):4 消费排序 保存成功! - 种类 支出 地点 时间 - shi 4.000000 re 9 yi 1.000000 jing 7 yi 2.0000

25、00 nan 9 请按任意键继续. . .5)选择5,对消费情况进行分析,计算同种类型占总金额的百分比。想保存分析结果就输入y或y * *菜单系统* |1.输入消费信息| |2.计算消费总和| |3.显示消费情况| |4.对同种类型消费进行排序并显示| |5.消费情况分析| |6.添加消费信息| |7.保存数据| |0.退出系统| * * 请对应选择所需选项(0-7):5 消费金额分析 shi 57.142857 % yi 42.857143 % 想保存数据请输入y/y!n 请按任意键继续. . .6)选择6,添加数据 * *菜单系统* |1.输入消费信息| |2.计算消费总和| |3.显示消

26、费情况| |4.对同种类型消费进行排序并显示| |5.消费情况分析| |6.添加消费信息| |7.保存数据| |0.退出系统| * * 请对应选择所需选项(0-7):6 添加消费情况 种类:shi 支出(大于0):1 地点:sgu 时间(0-31):6 需要再次输入吗?(y/n)n7)选择7,保存数据 * *菜单系统* |1.输入消费信息| |2.计算消费总和| |3.显示消费情况| |4.对同种类型消费进行排序并显示| |5.消费情况分析| |6.添加消费信息| |7.保存数据| |0.退出系统| * * 请对应选择所需选项(0-7):7 保存消费数据 保存成功! 请按任意键继续. . .分析:1)当用户进入系统前,若密码输入错误可重新输入,但超过三次就会推出系统。2)当输入各个量的信息时,如果客户输入的信息格式不正确,系统会重新让客户输入并且此次的输入数据不进行数据管理。3)当保存文件的时候,如文件事先未建立,系统将自行建立。并在读取文件的时候,必须要有文件,否则会系统出错!六、调试过程中的问题1)在设计用户根据口令进入系统时,要输入密码进入系统,因此需要编写密码函数,并且密码需要用*表示,还需要修改密码,开始时对这些并不知道怎么做,通过上网查阅资料,才了解可以用putcahr()函数来实现用*表示代替密码的功能,

温馨提示

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

最新文档

评论

0/150

提交评论