求助各位大神!!!C语言(链表系统)

#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;

}


/*系统不能正常运行,主要是在登陆注册的时候不能使用。求助各位大神帮忙!!!!急急急急!!!*//

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页