1、宿舍管理系统C语言实验报告材料C语言程序设计报告题 目:宿舍管理系统院系名称:电子工程学院 专业名称:计算机科学与技术班 级:1001 学生姓名:XXX学号(8位):13指导教师:XXX设计起止时间:2011年6月22日2011年6月30日一. 设计目的学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工一条条去查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社
2、会是飞速进步的而世界,原始的记录方式已经被社会所淘汰,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。故随着宿舍需要管理的信息快速增长,建立一个宿舍管理系统可使宿舍管理人员的管理工作系统化、规范化、自动化,大大提高管理效率。二. 设计内容1.录入学生信息2.显示学生信息3.插入学生信息4.修改学生信息5.删除学生信息6.排序学生信息7.统计学生信息8.管理员密码三概要设计1.录入学生信息将信息保存至
3、文件中2.从文件中读取信息显示出学生信息3. 从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中4. 从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中5.统计学生信息按照宿舍号、楼层、楼号分别统计出人数6.管理员进入此系统需输入密码,而学生进入则不需要1功能模块图;2各个模块详细的功能描述。1.录入学生信息录入学生信息将信息保存至文件中2.显示学生信息从文件中读取信息显示出学生信息3.插入学生信息从文件中读取信息存至单链表中,传递头指针从而插入学生信息,再将修改完成的学生信息保存至文件中4.修改学生
4、信息从文件中读取信息存至单链表中,传递头指针从而修改学生信息,再将修改完成的学生信息保存至文件中5.删除学生信息从文件中读取信息存至单链表中,传递头指针从而删除学生信息,再将修改完成的学生信息保存至文件中6.排序学生信息从文件中读取信息存至单链表中,传递头指针从然后用冒泡法排序学生信息,再将修改完成的学生信息保存至文件中7.统计学生信息统计学生信息按照宿舍号、楼层、楼号分别统计出人数四测试数据及运行结果1正常测试数据和运行结果要求提供3组正常测试数据和运行结果排序查找2异常测试数据及运行结果要求提供2组异常测试数据和运行结果五调试情况,设计技巧及体会1改进方案对自己的设计进行评价,指出合理和不
5、足之处,提出改进方案; 管理员密码不精致,会被管理员以外的人看到保密性不好。插入、删除、修改等函数太过繁琐。2体会对设计及调试过程的心得体会:在这一周多的实习中,让我对C语言有了更深刻的认识,不但复习了原来所学的知识,更对新的知识有了了解。在调试过程中,通过自己学习,寻求老师、同学的帮助解决了许多不懂的问题。六参考文献C语言程序设计(第二版)七附录:源代码(电子版)#include#include#include#include#include#include#define P 学号:%-8ld姓名:%-8s班级:%-10s楼号:%-3s楼层:%-3s宿舍号:%-3sn,p-num,p-nam
6、e,p-classes,p-bnum,p-fnum,p-rnum#define N sizeof(struct stud)manager();main();student();struct stud long num; char name20; char classes20; char bnum5; char fnum5; char rnum5; struct stud *next; ;struct node char mima10; struct node *next; ;/*/ 录入学生信息/*/struct stud *input_message() struct stud *p1,*p
7、2,*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
8、 %s %sn,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 %sn,p1-num,p1-n
9、ame,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
10、stud *)malloc(N); head-next=NULL; p=head; while(!feof(fp) p1=(struct stud*)malloc(N); fscanf(fp,%ld %s %s %s %s %sn,&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,f
11、size; 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 %sn,&p-num,p-name,p-classes,p-bnum,p-fnum,p-rnum); printf(P); n=1; fcl
12、ose(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 %sn,p1-num,p1-name,p1-classes,p1-bnum,p1-fnum,p1-rnum); fclo
13、se(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(nnnn); printf( * n); printf( 欢迎进入宿舍管理系统 n); printf( * n); printf(n 1.返回上一级 n); printf(n 1.按学生学号查找 n); printf(n 2.按学生姓名查找 n); printf(n
14、 3.按宿舍号查找 n); printf(nnn); printf(请选择:); scanf(%d,&b); printf(nnn); / 按学生学生学号 if(b=1) printf(n请输入要查找的人的学号:n); scanf(%ld,&nnum); while(!feof(fp) fscanf(fp,%ld %s %s %s %s %sn,&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(
15、b=2) char nname20; printf(n请输入要查找的人的姓名:); scanf(%s,&nname); while(!feof(fp) fscanf(fp,%ld %s %s %s %s %sn,&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 nrnum20; printf(n请输入要查找的宿舍号:); scanf(%s,&nrnum); whi
16、le(!feof(fp) fscanf(fp,%ld %s %s %s %s %sn,&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(请输入要删除的人的学号:
17、); 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(nnnn); printf( * n); printf( 欢迎进入宿舍管理系统 n); p
18、rintf( * n); printf(n 0.返回上一级 n); printf(n 1.插入学生信息 n); printf(n 2.修改学生信息 n); printf(nnn); printf(请选择:); scanf(%d,&b); printf(nnn); 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=p
19、0-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(
20、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(nnnn); printf( * n); printf( 欢迎进入宿舍管理系统 n); printf( * n); printf(n 0.返回上一级 n); printf(n 1.输入楼号统计人数 n); printf(n 2.输入
21、楼层号统计人数 n); printf(n 3.输入宿舍号统计人数 n); printf(nnn); printf(请选择:); scanf(%d,&b); printf(nnn); / 按楼号统计 if(b=1) char nbnum20; printf(n请输入要统计的楼号:n); scanf(%s,&nbnum); while(!feof(fp) fscanf(fp,%ld %s %s %s %s %sn,&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 nfnum20; printf(n请输入要统计的楼层号:n); scanf(%s,&nfnum); while(!feof(fp) fscanf(fp,%ld %s %s %s %s %sn,&p-num,p-name,p-classes,p-bnum,p-fnum,p-rnum);