#define LEN sizeof(struct financial)
#define FFORMAT \"%-8d%-15s%-10d%-10d%-12.2f%-12.2f%-12.2f\\n\"
#define DATA
member[i].num,member[i].name,member[i].month,member[i].year,member[i].income,member[i].output,member[i].total
struct financial //定义家庭成员信息
{
int num; //编号
char name[15]; //家庭成员姓名
int month; //月份
int year; //年份
float income; //收入
float output; //支出
float total; };
struct financial member[50]; void menu(); void in(); void show(); void del(); void modify(); void total(); void search(); //总金额
//定义结构体数组 //主界面
//录入家庭成员收支信息
//显示家庭成员收支信息
//删除家庭成员收支信息
//修改家庭成员收支信息
//计算家庭成员总收入
//查找家庭成员收支信息
int main()
{
int n;
menu();
scanf(\"%d\while(n)
{
switch(n)
{
case 1:
in(); break;
case 2:
//输入数字选择功能
//调用录入家庭成员信息函数
search(); //查找家庭成员信息函数
break;
case 3:
del(); break;
case 4:
modify(); break;
case 5:
total(); break;
default:break;
}
//调用删除家庭成员信息函数
//调用修改家庭成员信息函数
//调用汇总函数
printf(\"按任意键返回主菜单:\\n\");
getch();
menu(); //执行完功能再次显示菜单界面
scanf(\"%d\
}
return 0;
}
void menu()
{
system(\"cls\");
printf(\"|-------------------------------------------------|\\n\");
printf(\"|--------------------家庭财务信息系统-------------|\\n\");
printf(\"| 0. 退出 |\\n\");
printf(\"| 1. 录入信息 |\\n\");
printf(\"| 2. 查找信息 |\\n\");
printf(\"| 3. 删除信息 |\\n\");
printf(\"| 4. 修改信息 printf(\"| 5. 统计信息 printf(\"|-------------------------------------------------|\\n\");
printf(\"选择(0-5):\");
}
void in() //录入家庭成员信息
{
int i,m=0;
char ch[2];
FILE *fp;
|\\n\");
|\\n\");
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开文件!\\n\");
return;
}
while(!feof(fp))
{
if(fread(&member[m] ,LEN,1,fp)==1)
m++; }
fclose(fp);
if(m==0)
printf(\"没有找到!\\n\");
//统计当前记录条数
else
{
//system(\"cls\");
show(); //调用show函数,显示原有信息
}
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开文件!\\n\");
return;
}
for(i=0;ifwrite(&member[i] ,LEN,1,fp); //向指定的磁盘文件写入信息printf(\"是否输入?(y/n):\");
scanf(\"%s\
while(strcmp(ch,\"Y\")==0||strcmp(ch,\"y\")==0) //判断是否要录入新信息
{
printf(\"编号:\");
scanf(\"%d\ for(i=0;iif(member[i].num == member[m].num){
printf(\"该记录已经存在,按任意键继续!\");
getch();
fclose(fp);
return;
}
//输入家庭成员编号
printf(\"家庭成员姓名:\");
scanf(\"%s\ //输入家庭成员姓名
printf(\"请输入月份:\");
scanf(\"%d\ printf(\"请输入年份:\");
scanf(\"%d\ printf(\"请输入收入:\");
scanf(\"%f\ printf(\"请输入支出:\");
scanf(\"%f\ member[m].total=member[m].income //汇总
if(fwrite(&member[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件
//输入月份
//输入年份
//输入收入
//输入支出
member[m].output; -
{
printf(\"不能保存!\");
getch();
}
else
{
printf(\"%s 已经保存!\\n\
m++;
}
printf(\"是否继续?(y/n):\");
scanf(\"%s\
}
fclose(fp);
printf(\"OK!\\n\");
}
void show()
{
FILE *fp;
int i,m=0;
fp=fopen(\"家庭财务管理系统\
while(!feof(fp))
{
if(fread(&member[m] ,LEN,1,fp)==1)
m++;
}
fclose(fp);
printf(\"编号成员月份年分收入支出总金额 \\\n\");
for(i=0;i{printf(FFORMAT,DATA);
}
}
void del()
{
FILE *fp;
int snum,i,j,m=0;
char ch[2];
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开文件\\n\");
return;
}
while(!feof(fp))
if(fread(&member[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf(\"没有记录!\\n\");
return;
}
printf(\"请输入编号:\");
scanf(\"%d\
for(i=0;iif(snum==member[i].num)break;
if(i==m)
{
printf(\"没有找到!\");
return;
}
printf(\"已经找到该记录,是否删除?(y/n)\");
scanf(\"%s\
if(strcmp(ch,\"Y\")==0||strcmp(ch,\"y\")==0) //判断是否要进行删除
{
for(j=i;jmember[j] //将后一个记录移到前一个记录的位置= member[j+1];
m--; //记录的总个数减1
printf(\"成功删除!\\n\");
}
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开!\\n\");
return;
}
for(j=0;jif(fwrite(&member[j] ,LEN,1,fp)!=1)//将更改
{
printf(\"不能保存!\\n\");
getch();
}
fclose(fp);
}
void search()
{
FILE *fp;
int snum,i,m=0;
char ch[2];
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开文件\\n\");
return;
}
while(!feof(fp))
if(fread(&member[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf(\"没有记录!\\n\");
return;
}
printf(\"请输入编号:\");
scanf(\"%d\
for(i=0;iif(snum == member[i].num){
printf(\"已经找到该记录,是否显示?(y/n)\");
scanf(\"%s\
if(strcmp(ch,\"Y\")==0||strcmp(ch,\"y\")==0)
{
printf(\"编号成员月份年份收入支出总金额\\\n\");
printf(FFORMAT,DATA);
break;
}
else
return;
}
if(i==m)
printf(\"没有找到相应的记录!\\n\");
}
void modify()
{
FILE *fp;
int i,j,m=0,snum;
char ch[2];
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开文件!\\n\");
return;
}
while(!feof(fp))
if(fread(&member[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf(\"没有记录!\\n\");
fclose(fp);
return;
}
printf(\"请输入要修改的记录信息的编号!\\n\");
scanf(\"%d\
for(i=0;iif(snum==member[i].num) //检索记录中是否有要修改的信息{
printf(\"已经找到该记录,是否修改?(y/n)\\n\");
scanf(\"%s\
if(strcmp(ch,\"Y\")==0||strcmp(ch,\"y\")==0)
{
printf(\"家庭成员姓名:\");
scanf(\"%s\ 入家庭成员姓名
printf(\"请输入月份:\");
scanf(\"%d\ 入月份
printf(\"请输入年份:\");
//输//输
scanf(\"%d\ //输入年份
printf(\"请输入收入:\");
scanf(\"%f\ //输入收入
printf(\"请输入支出:\");
scanf(\"%f\ member[i].total=member[i].income - member[i].output; 总
printf(\"保存成功!\");
}
else
return;
}
else
//输入支出
//汇
{
printf(\"没有找到!\");
return;
磁盘文件中
}
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开文件!\\n\");
return;
}
for(j=0;j{printf(\"不能保存!\");
}
fclose(fp);
}
void total() // 统计
{
FILE *fp;
int m=0;
if((fp=fopen(\"家庭财务管理系统\
{
printf(\"不能打开记录!\\n\");
return;
}
while(!feof(fp))
if(fread(&member[m],LEN,1,fp)==1)
m++; //统计记录个数
if(m==0)
{
printf(\"没有记录!\\n\");
fclose(fp);
return;
}
printf(\"一共有 %d 条记录!\\n\ fclose(fp);
} //将统计的个数输出