数据结构课设宿舍管理系统.docx

上传人:b****4 文档编号:4905600 上传时间:2022-12-11 格式:DOCX 页数:24 大小:97.12KB
下载 相关 举报
数据结构课设宿舍管理系统.docx_第1页
第1页 / 共24页
数据结构课设宿舍管理系统.docx_第2页
第2页 / 共24页
数据结构课设宿舍管理系统.docx_第3页
第3页 / 共24页
数据结构课设宿舍管理系统.docx_第4页
第4页 / 共24页
数据结构课设宿舍管理系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数据结构课设宿舍管理系统.docx

《数据结构课设宿舍管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课设宿舍管理系统.docx(24页珍藏版)》请在冰豆网上搜索。

数据结构课设宿舍管理系统.docx

数据结构课设宿舍管理系统

宿舍管理系统

—目的

根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。

通过课程设计,加深对《程序设计语言》和《软件技术基础》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:

数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。

学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。

二需求分析

1、要求

1)采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。

学生也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。

2)系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。

3)程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。

4)编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等)。

2、详细功能

宿舍信息包括:

宿舍号、性别、容纳人数、住宿费用、住宿学生姓名。

试设计一宿舍信息管理系统,使之能提供以下功能:

1•宿舍基本信息(包含宿舍号、性别、容纳人数、住宿费用)录入;

2•将学生分配到指定宿舍号的宿舍;3•已住宿的学生退宿舍;4•查询宿舍信息,包括宿舍号、性别、容纳人数、住宿费用、已住宿的人数、已住宿

学生姓名。

5.系统以菜单方式工作。

三概要设计

1、流程图

开始

功能选择输入

判断用户输入

 

输岀相关信息

流程图相关叙述:

用户运行程序时便正式进行了通讯录的使用,该通讯录分为五个功能,“1”选项对应

的是“宿舍信息录入”功能;u2”选项对应的是“将学生分配到宿舍”功能;“3”选

项对应的是“已住宿学生退宿”功能;“4”选项对应的是“删宿舍信息查询”功能;

“5”选项对应的是“退出系统”功能。

2、设计结构体及函数表

1)结构体

#defineN100//宏定义,线性表的初始最大长度

#defineM10〃宏定义,

typedefstruct

charname[20];

}Stu;

typedefstruct

intnum;

charsex[4J;

intrn_num;

intfee;

intyz_num;

Stu*stud;

}room;

typedefstruct

intlen;

room*data;

intlinesize;

}linklist;

intf;

〃学生姓名

〃宿舍号

//性别

//容纳人数

〃宿舍费用

//已住人数

〃入住学生姓名

//宿舍信息

//当前长度

〃存储空间基址

//当前分配的存储容量

//定义线性表

〃全局变量,存放操作序

 

2)函数表

voidinit(linklist&l);

/*参数:

线性表I*/

/★返回值:

无返回值*/

/★功能:

对线性表I进行初始化V

voidroom_num_sort(linklist&l);

/*参数:

线性表I*/

/★返回值:

无返回值*/

/*功能:

利用宿舍号对宿舍进行排序*/

voidmenu();

/*参数:

无参数*/

/★返回值:

无返回值*/

"功能:

显示操作菜单*/

voiddisplayl(linklist&l);

/*参数:

线性表I*/

/★返回值:

无返回值*/

/功能:

显示宿舍的相关信息(除宿舍已住人数及已住学生姓名外)V

voiddisplay2(linklist&l);

/*参数:

线性表I*/

/★返回值:

无返回值*/

/*功能:

显示宿舍的相关信息(包括宿舍已住人数及已住学生姓名)V

voidfunctionl(linklist&l);

/*参数:

线性表I*/

/★返回值:

无返回值*/

/*功能:

录入宿舍的相关信息*/

voidfunction2(linklist&l);

/*参数:

线性表I*/

/★返回值:

无返回值*/

/*功能:

将学生安排到已经输入的宿舍里住宿V

voidfunction3(linklist&l);

/*参数:

线性表I*/

/*返回值:

无返回值*/

"功能:

已住学生退宿V

voidfunction4(linklist&l);

/*参数:

线性表I*/

/★返回值:

无返回值*/

/*功能:

通过宿舍号查询指定宿舍的相关信息*/

voidmain();

/*参数:

无参数*/

/★返回值:

无返回值*/

"功能:

主函数*/

3)主函数与各模块的调用

linklist1;//init(l);//charch,ch2;

定义线性表1

调用初始化函数

system(HcolorleM);//调节显示的背景以及前景

printf(M\nH);

printfC欢迎进入宿舍管理查询系统

printfC'Xn*');

print"请按任意键开始操作:

”);

Fflush(stdin);

scanf(”%c”,&ch);

system("cls");menu();

〃while(f!

二0)

〃清空输入缓冲区,以得到正确的输入结果

〃将屏幕先前显示的内容清理掉调用主菜

switch(f)

casel:

functionl(l);break;//调用录入宿舍信息函数

case2:

function2(l);break;//调用学生入宿函数

case3:

system("cls,,);function3(l);break;//调用学生退宿函数

case4:

function4(l);break;//调用查询宿舍信息函数

case5:

system("cls");

printf("是否退出系统:

\t");fflush(stdin);

scanf(w%c,,,&ch2);

if(ch2==,y'||ch2==,Y,)

system(”cls“);

exit(O);

else

}break;

system("cls");

menu();

四详细设计

各算法的实现

1)定义结构体

typedefstruct

intnum;

〃宿舍号

charsex[4];

〃性别

int「n_num;

//容纳人

%f//

intfee;

〃箱舍费

m

intyz_num;

//已住人

Stu*stud;

//入住学生姓名

}room;

2)定义顺序表

typedefstruct

intlen;〃当前长度

room*data;//存储空间基址

intlinesize;//当前分配的存储容量}linklist;

3)功能菜单的显示

voidmenu()

charch;

printf(H

printf(H

宿舍管理系统

|\n");

printf("

|\n“);

主菜单

printf(H

|\n“);

printf(M

|\n“);

printf(n|

|\n");

1

、宿舍信息录入

2

1

、学生分配宿舍

1

printf(M

|\nH);

printf(u|

|\nH);

3

、住宿学生退宿

4

、宿舍信息查询

1

printf(H

|\n");

printf(M

5、退出系统

M“);

1

printf(M

|\n“);

printf(M

M");

printfC请输入你想进行的操作:

\t“);

scanf(”%d”,&f);

if(f5)

printf("操作序号输入错误!

\n按任意键返回主菜单重新输入!

\n*');fflush(stdin);scanf("%c",&ch);system("cls");

menu();

4)录入宿舍的相关信息voidfunctionl(linklist&l)

int

charch2;

system("clsn);

if(l」en>二Llinesize)//判断线性表的长度是否超过线性表的存储空间的长度

room*newbase;

newbase=(room*)realloc(l.data,(N+M)*sizeof(room));//给线性表再分配长度为M的内存空间

l.data二newbase;

l.linesize+二M;

}

printfC*请输入你要输入的宿舍的个数:

\t“);

scanf(”%d”,&j);

system("cls");

for(m=0;m

i=l.len;

printfC*请输入第%d个宿舍基本信息:

\n;i+l);

printf(u宿舍号码\t学生性别\t容纳人数\t住宿费用\n");fflush(stdin);

scanf("%d%s%d%d",&l.data[i].num,Ldata[i].sex,&l.data[i].rn_num,&l.data[i].fee);

l.data[m].yz_num=0;

l.data[m].stud二NULL;

l.len++;

}

system("cls");

ioom_num_sort(l);

displayl(l);

printf("按任意键返回主菜单!

\n");

fflush(stdin);

scanf(”%c“,&ch2);

system("cls");//清屏

menu();

5)学生入宿

voidfunction2(linklist&l)

inti,room_numj;

charch,ch2;

Stun;

system("cls");

system("cls");

printfC请输入需要住宿的学生的宿舍号:

\t“);

seanf(H%d:

&ioom_num);

for(i=0;i

if(l.data[i].num==room_num)

if(l.data[i]yz_num==l.data[i].rn_num)

printf("该房间已满!

\n“);printf("按回车键返回...\nH);fflush(stdin);

scanf(”%c”,&ch2);

system("cls");

menu();

if(l.data[i].yz_num==0)

l.data[i].stud=(Stu*)maIloc(M*sizeof(Stu));

j=0;

printfC请输入入住该宿舍的学生的姓名:

\t“);

fflush(stdin);

gets(n.name);

strcpy(Ldata[i].stud[j].name,n.name);

j++;

l.data[i].yz__num++;

printf(H是否还有学生入住该宿舍:

\t");fflush(stdin);scanf(”%c",&ch);

while((j

名:

\t“);

printf(H请输入入住该宿舍的学生的姓

fflush(stdin);gets(n.name);

strcpy(l.data[i].stud[j].name,n.name);

j++;

l.data[i].yz_num++;

printfC*是否还有学生入住该宿舍

fflush(stdin);

scanf(5c”,&ch);

if(j>=l.data[i].rn_num)

printf("%d宿舍已经住

else

j=l.data[i].yz_num;

printf("请输入入住该宿舍的学生的姓名:

\t“);

fflush(stdin);

gets(n.name);

strcpy(l.data[i].studO].name,n.name);

j++;

Ldata[i].yz_num++;

printf(H是否还有学生入住该宿舍:

\f);fflush(stdin);

scanf(”%c”,&ch);

while((j

名:

\t“);

:

\tH);fflush(stdin);

printf("请输入入住该宿舍的学生的姓

fflush(stdin);

gets(n.name);

strcpy(l.data[i].stud[j].nameJn.name);

j++;

l.data[i].yz_num++;

printfC*是否还有学生入住该宿舍

scanf(5c”,&ch);

if(j>=l.data[i].rn_num)

printf("%d宿舍已经

printf("按任意键返回..An'*);fflush(stdin);

scanf(”%c",&ch2);

system("cls");

menu();

printfC未找到该宿舍!

\n");

printf(u按任意键返回...\n");

fflush(stdin);

scanf("%cH,&ch2);

system("cls");

menu();

6)已住宿学生退宿

voidfunction3(linklist&l)

inti,j,m,n,chl;

chardelete_name[20];

introom_num;

charch,ch2;

system("cls");

printf("你是否要进行退宿操作:

\f);

fflush(stdin);

scanf(5c",&ch);

if(ch二二'y'||ch二二Y)

printfC*请输入要退宿的学生的宿舍号:

\t“);

fflush(stdin);

scanf(”%d:

&ioom_num);

for(m=0;m

if(l.data[m].num==room_num)

printf(H请输入退宿学生的姓名:

\t");fflush(stdin);

scanf("%sw,delete_name);for(j=0;j

if(strcmp(l.data[m].stud[j].name,delete_name)==O)

(for(n=j;n

l;n++)

l.data[m].stud[n]=l.data[m].stud[n+1];

}l.data[m].yz_num--;

}

printf("退宿成功!

\n“);

printf("按任意键返回fflush(stdin);

scanf("%c",&ch2);system("cls");menu();

printfC*未找到该宿舍!

\nH);

printf("按任意键返回...\n");fflush(stdin);

scanf("%c",&ch2);system(Mcls");menu();

else

printf("按任意键返回主菜单!

\n");fflush(stdin);

scanf(”%c”,&ch2);

system("cls");menu();

7)宿舍相关信息的查询

voidfunction4(linklist&l)

intij,ch2;

introom_num;

charch,chi;

system(^,cls,,);

system("cls");

printfC请输入你需要查询的宿舍的宿舍号:

\t“);

fflush(stdin);

scanf("%d",&room_num);

for(i=0;i

if(l.data[i].num==room_num)

人数\nu);

printfC*宿舍号码\t学生性别\t容纳人数\t已住住宿费用\t

printf("%d\t\t,,,l.data[i].num);printf("%s\t\t",l.data[i].sex);

printf(,,%d\t\t,,fl.data[i].rn_num);printf("%d\t\t",1.data[i].fee);

printf(H%d\nM,1.data[i].y乙num);printf("已住学生姓名:

\nu);for(j=0;j

printf(,,%s\t"Il.data[i].stud[j].name);

printf(,,\nH);

printf(H按任意键返回主菜单!

\n");

fflush(stdin);

scanf("%c",&chl);system("cls");menu();

printfC*未找到该宿舍!

\nH);

printf("按任意键返回主菜单!

\n");

fflush(stdin);

scanf(”%c”,&ch2);

system("cls");menu();

五调试分析

K该系统功能简单明了,在编写程序过程中,以模块化实现功能是最好的方法,不过在函数的调用过程中出现了各种错误,如子函数的变量未命名,与主函数的不一致,经常在编译时出现变量,函数名不合法的现象,但是好在有分模块写,查找改正错误非常方便。

2、系统能正常运行后,我对菜单界面做了一些后期美化,此步骤通常放在最后,因为这样可以在未实现系统功能时,减小程序的复杂度,方便改写程序。

当完成基本框架后,我通过一次次的运行程序来更改添加必要的提示内容。

做了一些外观上的整改,使系统更人性化。

3、程序编写过程中出现过许多错误,经调试发现大多数错误是由于的不到正确的输入结果,然后通过查阅资料发现这个是由于输入数据过多,导致输入的数据错误,只要在输入数据前加上“fflush(stdm)”这条语句就可以了,该条语句的功能是清空输入缓冲区。

4、前期在程序运行过程中,如果宿舍的学生未住满时,再有学生入住该宿舍,以前

输入的学生会被覆盖,经查询发现,是在输入学生姓名的时候出错,每次输入都是从第0个

开始输入,所以才会被覆盖,后来只要在输入之前判断宿舍的已住人数是否为0,就可以

解决该问题了,这样就不会被覆盖了。

六测试结果

1、欢迎界面

运行程序进入欢迎界面

2、菜单显ZF

在欢迎界面按任意键后进入菜单

3、录入宿舍的相关信息

选择功能一,跳转到录入宿舍信息界面

输入完成后系统会显示你输入的宿舍的相关信息

4、学生分配宿舍

选择功能二,跳转到学生入宿界面

5、已住学生退宿

选择功能三,进入学生退宿界面

6、显不宿舍的相关信息

选择功能四,进入宿舍信息查询界面

7、未住满宿舍再入宿

选择功能二,进入学生分配宿舍界面

再选择功能四,查询该宿舍的相关信息,显示之前信息未被覆盖

七用户使用说明

本程序具有良好的交互式界面,用户使用本程序,操作简便,只要在按照菜单输入相应的操作序号即可。

在录入以及退出功能上还通过输入“y或n”来判断是否执行用户的目的,简单明了。

本程序在重要内容上还设置了报错提示,确认提示的能够更好的帮助顾客实现自己想要的功能。

八课程设计总结

1、程序

虽然在此之前做了软件基础的实验,编写了一些小程序来实现一些小的功能,但是像这种具有功能全面的程序还是第一次写,更全面的理解了函数与函数间的调用关系,为了让客户方便使用在操作上对用户进行了人性化的设计,用户只需要根据提示就能完成操作,既方便又简单。

2、自我总结

通过本次课程设计,让自己有机会独立的完成了一个程序编写的全部过程,让自己对软件的开发过程有了更深一步的理解,对语言上的应用也有了一些小的心得体会,对程序的调试和分析能力有了进一步的提高。

这一次的课程设计让我在编程上又往前迈了一步,相信在一次又一次的的实战中,自己能够真正的成长起来。

附录

#include#include#include#defineN100#defineM10typedefstruct{charname[20];

}Stu;

typedefstruct

intnum;charsex[4];intrn_num;intfee;

〃学生姓名

intyz^num;Stu

*stud;}room;

intf;//存放操作序号

〃宿舍号

〃性别

〃容纳人

〃宿舍费用

〃已住人

voidinit(linklist&l)〃线

性表初始化

{

l.len=0;

l.data=(ioom

*)malloc(N*sizeof(room));

typedefstruct

{

intlen;〃当前长度

room*data;〃存储空间基

intlinesize;址〃当前分配的右储容

}linklist;~

l.linesize二N;

voidroom_num_sort(linklist&l)

inti,j;

roomr;

for(i=0;i

forG=i+l;jl.data[j].num)<

r=l.data[j];l.data[j]=l.data[i];l.data[i]=r;

voidmenu()

charch;printf(H

*****************************

printfC11|\nH);

printf(H

I***************************************************************科\0');

printfC请输入你想进行的操作:

\t”);scanf(”%d",&f);if(f5)

printf("操作序号输入错误!

\n按任意键返回主菜单重新输入!

\n");fflush(stdin);scanf("%c",&ch);system("cls");menu();

voiddisplayl(linklist&l)

{

inti;

printfC全部宿舍信息:

\nH);for(i=0;i

printf(H宿舍号码\t学生性别

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1