1、华中科技大学计算机科学和技术学院C语言程序设计课程设计试验汇报题目: 宾馆住宿信息管理系统 宾馆管理住宿系统一试验目标:1、深入掌握和利用C语言进行程设计能力; 2、 深入了解和利用结构化程设计思想和方法; 3、 初步掌握开发一个小型实用系统基础方法; 4、 学会调试一个较长程序基础方法; 5、 学会利用步骤图或N-S图表示算法; 6、 掌握书写程设计开发文档能力(书写课程设计汇报);二试验要求:1、只能使用C语言,源程序要有合适注释,使程序轻易阅读。2、要有用户界面。要求最少采取简易菜单;激励采取文本菜单界面甚至采取图形菜单界面。3、必需使用结构和十字交叉链表等数据结构。4、使用文件保留数据
2、。5、最少输出一份报表(屏幕输出即可),激励自行增加新功效。功效要求(宾馆住宿信息管理系统): 对宾馆全部客房住宿信息进行管理,关键包含客房基础信息、用户住宿信息。包含功效:客房基础信息录入。许可对已经录入数据重新进行编辑、修改,多种基础数据插入、删除,基于多种数据查询、统计计算。宾馆住宿信息其它方面统计(自行确定)。三试验内容:程序概况本程序采取文本菜单界面,程序数据结构采取三个方向十字链表来处理。含有对客房基础信息,用户信息新建、修改、插入、删除、查找、查看、统计、保留、载入等功效。程序虽简单,但含有完整功效。程序模块示意图1) 主程序步骤图开始功效选择菜单判定选择保留数据结束新建插入 修
3、改删除保留统计查找浏览载入获取按键2)关键数据结构图程序数据结构采取三个方向十字链表来处理。程序具体介绍关键数据结构:typedef struct kehuxinxi char name20;/*用户姓名*/ char id20;/*用户ID*/ char sex;/*性别*/ char telephone20;/*电话*/char room10;/*房间号*/char time12;/*入住时间*/float yingshou;/*应付费用*/float shishou;/*实际费用*/char shouyinyuan20;/*收银员*/struct kehuxinxi * next; ke
4、hu,* Pkehu;用户信息包含用户姓名,ID,性别,房间号,入住时间,应付费用,实际费用,收银员资料。typedef struct kefangxinxi char num10;/*房间号*/ char zhonglei;/*类别*/ int times;/*入住次数*/ float jiage;/*价格*/ struct kefangxinxi * next; Pkehu Record; fangjian,* Pfangjian; 客房信息里包含房间号,房间类别,入住次数,房间价格资料。 typedef struct kefangzhonglei char zhonglei;/*类别*/
5、 int shuliang;/*房间数*/ Pfangjian first; struct kefangzhonglei * next; fangjianzhonglei ,* Pfangjianzhonglei;房间种类包含房间类别和房间数目资料。各函数功效介绍(为方便阅读了解程序,函数名用汉语拼音替换)int xiangdaohejiemian(int function,Pfangjianzhonglei * pRST);绘制功效选择界面int Collect(int (* Comp)(void *,void *),int num);根据Comp规则搜集前num个信息int jiyushi
6、jian(void *,void *);根据次数规则int jiyujiage(void *,void *);根据价格规则int huodecaidan(char * * szTitles,int num);获取菜单int huodekefangzhonglei(FILE * pf,Pfangjianzhonglei sub_tree);获取一整个类型,客房种类int huodekefang(FILE * pf,Pfangjian room);获取一个房间信息int huodekehu(FILE * pf,Pkehu custom);获取一个用户信息int xierukefangxinxi(F
7、ILE * pf,Pfangjian room);写入客房信息int xierukehuxinxi(FILE * pf,Pkehu custom);写入用户信息int huodenkefang(Pfangjianzhonglei sub_tree,int num_room);获取num_room个房间intxiugaikehuxinxi(Pkehu pCu);修改用户信息int xiugaikefangxinxi(Pfangjian pRF);修改房间信息int Collect(int (* Comp)(void *,void *),int num);根据Comp规则搜集前num个信息int
8、jiyushijian(void *,void *);根据次数规则int jiyujiage(void *,void *);根据价格规则int Display(void);int Get_Info(char * * szTitles,char * * buffer,int num);int zhanxiankehu(Pkehu pCu);int zhanxiankefang(Pfangjian pRF);显示客房用户信息int huodekehuxinxi(Pkehu pCu);获取用户信息int sousuokefangzhonglei(Pfangjianzhonglei pRST);搜索一
9、个类型客房种类int sousuokefangxinxi(Pfangjianzhonglei pRST);搜索一个客房int sousuokehu(Pfangjianzhonglei pRST);搜索一个用户int tianjiazhonglei(Pfangjianzhonglei pRST);插入客房种类int tianjiakefang(Pfangjianzhonglei pRST);插入一个客房int tianjiakehu(Pfangjianzhonglei pRST);插入一个用户int shanchuzhonglei(Pfangjianzhonglei * pRST);删除客房种类
10、int shanchukefang(Pfangjianzhonglei * pRST);删除客房信息int shanchukehu(Pfangjianzhonglei * pRST);删除用户信息int xiugaikefangzhonglei(Pfangjianzhonglei pRST);/修改客房种类int xiugaikehu(Pfangjianzhonglei pRST);修改用户信息int huodekefangxinxi(Pfangjian pRF);取得客房信息/*Qsort*/void Qsort(void * * array,int low,int high,int (*C
11、omp)(void * ,void * );快速排序法排序四运行结果1开始功效选择菜单2新建功效界面3插入功效界面4修改功效界面5删除功效界面6查找功效界面7查看功效界面具体设计:(源程序清单见附录):五心得体会 经过这次实训,增加了我学习软件技术爱好,即使在编写修改代码工程中花费了不少时间甚至有放弃想法,但最终看到程序运行,那种喜悦兴奋之情无法用文字描述。1. 编写课程设计是理论结合实际一次很好结合,即使写得作业仅仅只能当做一项作业没有实际使用价值,但还是从中学到了不少,真正地体会到完成一项任务艰辛和付出以后收获愉快。2. 编写程序时应该使程序易于了解尽可能使用通用变量名和通俗注释。3. 即
12、使很多东西刚开始时全部不懂,但只要坚持下去学,慢慢地就会熟悉。4. 程序应该分多个文件装,要有条理性。5. 写程序运行时会出现很多bug,要耐心调试,编程需要耐心和细心。把程序完整地调试好后,对自己性格培养也是一个提升。6. 当自己处理不了时要向她人请教,虚心学习她人方法。这次完成作业向同学们请教了很多问题,得到了同学帮助,在此真心地表示感谢。参考文件Turbo C 使用大全第一册、第二册 徐金梧等编译 北京科海培训中心C语言课程设计 曹计昌 卢萍 李开 编著C程序设计谭浩强 著附录源程序清单#ifndef DEF#define DEF#define BUFSIZE 20#define MAX
13、_ROOM 100#define TEXT_CY 20#include#include#include#include#include#include#include#define TRUE 1#define FALSE 0#define NAME 20#define MAX_ID 20#define NUM 10#define TELE 20#define TIME 12typedef struct kehuxinxi char name20;/*用户姓名*/ char id20;/*用户ID*/ char sex;/*性别*/ char telephone20;/*电话*/char roo
14、m10;/*房间号*/char time12;/*入住时间*/float yingshou;/*应付费用*/float shishou;/*实际费用*/char shouyinyuan20;/*收银员*/struct kehuxinxi * next; kehu,* Pkehu;typedef struct kefangxinxi char num10;/*房间号*/ char zhonglei;/*类别*/ int times;/*入住次数*/ float jiage;/*价格*/ struct kefangxinxi * next; Pkehu Record; fangjian,* Pfa
15、ngjian; typedef struct kefangzhonglei char zhonglei;/*类别*/ int shuliang;/*房间数*/ Pfangjian first; struct kefangzhonglei * next; fangjianzhonglei ,* Pfangjianzhonglei;typedef structfangjian * Buffer;int Bufsize;/*缓冲区大小*/Buf;typedef structint left;int top;int right;int bottom;Rect;/*矩形区域,一个好东西*/*Guide*
16、/int xiangdaohejiemian(int function,Pfangjianzhonglei * pRST);/*tools*/int Collect(int (* Comp)(void *,void *),int num);/*根据Comp规则搜集前num个信息*/int jiyushijian(void *,void *);/*根据次数规则*/int jiyujiage(void *,void *);/*根据价格规则*/int huodecaidan(char * * szTitles,int num);/*fun_fun*/int huodekefangzhonglei(F
17、ILE * pf,Pfangjianzhonglei sub_tree);/*获取一整个类型*/int huodekefang(FILE * pf,Pfangjian room);/*获取一个房间*/int huodekehu(FILE * pf,Pkehu custom);/*获取一个用户*/int xierukefang(FILE * pf,Pfangjianzhonglei sub_tree);int xierukefangxinxi(FILE * pf,Pfangjian room);int xierukehuxinxi(FILE * pf,Pkehu custom);int huod
18、enkefang(Pfangjianzhonglei sub_tree,int num_room);/*获取num_room个房间*/intxiugaikehuxinxi(Pkehu pCu);/*修改用户信息*/int xiugaikefangxinxi(Pfangjian pRF);/*修改房间信息*/int Collect(int (* Comp)(void *,void *),int num);/*根据Comp规则搜集前num个信息*/int jiyushijian(void *,void *);/*根据次数规则*/int jiyujiage(void *,void *);/*根据价格
19、规则*/int Display(void);int Get_Info(char * * szTitles,char * * buffer,int num);int zhanxiankehu(Pkehu pCu);int zhanxiankefang(Pfangjian pRF);int huodekehuxinxi(Pkehu pCu);int sousuokefangzhonglei(Pfangjianzhonglei pRST);/*搜索一个类型*/int sousuokefangxinxi(Pfangjianzhonglei pRST);/*搜一个房间*/int sousuokehu(P
20、fangjianzhonglei pRST);/*搜一个用户*/int tianjiazhonglei(Pfangjianzhonglei pRST);/*插入*/int tianjiakefang(Pfangjianzhonglei pRST);int tianjiakehu(Pfangjianzhonglei pRST);int shanchuzhonglei(Pfangjianzhonglei * pRST);/*删除*/int shanchukefang(Pfangjianzhonglei * pRST);int shanchukehu(Pfangjianzhonglei * pRST
21、);int xiugaikefangzhonglei(Pfangjianzhonglei pRST);/*修改*/int xiugaikehu(Pfangjianzhonglei pRST);int huodekefangxinxi(Pfangjian pRF);intBuf_Clear(void);intBuf_Fill_Tree(Pfangjianzhonglei pRST_temp);/*Qsort*/void Qsort(void * * array,int low,int high,int (*Comp)(void * ,void * );/*快速排序法排序,基于比较*/Buf Bu
22、f_Room;/*调试信息*/#define DEBUG #define DEBUG2 #define DEBUG3(x) DEBUG#endifint Buf_Clear(void)Buf_Room.Bufsize=0;return 0;int Buf_Fill_Tree(Pfangjianzhonglei pHead)Pfangjian pRoom;for(pRoom=pHead-first;pRoom;pRoom=pRoom-next)Buf_Room.BufferBuf_Room.Bufsize+=pRoom;return 0;int huodekefangzhonglei(FILE
23、* pf,Pfangjianzhonglei sub_tree)if(!feof(pf)fread(sub_tree,sizeof(fangjianzhonglei),1,pf);if(!feof(pf)return 1;elsereturn 0;int huodekefang(FILE * pf,Pfangjian room)if(!feof(pf)fread(room,sizeof(fangjian),1,pf);if(!feof(pf)return 1;elsereturn 0;int huodekehu(FILE * pf,Pkehu custom)if(!feof(pf)fread(
24、custom,sizeof(custom),1,pf);if(!feof(pf)return 1;elsereturn 0;int xierukefang(FILE * pf,Pfangjianzhonglei sub_tree)return fwrite(sub_tree,sizeof(fangjianzhonglei),1,pf);int xierukefangxinxi(FILE * pf,Pfangjian room)return fwrite(room,sizeof(fangjian),1,pf);int xierukehuxinxi(FILE * pf,Pkehu custom)r
25、eturn fwrite(custom,sizeof(kehu),1,pf);int tianjiazhonglei(Pfangjianzhonglei pRST)char * szTitles=How many Rooms?;int i,num;Pfangjianzhonglei pRST2;for(i=0;pRST;pRST=pRST-next,i+)pRST2=pRST;pRST2-next=(Pfangjianzhonglei)malloc(sizeof(fangjianzhonglei);pRST=pRST2-next;printf(%s,szTitles);scanf(%d,&nu
26、m);huodenkefang(pRST,num);pRST-zhonglei=i+0;pRST-next=NULL;return 0;#define IR_X 100#define IR_Y 100#define IR_CX 100#define IR_C 20int tianjiakefang(Pfangjianzhonglei pRST)const char * szRoom=What is the type?;char BufBUFSIZE;int num,i;Pfangjianzhonglei pRST2;PfangjianpRF;Buf0=0;printf(%s,szRoom);s
27、canf(%d,&num);for(i=1,pRST2=pRST;inext,i+);if(!pRST2)return 0;pRF=pRST2-first;pRST2-shuliang+;while(pRF-next)pRF=pRF-next;pRF-next=(Pfangjian)malloc(sizeof(fangjian);pRF=pRF-next;huodekefangxinxi(pRF);pRF-next=NULL;return 0;#define IC_Y 160#define IC_Y2 220int tianjiakehu(Pfangjianzhonglei pRST)cons
28、t char * szTree=What is the type?;const char * szRoom=Which room;const char * szName=The name;char RoomBUFSIZE;int type,i;Pfangjianzhonglei pRST2;PfangjianpRF;Pkehu pCu;printf(%s,szTree);scanf(%d,&type);printf(%s,szRoom);scanf(%s,Room);for(i=1,pRST2=pRST;pRST2-zhonglei!=type+0;pRST2=pRST2-next,i+);i
29、f(!pRST2)return 0;pRF=pRST2-first;while(!strcmp(pRF-num,Room)&pRF)pRF=pRF-next;if(!pRF)return 0;pCu=pRF-Record;while(pCu-next)pCu=pCu-next;pCu-next=(Pkehu)malloc(sizeof(kehu);pCu=pCu-next;pCu-next=NULL;pRF-times+;huodekehuxinxi(pCu);return 0;int sousuokefangzhonglei(Pfangjianzhonglei pRST)const char
30、 * szTree=Which type?;const char * szError=Cant find the Type;char BufBUFSIZE;int type;Buf0=0;printf(%s,szTree);scanf(%d,&type);while(pRST)if(pRST-zhonglei=type+0)Buf_Clear();Buf_Fill_Tree(pRST);Display();return 1;pRST=pRST-next;getch();return 0;int sousuokefangxinxi(Pfangjianzhonglei pRST)const cha
31、r * szTree=Which type?;const char * szRoom=Please input the doorplate;const char * szError=Cant find the Type,Cant find the Room;char Buf2BUFSIZE;int type,room;Pfangjian pRF;printf(%s,szTree);scanf(%d,&type);printf(%s,szRoom);scanf(%d,&room);while(pRST)if(pRST-zhonglei=type+0)pRF=pRST-first;while(pR
32、F)if(!strcmp(pRF-num,Buf2)zhanxiankefang(pRF);return 1;/*if*/pRF=pRF-next;/*while*/printf(%sn,szError1);return 0;/*if*/pRST=pRST-next;/*while*/printf(%sn,szError0);getch();return 0;int sousuokehu(Pfangjianzhonglei pRST)const char * szName=The name?;const char * szError=Cant find the one;char BufBUFS
33、IZE;Pfangjian pRF;Pkehu pCu;Buf0=0;printf(%s,szName);scanf(%s,Buf);while(pRST)pRF=pRST-first;while(pRF)pCu=pRF-Record;while(pCu)if(!strcmp(pCu-name,Buf)zhanxiankehu(pCu);return 0;else pCu=pCu-next;pRF=pRF-next;/*while*/pRST=pRST-next;/*while*/printf(%s,szName);getch();return 0;int shanchuzhonglei(Pf
34、angjianzhonglei * pRST)const char * szTree=Which type?;const char * szError=Cant find the Type;char BufBUFSIZE;Pfangjianzhonglei pRST2,pRST3;int type;Buf0=0;printf(%s,szTree);scanf(%d,&type);pRST2=(*pRST);if(pRST2-zhonglei=type+0)(*pRST)=pRST2-next;free(pRST2);return 0;/*改变头指针*/pRST3=pRST2-next;whil
35、e(pRST3)if(pRST3-zhonglei=type+0)pRST2-next=pRST3-next;free(pRST3);/*删去pRST3*/return 1;printf(%s,szError);getch();return 0;int shanchukefang(Pfangjianzhonglei * pRST_head)const char * szTree=Which type?;const char * szRoom=Please input the doorplate;const char * szError=Cant find the Type,Cant find
36、the Room;char BufBUFSIZE;Pfangjian pRF,pRF2;Pfangjianzhonglei pRST;int type;pRST=(*pRST_head);Buf0=0;printf(%s,szTree);scanf(%d,&type);printf(%s,szRoom);scanf(%s,Buf);while(pRST)if(pRST-zhonglei=type+0)pRF=pRST-first;if(!strcmp(pRF-num,Buf)pRST-first=pRF-next;pRST-shuliang-;free(pRF);return 0;pRF2=p
37、RF;pRF=pRF-next;while(pRF)if(!strcmp(pRF-num,Buf)pRF2-next=pRF-next;free(pRF);pRST-shuliang-;return 1;/*if*/pRF2=pRF;pRF=pRF-next;/*while*/printf(%s,szError1);return 0;/*if*/pRST=pRST-next;/*while*/printf(%s,szError0);getch();return 0;int shanchukehu(Pfangjianzhonglei * pRST_head)const char * szName
38、=The name?;const char * szError=Cant find the one;char BufBUFSIZE;Pfangjian pRF;Pkehu pCu,pCu2;Pfangjianzhonglei pRST;pRST=(*pRST_head);Buf0=0;printf(%s,szName);scanf(%s,Buf);while(pRST)pRF=pRST-first;while(pRF)pCu=pRF-Record;if(!strcmp(pCu-name,Buf)pRF-Record=pCu-next;free(pCu);return 0;pCu2=pCu;pC
39、u=pCu-next;while(pCu)if(!strcmp(pCu-name,Buf)pCu2-next=pCu-next;free(pCu);return 0;/*if*/pCu2=pCu;pCu=pCu-next;pRF=pRF-next;/*while*/pRST=pRST-next;/*while*/getch();return 0;int xiugaikefangzhonglei(Pfangjianzhonglei pRST)const char * szTree=Which type?;const char * szRoom=Please input the doorplate;const char * szError=Cant find the Type,Cant find the Room;char BufBUFSIZE;Pfangjian pRF;int type;Buf0=0;printf(%s,szTree);scanf(%d,&type);printf(%s,szRoom);scanf(%s,Buf);while(pRST)if(pRST-zhonglei=type+0)pRF=pRST-first;while(pRF)if(!strcmp(pRF-num,Buf)xiugaikefangxinxi(pRF);return 1;/*if*