宿舍管理系统 C语言实验报告

C语言程序设计报告

题  目:宿舍管理系统

院系名称:电子工程学院

    专业名称:计算机科学与技术

    级:1001

    学生姓名:XXX

学号(8位):13

指导教师:XXX

设计起止时间:20##年6月22日~20##年6月30日


一. 设计目的

学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工一条条去查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的而世界,原始的记录方式已经被社会所淘汰,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。故随着宿舍需要管理的信息快速增长,建立一个宿舍管理系统可使宿舍管理人员的管理工作系统化、规范化、自动化,大大提高管理效率。

二. 设计内容

1.录入学生信息

2.显示学生信息

3.插入学生信息

4.修改学生信息

5.删除学生信息

6.排序学生信息

7.统计学生信息

8.管理员密码

三.概要设计

1.录入学生信息将信息保存至文件中

2.从文件中读取信息显示出学生信息

3. 从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中

4. 从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中

5.统计学生信息按照宿舍号、楼层、楼号分别统计出人数

6.管理员进入此系统需输入密码,而学生进入则不需要

1.功能模块图;

2.各个模块详细的功能描述。

1.录入学生信息

录入学生信息将信息保存至文件中

2.显示学生信息

从文件中读取信息显示出学生信息

3.插入学生信息

从文件中读取信息存至单链表中,传递头指针从而插入学生信息,再将修改完成的学生信息保存至文件中

4.修改学生信息

从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中

5.删除学生信息

从文件中读取信息存至单链表中,传递头指针从而删除学生信息,再将修改完成的学生信息保存至文件中

6.排序学生信息

从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中

7.统计学生信息

统计学生信息按照宿舍号、楼层、楼号分别统计出人数

四.测试数据及运行结果

1.正常测试数据和运行结果

要求提供3组正常测试数据和运行结果

排序

查找

2.异常测试数据及运行结果

要求提供2组异常测试数据和运行结果

五.调试情况,设计技巧及体会

1.改进方案

对自己的设计进行评价,指出合理和不足之处,提出改进方案; 管理员密码不精致,会被管理员以外的人看到保密性不好。插入、删除、修改等函数太过繁琐。

2.体会

对设计及调试过程的心得体会:

在这一周多的实习中,让我对C语言有了更深刻的认识,不但复习了原来所学的知识,更对新的知识有了了解。在调试过程中,通过自己学习,寻求老师、同学的帮助解决了许多不懂的问题。

六.参考文献

C语言程序设计(第二版)

七.附录:

源代码(电子版)

#include<io.h>

#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<malloc.h>

#include<stdlib.h>

#define P "学号:%-8ld姓名:%-8s班级:%-10s楼号:%-3s楼层:%-3s宿舍号:%-3s\n",p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum

#define N sizeof(struct stud)

manager();

main();

student();

struct stud

{

 long num;

 char name[20];

 char classes[20];

 char bnum[5];

 char fnum[5];

 char rnum[5];

 struct stud *next;    

};

struct node

{

  char mima[10];

  struct node *next;  

};

/*********************************************************************************************************/

//                                     录入学生信息

/*********************************************************************************************************/

struct stud *input_message()

{

 struct stud *p1,*p2,*head;

 FILE *fp;

 fp=fopen("student_message.txt","wt");

 head=p2=(struct stud *)malloc(N);   /*head p2指向头结点*/

 printf("请输入 学号 姓名 班级 楼号 楼层 宿舍号(输入0结束)\n");

 p1=(struct stud *)malloc(N);   /*p1指向第一个结点*/

scanf("%ld %s %s %s %s %s",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);

if(p1->num!=0)

   fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);

while(p1->num!=0)

 {

    p2->next=p1;              /*将新结点连接到表尾*/

      p2=p1;                    /*p2指向新的表尾*/

      p1=(struct stud *)malloc(N); /*p1指向新申请的结点*/

    scanf("%ld %s %s %s %s %s",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);

    if(p1->num!=0)

      fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);

   

 }

 fclose(fp);

 p2->next=NULL;            /*表尾结点next置空*/

 free(p1);                 /*释放无效结点*/

 return head;

}

/*********************************************************************************************************/

//                                     将文件中的信息存入单链表

/*********************************************************************************************************/

struct stud *inread()                   /*将文件中的信息存入单链表*/

{

 struct stud *head,*p,*p1;

 FILE *fp;

 fp=fopen("student_message.txt","rt");

 if(fp==NULL)

 {

       printf("读出文件出错,按任意键退出");

     exit(1);

 }

 head=(struct stud *)malloc(N);

 head->next=NULL;

 p=head;

 while(!feof(fp))

 { 

  p1=(struct stud*)malloc(N);

  fscanf(fp,"%ld %s %s %s %s %s\n",&p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);

  p->next=p1;       /*连接结点*/

  p=p1;

 

 }

 p->next=NULL;

 fclose(fp);

 return head;

}

       

/*********************************************************************************************************/

//                                         显示学生信息

/*********************************************************************************************************/

revise_message()

{

 FILE *fp;

 struct stud *p;

 int n=0,a,fsize;

 p=(struct stud *)malloc(N);

 fp=fopen("student_message.txt","rt");

 if(fp==NULL)

      {

            printf("\n   打开文件失败!");

            exit(1);

      }

 while(!feof(fp))             /*文件未结束执行循环*/

{

      a=fileno(fp);

      fsize=filelength(a);   /*判断文件大小 */

    if(fsize==0)

            break;

      fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

      printf(P);

      n=1;

 }

fclose(fp);

if(n==0) printf("无记录!!!\n");

}

/*********************************************************************************************************/

//                                         将单链表的信息保存至文件中

/*********************************************************************************************************/

baocun(struct stud *p)

{

 struct stud *p1;

 FILE *fp;

 fp=fopen("student_message.txt","wt");

 if(fp==NULL)

 {

       printf("写入文件出错,按任意键退出");

     exit(1);

 }

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

  fprintf(fp,"%ld %s %s %s %s %s\n",p1->num,p1->name,p1->classes,p1->bnum,p1->fnum,p1->rnum);

 fclose(fp);

}

/*********************************************************************************************************/

//                                         查询学生信息

/*********************************************************************************************************/

find_message()

{

    long nnum;

      int a,b,n,m;

      FILE *fp;

      struct stud *p;

    fp=fopen("student_message.txt","rt");

    p=(struct stud *)malloc(N);

      system("cls");

      printf("\n\n\n\n");

    printf("                    ***********************************   \n");

    printf("                             欢迎进入宿舍管理系统         \n");

    printf("                    ***********************************   \n");

    printf("\n                               1.返回上一级             \n");

      printf("\n                               1.按学生学号查找         \n");

    printf("\n                               2.按学生姓名查找         \n");

    printf("\n                               3.按宿舍号查找           \n");

    printf("\n\n\n");

    printf("请选择:");

    scanf("%d",&b);

    printf("\n\n\n");

     

//     按学生学生学号    

      if(b==1)

      {

      printf("\n请输入要查找的人的学号:\n");

    scanf("%ld",&nnum);

      while(!feof(fp))

      {

        fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

      if(p->num==nnum)

      {

         printf(P);

           a=1;

       

       }                                /*标志*/

      }

      if(a!=1) printf("\n没有找到此人!!!!\n");

      }  

//     按学生姓名查找

   if(b==2)

      {

    char nname[20];

      printf("\n请输入要查找的人的姓名:");

    scanf("%s",&nname);

  

    while(!feof(fp))

      {

    fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

      n=strcmp(p->name,nname);

      if(n==0)

      {

            printf(P);

            a=1;}/*标志*/

      }

     if(a!=1)     printf("\n没有找到此人!!!!\n");

    }

  

      if(b==3)

      {

    char nrnum[20];

      printf("\n请输入要查找的宿舍号:");

    scanf("%s",&nrnum);

  

    while(!feof(fp))

      {

    fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

      m=strcmp(p->rnum,nrnum);

      if(m==0)

      {

            printf(P);

            a=1;}/*标志*/

      }

     if(a!=1)     printf("\n没有找到此宿舍!!!!\n");

    }

     if(b==0)

            manager();

}

/*********************************************************************************************************/

//                                        删除学生信息

/*********************************************************************************************************/

delete_message(struct stud *p0)

{

     struct stud *p;

       long nnum;

     int a;

     p=p0->next;

       printf("请输入要删除的人的学号:");

     scanf("%ld",&nnum);

       while(p!=NULL)

   {

         if(p->num==nnum)

            {

             p0->next=p->next;            /*后续结点接到前面的结点上*/

         printf("已删除此人!!!!");

            a=1;                         /*标志常量*/

      }

       p0=p;                             /*推移指针*/

         p=p->next;

   }

  if(a!=1)

  printf("没有找到要删除的人!!!!");

}

/*********************************************************************************************************/

//                                      插入和修改学生信息

/*********************************************************************************************************/

change_message(struct stud *p0)

{

    long nnum;

      int a,b;

      system("cls");

      printf("\n\n\n\n");

    printf("                    ***********************************   \n");

    printf("                             欢迎进入宿舍管理系统         \n");

    printf("                    ***********************************   \n");

    printf("\n                               0.返回上一级             \n");

    printf("\n                               1.插入学生信息           \n");

    printf("\n                               2.修改学生信息           \n");

    printf("\n\n\n");

    printf("请选择:");

    scanf("%d",&b);

    printf("\n\n\n");

     

    if(b==1)

      {

        struct stud *p;

        p=(struct stud *)malloc(N);

      printf("请输入要插入的学号 姓名 班级 楼号 楼层 宿舍号\n");

        scanf("%ld %s %s %s %s %s",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

        p->next=p0->next;           /*后续结点连接到新结点后*/               

        p0->next=p;                 /*此时新接点处在头的位置*/

       

      }

     

     

      if(b==2)

      {

      printf("请输入要修改的人的学号:");

    scanf("%ld",&nnum);

      while(p0->next!=NULL)

      {

       p0=p0->next;                          /*指针后移*/

      if(p0->num==nnum)

      {

            printf("请修改此人的姓名 班级 楼号 楼层 宿舍号:");

          scanf("%s %s %s %s %s",p0->name,p0->classes,p0->bnum,p0->fnum,p0->rnum);

            printf("\n修改成功!!!!\n");

            a=1;

      }                                /*标志*/

      }

    if(a!=1) printf("\n没有找到此人!!!!\n");

      }

   

    if(b==0)

            manager();

    

}

/*********************************************************************************************************/

//                                        统计学生信息

/*********************************************************************************************************/

     

dorm_message()

{

    int a,b,m;

    FILE *fp;

      struct stud *p;

   

      fp=fopen("student_message.txt","rt");

    p=(struct stud *)malloc(N);

      a=0;

      system("cls");

    printf("\n\n\n\n");

    printf("                    ***********************************   \n");

    printf("                             欢迎进入宿舍管理系统         \n");

    printf("                    ***********************************   \n");

    printf("\n                               0.返回上一级             \n");

    printf("\n                               1.输入楼号统计人数       \n");

    printf("\n                               2.输入楼层号统计人数     \n");

    printf("\n                               3.输入宿舍号统计人数     \n");

    printf("\n\n\n");

    printf("请选择:");

    scanf("%d",&b);

    printf("\n\n\n");

     

//     按楼号统计    

      if(b==1)

      {

        char nbnum[20];

        printf("\n请输入要统计的楼号:\n");

      scanf("%s",&nbnum);

        while(!feof(fp))

        {

        fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

      m=strcmp(p->bnum,nbnum);

        if(m==0)

        {

          printf(P);

              a++;

        }

       }                                /*标志*/

     printf("\n该楼共有%d人\n",a);

      }  

 //     按楼层号统计     

      if(b==2)

      {

        char nfnum[20];

        printf("\n请输入要统计的楼层号:\n");

      scanf("%s",&nfnum);

        while(!feof(fp))

        {

        fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

      m=strcmp(p->fnum,nfnum);

        if(m==0)

        {

          printf(P);

              a++;

        }

       }                                /*标志*/

     printf("\n该楼层共有%d人\n",a);

      }  

//     按宿舍号统计

      if(b==3)

      {

        char nrnum[20];

        printf("\n请输入要统计的宿舍号:\n");

      scanf("%s",&nrnum);

        while(!feof(fp))

        {

        fscanf(fp,"%ld %s %s %s %s %s\n",&p->num,p->name,p->classes,p->bnum,p->fnum,p->rnum);

      m=strcmp(p->rnum,nrnum);

        if(m==0)

        {

          printf(P);

              a++;

        }

       }                                /*标志*/

     printf("\n该宿舍共有%d人\n",a);

      }  

    if(b==0)

            manager();

}

/*********************************************************************************************************/

//                                      排序学生信息

/*********************************************************************************************************/

 

paixu(struct stud *p0, struct stud *p1, struct stud *p2)

{

    p0->next = p2;

    p1->next = p2->next;

    p2->next = p1;

}

sort_message(struct stud *p0)   /*传递头指针*/

{

 int i,a;

 int flag;

 struct stud *p=NULL;

 system("cls");

     printf("\n\n\n\n");

   printf("                    ***********************************   \n");

   printf("                             欢迎进入宿舍管理系统         \n");

   printf("                    ***********************************   \n"); 

   printf("\n                                0.返回上一级            \n");

   printf("\n                                1.升序排序              \n");

   printf("\n                                2.降序排序              \n");

 printf("\n\n\n");

printf("请选择:");

scanf("%d",&a);

printf("\n\n\n");

if(a==1)

{

 for (i=0; ; i++)

 {

  flag = 0;

  for (p=p0; p->next->next != NULL; p=p->next)    /*冒泡排序*/

  {

   if (p->next->num > p->next->next->num)

   {

    flag = 1;

    paixu(p, p->next, p->next->next);  

   }

  }

  if (flag == 0)

  {

   printf("\n排序成功!!!!\n");break;

  }

 }

}

if(a==2)

{

   for (i=0; ; i++)

 {

  flag = 0;

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

  {

   if (p->next->num < p->next->next->num)

   {

    flag = 1;

    paixu(p, p->next, p->next->next);  

   }

  }

  if (flag == 0)

  {

      printf("\n排序成功!!!!\n");break;

  }

 }

}

 if(a==0)

       manager();

}

/*********************************************************************************************************/

//                                     管理员密码

/*********************************************************************************************************/

mima()

{

 int n;

 int a=3;

 struct node *p;

 char rmima[10];

 FILE *fp;

 fp=fopen("mima_message.txt","rt");

  p=(struct node *)malloc(sizeof(struct node));

  

     while(!feof(fp))

      {    

            for(;a!=0;)

            {printf("请输入密码:\n");

   scanf("%s",rmima);

fscanf(fp,"%s\n",&p->mima);

      n=strcmp(p->mima,rmima);

      if(n==0)

     {

         manager();

      }

    if(n!=0)

       printf("\n密码错误,还有%d次机会\n",a-1);

     a--;

     

      }

      }

}

void nmima()

{

      FILE *fp;

      char nmima[10];

      struct node *p;

      p=(struct node *)malloc(sizeof(struct node));

      fp=fopen("mima_message.txt","wt");

      if(fp==NULL)

      {

            printf("\n   打开文件失败!");

            exit(1);

      }

    printf("请输入新密码");

      scanf("%s",nmima);

    strcpy(p->mima,nmima);

      fprintf(fp,"%s",p->mima);

      printf("修改成功!!\n");

      fclose(fp);

}

/*********************************************************************************************************/

//                                     管理员

/*********************************************************************************************************/

manager()

{

int n;

char m;

struct stud *head;

system("cls");

do

{

system("cls");

printf("                    ***********************************   \n");

printf("                             欢迎进入宿舍管理系统         \n");

printf("                    ***********************************   \n"); 

printf("\n                                0.返回上一级            \n");

printf("\n                                1.录入学生信息          \n");

printf("\n                                2.显示学生信息          \n");

printf("\n                                3.查找学生信息          \n");

printf("\n                                4.删除学生信息          \n");

printf("\n                                5.修改学生信息          \n");

printf("\n                                6.排序学生信息          \n");

printf("\n                                7.统计宿舍信息          \n");

printf("\n                                8.修改密码信息          \n");

printf("\n请选择:\n");

scanf("%d",&n);

switch(n)

{

  case 0: main();break;

  case 1: input_message();break;

  case 2: revise_message();break;

  case 3: find_message();break;

  case 4: head=inread();delete_message(head);baocun(head);break;

  case 5: head=inread();change_message(head);baocun(head);break;

  case 6: head=inread();sort_message(head);baocun(head);break;

  case 7: dorm_message();break;

  case 8: nmima();break;

  default: printf(" !!!!错误!!!! \n");break;

}

if(n==0) break;

else printf("\n要重新选择吗(y/n)\n");

m=getch();

 }while(m=='y'||m=='Y');

}

/*********************************************************************************************************/

//                                     学生

/*********************************************************************************************************/

student()

{

   

      int b;

      char m;

      do

{

      system("cls");

      printf("\n\n\n\n");

    printf("                    ***********************************\n");

    printf("                             欢迎进入宿舍管理系统      \n");

    printf("                    ***********************************\n");

    printf("\n                               0.返回上一级          \n");

    printf("\n                               1.查找学生信息        \n");

    printf("\n                               2.统计宿舍信息        \n");

    printf("\n\n\n");

    printf("请选择:");

    scanf("%d",&b);

    printf("\n\n\n");

    switch(b)

      { case 0:main();break;

      case 1:find_message();break;

      case 2:dorm_message();break;

      }

printf("\n要重新选择吗(y/n)\n");

m=getch();

 }while(m=='y'||m=='Y');

}

/*********************************************************************************************************/

//                                     主函数

/*********************************************************************************************************/

main()

{

int b;

system("cls");

printf("\n\n\n\n");

printf("                    ***********************************\n");

printf("                             欢迎进入宿舍管理系统      \n");

printf("                    ***********************************\n");

printf("\n                               0.退出                \n");

printf("\n                               1.管理员              \n");

printf("\n                               2.学生                \n");

printf("\n\n\n");

printf("请选择:");

scanf("%d",&b);

printf("\n\n\n");

switch(b)

{ case 0:break;

  case 1:mima();break;

  case 2:student();break;

}

}

相关推荐