c语言课程设计报告(宿舍管理系统)

时间:2024.4.13

西安郵電學院

C语言课程设计报告书

            

实验题目:学生宿舍管理系统

一、实验目的

通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一步巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法。通过这次实习练习,可以更进一步的熟悉所学的知识,还可以加强和巩固知识。长达两周的上机练习,为我们提供了很好的编程环境。更好的了解编程的意义,为将来参加实践活动以及以后的毕业设计打下坚实的基础。

二、实验内容

我设计的是“学生宿舍管理系统”,主要是针对住宿学生个人信息的管理,适用对象主要是学校,以方便学校对住宿学生的管理。包括学生的姓名、学号、性别、专业、班级等等。在编写过程中主要运用C语言的基本知识有:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的调用与使用)等。

三、需求分析

    该程序是由C语言编写的一个宿舍管理查询软件,本程序在Microsoft Visual C++ 6.0下运行,其主要功能是实现对学生信息的录入、添加、删除、修改、查询、统计。其中查询可以分别以姓名、学号、宿舍号为关键字查询学生信息。统计可以分别以学号、宿舍号、性别、班级、专业为关键字进行统计,并且输出信息按学号大小从小到大输出。

四、概要设计

1、方案设计

  

2、数据结构说明

程序中数据主要是学生信息,具体属于类型如下:

truct st_message

char name[20];  /*学生姓名*/

char dorm[7];  /*宿舍号*/

char num[10];  /*学号*/

char sex[5];  /*性别*/

char age[4];  /*年龄*/

char major[20];  /*专业*/

char classs[8];  /*班级*/

3、模块功能说明

第一密码模块:调用cipher(),进行管理者的注册与登录操作。

第二录入模块:调用input_message(),对住宿学生信息进行录入。

第三添加模块:调用append_message(),对新来学生信息进行添加录入。

第四修改模块:调用revise_message(),对需修改学生的信息进行修改。

第五删除模块:调用delete_message(),对某一学生信息进行删除操作。

第六查询模块:调用find_message(),分别以姓名、学号、宿舍号对学生信息进行查询。

第七统计模块:调用census_message(),分别以学号、宿舍号、性别、班级、专业方式对学生信息进行统计,并按学号由小到大输出。

五、详细设计及运行结果

1.函数之间调用关系图

2.部分模块流程图及运行结果图示

登陆界面

主函数流程图

主页界面

录入模块

     

录入界面

修改模块

      修改界面

 统计模块

统计界面

六、调试情况,设计技巧及体会

   1、测试数据

   对功能1(密码系统测试)的测试:先注册账号密码分别为:1,1,然后退出程序进行登录测试。输入一组错误账号密码系统显示“输入的账号或密码有误,请重新输入!”。在输入正确密码,系统显示“登陆成功”并进入主界面。

对功能2(录入学生信息)的测试:按照先后顺序分别输入学生信息:

学号     姓名  班级  宿舍号  性别  年龄    专业

03091002 张三  0901  13#401  男     20     通信工程

03091001 李四  0902  13#401  男     20     计算机

对功能3(添加学生信息)的测试:按照先后顺序分别输入学生信息:

学号     姓名  班级  宿舍号  性别  年龄    专业

03091004 王红  0901  14#401  女     20     通信工程

03091003 李娜  0902  14#401  女     20     计算机

对功能4(修改学生信息)的测试:输入要修改学生的姓名:王五,系统显示“该学生信息不存在”。输入修改学生姓名:张三,系统显示出该学生信息。选择修改学号为:03091005,系统显示出修改后的学生信息。

对功能5(删除学生信息)的测试:输入要删除学生的学号:03091001,系统显示“该学生信息不存在”。输入要删除的学生的学号:03091005,系统显示出该学生信息。选择删除该学生信息。

对功能6(查询学生信息)的测试:查询宿舍号为14#401的信息,系统显示为:

学号     姓名  班级  宿舍号  性别  年龄    专业

03091003 李娜  0902  14#401  女     20     计算机

03091004 王红  0901  14#401  女     20     通信工程

对功能7(统计学生信息)的测试:选择按学号统计,系统显示为:

学号     姓名  班级  宿舍号  性别  年龄    专业

03091002 张三  0901  13#401  男     20     通信工程

03091003 李娜  0902  14#401  女     20     计算机

03091004 王红  0901  14#401  女     20     通信工程

       学生总人数3人,其中男生1人,女生2人。

    对功能8(退出系统)的测试:选择退出系统,程序关闭。

   2、对调试中主要问题进行总结

   调试过程中,经常会出现输入或显示为乱码的情况,这往往是上下定义的数据类型不同或定义数组长度不够所造成的。有时候程序中还会出现录入五个数据而只显示四个的情况,这也往往是由于定义的结构体数组长度过低所造成的。像这类问题只要把数据类型都定义成字符型,并且定义一个合理的数组长度往往都能解决。在调试过程中我遇到最大的问题出现在删除模块。在运用“rt+”打开文件并对某一数据进行删除后,往往显示会多显示一行数据。这是由于“rt+”写数据时只会覆盖数据而不会清除原文件数据,因此文件最后一行数据总会保留在原文件中。后来我先用“rt”打开文件并读取文件中的数据,然后再用“wt”打开原文件将删除后的数据重新写入文件,最终检测运行成功。

   3、对自己设计进行评价,指出合理和不足之处,提出改进的方案

   本程序拥有很多的优点:第一,它具有作为一个宿舍管理系统的各个功能,包括录入信息、添加信息、修改信息、删除信息、查询信息、统计信息六大主要功能。可以方便的进行住宿学生信息的管理。第二,它的各个功能模块在实现时非常方便,例如:录入和添加学生信息可以自己控制录入和添加的人数;统计学生信息可以分学号、班级、专业等进行统计等等。第三,它也具有安全性,在进入学生信息管理系统之前要求输入账号和密码,所以非常安全,不会造成信息的外泄。当然程序也有他的不足之处,比如密码不能回显“*”,这样很容易造成密码的丢失。可以在密码模块中改为回显“*”形式,并且可以对密码进行算法加密,这样更能确保信息的安全。

   4、在设计过程中的感受

   “万事开头难”这句话在我编写程序的过程中得到了真正的体现。在最初编写的几天里出现了这样那样的错误一大堆,这主要是由于我对基础知识掌握不扎实所造成的。但是随后几天里,我对课本知识进行了回顾并不时的向老师和同学进行请教,慢慢的对编写程序也开始得心应手起来。程序的编写总归是一件费时费力的事情,但只要我们认真编写和调试最后总能成功。

    短短的两周实习时间我收获颇多,我相信经过这次实习必将为我以后的深入学习打下扎实的基础。

参考文献:《C语言程序设计》(第二版)  王曙燕    科学出版社

七、源程序清单

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#include"io.h"

#define N 90

struct cipher

{char account[6];

 char code[6];

}m[10];

cipher()                                                      /*密码模块*/

{ system("color 9f");

  int i,k=0,flag,flag1,flag2,fno,fsize,fnum,choice;

  char account[6];                                       

  char code[6],code1[6]; 

  FILE *fp1;                                                  /*定义文件指针*/

      printf ("\n\n\n\n\n\n\n                  ***********学生宿舍管理系统**********\n"); /*登陆界面*/

      printf ("                  *              1.登陆               *\n");

      printf ("                  *              2.注册               *\n");

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

      scanf("%d",&choice);

      system("cls");

      switch(choice)

      {case 1: fp1=fopen("code.txt","rt");                      /*打开文件*/

            if(fp1==NULL)

                 {printf("\n\n*****你还没有注册,按任意键退出!"); /*帐号错误*/

             getchar();

             exit(1);

                 }

                 fno=fileno(fp1);                                  /*登陆帐号*/

            fsize=filelength(fno);

            fnum=fsize/sizeof(struct cipher);

              while(k<3)

              {getchar();

                  system("cls");

               printf("\n\n\n\n\t\t\t请输入账号:");

               gets(account);

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

                  gets(code);

                  for(i=0;i<fnum;i++)

                  { fread(&m,sizeof(struct cipher),1,fp1);

                    if(!strcmp(m[i].account,account)) flag1=0;

                     else flag1=1;

                    if(!strcmp(m[i].code,code)) flag2=0;

                     else flag2=1;

                   if(flag1==0&&flag2==0)

                   {   fclose(fp1);

                       printf("\n\n\t\t^0^登陆成功!欢迎进入西安邮电学院宿舍管理系统!^0^\n");                        /*登陆成功*/

                        system("pause");

                  return 1;  

                   }

                  }

                  if(i==fnum)

                  {printf("\n\n\t\t\t输入的账号或密码有误,请重新输入!");

                   k++;

                  }

                 }

              printf("\n\n\t\t\t连续3次输入错误,退出!\n");                  /*登陆失败*/

            system("pause");

            exit(1);

       

      case 2:fp1=fopen("code.txt","at+");                           /*打开文件*/

            if(fp1==NULL)

                 {printf("\n\n*****文件打开错误。按任意键退出!");     /*打开失败信息*/

             getchar();

             exit(1);

                 }

              do                                                     /*注册信息*/ 

              {system("cls");

               getchar();

               printf("\n\n\n\n\t\t\t请输入注册账号:");

               gets(m[0].account);

                 printf("\n\t\t\t请输入注册密码:");

               gets(m[0].code);

               printf("\n\t\t\t请再次输入注册密码:");

               gets(code1);

               if(!strcmp(m[0].code,code1))

                 {fwrite(&m[0],sizeof(struct cipher),1,fp1);

                fclose(fp1);

                flag=0;

                 }

               else

                 {

                  printf("\n\t\t\t两次密码输入不同,请重新注册!");

                  getchar();

                  flag=1;

                 }

              }while(flag==1);

              printf("\n\t\t\t^0^注册成功!欢迎进入西安邮电学院宿舍管理系统!^0^\n");

              getchar();

              system("cls");

              break;

      }

      return 1;

}

struct st_message          /*学生信息*/

 {

    char name[20];         /*学生姓名*/

      char dorm[7];          /*宿舍号*/

      char num[10];          /*学号*/

      char sex[5];           /*性别*/

      char age[4];           /*年龄*/

      char major[20];        /*专业*/

      char classs[8];        /*班级*/

}st[N],t;

sort_message()                     /*排序模块*/

{int i,j,fno,fsize,fnum;

      FILE *fp;                       /*定义文件指针*/

      fp=fopen("student.txt","rt+");   /*打开文件*/

  if(fp==NULL)

  {printf("\n\n*****文件打开错误。按任意键退出!");

   getchar();

   exit(1);

  }

  fno=fileno(fp);

  fsize=filelength(fno);

  fnum=fsize/sizeof(struct st_message);

  for(i=0;i<fnum;i++)

        fread(&st[i],sizeof(struct st_message),1,fp);

  for(i=0;i<fnum-1;i++)

        for(j=i+1;j<fnum;j++)

        if(strcmp(st[i].num,st[j].num)>0)

        {t=st[i];

         st[i]=st[j];

         st[j]=t;

        }

  rewind(fp);

  for(i=0;i<fnum;i++)

        fwrite(&st[i],sizeof(struct st_message),1,fp);

  fclose(fp);

 }

input_message()                                                       /*录入信息模块*/

{system("color 5f");

 int i;

 char choice;

 FILE *fp;                                                            /*定义文件指针*/                                                      

 fp=fopen("student.txt","at+");                                        /*打开文件*/

 if(fp==NULL)                                              

  {printf("\n\n*****库存文件不存在!请建立。按任意键退出!");

   getchar();

   exit(1);

 }                                                                     /*打开失败信息*/

 for (i=0;;i++)

 { system ("cls");

   getchar();

   printf("\n\n\n\t\t\t请输入学生姓名:");

   gets(st[i].name);

   printf("\n\t\t\t请输入学生班级:");

  gets(st[i].classs);

  printf("\n\t\t\t请输入学生宿舍号:");

  gets(st[i].dorm);

  printf("\n\t\t\t请输入学生学号:");

  gets(st[i].num);

  printf("\n\t\t\t请输入学生性别:");

  gets(st[i].sex);

  printf("\n\t\t\t请输入学生年龄:");

  gets(st[i].age);

  printf("\n\t\t\t请输入学生专业:");

  gets(st[i].major);

  fwrite(&st[i],sizeof(struct st_message),1,fp);

  printf("\n\t\t\t输入成功!^0^\n\n\t\t\t是否继续录入(Y/N)?");

  choice=getchar();

  if(choice=='y'||choice=='Y')

  continue;

  else

  { fclose(fp);

       break;

  }

 }

}

append_message()                                                    /*添加模块*/

{system("color 6f");

 int i;

 char choice;

 FILE *fp;                                                          /*定义文件指针*/                                                    

 fp=fopen("student.txt","at+");                                      /*打开文件*/

  if(fp==NULL)

  {printf("\n\n*****库存文件不存在!请建立。按任意键退出!");

   getchar();

   exit(1);

  }                                                                  /*打开失败信息*/

 for (i=0;;i++)

 {struct st_message st[N];

   system ("cls");

   getchar();

   printf("\n\n\n\t\t\t请输入所添加学生姓名:");

   gets(st[i].name);

   printf("\n\t\t\t请输入所添加学生班级:");

  gets(st[i].classs);

  printf("\n\t\t\t请输入所添加学生宿舍号:");

  gets(st[i].dorm);

  printf("\n\t\t\t请输入所添加学生学号:");

  gets(st[i].num);

  printf("\n\t\t\t请输入所添加学生性别:");

  gets(st[i].sex);

  printf("\n\t\t\t请输入所添加学生年龄:");

  gets(st[i].age);

  printf("\n\t\t\t请输入所添加学生专业:");

  gets(st[i].major);

  fwrite(&st[i],sizeof(struct st_message),1,fp);

  printf("\n\n\t\t\t输入成功!^0^\n\n\t\t\t是否继续添加(Y/N)?");

  choice=getchar();

  if(choice=='y'||choice=='Y')

  continue;

  else

  {fclose(fp);

       break;

  }

 }

}

revise_message()                                                   /*修改模块*/

{system("color 4f");

 int i,choice,flag,fno,fsize,fnum;

 char re_name[20],s[20];

 FILE *fp;                                                         /*定义文件指针*/

 do

 {fp=fopen("student.txt","rt+");                                    /*打开文件*/

  fno=fileno(fp);

  fsize=filelength(fno);

  fnum=fsize/sizeof(struct st_message);

  system("cls");

  gets(s);

  printf("\n\n\n\t\t\t请输入需要修改的学生姓名:");

  gets(re_name);  

    for (i=0;i<fnum;i++)

      {

     

        fread(&st[i],sizeof(struct st_message),1,fp);

          if(!strcmp(re_name,st[i].name))

            { printf("\n\t\t             -----该学生信息-----\n\n");

           printf("\t   学号------姓名----班级--宿舍号--性别--年龄---专业------\n");

              printf("\t   -------------------------------------------------------\n");

             printf("\t   %-8s  %-6s  %-4s  %-6s  %-4s  %-4s  %-20s\n",st[i].num,st[i].name,

                 st[i].classs,st[i].dorm,st[i].sex,st[i].age,st[i].major);

              printf("\n\n\t\t\t您要修改哪一项?\n");

              printf("\t\t\t1.学号\n");

              printf("\t\t\t2.姓名\n");

              printf("\t\t\t3.班级\n");

              printf("\t\t\t4.宿舍号\n");

              printf("\t\t\t5.性别\n");

              printf("\t\t\t6.年龄\n");

              printf("\t\t\t7.专业\n");

              printf("\t\t\t8.返回主页\n");

           scanf("%d",&choice);

           switch(choice)

                {case 1:printf("\n\t\t\t请输入修改后的学号:");

              scanf("%s",st[i].num);break;

              case 2:printf("\n\t\t\t请输入修改后的姓名:");

                 scanf("%s",st[i].name);break;

              case 3:printf("\n\t\t\t请输入修改后的班级:");

                 scanf("%s",st[i].classs);break;

              case 4:printf("\n\t\t\t请输入修改后的宿舍号:");

              scanf("%s",st[i].dorm);break;

              case 5:printf("\n\t\t\t请输入修改后的性别:");

                 scanf("%s",st[i].sex);break;

              case 6:printf("\n\t\t\t请输入修改后的年龄:");

                 scanf("%s",st[i].age);break;

更多相关推荐:
c语言图书管理系统课程设计报告

合肥学院计算机科学与技术系课程设计报告20xx20xx学年第二学期课学学专指业导班教生姓程C语言课程设计图书管理系统名号级师课程设计名称20xx年6月一需求分析为了满足图书管理的要求通过计算机技术给图书管理人员...

c语言课程设计报告·图书管理系统

第一章11题目描述图书管理系统设计要求图书管理信息包括图书名称图书编号单价作者存在状态借书人姓名性别学号等试设计一图书管理系统使之能提供以下功能1新图书基本信息的输入2图书基本信息的查询3对撤销图书信息的删除4...

C语言图书管理系统课程设计报告[1]

第三章图书管理系统的设计与实现3.1系统的需求分析图书登记管理系统作为一个应用软件将为学校的老师和学生提供一个对学校图书馆深入了解并借阅、还书的平台。根据系统界面的提示信息对图书馆信息进行查询、初始化等操作系统…

c语言图书管理系统课程设计报告

沈航北方科技学院课程设计说明书课程名称教学部专业数控班级B042111学号B04211123学生姓名指导教师赵小磊20xx年6月链表实现图书信息操作田文目录摘要31绪论32系统分析321功能需求322数据需求4...

c语言图书管理系统课程设计报告

河南工业大学C语言课程设计报告20xx20xx学年第2学期课程C语言课程设计课程设计名称图书管理系统姓名晁永兵学号20xx16040220学院信息科学与工程学院专业软件工程班级2班20xx年05月04日一需求分...

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

C语言图书管理系统课程设计报告

C语言图书管理系统课程设计报告引言随着社会经济的迅速发展和现代科学技术的进步,人类社会正逐渐走向现代化。计算机事业的飞速发展,使得以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。同时,随着经济文化水平的…

C语言图书馆管理系统课程设计报告12

C语言课程设计学生姓名袁盛升学生学号所在班级任课教师姜林10211121图书馆管理系统设计目的图书信息包括登录号书名作者名分类号出版单位出版时间价格等试设计一图书信息管理系统使之能提供以下功能1系统以菜单方式工...

基于vc++的C语言图书馆管理系统课程设计报告

图书管理课程设计学生姓名学生学号所在班级任课教师图书馆管理系统设计目的图书信息包括登录号书名作者名分类号出版单位出版时间价格等试设计一图书信息管理系统使之能提供以下功能1系统以菜单方式工作2图书信息录入功能图书...

C语言课程设计报告—图书信息管理系统

C语言课程设计报告图书信息管理系统设计指导老师:C语言程序设计编程实践是学习C语言程序设计的一重要环节,上机实习和课程设计是提高同学们程序设计能力的有效途径,能够使同学们初步掌握程序设计的基本方法和调试技能。学…

C语言程序设计报告__图书馆信息管理系统

20xx年第二阶段课程设计成果报告实训项目程序设计技术课程设计学号20xx0210470335姓名郑毓豪专业电气工程及其自动化实训日期20xx年6月8日至20xx年6月20日指导教师舒蔚实训成绩华东交通大学理工...

《C语言程序设计》课程设计报告(图书信息管理系统)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:会计学院专业:会计学年级:20##班别:4班指导教师:组长:同组成员:目录一、目的...............................…

c语言图书管理系统课程设计报告(26篇)