宿舍管理系统精选文档.docx
《宿舍管理系统精选文档.docx》由会员分享,可在线阅读,更多相关《宿舍管理系统精选文档.docx(36页珍藏版)》请在冰点文库上搜索。
宿舍管理系统精选文档
TTMSsystemofficeroom【TTMS16H-TTMS2A-TTMS8Q8-TTMSHHJ8】
宿舍管理系统精选文档
HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGY
C语言程序设计
课程设计报告
课设题目:
宿舍管理系统
系部:
电气与信息工程学院
专业:
电子信息科学与技术(车联网工程)
姓名:
李鑫
完成日期:
2014年6月25日-2014年7月5日
1.课程设计目的
1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2)通过课程设计,进一步掌握C语言中重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。
5)通过课程设计,加强了自己的程序分析能力。
2.需求分析
要求
1)遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。
2)运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。
3)学会利用数组、结构体、链表进行相关信息表示。
4)功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述
5)各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。
6)所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。
7)界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。
8)程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。
9)学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。
10)掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。
11)C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。
任务描述
现学校要管理宿舍入住的学生,请设计一宿舍管理程序,以方便学校宿舍管理员对学生进行管理,该程序应该具有以下功能:
1)能从键盘录入床位信息。
2)指定学号,显示该学生的住宿的信息。
3)指定宿舍号,显示住宿信息。
4)给定宿舍号、床位号,修改住宿信息。
5)给定宿舍号、床位号,删除住宿信息。
运行环境
1)WindowsXP/7系统
2)VC++编译环境
开发工具
C语言
3.总体设计
系统模块设计
1)欢迎及信息导入界面:
构造函数intmain(),显示欢迎及制作信息。
构造函数voidloadRec(),从磁盘文件导入住宿信息到内存。
2)主菜单界面:
构造函数intmenu_select(),实现系统主菜单的显示。
3)住宿信息新建:
构造函数voidcreateRec(),新建或录入学生住宿信息。
4)住宿信息查询:
构造函数voidsearchRec()查询指定学号的学生住宿信息。
5)住宿信息修改:
构造函数voidmodifyRec()修改指定宿舍号及床位号的学生住宿信息。
6)住宿信息删除:
构造函数voiddeleteRec()实现对指定宿舍号及床位号的学生住宿信息记录的删除。
并通过函数free(),释放内存空间。
7)住宿信息浏览:
构造函数voidlistRec(),实现对指定宿舍住宿信息浏览界面的显示。
8)住宿信息统计:
构造函数voidcountRec(),实现对床位信息中空床位数的统计。
9)住宿信息保存:
构造函数voidwriteInfo(),保存学生住宿信息。
10)退出界面:
构造函数voidexit0()退出程序。
系统功能模块图
4.详细设计
数据结构设计
根据系统要求,系统中需要保存的数据信息,其结构如下:
数据项名称
数据项系统表示
数据类型
数据长度
备注
姓名
p1->name
字符串
20
学号
p1->id
字符串
20
班级
p1->classs
字符串
10
入住时间
p1->
p1->
p1->
整形
床位信息
p1->,
p1->
p1->
字符型
字符型
整形
10
5
根据系统要求,系统中需要保存的类别信息,其结构如下:
类别代号
charname[20]
charid[20]
charclasss[10]
DATEintake
类别名称
姓名
学号
班级
入住时间
类别代号
INFObed
类别名称
住宿情况
基本信息结构体
Typedefstruct
{
intyear;
intmonth;
intday;
}DATE;
Typedefstruct
{
chardorm[10];
charbedid[5];
intk;
}INFO;
structstudent
{
charname[20];
charid[20];
charclasss[20];
DATEintake;
INFObed;
structstudent*next;
};
模块接口设计
1)所有函数模块声明如下:
voidcreateRec();/*新建住宿信息记录*/
voidloadRec();/*从磁盘文件导入住宿信息到内存
voidsearchRec();/*查询住宿记录*/
voidmodifyRec();/*修改住宿记录*/
voidcountRec();/*统计空床位记录*/
voiddeleteRec();/*删除住宿记录*/
voidlistRec();/*显示住宿信息*/
voidwriteInfo();/*保存住宿记录*/
voidexit0();/*退出*/
intmenu_select();/*主菜单*/
2)定义一个全局变量以及结构体指针:
structstudent*head=NULL,*p1,*p2,*p3;定义结构体指针head为头指针,p1为输入数据缓存空间指针,p2为尾指针,p3为中间指针
intwriteinfo_flag=0;保存住宿信息标志的全局变量标志。
3)主要模块的实现
系统以主函数intmain()为入口
调用voidloadRec()函数导入住宿信息,然后调用intmenu_select();函数,进入主菜单界面。
系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。
以下是几个主要模块的流程图:
1)主菜单函数:
否
是
否是
图1主函数流程图
2)查询指定学号学生住宿信息函数:
图2显示指定宿舍学生住宿信息结构框图
3)新建或添加学生住宿信息函数:
图3新建若干组学生住宿信息结构框图
4)修改(删除)指定宿舍号及床位号的学生住宿信息函数:
图4修改(删除)指定宿舍号及床位号的学生住宿信息结构框图
5)显示指定宿舍号学生住宿信息函数:
图5显示指定宿舍号学生住宿信息函数结构框图
6)保存学生住宿信息函数:
图6保存学生住宿信息函数结构框图
5.运行结果
欢迎界面及文件信息导入:
图1欢迎界面及文件信息导入
主菜单界面:
图2主菜单界面
新建学生住宿信息:
图3新建学生住宿信息
查询指定学号的学生住宿信息:
图4查询指定学号的学生住宿信息:
修改指定宿舍号及床位号的学生住宿信息
图5修改指定宿舍号及床位号的学生住宿信息
删除指定宿舍号及床位号的学生住宿信息:
图6删除指定宿舍号及床位号的学生住宿信息
显示指定宿舍号的学生住宿信息:
图7显示指定宿舍号的学生住宿信息
统计空床位数:
图8统计空床位数
保存学生住宿信息
图9保存学生住宿信息
退出界面
图10退出界面
6.程序前后文本
1导入的文本
路径:
张强1112012-08-0612511
王阳明2112012-08-0612520
陈超3112012-08-0612530
李可4112012-08-0612841
2保存后的文本
路径:
王阳明2112012-8-612520
陈超3112012-8-612530
李可4112012-8-612841
陈东5112012-8-612810
7.编程体会
本次课程设计总体感觉要较之去年的简单了不少。
但由于C语言初学较差,基础薄弱,感觉还是存在较大的问题。
所以这次的编程实现主要是对教师模板进行的在修改,使得其满足课设中所提众多要求。
编程中大体要满足的一般都是新建、修改、删除、保存、查询、文件读入等功能,其中的删除和文件读入较为复杂。
个人认为这次课设的一个难点是要求运用链表实现编程。
不得不说链表的运用会提高程序的清晰度和可读性。
但由于链表理解起来较难,这会在应用上存在极大的难度。
课设中信息较为复杂,如床位信息、入住时间,都是作为一个信息存在,但本省包含多个信息量。
所以在定义结构体时,对结构体进行了另命名和结构体嵌套。
在创建、删除等链表等功能的实现中,经常需要找到当前结点之前的结点,也就是前驱结点。
随着程序的进展,也需要更新前驱结点指针。
在真正的程序应用中,总是会有许多出错的地方,比如各函数对输入数据格式的限制。
文件读入时,文件不存在,文件读取错误等。
还有指针应用中,申请空间及对废弃指针存储内容的释放等。
细节决定成败,程序编写中一个微小的错误就会引发一系列的错误,造成修改难度大,程序无法运行的诸多麻烦。
所以在程序编写之初,便应保持良好的心态,认真对待,有条不紊。
通过这次课程设计,我可以说是获益匪浅,不仅使得我回顾了大量的C语言知识,巩固了已知,在此基础之上,我还了解理解了虚度哦故去不是很理解或根本不知道的东西。
而且从另一侧面锻炼了我的心性,让我在对待事物上可以统筹,又可以对每一个部分进行充分的认识。
以及耐心,认真,反复检查,精益求精等良好的品行等。
总之,本次课设于我意义重大,受益良多。
8.程序源代码
/*已知一个宿舍的信息为:
床位信息(宿舍号、床位号、是否入住)、学号、姓名、班级、入住时间,从键盘输入n个宿舍的信息,并
将其保存在()文件中。
*/
/*所使用的有头文件*/
#include<>
#include<>
#include<>
#include<>
#include<>
#defineLENsizeof(structstudent)
/*结构体定义*/
typedefstruct
{
intyear;/*年*/
intmonth;/*月*/
intday;/*日*/
}DATE;
typedefstruct
{
chardorm[10];/*宿舍号*/
charbedid[5];/*床位号*/
intk;/*入住情况k=(0/1)*/
}INFO;
structstudent
{charname[20];/*姓名*/
charid[20];/*学号*/
charclasss[10];/*班级*/
DATEintake;/*入住时间*/
INFObed;/*床位信息*/
structstudent*next;
};
/*函数声明*/
voidcreateRec();/*新建住宿信息记录*/
voidloadRec();/*从磁盘文件导入住宿信息到内存*/
voidsearchRec();/*查询住宿记录*/
voidmodifyRec();/*修改住宿记录*/
voidcountRec();/*统计空床位记录*/
voiddeleteRec();/*删除住宿记录*/
voidlistRec();/*显示住宿信息*/
voidwriteInfo();/*保存住宿记录*/
voidexit0();/*退出*/
intmenu_select();/*主菜单*/
/*链表操作所用结构体指针*/
structstudent*head=NULL,*p1,*p2,*p3;/*定义结构体指针head为头指针p1为输入数据缓存空间指针p2为尾指针*/
/*宿舍记录保存标志全局变量*/
intwriteinfo_flag=0;
/*主函数*/
intmain()
{
printf("\n\t\t\n");
printf("\n\t\t○●○●○●○\n");
printf("\n\t\tC语言课程设计--宿舍管理\n\n");
printf("\n\t\t☆◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆☆\n");
printf("\n\t\t\n");
printf("\n\t\t※指导老师:
张吴波\n");
printf("\n\t\t※制作人:
李鑫班级:
T1223-11\n");
printf("\n\t\t※\n");
printf("\n\t\t※电话:
\n");
printf("\n\n\t\t***************************************************\n");
getchar();
system("cls");
loadRec();
for(;;)
{switch(menu_select())
{case1:
system("cls");createRec();break;
case2:
system("cls");searchRec();break;
case3:
system("cls");modifyRec();break;
case4:
system("cls");deleteRec();break;
case5:
system("cls");listRec();break;
case6:
system("cls");countRec();break;
case7:
system("cls");writeInfo();break;
case0:
system("cls");exit0();return0;
default:
{getchar();
system("cls");
printf("\n选择错误,请正确输入你的选择(0~7),:
\n");
printf("\n按任意键返回......\n");
getchar();
system("cls");/*清屏*/
}
}
}
return0;
}
/*主菜单*/
intmenu_select()
{intc;
printf("\n\t\t○●○●○●○●○●○●○●○\n");
printf("\n\t\t★欢迎使用简易宿舍管理系统\n");
printf("\n\t\t*********************************\n\n");
printf("\t\t*1.新建学生住宿信息\n");
printf("\t\t*2.查询指定学号的学生住宿信息\n");
printf("\t\t*3.修改指定宿舍号及床位号的学生住宿信息\n");
printf("\t\t*4.删除指定宿舍号及床位号的学生住宿信息\n");
printf("\t\t*5.显示指定宿舍号学生住宿信息\n");
printf("\t\t*6.统计空床位数\n");
printf("\t\t*7.保存学生住宿信息\n");
printf("\t\t*0.退出(任何情况下按Ctrl+C退出程序)\n\n");
printf("\t\t**********************************\n");
printf("\n请输入相应选择(0~7):
\n");
scanf("%d",&c);
returnc;
}
/*从磁盘文件导入学生住宿信息到内存*/
voidloadRec()
{FILE*fp;
intn=0;
if((fp=fopen("","r"))==NULL)/*打开文件*/
{printf("文件不存在或无法打开!
\n");
return;
}
head=p1=(structstudent*)malloc(LEN);/*开辟一个新单元*/
p1->next=NULL;
while(!
feof(fp))
{n++;
fscanf(fp,"%s%s%s%d-%d-%d%s%s%d",p1->name,p1->id,p1->classs,&p1->,&p1->,&p1->,p1->,p1->,&p1->;
if(p1->id[0]<'0'||p1->id[0]>'9'){n--;break;}
p2=(structstudent*)malloc(LEN);/*开辟一个新单元*/
p1->next=p2;
p3=p1;
p1=p2;
p1->next=NULL;
}
free(p2);
p3->next=NULL;
printf("\n\t\t%d项信息输入完毕,按任意键返回......\n",n);
getchar();
system("cls");/*清屏*/
writeinfo_flag=0;/*设置保存记录标志*/
if(fclose(fp))/*关闭文件*/
{
printf("Cannotclosethefile!
\n");
exit(0);
}
}
/*新建宿舍信息记录*/
voidcreateRec()
{intn,i;
if(head!
=0){p3=head;
while(p3->next!
=NULL)
p3=p3->next;
getchar();
printf("\n住宿信息数据库已存在,新建住宿信息将接续在原信息库的后面,按任意键继续......:
\n");
getchar();
system("cls");/*清屏*/
p3->next=p1=(structstudent*)malloc(LEN);/*开辟一个新单元*/
}
elsehead=p1=(structstudent*)malloc(LEN);/*开辟一个新单元*/
p1->next=NULL;
printf("\n\n请输入希望建立的住宿基本信息条数n(n<1&&n<10):
\n");
do{scanf("%d",&n);
if(n<1||n>10)printf("\n\n输入范围有误,请重新输入希望建立的宿舍基本信息条数n(n<1&&n<10):
\n");
}while(n<1||n>10);
/*开始建立n条学生住宿基本信息记录*/
printf("\n\n请输入学生的住宿信息如:
\n姓名学号班级入住时间宿舍号床位号入住情况(0/1)\n");
for(i=0;i{
scanf("%s%s%s%d-%d-%d%s%s%d",p1->name,p1->id,p1->classs,&p1->,&p1->,&p1->,p1->,p1->,&p1->;
p2=(structstudent*)malloc(LEN);/*开辟一个新单元*/
p1->next=p2;
p3=p1;
p1=p2;
p1->next=NULL;
}
free(p2);
p3->next=NULL;
printf("\n%d项信息输入完毕,按任意键返回......\n",n);
getchar();
system("cls");/*清屏*/
writeinfo_flag=1;/*清除保存记录标志*/
}
/*查询指定学号的学生住宿信息记录*/
voidsearchRec()
{
charid[20];
p1=head;
if(p1==NULL)
{printf("\n\n住宿信息数据库为空!
!
!
\n");
printf("\n按任意键返回......\n");
getch();
system("cls");/*清屏*/
return;
}
printf("\n\n请输入学生学号以便查证:
\n");
scanf("%s",id);
while(p1!
=NULL)
{if(strcmp(p1->id,id)==0)
{printf("\t该学生住宿信息如下:
\n\t姓名:
");
printf("%s\n",p1->name);
printf("\t学号:
");
printf("%s\n",p1->id);
printf("\t班级:
");
printf("%s\n",p1->classs);
printf("\t入住时间:
");
printf("%d-%d-%d\n",p1->,p1->,p1->;
printf("\t床位信息:
");
printf("%s%s%d\n",p1->,p1->,p1->);
break;
}
else{p1=p1->next;}
}
if(p1==NULL)printf("\n\n找不到该学生的相应住宿信息!
!
!
\n");
printf("\n按任意键返回......\n");
getch();
system("cls");/*清屏*/
}
/*修改指定宿舍号及床位号的学生住宿记录*/
voidmodifyRec()
{
chardorm