1、宿舍管理查询系统编 号: 学 号: 课 程 设 计教 学 院计算机学院课程名称数据结构题 目宿舍管理查询系统专 业软件工程班 级姓 名同组人员指导教师年月日 (完成时间)二 总体方案设计 2 1程序结构图 22程序流程图(主要部分的详细流程图) 3三 详细设计 41软件设计题目:宿舍管理查询 42算法思想: 43.本系统定义的存储结构采用结构体数组: 44.界面设计函数: 55.主要函数定义说明: 6四 程序的调试与运行结果说明 81.测试输出结果(以运行结果图表示): 8五 课程设计总结 14七 附件 16一 概述1. 课程设计的目的1理解和掌握该课程中的有关基本概念,程序设计思想和方法。2
2、培养综合运用所学知识独立完成课题的能力。3培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。2. 课程设计的要求需要的基本知识与技能,尚未掌握的知识点,需要查阅相关资料。教师对本题目所提出的要求等。任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:(1)采用交互工作方式(2)可以增加、删除、修改信息(3)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)(4)查询:
3、 a.按姓名查询 ;b.按学号查询 ;c按房号查询(5)打印任一查询结果(可以连续操作)二 总体方案设计 1程序结构图(图2-1)2程序流程图(主要部分的详细流程图)(图2-2)三 详细设计1软件设计题目:宿舍管理查询任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:(1)采用交互工作方式(2)可以增加、删除、修改信息(3)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)(4) 查询 : a.按姓名查询 ;b.按学号查询 ;c按房号查询(5) 打印任一查询结果(可以连续操作)2算法思想:首先,运行程序进入“欢迎进入宿舍管理查询系统”界
4、面,然后进入线性表创建界面中,输入学生的信息,创建好学生信息以后单击“n”键则进入操作界面(主界面),然后可按键进行操作。单击数字键“1”,则为按姓名排序 单击数字键“2”,则为按学号排序单击数字键“3”,则为按房号排序 单击数字键“4”,则为按姓名查找单击数字键“5”,则为按学号查找 单击数字键“6”,则为按学号查找单击数字键“7”,则为按学号插入 单击数字键“8”,则为按学号删除系统中有如下关键词: 提示:当输入的数字键为0时,退出操作;请输入数字键(18为操作键);请按任意键进入主界面。3.本系统定义的存储结构采用结构体数组: (1)关键变量说明:#define N 40 线性表存储空间
5、的初始分配量#define increase 10 线性表存储空间的分配量增量char name20; 姓名int num; 学号int room; 房号int length; 当前长度stu *elem; 存储空间基址int listsize; 当前分配的存储容量(2)函数定义说明:#include#include#include(3)结构体说明:typedef struct /定义结构体成员 char name20; int num; int room;stu;stu stud;typedef struct int length; /当前长度 stu *elem; /存储空间基址 int
6、listsize; /当前分配的存储容量linklist;4.界面设计函数: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); print
7、f (n); printf (提示:当输入的数字键为0时,退出操作n); if ( t = 1 ) printf (请输入数字键(18为操作键):);/18为有效数字操作键 scanf ( %d, &f ); if ( f 9 ) system ( cls ); printf ( n ); printf ( 输入数字不对,请在原处重输!n ); printf (n); menu (); void disp () /返回主界面 char c; fflush ( stdin ); printf ( n ); printf ( 请按任意键进入主界面: ); scanf ( %c, &c ); sys
8、tem ( cls );5.主要函数定义说明:void init ( linklist &l ) /线性表初始化void menu() /操作菜单void disp () /返回主界面void panduan3 () /如果已无学生记录则返回主界面void shuru ( linklist l ) /输入学生的信息void create ( linklist &l ) /创建学生信息表void sort3 ( linklist &l ) /按房号排序(采用冒泡排序)void sort2 ( linklist &l ) /按学号排序(采用冒泡排序)void sort1 ( linklist &l
9、 ) /按姓名排序(采用冒泡排序)void print1 ( linklist &l ) /打印学生信息void print2 ( linklist &l, int mid ) /打印查找到的学生信息int panduan1 ( char ch ) /判断是否继续查找int panduan2 ( char ch ) /如果学生不存在,判断是否继续查找void chazhao3 ( linklist &l )/按房号从小到大查找(采用二分查找)void chazhao2 ( linklist &l )/按学号从小到大查找(采用二分查找)void chazhao1 ( linklist &l )/
10、按姓名从小到大查找(采用二分查找)void insert ( linklist &l ) /按学号从小到大插入该学生void Delete(linklist &l) /按学号删除该学生void main() /主函数四 程序的调试与运行结果说明1.测试输出结果(以运行结果图表示):(图4-1)(图4-2)(图4-3)(图4-4)(图4-5)(图4-6)(图4-7)(图4-8)(图4-9)(图4-10)(图4-11)(图4-12)(图4-13)(图4-14)(图4-15)五 课程设计总结经过这次课程设计,我收获到到了很多东西,对C语言有了进一步的了解和认识,不仅可以巩固了以前所学过的知识,而且学
11、到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力,在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。通过本次数据结构课程设计,我学到了很多,独立的完成了作业,我觉得很满足,也很有成就感,现在知道并熟练的掌握了一些曾经自己不知道的知识。经过这次课程设计,我深刻认识到算法在程序设计中的重要性,一个完整的程序总是由若干个函数构成的,这些相应的函数体
12、现了算法的基本思想。通过此次课程设计,我了解了编写应用软件的一般步骤,获得了很多宝贵的经验。特别是怎样将理论与实践相结合,把书本上的的内容应用到我们做的程序上。其次我熟悉了数据结构的知识学会了很多关于程序设计的经验和技巧,明白了程序设计的使用性和通用性事程序生存周期长短的关键,学会了程序调试的一般方法。重要的是通过本次程序设计,我逐步具备了走向程序员的基本素质。知道如何在困难重重时一步一步细心发现问题,解决问题。知道了在软件设计中对界面和功能如何平衡,如何达到相对完美。编程是一件枯燥乏味工作,但是只要认真专研,我们会从中学到很多在课本上学不到或者无法在课堂上掌握的知识,同时也能从中感受到编程的
13、乐趣。兴趣是可以培养的,只要坚持下去,面对困难我们总能够找到解决问题的方法。通过小组的分工与合作,使我充分认识到在项目团队开发过程中合作的重要性,也更加理解了沟通协作能力在软件开发行业中的重要性。另外也需要提出的是在这次程序设计的过程中,非常感谢陈利民老师对我们的耐心指导。老师在教学过程中表现出来的对学术专研一丝不苟的精神让我非常有收获。同样也是老师的严格要求才使得小组成员能够顺利的完成任务。六 参考文献1 谭浩强,C程序设计题解与上机指导(第二版),北京,清华大学出版社,2000年9月。2 陈朔鹰等编着,C语言程序设计基础教程,兵器工业出版社,1994年9月。3 裘宗燕 着,从问题到程序科学
14、出版社,北京大学出版社,1999年4月。4 姜仲秋等主编,C语言程序设计,南京大学出版社,1998年1月。5 刘瑞挺主编,计算机二级教程,南开大学出版社,1996年10月。6 陈朔鹰 陈英主编,C语言程序设计习题集(第二版)人民邮电出版社,2003年2月。 7 田淑清等,C语言程序设计辅导与习题集,中国铁道出版社,2000年1月。七 附件源代码:#include#include#include#define N 40 /线性表存储空间的初始分配量#define increase 10 /线性表存储空间的分配量增量int f, t = 0; /定义全局变量typedef struct char
15、name20; 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 ) ); l.listsize = N;void menu()/操作菜单 printf (n); printf ( *请按键选择操作*n); pr
16、intf (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 ) printf (请输入数字键(18为操作键):);/18为有效数字操作键 scan
17、f ( %d, &f ); if ( f 9 ) 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
18、 (); menu ();void shuru ( linklist l ) /输入学生的信息 printf ( 请输入姓名: ); fflush ( stdin ); / 清空输入缓冲区,得到正确的输入数据 gets ( stud.name ); /输入一行字符串(姓名) printf ( 请输入学号: ); scanf ( %d, &stud.num ); printf ( 请输入房号: ); scanf ( %d, &stud.room );void create ( linklist &l )/创建学生信息表 if ( l.length = l.listsize ) /判断学生的人数是
19、否超过初值,如果超过,则重新分配 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.na
20、me, 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 = stu
21、d.num; l.eleml.length.room = stud.room; l.length+; i+; ch=getchar (); printf ( n ); printf ( 是否继续输入?: ); scanf ( %c, &ch ); printf ( n ); printf ( n ); if ( ch = n ) system ( cls );void sort3 ( linklist &l )/按房号排序(采用冒泡排序) int i, j; stu temp; for ( i= 0; i l.length - 1; i+) for ( j = i + 1; j l.elemj
22、.room ) temp = l.elemi; l.elemi = l.elemj; l.elemj = temp; void sort2 ( linklist &l )/按学号排序(采用冒泡排序) int i, j; stu temp; for ( i = 0; i l.length - 1; i+ ) for ( j = i + 1; j l.elemj.num ) temp = l.elemi; l.elemi = l.elemj; l.elemj = temp; void sort1 ( linklist &l )/按姓名排序(采用冒泡排序) int i, j; stu temp; f
23、or ( i = 0; i l.length - 1; i+ ) for ( j = i + 1; j 0 ) temp = l.elemi; l.elemi = l.elemj; l.elemj = temp; void print1 ( linklist &l )/打印学生信息 int i; printf ( n ); printf ( 姓名 学号 房号n ); printf ( n ); for ( i = 0; i 该学生信息为:n ); printf ( 姓名 学号 房号n ); printf ( n ); printf (%-15s %-5d %-5dn, l.elemmid.na
24、me, l.elemmid.num, l.elemmid.room );int panduan1 ( char ch ) /判断是否继续查找 scanf ( %c, &ch ); printf ( 是否继续查找?:); fflush ( stdin ); scanf ( %c, &ch ); if ( ch =y) system ( cls ); return ( 1 ) ; else return 0;int panduan2 ( char ch ) /如果学生不存在,判断是否继续查找 scanf ( %c, &ch ); printf ( 该学生不存在,是否继续查找?: ); fflush
25、(stdin); scanf(%c,&ch); if ( ch = y ) system ( cls ); return ( 1 ); else return 0;void chazhao3 ( linklist &l )/按房号从小到大查找(采用二分查找) if(l.length=0) panduan3(); /此函数功能为:返回主界面 else int low=0,high=l.length,mid,flag=0;/flag作为标志符,为1则表示查找成功,否则没有所要查找的学生 int m; char ch; printf ( n ); printf ( n ); printf ( 按房号查找-请输入要查找的房号: ); scanf ( %d, &m ); printf ( n ); while ( low l.elemmid.room ) low = mid + 1; else high = mid - 1; if ( flag = 1 ) print2 ( l, mid ); if ( panduan1 ( ch ) /调用判断函数1 chazhao3 ( l ); else system ( cls ); menu (); else if ( panduan
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1