C# · 12月 20, 2021

数据结构与算法程序设计——宿舍管理系统

#include

#include

#include

#include

#include

#define MAX 10

using namespace std;

struct Stu

{

    char seId[20];

    char seName[20];

    char cGender[10];

    char seCollege[40];

    char seMajor[40];

    char seClass[40];

    char seDrom[20];

};

typedef struct Student

{

    struct Stu date;

    struct Student *next;

} Student;

struct DORM

{

    char dorm[20];

    int stuNum;

};

typedef struct Dorm

{

    struct DORM date;

    struct Dorm *next;

    Student *next1;

} Dorm;

struct FlOOR

{

    char floor[20];

    int DormNum;

};

typedef struct Floor

{

    struct FlOOR date;

    struct Floor *next;

    struct Dorm *next1;

} Floor;

struct BUILD

{

    char build[20];

    int floorNum;

};

typedef struct Building

{

    struct Floor *next1;

    struct BUILD date;

} Building;

int SentenceFull(int n);//判满

void LegalInput(char *str,int n);//数字字符串合法输入

void stringInput(char *str,int n);//合法输入

void SexSelection(char *str);//性别选择

void print_Stu(struct Stu F);//输出学生详情

void print_Dorm(Dorm *F);//输出寝室详情

void print_Floor(Floor *F);//输出楼层详情

void print_Build(Building *F);//输出宿舍楼详情

Student *Tofind_stu(Student *F,char id[]);//按学号查找学生

Dorm *Tofind_dorm(Dorm *F,char id[],int n);//按寝室号查找寝室,n>4,嵌套查学生

Floor *Tofind_floor(Floor *F,char id,int n);//按楼层号查找楼层

void Find_Stu(Student *F);//查找 并输出学生详情

void Find_Dorm(Dorm *F);//查找并输出寝室详情

void Find_Floor(Floor *F);//查找并输出楼层详情

void Sort_stu(Student *L);//按学号将学生从小到大排序

void Sort_Dorm(Dorm *L);//按寝室号将寝室从小到大排序

void Sort_Floor(Floor *L);//按楼层号将楼层从小到大排序

void StudentInformation(struct Stu *F,char dorm[]);//录入学生信息

void CreatStudent(Student **F,char dorm[],int n);//创建n个学生

void CreatDorm(Dorm **F,int n);//创建n个寝室

void CreatFloor(Floor **F,int n);//创建n层楼层

void CreatBuild(Building **F,int n);//创建n栋大楼

void modify_stu(Student *F);//修改学生信息

void DeleteStudet(Student **F,char id[]);//按学号删除学生

void Delete_Stu(Student **D);//删除学生,寝室版

int Delete_Dorm(Dorm **L,char dorm[]);//删除寝室

int Delete_Floor(Floor **L,char floor[]);//删除楼层

int DestroyDorm(Student **L);//清空寝室内所有学生,需手动改变学生数量(D->date.stunum)

int DestroyFloor(Dorm **L);//清空楼层所有寝室,需手动改变寝室数量(D->date.dornNum)

int DestroyBuild(Floor **L);//清空大楼

int  OperationDorm(Dorm **F);//寝室操作

int OperationFloor(Floor **F);//楼层操作

int OperationBuild(Building **F);//大楼操作

int FileStore(Building *B);//从文件读取

int FileRead(Building **D);//存储链表到文件

//判断选择

int SentenceFull(int n)

{

    int x;

    scanf(“%d”,&x);

    if(n+x=0)

    {

        return x;

    }

    else

    {

        printf(“输入错误,请重新输入n”);

        SentenceFull(n);

    }

}

void stringInput(char *str,int n)//合法输入

{

    scanf(“%s”,str);

    getchar();

    while(strlen(str)>n)

    {

        printf(“长度超过 %d,重新输入n”,n);

        scanf(“%s”,str);

        getchar();

    }

}

void LegalInput(char *str,int n)//数字字符串合法输入

{

    scanf(“%s”,str);

    getchar();

    int i=0;

    if(strlen(str)<n)

    {

        for(int i=0; i<strlen(str); i++)

        {

            if(str[i]>’9’||str[i]<'0')

            {

                printf(“输入的字符非数字,请重新输入n”);

                LegalInput(str,n);

            }

        }

    }

    if(strlen(str)>n)

    {

        printf(“长度超过 %d,n);

        LegalInput(str,n);

    }

}

void SexSelection(char *str)//性别选择

{

    printf(“男0,女1  “);

    int n=0;

    scanf(“%d”,&n);

    if(n==0)

        strcpy(str,”男”);

    if(n==1)

        strcpy(str,”女”);

}

//输出

void print_Stu(struct Stu F)

{

    printf(“—————————-n”);

    printf(“|                          |n”);

    printf(“|学号:     %s       n”,F.seId);

    printf(“|名字:     %s      n”,F.seName);

    printf(“|性别:     %s     n”,F.cGender);

    printf(“|寝室:     %s      n”,F.seDrom);

    printf(“|学院:     %s   n”,F.seCollege);

    printf(“|专业:     %s     n”,F.seMajor);

    printf(“|班级:     %s     n”,F.seClass);

    printf(“|                          |n”);

    printf(“—————————-n”);

}

void print_Dorm(Dorm *F)

{

    printf(”      寝室号:  %sn”,F->date.dorm);

    Student *p1;

    p1=F->next1;

    if(F->date.stuNum==0)

        printf(“寝室为空n”);

    while(p1!=NULL)

    {

        printf(“————————n”);

        printf(“学号:%s   n”,p1->date.seId);

        printf(“名字:%s n”,p1->date.seName);

        printf(“————————n”);

        p1=p1->next;

    }

}

void print_Floor(Floor *F)

{

    printf(”       楼层名:%s  n”,F->date.floor);

    Dorm *p1;

    p1=F->next1;

    if(F->date.DormNum==0)

        printf(“楼层为空n”);

    while(p1!=NULL)

    {

        printf(“—————————n”);

        printf(“寝室号:%s    n”,p1->date.dorm);

        printf(“学生数量:%dn”,p1->date.stuNum);

        printf(“—————————n”);

        p1=p1->next;

    }

}

void print_Build(Building *F)

{

    printf(”        大楼:  %sn”,F->date.build);

    Floor *p1;

    p1=F->next1;

    if(F->date.floorNum==0)

        printf(“大楼为空n”);

    while(p1!=NULL)

    {

        printf(“—————————-n”);

        printf(“楼层名:%s    n”,p1->date.floor);

        printf(“寝室数量:%dn”,p1->date.DormNum);

        printf(“—————————-n”);

        p1=p1->next;

    }

}

//查找

Student *Tofind_stu(Student *F,char id[])//查学生

{

    Student *p1,*p2=NULL;

    p1=F;

    while(p1!=NULL)

    {

        if(strcmp(p1->date.seId,id)==0)

        {

            p2=p1;

            break;

        }

        if(strcmp(p1->date.seName,id)==0)

        {

            p2=p1;

            break;

        }

        else p1=p1->next;

    }

    if(p1==NULL)

        return p1;

    else

    {

        return p2;

    }

}

Dorm *Tofind_dorm(Dorm *F,int n)

{

    Dorm *p1,*p2=NULL;

    p1=F;

    int flag=0;

    while(p1!=NULL)

    {

        if(n>4)

        {

            Tofind_stu(p1->next1,id);

        }

        if(strcmp(p1->date.dorm,id)==0)

        {

            p2=p1;

            break;

        }

        else p1=p1->next;

    }

    if(p1==NULL)

        return p1;

    else

    {

        return p2;

    }

}

Floor *Tofind_floor(Floor *F,int n)

{

    Floor *p1,*p2=NULL;

    p1=F;

    int flag=0;

    while(p1!=NULL)

    {

        if(n>3)

        {

            Tofind_dorm(p1->next1,id,n);

        }

        if(strcmp(p1->date.floor,id)==0)

        {

            p2=p1;

            break;

        }

        else p1=p1->next;

    }

    if(p1==NULL)

        return p1;

    else

    {

        return p2;

    }

}

//查找加输出

void Find_Stu(Student *F)

{

    Student *p1=NULL;

    char id[20];

    printf(“查询学生学号:    “);

    LegalInput(id,20);

    p1=Tofind_stu(F,id);

    if(p1==NULL)

    {

        printf(“该学生不存在n”);

        printf(“—————————-nn”);

    }

    if(p1)

    {

        printf(“—————————-n”);

        printf(“|                          |n”);

        print_Stu(p1->date);

        printf(“|   修改信息 1     返回    |n”);

        printf(“|                          |n”);

        printf(“—————————-nn”);

        int n;

        scanf(“%d”,&n);

        if(n==1)

        {

            modify_stu(p1);

        }

    }

}

void Find_Dorm(Dorm *F)

{

    Dorm *p1=NULL;

    char id[20];

    printf(“查询寝室:   “);

    scanf(“%s”,id);

    p1=Tofind_dorm(F,4);

    if(p1==NULL)

    {

        printf(“该寝室不存在n”);

        printf(“—————————-nn”);

    }

    if(p1)

    {

        printf(“—————————-n”);

        printf(“|                          |n”);

        print_Dorm(p1);

        printf(“|    操作   1      返回    |n”);

        printf(“|                          |n”);

        printf(“—————————-nn”);

        int n;

        scanf(“%d”,&n);

        if(n==1)

        {

            OperationDorm(&p1);

        }

    }

}

void Find_Floor(Floor *F)

{

    Floor *p1=NULL;

    char id[20];

    printf(“查询楼层:   “);

    scanf(“%s”,id);

    p1=Tofind_floor(F,3);

    if(p1==NULL)

    {

        printf(“该楼层不存在n”);

        printf(“—————————-nn”);

    }

    if(p1)

    {

        printf(“—————————-n”);

        printf(“|                          |n”);

        print_Floor(p1);

        printf(“|    操作 1   返回         |n”);

        printf(“|                          |n”);

        printf(“—————————-nn”);

        int n;

        scanf(“%d”,&n);

        if(n==1)

        {

            OperationFloor(&p1);

        }

    }

}

//排序

void Sort_stu(Student *L)

{

    Student *p,*q;

    Stu temp;

    for (p=L; p!=NULL; p=p->next)

    {

        for(q=p->next; q!=NULL; q=q->next)

        {

            if(strcmp(p->date.seId,q->date.seId)<0)

            {

                temp=q->date;

                q->date=p->date;

                p->date=temp;

            }

        }

    }

}

void Sort_Dorm(Dorm *L)

{

    Dorm *p,*q;

    Dorm temp;

    for (p=L; p!=NULL; p=p->next)

    {

        for(q=p->next; q!=NULL; q=q->next)

        {

            if(strcmp(p->date.dorm,q->date.dorm)<0)

            {

                temp.date=q->date;

                temp.next1=q->next1;

                q->date=p->date;

                q->next1=p->next1;

                p->date=temp.date;

                p->next1=temp.next1;

            }

        }

    }

}

void Sort_Floor(Floor *L)

{

    Floor *p,*q;

    Floor  temp;

    for (p=L; p!=NULL; p=p->next)

    {

        for(q=p->next; q!=NULL; q=q->next)

        {

            if(strcmp(p->date.floor,q->date.floor)<0)

            {

                temp.date=q->date;

                temp.next1=q->next1;

                q->date=p->date;

                q->next1=p->next1;

                p->date=temp.date;

                p->next1=temp.next1;

            }

        }

    }

}

//创建

void StudentInformation(struct Stu *F,char dorm[])//录入学生信息

{

    char id[20];

    printf(“————————————-n”);

    printf(“学号:  “);

    LegalInput(id,20);

    if(id==”000″)

        F=NULL;

    else

    {

        strcpy((*F).seId,id);

        printf(“名字:  “);

        stringInput( (*F).seName,20);

        printf(“性别:  “);

        SexSelection((*F).cGender);

        printf(“学院:  “);

        stringInput((*F).seCollege,40);

        printf(“专业:   “);

        stringInput((*F).seMajor,40);

        printf(“班级:   “);

        stringInput( (*F).seClass,40);

        strcpy((*F).seDrom,dorm);

        printf(“n学生%s 信息录入成功n”,(*F).seName);

        printf(“————————————-nn”);

    }

}

void CreatStudent(Student **F,int n)//插入n个学生

{

    if(n==0)

        (*F)=NULL;

    else

    {

        for(int i=0; i<n; i++)

        {

            Student *p1=new Student;

            StudentInformation(&(p1->date),dorm);

            p1->next = NULL;

            if(*F)

            {

                p1->next=(*F)->next;

                (*F)->next=p1;

            }

            else

            {

                *F = p1;

            }

        }

    }

}

void CreatDorm(Dorm **F,int n)//创建寝室

{

    if(n==0)

        (*F)=NULL;

    else

    {

        for(int i=0; i<n; i++)

        {

            Dorm *p1;

            int num;

            printf(“n————————————-n”);

            printf(“寝室号:   “);

            char id[20];

            scanf(“%s”,id);

            printf(“寝室学生人数(<=10):    ");//输入寝室人数

            scanf(“%d”,&num);

            if(num<0)

                p1=NULL;

            else

            {

                p1=new Dorm;

                p1->date.stuNum=num;

                strcpy(p1->date.dorm,id);

                Student * D = NULL;

                CreatStudent(&D,num);

                p1->next1=D;

            }

            p1->next=NULL;

            if(*F)

            {

                p1->next=(*F)->next;

                (*F)->next=p1;

            }

            else

            {

                *F = p1;

            }

        }

        printf(“寝室%s创建成功n”,(*F)->date.dorm);

        printf(“————————————-nn”);

    }

}

void CreatFloor(Floor **F,int n)//创建楼层

{

    if(n==0)

        (*F)=NULL;

    else

    {

        for(int i=0; i<n; i++)

        {

            Floor *p1;

            int num;

            printf(“————————————-nn”);

            printf(“楼层名:”);

            char floor[20];

            scanf(“%s”,floor);

            printf(“楼层寝室数量:(<=10)");//输入寝室数量

            scanf(“%d”,&num);

            if(num<0)

                p1=NULL;

            else

            {

                p1=new Floor;

                p1->date.DormNum=num;

                strcpy(p1->date.floor,floor);

                printf(“请输入寝室信息n”);

                Dorm * D = NULL;

                CreatDorm(&D,p1->date.DormNum);

                p1->next1=D;

            }

            p1->next=NULL;

            if(*F!=NULL)

            {

                p1->next=(*F)->next;

                (*F)->next=p1;

            }

            else

            {

                *F=p1;

            }

        }

        printf(“楼层%s创建成功nn”,(*F)->date.floor);

        printf(“————————————-nn”);

    }

}

void CreatBuild(Building **F)

{

    Building *p1;

    printf(”            创建宿舍楼n”);

    printf(“————————————-n”);

    printf(“宿舍楼名称:  “);

    char build[20];

    scanf(“%s”,build);

    int num;

    printf(“楼层数量:(<=10)  ");

    num=SentenceFull(0);

    if(num<0)

        p1=NULL;

    else

    {

        p1=new  Building;

        p1->date.floorNum=num;

        strcpy(p1->date.build,build);

        printf(”           请输入楼层信息n”);

        printf(“————————————-nn”);

        Floor * D = NULL;

        CreatFloor(&D,p1->date.floorNum);

        p1->next1=D;

    }

    *F = p1;

}

//修改

void modify_stu(Student *F)//学生信息修改

{

    printf(“_____________________________n”);

    printf(“|修改名字 1      “);

    printf(“修改学号 2      n”);

    printf(“|修改性别 3      |”);

    printf(“修改班级 4      n”);

    printf(“|修改学院 5      “);

    printf(“修改专业 6      |n”);

    printf(“_____________________________n”);

    printf(“请输入选择:”);

    int n;

    scanf(“%d”,&n);

    if(F!=NULL)

    {

        if(n==1)

        {

            printf(“输入修改后学生名字.”);

            char name[20];

            stringInput(name,20);

            memset(F->date.seName,”,20*sizeof(char));

            strcpy(F->date.seName,name);

        }

        if(n==2)

        {

            printf(“输入修改后学生学号 “);

            char ID[20];

            scanf(“%s”,ID);

            memset(F->date.seId,20*sizeof(char));

            strcpy(F->date.seId,ID);

        }

        if(n==3)

        {

            printf(“输入学生性别”);

            char Gender[10];

            SexSelection(Gender);

            memset(F->date.cGender,10*sizeof(char));

            strcpy(F->date.cGender,Gender);

        }

        if(n==4)

        {

            printf(“输入修改后学生所在班级”);

            char College[40];

            stringInput( College,40);

            memset(F->date.seCollege,40*sizeof(char));

            strcpy(F->date.seCollege,College);

        }

        if(n==5)

        {

            printf(“输入修改后学生所在学院”);

            char Major[40];

            stringInput(Major,40);

            memset(F->date.seMajor,40*sizeof(char));

            strcpy(F->date.seMajor,Major);

        }

        if(n==6)

        {

            printf(“输入修改后学生所在专业 “);

            char Class[40];

            stringInput( Class,40);

            memset(F->date.seClass,40*sizeof(char));

            strcpy(F->date.seClass,Class);

        }

    }

}

//删除

void  DeleteStudet(Student **F,char id[])//删除学生

{

    Student  *p=*F;

    Student  *q=NULL;

    if(strcmp(p->date.seId,id)==0)

    {

        *F=p->next;

        free(p);

    }

    else

    {

        while(p!=NULL)

        {

            q=p;

            p=p->next;

            if (p == NULL)//遍历完也没找到

            {

                printf(“没有找到要删除的学生n”);

            }

            else if(strcmp(p->date.seId,id)==0)

            {

                q->next = p->next;

                delete(p);

                break;

            }

            else

            {

                printf(“没有找到要删除的学生n”);

            }

        }

    }

}

void Delete_Stu(Student **D)

{

    char id[20];

    printf(“————————————-n”);

    printf(“请输入要删除学生的学号n”);

    LegalInput(id,20);

    DeleteStudet(D,id);

    printf(“学生%s已删除n”,id);

    printf(“————————————-nn”);

}

int Delete_Dorm(Dorm **L,char dorm[])//删除寝室

{

    Dorm *p=*L;

    Dorm  *q=NULL;

    if(strcmp(p->date.dorm,dorm)==0)

    {

        *L=p->next;

        free(p);

    }

    else

    {

        while(p!=NULL)

        {

            q=p;

            p=p->next;

            if (p == NULL)//遍历完也没找到

            {

                printf(“没有找到要删除的寝室n”);

            }

            else if(strcmp(p->date.dorm,dorm)==0)

            {

                DestroyDorm(&q->next1);

                q->next = p->next;

                delete(p);

                break;

            }

            else

            {

                printf(“没有找到要删除的寝室n”);

            }

        }

    }

}

int Delete_Floor(Floor **L,char floor[])

{

    Floor *p=*L;

    Floor  *q=NULL;

    if(strcmp(p->date.floor,floor)==0)

    {

        *L=p->next;

        free(p);

    }

    else

    {

        while(p!=NULL)

        {

            q=p;

            p=p->next;

            if (p == NULL)//遍历完也没找到

            {

                printf(“没有找到要停用的楼层n”);

            }

            else if(strcmp(p->date.floor,floor)==0)

            {

                DestroyFloor(&q->next1);

                q->next = p->next;

                delete(p);

                break;

            }

            else

            {

                printf(“没有找到要停用的楼层n”);

            }

        }

    }

}

int DestroyDorm(Student **L)//清空寝室

{

    Student *q;

    while(*L)

    {

        q=(*L)->next;

        free(*L);

        *L=q;

    }

    return 1;

}

int DestroyFloor(Dorm **L)//清空楼层

{

    Dorm *q;

    while(*L)

    {

        q=(*L)->next;

        Dorm * D =*L;

        DestroyDorm(&D->next1);

        free(*L);

        *L=q;

    }

    return 1;

}

int DestroyBuild(Floor **L)//清空大楼

{

    Floor *q;

    while(*L)

    {

        q=(*L)->next;

        Floor * D =*L;

        DestroyFloor(&D->next1);

        free(*L);

        *L=q;

    }

    return 1;

}

//操作

int  OperationDorm(Dorm **F)

{

    Dorm * D = NULL;

    D=*F;

    printf(“————————————n”);

    printf(“|                                  |n”);

    printf(“|    寝室详情 0      清空寝室 1    |n”);

    printf(“|    添加学生 2      查看学生 3    |n”);

    printf(“|    修改学生 4      删除学生 5    |n”);

    printf(“|               退出               |n”);

    printf(“|                                  |n”);

    printf(“————————————n”);

    int n;

    scanf(“%d”,&n);

    if(n==0)//寝室详情

    {

        print_Dorm(D);

        OperationDorm(&D);

    }

    if(n==1)//清空寝室

    {

        if(D->date.stuNum>0)

        {

            DestroyDorm(&D->next1);

            D->date.stuNum=0;

            printf(“寝室已清空n”);

        }

        else printf(“寝室为空n”);

        OperationDorm(&D);

    }

    if(n==2)//添加学生

    {

        if( D->date.stuNum<MAX)

        {

            int x;

            printf(“请输入添加学生数量date.stuNum);

            x=SentenceFull(D->date.stuNum);

            CreatStudent(&D->next1,*&(D->date.dorm),x);

            D->date.stuNum=D->date.stuNum+x;

            Sort_stu(D->next1);

        }

        else printf(“寝室已满”);

        OperationDorm(&D);

    }

    if(n==3)//查看学生

    {

        if(D->date.stuNum>0)

        {

            Find_Stu(D->next1);

            Sort_stu(D->next1);

        }

        else printf(“寝室为空n”);

        OperationDorm(&D);

    }

    if(n==4)

    {

        if(D->date.stuNum>0)

        {

            Student *p1=NULL;

            char id[20];

            printf(“请输入要修改学生的学号n”);

            LegalInput(id,20);

            p1=Tofind_stu(D->next1,id);

            modify_stu(p1);

            print_Stu(p1->date);

            Sort_stu(D->next1);

        }

        OperationDorm(&D);

    }

    if(n==5)//删除学生

    {

        if(D->date.stuNum>0)

        {

            Delete_Stu(&D->next1);

            print_Dorm(D);

        }

        OperationDorm(&D);

    }

    if(n==6)

    {

        return 0;

    }

}

int OperationFloor(Floor **F)

{

    Floor* D = NULL;

    D=*F;

    printf(“————————————n”);

    printf(“|                                  |n”);

    printf(“|    楼层详情 0      清空楼层 1    |n”);

    printf(“|    添加寝室 2      查看寝室 3    |n”);

    printf(“|    寝室操作 4      删除寝室 5    |n”);

    printf(“|               退出               |n”);

    printf(“|                                  |n”);

    printf(“————————————n”);

    int n;

    scanf(“%d”,&n);

    if(n==0)//楼层详情

    {

        print_Floor(D);

        OperationFloor(&D);

    }

    if(n==1)//清空楼层

    {

        if(D->date.DormNum>0)

        {

            DestroyFloor(&D->next1);

            D->date.DormNum=0;

        }

        else printf(“寝室为空n”);

        OperationFloor(&D);

    }

    if(n==2)//添加寝室

    {

        if( D->date.DormNum<MAX)

        {

            int x;

            printf(“请输入添加寝室数量date.DormNum);

            x=SentenceFull(D->date.DormNum);

            CreatDorm(&D->next1,x);

            D->date.DormNum=D->date.DormNum+x;

            Sort_Dorm(D->next1);

        }

        else printf(“楼层已满”);

        OperationFloor(&D);

    }

    if(n==3)//查看寝室

    {

        if(D->date.DormNum>0)

        {

            Find_Dorm(D->next1);

        }

        else printf(“楼层为空n”);

        OperationFloor(&D);

    }

    if(n==4)

    {

        if(D->date.DormNum>0)

        {

            printf(“请输入要进行操作的寝室号”);

            Dorm *p1=NULL;

            char id[20];

            LegalInput(id,20);

            p1=Tofind_dorm(D->next1,4);

            OperationDorm(&p1);

        }

    }

    if(n==5)//删除寝室

    {

        if(D->date.DormNum>0)

        {

            printf(“请输入要删除的寝室号”);

            char id[20];

            LegalInput(id,20);

            Delete_Dorm(&D->next1,id);

            print_Floor(D);

        }

        OperationFloor(&D);

    }

}

int OperationBuild(Building **F)

{

    Building* D = NULL;

    D=*F;

    printf(“————————————n”);

    printf(“|                                  |n”);

    printf(“|    大楼详情 0      清空大楼 1    |n”);

    printf(“|    启用楼层 2      查看楼层 3    |n”);

    printf(“|    楼层操作 4      停用楼层 5    |n”);

    printf(“|               退出               |n”);

    printf(“|                                  |n”);

    printf(“————————————n”);

    int n;

    printf(“请输入选择:  “);

    scanf(“%d”,&n);

    if(n==0)//大楼详情

    {

        print_Build(D);

        OperationBuild(&D);

    }

    if(n==1)

    {

        if(D->date.floorNum>0)

        {

            DestroyBuild(&D->next1);

            D->date.floorNum=0;

        }

        else printf(“大楼为空n”);

        OperationBuild(&D);

    }

    if(n==2)//添加寝室

    {

        if(D->date.floorNum<MAX)

        {

            int x;

            printf(“请输入启用楼层数量date.floorNum);

            x=SentenceFull(D->date.floorNum);

            CreatFloor(&D->next1,x);

            D->date.floorNum=D->date.floorNum+x;

            Sort_Floor(D->next1);

        }

        else printf(“无空闲楼层”);

        OperationBuild(&D);

    }

    if(n==3)//查看楼层

    {

        if(D->date.floorNum>0)

        {

            Find_Floor(D->next1);

        }

        else printf(“大楼为空n”);

        OperationBuild(&D);

    }

    if(n==4)

    {

        if(D->date.floorNum>0)

        {

            printf(“请输入要进行操作的楼层名”);

            Floor *p1=NULL;

            char id[20];

            LegalInput(id,20);

            p1=Tofind_floor(D->next1,4);

            OperationFloor(&p1);

        }

        OperationBuild(&D);

    }

    if(n==5)//删除大楼

    {

        if(D->date.floorNum>0)

        {

            printf(“请输入要停用的楼层名”);

            char id[20];

            LegalInput(id,20);

            Delete_Floor(&D->next1,id);

            D->date.floorNum–;

            print_Build(D);

        }

        OperationBuild(&D);

    }

    return 0;

}

int   FileRead(Building **D)//读文件

{

    FILE *fp,*floor,*dorm,*stu;

    fp=fopen(“Build.txt”,”rb”);

    floor=fopen(“Floor.txt”,”rb”);

    dorm =fopen(“dorm.txt”,”rb”);

    stu=fopen(“student.txt”,”rb”);

    if(fp==NULL||floor==NULL||dorm==NULL ||stu==NULL)

    {

        printf(“打开文件失败!”);

        return NULL;

    }

    Building *H=new Building;

    fread(&H->date,sizeof(BUILD),1,fp);

    Floor *p;

    Floor *q;

    FlOOR t;

    Floor* head=new Floor;

    p=q=head;

    while( fread(&t,sizeof(FlOOR),floor)==1)

    {

        q=new Floor;

        q->date=t;

        Dorm *a;

        Dorm *b;

        DORM x;

        Dorm *z=new Dorm;

        a=z;

        b=z;

        for(int r=0; r<t.DormNum; r++)

        {

            fread(&x,sizeof(DORM),dorm);

            b=new Dorm;

            b->date=x;

            Student *m;

            Student *n=NULL;

            Stu y;

            Student* h=new Student;

            m=n=h;

            int k;

            for(k=0; k<x.stuNum; k++)

            {

                fread(&y,sizeof(Stu),stu);

                n=new Student;

                n->date=y;

                m->next=n;

                m=n;

            }

            m->next=NULL;

            b->next1=h->next;

            a->next=b;

            a=b;

        }

        a->next=NULL;

        q->next1=z->next;

        p->next=q;

        p=q;

    }

    p->next=NULL;

    H->next1=head->next;

    fclose(floor);

    fclose(dorm);

    fclose(stu);

    fclose(fp);

    *D=H;

}

int FileStore(Building *B)//存文件

{

    FILE *fp,”wb”);

    floor=fopen(“Floor.txt”,”wb”);

    dorm =fopen(“dorm.txt”,”wb”);

    stu=fopen(“student.txt”,”wb”);

    if(fp==NULL||floor==NULL||dorm==NULL ||stu==NULL)

    {

        printf(“打开文件失败!”);

        return NULL;

    }

    fwrite(&B->date,fp);

    Floor *F=NULL;

    F=B->next1;

    for(int i=0; idate.floorNum; i++)

    {

        fwrite(&F->date,floor);

        Dorm *D=NULL;

        D=F->next1;

        for(int y=0; ydate.DormNum; y++)

        {

            fwrite(&D->date,dorm);

            学生* S = NULL;

            S = D-> NEXT1;

            for(int k = 0; k date.stuNum; k ++)

            {

                fwrite(&S-> date,sizeof(Stu),1,stu);

                S = S->下;

            }

            D = D-> next;

        }

        F = F-> next;

    }

    fclose(floor);

    FCLOSE(宿舍);

    FCLOSE(STU);

    FCLOSE(FP);

}

int main()

{

    Building * F = NULL,* D = NULL;

    printf(“欢迎进入宿舍管理系统 n”);

    FILE * fp;

    char ch;

    if((fp = fopen(“Build.txt”,“r”))== NULL)

    {

        printf(“文件没打开! n”);

    }

    ch = fgetc(fp);

    if(ch == EOF)

    {

        printf(“没有相应信息,请创建 n”);

        睡眠(1000);

        系统( “CLS”);

        CreatBuild(F);

        FileStore的(F);

        FILEREAD(d);

        OperationBuild(d);

        FILEREAD(d);

    }

    else

    {

        FileRead(&D);

        OperationBuild(d);

    }

    FileStore(F);

}