宿管阿姨都在用的宿舍管理系统,快来试一试。

#include<stdio.h>
#include<math.h>
#include<malloc.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<dos.h>
#include<windows.h>
#include<string.h>
typedef struct  b{
    char  name[9];//姓名
    char   num[12];//学号
     char  sex;//性别
    int str;//楼号
    int floor ;//层号
    int room;//宿舍号
    int bed;//床号
} now;
typedef struct  c
{
    char name[9];
    char num[12];
    char io;//入住或者退出
    char time[9];
}all;
typedef struct a
{
    int str;//楼号
    char sex;//性别
    int floor ;//层号
    int room;//宿舍号
    int  num;//床位的剩余数量;
}dormitory;
    void     dors(dormitory*p,now*w,int j)//删除用的宿舍管理系统
    {
        int k=0,z=0;
        for(;k!=1;z++)
        {
            if(    (p+z)->str==(w+j)->str&&(p+z)->room==(w+j)->room)
            k=1;
         }
         z-=1;
         (p+z)->num+=1;
    }
    void dor(dormitory*p,now*w,int y)
    {
        int z=0,k=0;
        for(;k!=1;z++)
        {
            if((p+z)->str==(w+y-1)->str&&(p+z)->room==(w+y-1)->room)
            k=1;
        }
        z=z-1;
        (p+z)->num=((p+z)->num)-1;

    }
    void insert(dormitory*p,int a)
    {
        int i=1,j=0,k=0,b=0;
         char  sex;
        while(i<6)//设有五栋楼
        {
            fflush(stdin);
            for(j=1;j<7;j++)//每栋有六层
            {
                    for(k=1;k<16;k++)//每层15个寝室;
                    {
                        if(i==1||i==2||i==3)
                    (p+b)->sex='b';
                    else
                    (p+b)->sex='g';
                    (p+b)->str=i;
                    (p+b)->floor=j;
                    (p+b)->room=(j*100+k);
                    (p+b)->num=4;
                    b++;
                    }
            }
            i++;
        }
        
    }    
    void    allss(dormitory*p,all *q,now*w,int j,int v)
    {
        memcpy((q+v)->name,(w+j)->name,strlen((w+j)->name));
        memcpy((q+v)->num,(w+j)->num,strlen((w+j)->num));
        (q+v)->io='o';//入住
        printf("输入时间:(请输入八个数字 前四个为年份 第五第六为月份  第七第八位日份)");
        fflush(stdin);
        scanf("%s",(q+v)->time);
    }
    int  alls(now*w,all *q,int y,int v)
    {
        memcpy((q+v)->name,(w+y-1)->name,strlen((w+y-1)->name));
        memcpy((q+v)->num,(w+y-1)->num,strlen((w+y-1)->num));
        (q+v)->io='i';
        printf("输入该学生入住的时间");
        fflush(stdin);
        scanf("%s",(q+v)->time);
        printf("已成功录入");
        Sleep(2000);
        return v+1;
        
    }
    int out(dormitory*p,all *q,now*w,int y,int v)
    {
        int i,j=0,k=0;
        char num[12];
        fflush(stdin);
        printf("请输入要退出的学生学号:");
        scanf("%s",num);
        for(;k!=1&&j<y;j++)
        {
        if(strcmp(num,(w+j)->num)==0)
            k++;
        }
        if(k==0)
        {
            printf("\n未找到相关学生的信息,三秒后自动返回主界面");
            Sleep(3000);
            return y;
        }
        else
        {
        j-=1;
        char name[9];
        allss(p,q,w,j,v);  
        dors(p,w,j);
        for(;j<y-1;j++)
        {                
                strcpy((w+j)->name,(w+j+1)->name);
                strcpy((w+j)->num,(w+j+1)->num);
                (w+j)->sex=(w+j+1)->sex;
                (w+j)->str=(w+j+1)->str;
                (w+j)->floor=(w+j+1)->floor;
                (w+j)->room=(w+j+1)->room;
                (w+j)->bed=(w+j+1)->bed;
         }
         printf("删除成功\n");
        printf("\n\n\n输入任意键返回主界面\n");
         char o;
         fflush(stdin);
         scanf("%c",&o);
         system("cls");
        return y-1;
        }
    }
    
    int in(dormitory*p,all *q,now*w,int y)
    {
        system("cls");
        int i,j=0,k=0;
        char name[9];
            fflush(stdin);
            printf("请输入姓名:");
            scanf("%s",(w+y)->name);
            fflush(stdin);
            printf("请输入学号:");
            scanf("%s",(w+y)->num);
            while(k<y)
            {
                if(strcmp((w+y)->num,(w+k)->num)==0)
                break;
                 k++;
            }
                 if(k==y)
        {
                fflush(stdin);
            printf("请输入性别:");
            scanf("%c",&(w+y)->sex);
            printf("下面为所有可选择的宿舍:\n"); //此时需要提供相关的宿舍;
            while(j<450)
            {
                if(((p+j)->num)>0&&(p+j)->sex==(w+y)->sex)//检索有空位置的宿舍
                {
                    printf("楼号:%d ",(p+j)->str);
                    printf("层号:%d" ,(p+j)->floor);
                    printf("房间号:%d" ,(p+j)->room);
                    printf("已使用床位:");    
                    for(k=0;k<y;k++)
                {
                if((((p+j)->str)==(w+k)->str)&&((p+j)->room==(w+k)->room))//找相关宿舍的空床位号
                {
                printf("%d号  ",(w+k)->bed);
                }
                }
                printf("\n");
                }
                j++;
             }
                 printf("\n");
             printf("请输入该学生入住的栋数,层数,宿舍号,以及床号:\n");
             scanf("%d%d%d%d",&(w+y)->str,&(w+y)->floor,&(w+y)->room,&(w+y)->bed);
            j=0;
            while(j<y)
            {
                if((w+j)->str==(w+y)->str&&(w+y)->room==(w+j)->room&&(w+y)->bed==(w+j)->bed)
                break;
                j++;
             }
             if(j==y)
            {
            return  y+1;
            }
            else
            {
            printf("该床位已经满,请重新选择,三秒后自动返回主界面");
            Sleep(3000);
            return y;
            }
            }
            if(k!=y)
            {
                printf("输入学号有误\n三秒后自动返回主界面");
                Sleep(3000);
                return y;
            }
            
    }
    
    int one(dormitory*p)
    {
        int k=0,j=0;
        printf("请输入要查询的栋数");
        int y;
        scanf("%d",&y);
        printf("以下宿舍为空寝室\n");
        for(;k<450;k++)
        {
            if((p+k)->str==y&&(p+k)->num==4)
            {printf("%d  ",(p+k)->room);
            j++;
            }
            if(j%10==0&&j>0)
            printf("\n");
         }
         printf("\n");
         printf("共有%d个空宿舍\n",j);
        printf("输入任意键返回主界面\n");
         char o;
         fflush(stdin);
         scanf("%c",&o);
         system("cls");
    }
    int  load2(all*q)
    {
        int k=0;
            FILE* fq;
            fq=fopen("d:\\所有学生出入信息.txt","r");
        while(!feof(fq))
        {
        fscanf(fq,"%s %s %c %s",(q+k)->name,(q+k)->num,&(q+k)->io,(q+k)->time);
        k++;
        }
        fclose(fq);
        return k-1;
    }
     int  load1(dormitory*p,now*w)
     {
         
        int x=0,k=0;
        FILE*  fp;
        FILE* fh;
        fp=fopen("d:\\现有学生信息.txt","r");
        fh=fopen("d:\\宿舍楼信息.txt","r");
        while(!feof(fp))
        {
        fscanf(fp,"%s %s %c %d %d %d %d",(w+x)->name,(w+x)->num,&(w+x)->sex,&(w+x)->str,&(w+x)->floor,&(w+x)->room,&(w+x)->bed);
        x++;
        }
        while(!feof(fh))
        {
        fscanf(fh,"%d %c %d %d %d",&(p+k)->str,&(p+k)->sex,&(p+k)->floor,&(p+k)->room,&(p+k)->num);
        k++;
        }
        fclose(fp);
        fclose(fh);
        return x-1;
     }
    
    void keep(dormitory*p,all *q,now*w,int y,int v)
    {
        int x=0,k=0;
        FILE*  fp;
        FILE* fq;
        FILE* fh;
        fp=fopen("d:\\现有学生信息.txt","wb");
        fq=fopen("d:\\所有学生出入信息.txt","wb");
        fh=fopen("d:\\宿舍楼信息.txt","wb");
        while(x<y)
        {    
            fflush(stdin);
            fprintf(fp,"%s %s %c %d %d %d %d\n",(w+x)->name,(w+x)->num,(w+x)->sex,(w+x)->str,(w+x)->floor,(w+x)->room,(w+x)->bed);
             fflush(stdin);
            x++;
        }
        while(k<v)
        {    fflush(stdin);
        fprintf(fq,"%s %s %c %s\n",(q+k)->name,(q+k)->num,(q+k)->io,(q+k)->time);
            
        k++;
        }
        k=0;
        while(k<450)
        {    
        fflush(stdin);
        fprintf(fh,"%d %c %d %d %d\n",(p+k)->str,(p+k)->sex,(p+k)->floor,(p+k)->room,(p+k)->num);
        fflush(stdin);
        k++;
        }
        fclose(fp);
        fclose(fq);
        fclose(fh);
        
    }
    void two(dormitory*p,now*w,int y)
    {
        printf("请输入要查询的宿舍的栋数和宿舍号;\n");
        int a,b,s=0,k=0,j=0;
        scanf("%d%d",&a,&b);
        for(;s!=1;j++)
        {
            if((p+j)->str==a&&(p+j)->room==b)
            {
                printf("该宿舍的空床位数目为%d\n",(p+j)->num);
                s=1;
        
            printf("已使用的床位为:");
            for(k=0;k<y;k++)
                {
                if(a==(w+k)->str&&b==(w+k)->room)//找相关宿舍的空床位号
                {
                printf("%d号  ",(w+k)->bed);
                }
                }
            }
        
        }
        printf("\n\n\n输入任意键返回主界面\n");
         char o;
         fflush(stdin);
         scanf("%c",&o);
         system("cls");
    }
    void three(dormitory*p)
    {
        char a;
        printf("输入要查询的性别");//(b代表男生,g代表女生)
        fflush(stdin);
        scanf("%c",&a);
        int k=0,b=0;
        for(;b<450;b++)
        {
            if((p+b)->sex==a)
            {
                k+=(p+b)->num;
            }
        }
        if(a=='b')
        
            printf("男生当前占用的床位数为%d,空床位数为%d",1080-k,k);
            else
             printf("女生当前占用的床位数为%d,空床位数为%d",720-k,k);
        printf("\n\n\n输入任意键返回主界面\n");
         char o;
         fflush(stdin);
         scanf("%c",&o);
         system("cls");
        
    }
    void four (now*w,int y)
    {
        printf("请输入所要查询的学生的楼号和房号:\n");
        int a,b,c=0;
        int j=0;
        scanf("%d%d",&a,&b);
        for(;c<y;c++)
        {
            if((w+c)->str==a&&(w+c)->room==b)
            {
                printf("同学的名字为:\n");
                puts((w+c)->name);
                printf("\n");
                printf("同学的学号为:\n") ;
                puts((w+c)->num);
                printf("\n");
                printf("同学的性别为:\n");
                printf("%c",(w+c)->sex);
                j=1;
                printf("\n");
            }
         }
         printf("\n");
         if(j==0)
         printf("未找到\n");
         printf("输入任意键返回主界面\n");
         char o;
         fflush(stdin);
         scanf("%c",&o);
         system("cls");
    }
    void five(all *q,int v)
    {
        printf("请输入相关学生的学号:\n");
        char num[12];
        fflush(stdin);
        scanf("%s",num);
        int k=0,j=0;
        for(;k<v;k++)
        {
        if(    strcmp(num,(q+k)->num)==0)
        {
            printf("该学生的姓名为:");
            puts((q+k)->name);
            printf("\n");
            printf("该学生的学号为:");
            puts((q+k)->num);
            printf("\n");
            printf("出入:");
            printf("%c",(q+k)->io);
            printf("\n");
            printf("时间为:");
            puts((q+k)->time);
            j=1;
            }    
            
        }
        if(j==0)
        {
            printf("未找到相关学生的信息");
        }
         char o;
         fflush(stdin);
          printf("输入任意键返回主界面\n");
         scanf("%c",&o);
         system("cls");
    }
    
    int search(dormitory*p,all *q,now*w,int y,int v)
    {
        printf("          **********************************************************************************************************************");
        printf("          **********************************************************************************************************************");
        printf("                             请选择要查询的内容\n");
        printf("                             1.某栋楼的空宿舍数目以及宿舍号\n");
        printf("                             2.某宿舍的空床位数目\n");
        printf("                             3.男或者女生的总空床位数和当前占用的床位数\n");
        printf("                             4.查询学生的相关信息\n");
        printf("                             5.查询入住、退出信息\n");
        int i;
        printf("                             请输入要查询的内容\n");
        printf("                              ");
        fflush(stdin);
        scanf("%d",&i);
        system("cls");
        switch(i)
        {
            case 1:one(p);break;
             case 2:two(p,w,y); break;
             case 3:three(p);break;
            case 4:four(w,y);break;
            case 5:five(q,v); break;
         }
        
    }

    int  main()
    {
        char putin[8]="";
        char right[8]="2391960";
        char e='y';
        while(e=='y')
    {
    system("cls");
    printf("************************************************************************************************************************\n");
    printf("************************************************************************************************************************\n");
    printf("                                        欢迎使用学生宿舍管理系统!\n");
    printf("                                        使用系统前请验证您的身份!\n");
    printf("请输入宿舍管理系统的密码\n");
    fflush(stdin);    
    scanf("%s",putin);
    if((strcmp(putin,right)!=0))
    {
    printf("密码错误,请选择是否继续登录\n");
    fflush(stdin);
    scanf("%c",&e);//y表示是,n表示不是
    }
    else
    break;
    }
    if(strcmp(putin,right)!=0)
    printf("感谢您的使用");
    else
    {
    int a,b,c;
    int  y=0,v=0;//y表示现在宿舍居住的总人数;
    a=450;//总的宿舍数量是已知的;
    dormitory*p=(dormitory*)malloc(sizeof(dormitory)*450);
    all *q=(all*)malloc(sizeof(all)*5000);
    now*w=(now*)malloc(sizeof(now)*(450*4));//假定一个寝室住四个人;
    y=load1(p,w);
    v=load2(q);
    if(y==0)
    {
    insert(p,450);
    }
    system("cls");
    int  l;
    do
    {    
    system("cls");
    system("color 87");
    printf("************************************************************************************************************************\n");
    printf("************************************************************************************************************************\n");
    printf("                                        欢迎使用学生宿舍管理系统!\n");
    printf("                                                  菜单: \n");
    printf("                                        0.退出该宿舍管理系统系统\n");
    printf("                                        1.添加学生的相关信息\n");
    printf("                                        2.删除学生的相关信息\n");
    printf("                                        3.查询学生的相关信息\n");
    printf("                                        4.将所有的学生信息存盘\n");
    printf("************************************************************************************************************************\n");
    printf("************************************************************************************************************************\n");
        printf("                                   请输入相关的数字进行下一步操作:");
    scanf("%d",&l);
    system("cls");
    int k=0,x;
    switch(l)
    {
        case 0:
        printf("感谢使用!");break;
        case 1:
            system("color 4f");
            x=in(p,q,w,y); //入住管理;
            if((y+1)==x)
            {
            y=x;
            v=alls(w,q,y,v);
            dor(p,w,y);
            }

            system("cls");
            break;
          case 2:
              system("color 5f");
              x=out(p,q,w,y,v);
            if((y-1)==x)
                {
                v+=1;
                y=x;
                }
                break;
          case 3:
              system("color 6f");
          search(p,q,w,y,v);
              break;
          case 4:     keep(p,q,w,y,v);break;
            
    }
    }while(l);
        return 0;
    }
        
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值