收藏 分销(赏)

C专业课程设计住宿系统.doc

上传人:a199****6536 文档编号:2864542 上传时间:2024-06-07 格式:DOC 页数:53 大小:214.04KB 下载积分:14 金币
下载 相关 举报
C专业课程设计住宿系统.doc_第1页
第1页 / 共53页
C专业课程设计住宿系统.doc_第2页
第2页 / 共53页


点击查看更多>>
资源描述
华中科技大学计算机科学和技术学院 《C语言程序设计》课程设计 试验汇报 题目: 宾馆住宿信息管理系统 宾馆管理住宿系统 一试验目标: 1、深入掌握和利用C语言进行程设计能力; 2、 深入了解和利用结构化程设计思想和方法; 3、 初步掌握开发一个小型实用系统基础方法; 4、 学会调试一个较长程序基础方法; 5、 学会利用步骤图或N-S图表示算法; 6、 掌握书写程设计开发文档能力(书写课程设计汇报); 二试验要求: 1、只能使用C语言,源程序要有合适注释,使程序轻易阅读。 2、要有用户界面。要求最少采取简易菜单;激励采取文本菜单界面甚至采取图形菜单界面。 3、必需使用结构和十字交叉链表等数据结构。 4、使用文件保留数据。 5、最少输出一份报表(屏幕输出即可),激励自行增加新功效。 功效要求(宾馆住宿信息管理系统): 对宾馆全部客房住宿信息进行管理,关键包含客房基础信息、用户住宿信息。 包含功效:客房基础信息录入。许可对已经录入数据重新进行编辑、修改,多种基础数据插入、删除,基于多种数据查询、统计计算。 宾馆住宿信息其它方面统计(自行确定)。 三试验内容: 程序概况 本程序采取文本菜单界面,程序数据结构采取三个方向十字链表来处理。含有对客房基础信息,用户信息新建、修改、插入、删除、查找、查看、统计、保留、载入等功效。程序虽简单,但含有完整功效。 程序模块示意图 1) 主程序步骤图开始 功效选择菜单 判定选择 保留数据 结束 新建 插入 修改 删除 保留 统计 查找 浏览 载入 获取按键 2)关键数据结构图 程序数据结构采取三个方向十字链表来处理。 程序具体介绍 关键数据结构: typedef struct kehuxinxi{ char name[20];/*用户姓名*/ char id[20];/*用户ID*/ char sex; /*性别*/ char telephone[20];/*电话*/ char room[10];/*房间号*/ char time[12];/*入住时间*/ float yingshou;/*应付费用*/ float shishou;/*实际费用*/ char shouyinyuan[20];/*收银员*/ struct kehuxinxi * next; }kehu,* Pkehu; 用户信息包含用户姓名,ID,性别,房间号,入住时间,应付费用,实际费用,收银员资料。 typedef struct kefangxinxi{ char num[10];/*房间号*/ char zhonglei;/*类别*/ int times;/*入住次数*/ float jiage;/*价格*/ struct kefangxinxi * next; Pkehu Record; }fangjian,* Pfangjian; 客房信息里包含房间号,房间类别,入住次数,房间价格资料。 typedef struct kefangzhonglei{ char zhonglei;/*类别*/ 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 jiyushijian(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(FILE * pf,Pfangjian room); 写入客房信息 int xierukehuxinxi(FILE * pf,Pkehu custom); 写入用户信息 int huodenkefang(Pfangjianzhonglei sub_tree,int num_room); 获取num_room个房间 int xiugaikehuxinxi(Pkehu pCu); 修改用户信息 int xiugaikefangxinxi(Pfangjian pRF); 修改房间信息 int Collect(int (* Comp)(void *,void *),int num); 根据Comp规则搜集前num个信息 int 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); 搜索一个类型客房种类 int sousuokefangxinxi(Pfangjianzhonglei pRST); 搜索一个客房 int sousuokehu(Pfangjianzhonglei 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); 删除用户信息 int xiugaikefangzhonglei(Pfangjianzhonglei pRST);/ 修改客房种类 int xiugaikehu(Pfangjianzhonglei pRST); 修改用户信息 int huodekefangxinxi(Pfangjian pRF); 取得客房信息 /*Qsort*/ void Qsort(void * * array,int low,int high,int (*Comp)(void * ,void * )); 快速排序法排序 四运行结果 1开始功效选择菜单 2新建功效界面 3插入功效界面 4修改功效界面 5删除功效界面 6查找功效界面 7查看功效界面 具体设计:(源程序清单见附录): 五心得体会 经过这次实训,增加了我学习软件技术爱好,即使在编写修改代码工程中花费了不少时间甚至有放弃想法,但最终看到程序运行,那种喜悦兴奋之情无法用文字描述。 1. 编写课程设计是理论结合实际一次很好结合,即使写得作业仅仅只能当做一项作业没有实际使用价值,但还是从中学到了不少,真正地体会到完成一项任务艰辛和付出以后收获愉快。 2. 编写程序时应该使程序易于了解尽可能使用通用变量名和通俗注释。 3. 即使很多东西刚开始时全部不懂,但只要坚持下去学,慢慢地就会熟悉。 4. 程序应该分多个文件装,要有条理性。 5. 写程序运行时会出现很多bug,要耐心调试,编程需要耐心和细心。把程序完整地调试好后,对自己性格培养也是一个提升。 6. 当自己处理不了时要向她人请教,虚心学习她人方法。这次完成作业向同学们请教了很多问题,得到了同学帮助,在此真心地表示感谢。 参考文件 《Turbo C 使用大全》第一册、第二册 徐金梧等编译 北京科海培训中心 《C语言课程设计》 曹计昌 卢萍 李开 编著 《C程序设计》谭浩强 著 附录 源程序清单 #ifndef DEF #define DEF #define BUFSIZE 20 #define MAX_ROOM 100 #define TEXT_CY 20 #include<math.h> #include<stdio.h> #include<dos.h> #include<conio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define NAME 20 #define MAX_ID 20 #define NUM 10 #define TELE 20 #define TIME 12 typedef struct kehuxinxi{ char name[20];/*用户姓名*/ char id[20];/*用户ID*/ char sex; /*性别*/ char telephone[20];/*电话*/ char room[10];/*房间号*/ char time[12];/*入住时间*/ float yingshou;/*应付费用*/ float shishou;/*实际费用*/ char shouyinyuan[20];/*收银员*/ struct kehuxinxi * next; }kehu,* Pkehu; typedef struct kefangxinxi{ char num[10];/*房间号*/ char zhonglei;/*类别*/ int times;/*入住次数*/ float jiage;/*价格*/ struct kefangxinxi * next; Pkehu Record; }fangjian,* Pfangjian; typedef struct kefangzhonglei{ char zhonglei;/*类别*/ int shuliang;/*房间数*/ Pfangjian first; struct kefangzhonglei * next; }fangjianzhonglei ,* Pfangjianzhonglei; typedef struct{ fangjian ** Buffer; int Bufsize;/*缓冲区大小*/ }Buf; typedef struct{ int left; int top; int right; int bottom; }Rect;/*矩形区域,一个好东西*/ /*Guide*/ 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(FILE * 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 huodenkefang(Pfangjianzhonglei sub_tree,int num_room);/*获取num_room个房间*/ int xiugaikehuxinxi(Pkehu pCu);/*修改用户信息*/ int xiugaikefangxinxi(Pfangjian pRF);/*修改房间信息*/ int Collect(int (* Comp)(void *,void *),int num);/*根据Comp规则搜集前num个信息*/ int 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);/*搜索一个类型*/ int sousuokefangxinxi(Pfangjianzhonglei pRST);/*搜一个房间*/ int sousuokehu(Pfangjianzhonglei 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); int xiugaikefangzhonglei(Pfangjianzhonglei pRST);/*修改*/ int xiugaikehu(Pfangjianzhonglei pRST); int huodekefangxinxi(Pfangjian pRF); int Buf_Clear(void); int Buf_Fill_Tree(Pfangjianzhonglei pRST_temp); /*Qsort*/ void Qsort(void * * array,int low,int high,int (*Comp)(void * ,void * )); /*快速排序法排序,基于比较*/ Buf Buf_Room; /*调试信息*/ #define DEBUG #define DEBUG2 #define DEBUG3(x) DEBUG #endif int 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.Buffer[Buf_Room.Bufsize++]=pRoom; return 0; } int huodekefangzhonglei(FILE * pf,Pfangjianzhonglei sub_tree) { if(!feof(pf)) fread(sub_tree,sizeof(fangjianzhonglei),1,pf); if(!feof(pf)) return 1; else return 0; } int huodekefang(FILE * pf,Pfangjian room) { if(!feof(pf)) fread(room,sizeof(fangjian),1,pf); if(!feof(pf)) return 1; else return 0; } int huodekehu(FILE * pf,Pkehu custom) { if(!feof(pf)) fread(custom,sizeof(custom),1,pf); if(!feof(pf)) return 1; else return 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) { return 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",&num); 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 20 int tianjiakefang(Pfangjianzhonglei pRST) { const char * szRoom="What is the type?"; char Buf[BUFSIZE]; int num,i; Pfangjianzhonglei pRST2; Pfangjian pRF; Buf[0]='\0'; printf("%s",szRoom); scanf("%d",&num); for(i=1,pRST2=pRST;i<num&&pRST2;pRST2=pRST2->next,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 220 int tianjiakehu(Pfangjianzhonglei pRST) { const char * szTree="What is the type?"; const char * szRoom="Which room"; const char * szName="The name"; char Room[BUFSIZE]; int type,i; Pfangjianzhonglei pRST2; Pfangjian pRF; 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++) ; if(!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 * szTree="Which type?"; const char * szError="Can't find the Type"; char Buf[BUFSIZE]; int type; Buf[0]='\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 char * szTree="Which type?"; const char * szRoom="Please input the doorplate"; const char * szError[]={"Can't find the Type", "Can't find the Room"}; char Buf2[BUFSIZE]; 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(pRF){ if(!strcmp(pRF->num,Buf2)){ zhanxiankefang(pRF); return 1; }/*if*/ pRF=pRF->next; }/*while*/ printf("%s\n",szError[1]); return 0; }/*if*/ pRST=pRST->next; }/*while*/ printf("%s\n",szError[0]); getch(); return 0; } int sousuokehu(Pfangjianzhonglei pRST) { const char * szName="The name?"; const char * szError="Can't find the one"; char Buf[BUFSIZE]; Pfangjian pRF; Pkehu pCu; Buf[0]='\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(Pfangjianzhonglei * pRST) { const char * szTree="Which type?"; const char * szError="Can't find the Type"; char Buf[BUFSIZE]; Pfangjianzhonglei pRST2,pRST3; int type; Buf[0]='\0'; printf("%s",szTree); scanf("%d",&type); pRST2=(*pRST); if(pRST2->zhonglei==type+'0'){ (*pRST)=pRST2->next; free(pRST2); return 0; }/*改变头指针*/ pRST3=pRST2->next; while(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[]={"Can't find the Type", "Can't find the Room"}; char Buf[BUFSIZE]; Pfangjian pRF,pRF2; Pfangjianzhonglei pRST; int type; pRST=(*pRST_head); Buf[0]='\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=pRF; 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",szError[1]); return 0; }/*if*/ pRST=pRST->next; }/*while*/ printf("%s",szError[0]); getch(); return 0; } int shanchukehu(Pfangjianzhonglei * pRST_head) { const char * szName="The name?"; const char * szError="Can't find the one"; char Buf[BUFSIZE]; Pfangjian pRF; Pkehu pCu,pCu2; Pfangjianzhonglei pRST; pRST=(*pRST_head); Buf[0]='\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; pCu=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[]={"Can't find the Type", "Can't find the Room"}; char Buf[BUFSIZE]; Pfangjian pRF; int type; Buf[0]='\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*
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服