数据结构课设报告-宿舍管理系统_第1页
数据结构课设报告-宿舍管理系统_第2页
数据结构课设报告-宿舍管理系统_第3页
数据结构课设报告-宿舍管理系统_第4页
数据结构课设报告-宿舍管理系统_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业宿舍管理系统一 目的根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对程序设计语言和软件技术基础课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性

2、结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。二 需求分析1、要求1)采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。学生也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。2)系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。3)程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。4)编程风格

3、良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等)。2、详细功能宿舍信息包括:宿舍号、性别、容纳人数、住宿费用、住宿学生姓名。试设计一宿舍信息管理系统,使之能提供以下功能:1宿舍基本信息(包含宿舍号、性别、容纳人数、住宿费用)录入;2将学生分配到指定宿舍号的宿舍;3已住宿的学生退宿舍;4查询宿舍信息,包括宿舍号、性别、容纳人数、住宿费用、已住宿的人数、已住宿学生姓名。5系统以菜单方式工作。三 概要设计开始1、流程图开始功能选择输入功能选择输入判断用户输入判断用户输入退出宿舍信息查询系统已住宿的学生退宿舍查询宿舍信息,包括宿舍号、性别、容纳人数、住宿费用、已住宿的人数、已住

4、宿学生姓名将学生分配到指定宿舍号的宿舍宿舍基本信息退出宿舍信息查询系统已住宿的学生退宿舍查询宿舍信息,包括宿舍号、性别、容纳人数、住宿费用、已住宿的人数、已住宿学生姓名将学生分配到指定宿舍号的宿舍宿舍基本信息(包含宿舍号、性别、容纳人数、住宿费用)输入输出相关信息输出相关信息流程图相关叙述:用户运行程序时便正式进行了通讯录的使用,该通讯录分为五个功能,“1”选项对应的是“宿舍信息录入”功能;“2” 选项对应的是“将学生分配到宿舍”功能;“3” 选项对应的是“已住宿学生退宿”功能;“4” 选项对应的是“删宿舍信息查询”功能;“5” 选项对应的是“退出系统”功能。设计结构体及函数表结构体#defi

5、ne N 100/宏定义,线性表的初始最大长度#define M 10 /宏定义,typedef structchar name20;/学生姓名Stu;typedef structint num;/宿舍号char sex4;/性别int rn_num;/容纳人数int fee;/宿舍费用int yz_num;/已住人数Stu *stud;/入住学生姓名 room;/宿舍信息 typedef structint len;/当前长度room *data;/存储空间基址int linesize;/当前分配的存储容量linklist;/定义线性表int f;/全局变量,存放操作序号函数表void in

6、it(linklist &l);/*参数:线性表l*/*返回值:无返回值*/*功能:对线性表l进行初始化*/void room_num_sort(linklist &l);/*参数:线性表l*/*返回值:无返回值*/*功能:利用宿舍号对宿舍进行排序*/void menu();/*参数:无参数*/*返回值:无返回值*/*功能:显示操作菜单*/void display1(linklist &l);/*参数:线性表l*/*返回值:无返回值*/功能:显示宿舍的相关信息(除宿舍已住人数及已住学生姓名外)*/void display2(linklist &l);/*参数:线性表l*/*返回值:无返回值*/

7、*功能:显示宿舍的相关信息(包括宿舍已住人数及已住学生姓名)*/void function1(linklist &l);/*参数:线性表l*/*返回值:无返回值*/*功能:录入宿舍的相关信息*/void function2(linklist &l);/*参数:线性表l*/*返回值:无返回值*/*功能:将学生安排到已经输入的宿舍里住宿*/void function3(linklist &l);/*参数:线性表l*/*返回值:无返回值*/*功能:已住学生退宿*/void function4(linklist &l);/*参数:线性表l*/*返回值:无返回值*/*功能:通过宿舍号查询指定宿舍的相关信

8、息*/void main();/*参数:无参数*/*返回值:无返回值*/*功能:主函数*/主函数与各模块的调用linklist l; /定义线性表 linit(l); /调用初始化函数char ch,ch2;system(color 1e);/调节显示的背景以及前景printf(n);printf( *欢迎进入宿舍管理查询系统*n);printf(n);printf(请按任意键开始操作:);Fflush(stdin);/清空输入缓冲区,以得到正确的输入结果scanf(%c,&ch);system(cls);/将屏幕先前显示的内容清理掉menu(); /调用主菜单函数while(f!=0)swi

9、tch(f)case 1:function1(l);break;/调用录入宿舍信息函数case 2:function2(l);break;/调用学生入宿函数case 3:system(cls);function3(l);break;/调用学生退宿函数case 4:function4(l);break;/调用查询宿舍信息函数case 5:system(cls);printf(是否退出系统:t);fflush(stdin);scanf(%c,&ch2);if(ch2=y|ch2=Y)system(cls);exit(0);elsesystem(cls);menu();break;四 详细设计各算法

10、的实现定义结构体typedef structint num;/宿舍号char sex4;/性别int rn_num;/容纳人数int fee;/宿舍费用int yz_num;/已住人数Stu *stud;/入住学生姓名room;定义顺序表typedef structint len;/当前长度room *data;/存储空间基址int linesize;/当前分配的存储容量linklist;功能菜单的显示void menu()char ch;printf( |*|n);printf( |*宿舍管理系统*|n);printf( |*主菜单*|n);printf( |*|n);printf( | |

11、n);printf( | 1、宿舍信息录入 2、学生分配宿舍 |n);printf( | |n);printf( | 3、住宿学生退宿 4、宿舍信息查询 |n);printf( | |n);printf( | 5、退出系统 |n);printf( | |n);printf( |*|n);printf( 请输入你想进行的操作:t);scanf(%d,&f);if(f5)printf( 操作序号输入错误!n 按任意键返回主菜单重新输入!n);fflush(stdin);scanf(%c,&ch);system(cls);menu();录入宿舍的相关信息void function1(linklist

12、 &l)int i,j,m;char ch2;system(cls);if(l.len=l.linesize)/判断线性表的长度是否超过线性表的存储空间的长度room *newbase;newbase=(room *)realloc(l.data,(N+M)*sizeof(room );/给线性表再分配长度为M的内存空间l.data=newbase;l.linesize+=M;printf(请输入你要输入的宿舍的个数:t);scanf(%d,&j);system(cls);for(m=0;mj;m+)i=l.len;printf(请输入第%d个宿舍基本信息:n,i+1);printf(宿舍号码

13、t学生性别t容纳人数t住宿费用n);fflush(stdin);scanf(%d %s %d %d,&l.datai.num,l.datai.sex,&l.datai.rn_num,&l.datai.fee);l.datam.yz_num=0;l.datam.stud=NULL;l.len+;system(cls);room_num_sort(l);display1(l);printf(按任意键返回主菜单!n);fflush(stdin);scanf(%c,&ch2);system(cls);/清屏menu();学生入宿void function2(linklist &l)int i,room

14、_num,j;char ch,ch2;Stu n;system(cls);system(cls);printf(请输入需要住宿的学生的宿舍号:t);scanf(%d,&room_num);for(i=0;il.len;i+)if(l.datai.num=room_num)if(l.datai.yz_num=l.datai.rn_num)printf(该房间已满!n);printf(按回车键返回.n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();if(l.datai.yz_num=0)l.datai.stud=(Stu *)malloc(M*s

15、izeof(Stu );j=0;printf(请输入入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.datai.yz_num+;printf(是否还有学生入住该宿舍:t);fflush(stdin);scanf(%c,&ch);while(jl.datai.rn_num)&(ch=y|ch=Y)printf(请输入入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.data

16、i.yz_num+;printf(是否还有学生入住该宿舍:t);fflush(stdin);scanf(%c,&ch);if(j=l.datai.rn_num)printf(%d宿舍已经住满!n,l.datai.num);elsej=l.datai.yz_num;printf(请输入入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.datai.yz_num+;printf(是否还有学生入住该宿舍:t);fflush(stdin);scanf(%c,&ch);while(jl.data

17、i.rn_num)&(ch=y|ch=Y)printf(请输入入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.datai.yz_num+;printf(是否还有学生入住该宿舍:t);fflush(stdin);scanf(%c,&ch);if(j=l.datai.rn_num)printf(%d宿舍已经住满!n,l.datai.num);printf(按任意键返回.n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();printf(未

18、找到该宿舍!n);printf(按任意键返回.n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();已住宿学生退宿void function3(linklist &l)int i,j,m,n,ch1;char delete_name20;int room_num;char ch,ch2;system(cls);printf(你是否要进行退宿操作:t);fflush(stdin);scanf(%c,&ch);if(ch=y|ch=Y)printf(请输入要退宿的学生的宿舍号:t);fflush(stdin);scanf(%d,&room_num);

19、for(m=0;ml.len;m+)if(l.datam.num=room_num)printf(请输入退宿学生的姓名:t);fflush(stdin);scanf(%s,delete_name);for(j=0;jl.datam.yz_num;j+)if(strcmp(,delete_name)=0)for(n=j;nl.datam.yz_num-1;n+)l.datam.studn=l.datam.studn+1;l.datam.yz_num-;printf(退宿成功!n);printf(按任意键返回.n);fflush(stdin);scanf(%c,

20、&ch2);system(cls);menu();printf(未找到该宿舍!n);printf(按任意键返回.n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();elseprintf(按任意键返回主菜单!n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();宿舍相关信息的查询void function4(linklist &l)int i,j,ch2;int room_num;char ch,ch1;system(cls);system(cls);printf(请输入你需要查询的宿舍的宿舍号:t

21、);fflush(stdin);scanf(%d,&room_num);for(i=0;il.len;i+)if(l.datai.num=room_num)printf(宿舍号码t学生性别t容纳人数t住宿费用t已住人数n);printf(%dtt,l.datai.num);printf(%stt,l.datai.sex);printf(%dtt,l.datai.rn_num);printf(%dtt,l.datai.fee);printf(%dn,l.datai.yz_num);printf(已住学生姓名:n);for(j=0;jl.datai.yz_num;j+)printf(%st,l.d

22、);printf(n);printf(按任意键返回主菜单!n);fflush(stdin);scanf(%c,&ch1);system(cls);menu();printf(未找到该宿舍!n);printf(按任意键返回主菜单!n);fflush(stdin);scanf(%c,&ch1);system(cls);menu();五 调试分析该系统功能简单明了,在编写程序过程中,以模块化实现功能是最好的方法,不过在函数的调用过程中出现了各种错误,如子函数的变量未命名,与主函数的不一致,经常在编译时出现变量,函数名不合法的现象,但是好在有分模块写,查找改正错误非常方便

23、。系统能正常运行后,我对菜单界面做了一些后期美化,此步骤通常放在最后,因为这样可以在未实现系统功能时,减小程序的复杂度,方便改写程序。当完成基本框架后,我通过一次次的运行程序来更改添加必要的提示内容。做了一些外观上的整改,使系统更人性化。程序编写过程中出现过许多错误,经调试发现大多数错误是由于的不到正确的输入结果,然后通过查阅资料发现这个是由于输入数据过多,导致输入的数据错误,只要在输入数据前加上“fflush(stdin)”这条语句就可以了,该条语句的功能是清空输入缓冲区。前期在程序运行过程中,如果宿舍的学生未住满时,再有学生入住该宿舍,以前输入的学生会被覆盖,经查询发现,是在输入学生姓名的

24、时候出错,每次输入都是从第0个开始输入,所以才会被覆盖,后来只要在输入之前判断宿舍的已住人数是否为0,就可以解决该问题了,这样就不会被覆盖了。六 测试结果欢迎界面运行程序进入欢迎界面菜单显示在欢迎界面按任意键后进入菜单录入宿舍的相关信息选择功能一,跳转到录入宿舍信息界面输入完成后系统会显示你输入的宿舍的相关信息学生分配宿舍选择功能二,跳转到学生入宿界面已住学生退宿选择功能三,进入学生退宿界面显示宿舍的相关信息选择功能四,进入宿舍信息查询界面未住满宿舍再入宿选择功能二,进入学生分配宿舍界面再选择功能四,查询该宿舍的相关信息,显示之前信息未被覆盖七 用户使用说明本程序具有良好的交互式界面,用户使用

25、本程序,操作简便,只要在按照菜单输入相应的操作序号即可。在录入以及退出功能上还通过输入“y或n”来判断是否执行用户的目的,简单明了。本程序在重要内容上还设置了报错提示,确认提示的能够更好的帮助顾客实现自己想要的功能。八 课程设计总结1、程序虽然在此之前做了软件基础的实验,编写了一些小程序来实现一些小的功能,但是像这种具有功能全面的程序还是第一次写,更全面的理解了函数与函数间的调用关系,为了让客户方便使用在操作上对用户进行了人性化的设计,用户只需要根据提示就能完成操作,既方便又简单。自我总结通过本次课程设计,让自己有机会独立的完成了一个程序编写的全部过程,让自己对软件的开发过程有了更深一步的理解

26、,对语言上的应用也有了一些小的心得体会,对程序的调试和分析能力有了进一步的提高。这一次的课程设计让我在编程上又往前迈了一步,相信在一次又一次的的实战中,自己能够真正的成长起来。附录#include#include#include#define N 100#define M 10typedef structchar name20;/学生姓名Stu;typedef structint num;/宿舍号char sex4;/性别int rn_num;/容纳人数int fee;/宿舍费用int yz_num;/已住人数Stu *stud;/入住学生姓名room;typedef structint le

27、n;/当前长度room *data;/存储空间基址int linesize;/当前分配的存储容量linklist;int f;/存放操作序号void init(linklist &l)/线性表初始化l.len=0;l.data=(room *)malloc(N*sizeof(room );l.linesize=N;void room_num_sort(linklist &l)int i,j;room r;for(i=0;il.len-1;i+)for(j=i+1;jl.dataj.num)r=l.dataj;l.dataj=l.datai;l.datai=r;void menu()char c

28、h;printf( |*|n);printf( |*宿舍管理系统*|n);printf( |*主菜单*|n);printf( |*|n);printf( | |n);printf( | 1、宿舍信息录入 2、学生分配宿舍 |n);printf( | |n);printf( | 3、住宿学生退宿 4、宿舍信息查询 |n);printf( | |n);printf( | 5、退出系统 |n);printf( | |n);printf( |*|n);printf( 请输入你想进行的操作:t);scanf(%d,&f);if(f5)printf( 操作序号输入错误!n 按任意键返回主菜单重新输入!n)

29、;fflush(stdin);scanf(%c,&ch);system(cls);menu();void display1(linklist &l)int i;printf(全部宿舍信息:n);for(i=0;il.len;i+)printf(宿舍号码t学生性别t容纳人数t住宿费用n);printf(%dtt,l.datai.num);printf(%stt,l.datai.sex);printf(%dtt,l.datai.rn_num);printf(%dn,l.datai.fee);void display2(linklist &l)int i,j;printf(全部宿舍信息:n);for

30、(i=0;il.len;i+)printf(宿舍号码t学生性别t容纳人数t住宿费用t已住人数n);printf(%dtt,l.datai.num);printf(%stt,l.datai.sex);printf(%dtt,l.datai.rn_num);printf(%dtt,l.datai.fee);printf(%dn,l.datai.yz_num);printf(已住学生姓名:n);for(j=0;j=l.linesize)/判断线性表的长度是否超过线性表的存储空间的长度room *newbase;newbase=(room *)realloc(l.data,(N+M)*sizeof(r

31、oom );/给线性表再分配长度为M的内存空间l.data=newbase;l.linesize+=M;printf(请输入你要输入的宿舍的个数:t);scanf(%d,&j);system(cls);for(m=0;mj;m+)i=l.len;printf(请输入第%d个宿舍基本信息:n,i+1);printf(宿舍号码t学生性别t容纳人数t住宿费用n);fflush(stdin);scanf(%d %s %d %d,&l.datai.num,l.datai.sex,&l.datai.rn_num,&l.datai.fee);l.datam.yz_num=0;l.datam.stud=NUL

32、L;l.len+;system(cls);room_num_sort(l);display1(l);printf(按任意键返回主菜单!n);fflush(stdin);scanf(%c,&ch2);system(cls);/清屏menu();void function2(linklist &l)int i,room_num,j;char ch,ch2;Stu n;system(cls);system(cls);printf(请输入需要住宿的学生的宿舍号:t);scanf(%d,&room_num);for(i=0;il.len;i+)if(l.datai.num=room_num)if(l.d

33、atai.yz_num=l.datai.rn_num)printf(该房间已满!n);printf(按回车键返回.n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();if(l.datai.yz_num=0)l.datai.stud=(Stu *)malloc(M*sizeof(Stu );j=0;printf(请输入入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.datai.yz_num+;printf(是否还有学生入住该宿舍:t)

34、;fflush(stdin);scanf(%c,&ch);while(jl.datai.rn_num)&(ch=y|ch=Y)printf(请输入入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.datai.yz_num+;printf(是否还有学生入住该宿舍:t);fflush(stdin);scanf(%c,&ch);if(j=l.datai.rn_num)printf(%d宿舍已经住满!n,l.datai.num);elsej=l.datai.yz_num;printf(请输入

35、入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.datai.yz_num+;printf(是否还有学生入住该宿舍:t);fflush(stdin);scanf(%c,&ch);while(jl.datai.rn_num)&(ch=y|ch=Y)printf(请输入入住该宿舍的学生的姓名:t);fflush(stdin);gets();strcpy(,);j+;l.datai.yz_num+;printf(是否还有学生入住该

36、宿舍:t);fflush(stdin);scanf(%c,&ch);if(j=l.datai.rn_num)printf(%d宿舍已经住满!n,l.datai.num);printf(按任意键返回.n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();printf(未找到该宿舍!n);printf(按任意键返回.n);fflush(stdin);scanf(%c,&ch2);system(cls);menu();void function3(linklist &l)int i,j,m,n,ch1;char delete_name20;int ro

37、om_num;char ch,ch2;system(cls);printf(你是否要进行退宿操作:t);fflush(stdin);scanf(%c,&ch);if(ch=y|ch=Y)printf(请输入要退宿的学生的宿舍号:t);fflush(stdin);scanf(%d,&room_num);for(m=0;ml.len;m+)if(l.datam.num=room_num)printf(请输入退宿学生的姓名:t);fflush(stdin);scanf(%s,delete_name);for(j=0;jl.datam.yz_num;j+)if(strcmp(,delete_name)=0)for(n=j;nl.datam.yz_num-1;n+)l.datam.studn=l.datam.studn+1;l.datam.yz_num-;printf(退宿成功!n);printf(按任意键返回.n);fflush(s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论