C语言实现学生宿舍管理系统

Thalia ·
更新时间:2024-11-13
· 280 次阅读

本文实例为大家分享了C语言实现学生宿舍管理系统的具体代码,供大家参考,具体内容如下

实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等,系统以文本菜单形式工作。

登录时:用户名为asd 密码任意

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <ctype.h> #include <malloc.h>  #include <windows.h> #define N sizeof(struct Student)  typedef struct Student {     int buildnum;  //宿舍楼栋号      int roomnum;   //房间号      int brnum;     //宿舍楼栋号+房间号      float area;    //宿舍房间面积     int rnanum;    //所容纳人数             char xy[100];  //学院      int bj;        // 班级     int num;       //学号      char name[20]; //姓名     char sex[10];  //性别      int date;        //日期             struct Student *next;     }Stu,*stu; int a[1000000];//记录寝室入住人数  void save_stu(stu p); void login() {     system("cls");     system("color  4E");     printf("\n\n\n\n\n\n\n############################~欢迎进入学生宿舍管理系统~##########################\n");     printf("\n\n\n\t\t\t\t  ★ ★ ★ ★ ★");     printf("\n\n\n\n\t\t\t\t\t\tLoading");     for(int i=0;i<6;i++)     {         Sleep(400);         printf(".");     }     system("cls");     char username[10];     char password;     int p=0;     system("color 6E");     printf("\n\n\n   ==============================欢迎使用=================================\n");     for(int i = 0; i < 3; i++)     {              printf("\n\n\n\t\t请输入用户名:[            ]\b\b\b\b\b\b\b\b\b\b\b\b");            scanf("%s",username);         if (strcmp(username,"asd") == 0)         {             printf("\t\t请输入密码:  [            ]\b\b\b\b\b\b\b\b\b\b\b\b");               while((password=getch()) != '\r')//判断是否是回车               {                  p++;                  if(password == 8)//实现backspace键的功能,其中backspace键的ascii码是8                   {                       putchar('\b');                       putchar(' ');                       putchar('\b');                       if(p>0)  //最多只能删到没有字符                       p--;                   }                   if(!isdigit(password)&&!isalpha(password))//判断是否是数字或字符                       continue;                     putchar('*'); //在屏幕上打印星号               }             printf("\n\n\n   ===============================登陆成功=================================");              Sleep(600);             return;               system("pause");          }           else          {             if(i<2)               printf("用户名错误,请重新输入");             else               {                   printf("\n     您已连续3次将用户名或密码输错,系统将退出!");                   exit(0);   //关闭所有文件,终止正在执行的进程              }           }       }     } int menu_select()  //主菜单选项  {             int a;       do     {         system("cls");         system("color 3E");           printf("\n\n\t======================学生宿舍管理系统※※※※※※※※※※※※\n\n");           printf("\t◆◆             1. 添加学生信息                          ◆◆\n\n");           printf("\t◆◆             2. 显示学生信息                          ◆◆\n\n");           printf("\t◆◆             3. 对学生信息进行排序                    ◆◆\n\n");             printf("\t◆◆             4. 查找学生信息                          ◆◆\n\n");           printf("\t◆◆             5. 修改学生信息                          ◆◆\n\n");           printf("\t◆◆             6. 删除学生信息                          ◆◆\n\n");           printf("\t◆◆             0. 退出系统                              ◆◆\n\n");           printf("\t※※※※※※※※※※※※※※※================================\n");           printf("\t请选择您要运行的选项按(0-6):");           scanf("%d",&a);       }while(a<0 || a>6);      return a;   }   stu ss()      //将文件中的内容读出到链表中,返回值为表头地址  {     FILE *fp;       //文件指针      int n = 0;     stu head = NULL;     stu p1,p,pr = NULL;     fp=fopen("student","ab+");     //以只读的方式打开文件      if(fp == NULL)     {         printf("文件打开失败 !\n");     }     else     {         while(!feof(fp))        //判断文件位置标志是否移动到文件末尾          {             n++;                p = (stu)malloc(N); //向内存申请一段空间              fread(p,N,1,fp);     //将fp所指向的文件中的内容赋给p              if(n == 1)             {                 head = p;                 p1 = p;             }             else             //创建链表              {                 pr = p1;                 p1->next = p;                 p1 = p;             }         }     }     if(pr != NULL)        pr->next = NULL;     else        head = NULL;     fclose(fp);    //关闭文件      return head;   //返回头指针  } Student *input(int n) {     int i;     stu head,p,q;      if(n <= 0)  return NULL;     p = (stu)malloc(sizeof(Stu));     printf("--------------------------------------------------------------------------------\n");     printf("楼栋号 房间号 楼栋房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期\n");      printf("--------------------------------------------------------------------------------\n");     scanf("%d%d%d%f%d%s%d%d%s%s%d",&p->buildnum,&p->roomnum,&p->brnum,&p->area,&p->rnanum,&p->xy,&p->bj,&p->num,&p->name,&p->sex,&p->date);           a[p->brnum]++;     if(a[p->brnum] == p->rnanum)                printf("\n该寝室已入住满,请安排后面的学生到其它空余寝室入住\n");     head = p;     save_stu(p);     for(i = 1;i < n; i++)     {         q = (stu)malloc(sizeof(Stu));         printf("--------------------------------------------------------------------------------\n");         printf("楼栋号 房间号 楼栋房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期\n");          printf("--------------------------------------------------------------------------------\n");         scanf("%d%d%d%f%d%s%d%d%s%s%d",&q->buildnum,&q->roomnum,&q->brnum,&q->area,&q->rnanum,&q->xy,&q->bj,&q->num,&q->name,&q->sex,&q->date);            printf("\n");         a[q->brnum]++;         if(a[q->brnum] == q->rnanum)                 {             printf("\n该寝室已入住满,请安排后面的学生到其它空余寝室入住\n");             Sleep(300);         }         save_stu(q);         p->next = q;         p = q;     }     p->next=NULL;     return head;      }    void save_stu(stu p)   //将p中内容写入文件  {     FILE *fp;    //文件指针      fp = fopen("student","ab");   //以追加的方式打开名字为student的二进制文件      if(fp == NULL)     {         printf("文件打开失败 !");     }     if(fwrite(p,N,1,fp) != 1)   //将p所指向的一段大小为N的内容存入fp所指向的文件中      {         printf("写入错误 !");     }     fclose(fp);    //关闭文件   }  void output(stu head)   //输出学生信息 {       printf("--------------------------------------------------------------------------------\n");     printf("楼栋号 房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期   已住人数  \n");      printf("--------------------------------------------------------------------------------\n");       stu p,q;     int n=0;     head = ss();       p = head;       if(head == NULL)       {           printf("\n\t\t\t学生信息为空 !\n");       }       else       {           for(p = head ;p != NULL ;p = p->next)          {             for(q = head;q != NULL ;q=q->next)             {                 if(p->brnum == q->brnum)                   n++;             }             a[p->brnum]=n;               printf("%3d %5d   %.1f  %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date, n);                         n=0;            }       }   } int sort_menu()  //排序选择菜单 {       int a;       do     {           system("cls");           printf("\n\n\t\t------------------------------------------------------------\n\n");            printf("\t\t\t ▲▲ 1. 按照宿舍房间号排序\n\n");           printf("\t\t\t ▲▲ 2. 按照学号排序\n\n");           printf("\t\t\t ▲▲ 0. 返回到主菜单\n\n");           printf("\t\t------------------------------------------------------------\n");           printf("\t\t请选择您要运行的选项按(0-2):");           scanf("%d",&a);       }     while(a<0 || a>2);       return a;   }  int sort(stu head,int n)  //排序 {     FILE *fp;     head = ss();       stu p,q;       int buildnum;  //宿舍楼栋号      int roomnum;   //房间号      int brnum;     //宿舍楼栋号+房间号      float area;    //宿舍房间面积     int rnanum;    //所容纳人数             char xy[100];  //学院      int bj;        // 班级     int num;       //学号      char name[20]; //姓名     char sex[10];  //性别      int date;      //日期        switch(n)       {           case 1:               system("cls");               for(p = head; p != NULL; p = p->next)               {                   for(q = p->next; q != NULL; q = q->next)                   {                       if(p->brnum > q->brnum)                       {                           buildnum = q->buildnum;                           roomnum = q->roomnum;                         brnum = q->brnum;                         area = q->area;                         rnanum = q->rnanum;                            strcpy(xy,q->xy);                           bj = q->bj;                           num = q->num;                           strcpy(name,q->name);                           strcpy(sex,q->sex);                         date = q->date;                           q->buildnum = p->buildnum;                           q->roomnum = p->roomnum;                         q->brnum = p->brnum;                         q->area = p->area;                           strcpy(q->xy,p->xy);                           q->bj = p->bj;                         q->num = p->num;                           strcpy(q->name,p->name);                           strcpy(q->sex,p->sex);                         q->date = p->date;                           p->buildnum = buildnum;                           p->roomnum = roomnum;                         p->brnum = brnum;                         p->area = area;                            strcpy(p->xy,xy);                           p->bj = bj;                           p->num = num;                           strcpy(p->name,name);                           strcpy(p->sex,sex);                         p->date = date;                       }                   }               }             fp = fopen("student","wb");             if(fp == NULL)             {                 printf("文件打开失败 !");              }             if(fwrite(head,N,1,fp) != 1)             {                 printf("写入错误 !");              }             fclose(fp);             if(head != NULL)             {                 p = head->next;                 fp = fopen("student","ab");                 if(fp == NULL)                 {                     printf("文件打开失败 !");                 }                 while(p != NULL)                 {                     if(fwrite(p,N,1,fp) != 1)                     {                         printf("写入错误 !");                     }                     p = p->next;                 }                 fclose(fp);             }                 output(head);               system("pause");               return 1;                  case 2:               system("cls");                   for(p = head; p != NULL; p = p->next)               {                   for(q = p->next;q != NULL; q = q->next)                   {                       if(p->num > q->num)                       {                           buildnum = q->buildnum;                           roomnum = q->roomnum;                         brnum = q->brnum;                         area = q->area;                            strcpy(xy,q->xy);                           bj = q->bj;                           num = q->num;                           strcpy(name,q->name);                           strcpy(sex,q->sex);                           date = q->date;                          q->buildnum = p->buildnum;                           q->roomnum = p->roomnum;                         q->brnum = p->brnum;                         q->area = p->area;                            strcpy(q->xy,p->xy);                           q->bj = p->bj;                           q->num = p->num;                           strcpy(q->name,p->name);                           strcpy(q->sex,p->sex);                         q->date = p->date;                           p->buildnum = buildnum;                           p->roomnum = roomnum;                         p->brnum = brnum;                         p->area = area;                            strcpy(p->xy,xy);                           p->bj = bj;                           p->num = num;                           strcpy(p->name,name);                           strcpy(p->sex,sex);                          p->date = date;                       }                   }               }             fp = fopen("student","wb");             if(fp == NULL)             {                 printf("文件打开失败 !");              }             if(fwrite(head,N,1,fp) != 1)             {                 printf("写入错误 !");              }             fclose(fp);             if(head != NULL)             {                 p = head->next;                 fp = fopen("student","ab");                 if(fp == NULL)                 {                     printf("文件打开失败 !");                 }                 while(p != NULL)                 {                     if(fwrite(p,N,1,fp) != 1)                     {                         printf("写入错误 !");                     }                     p = p->next;                 }                 fclose(fp);             }                 output(head);               system("pause");               return 1;           case 0:               system("pause");               return 0;       }   }  int find_menu()  //查找菜单 {       int a;       do     {           system("cls");           printf("\n\n\t\t------------------------------------------------------------\n\n");            printf("\t\t\t ▲▲ 1. 按照楼栋房间号查找(查找同一寝室人员)\n\n");              printf("\t\t\t ▲▲ 2. 按照学院查找(查找同一学院人员)\n\n");           printf("\t\t\t ▲▲ 3. 按照班级查找(查找同一班级人员)\n\n");           printf("\t\t\t ▲▲ 4. 按照学号查找\n\n");           printf("\t\t\t ▲▲ 5. 按照姓名查找\n\n");             printf("\t\t\t ▲▲ 0. 返回到主菜单\n\n");           printf("\t\t------------------------------------------------------------\n");           printf("\t\t请选择您要运行的选项按(0-5):");           scanf("%d",&a);       }while(a<0 || a>5);       return a;   }   int find(stu head,int n)  //查找选择菜单   {       stu p;      head = ss();      switch(n)       {           case 1:               system("cls");                int sou;               printf("\n\t\t\t要查找的宿舍房间号为:");               scanf("%d",&sou);               printf("--------------------------------------------------------------------------------\n");             printf("楼栋号 房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期   已住人数  \n");              printf("--------------------------------------------------------------------------------\n");               for(p = head ;p != NULL ;p = p->next)               {                   if(p->brnum == sou)                       printf("%3d %5d   %.1f  %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]);                            }               system("pause");               return 1;           case 2:               system("cls");               p = head;               char d[30];               printf("\n\t\t\t要查找的学院为:");               scanf("%s",&d);               printf("--------------------------------------------------------------------------------\n");             printf("楼栋号 房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期   已住人数  \n");              printf("--------------------------------------------------------------------------------\n");               for(p = head ;p != NULL ;p = p->next)              {                   if(strcmp(p->xy,d) == 0)                       printf("%3d %5d   %.1f  %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]);                          }               system("pause");               return 1;           case 3:               system("cls");                 int cl;               printf("\n\t\t\t要查找的班级为:");               scanf("%d",&cl);               printf("--------------------------------------------------------------------------------\n");             printf("楼栋号 房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期   已住人数  \n");              printf("--------------------------------------------------------------------------------\n");             for(p = head ;p != NULL ;p = p->next)               {                   if(p->bj == cl)                       printf("%3d %5d   %.1f  %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]);                        }               system("pause");               return 1;           case 4:               system("cls");                 int f;               printf("\n\t\t\t要查找的学号为:");               scanf("%d",&f);               printf("--------------------------------------------------------------------------------\n");             printf("楼栋号 房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期   已住人数  \n");              printf("--------------------------------------------------------------------------------\n");             for(p = head ;p != NULL ;p = p->next)               {                   if(p->num == f)                       printf("%3d %5d   %.1f  %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]);                            }               system("pause");               return 1;           case 5:               system("cls");                 char g[20];               printf("\n\t\t\t要查找的姓名为:");               scanf("%s",g);               printf("--------------------------------------------------------------------------------\n");             printf("楼栋号 房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期   已住人数  \n");              printf("--------------------------------------------------------------------------------\n");             for(p = head ;p != NULL ;p = p->next)               {                   if(strcmp(p->name, g) == 0)                       printf("%3d %5d   %.1f  %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]);                             }               system("pause");               return 1;           case 0:               system("pause");               return 0;       }   }   int alter(stu head)  //修改学生信息  {     FILE *fp;       int y;       printf("\n\t\t\t请输入将要修改的学生的学号:");       scanf("%d",&y);       stu p;     head = ss();       p = head;       while(p != NULL)       {           if(y == p->num)           {              printf("--------------------------------------------------------------------------------\n");             printf("楼栋号 房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期   已住人数  \n");              printf("--------------------------------------------------------------------------------\n");              printf("%3d %5d   %.1f  %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]);             printf("\n\t\t对信息进行修改:\n");             printf("--------------------------------------------------------------------------------\n");             printf("楼栋号 房间号 宿舍房间号 房间面积 容纳数 学院  班级  学号   姓名   性别  日期\n");              printf("--------------------------------------------------------------------------------\n");             scanf("%d%d%d%f%d%s%d%d%s%s%d",&p->buildnum,&p->roomnum,&p->brnum,&p->area,&p->rnanum,&p->xy,&p->bj,&p->num,&p->name,&p->sex,&p->date);                a[p->brnum]++;             if(a[p->brnum] == p->rnanum)                       printf("\n该寝室已入住满,请安排后面的学生到其它空余寝室入住\n");             printf("\n");           }           p = p->next;       }     fp = fopen("student","wb");   //以只写的方式打开名为student的二进制文件,打开的同时清空文件中的内容      if(fp == NULL)     {         printf("文件打开失败 !");      }     if(fwrite(head,N,1,fp) != 1)   //将head写入fp所指向的文件中      {         printf("写入错误 !");      }     fclose(fp);   //关闭文件      if(head != NULL)   //如果head不为空      {         p = head->next;     //让p指向第二个结点          fp = fopen("student","ab");   //以追加的方式打开文件          if(fp == NULL)         {                 printf("文件打开失败 !");         }         while(p != NULL)         {             if(fwrite(p,N,1,fp) != 1)//将p写入fp所指向的文件中             {                 printf("写入错误 !");             }             p = p->next;         }         fclose(fp);        }     Sleep(500);       }     int del_menu() {     int a;       do     {           system("cls");           printf("\n\n\t\t------------------------------------------------------------\n\n");            printf("\t\t\t ▲▲ 1.删除某个学生信息\n\n");           printf("\t\t\t ▲▲ 2.删除全部学生信息\n\n");           printf("\t\t\t ▲▲ 0. 返回到主菜单\n\n");           printf("\t\t------------------------------------------------------------\n");           printf("\t\t请选择您要运行的选项按(0-2):");           scanf("%d",&a);       }     while(a<0 || a>2);       return a;   }  int del(stu head,int g)  //删除学生信息 {      FILE *fp;        stu p,q;      head = ss();      p = head;     q = NULL;         switch(g)       {           case 1:               system("cls");              int x,y;              printf("\n\t\t\t请输入将要删除学生的学号:");                       scanf("%d",&y);                while(p != NULL && p->num != y)             {                 q = p;                 p = p->next;                  x = p->brnum;             }             if(p != NULL)             {                 if(q == NULL)                 {                     head = head->next;                 }                 else if(p->next!=NULL)                 {                     q->next = p->next;                 }                 else                 q->next=NULL;             }            free(p);            printf("\n\t\t\t删除成功 !\n");            a[x]--;            fp = fopen("student","wb");            if(fp == NULL)            {                 printf("文件打开失败 !");             }            if(fwrite(head,N,1,fp) != 1)            {                 printf("写入错误 !");             }            fclose(fp);            if(head != NULL)            {                 p = head->next;                 fp = fopen("student","ab");                 if(fp == NULL)                 {                     printf("文件打开失败 !");                 }                 while(p != NULL)                 {                     if(fwrite(p,N,1,fp) != 1)                     {                         printf("写入错误 !");                     }                     p = p->next;                 }                 fclose(fp);            }              system("pause");              return 1;         case 2:               system("cls");               head = NULL;              printf("\n\t\t\t删除成功 !\n");            fp=fopen("student","wb");            fclose(fp);             system("pause");             return 1;        case  0:             return 0;      } } int main()             {            int m,n,x,y,g;     login();         stu head = NULL;         for(;;)       {           switch(menu_select())           {               case 1:                   system("cls");                     printf("\t\t输入学生的个数和数据(以回车结束):");                   scanf("%d",&n);                   if(n <= 0)                   {                       printf("\n\t\t\t请输入正确的人数 !");                       Sleep(500);                       break;                   }                   else                   {                                         head = input(n);                       break;                   }               case 2:                   system("cls");                  system("color 5E");                  output(head);                   system("pause");                   break;                case 3:                   do                   {                       x = sort(head,sort_menu());                   }while(x != 0);                   break;                         case 4:                   system("cls");                   do                   {                       y = find(head,find_menu());                   }while(y != 0);                   break;               case 5:                   system("cls");                     alter(head);                   printf("\n\t\t\t修改成功 !\n");                   system("pause");                   break;               case 6:                   system("cls");                  do                   {                       g = del(head,del_menu());                   }while(g != 0);                     system("pause");                   break;               case 0:                 system("cls");                        printf("\t\t∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");                 printf("\t\t\t\\(^V^)メ(^V^)/  ");                  printf("\t谢谢使用 !\n");                 printf("\t\t∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");                 Sleep(2000);                 system("cls");                    exit(0);           }       }   }



宿舍管理系统 系统 C语言

需要 登录 后方可回复, 如果你还没有账号请 注册新账号