家庭支出管理系统—c语言程序设计精品文档26页.doc
如有侵权,请联系网站删除,仅供学习与交流家庭支出管理系统c语言程序设计【精品文档】第 26 页程序设计报告( 2015 / 2016 学年 第 二 学期)题 目:家庭支出管理系统专 业 微电子科学与工程 组长 学号姓名 组员 学号姓名 指 导 教 师 许棣华 指 导 单 位 日 期 2016年 6 月 3日 成员分工组长()组员()组员()评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语 教师签名: 年 月 日评分等级备注评分等级共五种:优秀、良好、中等、及格、不及格家庭支出管理系统一、 课题内容和要求1、 该系统要求对一个家庭某月的支出情况进行统计和分析。通过此课题,熟练掌握数组、指针的各种操作,以及一些算法思想的应用。2、 功能要求:(1) 支出信息包括:支出类型(主要可以分为饮食,服饰装扮,礼金,教育培训,电器,健身,通讯,子女培养,旅游,文化娱乐,医疗,交通,聚会,居住等小项),金额,消费地点,消费时间等。(2) 需要实现的功能:1) 用户根据口令进入系统2) 输入某一月份,完成该月份的支出管理3) 输入并统计该月的支出情况4) 显示该月支出信息表,内容应包括日期,金额等5) 按支出类型进行分类统计和排序6) 进行本月消费分析,即分析每项支出所占总支出的百分比,并显示分析结果7) 显示按支出类型排序后的支出信息8) 将排序后的内容存为文件。(3) 界面友好,输入信息符合逻辑如存款金额不为负数、不可能有非数字的字符等。二、 需求分析家庭支出管理系统的功能框架图如图1所示。家庭支出管理系统登陆界面主界面功能选择函数输入函数输出函数类别排序函数保存函数分析函数图1 功能框架图(1)功能选择函数:此函数是为了让用户根据主界面选择功能并根据提示来进行操作。(2)输入函数:为了实现将各个支出项目的类别,支出的金额以及消费的时间,地点等存入需要的文件里,所以必须先要存在存储器里。(3)输出函数:即通过行列表来直观对应存储文件中的项目的类别,金额,消费时间及地点。 (4)分析函数:读取本月的存储文档中的信息,对本月的消费进行分析,求出本月的消费总和,分析出每项支出所占总支出的百分比,通过他们各自的项目金额所占的百分比来直观显示那个指出比较重要。随后与本月收入进行比较,求出收支比。(5)类别排序函数:就是将输入的信息进行按类别排序。(6)保存函数:将本次添加的信息进行保存到相应月份的支出信息文档中。(7)登录界面:因为家庭支出管理系统涉及到私人财务,所以需要利用密码函数对程序进行保密。因此只有在输入正确的口令后才能进入该系统。同时添加了一个随机验证码的验证过程。(全文中的(1)、(2)、(3)等格式必须统一为中文括号或者英文括号。)(中文字体:宋体,英文字体:Times New Roman,小四号,不加粗,两端对齐,1.5倍行距,首行缩进2字符,段前段后距为0)三、概要设计 1 主要结构体(二级标题格式:宋体,小四号,不加粗,两端对齐,不缩进,下同)typedef struct/ 定义结构体char type20;/ 消费类型float Getsum;/ 消费金额char place20;/ 消费地点int time;/ 消费时间family;family fam80;2 主要函数流程图(1) 登录界面:包括密码函数,采用数组赋值并与预设值逐字比较的方法进行密码验证。以及验证码函数,验证码采用srand(time(NULL)与p0=rand()%1000产生一个0-1000的随机数作为验证码。如图1所示图1(2)主函数:包括菜单显示函数以及功能选择函数,菜单显示函数在屏幕上输出选择界面,功能选择函数利用选择结构进入不同的功能函数模块,模块如下列所示。在十二个月份存储文件齐全的情况下,各功能可随意使用,无使用上的顺序要求。如图二所示;图2 图3(3)功能模块一信息添加函数:利用输入函数将支出信息赋值给fam,然后利用类别整理函数进行类别整理,最后利用选择结构选择某一月份,打开该月份的信息存储文档,进行信息的写入,最后关闭文件。如图3,图4所示。 图4 图5(4)功能模块二信息显示函数:利用选择结构打开某一月份的信息存储文档,然后读取其中的信息并逐行显示在屏幕上然后关闭文件。如图5,图6所示。 图6(5)功能模块三信息分析函数:利用选择结构打开某一月份的存储文件,读取该月信息,求消费总和并求出各项支出占总支出比,随后可以输入本月的收入以求出本月的收支比。如图7所示。 图7(6)功能模块四退出函数:关闭程序。四、源程序代码 #include <stdio.h>#include <stdlib.h> #include <ctype.h> #include <string.h>#include <conio.h> #include <malloc.h> #include <windows.h>#include <time.h> typedef struct/定义结构体char type20;/消费类型float Getsum;/消费金额char place20;/消费地点int time;/消费时间family;family fam80;int menu_select() /显示该系统所具备的功能 int c;dosystem("cls");/清屏printf("tt欢迎来到家庭支出管理系统(勤俭节约,避免破产,严肃脸.jpg) n");printf("tt* * * * * *极端简朴的菜单系统* * * *n");printf("tt|1.输入消费信息|n");printf("tt|2.显示消费情况|n");printf("tt|3.消费情况分析|n");printf("tt|4.退出系统|n");printf("tt* * * * * * * * * * * *n");printf("tt* * * * * * * * * * * *n");printf("ttt请对应选择所需选项(1-4):");scanf("%d",&c);while(c<1|c>8);return c;void password() /密码登录部分char d6;char m6;m0='1',m1='2',m2='3',m3='4',m4='5',m5='6' /数组比较printf("请输入六位数密码:"); /输入密码for (int n=0;)printf("请输入密码:n");for(int i=0;i<6;i+)di=getch();if(di>='0'|di<='9'|di>='a'|di<='z'|di>='A'|di<='Z')putchar('*');if(d0=m0&&d1=m1&&d2=m2&&d3=m3&&d4=m4&&d5=m5)printf("nttt密码正确!请进行验证!n");break;if(d0!=m0|d1!=m1|d2!=m2|d3!=m3|d4!=m4|d5!=m5) /当密码错误时如下printf("n密码错误!请重新输入:");if (n>3)printf("系统即将关闭,88!n");system("pause"); exit (0);n+;void verification_code() /验证码部分int p1=0; int q1=0;for(int k=0;)srand(time(NULL);printf("验证码为:n");p0=rand()%1000; /产生0-1000的随机数printf("%d",p0);printf("请输入验证码:");scanf("%d",&q0);“if(q0!=p0)printf("验证码错误,请重新输入。");elseprintf("n欢迎使用!n");system("pause"); break;if(k>3)printf("系统即将关闭,88!n");system("pause"); exit (0);k+;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("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.time<1|sumn+i.time>31) return false; gets(x); printf("ttt需要再次输入吗?(y/n)"); scanf("ttt%c",&sign); i+; return(n+i); void Showitems(family sum,int n)/输出某月份的消费信息 int i=0,month;FILE *fp;printf("请选择月份;");scanf("%d",&month);printf("ttt-n"); printf("ttt种类 支出 地点 时间n"); printf("ttt-n"); switch(month)case 1:fp=fopen("D:一月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 2:fp=fopen("D:二月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 3:fp=fopen("D:三月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 4:fp=fopen("D:四月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 5:fp=fopen("D:五月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 6:fp=fopen("D:六月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 7:fp=fopen("D:七月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 8:fp=fopen("D:八月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 9:fp=fopen("D:九月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 10:fp=fopen("D:十月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 11:fp=fopen("D:十一月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;case 12:fp=fopen("D:十二月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);break;printf("ttt"); system("pause"); void paixu(family sum,int n) /类别显示函数int i,j;family temp; for(i=0;i<n-1;i+)for(j=i+1;j<n;j+) if(strcmp(sumi.type,sumj.type)=1) temp=sumj; sumj=sumi;sumi=temp; else if(strcmp(sumj.type,sumi.type)=0) if(sumi.Getsum>sumj.Getsum) temp=sumj; sumj=sumi; sumi=temp;for(i=1;i<n+1;i+)if(sumi-1.Getsum!=0)printf("ttt%-8s %-12f %-8s %-10dn",sumi-1.type,sumi-1.Getsum,sumi-1.place,sumi-1.time); if(i>1&&i%10=0)printf("ttt-n");printf("ttt");system("pause");printf("ttt-n");printf("ttt");system("pause");void Analyseitems(family sum,int n) /求各种消费类型的金额占总金额的百分比并求收支比例 float total=0,a=0,income; int i=0,j=0,month;FILE *fp;printf("请选择月份;");scanf("%d",&month);switch(month)case 1:fp=fopen("D:一月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); total+=sumi.Getsum;fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);fp=fopen("D:一月支出信息.txt","r");while(!feof(fp)fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);i=i+1;n=i;for(i=0;i<n-1;i+)printf("ttt项目%-8s占总比%-10f%n",sumi.type,sumi.Getsum/total);printf("消费总额为%f",total);fclose(fp);printf("请输入本月收入:");scanf("ttt%f",&income);printf("ttt本月收支比为%-10fn",total/income);break;case 2:fp=fopen("D:二月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); total+=sumi.Getsum;fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);fp=fopen("D:二月支出信息.txt","r");while(!feof(fp)fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);i+;n=i;for(i=0;i<n-1;i+)printf("ttt%-8s%-10f%n",sumi.type,sumi.Getsum/total);printf("消费总额为%f",total);fclose(fp);printf("请输入本月收入:");scanf("ttt%f",&income);printf("ttt本月收支比为%-10fn",total/income);break;case 3:fp=fopen("D:三月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); total+=sumi.Getsum;fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);fp=fopen("D:三月支出信息.txt","r");while(!feof(fp)fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);i+;n=i;for(i=0;i<n-1;i+)printf("ttt%-8s%-10f%n",sumi.type,sumi.Getsum/total);printf("消费总额为%f",total);fclose(fp);printf("请输入本月收入:");scanf("ttt%f",&income);printf("ttt本月收支比为%-10fn",total/income);break;case 4:fp=fopen("D:四月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); total+=sumi.Getsum;fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);fp=fopen("D:四月支出信息.txt","r");while(!feof(fp)fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);i+;n=i;for(i=0;i<n-1;i+)printf("ttt%-8s%-10f%n",sumi.type,sumi.Getsum/total);printf("消费总额为%f",total);fclose(fp);printf("请输入本月收入:");scanf("ttt%f",&income);printf("ttt本月收支比为%-10fn",total/income);break;case 5:fp=fopen("D:五月支出信息.txt","r");if(fp=0)printf("file errorn");exit(1);fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);while(!feof(fp)printf("%-8s %-12f %-8s %-10dn",sumi.type,sumi.Getsum,sumi.place,sumi.time); total+=sumi.Getsum;fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);fclose(fp);fp=fopen("D:五月支出信息.txt","r");while(!feof(fp)fscanf(fp,"%s%f%s%d",sumi.type,&sumi.Getsum,sumi.place,&sumi.time);i+;n=i;for(i=0;i<n-1;i+)printf("ttt%-8s%-10f%n",sumi.type,sumi.Getsum/total);printf("消费总额为%f",total);fclose(fp);printf("请输入本月收入:");scanf("ttt%f",&income);printf("ttt本月收支比为%-10fn",total/income);break;case