宿舍管理系统c语言设计.docx
- 文档编号:24847475
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:39
- 大小:212.05KB
宿舍管理系统c语言设计.docx
《宿舍管理系统c语言设计.docx》由会员分享,可在线阅读,更多相关《宿舍管理系统c语言设计.docx(39页珍藏版)》请在冰豆网上搜索。
宿舍管理系统c语言设计
河南工程学院
《数据结构》课程设计
成果报告
姓名
学号
学院计算机学院
专业班级计算机科学与技术1521
专业课程数据结构
指导老师李芳
2016年6月20日
河南工程学院计算机学院
课程设计报告书
课程设计题目:
课程设计时间:
6月20日~6月24日
课程设计地点:
计算机学院1201
课程设计单位:
计算机学院
指导教师:
李芳学院院长:
曲宏山
本组组长
夏少峰
本组成员
夏少峰、丁宏阁、曲宣榕
设计题目
宿舍管理查询系统
本人分工
资料查询,设计思路、算法设计、部分代码编制、
代码调试
考核项目
考核内容
得分
平时考核
(30分)出勤情况、态度、效率、协作精神;知识掌握情况、基本操作技能、知识应用能力、获取知识能力
设计思想
(20分)需求分析能力,算法分析设计能力
编码、调试分析
(30分)编制代码能力,调试分析能力
文档资料
(20分)表达能力、文档写作能力和文档的规范性
总评成绩
指导教师评语:
等级:
评阅人:
职称:
副教授
年月日
1设计目标1
2课题分析1
2.1需求分析1
2.2存储结构设计2
2.3算法设计及其分析2
2.4程序流程图11
3程序清单12
4系统测试30
4.1测试数据30
4.2测试结果31
5总结33
5.1收获33
5.2不足33
5.3算法改进分析33
1设计目标
随着计算机技术的发展以及网络的发展,对学生宿舍的管理与控制越来越实用并且得到管理者的证实,无论是查询还是修改都有很方便,查询的信息一目了然。
这个程序包含了学生宿舍信息的录入、修改,学生楼栋信息的录入、毕业生的退舍、智能分配宿舍等功能,但不能进行删除的操作,总体来说使用简单方便。
这个程序应该满足以下几个要求:
(1)信息的输入:
需要建立起完整的宿舍信息数据库,从而实现通过输入学生入住的楼栋号、宿舍号,该宿舍入住的人数以及入住的学生的信息(包括学生的姓名、学号和系别),来添加学生信息,实现信息录入。
(2)信息的修改:
进行信息输入后,过一段时间后,想要对里面的信息进行修改,可以通过学号等关键字对其进行修改。
(3)信息的查询:
这个程序应该可以实现通过按学号或房号进行查找的过程。
在此使用的是折半法,查找过程是:
先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
这样可以缩短查找时间,同时还可以减少查找的次数。
(4)退出程序:
当完成了所有的操作之后就要进行退出操作了。
2课题分析
2.1需求分析
学生宿舍管理是一个很大的项目,在早期,还没有利用计算机管理时,一切都是利用人工进行管理的,这样管理起来既烦琐又复杂,资料也很容易被丢失,而且耗时、耗资金。
而利用本系统,可以高效地对学生宿舍进行统一管理与控制,资料也不容易被丢失,这样大大节省了人力与资源,提高了管理效率,给管理人员带来很多方便,基于以上分析有如下分析:
(1)要实现交互工作方式,各项操作结束后均应返回主菜单。
(2)系统本无任何信息数据,要建立数据文件,需要开发一个信息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,所以我们开发信息存盘功能;
(3)信息录入后都要保存在内存中,用户看不到,需要设计一个信息显示功能,信息的显示应该便于查询,所以需要具备按各种关键字显示的功能;
(4)由于有些新同学入校,所以设计了插入功能;
(5)当用户操作完毕需要退出时,提供了退出选项,便于使用者退出交互式工作系统
2.2存储结构设计
本系定义的存储结构为顺序存储结构,结构体为
typedefstruct{
charID[20];//学号
charname[20];//姓名
chargender[10];//性别
chardormitory[4];//宿舍号
}Student;
typedefstruct{
charID[4];//宿舍号
intmax_num;//可容纳人数
intcurrent_num;//已入住人数
chargender[10];//男舍或女舍
2.3算法设计及其分析
在此系统中,根据对查阅资料的了解,我们对宿舍人员的信息以及各种函数进行了定义,具体如下:
(1)将宿舍人员信息定义为一个名字为typedefstruct的结构体,其中包括charID{20},charname[20],cahrgender[10],chardormitory[4]分别表示学号、姓名、性别和宿舍号,将宿舍信息定义为一个名字为typedefstruct的结构体,其中包括charID[4],charmax_num,charcurrent_num,chargender[10],分别是宿舍号、可容纳人数、已入住人数、男舍或者女舍。
(2)功能函数加上主函数一共有十二个,功能函数包括create(),open(),insert_dorm(),insert_stu(),dormnumsearch(),change(),namesearch(),check_out(),numsearch(),exchange(),display(),main(),分别用新增楼栋,新增宿舍信息,新增学生入住宿舍信息,毕业生退舍,互换宿舍,姓名查询,学号查询,宿舍号查询,互换宿舍,调换宿舍,职能分配宿舍,退出本系统的功能。
(3)在主函数中,使用一个while语句来选择调用主菜单中的各个功能函数。
由于本人负责新增宿舍楼栋,新增宿舍信息,新增学生宿舍信息的功能,所以操作如下:
单击数字键“0”则为新增楼栋信息
单击数字键“1”则为新增宿舍信息
单击数字键“2”则为新增学生宿舍信息
在每次操作前都要输入相应的编号。
各功能函数的具体实现如下:
voidcreate(){
printf("\n请输入新增楼栋名称:
\n");
scanf("%s",);
_fp=fopen(,"rb+");
if(_fp==NULL){//如果文件不存在则建立文件否则提示文件已存在
_fp=fopen(,"wb+");
fp=fopen(strcat(,"学生"),"wb+");
if(fp==NULL||_fp==NULL){
printf("open!
\n");
exit(-1);
}
}
else
printf("文件已存在!
\n");
fclose(fp);
fclose(_fp);
}
voidopen(){
printf("请输入学生宿舍所在楼栋:
\n");
scanf("%s",);
_fp=fopen(,"rb+");
fp=fopen(strcat(,"学生"),"rb+");
if(fp==NULL||_fp==NULL){
printf("open!
\n");
exit(-1);
}
}
voidinsert_dorm(){
Dormitory*d=(Dormitory*)malloc(sizeof(Dormitory));
open();
printf("\n请输入宿舍号,可容纳学生数,已容纳学生数,男舍/女舍(空格隔开,‘#’结束):
\n");
scanf("%s",d->ID);
while(strcmp(d->ID,"#")){
scanf("%d%d%s",&d->max_num,&d->current_num,d->gender);
fwrite(d,sizeof(Dormitory),1,_fp);
scanf("%s",d->ID);
}
fclose(_fp);
fclose(fp);
}
voidinsert_stu(){
longlocate,pre_locate;
intflag=0;
Student*s=(Student*)malloc(sizeof(Student));
Dormitory*d=(Dormitory*)malloc(sizeof(Dormitory));
open();
printf("\n请输入学号、姓名、性别、宿舍号(空格隔开,‘#’结束):
\n");
scanf("%s",s->ID);
while(strcmp(s->ID,"#")){//不相等继续读取,相等为0便退出循环不再读取数据
scanf("%s%s%s",s->name,s->gender,s->dormitory);
locate=ftell(_fp);
while(fread(d,sizeof(Dormitory),1,_fp)){
if(!
strcmp(d->ID,s->dormitory)){//每增加一个学生,相应寝室的实际人数应当增加一个
fseek(_fp,locate,SEEK_SET);
d->current_num++;
fwrite(d,sizeof(Dormitory),1,_fp);
flag=1;
break;
}
locate=ftell(_fp);
}
if(flag==0){
printf("不存在该宿舍!
\n");
exit(-1);
}
fwrite(s,sizeof(Student),1,fp);
rewind(_fp);
scanf("%s",s->ID);
}
fclose(_fp);
fclose(fp);
}
voidchange(){
intflag=0,tag=0;
longlocate,locate_b,locate_c;
charinput_stunum[20];
charinput_dormnum[4];
charprevious_dormnum[4];
Student*s=(Student*)malloc(sizeof(Student));
Dormitory*d=(Dormitory*)malloc(sizeof(Dormitory));
open();
printf("\n请输入需要调换宿舍学生学号:
\n");
scanf("%s",input_stunum);
locate=ftell(fp);
while(fread(s,sizeof(Student),1,fp)){
if(!
strcmp(input_stunum,s->ID)){
flag=1;
printf("该学生信息如下:
\n%-20s%-20s%-20s%-20s\n","学号","姓名","性别","宿舍号");
printf("%-20s%-20s%-20s%-20s\n",s->ID,s->name,s->gender,s->dormitory);
strcmp(previous_dormnum,s->dormitory);
printf("\n请输入新宿舍的宿舍号:
\n");
scanf("%s",input_dormnum);
locate_b=ftell(_fp);
while(fread(d,sizeof(Dormitory),1,_fp)){
if(!
strcmp(input_dormnum,d->ID)){
tag=1;
if(d->current_num==d->max_num)
printf("该宿舍已满员!
");
else{
//更换学生宿舍信息
fseek(fp,locate,SEEK_SET);
strcpy(s->dormitory,input_dormnum);
fwrite(s,sizeof(Student),1,fp);
//更换新宿舍信息
fseek(_fp,locate_b,SEEK_SET);
d->current_num++;
fwrite(d,sizeof(Dormitory),1,_fp);
rewind(_fp);
//更换旧宿舍信息
locate_c=ftell(_fp);
while(fread(d,sizeof(Dormitory),1,_fp)){
if(!
strcmp(previous_dormnum,d->ID)){
fseek(_fp,locate_c,SEEK_SET);
d->current_num--;
fwrite(d,sizeof(Dormitory),1,_fp);
break;
}
locate_c=ftell(_fp);
}
}
break;
}
locate_b=ftell(_fp);
}
if(tag==0){
printf("不存在该宿舍!
");
exit(-1);
}
break;
}
locate=ftell(fp);
}
if(flag==0)
printf("\n不存在该学生!
\n");
fclose(_fp);
fclose(fp);
}
voidnamesearch(){
intflag=0,tag=0;
longlocate;
charinput_name[20];
chardor_num[4];
charID[20];
Student*s=(Student*)malloc(sizeof(Student));
Dormitory*d=(Dormitory*)malloc(sizeof(Dormitory));
open();
printf("\n请输入需要搜索的姓名:
\n");
scanf("%s",input_name);
while(fread(s,sizeof(Student),1,fp)){
locate=ftell(fp);//记录下按名字搜索到达的位置
if(!
strcmp(input_name,s->name)){
flag=1;
printf("\n学生信息如下:
\n%-20s%-20s%-20s%-20s\n","学号","姓名","性别","宿舍号");
printf("%-20s%-20s%-20s%-20s\n",s->ID,s->name,s->gender,s->dormitory);
strcpy(dor_num,s->dormitory);
strcpy(ID,s->ID);
rewind(fp);//指针重置于文件头,查找室友
printf("\n其室友信息如下:
\n%-20s%-20s%-20s%-20s\n","学号","姓名","性别","宿舍号");
while(fread(s,sizeof(Student),1,fp)){//室友宿舍号相同,学号不同
if((!
strcmp(dor_num,s->dormitory))&&(strcmp(s->ID,ID))){
printf("%-20s%-20s%-20s%-20s\n",s->ID,s->name,s->gender,s->dormitory);
tag=1;
}
}
if(tag==0)
printf("\n没有室友!
\n");
tag=0;
while(fread(d,sizeof(Dormitory),1,_fp)){
if(!
strcmp(dor_num,d->ID)){
printf("\n该学生所在寝室信息如下:
\n%-20s%-20s%-20s%-20s\n","宿舍号","可容纳学生数","已容纳学生数","男舍/女舍");
printf("%-20s%-20d%-20d%-20s\n",d->ID,d->max_num,d->current_num,d->gender);
break;
}
}
//break;
}
//同名情况
if(flag)
fseek(fp,locate,SEEK_SET);
}
if(flag==0)
printf("\n没有符合条件的学生的记录!
\n");
fclose(_fp);
fclose(fp);
}
voidcheck_out(){
charstu_num[20];
chardorm_num[20];
longlocate,locate_b;
Student*s=(Student*)malloc(sizeof(Student));
Dormitory*d=(Dormitory*)malloc(sizeof(Dormitory));
open();
printf("\n请输入退宿学生学号:
\n");
scanf("%s",stu_num);
locate=ftell(fp);
while(fread(s,sizeof(Student),1,fp)){
//locate=ftell(fp);
if(!
strcmp(s->ID,stu_num)){
strcpy(dorm_num,s->dormitory);
fseek(fp,locate,SEEK_SET);
memset(s,0,sizeof(Student));
fwrite(s,sizeof(Student),1,fp);
2.4程序流程图
3程序清单
#define_CRT_SECURE_NO_WARNINGS
#include
#include
#include
typedefstruct{
charID[20];//学号
charname[20];//姓名
chargender[10];//性别
chardormitory[4];//宿舍号
}Student;
typedefstruct{
charID[4];//宿舍号
intmax_num;//可容纳人数
intcurrent_num;//已入住人数
chargender[10];//男舍或女舍
}Dormitory;
char[20];
FILE*fp;//学生信息文件指针
FILE*_fp;//宿舍信息文件指针
voidcreate(){
printf("\n请输入新增楼栋名称:
\n");
scanf("%s",);
_fp=fopen(,"rb+");
if(_fp==NULL){//如果文件不存在则建立文件否则提示文件已存在
_fp=fopen(,"wb+");
fp=fopen(strcat(,"学生"),"wb+");
if(fp==NULL||_fp==NULL){
printf("open!
\n");
exit(-1);
}
}
else
printf("文件已存在!
\n");
fclose(fp);
fclose(_fp);
}
voidopen(){
printf("请输入学生宿舍所在楼栋:
\n");
scanf("%s",);
_fp=fopen(,"rb+");
fp=fopen(strcat(,"学生"),"rb+");
if(fp==NULL||_fp==NULL){
printf("open!
\n");
exit(-1);
}
}
voidinsert_dorm(){
Dormitory*d=(Dormitory*)malloc(sizeof(Dormitory));
open();
printf("\n请输入宿舍号,可容纳学生数,已容纳学生数,男舍/女舍(空格隔开,‘#’结束):
\n");
scanf("%s",d->ID);
while(strcmp(d->ID,"#")){
scanf("%d%d%s",&d->max_num,&d->current_num,d->gender);
fwrite(d,sizeof(Dormitory),1,_fp);
scanf("%s",d->ID);
}
fclose(_fp);
fclose(fp);
}
voidinsert_stu(){
longlocate,pre_locate;
intflag=0;
Student*s=(Student*)malloc(sizeof(Student));
Dormitory*d=(Dormitory*)malloc(sizeof(Dormitory));
open();
printf("\n请输入学号、姓名、性别、宿舍号(空格隔开,‘#’结束):
\n");
scanf("%s",s->ID);
while(strcmp(s->ID,"#")){//不相等继续读取,相等为0便退出循环不再读取数据
scanf("%s%s%s",s->name,s->gender,s->dormitory);
locate=ftell(_fp);
while(fread(d,sizeof(Dormitory),1,_fp)){
if(!
strcmp(d->ID,s->dormitory)){//每增加一个学生,相应寝室的实际人数应当增加一个
fseek(_fp,locate,SEEK_SET);
d->current_num+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 宿舍 管理 系统 语言 设计