千家信息网

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

发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,这篇文章主要讲解了"怎么用C语言实现学生宿舍管理系统",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用C语言实现学生宿舍管理系统"吧!实现简单的学生
千家信息网最后更新 2024年10月17日怎么用C语言实现学生宿舍管理系统

这篇文章主要讲解了"怎么用C语言实现学生宿舍管理系统",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用C语言实现学生宿舍管理系统"吧!

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

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

#include #include #include #include #include #include  #include #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 s %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 s %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 s %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 s %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 s %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 s %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 s %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语言实现学生宿舍管理系统"的内容了,经过本文的学习后,相信大家对怎么用C语言实现学生宿舍管理系统这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0