学生宿舍楼宇房间管理系统.docx

上传人:b****5 文档编号:8433061 上传时间:2023-01-31 格式:DOCX 页数:29 大小:285.15KB
下载 相关 举报
学生宿舍楼宇房间管理系统.docx_第1页
第1页 / 共29页
学生宿舍楼宇房间管理系统.docx_第2页
第2页 / 共29页
学生宿舍楼宇房间管理系统.docx_第3页
第3页 / 共29页
学生宿舍楼宇房间管理系统.docx_第4页
第4页 / 共29页
学生宿舍楼宇房间管理系统.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

学生宿舍楼宇房间管理系统.docx

《学生宿舍楼宇房间管理系统.docx》由会员分享,可在线阅读,更多相关《学生宿舍楼宇房间管理系统.docx(29页珍藏版)》请在冰豆网上搜索。

学生宿舍楼宇房间管理系统.docx

学生宿舍楼宇房间管理系统

*******************

实践教学

*******************

 

计算机与通信学院

2011年春季学期

 

算法与数据结构课程设计

 

题目:

学生宿舍楼宇房间管理系统

专业班级:

计算机科学与技术

(2)班

姓名:

学号:

指导教师:

成绩:

 

摘要

该学生宿舍楼宇房间管理,可以实现学生宿舍楼宇各种信息的输入,可以实现对楼宇信息的修改,也可以进行插入、删除操作,可以按照楼号进行查询,可分别进行管辖区域信息、公寓楼信息和公寓宿舍信息的浏览,也可以统计学生宿舍楼宇各种信息。

关键词:

插入;删除;查询;统计

 

前言

该设计以要求以学生宿舍楼宇房间管理为背景,设计一个可实现管辖区域的添加、查看、修改、删除、公寓楼信息的查询、统计、公寓宿舍信息的添加、修改、汇总、统计空宿舍等功能的管理系统。

按照任务书的要求,我一步步进行设计,最后基本完成了课程设计的要求,但还是有很多的不足之处。

在这个简单的学生宿舍楼宇房间管理程序中,使用了链表这个动态数据结构。

链表是动态数据结构中最简单的一种。

它是一种用前后链指针连接的若干个有限结点的集合,其连接是前一个结点的尾指针指向下一个结点的起始地址,从而连接成的一个链,所以它是一种线性的动态数据结构。

在该程序中,采用了动态存储分配技术,这样可以有效地利用有限的内存空间。

要实现它,就必须使用malloc()和free()函数。

该程序主要使用了链表的插入、删除、查询。

除了使用链表,还使用了文件的操作。

 

正文

1.采用类c语言定义相关的数据类型

structbuilding/*定义结构体*/

{

charnum[10];/*楼号*/

charaddress[20];/*地址*/

chartotal[30];/*楼宇总数*/

charE_dormitory[50];/*空宿舍数*/

charfloor[4];/*楼层数*/

charD_total[30];/*每层宿舍数*/

charroomnum[10];/*宿舍号*/

charD_telephone[20];/*宿舍电话*/

charrenshu[10];/*宿舍容纳人数*/

charmember[30];/*宿舍成员*/

};

typedefstructnode/*线性单链表的存储结构*/

{

structbuildingdata;

structnode*next;

}Node,*Link;

2.各模块的伪码算法

1链表的插入是根据某一关键字的顺序来进行插入操作的。

要实现它,需要用三个指针,一个头指针、一个指向开辟新结点的指针,以及一个用来保存刚刚建立的结点的指针。

该算法如下:

voidInsList(LinkList*head,inti,DataTypee)

{/*在带头结点的单链表head的第i个结点之前插入值为e的新结点*/

Node*p,*q;

intj;

p=head->link;j=1;

while(p!

=NULL&&j

/*在第i个结点之前插入,则需先找其前驱结点,即第i-1个结点,使指针p指向它*/

{p=p->link;

j++;

}

if(j!

=i-1)

/*p=NULL时,链表为空,不存在第i个结点;或者i<1,则插入位置不合理*/

{printf(“插入位置不合理!

”);

returnERROR;

}

q=(Node*)malloc(sizeof(Node));/*为e申请一个新的结点并由q指向它*/

q->data=e;/*将待插入结点的值e赋给q的数据域*/

q->link=p->link;/*将第i个结点链接在新结点q之后*/

p->link=q;/*将新结点连接在p之后,完成插入操作*/

}

○2链表的删除是指从某个已经存在的链表中根据给定的条件删去若干结点的操作。

删除操作的实现,实际上就是把某个结点从原链表中分离出来。

也就是使被删除结点与原链表失去联系,从而改变原链表的连接关系。

其算法如下:

intDelList(LinkList*head,inti,DataType*e)

/*在带头结点的单链表head中删除第i个元素,并将删除元素保存到变量e中*/

{Node*p,*q;

intj;

p=head;

j=0;

while(p->link!

=NULL&&j

/*寻找被删除结点i的前驱结点i-1使p指向它*/

{p=p->link;

j=j+1;

}

if(j!

=i-1)

{printf(“删除结点的位置i不合理!

”)

returnERROR;

}

q=p->link;

p->link=q->link;

free(q);/*释放被删除的结点所占的内存空间*/

returnOK;

}

○3链表的查找操作是指从某个已经存在的链表中根据给定的条件寻找符合条件的结点。

其算法如下:

Node*Locate(Linkl,charfindmess[],charaddressornum[])/*查找子函数*/

{

Node*r;

if(strcmp(addressornum,"num")==0)/*与比较楼号相同*/

{

r=l->next;

while(r!

=NULL)/*不是尾结点*/

{

if(strcmp(r->data.num,findmess)==0)/*比较相同*/

returnr;/*返回结点信息*/

r=r->next;/*查找下一个结点*/

}

}

elseif(strcmp(addressornum,"address")==0)/*与比较楼宇地址相同*/

{

r=l->next;

while(r!

=NULL)

{

if(strcmp(r->data.address,findmess)==0)

returnr;

r=r->next;

}

}

return0;

}

 

函数的调用关系图

 

 

 

3.调试分析

a、调试中遇到的问题及对问题的解决方法

由于在输入程序时中英文切换频繁,导致“;”输入错误,运行时出现不能识别字符。

源程序中含有文件调用(fp=fopen("C:

\\building","wb");)目前还不会将文件镜像到程序目录),因此每次启动程序需创建“C:

\\building”,再运行一次,文件成功建立。

当时直接就运行了,结果运行时无法成功创建,按上述说法改了一下便成功了。

b、算法的时间复杂度和空间复杂度

整个程序转为EXE可执行后整体的空间复杂度为196KB。

链表的插入、删除、查找操作的时间复杂度都为O(n)。

4.测试结果

(1)学生宿舍楼宇信息的输入

(2)删除操作(按楼号删除)

 

(3)查询学生宿舍楼宇信息(按楼号查询)

(4)修改学生宿舍楼宇信息

 

(5)显示管辖区域信息

(6)显示公寓楼信息

 

(7)保存公寓楼信息

 

(8)显示公寓宿舍信息

(9)统计学生宿舍楼宇信息

 

5.源程序(带注释)

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

intshoudsave=0;

structbuilding/*定义结构体*/

{

charnum[10];/*楼号*/

charaddress[20];/*地址*/

chartotal[30];/*楼宇总数*/

charE_dormitory[50];/*空宿舍数*/

charfloor[4];/*楼层数*/

charD_total[30];/*每层宿舍数*/

charroomnum[10];/*宿舍号*/

charD_telephone[20];/*宿舍电话*/

charrenshu[10];/*宿舍容纳人数*/

charmember[30];/*宿舍成员*/

};

typedefstructnode/*线性单链表的存储结构*/

{

structbuildingdata;

structnode*next;

}Node,*Link;

voidmenu()

{

printf("********************************************************************************");

printf("\t1输入学生宿舍楼宇信息\t\t\t2删除学生宿舍楼宇信息\n");

printf("\t3查询学生宿舍楼宇信息\t\t\t4修改学生宿舍楼宇信息\n");

printf("\t5显示管辖区域信息\t\t\t6显示公寓楼信息\n");

printf("\t7保存公寓楼信息\t\t\t8显示公寓宿舍信息\n");

printf("\t9统计学生宿舍楼宇信息\t\t\t10退出系统\n");

printf("********************************************************************************\n");

}

voidprintstart()/*分隔线子函数*/

{

printf("--------------------------------------------------------------------------------\n");

}

voidWrong()/*错误信息子函数*/

{

printf("\n=====>提示:

输入错误!

\n");

}

voidNofind()/*信息查找失败子函数*/

{

printf("\n=====>提示:

没有找到该公寓楼!

\n");

}

voidprintc()/*管辖区域信息标题子函数*/

{

printf("楼号\t地址\t楼宇总数\n");

}

voidprinte(Node*p)/*管辖区域信息输出子函数*/

{

printf("%s\t%s\t%s\t\n",p->data.num,p->data.address,p->data.total);

}

voidprintb()

{printf("公寓楼信息:

\n");}/*公寓楼信息子函数*/

voidprintx()/*公寓楼信息标题子函数*/

{printf("楼号\t地址\t空宿舍数\t楼层数\t每层宿舍数\t\n");}

voidprintd(Node*p)/*公寓楼信息输出子函数*/

{

printf("%s\t%s\t%s\t%s\t%s\t\n",p->data.num,p->data.address,p->data.E_dormitory,p->data.floor,p->data.D_total);}

voidprinta()

{printf("公寓宿舍信息:

\n");}/*公寓宿舍信息子函数*/

voidprinty()/*公寓宿舍信息标题子函数*/

{printf("楼号\t地址\t宿舍号\t宿舍电话\t宿舍容纳人数\t宿舍成员\t\n");}

voidprinti(Node*p)/*公寓宿舍信息输出子函数*/

{

printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",p->data.num,p->data.address,p->data.roomnum,p->data.D_telephone,p->data.renshu,p->data.member);

}

Node*Locate(Linkl,charfindmess[],charaddressornum[])/*查找子函数*/

{

Node*r;

if(strcmp(addressornum,"num")==0)/*与比较楼号相同*/

{

r=l->next;

while(r!

=NULL)/*不是尾结点*/

{

if(strcmp(r->data.num,findmess)==0)/*比较相同*/

returnr;/*返回结点信息*/

r=r->next;/*查找下一个结点*/

}

}

elseif(strcmp(addressornum,"address")==0)/*与比较楼宇地址相同*/

{

r=l->next;

while(r!

=NULL)

{

if(strcmp(r->data.address,findmess)==0)

returnr;

r=r->next;

}

}

return0;

}

voidAdd(Linkl)/*学生宿舍楼宇信息输入子函数*/

{

Node*p,*r,*s;

charnum[10];

r=l;

s=l->next;

while(r->next!

=NULL)

r=r->next;

while

(1)

{

printf("请你输入楼号(以'0'返回上一级菜单:

)");

scanf("%s",num);

if(strcmp(num,"0")==0)/*检验输入值是否为0*/

break;

while(s)

{

if(strcmp(s->data.num,num)==0)/*检验输入值是否已存在*/

{

printf("=====>提示:

楼号为'%s'的公寓楼已经存在,若要修改请你选择'4'修改!

\n",num);

printstart();/*调用分隔线子函数*/

printc();/*调用管辖区域信息标题子函数*/

printe(s);/*调用管辖区域信息输出子函数*/

printstart();

printf("\n");

return;

}

s=s->next;/*进行循环*/

}

p=(Node*)malloc(sizeof(Node));

strcpy(p->data.num,num);/*复制函数*/

printf("请您输入地址:

");

scanf("%s",&p->data.address);

getchar();

printf("请您输入楼宇总数:

");

scanf("%s",&p->data.total);

getchar();

printf("请您输入空宿舍数:

");

scanf("%s",&p->data.E_dormitory);

getchar();

printf("请您输入楼层数:

");

scanf("%s",&p->data.floor);

getchar();

printf("请您输入每层宿舍数:

");

scanf("%s",&p->data.D_total);

getchar();

printf("请您输入宿舍号:

");

scanf("%s",&p->data.roomnum);

getchar();

printf("请您输入宿舍电话:

");

scanf("%s",&p->data.D_telephone);

getchar();

printf("请您输入宿舍容纳人数:

");

scanf("%s",&p->data.renshu);

getchar();

printf("请您输入宿舍成员:

");

scanf("%s",&p->data.member);

getchar();

p->next=NULL;

r->next=p;

r=p;

shoudsave=1;/*信息未保存标志*/

}

}

voidQur(Linkl)/*学生宿舍楼宇信息查询子函数*/

{

intsel;

charfindmess[20];

Node*p;

if(!

l->next)

{

printf("\n=====>提示:

没有资料可以查询!

\n");

return;

 

}

printf("\n=====>按楼号查找\n");

scanf("%d",&sel);

if(sel==1)/*按楼号查找*/

{

printf("请您输入要查找的楼号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

printf("\t\t\t\t查找结果\n");

printstart();

printc();/*调用管辖区域信息标题子函数*/

printe(p);/*调用管辖区域信息输出子函数*/

printb();/*调用公寓楼信息子函数*/

printx();/*调用公寓楼信息标题子函数*/

printd(p);/*调用公寓楼信息输出子函数*/

printa();/*调用公寓宿舍信息子函数*/

printy();/*调用公寓宿舍信息标题子函数*/

printi(p);/*调用公寓宿舍信息输出子函数*/

printstart();/*调用分隔线子函数*/

}

else

Nofind();/*调用信息查找失败子函数*/

}

else

Wrong();

}

voidDel(Linkl)/*删除学生宿舍楼宇信息子函数*/

{

intsel;

Node*p,*r;

charfindmess[20];

if(!

l->next)

{

printf("\n=====>提示:

没有信息可以删除!

\n");

return;

}

printf("\n=====>1按楼号删除\n");

scanf("%d",&sel);

if(sel==1)

{

printf("请您输入要删除的楼号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");/*调用查找子函数*/

if(p)

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("\n=====>提示:

该楼宇已经成功删除!

\n");

shoudsave=1;

}

else

Nofind();

}

else

Wrong();

}

voidModify(Linkl)/*修改学生宿舍楼宇信息子函数*/

{

Node*p;

charfindmess[20];

if(!

l->next)

{

printf("\n=====>提示:

没有信息可以修改!

\n");

return;

}

printf("请您输入要修改的楼号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");/*调用查找子函数*/

if(p)

{

printf("请您输入新楼号(原来是%s):

",&p->data.num);

scanf("%s",&p->data.num);

getchar();

printf("请您输入新地址(原来是%s):

",&p->data.address);

scanf("%s",&p->data.address);

getchar();

printf("请您输入新楼宇总数(原来是%s):

",&p->data.total);

scanf("%s",&p->data.total);

getchar();

printf("请您输入新的空宿舍数(原来是%s):

",&p->data.E_dormitory);

scanf("%s",&p->data.E_dormitory);

getchar();

printf("请您输入新的楼层数(原来是%s):

",p->data.floor);

scanf("%s",&p->data.floor);

getchar();

printf("请您输入新的每层宿舍数(原来是%s):

",&p->data.D_total);

scanf("%s",&p->data.D_total);

getchar();

printf("请您输入新的宿舍号(原来是%s):

",&p->data.roomnum);

scanf("%s",&p->data.roomnum);

getchar();

printf("请您输入新的宿舍电话(原来是%s):

",&p->data.D_telephone);

scanf("%s",&p->data.D_telephone);

getchar();

printf("请您输入新的宿舍容纳人数(原来是%s):

",&p->data.renshu);

scanf("%s",&p->data.renshu);

getchar();

printf("请您输入新的宿舍成员(原来是%s):

",&p->data.member);

scanf("%s",&p->data.member);

getchar();

printf("\n=====>提示:

信息修改成功!

\n");

shoudsave=1;

}

else

Nofind();

}

 

voidDisp(Linkl)/*管辖区域信息浏览子函数*/

{

intcount=0;

Node*p;

p=l->next;

if(!

p)

{

printf("\n=====>提示:

没有信息可以显示!

\n");

return;

}

printf("\t\t\t\t显示结果\n");

printstart();

printc();

printf("\n");

while(p)

{

printe(p);

p=p->next;

}

printstart();

printf("\n");

}

 

voidlouyu(Linkl)/*公寓楼信息浏览子函数*/

{

Node*p;

p=l->next;

if(!

p)

{

printf("\n=====>提示:

没有信息可以显示!

\n");

return;

}

printf("\t\t\t\t显示结果\n");

printstart();

printb();

printx();

printf("\n");

while(p)

{

printd(p);

p=p->next;

}

printstart();

printf("\n");

}

voidsushe(Linkl)/*公寓宿舍信息浏览子函数*/

{

Node*p;

p=l->next;

if(!

p)

{

printf("\n=====>提示:

没有信息可以显示!

\n");

return;

}

printf("\t\t\t\t显示结果\n");

printstart();

printa();

printy();

pr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1