资源描述
程序设计报告
( / 年 第 二 学期)
题 目:家庭支出管理系统
专 业 微电子科学与工程
组长 学号姓名
成员 学号姓名
指 导 教 师 许棣华
指 导 单 位
日 期 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 type[20];// 消费类型
float Getsum;// 消费金额
char place[20];// 消费地点
int time;// 消费时间
}family;
family fam[80];
2 重要函数流程图
(1) 登录界面:涉及密码函数,采用数组赋值并与预设值逐字比较办法进行密码验证。以及验证码函数,验证码采用srand(time(NULL))与p[0]=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 type[20];//消费类型
float Getsum;//消费金额
char place[20];//消费地点
int time;//消费时间
}family;
family fam[80];
int menu_select() //显示该系统所具备功能
{
int c;
do{
system("cls");//清屏
printf("\t\t欢迎来到家庭支出管理系统(勤俭节约,避免破产,严肃脸.jpg) \n");
printf("\t\t** ** ** ** ** **极端简朴菜单系统*** ** ** **\n");
printf("\t\t|1.输入消费信息|\n");
printf("\t\t|2.显示消费状况|\n");
printf("\t\t|3.消费状况分析|\n");
printf("\t\t|4.退出系统|\n");
printf("\t\t** ** ** ** ** ** ** ** ** ** ** ***\n");
printf("\t\t** ** ** ** ** ** ** ** ** ** ** ***\n");
printf("\t\t\t请相应选取所需选项(1-4):");
scanf("%d",&c);
}while(c<1||c>8);
return c;
}
void password() //密码登录某些
{
char d[6];
char m[6];
m[0]='1',m[1]='2',m[2]='3',m[3]='4',m[4]='5',m[5]='6'; //数组比较printf("请输入六位数密码:"); //输入密码
for (int n=0;;)
{
printf("请输入密码:\n");
for(int i=0;i<6;i++)
{
d[i]=getch();
if(d[i]>='0'||d[i]<='9'||d[i]>='a'||d[i]<='z'||d[i]>='A'||d[i]<='Z')
putchar('*');
}
if(d[0]==m[0]&&d[1]==m[1]&&d[2]==m[2]&&d[3]==m[3]&&d[4]==m[4]&&d[5]==m[5])
{
printf("\n\t\t\t密码对的!请进行验证!\n");break;
}
if(d[0]!=m[0]||d[1]!=m[1]||d[2]!=m[2]||d[3]!=m[3]||d[4]!=m[4]||d[5]!=m[5]) //当密码错误时如下
printf("\n密码错误!请重新输入:");
if (n>3)
{
printf("系统即将关闭,88!\n");
system("pause");
exit (0);
}
n++;
}
}
void verification_code() //验证码某些
{
int p[1]={0};
int q[1]={0};
for(int k=0;;)
{
srand(time(NULL));
printf("验证码为:\n");
p[0]=rand()%1000;//产生0-1000随机数
printf("%d",p[0]);
printf("请输入验证码:");
scanf("%d",&q[0]);“
if(q[0]!=p[0])
printf("验证码错误,请重新输入。");
else
{
printf("\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',x[10];
while(sign!='n'&&sign!='N')
{
printf("\t\t\t种类:");
scanf("\t\t\t%s",sum[n+i].type);
printf("\t\t\t支出(不不大于0):");
scanf("\t\t\t%f",&sum[n+i].Getsum);
printf("\t\t\t地点:");
scanf("\t\t\t%s",sum[n+i].place);
printf("\t\t\t时间(0-31):");
scanf("\t\t\t%d",&sum[n+i].time);
if(sum[n+i].time<1||sum[n+i].time>31)
return false;
gets(x);
printf("\t\t\t需要再次输入吗?(y/n)");
scanf("\t\t\t%c",&sign);
i++;
}
return(n+i);
}
void Showitems(family sum[],int n)//输出某月份消费信息
{
int i=0,month;
FILE *fp;
printf("请选取月份;");
scanf("%d",&month);
printf("\t\t\t--------------------------------------\n");
printf("\t\t\t种类 支出 地点 时间\n");
printf("\t\t\t--------------------------------------\n");
switch(month)
{
case 1:
fp=fopen("D:\\一月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 2:
fp=fopen("D:\\二月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 3:
fp=fopen("D:\\三月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 4:
fp=fopen("D:\\四月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 5:
fp=fopen("D:\\五月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 6:
fp=fopen("D:\\六月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 7:
fp=fopen("D:\\七月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 8:
fp=fopen("D:\\八月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 9:
fp=fopen("D:\\九月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 10:
fp=fopen("D:\\十月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 11:
fp=fopen("D:\\十一月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
case 12:
fp=fopen("D:\\十二月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
break;
}
printf("\t\t\t");
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(sum[i].type,sum[j].type)==1)
{
temp=sum[j];
sum[j]=sum[i];
sum[i]=temp;
}
else
if(strcmp(sum[j].type,sum[i].type)==0)
{
if(sum[i].Getsum>sum[j].Getsum)
{
temp=sum[j];
sum[j]=sum[i];
sum[i]=temp;
}
}
}
for(i=1;i<n+1;i++)
{
if(sum[i-1].Getsum!=0)
{
printf("\t\t\t%-8s %-12f %-8s %-10d\n",sum[i-1].type,sum[i-1].Getsum,sum[i-1].place,sum[i-1].time);
}
if(i>1&&i%10==0)
{
printf("\t\t\t----------------\n");
printf("\t\t\t");
system("pause");
printf("\t\t\t----------------\n");
}
}
printf("\t\t\t");
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 error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
total+=sum[i].Getsum;
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
fp=fopen("D:\\一月支出信息.txt","r");
while(!feof(fp))
{
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
i=i+1;
n=i;
};
for(i=0;i<n-1;i++)
{
printf("\t\t\t项目%-8s占总比%-10f%\n",sum[i].type,sum[i].Getsum/total);
}
printf("消费总额为%f",total);
fclose(fp);
printf("请输入本月收入:");
scanf("\t\t\t%f",&income);
printf("\t\t\t本月收支比为%-10f\n",total/income);
break;
case 2:
fp=fopen("D:\\二月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
total+=sum[i].Getsum;
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
fp=fopen("D:\\二月支出信息.txt","r");
while(!feof(fp))
{
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
i++;
n=i;
};
for(i=0;i<n-1;i++)
{
printf("\t\t\t%-8s%-10f%\n",sum[i].type,sum[i].Getsum/total);
}
printf("消费总额为%f",total);
fclose(fp);
printf("请输入本月收入:");
scanf("\t\t\t%f",&income);
printf("\t\t\t本月收支比为%-10f\n",total/income);
break;
case 3:
fp=fopen("D:\\三月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
total+=sum[i].Getsum;
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
fp=fopen("D:\\三月支出信息.txt","r");
while(!feof(fp))
{
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
i++;
n=i;
};
for(i=0;i<n-1;i++)
{
printf("\t\t\t%-8s%-10f%\n",sum[i].type,sum[i].Getsum/total);
}
printf("消费总额为%f",total);
fclose(fp);
printf("请输入本月收入:");
scanf("\t\t\t%f",&income);
printf("\t\t\t本月收支比为%-10f\n",total/income);
break;
case 4:
fp=fopen("D:\\四月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
total+=sum[i].Getsum;
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
}
fclose(fp);
fp=fopen("D:\\四月支出信息.txt","r");
while(!feof(fp))
{
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
i++;
n=i;
};
for(i=0;i<n-1;i++)
{
printf("\t\t\t%-8s%-10f%\n",sum[i].type,sum[i].Getsum/total);
}
printf("消费总额为%f",total);
fclose(fp);
printf("请输入本月收入:");
scanf("\t\t\t%f",&income);
printf("\t\t\t本月收支比为%-10f\n",total/income);
break;
case 5:
fp=fopen("D:\\五月支出信息.txt","r");
if(fp==0)
{
printf("file error\n");
exit(1);
}
fscanf(fp,"%s%f%s%d",sum[i].type,&sum[i].Getsum,sum[i].place,&sum[i].time);
while(!feof(fp))
{
printf("%-8s %-12f %-8s %-10d\n",sum[i].type,sum[i].Getsum,sum[i].place,sum[i].time);
展开阅读全文