数据结构课设宿舍管理系统Word下载.docx
《数据结构课设宿舍管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课设宿舍管理系统Word下载.docx(38页珍藏版)》请在冰点文库上搜索。
2、设计结构体及函数表
(1)结构体
#defineN100//宏定义,线性表的初始最大长度
#defineM10//宏定义,
typedefstruct
{
charname[20];
//学生姓名
}Stu;
intnum;
//宿舍号
charsex[4];
//性别
intrn_num;
//容纳人数
intfee;
//宿舍费用
intyz_num;
//已住人数
Stu*stud;
//入住学生姓名
}room;
//宿舍信息
typedefstruct
intlen;
//当前长度
room*data;
//存储空间基址
intlinesize;
//当前分配的存储容量
}linklist;
//定义线性表
intf;
//全局变量,存放操作序号
2)函数表
voidinit(linklist&
l);
/*参数:
线性表l*/
/*返回值:
无返回值*/
/*功能:
对线性表l进行初始化*/
voidroom_num_sort(linklist&
利用宿舍号对宿舍进行排序*/
voidmenu();
无参数*/
显示操作菜单*/
voiddisplay1(linklist&
/功能:
显示宿舍的相关信息(除宿舍已住人数及已住学生姓名外)*/
voiddisplay2(linklist&
显示宿舍的相关信息(包括宿舍已住人数及已住学生姓名)*/
voidfunction1(linklist&
录入宿舍的相关信息*/
voidfunction2(linklist&
将学生安排到已经输入的宿舍里住宿*/
voidfunction3(linklist&
已住学生退宿*/
voidfunction4(linklist&
通过宿舍号查询指定宿舍的相关信息*/
voidmain();
主函数*/
3)主函数与各模块的调用
linklistl;
//定义线性表l
init(l);
//调用初始化函数
charch,ch2;
system("
color1e"
);
//调节显示的背景以及前景
printf("
\n"
*************************欢迎进入宿舍管理查询系统*************************\n"
请按任意键开始操作:
"
Fflush(stdin);
//清空输入缓冲区,以得到正确的输入结果
scanf("
%c"
&
ch);
cls"
//将屏幕先前显示的内容清理掉
menu();
//调用主菜单函数
while(f!
=0)
switch(f)
{
case1:
function1(l);
break;
//调用录入宿舍信息函数
case2:
function2(l);
//调用学生入宿函数
case3:
function3(l);
//调用学生退宿函数
case4:
function4(l);
//调用查询宿舍信息函数
case5:
printf("
是否退出系统<
y/n>
:
\t"
fflush(stdin);
scanf("
ch2);
if(ch2=='
y'
||ch2=='
Y'
)
{
system("
exit(0);
}
else
menu();
}break;
}
}
四详细设计
各算法的实现
1)定义结构体
//性别
//入住学生姓名
}room;
2)定义顺序表
//当前分配的存储容量
3)功能菜单的显示
voidmenu()
charch;
printf("
|****************************************************************|\n"
|**************************宿舍管理系统**************************|\n"
|*****************************主菜单*****************************|\n"
||\n"
|1、宿舍信息录入2、学生分配宿舍|\n"
|3、住宿学生退宿4、宿舍信息查询|\n"
|5、退出系统|\n"
请输入你想进行的操作:
scanf("
%d"
f);
if(f<
1||f>
5)
操作序号输入错误!
\n按任意键返回主菜单重新输入!
system("
menu();
4)录入宿舍的相关信息
l)
inti,j,m;
charch2;
system("
if(l.len>
=l.linesize)//判断线性表的长度是否超过线性表的存储空间的长度
room*newbase;
newbase=(room*)realloc(l.data,(N+M)*sizeof(room));
//给线性表再分配长度为M的内存空间
l.data=newbase;
l.linesize+=M;
请输入你要输入的宿舍的个数:
j);
for(m=0;
m<
j;
m++)
i=l.len;
请输入第%d个宿舍基本信息:
i+1);
宿舍号码\t学生性别\t容纳人数\t住宿费用\n"
%d%s%d%d"
l.data[i].num,l.data[i].sex,&
l.data[i].rn_num,&
l.data[i].fee);
l.data[m].yz_num=0;
l.data[m].stud=NULL;
l.len++;
room_num_sort(l);
display1(l);
按任意键返回主菜单!
fflush(stdin);
//清屏
menu();
5)学生入宿
inti,room_num,j;
charch,ch2;
Stun;
请输入需要住宿的学生的宿舍号:
room_num);
for(i=0;
i<
l.len;
i++)
if(l.data[i].num==room_num)
if(l.data[i].yz_num==l.data[i].rn_num)
{
printf("
该房间已满!
按回车键返回...\n"
fflush(stdin);
scanf("
system("
menu();
}
if(l.data[i].yz_num==0)
l.data[i].stud=(Stu*)malloc(M*sizeof(Stu));
j=0;
请输入入住该宿舍的学生的姓名:
gets(n.name);
strcpy(l.data[i].stud[j].name,n.name);
j++;
l.data[i].yz_num++;
是否还有学生入住该宿舍<
while((j<
l.data[i].rn_num)&
&
(ch=='
||ch=='
))
{
printf("
fflush(stdin);
gets(n.name);
strcpy(l.data[i].stud[j].name,n.name);
j++;
l.data[i].yz_num++;
scanf("
if(j>
=l.data[i].rn_num)
{
printf("
%d宿舍已经住满!
l.data[i].num);
}
}
else
j=l.data[i].yz_num;
}
printf("
按任意键返回...\n"
fflush(stdin);
scanf("
未找到该宿舍!
6)已住宿学生退宿
inti,j,m,n,ch1;
chardelete_name[20];
introom_num;
你是否要进行退宿操作<
if(ch=='
请输入要退宿的学生的宿舍号:
for(m=0;
if(l.data[m].num==room_num)
{
请输入退宿学生的姓名:
%s"
delete_name);
for(j=0;
j<
l.data[m].yz_num;
j++)
if(strcmp(l.data[m].stud[j].name,delete_name)==0)
for(n=j;
n<
l.data[m].yz_num-1;
n++)
{
l.data[m].stud[n]=l.data[m].stud[n+1];
}
l.data[m].yz_num--;
退宿成功!
else
7)宿舍相关信息的查询
inti,j,ch2;
charch,ch1;
请输入你需要查询的宿舍的宿舍号:
宿舍号码\t学生性别\t容纳人数\t住宿费用\t已住人数\n"
%d\t\t"
%s\t\t"
l.data[i].sex);
l.data[i].rn_num);
l.data[i].fee);
%d\n"
l.data[i].yz_num);
已住学生姓名:
for(j=0;
l.data[i].yz_num;
%s\t"
l.data[i].stud[j].name);
ch1);
五调试分析
1、该系统功能简单明了,在编写程序过程中,以模块化实现功能是最好的方法,不过在函数的调用过程中出现了各种错误,如子函数的变量未命名,与主函数的不一致,经常在编译时出现变量,函数名不合法的现象,但是好在有分模块写,查找改正错误非常方便。
2、系统能正常运行后,我对菜单界面做了一些后期美化,此步骤通常放在最后,因为这样可以在未实现系统功能时,减小程序的复杂度,方便改写程序。
当完成基本框架后,我通过一次次的运行程序来更改添加必要的提示内容。
做了一些外观上的整改,使系统更人性化。
3、程序编写过程中出现过许多错误,经调试发现大多数错误是由于的不到正确的输入结果,然后通过查阅资料发现这个是由于输入数据过多,导致输入的数据错误,只要在输入数据前加上“fflush(stdin)”这条语句就可以了,该条语句的功能是清空输入缓冲区。
4、前期在程序运行过程中,如果宿舍的学生未住满时,再有学生入住该宿舍,以前输入的学生会被覆盖,经查询发现,是在输入学生姓名的时候出错,每次输入都是从第0个开始输入,所以才会被覆盖,后来只要在输入之前判断宿舍的已住人数是否为0,就可以解决该问题了,这样就不会被覆盖了。
六测试结果
1、欢迎界面
运行程序进入欢迎界面
2、菜单显示
在欢迎界面按任意键后进入菜单
3、录入宿舍的相关信息
选择功能一,跳转到录入宿舍信息界面
输入完成后系统会显示你输入的宿舍的相关信息
4、学生分配宿舍
选择功能二,跳转到学生入宿界面
5、已住学生退宿
选择功能三,进入学生退宿界面
6、显示宿舍的相关信息
选择功能四,进入宿舍信息查询界面
7、未住满宿舍再入宿
选择功能二,进入学生分配宿舍界面
再选择功能四,查询该宿舍的相关信息,显示之前信息未被覆盖
七用户使用说明
本程序具有良好的交互式界面,用户使用本程序,操作简便,只要在按照菜单输入相应的操作序号即可。
在录入以及退出功能上还通过输入“y或n”来判断是否执行用户的目的,简单明了。
本程序在重要内容上还设置了报错提示,确认提示的能够更好的帮助顾客实现自己想要的功能。
八课程设计总结
1、程序
虽然在此之前做了软件基础的实验,编写了一些小程序来