版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编 号:学 号:HUBEI POLYTECHNIC UNIVERSITY课程设计教学院计算机学院课程名称数据结构题 目宿舍管理查询系统专 业软件工程班 级姓 名同组人员指导教师年 月日( 完成时间)目录一概述 1二总体方案设计 21 .程序结构图 22. 程序流程图(主要部分的详细流程图) 3三详细设计 41 .软件设计题目:宿舍管理查询 42. 算法思想: 43. 本系统定义的存储结构采用结构体数组: 44. 界面设计函数: 55. 主要函数定义说明: 6四 程序的调试与运行结果说明 81. 测试输出结果(以运行结果图表示): 8五课程设计总结 14六参考文献 15七附件 16一概述1. 课
2、程设计的目的1 理解和掌握该课程中的有关基本概念,程序设计思想和方法。2 培养综合运用所学知识独立完成课题的能力。3 培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论, 全方位考虑问题等科学技术人员应具有的素质。4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中 找到解决问题的新途径的悟性,初步培养工程意识和创新能力。2. 课程设计的要求需要的基本知识与技能,尚未掌握的知识点,需要查阅相关资料。教师对 本题目所提出的要求等。任务:为宿舍管理人员编写一个宿舍管理查询软件 ,程序设计要求:(1) 采用交互工作方式(2) 可以增加、删除、修改信息(3) 建立数据文件,数据
3、文件按关键字(姓名、学号、房号)进行排序(选择、 快速排序、堆排序等任选一种)(4) 查询:a.按姓名查询;b.按学号查询;c按房号查询(5) 打印任一查询结果(可以连续操作)二总体万案设计i.程序结构图雄名排房间排沓m学字号播(图 2-1 )m 学号删2.程序流程图(主要部分的详细流程图)(图 2-2)三详细设计1 .软件设计题目:宿舍管理查询任务:为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:(1)采用交互工作方式(2 )可以增加、删除、修改信息(3)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、 堆排序等任选一种)(4)查询:a.按姓名查询;b.按学
4、号查询;c按房号查询(5)打印任一查询结果(可以连续操作)2. 算法思想:首先,运行程序进入“欢迎进入宿舍管理查询系统”界面,然后进入线性表创建界面中,输入学生的信息,创建好学生信息以后单击“ n”键则进入操作界面(主界面),然后可按键进行操作。单击数字键“ 1”,则为按姓名排序单击数字键“ 3”,则为按房号排序单击数字键“ 5”,则为按学号查找单击数字键“ 7”,则为按学号插入 系统中有如下关键词:单击数字键“ 2”,则为按学号排序 单击数字键“ 4”,则为按姓名查找 单击数字键“ 6”,则为按学号查找 单击数字键“ 8”,则为按学号删除提示:当输入的数字键为0时,退出操作; 请输入数字键(
5、18为操作键);请按任意键进入主界面。3. 本系统定义的存储结构采用结构体数组:(1)关键变量说明:#defi ne N 40#defi ne in crease 10 char n ame20;int num;int room;int len gth;stu *elem;int listsize;线性表存储空间的初始分配量 线性表存储空间的分配量增量 姓名学号房号当前长度存储空间基址当前分配的存储容量(2) 函数定义说明:#i nclude<stdio.h>#in clude<stdlib.h>#i nclude<stri ng.h>(3) 结构体说明:t
6、ypedef struct /定义结构体成员 char n ame20;int num;int room;stu;stu stud;typedef structint len gth; /当前长度stu *elem; /存储空间基址int listsize; /当前分配的存储容量li nklist;4. 界面设计函数:void men u()操作菜单printf ("n");printf ("*n");printf ("n");pri ntf("n");printf ("1n");printf
7、("n");printf ("3n");printf ("n");printf ("5n");printf ("n");printf ("7n");printf ("n");*请按键选择操作按姓名排序2按学号排序按房号排序4按姓名查找按学号查找6按房号查找按学号插入8按学号删除printf ("n");printf ("n");printf ("n");printf (" 提示:当输入的
8、数字键为0时,退出操作n");if ( t = 1 )为有效数字操作键printf ("请输入数字键(18为操作键):");/18scanf ( "%d", &f );if ( f < 0|f > 9 )system ( "cls");printf ( "n");printf (" 输入数字不对,请在原处重输!n");printf ("n");menu ();void disp ()/返回王界面char c;fflush ( stdin );pr
9、intf ( "n");printf ("请按任意键进入主界面:");sca nf ( "%c", & c ); system ( "cls");5. 主要函数定义说明:线性表初始化操作菜单返回主界面void init ( lin klist &l ) / void menu()/void disp ()/void pan dua n3 ()/void shuru ( lin klist I ) / void create ( lin klist &l ) / void sort3 ( li
10、nklist &l ) / void sort2 ( linklist &l ) / void sortl ( linklist &l ) / void printl ( lin klist &l ) / void print2 ( lin klist & I, i nt mid ) int pan dua n1 ( char ch ) / int pan dua n2 ( char ch ) / void chazhao3 ( lin klist & )/ void chazhao2 ( lin klist & )/ void chaz
11、haol ( lin klist & )/ void insert ( linklist &l ) / void Delete(li nklist &l) / void mai n()/如果已无学生记录则返回主界面输入学生的信息创建学生信息表按房号排序(采用冒泡排序)按学号排序(采用冒泡排序)按姓名排序(采用冒泡排序) 打印学生信息/打印查找到的学生信息判断是否继续查找如果学生不存在,判断是否继续查找按房号从小到大查找(采用二分查找)按学号从小到大查找(采用二分查找)按姓名从小到大查找(采用二分查找)按学号从小到大插入该学生按学号删除该学生主函数四 程序的调试与运行结果
12、说明1.测试输出结果(以运行结果图表示):" C :User5AdministrjtorDesktc pDebug2015404 5012 石嗨建阴.e«e'aotxacat 耳耳 疋耳耳风 卄欢迎进入宿舍管理查询系统打 itiMHWKKJifHaCKW 耳 SCKN 耳:MaCiMXMEitiMU晴按任意键开始操作:(图 4-1)CAUs&rsAdrftini5trjt&rt,Deskt<5pD?bug201540450126* 明.exe"主冃主旧至冃土R T'Tk'-L'T一刖j刖j刖"尊号H入
13、2入2111学田2 2 2-1名号号 第英肴 入入入入 青*冃青青是否继续输A?<n > = 9自CJ-一耳的住im 3 34名号号 SB AAAA主®+-4 4个=-5:/ rdl n r刖前前去名号号1看入入入入请1 =-TgW请编是否继续输入(图 4-2 )是否继绞萌i入花酪甫入新个学生的倍息 严编入焦耳旳b否继续输入丁"*与(图 4-3 )"Ur定 B 0 卜 tK 1 1 丿 -二 10名号号 第姓着 入入入入 t5XT314-74' 青青青谕 jllhl -IFIs信的 生 学程;、 7-i名号号 入入入入请请请请息亠-一Hr>
14、;41- 的生 亠子茧口 S 8 S «««'|名号号 弟妓Hi£入Aj人入-1、1、l* 4 CAU se rsAdrn inist rdtorDesktopDeb ug2 015404 50126明按姓名排序按学号排序按房号排序按学号插入请按键选择操作5按姓名查找E按学号查找7按房号查找8按学号删除退岀操作(图 4-4 )学号一赵朱' C:U5er5Adm i n i stratorDe5 ktopDebug2 0154045012 6 嗨崖明启xe房号873524110幘按任意键进入主異面:(图 4-5 )按学号排序:姓名学号房号1
15、12234345675678899101Q请按任意键进入主界面:' C:UsersAdm ini jt ratorDe skto pDeb u g2015404 5012 6 梅耀明.exe"iAl dfll. _上I回(图 4-6 ) ' *CAUsersAdministratorDesktcpDebug2 01540450126明.你亍.| 回按房号排序:姓名学号房号赵11田22梅33王44孙55垂66程77曹88|99耒1010请按任意键进入主界面:.(图 4-7 )生入咅!T号 插淫宀看胆否纟馥插入?<Wn:y打入的学生信息为:4 = 12差否纟馥插入?
16、<W2:(图 4-8 )輕示插入后的学生信息:学号房号101113陈请按任意键进人主界面:(图 4-9 ) 'CUsersX Admi r>i5tratorDes ktopL>ebug2 0154045012 6梅建明,exw" . 粋姓名查找-一猜输入要查找的姓名:梅 的一寻信鬻hlfe基否继续查找?<yzn>:(图 4-10)(图 4-11 )(图 4-12 ) 'CUsersAdm i nistrator>e5ktopDebug2D154045 012 &梅建阴,£悲"I 二是否继续删除?<y
17、/n>:n,(图 4-13)(图 4-14)rC :U se rsAdm i nistrato r;De5ktopDebijg2D154045 012 6 悔韋至.exe'HHI好请 j字犍选呈操作 mHHHHHHHHHHWMHWt按姓名排序5按姓名查找按学号排序按房号排序按学吕插入&按学号查找?按房号查找8按学号删除to'Pfess any ky to continu巳.(图 4-15)五课程设计总结经过这次课程设计,我收获到到了很多东西,对 C语言有了进一步的了解 和认识,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有 学到过的知识。通过这次课程
18、设计使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理 论中得出结论,才能提高自己的实际动手能力和独立思考的能力,在设计的过 程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不 够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。通过本次数据结构课程设计,我学到了很多,独立的完成了作业,我觉得 很满足,也很有成就感,现在知道并熟练的掌握了一些曾经自己不知道的知识。 经过这次课程设计,我深刻认识到算法在程序设计中的重要性,一个完整的程 序总是由若干个函数构成的,这些相应的函数体现了算法的基本思想。通过此次课程设
19、计,我了解了编写应用软件的一般步骤,获得了很多宝贵 的经验。特别是怎样将理论与实践相结合,把书本上的的内容应用到我们做的 程序上。其次我熟悉了数据结构的知识学会了很多关于程序设计的经验和技巧, 明白了程序设计的使用性和通用性事程序生存周期长短的关键,学会了程序调 试的一般方法。重要的是通过本次程序设计,我逐步具备了走向程序员的基本 素质。知道如何在困难重重时一步一步细心发现问题,解决问题。知道了在软 件设计中对界面和功能如何平衡,如何达到相对完美。编程是一件枯燥乏味工作,但是只要认真专研,我们会从中学到很多在课 本上学不到或者无法在课堂上掌握的知识,同时也能从中感受到编程的乐趣。 兴趣是可以培
20、养的,只要坚持下去,面对困难我们总能够找到解决问题的方法。 通过小组的分工与合作,使我充分认识到在项目团队开发过程中合作的重要性, 也更加理解了沟通协作能力在软件开发行业中的重要性。另外也需要提出的是 在这次程序设计的过程中,非常感谢陈利民老师对我们的耐心指导。老师在教 学过程中表现出来的对学术专研一丝不苟的精神让我非常有收获。同样也是老 师的严格要求才使得小组成员能够顺利的完成任务。六参考文献1 谭浩强,C程序设计题解与上机指导(第二版),北京,清华大学出版社,2000年9月。2 陈朔鹰等编著,C语言程序设计基础教程,兵器工业出版社,1994年9月。3 裘宗燕著,从问题到程序科学出版社,北京
21、大学出版社,1999年4月。4 姜仲秋等主编,C语言程序设计,南京大学出版社,1998年1月。 刘瑞挺主编,计算机二级教程,南开大学出版社,1996年10月。 陈朔鹰 陈英主编,C语言程序设计习题集(第二版)人民邮电出版社,2003年2月。7田淑清等,C语言程序设计辅导与习题集,中国铁道出版社,2000年1月。七附件源代码:#i nclude<stdio.h>#in clude<stdlib.h>#i nclude<stri ng.h>#defi ne N 40 /线性表存储空间的初始分配量#defi ne in crease 10 /线性表存储空间的分配量
22、增量int f, t = 0; /定义全局变量typedef structchar n ame20;int num;/int room;stu;stu stud;学号和房号都为整型typedef structint len gth; / stu *elem; / int listsize; /li nklist;当前长度存储空间基址当前分配的存储容量void init ( lin klist & )/线性表初始化l.le ngth = 0;l.elem = ( stu * ) malloc ( N * sizeof ( stu );l.listsize = N;void men u()
23、 操作菜单printf ("n");printf ("*n");printf ("n");pri ntf("n");1*请按键选择操作printf ("n");printf ("n");printf ("n");printf ("n");printf ("n");printf ("n");printf ("n");printf ("n");printf (&
24、quot;n");printf ("n");printf ("n");printf (" 提示:当输入的数字键为0时,退出操作n");按姓名排序按房号排序按学号查找按学号插入按学号排序按姓名查找按房号查找按学号删除if ( t = 1 )printf ("请输入数字键(18为操作键):");/18为有效数字操作键scanf ( "%d", &f );if ( f < 0|f > 9 )system ( "cls");printf ( "
25、n");printf (" 输入数字不对,请在原处重输!n");printf ("n");menu ();void disp ()/返回主界面char c;fflush ( stdin );printf ( "n");printf ("请按任意键进入主界面:");sca nf ( "%c", & c );system ( "cls");void pan dua n3 () /如果已无学生记录则返回主界面printf ("n");print
26、f (" 已无学生记录n");printf ("n");disp ();menu ();void shuru ( lin klist l ) /printf ("请输入姓名:");fflush ( stdi n );/gets ( stud. name );/printf ("请输入学号:");scanf ( "%d", &stud.num );printf ("请输入房号:");sca nf ( "%d", & stud.room );输
27、入学生的信息清空输入缓冲区,得到正确的输入数据 输入一行字符串(姓名)void create ( lin klist & )/创建学生信息表判断学生的人数是否超过初值,如果if ( l.len gth >= l.listsize ) / 超过,则重新分配stu *n ewbase;n ewbase = ( stu* ) realloc ( l.elem, ( N+in crease ) * sizeof (stu );l.elem = n ewbase;l.listsize += in crease;int i = 2;char ch;printf ( "n"
28、);printf (H*n");*printf ( "n");printf (" 请输入第1个学生的信息n");shuru ( l );/调用输入函数ch = getchar ();strcpy ( l.eleml .len gth. name, stud .n ame );l.eleml .len gth. num = stud. num;l.eleml.le ngth.room = stud.room;l.le ngth+;printf ( "n");printf (” 是否继续输入?<y/n>:"
29、); scanf ( "%c", &ch );printf ( "n");printf ( "n");while ( ch = 'y')printf (" 请输入第c个学生的信息n", i ); shuru ( l );strcpy ( l.eleml .len gth. name, stud .n ame );l.eleml.le ngth. num = stud. num;l.eleml.le ngth.room = stud.room;l.len gth+;i+;ch=getchar
30、();printf ( "n");printf (”是否继续输入?<y/n>:");scanf ( "%c", &ch );printf ( "n");printf ( "n");if ( ch = 'n' ) system ( "cis");void sort3 ( lin klist & )/按房号排序(采用冒泡排序)int i, j;stu temp;for ( i= 0; i < l.length - 1; i+)for ( j
31、 = i + 1; j < Llen gth; j+)if ( l.elemi.room > l.elemj.room )temp = l.elemi;l.elemi = l.elemj;l.elemj = temp;void sort2 ( lin klist & )/按学号排序(采用冒泡排序)int i, j;stu temp;for ( i = 0; i < l.length - 1; i+ )for ( j = i + 1; j < Llen gth; j+ )if ( l.elemi.num > l.elemj.num ) temp = l.el
32、emi;l.elemi = l.elemj;l.elemj = temp;void sortl ( lin klist & )/按姓名排序(采用冒泡排序)int i, j;stu temp;for ( i = 0; i < l.length - 1; i+ )for ( j = i + 1; j < Llen gth; j+ )if ( strcmp ( , ) > 0 )temp = l.elemi;l.elemi = l.elemj;l.elemj = temp;void print1 ( lin klist &am
33、p; I )/打印学生信息int i;printf ( "n");printf (" 姓名学号 房号n");printf ( "n");for ( i = 0; i < l.len gth; i+ )l.elemi. num,printf ( "%-15s %-3d %5dn", ,l.elemi.room );void print2 ( lin klist & I, i nt mid ) /打印查找到的学生信息printf (" 查找成功-> 该学生信息为:n
34、");printf (" 姓名学号 房号n");printf ( "n");printf ("%-15s %-5d %-5dn", l.elemmid. name, l.elemmid. num, l.elemmid.room );in t pa ndua n1 ( char ch ) /判断是否继续查找scanf ( "%c", &ch );printf ("是否继续查找?<y/n>:");fflush ( stdin );scanf ( "%c&quo
35、t;, &ch );if ( ch ='y')system ( "cls");return ( 1 );elsereturn 0;int panduan2 ( char ch ) /如果学生不存在,判断是否继续查找scanf ( "%c", &ch );printf ("该学生不存在,是否继续查找?<y/n>:");fflush(stdi n);sca nf("%c",&ch);if ( ch = 'y')system ( "cls&qu
36、ot;);return ( 1 );elsereturn 0;void chazhao3 ( lin klist & )/按房号从小到大查找(采用二分查找)if(l.le ngth=O) pa ndua n3();/此函数功能为:返回主界面elseint low=0,high=l.length,mid,flag=O;/flag作为标志符,为 1 则表示查找成功,否则没有所要查找的学生int m;char ch;printf ( "n");printf ( "n");printf (" 按房号查找-> 请输入要查找的房号:"
37、;);scanf ( "%d", &m );printf ( "n");while ( low <= high )mid = ( low + high ) / 2;if ( m = l.elemmid.room )flag = 1;break;elseif ( m > l.elemmid.room )low = mid + 1;elsehigh = mid - 1;if ( flag = 1 )print2 ( l, mid );if ( pan dua n1 (ch )/调用判断函数 1chazhao3 ( l );elsesyst
38、em ( "cls");menu ();elseif ( panduan2 ( ch ) /调用判断函数 2chazhao3 ( l );elsesystem ( "cls");menu ();void chazhao2 ( lin klist & )/按学号从小到大查找(采用二分查找)if ( l.len gth = 0 ) pan dua n3 ();elsein t low = 0, high = Lien gth, mid, flag = 0;int n;char ch;printf ( "n");printf ( &
39、quot;n");printf (" 按学号查找-> 请输入要查找的学号:");scanf ( "%d", &n );printf ( "n");while ( low <= high )mid = ( low + high ) / 2;if ( n = l.elemmid.num )flag = 1;break;elseif ( n > l.elemmid. num )low = mid + 1;elsehigh = mid - 1;if ( flag = 1)print2 ( l, mid );
40、if( pan dua n1 ( ch )chazhao2 ( l );elsesystem ( "cls");menu (); elseif ( pan dua n2 ( ch ) chazhao2 (I);elsesystem ( "cIs"); menu();void chazhao1 ( lin klist & )/按姓名从小到大查找(采用二分查找)if ( l.len gth = 0) pan dua n3 ();elsein t low = 0, high = Lien gth, mid, flag = 0;printf ("
41、;n");printf ("n");printf ("按姓名查找-> 请输入要查找的姓名:");char a15, ch;scanf ( "%s", a );printf ( "n");while ( low <= high )mid = ( low + high ) / 2;if ( strcmp ( a, l.elemmid. name ) = 0 )flag = 1;break;elseif ( strcmp ( a, l.elemmid. name ) > 0 )low = mi
42、d + 1;elsehigh = mid - 1;if ( flag = 1 )print2 ( l, mid );/打印查找到的学生的信息if ( panduan1 ( ch ) ) chazhaol ( l );elsesystem ( "cis");menu (); elseif ( panduan2 ( ch ) )chazhaol ( l );elsesystem ( "cls");menu ();void in sert ( lin klist & )/按学号从小到大插入该学生int i, j, k;char ch;printf (&
43、quot;n");printf ("插入的学生信息为:n");printf ("姓名:");fflush (stdi n);清空输入缓冲区,得到正确的输入数据gets (stud .n ame);printf ("学号:");sea nf ("%d",&stud. nu m);printf ("房号:");sea nf ("%d",&stud.room);if ( Lie ngth = 0 )strepy ( ,
44、 );l.eleml.le ngth. num = stud. num;l.eleml.le ngth.room = stud.room;for ( i = 0; i < l.len gth; i+)if ( stud.num < l.elemi.num )k = i;for ( j = Llen gth; j > k; j-)l.elemj = l.elemj - 1;strepy ( , );l.elemk. num = stud. num;l.elemk.room = stud.room;break;els
45、estrepy ( l.eleml.le ngth. name,stud. name);l.eleml .len gth. num = stud. num;l.eleml.le ngth.room = stud.room;l.len gth+;fflush (stdi n);printf ("n");printf ("是否继续插入?<y/n>:");scanf ("%c", &ch);if(ch='y') insert(l);else system("cls");void Del
46、ete(li nklist &)/按学号删除该学生int i,j,k=-1;char ch;prin tf("n");pri ntf("n");printf("请输入要删除学生的学号:");sca nf("%d",&stud. nu m);for(i=0;i<l.le ngth;i+)if(stud. num=l.elemi. num)printf("该学生的信息为:n");printf("n");printf("%-15s%-3d %7dn&
47、quot;,,l.elemi.num,l.elemi.room);k=i;for(j=k;j<l.le ngth-1;j+)l.elemj=l.elemj+1;prin tf("n");break;if(i>=l.length) printf("该学生不存在 n");if(k>=0)l.le ngth-;fflush(stdi n);prin tf("n");printf("是否继续删除?<y/n>:");sea nf("%c",&ch);system("cls");if(ch='y') Delete(l);else system("cls");void mai n()/ 主函数定义线性表l调用初始化函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- s版小学四年级语文下册教案(全册)
- 工业机器人虚拟仿真与实操课件 项目四 任务一 正方形物料搬运工作站仿真
- 天津市部分区2024-2025学年高三上学期期中考试生物(含答案)
- 网络安全专题培训
- 壁挂灯产业链招商引资的调研报告
- 打猎用伪装掩蔽物市场需求与消费特点分析
- 减肥用化妆品产业规划专项研究报告
- 录音装置市场发展预测和趋势分析
- 手杖市场需求与消费特点分析
- 冰镇球产业运行及前景预测报告
- ESTIC-AU40使用说明书(中文100版)(共138页)
- 河北省2012土建定额说明及计算规则(含定额总说明)解读
- Prolog语言(耐心看完-你就入门了)
- 保霸线外加电流深井阳极地床阴极保护工程施工方案
- 蓝色商务大气感恩同行集团公司20周年庆典PPT模板
- 恒温箱PLC控制系统毕业设计
- 雍琦版 《法律逻辑学》课后习题答案
- 176033山西《装饰工程预算定额》定额说明及计算规则
- 新技术、新材料、新工艺”试点输电线路建设的通知国家电网
- 水泵试运转记录表
- 箱式变电站交接试验报告
评论
0/150
提交评论