#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
typedef struct user
{
char user_name[10]; //姓名
char user_password[10]; //密码
int user_flag; //标志:0为普通成员,1为家长
struct user *next;
}US; //成员登陆信息
typedef struct people
{
char people_name[10]; //姓名
int people_income; //收入
int people_output; //支出
struct people *next;
}PE; //成员收支信息
void Login();//初始界面
void Init1(US *h_user);//登录成员信息初始化
void Init2(PE *h_people);//成员收支信息初始化
void Login1(US *h_user,PE *h_people);//);//成员登录
void Menu1(US *h_user,PE *h_people);//管理员选择界面
void Menu2(US *h_user,PE *h_people);//普通成员选择界面
void Add_user(US *h_user,PE *h_people);//增加登录成员
void Add_people(US *h_user,PE *h_people);//录入成员收支信息
void Delete_people(US *h_user,PE *h_people);//删除成员收支信息
void Delete_user(US *h_user,PE *h_people);//删除成员登录信息
void Print_people(PE *p);//输出成员收支信息
void Find_people1(US *h_user,PE *h_people);//查找成员收支信息
void Find_people2(US *h_user,PE *h_people);//查找成员收支信息
void Print_allpeople1(US *h_user,PE *h_people);//输出全部成员收支信息
void Print_allpeople2(US *h_user,PE *h_people);//输出全部成员收支信息
void Change_people(US *h_user,PE *h_people);//修改成员收支信息
void Change_code1(US *h_user,PE *h_people);//修改成员登录密码
void Change_code2(US *h_user,PE *h_people);//修改成员登录密码
void Save(US *h_user,PE *h_people); //保存
void Save_User(US *h_user); //保存成员登陆信息
void Save_People(PE *h_people); //保存成员收支信息
void Load(US *h_user,PE *h_people); //加载
void Load_User(US *h_user); //加载成员登陆信息
void Load_People(PE *h_people); //加载成员收支信息
int out();//退出系统
void List(US *h_user,PE *h_people);//排序
int main()
{
US *h_user=NULL;
PE *h_people=NULL;
FILE *fp_user,*fp_people;/*创建文件型指针*/
Login();
if((fp_user=fopen("User.txt","r"))==NULL||(fp_people=fopen("People.txt","r"))==NULL)
{
Init1(h_user);
Init2(h_people);
Login1(h_user,h_people);
}
else if((fp_user=fopen("User.txt","r"))!=NULL||(fp_people=fopen("People.txt","r"))!=NULL)
{
Load(h_user,h_people);
Login1(h_user,h_people);
}
return 0;
}
void Login() /*欢迎界面*/
{
system("cls");
system ("color 8F"); // C语言中调用dos函数颜色
printf("\n");
printf (" * * ****** * **** **** * * ****** \n");
printf (" * * * * * * * * * * * * * \n");
printf (" * * * * ***** * * * * * * * * ****** \n");
printf (" * * * * * * * * * * * * * * \n");
printf (" * * * * * * * * * * * * * * \n");
printf (" * * ****** ***** **** **** * * * ****** \n");
printf("\n");
printf ("\n\t ☆★欢迎使用家庭财务管理系统★☆\n");
printf("\n");
printf("\n\n\n\t\t 按任意键进入系统...");
getch();
system("cls");
}
/**************************************************************************************************************
* 功能描述: 家庭成员信息初始化
* 其它说明:家庭成员信息包括姓名、密码和权限。
****************************************************************************************************************/
void Init1(US *h_user) //登录成员信息初始化
{
system("cls");
US *p0;
printf("\n 【成员信息初始化】\n\n");
p0=(US*)malloc(sizeof(US)); /*申请新结点存储空间*/
h_user=(US*)malloc(sizeof(US));
printf("\n请输入成员姓名:");
scanf("%s",p0->user_name);
printf("\n\n请输入新成员密码:");
scanf("%s",p0->user_password);
printf("\n\n新成员是否作为家长(是请输入1,否输入0):");
scanf("%d",&p0->user_flag);
p0->next=NULL;
h_user->next=p0;
printf("\n成员信息初始化完毕!按任意键继续下一步操作..\n");
getch();
system("cls");
}
/**************************************************************************************************************
* 功能描述: 家庭成员收支信息初始化
* 其它说明:家庭成员收支信息包括姓名、收入和支出。
****************************************************************************************************************/
void Init2(PE *h_people) //成员收支信息初始化
{
system("cls");
PE *p0;
printf("\n 【成员收支信息初始化】\n\n");
p0=(PE*)malloc(sizeof(PE));/*申请新结点存储空间*/
h_people=(PE*)malloc(sizeof(PE));
printf("\n请输入成员姓名:");
scanf("%s",p0->people_name);
printf("\n\n请输入成员收入:");
scanf("%d",&p0->people_income);
printf("\n\n请输入成员支出:");
scanf("%d",&p0->people_output);
p0->next=NULL;
h_people->next=p0;
printf("\n成员信息初始化完毕!按任意键继续下一步操作..\n");
getch();
system("cls");
}
/**************************************************************************************************************
* 功能描述: 家庭成员登陆
* 其它说明:当家庭成员的姓名和密码正确时才进入选择菜单界面。不同权限进入不同界面。
****************************************************************************************************************/
void Login1(US *h_user,PE *h_people) //成员登录
{
US *p;
system("cls");
char name[10],password[10];
/*int i=0; */
p=h_user;
printf("\n 【登录界面】\n\n请按以下顺序输入成员账户和密码:\n");
printf("\n请输入成员账户名:");
scanf("%s",name);
for(; p!=NULL; p=p->next)
{
if(p->next!= NULL&&!strcmp(p->next->user_name,name))
{
printf("\n请输入密码:");
scanf("%s",password);
/* while((password[i]=getch())!='\r')
{
printf("*");
i++;
}
password[i]='\0';*/
{
for(; p!=NULL; p=p->next)
{
if(p->next != NULL && !strcmp(p->next->user_password,password))//找到成员后分两种情况,成员flag为1即家长进入管理员界面,为0即孩子进入普通界面
{
if(p->next->user_flag==1)
{
Menu1(h_user,h_people);
break;
}
else if(p->next->user_flag==0)
{
Menu2(h_user,h_people);
break;
}
}
break;
}
if(p==NULL)
{
printf("登录失败,密码错误!请重新登录!");
Login1(h_user,h_people);
}
}
break;
}
}
if(p==NULL)
{
printf("登录失败,不存在此成员!");
Login1(h_user,h_people);
}
}
/**************************************************************************************************************
* 功能描述: 管理员主页
* 其它说明:菜单包括对家庭成员信息和收支信息的管理,查看收支信息和修改密码。
****************************************************************************************************************/
void Menu1(US *h_user,PE *h_people) //管理员选择界面
{
system("cls");
int c;
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" ※ ※\n");
printf(" ※********管*理*员*主*页*面*****※\n");
printf(" ※ ※\n");
printf(" ※ 1: 新增家庭成员 ※\n");
printf(" ※ ※\n");
printf(" ※ 2: 删除家庭成员 ※\n");
printf(" ※ ※\n");
printf(" ※ 3: 录入成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 4: 删除成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 5: 查询成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 6: 浏览成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 7: 修改成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 8: 排序成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 9: 修改密码 ※\n");
printf(" ※ ※\n");
printf(" ※ 0: 退出 ※\n");
printf(" ※ ※\n");
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" 请选择:\n");
scanf("%d",&c);
switch(c)
{
case 1:
Add_user(h_user,h_people);
system("pause");
break;
case 2:
Delete_user(h_user,h_people);
system("pause");
break;
case 3:
Add_people(h_user,h_people);
system("pause");
break;
case 4:
Delete_people(h_user,h_people);
system("pause");
break;
case 5:
Find_people1(h_user,h_people);
system("pause");
break;
case 6:
Print_allpeople1(h_user,h_people);
system("pause");
break;
case 7:
Change_people(h_user,h_people);
system("pause");
break;
case 8:
List(h_user,h_people);
system("pause");
break;
case 9:
Change_code1(h_user,h_people);
system("pause");
break;
case 0:
out();
system("pause");
break;
default:
printf("你的选择有误!请重新选择!");
break;
}
}
/**************************************************************************************************************
* 功能描述: 普通成员主页
* 其它说明:菜单包括查看家庭成员收支信息和修改密码。
****************************************************************************************************************/
void Menu2(US *h_user,PE *h_people) //普通成员选择界面
{
system("cls");
int c;
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" ※ ※\n");
printf(" ※********成**员**主**页********※\n");
printf(" ※ ※\n");
printf(" ※ 1: 浏览成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 2: 查询成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 3: 修改密码 ※\n");
printf(" ※ ※\n");
printf(" ※ 0: 退出 ※\n");
printf(" ※ ※\n");
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" 请选择:");
scanf("%d",&c);
switch(c)
{
case 1:
Print_allpeople2(h_user,h_people);
system("pause");
break;
case 2:
Find_people2(h_user,h_people);
system("pause");
break;
case 3:
Change_code2(h_user,h_people);
system("pause");
break;
case 0:
out();
system("pause");
break;
default:
printf("你的选择有误!请重新选择!");
break;
}
}
/**************************************************************************************************************
* 功能描述: 1新增家庭成员
* 其它说明:家庭成员信息包括姓名、密码和权限。
****************************************************************************************************************/
void Add_user(US *h_user,PE *h_people) //增加登录成员
{
system("cls");
US *p,*p0,*p1;
p=p1=h_user;
printf("\n 【添加新成员】\n\n");
p0=(US*)malloc(sizeof(US)); /*申请新结点存储空间*/
printf("\n请输入新成员姓名:");
scanf("%s",p0->user_name);
while(strcmp(p0->user_name,p1->user_name)!=0&&p1->next!=NULL)
p1=p1->next;
if(strcmp(p0->user_name,p1->user_name)==0)
{
printf("\n该成员已存在!\n");
}
else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/
{
printf("\n\n请输入新成员密码:");
scanf("%s",p0->user_password);
printf("\n\n新成员是否作为家长(是请输入1,否输入0):");
scanf("%d",&p0->user_flag);
while(p->next)
{
p=p->next;
}
if(h_user==NULL)
h_user=p0; /*此处分两种情况,链表中没有数据,head直接指向p0处*/ //尾插法
else
p->next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/
p0->next=NULL;
printf("\n新成员添加成功!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 2删除家庭成员
* 其它说明: 无
****************************************************************************************************************/
void Delete_user(US *h_user,PE *h_people) //删除成员登录信息
{
US *p,*q;
int c;
system("cls");
char name[10];
p=h_user;
printf("\n 【删除家庭成员】\n\n请输入要删除的家庭成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(p->next!=NULL&&!strcmp(p->next->user_name,name))
{
if(p->next->user_flag==1)
{
printf("%s成员为家长,无权限删除!\n",name);
break;
}
printf("确认删除%s成员?(是请输入1,否输入0)",name);
scanf("%d",&c);
if(c==1)
{
q=p->next;
p->next=q->next;
free(q);
printf("成功删除%s成员!\n",name);
break;
}
else if(c==0)
{
printf("已放弃删除操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
{
printf("未找到此成员,删除失败!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 3录入成员收支信息
* 其它说明:成员收支信息包括姓名、收入和支出。
****************************************************************************************************************/
void Add_people(US *h_user,PE *h_people) //录入成员收支信息
{
system("cls");
PE *p,*p0,*p1;
p=p1=h_people;
printf("\n 【录入成员收支信息】\n\n请按以下顺序录入成员收支信息:\n");
p0=(PE*)malloc(sizeof(PE)); /*申请新结点存储空间*/
printf("\n请输入姓名:");
scanf("%s",p0->people_name);
while(strcmp(p0->people_name,p1->people_name)!=0&&p1->next!=NULL)
p1=p1->next;
if(strcmp(p0->people_name,p1->people_name)==0) /*此处分两种情况*/
{
printf("\n该成员收支信息已存在!\n");
}
else
{
printf("\n请输入收入(元):");
scanf("%d",&p0->people_income);
printf("\n请输入支出(元):");
scanf("%d",&p0->people_output);
printf("\n······\n录入成功。\n");
while(p->next)
{
p=p->next;
}
if(h_people==NULL)
h_people=p0; /*此处分两种情况,链表中没有数据,head直接指向p0处*/
else
p->next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/
p0->next=NULL;
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 4删除成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Delete_people(US *h_user,PE *h_people)//删除成员收支信息
{
system("cls");
PE *p,*q;
int c;
char name[10];
p=h_people;
printf("\n 【删除收支信息】\n\n请输入需要删除收支信息的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(p->next!=NULL&&!strcmp(p->next->people_name,name))
{
printf("确认删除%s成员的收支信息?(是请输入1,否输入0)",name); //删除判断
scanf("%d",&c);
if(c==1)
{
q=p->next;
p->next=q->next;
free(q);
printf("成功删除%s成员收支信息!\n",name);
break;
}
else if(c==0)
{
printf("已放弃删除操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
{
printf("未找到此成员,删除失败!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 5查找成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Print_people(PE *p)//输出成员收支信息
{
printf("\n%s成员收支信息如下:\n\n",p->people_name);
printf("成员姓名\t收入\t\t支出\t\t总计\n");
printf("%s\t\t%d\t\t%d\t\t%d\n",p->people_name,p->people_income,p->people_output,p->people_income-p->people_output);
}
void Find_people1(US *h_user,PE *h_people)//查找成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
char name[10];
printf("\n 【成员收支信息查询】\n\n");
printf("请输入要查询的成员名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->people_name,name)==0)
{
Print_people(p);
break;
}
}
if(p==NULL)
printf("没有相关信息!");
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
void Find_people2(US *h_user,PE *h_people)//查找成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
char name[10];
printf("\n 【成员收支信息查询】\n\n");
printf("请输入要查询的成员名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->people_name,name)==0)
{
Print_people(p);
break;
}
}
if(p==NULL)
printf("没有相关信息!");
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu2(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 6浏览成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Print_allpeople1(US *h_user,PE *h_people)//输出全部成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
int allin=0,allout=0,all=0;//收入 支出 总计
if(p!=NULL)
{
printf("\n全部成员收支信息如下:\n\n");
printf("成员姓名\t收入\t\t支出\t\t总计\n");
while(p!=NULL)
{
printf("%s\t\t%d\t\t%d\t\t%d\n",p->people_name,p->people_income,p->people_output,p->people_income-p->people_output);
allin=p->people_income+allin;
allout=p->people_output+allout;
all=p->people_income-p->people_output+all;
p = p->next;
}
printf("\n统计\t\t收入\t\t支出\t\t总计\n");
printf("\t\t%d\t\t%d\t\t%d\n",allin,allout,all);
}
else
{
printf("没有成员信息!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
void Print_allpeople2(US *h_user,PE *h_people)//输出全部成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
int allin=0,allout=0,all=0;
if(p!=NULL)
{
printf("\n全部成员收支信息如下:\n\n");
printf("成员姓名\t收入\t\t支出\t\t总计\n");
while(p!=NULL)
{
printf("%s\t\t%d\t\t%d\t\t%d\n",p->people_name,p->people_income,p->people_output,p->people_income-p->people_output);
allin=p->people_income+allin;
allout=p->people_output+allout;
all=p->people_income-p->people_output+all;
p = p->next;
}
printf("\n统计\t\t收入\t\t支出\t\t总计\n");
printf("\t\t%d\t\t%d\t\t%d\n",allin,allout,all);
}
else
{
printf("没有成员信息!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu2(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 7修改成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Change_people(US *h_user,PE *h_people) //修改成员收支信息
{
system("cls");
PE *p;
int in,out;
int c;
char name[10];
p=h_people;
printf("\n【修改成员收支信息】\n\n");
printf("\n请输入要修改的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->people_name,name)==0)
{
printf("已经找到%s成员,是否确认修改?(是请输入1,否输入0)",name);//修改判断
scanf("%d",&c);
if(c==1)
{
printf("\n请输入成员的收入:");
scanf("%d",&in);
p->people_income=in;
printf("\n请输入成员的支出:");
scanf("%d",&out);
p->people_output=out;
printf("\n%s成员信息修改完毕!\n\n",name);
Print_people(p);
break;
}
else if(c==0)
{
printf("已放弃修改操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
printf("\n此成员不存在!\n\n按任意键返回菜单..\n");
printf("\n按任意键返回菜单..\n\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 8排序成员收支信息
* 其它说明:插入排序算法
****************************************************************************************************************/
void List(US *h_user,PE *h_people)//家庭成员收入排行浏览
{
PE *h1,*h2,*h3; //h2用来指向需要插入的结点,h3用来指向h2的前一个结点
for(h3=h_people,h2=h_people->next;h2!=NULL;)
{
h1=h_people; //h1用来遍历寻找合适的插入位置
for(;h1!=h2;h1=h1->next)
{
if(h1->next->people_income<h2->people_income)//如果找到,即把h2所指向的结点插到h1后面,然后跳出循环
{
h3->next=h2->next;
h2->next=h1->next;
h1->next=h2;
h2=h3->next;
break;
}
}
if(h1==h2)//此处需要注意,只在h2所指结点不需要前插时,移动h2和h3
{
h2=h2->next;
h3=h3->next;
}
}
printf("\n按任意键输出..\n\n");
getch();
system("cls");
Print_allpeople1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 9修改密码
* 其它说明:无
****************************************************************************************************************/
void Change_code1(US *h_user,PE *h_people)
{
system("cls");
US *p;
int c;
char name[10],password[10];
p=h_user;
printf("\n【修改成员密码】\n\n");
printf("\n请输入要修改的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->user_name,name)==0)
{
printf("\n已经找到%s成员,是否确认修改密码?(是请输入1,否输入0)",name);//修改判断
scanf("%d",&c);
if(c==1)
{
printf("\n请输入成员的新密码:");
scanf("%s",password);
strcpy(p->user_password,password);
printf("\n%s成员密码修改成功!\n\n",name);
break;
}
else if(c==0)
{
printf("已放弃修改操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
printf("\n此成员不存在!\n\n按任意键返回菜单..\n");
printf("\n按任意键返回菜单..\n\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
void Change_code2(US *h_user,PE *h_people)
{
system("cls");
US *p;
int c;
char name[10],password[10];
p=h_user;
printf("\n【修改成员密码】\n\n");
printf("\n请输入要修改的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->user_name,name)==0)
{
printf("\n已经找到%s成员,是否确认修改密码?(是请输入1,否输入0)",name);//修改判断
scanf("%d",&c);
if(c==1)
{
printf("\n请输入成员的新密码:");
scanf("%s",password);
strcpy(p->user_password,password);
printf("\n%s成员密码修改成功!\n\n",name);
break;
}
else if(c==0)
{
printf("已放弃修改操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
printf("\n此成员不存在!\n\n按任意键返回菜单..\n");
printf("\n按任意键返回菜单..\n\n");
getch();
system("cls");
Menu2(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 保存退出
* 其它说明:无
****************************************************************************************************************/
void Save(US *h_user,PE *h_people) /*保存信息*/
{
Save_User(h_user);
Save_People(h_people);
}
void Save_User(US *h_user)//保存成员登陆信息
{
FILE *fp_user;
US *p,*p0;
p=h_user;
if((fp_user=fopen("User.txt","w"))==NULL)//创建文件,进行保存
{
printf("\n文件保存失败!\n请重新启动本系统...\n");
exit(0);
}
while(p!=NULL)
{
if(fwrite(p,sizeof(US),1,fp_user)!=1)//将链表中的信息写入文件中
printf("\n写入文件失败!\n请重新启动本系统!\n");
p0=p;
p=p->next;
free(p0); //释放所有结点
}
h_user=NULL;
fclose(fp_user); //关闭文件
}
void Save_People(PE *h_people) //保存成员收支信息
{
FILE *fp_people;//创建文件型指针
PE *p,*p0;
p=h_people;
if((fp_people=fopen("People.txt","w"))==NULL)//创建文件,进行保存
{
printf("\n文件保存失败!\n请重新启动本系统...\n");
exit(0);
}
while(p!=NULL)
{
if(fwrite(p,sizeof(PE),1,fp_people)!=1)//将链表中的信息写入文件中
printf("\n写入文件失败!\n请重新启动本系统!\n");
p0=p;
p=p->next;
free(p0);
}
h_people=NULL;
fclose(fp_people); //关闭文件
}
void Load(US *h_user,PE *h_people) //加载信息
{
Load_User(h_user);
Load_People(h_people);
}
void Load_User(US *h_user) //加载成员登录信息
{
US *p1,*p2,*p3;
FILE *fp; //创建文件型指针
fp=fopen("User.txt","r"); //打开文件
p1=(US *)malloc(sizeof(US));
fread(p1,sizeof(US),1,fp);
h_user=p3=p2=p1;
while(!feof(fp)) //读出信息,重新链入链表
{
p1=(US *)malloc(sizeof(US));
fread(p1,sizeof(US),1,fp);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fp); //关闭文件
}
void Load_People(PE *h_people) //加载成员收支信息
{
PE *p1,*p2,*p3;
FILE *fp; //创建文件型指针
fp=fopen("People.txt","r"); //打开文件
p1=(PE *)malloc(sizeof(PE));
fread(p1,sizeof(PE),1,fp);
h_people=p3=p2=p1;
while(!feof(fp)) //读出信息,重新链入链表
{
p1=(PE *)malloc(sizeof(PE));
fread(p1,sizeof(PE),1,fp);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fp); //关闭文件
}
/**************************************************************************************************************
* 功能描述: 0退出
* 其它说明:无
****************************************************************************************************************/
int out() //系统退出界面
{
printf("\n\n 『谢谢使用家庭财务管理系统』\n\n\n\n\n");
exit(0);
return 0;
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
typedef struct user
{
char user_name[10]; //姓名
char user_password[10]; //密码
int user_flag; //标志:0为普通成员,1为家长
struct user *next;
}US; //成员登陆信息
typedef struct people
{
char people_name[10]; //姓名
int people_income; //收入
int people_output; //支出
struct people *next;
}PE; //成员收支信息
void Login();//初始界面
void Init1(US *h_user);//登录成员信息初始化
void Init2(PE *h_people);//成员收支信息初始化
void Login1(US *h_user,PE *h_people);//);//成员登录
void Menu1(US *h_user,PE *h_people);//管理员选择界面
void Menu2(US *h_user,PE *h_people);//普通成员选择界面
void Add_user(US *h_user,PE *h_people);//增加登录成员
void Add_people(US *h_user,PE *h_people);//录入成员收支信息
void Delete_people(US *h_user,PE *h_people);//删除成员收支信息
void Delete_user(US *h_user,PE *h_people);//删除成员登录信息
void Print_people(PE *p);//输出成员收支信息
void Find_people1(US *h_user,PE *h_people);//查找成员收支信息
void Find_people2(US *h_user,PE *h_people);//查找成员收支信息
void Print_allpeople1(US *h_user,PE *h_people);//输出全部成员收支信息
void Print_allpeople2(US *h_user,PE *h_people);//输出全部成员收支信息
void Change_people(US *h_user,PE *h_people);//修改成员收支信息
void Change_code1(US *h_user,PE *h_people);//修改成员登录密码
void Change_code2(US *h_user,PE *h_people);//修改成员登录密码
void Save(US *h_user,PE *h_people); //保存
void Save_User(US *h_user); //保存成员登陆信息
void Save_People(PE *h_people); //保存成员收支信息
void Load(US *h_user,PE *h_people); //加载
void Load_User(US *h_user); //加载成员登陆信息
void Load_People(PE *h_people); //加载成员收支信息
int out();//退出系统
void List(US *h_user,PE *h_people);//排序
int main()
{
US *h_user=NULL;
PE *h_people=NULL;
FILE *fp_user,*fp_people;/*创建文件型指针*/
Login();
if((fp_user=fopen("User.txt","r"))==NULL||(fp_people=fopen("People.txt","r"))==NULL)
{
Init1(h_user);
Init2(h_people);
Login1(h_user,h_people);
}
else if((fp_user=fopen("User.txt","r"))!=NULL||(fp_people=fopen("People.txt","r"))!=NULL)
{
Load(h_user,h_people);
Login1(h_user,h_people);
}
return 0;
}
void Login() /*欢迎界面*/
{
system("cls");
system ("color 8F"); // C语言中调用dos函数颜色
printf("\n");
printf (" * * ****** * **** **** * * ****** \n");
printf (" * * * * * * * * * * * * * \n");
printf (" * * * * ***** * * * * * * * * ****** \n");
printf (" * * * * * * * * * * * * * * \n");
printf (" * * * * * * * * * * * * * * \n");
printf (" * * ****** ***** **** **** * * * ****** \n");
printf("\n");
printf ("\n\t ☆★欢迎使用家庭财务管理系统★☆\n");
printf("\n");
printf("\n\n\n\t\t 按任意键进入系统...");
getch();
system("cls");
}
/**************************************************************************************************************
* 功能描述: 家庭成员信息初始化
* 其它说明:家庭成员信息包括姓名、密码和权限。
****************************************************************************************************************/
void Init1(US *h_user) //登录成员信息初始化
{
system("cls");
US *p0;
printf("\n 【成员信息初始化】\n\n");
p0=(US*)malloc(sizeof(US)); /*申请新结点存储空间*/
h_user=(US*)malloc(sizeof(US));
printf("\n请输入成员姓名:");
scanf("%s",p0->user_name);
printf("\n\n请输入新成员密码:");
scanf("%s",p0->user_password);
printf("\n\n新成员是否作为家长(是请输入1,否输入0):");
scanf("%d",&p0->user_flag);
p0->next=NULL;
h_user->next=p0;
printf("\n成员信息初始化完毕!按任意键继续下一步操作..\n");
getch();
system("cls");
}
/**************************************************************************************************************
* 功能描述: 家庭成员收支信息初始化
* 其它说明:家庭成员收支信息包括姓名、收入和支出。
****************************************************************************************************************/
void Init2(PE *h_people) //成员收支信息初始化
{
system("cls");
PE *p0;
printf("\n 【成员收支信息初始化】\n\n");
p0=(PE*)malloc(sizeof(PE));/*申请新结点存储空间*/
h_people=(PE*)malloc(sizeof(PE));
printf("\n请输入成员姓名:");
scanf("%s",p0->people_name);
printf("\n\n请输入成员收入:");
scanf("%d",&p0->people_income);
printf("\n\n请输入成员支出:");
scanf("%d",&p0->people_output);
p0->next=NULL;
h_people->next=p0;
printf("\n成员信息初始化完毕!按任意键继续下一步操作..\n");
getch();
system("cls");
}
/**************************************************************************************************************
* 功能描述: 家庭成员登陆
* 其它说明:当家庭成员的姓名和密码正确时才进入选择菜单界面。不同权限进入不同界面。
****************************************************************************************************************/
void Login1(US *h_user,PE *h_people) //成员登录
{
US *p;
system("cls");
char name[10],password[10];
/*int i=0; */
p=h_user;
printf("\n 【登录界面】\n\n请按以下顺序输入成员账户和密码:\n");
printf("\n请输入成员账户名:");
scanf("%s",name);
for(; p!=NULL; p=p->next)
{
if(p->next!= NULL&&!strcmp(p->next->user_name,name))
{
printf("\n请输入密码:");
scanf("%s",password);
/* while((password[i]=getch())!='\r')
{
printf("*");
i++;
}
password[i]='\0';*/
{
for(; p!=NULL; p=p->next)
{
if(p->next != NULL && !strcmp(p->next->user_password,password))//找到成员后分两种情况,成员flag为1即家长进入管理员界面,为0即孩子进入普通界面
{
if(p->next->user_flag==1)
{
Menu1(h_user,h_people);
break;
}
else if(p->next->user_flag==0)
{
Menu2(h_user,h_people);
break;
}
}
break;
}
if(p==NULL)
{
printf("登录失败,密码错误!请重新登录!");
Login1(h_user,h_people);
}
}
break;
}
}
if(p==NULL)
{
printf("登录失败,不存在此成员!");
Login1(h_user,h_people);
}
}
/**************************************************************************************************************
* 功能描述: 管理员主页
* 其它说明:菜单包括对家庭成员信息和收支信息的管理,查看收支信息和修改密码。
****************************************************************************************************************/
void Menu1(US *h_user,PE *h_people) //管理员选择界面
{
system("cls");
int c;
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" ※ ※\n");
printf(" ※********管*理*员*主*页*面*****※\n");
printf(" ※ ※\n");
printf(" ※ 1: 新增家庭成员 ※\n");
printf(" ※ ※\n");
printf(" ※ 2: 删除家庭成员 ※\n");
printf(" ※ ※\n");
printf(" ※ 3: 录入成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 4: 删除成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 5: 查询成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 6: 浏览成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 7: 修改成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 8: 排序成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 9: 修改密码 ※\n");
printf(" ※ ※\n");
printf(" ※ 0: 退出 ※\n");
printf(" ※ ※\n");
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" 请选择:\n");
scanf("%d",&c);
switch(c)
{
case 1:
Add_user(h_user,h_people);
system("pause");
break;
case 2:
Delete_user(h_user,h_people);
system("pause");
break;
case 3:
Add_people(h_user,h_people);
system("pause");
break;
case 4:
Delete_people(h_user,h_people);
system("pause");
break;
case 5:
Find_people1(h_user,h_people);
system("pause");
break;
case 6:
Print_allpeople1(h_user,h_people);
system("pause");
break;
case 7:
Change_people(h_user,h_people);
system("pause");
break;
case 8:
List(h_user,h_people);
system("pause");
break;
case 9:
Change_code1(h_user,h_people);
system("pause");
break;
case 0:
out();
system("pause");
break;
default:
printf("你的选择有误!请重新选择!");
break;
}
}
/**************************************************************************************************************
* 功能描述: 普通成员主页
* 其它说明:菜单包括查看家庭成员收支信息和修改密码。
****************************************************************************************************************/
void Menu2(US *h_user,PE *h_people) //普通成员选择界面
{
system("cls");
int c;
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" ※ ※\n");
printf(" ※********成**员**主**页********※\n");
printf(" ※ ※\n");
printf(" ※ 1: 浏览成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 2: 查询成员收支信息 ※\n");
printf(" ※ ※\n");
printf(" ※ 3: 修改密码 ※\n");
printf(" ※ ※\n");
printf(" ※ 0: 退出 ※\n");
printf(" ※ ※\n");
printf(" ※※※※※※※※※※※※※※※※※\n");
printf(" 请选择:");
scanf("%d",&c);
switch(c)
{
case 1:
Print_allpeople2(h_user,h_people);
system("pause");
break;
case 2:
Find_people2(h_user,h_people);
system("pause");
break;
case 3:
Change_code2(h_user,h_people);
system("pause");
break;
case 0:
out();
system("pause");
break;
default:
printf("你的选择有误!请重新选择!");
break;
}
}
/**************************************************************************************************************
* 功能描述: 1新增家庭成员
* 其它说明:家庭成员信息包括姓名、密码和权限。
****************************************************************************************************************/
void Add_user(US *h_user,PE *h_people) //增加登录成员
{
system("cls");
US *p,*p0,*p1;
p=p1=h_user;
printf("\n 【添加新成员】\n\n");
p0=(US*)malloc(sizeof(US)); /*申请新结点存储空间*/
printf("\n请输入新成员姓名:");
scanf("%s",p0->user_name);
while(strcmp(p0->user_name,p1->user_name)!=0&&p1->next!=NULL)
p1=p1->next;
if(strcmp(p0->user_name,p1->user_name)==0)
{
printf("\n该成员已存在!\n");
}
else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/
{
printf("\n\n请输入新成员密码:");
scanf("%s",p0->user_password);
printf("\n\n新成员是否作为家长(是请输入1,否输入0):");
scanf("%d",&p0->user_flag);
while(p->next)
{
p=p->next;
}
if(h_user==NULL)
h_user=p0; /*此处分两种情况,链表中没有数据,head直接指向p0处*/ //尾插法
else
p->next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/
p0->next=NULL;
printf("\n新成员添加成功!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 2删除家庭成员
* 其它说明: 无
****************************************************************************************************************/
void Delete_user(US *h_user,PE *h_people) //删除成员登录信息
{
US *p,*q;
int c;
system("cls");
char name[10];
p=h_user;
printf("\n 【删除家庭成员】\n\n请输入要删除的家庭成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(p->next!=NULL&&!strcmp(p->next->user_name,name))
{
if(p->next->user_flag==1)
{
printf("%s成员为家长,无权限删除!\n",name);
break;
}
printf("确认删除%s成员?(是请输入1,否输入0)",name);
scanf("%d",&c);
if(c==1)
{
q=p->next;
p->next=q->next;
free(q);
printf("成功删除%s成员!\n",name);
break;
}
else if(c==0)
{
printf("已放弃删除操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
{
printf("未找到此成员,删除失败!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 3录入成员收支信息
* 其它说明:成员收支信息包括姓名、收入和支出。
****************************************************************************************************************/
void Add_people(US *h_user,PE *h_people) //录入成员收支信息
{
system("cls");
PE *p,*p0,*p1;
p=p1=h_people;
printf("\n 【录入成员收支信息】\n\n请按以下顺序录入成员收支信息:\n");
p0=(PE*)malloc(sizeof(PE)); /*申请新结点存储空间*/
printf("\n请输入姓名:");
scanf("%s",p0->people_name);
while(strcmp(p0->people_name,p1->people_name)!=0&&p1->next!=NULL)
p1=p1->next;
if(strcmp(p0->people_name,p1->people_name)==0) /*此处分两种情况*/
{
printf("\n该成员收支信息已存在!\n");
}
else
{
printf("\n请输入收入(元):");
scanf("%d",&p0->people_income);
printf("\n请输入支出(元):");
scanf("%d",&p0->people_output);
printf("\n······\n录入成功。\n");
while(p->next)
{
p=p->next;
}
if(h_people==NULL)
h_people=p0; /*此处分两种情况,链表中没有数据,head直接指向p0处*/
else
p->next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/
p0->next=NULL;
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 4删除成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Delete_people(US *h_user,PE *h_people)//删除成员收支信息
{
system("cls");
PE *p,*q;
int c;
char name[10];
p=h_people;
printf("\n 【删除收支信息】\n\n请输入需要删除收支信息的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(p->next!=NULL&&!strcmp(p->next->people_name,name))
{
printf("确认删除%s成员的收支信息?(是请输入1,否输入0)",name); //删除判断
scanf("%d",&c);
if(c==1)
{
q=p->next;
p->next=q->next;
free(q);
printf("成功删除%s成员收支信息!\n",name);
break;
}
else if(c==0)
{
printf("已放弃删除操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
{
printf("未找到此成员,删除失败!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 5查找成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Print_people(PE *p)//输出成员收支信息
{
printf("\n%s成员收支信息如下:\n\n",p->people_name);
printf("成员姓名\t收入\t\t支出\t\t总计\n");
printf("%s\t\t%d\t\t%d\t\t%d\n",p->people_name,p->people_income,p->people_output,p->people_income-p->people_output);
}
void Find_people1(US *h_user,PE *h_people)//查找成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
char name[10];
printf("\n 【成员收支信息查询】\n\n");
printf("请输入要查询的成员名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->people_name,name)==0)
{
Print_people(p);
break;
}
}
if(p==NULL)
printf("没有相关信息!");
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
void Find_people2(US *h_user,PE *h_people)//查找成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
char name[10];
printf("\n 【成员收支信息查询】\n\n");
printf("请输入要查询的成员名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->people_name,name)==0)
{
Print_people(p);
break;
}
}
if(p==NULL)
printf("没有相关信息!");
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu2(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 6浏览成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Print_allpeople1(US *h_user,PE *h_people)//输出全部成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
int allin=0,allout=0,all=0;//收入 支出 总计
if(p!=NULL)
{
printf("\n全部成员收支信息如下:\n\n");
printf("成员姓名\t收入\t\t支出\t\t总计\n");
while(p!=NULL)
{
printf("%s\t\t%d\t\t%d\t\t%d\n",p->people_name,p->people_income,p->people_output,p->people_income-p->people_output);
allin=p->people_income+allin;
allout=p->people_output+allout;
all=p->people_income-p->people_output+all;
p = p->next;
}
printf("\n统计\t\t收入\t\t支出\t\t总计\n");
printf("\t\t%d\t\t%d\t\t%d\n",allin,allout,all);
}
else
{
printf("没有成员信息!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
void Print_allpeople2(US *h_user,PE *h_people)//输出全部成员收支信息
{
system("cls");
PE *p;
p=h_people->next;
int allin=0,allout=0,all=0;
if(p!=NULL)
{
printf("\n全部成员收支信息如下:\n\n");
printf("成员姓名\t收入\t\t支出\t\t总计\n");
while(p!=NULL)
{
printf("%s\t\t%d\t\t%d\t\t%d\n",p->people_name,p->people_income,p->people_output,p->people_income-p->people_output);
allin=p->people_income+allin;
allout=p->people_output+allout;
all=p->people_income-p->people_output+all;
p = p->next;
}
printf("\n统计\t\t收入\t\t支出\t\t总计\n");
printf("\t\t%d\t\t%d\t\t%d\n",allin,allout,all);
}
else
{
printf("没有成员信息!\n");
}
printf("\n按任意键返回主菜单..\n");
getch();
system("cls");
Menu2(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 7修改成员收支信息
* 其它说明:无
****************************************************************************************************************/
void Change_people(US *h_user,PE *h_people) //修改成员收支信息
{
system("cls");
PE *p;
int in,out;
int c;
char name[10];
p=h_people;
printf("\n【修改成员收支信息】\n\n");
printf("\n请输入要修改的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->people_name,name)==0)
{
printf("已经找到%s成员,是否确认修改?(是请输入1,否输入0)",name);//修改判断
scanf("%d",&c);
if(c==1)
{
printf("\n请输入成员的收入:");
scanf("%d",&in);
p->people_income=in;
printf("\n请输入成员的支出:");
scanf("%d",&out);
p->people_output=out;
printf("\n%s成员信息修改完毕!\n\n",name);
Print_people(p);
break;
}
else if(c==0)
{
printf("已放弃修改操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
printf("\n此成员不存在!\n\n按任意键返回菜单..\n");
printf("\n按任意键返回菜单..\n\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 8排序成员收支信息
* 其它说明:插入排序算法
****************************************************************************************************************/
void List(US *h_user,PE *h_people)//家庭成员收入排行浏览
{
PE *h1,*h2,*h3; //h2用来指向需要插入的结点,h3用来指向h2的前一个结点
for(h3=h_people,h2=h_people->next;h2!=NULL;)
{
h1=h_people; //h1用来遍历寻找合适的插入位置
for(;h1!=h2;h1=h1->next)
{
if(h1->next->people_income<h2->people_income)//如果找到,即把h2所指向的结点插到h1后面,然后跳出循环
{
h3->next=h2->next;
h2->next=h1->next;
h1->next=h2;
h2=h3->next;
break;
}
}
if(h1==h2)//此处需要注意,只在h2所指结点不需要前插时,移动h2和h3
{
h2=h2->next;
h3=h3->next;
}
}
printf("\n按任意键输出..\n\n");
getch();
system("cls");
Print_allpeople1(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 9修改密码
* 其它说明:无
****************************************************************************************************************/
void Change_code1(US *h_user,PE *h_people)
{
system("cls");
US *p;
int c;
char name[10],password[10];
p=h_user;
printf("\n【修改成员密码】\n\n");
printf("\n请输入要修改的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->user_name,name)==0)
{
printf("\n已经找到%s成员,是否确认修改密码?(是请输入1,否输入0)",name);//修改判断
scanf("%d",&c);
if(c==1)
{
printf("\n请输入成员的新密码:");
scanf("%s",password);
strcpy(p->user_password,password);
printf("\n%s成员密码修改成功!\n\n",name);
break;
}
else if(c==0)
{
printf("已放弃修改操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
printf("\n此成员不存在!\n\n按任意键返回菜单..\n");
printf("\n按任意键返回菜单..\n\n");
getch();
system("cls");
Menu1(h_user,h_people);
}
void Change_code2(US *h_user,PE *h_people)
{
system("cls");
US *p;
int c;
char name[10],password[10];
p=h_user;
printf("\n【修改成员密码】\n\n");
printf("\n请输入要修改的成员姓名:");
scanf("%s",name);
for(;p!=NULL;p=p->next)
{
if(strcmp(p->user_name,name)==0)
{
printf("\n已经找到%s成员,是否确认修改密码?(是请输入1,否输入0)",name);//修改判断
scanf("%d",&c);
if(c==1)
{
printf("\n请输入成员的新密码:");
scanf("%s",password);
strcpy(p->user_password,password);
printf("\n%s成员密码修改成功!\n\n",name);
break;
}
else if(c==0)
{
printf("已放弃修改操作!\n");
break;
}
else
{
printf("您的输入有误!\n");
break;
}
}
}
if(p==NULL)
printf("\n此成员不存在!\n\n按任意键返回菜单..\n");
printf("\n按任意键返回菜单..\n\n");
getch();
system("cls");
Menu2(h_user,h_people);
}
/**************************************************************************************************************
* 功能描述: 保存退出
* 其它说明:无
****************************************************************************************************************/
void Save(US *h_user,PE *h_people) /*保存信息*/
{
Save_User(h_user);
Save_People(h_people);
}
void Save_User(US *h_user)//保存成员登陆信息
{
FILE *fp_user;
US *p,*p0;
p=h_user;
if((fp_user=fopen("User.txt","w"))==NULL)//创建文件,进行保存
{
printf("\n文件保存失败!\n请重新启动本系统...\n");
exit(0);
}
while(p!=NULL)
{
if(fwrite(p,sizeof(US),1,fp_user)!=1)//将链表中的信息写入文件中
printf("\n写入文件失败!\n请重新启动本系统!\n");
p0=p;
p=p->next;
free(p0); //释放所有结点
}
h_user=NULL;
fclose(fp_user); //关闭文件
}
void Save_People(PE *h_people) //保存成员收支信息
{
FILE *fp_people;//创建文件型指针
PE *p,*p0;
p=h_people;
if((fp_people=fopen("People.txt","w"))==NULL)//创建文件,进行保存
{
printf("\n文件保存失败!\n请重新启动本系统...\n");
exit(0);
}
while(p!=NULL)
{
if(fwrite(p,sizeof(PE),1,fp_people)!=1)//将链表中的信息写入文件中
printf("\n写入文件失败!\n请重新启动本系统!\n");
p0=p;
p=p->next;
free(p0);
}
h_people=NULL;
fclose(fp_people); //关闭文件
}
void Load(US *h_user,PE *h_people) //加载信息
{
Load_User(h_user);
Load_People(h_people);
}
void Load_User(US *h_user) //加载成员登录信息
{
US *p1,*p2,*p3;
FILE *fp; //创建文件型指针
fp=fopen("User.txt","r"); //打开文件
p1=(US *)malloc(sizeof(US));
fread(p1,sizeof(US),1,fp);
h_user=p3=p2=p1;
while(!feof(fp)) //读出信息,重新链入链表
{
p1=(US *)malloc(sizeof(US));
fread(p1,sizeof(US),1,fp);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fp); //关闭文件
}
void Load_People(PE *h_people) //加载成员收支信息
{
PE *p1,*p2,*p3;
FILE *fp; //创建文件型指针
fp=fopen("People.txt","r"); //打开文件
p1=(PE *)malloc(sizeof(PE));
fread(p1,sizeof(PE),1,fp);
h_people=p3=p2=p1;
while(!feof(fp)) //读出信息,重新链入链表
{
p1=(PE *)malloc(sizeof(PE));
fread(p1,sizeof(PE),1,fp);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fp); //关闭文件
}
/**************************************************************************************************************
* 功能描述: 0退出
* 其它说明:无
****************************************************************************************************************/
int out() //系统退出界面
{
printf("\n\n 『谢谢使用家庭财务管理系统』\n\n\n\n\n");
exit(0);
return 0;
}
/*系统不能正常运行,主要是在登陆注册的时候不能使用。求助各位大神帮忙!!!!急急急急!!!*//