宿舍管理查询系统

更新时间:2024-03-02 21:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

编 号: 学 号:

课 程 设 计

教 学 院 课程名称 题 目

专 业 班 级 姓 名

计算机学院 数据结构 宿舍管理查询系统

软件工程

同组人员 指导教师

年 月 日

(完成时间)

目 录

一 概述 ......................................................................................... 1 二 总体方案设计 ........................................................................... 2 1.程序结构图 ........................................................................ 2 2.程序流程图(主要部分的详细流程图) ............................... 3 三 详细设计 .................................................................................. 4 1.软件设计题目:宿舍管理查询 ............................................. 4 2.算法思想: ......................................................................... 4 3.本系统定义的存储结构采用结构体数组: .............................. 5 4.界面设计函数: ..................................................................... 6 5.主要函数定义说明: .............................................................. 7 四 程序的调试与运行结果说明 ...................................................... 9 1.测试输出结果(以运行结果图表示): ................................... 9 五 课程设计总结 ......................................................................... 17 六 参考文献 ................................................................................ 18 七 附件 ....................................................................................... 19

一 概述

1. 课程设计的目的

1.理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养综合运用所学知识独立完成课题的能力。

3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。

4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。

2. 课程设计的要求

需要的基本知识与技能,尚未掌握的知识点,需要查阅相关资料。教师对本题目所提出的要求等。

任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: (1)采用交互工作方式 (2)可以增加、删除、修改信息

(3)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)

(4)查询: a.按姓名查询 ;b.按学号查询 ;c按房号查询 (5)打印任一查询结果(可以连续操作)

二 总体方案设计

1.程序结构图

(图2-1)

2.程序流程图(主要部分的详细流程图)

(图2-2)

三 详细设计

1.软件设计题目:宿舍管理查询

任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: (1)采用交互工作方式 (2)可以增加、删除、修改信息

(3)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)

(4) 查询 : a.按姓名查询 ;b.按学号查询 ;c按房号查询 (5) 打印任一查询结果(可以连续操作)

2.算法思想:

首先,运行程序进入“欢迎进入宿舍管理查询系统”界面,然后进入线性表创建界面中,输入学生的信息,创建好学生信息以后单击“n”键则进入操作界面(主界面),然后可按键进行操作。

单击数字键“1”,则为按姓名排序 单击数字键“2”,则为按学号排序 单击数字键“3”,则为按房号排序 单击数字键“4”,则为按姓名查找 单击数字键“5”,则为按学号查找 单击数字键“6”,则为按学号查找 单击数字键“7”,则为按学号插入 单击数字键“8”,则为按学号删除系统中有如下关键词:

?提示:当输入的数字键为0时,退出操作; ?请输入数字键(1~8为操作键); ?请按任意键进入主界面。

3.本系统定义的存储结构采用结构体数组:

(1)关键变量说明:

#define N 40 线性表存储空间的初始分配量 #define increase 10 线性表存储空间的分配量增量 char name[20]; 姓名 int num; int room; int length; stu *elem; int listsize;

(2)函数定义说明: #include #include #include (3)结构体说明:

typedef struct { char name[20]; int num;

int room;

}stu;stu stud; typedef struct

学号 房号 当前长度 存储空间基址 当前分配的存储容量 //定义结构体成员

{

int length; //当前长度 stu *elem; //存储空间基址 int listsize; //当前分配的存储容量

}linklist;

4.界面设计函数:

void menu()//操作菜单 {

printf (\

printf (\ ***************请按键选择操作****************\\n\printf (\

printf (\ 1 按姓名排序 2 按学号排序printf (\

printf (\ 3 按房号排序 4 按姓名查找printf (\

printf (\ 5 按学号查找 6 按房号查找printf (\

printf (\ 7 按学号插入 8 按学号删除printf (\printf (\printf (\printf (\

printf (\提示:当输入的数字键为0时,退出操作\\n\if ( t == 1 ) {

printf (\请输入数字键(1~8为操作键):\为有效数字操作键 if ( f < 0||f > 9 ) {

scanf ( \

\\n\

\\n\

\\n\

\\n\

}

}

}

system ( \

printf ( \输入数字不对,请在原处重输!\\n\printf (\menu ();

printf ( \

void disp () //返回主界面 { }

char c; fflush ( stdin ); printf ( \

printf ( \请按任意键进入主界面:\scanf ( \system ( \

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 ) //按姓名排序(采用冒泡排序) 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 )//按姓名从小到大查找(采用二分查找) 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语言有了进一步的了解和认识,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力,在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。

通过本次数据结构课程设计,我学到了很多,独立的完成了作业,我觉得很满足,也很有成就感,现在知道并熟练的掌握了一些曾经自己不知道的知识。 经过这次课程设计,我深刻认识到算法在程序设计中的重要性,一个完整的程序总是由若干个函数构成的,这些相应的函数体现了算法的基本思想。

通过此次课程设计,我了解了编写应用软件的一般步骤,获得了很多宝贵的经验。特别是怎样将理论与实践相结合,把书本上的的内容应用到我们做的程序上。其次我熟悉了数据结构的知识学会了很多关于程序设计的经验和技巧,明白了程序设计的使用性和通用性事程序生存周期长短的关键,学会了程序调试的一般方法。重要的是通过本次程序设计,我逐步具备了走向程序员的基本素质。知道如何在困难重重时一步一步细心发现问题,解决问题。知道了在软件设计中对界面和功能如何平衡,如何达到相对完美。

编程是一件枯燥乏味工作,但是只要认真专研,我们会从中学到很多在课本上学不到或者无法在课堂上掌握的知识,同时也能从中感受到编程的乐趣。兴趣是可以培养的,只要坚持下去,面对困难我们总能够找到解决问题的方法。通过小组的分工与合作,使我充分认识到在项目团队开发过程中合作的重要性,也更加理解了沟通协作能力在软件开发行业中的重要性。另外也需要提出的是在这次程序设计的过程中,非常感谢陈利民老师对我们的耐心指导。老师在教学过程中表现出来的对学术专研一丝不苟的精神让我非常有收获。同样也是老师的严格要求才使得小组成员能够顺利的完成任务。

六 参考文献

[1] 谭浩强,C程序设计题解与上机指导(第二版),北京,清华大学出版社,2000年9

月。

[2] 陈朔鹰等编著,C语言程序设计基础教程,兵器工业出版社,1994年9月。 [3] 裘宗燕 著,从问题到程序科学出版社,北京大学出版社,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 name[20];

int num; //学号和房号都为整型

int room;

}stu; stu stud;

typedef struct {

void init ( linklist &l )//线性表初始化 { }

void menu()//操作菜单 {

printf (\

printf (\ ***************请按键选择操作****************\\n\printf (\

printf (\ 1 按姓名排序 2 按学号排序printf (\

printf (\ 3 按房号排序 4 按姓名查找printf (\

printf (\ 5 按学号查找 6 按房号查找printf (\

printf (\ 7 按学号插入 8 按学号删除l.length = 0;

l.elem = ( stu * ) malloc ( N * sizeof ( stu ) ); l.listsize = N; int length; //当前长度 stu *elem; //存储空间基址 int listsize; //当前分配的存储容量

}linklist;

\\n\

\\n\

\\n\

\\n\

}

printf (\printf (\printf (\printf (\

printf (\提示:当输入的数字键为0时,退出操作\\n\if ( t == 1 ) { }

printf (\请输入数字键(1~8为操作键):\为有效数字操作键 if ( f < 0||f > 9 ) { }

system ( \

printf ( \输入数字不对,请在原处重输!\\n\printf (\menu ();

printf ( \ scanf ( \

void disp () //返回主界面 { }

void panduan3 () //如果已无学生记录则返回主界面 {

printf (\char c; fflush ( stdin ); printf ( \

printf ( \请按任意键进入主界面:\scanf ( \system ( \

}

printf (\已无学生记录\\n\printf (\disp (); menu ();

void shuru ( linklist l ) //输入学生的信息 { }

void create ( linklist &l )//创建学生信息表 {

if ( l.length >= l.listsize ) //判断学生的人数是否超过初值,如果超过,则{ } int i = 2; char ch; printf ( \

printf ( \开始创建***************************\\n\printf ( \

printf ( \请输入第1个学生的信息\\n\shuru ( l ); //调用输入函数

stu *newbase;

newbase = ( stu* ) realloc ( l.elem, ( N+increase ) * sizeof ( stu )); l.elem = newbase; l.listsize += increase;

重新分配

printf ( \请输入姓名:\

fflush ( stdin ); // 清空输入缓冲区,得到正确的输入数据 gets ( stud.name ); //输入一行字符串(姓名) printf ( \请输入学号:\scanf ( \printf ( \请输入房号:\scanf ( \

}

ch = getchar ();

strcpy ( l.elem[l.length].name, stud.name ); l.elem[l.length].num = stud.num; l.elem[l.length].room = stud.room; l.length++; printf ( \

printf ( \是否继续输入?:\scanf ( \printf ( \printf ( \while ( ch == 'y' ) {

printf ( \请输入第%d个学生的信息\\n\ shuru ( l );

strcpy ( l.elem[l.length].name, stud.name ); }

if ( ch == 'n' ) system ( \

l.elem[l.length].num = stud.num; l.elem[l.length].room = stud.room; l.length++; i++;

ch=getchar (); printf ( \

printf ( \是否继续输入?:\scanf ( \printf ( \printf ( \

void sort3 ( linklist &l )//按房号排序(采用冒泡排序) {

int i, j; stu temp;

for ( i= 0; i < l.length - 1; i++)

}

for ( j = i + 1; j < l.length; j++)

if ( l.elem[i].room > l.elem[j].room ) { }

temp = l.elem[i]; l.elem[i] = l.elem[j]; l.elem[j] = temp;

void sort2 ( linklist &l )//按学号排序(采用冒泡排序) { }

void sort1 ( linklist &l )//按姓名排序(采用冒泡排序) {

int i, j; stu temp;

for ( i = 0; i < l.length - 1; i++ )

for ( j = i + 1; j < l.length; j++ )

if ( strcmp ( l.elem[i].name, l.elem[j].name) > 0 )

int i, j; stu temp;

for ( i = 0; i < l.length - 1; i++ )

for ( j = i + 1; j < l.length; j++ ) if ( l.elem[i].num > l.elem[j].num ) { }

temp = l.elem[i]; l.elem[i] = l.elem[j]; l.elem[j] = temp;

}

{ }

temp = l.elem[i]; l.elem[i] = l.elem[j]; l.elem[j] = temp;

void print1 ( linklist &l )//打印学生信息 { }

void print2 ( linklist &l, int mid ) //打印查找到的学生信息 { }

int panduan1 ( char ch ) //判断是否继续查找 {

scanf ( \

printf ( \是否继续查找?:\fflush ( stdin ); scanf ( \if ( ch =='y')

printf ( \查找成功----->该学生信息为:\\n\printf ( \姓名 学号 房号\\n\printf ( \

printf (\%-5d %-5d\\n\l.elem[mid].name, l.elem[mid].num, int i; printf ( \

printf ( \姓名 学号 房号\\n\printf ( \

for ( i = 0; i < l.length; i++ )

printf ( \%-3d ]\\n\l.elem[i].name, l.elem[i].num,

l.elem[i].room );

l.elem[mid].room );

}

{ } else

return 0; system ( \return ( 1 ) ;

int panduan2 ( char ch ) //如果学生不存在,判断是否继续查找 { }

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 ( \printf ( \scanf ( \

printf ( \该学生不存在,是否继续查找?:\fflush(stdin); scanf(\if ( ch == 'y' ) { } else

return 0; system ( \return ( 1 );

成功,否则没有所要查找的学生

printf ( \按房号查找----->请输入要查找的房号:\scanf ( \printf ( \while ( low <= high ) { }

if ( flag == 1 ) { } else {

if ( panduan2 ( ch )) //调用判断函数2

chazhao3 ( l ); print2 ( l, mid );

if ( panduan1 ( ch )) //调用判断函数1 { }

system ( \menu (); chazhao3 ( l ); else

mid = ( low + high ) / 2; if ( m == l.elem[mid].room ) { } else

if ( m > l.elem[mid].room )

low = mid + 1; high = mid - 1; else flag = 1; break;

}

}

}

else { }

system ( \menu ();

void chazhao2 ( linklist &l )//按学号从小到大查找(采用二分查找) {

if ( l.length == 0 ) panduan3 ();

else {

int low = 0, high = l.length, mid, flag = 0; int n; char ch; printf ( \printf ( \

printf ( \按学号查找----->请输入要查找的学号:\

scanf ( \printf ( \while ( low <= high ) {

mid = ( low + high ) / 2; if ( n == l.elem[mid].num ) { } else

if ( n > l.elem[mid].num ) low = mid + 1;

flag = 1; break;

}

}

}

else

high = mid - 1;

if ( flag == 1) { } else { }

if ( panduan2 ( ch )) chazhao2 (l); else { }

system ( \menu(); print2 ( l, mid ); if( panduan1 ( ch ) ) chazhao2 ( l ); { }

system ( \menu ();

else

void chazhao1 ( linklist &l )//按姓名从小到大查找(采用二分查找) {

if ( l.length == 0) panduan3 (); else {

int low = 0, high = l.length, mid, flag = 0; printf (\

printf (\

printf (\按姓名查找----->请输入要查找的姓名:\char a[15], ch; scanf ( \printf ( \while ( low <= high ) { }

if ( flag == 1 ) { } else {

if ( panduan2 ( ch ) ) else

chazhao1 ( l );

print2 ( l, mid ); //打印查找到的学生的信息 if ( panduan1 ( ch ) ) chazhao1 ( l ); else { }

system ( \menu ();

mid = ( low + high ) / 2;

if ( strcmp ( a, l.elem[mid].name ) == 0 ) { } else

if ( strcmp ( a, l.elem[mid].name ) > 0 )

low = mid + 1; flag = 1; break;

else

high = mid - 1;

}

}

}

{ }

system ( \menu ();

void insert ( linklist &l )//按学号从小到大插入该学生 {

int i, j, k; char ch; printf (\

printf (\插入的学生信息为:\\n\printf (\姓名:\

fflush (stdin);// 清空输入缓冲区,得到正确的输入数据 gets (stud.name); printf (\学号:\ scanf (\printf (\房号:\

scanf (\if ( l.length == 0 ) { } {

if ( stud.num < l.elem[i].num ) {

k = i;

for ( j = l.length; j > k; j-- )

strcpy ( l.elem[l.length].name, stud.name ); l.elem[l.length].num = stud.num; l.elem[l.length].room = stud.room;

for ( i = 0; i < l.length; i++)

}

}

}

l.elem[j] = l.elem[j - 1];

strcpy ( l.elem[k].name, stud.name ); l.elem[k].num = stud.num; l.elem[k].room = stud.room; break;

else { }

strcpy ( l.elem[l.length].name,stud.name ); l.elem[l.length].num = stud.num; l.elem[l.length].room = stud.room;

l.length++; fflush (stdin); printf (\

printf (\是否继续插入?:\scanf (\if(ch=='y') insert(l); else system(\

void Delete(linklist &l)//按学号删除该学生 {

int i,j,k=-1; char ch;

printf(\

printf(\请输入要删除学生的学号:\scanf(\for(i=0;i

if(stud.num==l.elem[i].num) {

}

printf(\该学生的信息为:\\n\

printf(\ }

if(i>=l.length) printf(\该学生不存在\\n\if(k>=0)l.length--; fflush(stdin); printf(\

printf(\是否继续删除?:\scanf(\system(\if(ch=='y') Delete(l); else system(\

}

k=i;

for(j=k;j

l.elem[j]=l.elem[j+1];

printf(\break;

void main() //主函数 {

linklist l; //定义线性表 l init(l); //调用初始化函数 char ch;

system(\printf(\

printf(\ *************************欢迎进入宿舍管理查询系统printf(\

printf(\请按任意键开始操作:\

*************************\\n\

scanf(\

system(\将屏幕先前显示的内容清理掉 create(l); //调用线性表创建函数 system(\t=1;

menu(); //调用主菜单函数 while(f!=0) {

system(\switch(f) { case 1:

sort1(l); //调用按姓名排序函数 printf(\{ } else {

printf(\按姓名排序:\\n\print1(l);

disp(); //调用返回主界面 printf(\已无学生记录\\n\printf(\disp(); menu();

if(l.length==0)

menu(); } break;

sort2(l); //调用按学号排序函数 printf(\if(l.length==0)

case 2:

{ } {

printf(\按学号排序:\\n\print1(l); disp();

printf(\已无学生记录\\n\printf(\disp(); menu();

else

menu(); }break;

sort3(l); //调用按房号排序函数 printf(\if(l.length==0) { } {

printf(\按房号排序:\\n\print1(l); disp();

printf(\已无学生记录\\n\printf(\disp(); menu();

case 3:

else

menu(); }break;

sort1(l); //先调用按姓名排序函数进行排序

chazhao1(l); //再调用按姓名查找函数进行(二分)查找 break;

case 4:

case 5: }

sort2(l); //先调用按学号排序函数进行排序

chazhao2(l); //再调用按学号查找函数进行(二分)查找 break;

sort3(l); //先调用按房号排序函数进行排序

chazhao3(l); //再调用按房号查找函数进行(二分)查找 break;

sort2(l); //调用插入函数 insert(l); system(\

printf(\显示插入后的学生信息:\\n\disp(); menu(); break;

Delete(l); //调用删除函数 if(l.length==0) { } else {

printf(\显示删除后的学生信息:\\n\print1(l); disp(); menu(); printf(\

printf(\学生记录已被删除完\\n\printf(\disp();

case 6:

case 7:

case 8:

menu();

}break;

}

}

数据结构 课程设计成绩评定表

姓 名 专业班级 梅建明 15软件工程(1)班 性 别 男 课程设计题目:宿舍管理系统 课程设计答辩或质疑记录:

成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定)

指导教师签字:

年 月 日

您好,欢迎您阅读我的文章,本WORD文档可编辑修改,也可以直接打印。阅读过后,希望您提出保贵的意见或建议。阅读和学习是一种非常好的习惯,坚持下去,让我们共同进步。

本文来源:https://www.bwwdw.com/article/zy2a.html

Top