《数据结构课程设计-C++宿舍管理系统课程设计(30页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计-C++宿舍管理系统课程设计(30页).doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-数据结构课程设计-C+宿舍管理系统课程设计-第 27 页河南城建学院课程设计报告书专 业: 信息管理与信息系统课程设计名称:数据结构课程设计题 目:宿舍管理查询软件班 级:信管2班设 计 者 学 号:设 计 者 姓 名:同 组 人 员: 指 导 老 师:完 成 时 间:2016年6月12日摘要在校学生的信息管理是校园管理中的一个重要内容,随着国家扩招政策的继续实施,学生数量也不断增加、信息的不断细化、各个行业间联系的不断密切,对人事管理的要求也不断提高。如何记录和管理好学生的信息,对学生实施高效的宏观管理,对学生出入宿舍以及学生注入和迁出的信息的灵活的记录及更新,是一项繁重而艰巨的任务。 关
2、键词:C+;数据库表;宿舍信息查询;宿舍信息管理目录目录1第一章开发环境和开发工具11.1C+简介11.2 开发背景11.3 开发环境1第二章 算法思想22.1 系统需求分析22.2 系统总体设计22.2.1 系统设计目标22.2.2 开发设计思想32.2.3 系统功能模块设计32.3 算法思想描述5第三章 算法实现63.1 数据结构63.2 程序模块63.2.1数据结构设计63.3 各模块之间的调用关系73.3.1模块划分73.3.2操作实现103.4 源程序代码18第四章测试与分析324.1使用方法324.2 测试数据选择324.3 测试结果分析32总 结38心得体会39参考文献40第一章
3、开发环境和开发工具1.1C+简介C+标准可分为两部分, C+语言本身和C+标准库。C+标准库对于Visual C+是相当新的,实际上微软只是在发布Visual C+ 5.0时去除了一些“bug”。标准库提供了标准的输入/输出、字符串、容器(如矢量、列表和映射等)、非数值运算(如排序、搜索和合并等)和对数值计算的支持。应该说, C/C+包含了相对少的关键字,而且很多最有用的函数都来源于库,C+标准库实现容器和算法的部分就是STL。 STL是数据结构和算法的一个框架,数据结构包括矢量、列表和映射等,算法包括这些数据结构的查找、拷贝和排序等。1994年7月,ANSI/ISO C+标准委员会投票决定接
4、受STL为C+标准库的一部分,这个建议是根据Alex Stepanov、Meng Lee和David Musser这三人的编程和软件库研究提出的。STL的产生是为了满足通用性的设计目标,而不是为了提高性能。1.2 开发背景 随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量企业管理科学化和现代化的重要标志,而人事管理的全面自动化、信息化则是其中重要的组成部分。人事管理的好坏对于企业的决策者和管理者来说都至关重要,在很大程度上影响着企业的经济效益和社会效益。因此,本文所研究的人事管理信
5、息系统具有一定的使用价值和现实意义。1.3 开发环境本文所采用的开发环境主要是在一般的PC硬件环境和Windouws Vista/2003/XP系统由Visual+6.0编写而成,在用到Microsoft Visual C+6.0中c语言的情况下 ,对于查询采用了逐个查询法,程序通过调试运行实现了设计目标,并且经过适当完善后,将可以应用在实际中解决问题。第二章 算法思想2.1 系统需求分析为了实现提高高校宿舍管理部门的工作效率,充分利用资源,减少少不必要的人力,物力,和财力的支出,方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的,为宿舍管理部门开发设计专用系统软件宿舍管理软件来进行管理学
6、生宿舍信息,使学生宿舍信息实现标准化的管理和规范化的制度是十分必要的。 该程序应该具有以下功能:(1)学生的入住信息录入;(2)输出学生入住信息(分别按姓名,学号,房间号有序);(3)按给定学号,姓名,房间号查询;(4)插入新增的学生信息;(5)按学号删除学生信息。该程序执行的全过程大致为:(1)按照提示输入所需要的条件; (2)选择要实现的功能;(3)显示执行后的结果2.2 系统总体设计2.2.1 系统设计目标任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:(1)采用交互工作方式(2)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)
7、查询菜单: (用二分查找实现以下操作)(3)按姓名查询 (4)按学号查询 (5)按房号查询(6)打印任一查询结果(可以连续操作)2.2.2 开发设计思想 基于以上系统设计目标,本文在开发人事管理信息系统时遵循了以下开发设计思想: 采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资 源,提高系统开发水平和应用效果的目的。 尽量达到操作过程中的直观、方便、实用、安全等要求。 系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未 参与开发的技术维护人员补充、维护。 系统应具备数据库维护功能,及时根据用户需求进行数据的添加、查找、显示、 排序等操作。2.2.3 系统功
8、能模块设计 本系统分为八个模块:如图2-1所示的系统功能模块图。如图2-2系统功能模块图。2-1系统模块图如下请按选择操作1按姓名排序2按学号排序3按房号排序4按姓名查找5按学号查找6按房号查找7按学号插入8按学号删除2-2系统功能图如下输入信息输出界面选择操作选择1选择2选择3选择4选择5选择6选择7选择8选择11按姓名排序显示按学号排序显示按房号排序并显示按姓名查找并显示按学号查找并显示按房号排序并显示按学号插入按学号删除选择0结束系统退出yyyyyyyynnnnnnnnny2.3 算法思想描述 该程序的由多种函数实现,每个函数具有不同的功能,主要有主菜单函数,插入功能子菜单函数,查找功能
9、子菜单函数,学生信息录入函数,显示函数,排序函数,插入函数以及查找函数。在每个区域中会调用不同的函数来实现主要的功能。比如,在学生显示这个功能里调用显示函数;在插入功能里调用子菜单函数;在显示信息时调用排序函数先对需要输出的信心进行排序,然后再输出;在查找功能里会调用查找函数来进行查找,包括按照性别,学号,姓名,房间号等查询。而最主要的函数有: 插入函数,它用尾插法来实现; 排序函数,用快速排序函数来实现; 查找函数,用逐个查找法;第三章 算法实现3.1 数据结构选择的数据结构为:#include#include#include数据结构采用链式存储,所有程序从主函数void main()开始,
10、首先调用menu()主菜单函数,在menu()函数中依次增加各种功能,然后通过switchcase语句分别选择录入,显示,插入,查找,退出功能1,选择录入功能时调用shuru()函数录入信息;2选择显示功能时,首先用linklist l()表头显示函数,然后分别调用sort1(linklist &l) sort2(linklist &l), sort3(linklist &l),函数根据学生学号,学生宿舍号,学生姓名关键字进行冒泡排序,然后显示3选择查询功能时首先调用insert(linklist &l)函数进行信息插入,然后调用linklist l()表头显示函数,最后调用print1(l)
11、函数显示信息并对其进行排序4选择查询功能时,首先调用menu5()显示查询的菜单,然后分别调用chazhao1(linklist &l),chazhao2(linklist &l),chazhao3(linklist &l),以学生学号,姓名,宿舍号为关键字进行查找,最后调用system()显示函数退出功能。 3.2 程序模块3.2.1数据结构设计数据结构:线性存储结构:链式#include /-线性表的静态单链表表示存储结构-#include /定义一个存储学生相关信息的结构体# define N 10 ; /链表的最大长度void main() /主函数linklist l; /定义线性表
12、 linit(l); /调用初始化函数char ch;system(color a);printf(n);printf( *欢迎进入宿舍管理查询系统*n);printf(n);printf(请按任意键开始操作:);scanf(%c,&ch);system(cls);/将屏幕先前显示的内容清理掉create(l); /调用线性表创建函数system(cls);/显示t=1;menu(); /调用主菜单函数void init(linklist &l)/线性表初始化void menu()/操作菜单void disp() /返回主界面void panduan3() /如果已无学生记录则返回主界面3.3
13、 各模块之间的调用关系3.3.1模块划分void shuru(linklist l) /输入学生的信息void create(linklist &l)/创建学生信息表shuru(l); /调用输入函数void sort3(linklist &l)/按房号排序(采用冒泡排序)void sort2(linklist &l)/按学号排序(采用冒泡排序)void sort1(linklist &l)/按姓名排序(采用冒泡排序) void print1(linklist &l)/打印学生信息void print2(linklist &l,int mid) /打印查找到的学生信息int panduan1(
14、char ch) /判断是否继续查找 int panduan2(char ch) /如果学生不存在,判断是否继续查找void chazhao3(linklist &l)/按房号从小到大查找(采用二分查找)void chazhao2(linklist &l)/按学号从小到大查找(采用二分查找)void chazhao1(linklist &l)/按姓名从小到大查找(采用二分查找)void insert(linklist &l)/按学号从小到大插入该学生void Delete(linklist &l)/按学号删除该学生调用函数的实现:switch(f)case 1: sort1(l); /调用按姓
15、名排序函数 printf(n); if(l.length=0) printf(已无学生记录n); printf(n); disp(); menu(); elseprintf(按姓名排序:n);print1(l);disp(); /调用返回主界面 menu(); break;case 2: sort2(l); /调用按学号排序函数 printf(n); if(l.length=0) printf(已无学生记录n);printf(n); disp(); menu(); elseprintf(按学号排序:n);print1(l);disp(); menu();break;case 3: sort3(
16、l); /调用按房号排序函数 printf(n); if(l.length=0) printf(已无学生记录n); printf(n); disp(); menu(); elseprintf(按房号排序:n);print1(l);disp(); menu();break; case 4:sort1(l); /先调用按姓名排序函数进行排序 chazhao1(l); /再调用按姓名查找函数进行(二分)查找 break;case 5: sort2(l); /先调用按学号排序函数进行排序 chazhao2(l); /再调用按学号查找函数进行(二分)查找 break;case 6: sort3(l);
17、/先调用按房号排序函数进行排序 chazhao3(l); /再调用按房号查找函数进行(二分)查找 break;case 7: sort2(l); /调用插入函数 insert(l); system(cls);printf(显示插入后的学生信息:n);print1(l);disp(); menu(); break;case 8: Delete(l); /调用删除函数if(l.length=0)printf(n);printf(学生记录已被删除完n);printf(n);disp(); menu();elseprintf(显示删除后的学生信息:n);print1(l);disp(); menu()
18、;break;3.3.2操作实现录入学生信息void shuru(linklist l) /输入学生的信息printf(请输入姓名:);fflush(stdin); / 清空输入缓冲区,得到正确的输入数据gets(stud.name); /输入一行字符串(姓名)printf(请输入性别:); /hnnnfflush(stdin); / 清空输入缓冲区,得到正确的输入数据、gets(stud.sex); /输入一行字符串(性别)、printf(请输入学号:);scanf(%d,&stud.num);printf(请输入房号:);scanf(%d,&stud.room);void create(l
19、inklist &l)/创建学生信息表if(l.length=l.listsize) /判断学生的人数是否超过初值,如果超过,则重新分配stu *newbase;newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu );l.elem=newbase;l.listsize+=increase;int i=2;char ch;printf(n);printf( *开始创建线性表*n);printf(n);printf(请输入第1个学生的信息n);shuru(l); /调用输入函数ch=getchar();strcpy(l.eleml.length
20、.name,stud.name);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;printf(n);printf(是否继续输入?:);scanf(%c,&ch);printf(n);printf(n);while(ch=y) printf(请输入第%d个学生的信息n,i); shuru(l);strcpy(l.eleml.length.name,stud.name);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;i+
21、;ch=getchar(); printf(n);printf(是否继续输入?:);scanf(%c,&ch);printf(n);printf(n); if(ch=n) system(cls);显示学生信息void print1(linklist &l)/显示并打印学生信息int i;printf(n);printf(姓名 学号 房号n);printf(n);for(i=0;il.length;i+)printf(%-15s %-3d %5dn,l.elemi.name,l.elemi.num,l.elemi.room);学生信息插入void insert(linklist &l)/按学号从
22、小到大插入该学生int i,j,k; char ch;printf(n);printf(插入的学生信息为:n);printf(姓名:);fflush(stdin);/ 清空输入缓冲区,得到正确的输入数据gets(stud.name); printf(学号:);scanf(%d,&stud.num);printf(房号:);scanf(%d,&stud.room);if(l.length=0)strcpy(l.eleml.length.name,stud.name);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;for(i=0
23、;il.length;i+) if(stud.numk;j-)l.elemj=l.elemj-1;strcpy(l.elemk.name,stud.name);l.elemk.num=stud.num;l.elemk.room=stud.room;break;else strcpy(l.eleml.length.name,stud.name);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;fflush(stdin);printf(n);printf(是否继续插入?:);scanf(%c,&ch);if(c
24、h=y) insert(l);else system(cls); 学生信息排序void sort3(linklist &l)/按房号排序(采用冒泡排序)int i,j;stu temp;for(i=0;il.length-1;i+)for(j=i+1;jl.elemj.room)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void sort2(linklist &l)/按学号排序(采用冒泡排序)int i,j;stu temp;for(i=0;il.length-1;i+)for(j=i+1;jl.elemj.num)temp=l.elemi;l.ele
25、mi=l.elemj;l.elemj=temp;void sort1(linklist &l)/按姓名排序(采用冒泡排序)int i,j;stu temp;for(i=0;il.length-1;i+)for(j=i+1;j0)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;学生信息查找void chazhao3(linklist &l)/按房号从小到大查找(采用二分查找)if(l.length=0) panduan3(); /此函数功能为:返回主界面else int low=0,high=l.length,mid,flag=0;/flag作为标志符,为1则
26、表示查找成功,否则没有所要查找的学生int m;char ch;printf(n);printf(n);printf(按房号查找-请输入要查找的房号:);scanf(%d,&m);printf(n);while(lowl.elemmid.room)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid);if(panduan1(ch) /调用判断函数1chazhao3(l);else system(cls);menu();else if(panduan2(ch) /调用判断函数2chazhao3(l); else system(cls);menu()
27、;void chazhao2(linklist &l)/按学号从小到大查找(采用二分查找) if(l.length=0) panduan3();elseint low=0,high=l.length,mid,flag=0;int n;char ch;printf(n);printf(n);printf(按学号查找-请输入要查找的学号:);scanf(%d,&n);printf(n);while(lowl.elemmid.num)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid);if(panduan1(ch) chazhao2(l);else
28、system(cls);menu();else if(panduan2(ch) chazhao2(l); else system(cls);menu();void chazhao1(linklist &l)/按姓名从小到大查找(采用二分查找)if(l.length=0) panduan3();elseint low=0,high=l.length,mid,flag=0;printf(n);printf(n);printf(按姓名查找-请输入要查找的姓名:);char a15,ch;scanf(%s,a);printf(n);while(low0)low=mid+1;else high=mid-
29、1;删除操作void Delete(linklist &l)/按学号删除该学生int i,j,k=-1;char ch;printf(n);printf(n);printf(请输入要删除学生的学号:);scanf(%d,&stud.num);for(i=0;il.length;i+)if(stud.num=l.elemi.num)printf(该学生的信息为:n);printf(n);printf(%-15s %-3d %7dn,l.elemi.name,l.elemi.num,l.elemi.room);k=i;for(j=k;j=l.length) printf(该学生不存在n);if(k
30、=0)l.length-;fflush(stdin);printf(n);printf(是否继续删除?:);scanf(%c,&ch);system(cls);if(ch=y) Delete(l);else system(cls);3.4 源程序代码#include/c语言头文件,包含一些函数,如scanf,printfK可直接调用#include/定义五种类型、一些宏和通用工具函数。 类型例如size_等#include/包含字符串处理函数的头文件#define N 40 /线性表存储空间的初始分配量#define increase 10 /线性表存储空间的分配量增量int f,t=0; /
31、定义全局变量typedef struct /定义新结构char name20; char sex20;int num; /学号和房号都为整型int room;stu;stu stud;typedef struct/二叉树的二叉链表存储表示int length; /当前长度stu *elem; /存储空间基址int listsize; /当前分配的存储容量linklist; void init(linklist &l)/线性表初始化l.length=0;l.elem=(stu *)malloc(N*sizeof(stu );/将malloc返回的内存空间地址转成 大小为结构体stu的大小的空间,
32、再赋给L.elem.l.listsize=N;void menu()/操作菜单printf(n);printf( *请按键选择操作*n);printf(n);printf(n);printf( 1 按姓名排序 2 按学号排序n);printf(n);printf( 3 按房号排序 4 按姓名查找n);printf(n);printf( 5 按学号查找 6 按房号查找n);printf(n);printf( 7 按学号插入 8 按学号删除n);printf(n);printf(n);printf(n);printf(n);printf(提示:当输入的数字键为0时,退出操作n);if(t=1)pr
33、intf(请输入数字键(18为操作键):);/18为有效数字操作键 scanf(%d,&f);if(f9)system(cls); printf(n);printf(输入数字不对,请在原处重输!n); printf(n);menu();void disp() /返回主界面char c;fflush(stdin);printf(n);printf(请按任意键进入主界面:);scanf(%c,&c);system(cls);void panduan3() /如果已无学生记录则返回主界面 printf(n);printf(已无学生记录n);printf(n); disp(); menu();void
34、 shuru(linklist l) /输入学生的信息printf(请输入姓名:);fflush(stdin); / 清空输入缓冲区,得到正确的输入数据gets(stud.name); /输入一行字符串(姓名)printf(请输入性别:); /输出文字fflush(stdin); / 清空输入缓冲区,得到正确的输入数据、gets(stud.sex); /输入一行字符串(性别)、printf(请输入学号:);scanf(%d,&stud.num);printf(请输入房号:);scanf(%d,&stud.room);void create(linklist &l)/创建学生信息表if(l.le
35、ngth=l.listsize) /判断学生的人数是否超过初值,如果超过,则重新分配stu *newbase;newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu );/重新分配存储器块l.elem=newbase;l.listsize+=increase;int i=2;char ch;printf(n);printf( *开始创建线性表*n);printf(n);printf(请输入第1个学生的信息n);shuru(l); /调用输入函数ch=getchar();strcpy(l.eleml.length.name,stud.name);
36、/指针复制l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;printf(n);printf(是否继续输入?:);scanf(%c,&ch);printf(n);printf(n);/输出换行while(ch=y) printf(请输入第%d个学生的信息n,i); shuru(l);strcpy(l.eleml.length.name,stud.name);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;i+;ch=getchar(); printf(n);printf(是否继续输入?:);scanf(%c,&ch);/字符赋值,printf(n);print