学生宿舍楼宇房间管理系统.doc
《学生宿舍楼宇房间管理系统.doc》由会员分享,可在线阅读,更多相关《学生宿舍楼宇房间管理系统.doc(35页珍藏版)》请在沃文网上搜索。
1、目 录摘 要1前 言2正 文31.采用类c语言定义相关的数据类型32.各模块的伪码算法3函数的调用关系图73.调试分析84.测试结果85.源程序(带注释)13总 结31参考文献32致 谢33附件 部分源程序代码341摘 要该学生宿舍楼宇房间管理,可以实现学生宿舍楼宇各种信息的输入,可以实现对楼宇信息的修改,也可以进行插入、删除操作,可以按照楼号进行查询,可分别进行管辖区域信息、公寓楼信息和公寓宿舍信息的浏览,也可以统计学生宿舍楼宇各种信息。关键词: 插入;删除;查询;统计34前 言该设计以要求以学生宿舍楼宇房间管理为背景,设计一个可实现管辖区域的添加、查看、修改、删除、公寓楼信息的查询、统计、
2、公寓宿舍信息的添加、修改、汇总、统计空宿舍等功能的管理系统。按照任务书的要求,我一步步进行设计,最后基本完成了课程设计的要求,但还是有很多的不足之处。在这个简单的学生宿舍楼宇房间管理程序中,使用了链表这个动态数据结构。链表是动态数据结构中最简单的一种。它是一种用前后链指针连接的若干个有限结点的集合,其连接是前一个结点的尾指针指向下一个结点的起始地址,从而连接成的一个链,所以它是一种线性的动态数据结构。在该程序中,采用了动态存储分配技术,这样可以有效地利用有限的内存空间。要实现它,就必须使用malloc()和free()函数。该程序主要使用了链表的插入、删除、查询。除了使用链表,还使用了文件的操
3、作。正 文1. 采用类c语言定义相关的数据类型struct building /*定义结构体*/char num10; /*楼号*/char address20; /*地址*/char total30; /*楼宇总数*/char E_dormitory50; /*空宿舍数*/char floor4; /*楼层数*/char D_total30; /*每层宿舍数*/char roomnum10; /*宿舍号*/char D_telephone20; /*宿舍电话*/char renshu10; /*宿舍容纳人数*/char member30; /*宿舍成员*/;typedef struct no
4、de /*线性单链表的存储结构*/struct building data;struct node *next;Node,*Link;2. 各模块的伪码算法1 链表的插入是根据某一关键字的顺序来进行插入操作的。要实现它,需要用三个指针,一个头指针、一个指向开辟新结点的指针,以及一个用来保存刚刚建立的结点的指针。该算法如下:void InsList(LinkList*head,int i,DataType e)/*在带头结点的单链表head的第i个结点之前插入值为e的新结点*/ Node*p,*q; int j; p=head-link;j=1; while(p!=NULL&jlink; j+;
5、 if(j!=i-1)/*p=NULL时,链表为空,不存在第i个结点;或者idata=e; /*将待插入结点的值e赋给q的数据域*/q-link=p-link; /*将第i个结点链接在新结点q之后*/p-link=q; /*将新结点连接在p之后,完成插入操作*/2 链表的删除是指从某个已经存在的链表中根据给定的条件删去若干结点的操作。删除操作的实现,实际上就是把某个结点从原链表中分离出来。也就是使被删除结点与原链表失去联系,从而改变原链表的连接关系。其算法如下:int DelList(LinkList*head,int i,DataType*e)/*在带头结点的单链表head中删除第i个元素,
6、并将删除元素保存到变量e中*/Node*p,*q; int j; p=head; j=0;while(p-link!=NULL&jlink; j=j+1; if(j!=i-1) printf(“删除结点的位置i不合理!”) return ERROR;q=p-link;p-link=q-link;free(q); /*释放被删除的结点所占的内存空间*/return OK;3链表的查找操作是指从某个已经存在的链表中根据给定的条件寻找符合条件的结点。其算法如下:Node* Locate(Link l,char findmess,char addressornum) /*查找子函数*/Node *r;
7、if(strcmp(addressornum,num)=0) /*与比较楼号相同*/ r=l-next; while(r!=NULL) /*不是尾结点*/ if(strcmp(r-data.num,findmess)=0) /*比较相同*/ return r; /*返回结点信息*/ r=r-next; /*查找下一个结点*/ else if(strcmp(addressornum,address)=0) /*与比较楼宇地址相同*/ r=l-next; while(r!=NULL) if(strcmp(r-data.address,findmess)=0) return r; r=r-next;
8、 return 0;主函数Main()Menu()Save()Add() Del()Qur()Modify()Disp()luyu()sushe()Tongji()Wrong()Wrong()printstart()Nofind()printc()printe() printb()printx()printd()printa()printy()printi()Locate()函数的调用关系图 3. 调试分析a、 调试中遇到的问题及对问题的解决方法由于在输入程序时中英文切换频繁,导致“;”输入错误,运行时出现不能识别字符。 源程序中含有文件调用(fp=fopen(C:building,wb);)
9、目前还不会将文件镜像到程序目录),因此每次启动程序需创建“C:building”,再运行一次,文件成功建立。当时直接就运行了,结果运行时无法成功创建,按上述说法改了一下便成功了。b、算法的时间复杂度和空间复杂度整个程序转为EXE可执行后整体的空间复杂度为196KB。链表的插入、删除、查找操作的时间复杂度都为O(n)。4. 测试结果(1)学生宿舍楼宇信息的输入(2)删除操作(按楼号删除)(3)查询学生宿舍楼宇信息(按楼号查询)(4)修改学生宿舍楼宇信息(5)显示管辖区域信息(6)显示公寓楼信息(7)保存公寓楼信息(8)显示公寓宿舍信息(9)统计学生宿舍楼宇信息5. 源程序(带注释)#includ
10、e stdio.h#include stdlib.h#include string.hint shoudsave=0;struct building /*定义结构体*/char num10; /*楼号*/char address20; /*地址*/char total30; /*楼宇总数*/char E_dormitory50; /*空宿舍数*/char floor4; /*楼层数*/char D_total30; /*每层宿舍数*/char roomnum10; /*宿舍号*/char D_telephone20; /*宿舍电话*/char renshu10; /*宿舍容纳人数*/char
11、member30; /*宿舍成员*/;typedef struct node /*线性单链表的存储结构*/struct building data;struct node *next;Node,*Link;void menu()printf(*);printf(t1输入学生宿舍楼宇信息 ttt2删除学生宿舍楼宇信息n);printf(t3查询学生宿舍楼宇信息 ttt4修改学生宿舍楼宇信息n);printf(t5显示管辖区域信息 ttt6显示公寓楼信息n);printf(t7保存公寓楼信息 ttt8显示公寓宿舍信息n);printf(t9统计学生宿舍楼宇信息 ttt10退出系统n);printf
12、(*n);void printstart() /*分隔线子函数*/printf(-n);void Wrong() /*错误信息子函数*/printf(n=提示:输入错误!n);void Nofind() /*信息查找失败子函数*/printf(n=提示:没有找到该公寓楼!n);void printc() /*管辖区域信息标题子函数*/printf(楼号t地址 t楼宇总数n);void printe(Node *p) /*管辖区域信息输出子函数*/printf(%st %st %stn,p-data.num,p-data.address,p-data.total);void printb()pr
13、intf(公寓楼信息:n); /*公寓楼信息子函数*/void printx() /*公寓楼信息标题子函数*/printf(楼号t 地址t 空宿舍数t 楼层数t 每层宿舍数 tn);void printd(Node *p) /*公寓楼信息输出子函数*/printf(%st %st %st %st %st n,p-data.num,p-data.address,p-data.E_dormitory,p-data.floor,p-data.D_total);void printa()printf(公寓宿舍信息:n); /*公寓宿舍信息子函数*/void printy() /*公寓宿舍信息标题子函数
14、*/printf(楼号t 地址t 宿舍号t 宿舍电话t 宿舍容纳人数t 宿舍成员 tn);void printi(Node*p) /*公寓宿舍信息输出子函数*/printf(%st %st %st %st %st %st n,p-data.num,p-data.address,p-data.roomnum,p-data.D_telephone,p-data.renshu,p-data.member);Node* Locate(Link l,char findmess,char addressornum) /*查找子函数*/Node *r;if(strcmp(addressornum,num)=
15、0) /*与比较楼号相同*/ r=l-next; while(r!=NULL) /*不是尾结点*/ if(strcmp(r-data.num,findmess)=0) /*比较相同*/ return r; /*返回结点信息*/ r=r-next; /*查找下一个结点*/ else if(strcmp(addressornum,address)=0) /*与比较楼宇地址相同*/ r=l-next; while(r!=NULL) if(strcmp(r-data.address,findmess)=0) return r; r=r-next; return 0;void Add(Link l) /
16、*学生宿舍楼宇信息输入子函数*/Node *p,*r,*s;char num10;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(); /*调用分隔线子函数*/
17、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(请您输入空宿舍数:)
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生宿舍 楼宇 房间 管理 系统
