酒店房间登记与计费管理系统《C语言课程设计》.doc
C语言程序设计课程设计报告 学 院: _专业班级: 学生姓名: 学 号: 设计地点(单位)_ 计算机自主学习中心 _ 设计题目:_ 酒店房间登记与计费管理系统设计 完成日期: 年月 日 指导教师评语:_ _ 成绩(五级记分制):_ 指导教师(签字):_ _ 摘要本次C语言课程设计我选择的设计任务是客房管理系统设计,这个管理系统是用C语言在VC 6.0 c+的编译器编译而成的。客房管理系统包括客户基本信息的录入、房间统计、用户个人费用及住房信息查询、自动结账、退出系统功能等。系统的开发主要由分析、查阅相关书籍和参考资料、程序设计、编写代码、运行实施、调试和测试、维护和修改等阶段组成,其中信息管理和自动运行为开发的重点。在程序设计中结构体的调用与各函数、数组的调用为编译的重点部分。关键词:结构体函数 数组课程设计任务书设计题目:酒店房间登记与计费管理系统设计学生姓名课程名称C语言程序设计课程设计专业班级计科地 点305/I306起止时间2012年1月日月13日设计内容及要求请你为XX酒店设计一个房间登记与计费管理系统。该系统中应包括所有房间的信息(房号、房型、基本描述、挂牌房价、入住状态)等,客人入住后应产生一条入住记录(基本信息包括:房号、客人姓名、客人证件类别、客人证件号、入住日期、押金情况),客人退房后要修正房间的入住状态并产生相应的账单。【题目要求】(1)屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,包括登记入住、查询房间的入住情况、查询当前费用、结账退房等操作。(2)对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在登记的入住的时候进行选择。 (3)在结账退房时,根据入住的时间,计费方式和房间单价计算出总费用。要求用C语言的文件操作语句将以上所有结果分别保存在文件中。 【输入输出要求】 ()应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。设计参数(1)系统分析、设计正确。()结果以图表方式显示。(3)界面简洁、美观。(4)报告格式规范。进度要求周一:明确设计任务,学习相关基础知识周二:熟悉各知识点,进行基础练习周三:根据题目要求,进行设计和实现周四:根据题目要求,进行设计和实现周五:撰写报告,进行答辩参考资料1何钦铭颜晖.C语言程序设计.高等教育出版社.2008年2谭浩强 张基温.语言程序设计教程.高等教育出版社.2006年其它难点提示:首先分析题目的数据结构,看看要操作那些值;然后根据题意设计操作对象的结构。可以使用结构体来描述其中较为复杂的对象例如往来帐目;确定结构体的定义;可以使用数组来保存数据,使用结构体数组来保存各类数据。说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师:伍建全雷亮/焦晓军陈应祖/杨治明 202年月1日目录1.软件需求说明书71需求分析1.2软件功能简介7.22查询房间入住情况71.2 查询当前费用71.4 结账退房71.3界面、数据结构要求7 系统分析与设计821软件界面设计82.1.首页欢迎界面82.1. 登记入住界面82.1.3 客户入住信息查询界面92.4 客户个人费用查询界面1.15客户退房结账界面102.16 客户结账收退支付费用结账界面12.1.7 用户退出系统界面1.2软件的数据(结构)设计122.3软件的算法设计1.31主要结构模块框图132.2主要流程图12. 具体模块使用结构流程3.软件的实现153.1 核心功能再现532关键代码分析13.2.intngi()313.2n ookfro()33.itlookfo_price()313intiang()34软件测试334.1函数简介34.2 测试用例341 viwelcome(); /首页欢迎界面3422 idenji()34.2.3 int lookforroom();/用来查询房间入住情况33424 it lokfor_ric();/用来查询当前费用34.2.5 n tuiang();/用来结账退房34.6 void yingifu();/用来结账付款3.2. nt qui();/退出函数35软件使用说明书3致谢37.参考文献7.1何钦铭颜晖.语言程序设计高等教育出版社.208年7.2谭浩强 张基温.语言程序设计教程.高等教育出版社.2006年387. l Kelley等语言解析教程,Al Kelley等,机械工业出版社,0061 软件需求说明书.需求分析随着时代的进步、科学的发展,对信息技术的要求也越来越高。而顾客对各大酒店和客房的要求也越来越高,酒店以前的全人工服务已经不能满足顾客和以及现代信息化时代的要求。顾客选择入住酒店时也会选择更加现代化和信息化的更加方便快捷的现代化服务酒店。所以现在各大酒店也都向着信息化和现代化的方向发展,引进更加先进和方便的酒店管理和服务系统。计算机的自动化管理系统提高了酒店管理的管理水平和工作效率,增强酒店的竞争能力降低成本,为客户提供更加优质的服务。所以需要开发一个计算机系统来代替人工管理酒店客户入住登记和信息查询等方面的工作。使用该系统可以使酒店的服务更加快捷、准确和方便,减少大量的人工操作,提高了工作效率。1.2软件功能简介1.1登记入住自动登记顾客的各人信息,包括顾客姓名、身份证件、证件号码、选择房间种类、计费方式、押金交付等功能。2 查询房间入住情况1.2查询当前费用1.4 结账退房1界面、数据结构要求屏幕上显示一个界面,界面要求简洁美观,让操作员能够根据具体的提示信息方便的选择所需要进行的操作。用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。2. 系统分析与设计2.1软件界面设计2.1 首页欢迎界面.1.2 登记入住界面2.13 客户入住信息查询界面.4 客户个人费用查询界面.1. 客户退房结账界面2.16 客户结账收退支付费用结账界面2.17 用户退出系统界面2.2软件的数据(结构)设计主要所用的结构体、函数和变量的数据类型ruc dt /定义结构体da,记录入住和结账时间 imn;/整形 int 格式控制符为% nt da; nt hr;;struct cosoem 定义结构体stem int um; /房间号 格式控制符为d ink; /房间种类 1-单人间 -双人间 arname20;/客户信息 /字符型 char 格式控制符为 haI19; /身份证号 in hmon; /按小时收费价格 in _one; /按天收费价格 格式控制符为d tt dae ie; /入住时间 time被说明为ta结构类型。成员名可与程序中其它变量同名,互不干扰。 it flag; /入住状态,fag: 0无人入住 1按小时入住 2按天入住 int depoi; 押金om;2.3软件的算法设计23.主要结构模块框图 酒店管理系统结账退房费用查询房间查询入住登记结账退房 2. 主要流程图.32 具体模块使用结构流程 信息查询入住登记顾客欢迎菜单输入个人信息结账退款按3种方式查询登记成功退出系统3.软件的实现3.1核心功能再现#inude<tdib.h>#inlue<stdio.h>#iclude<strn.incudeasserh#dee M 60/程序所有功能所用函数vid welome();/首页欢迎界面it dengji(); /用来登记入住 n lokfr_room();/用来查询房间入住情况int lookor_prce(); /用来查询当前费用 int uifng(); /用来结账退房 int find(); /用来查找入住人数 og _jifi(); /按小时计费 on d_ifei(); /按天计费 nt per_for(); /显示个人信息 oi inzhifu();/用来结账付款 ntqu(); /退出函数 strctdate /定义结构体date,记录入住和结账时间 in mo; intday; in hur;; structcose /定义结构体costom intnum;/房间号 n kid; /房间种类 1-单人间2-双人间 har nm20;客户信息 ca ID19;/身份证号 nt h_mone; /按小时收费价格 intone; /按天收费价格 structdt ie;/入住时间 nt fla;/入住状态,lag:0无人入住 按小时入住 2按天入住 ntdeps; /押金room;*个人信息函数*/ n r_infr(nt) ar zhonglei0,ngs30; sc(room.flag)/选择计费方式 ca1:trcpy(fagshi,按小时计费");brak; ase :strcy(fanshi,"按天计费");eak; dfut:brek;/输入与原定比较不符合跳出循环 switc(rok.kid) /选择房间种类 ca1:srpy(zhogli, 单人间");bek; ase 2:tcy(zhlei,"双人间");bea; printf("ntt-姓名: "); uts(rom.nam);pntf("nn"); prnt(tt身份证号: "); uts(romkI);rintf("n"); print(tt-房间种类: ");pus(znei);pritf("nn); rntf(t-房间号: "); print("%d",k+1);prntf("n"); ritf("tt-计费方式: "); puts(nshi);printf("n"); prntf("t-押金: "); rintf(%元",oomk.depost);printf("nn"); rintf("tt 入住时间: "); rntf(201年d月%d日%时n,rotime.mo,ookim.d,roomk.tm.our); rtun(0); /查询入住人数函数*/t () nt count=,i; /查询房间数 for(i=;iM;i+) if(ro.fg!=0) out+; etuncout; /*按天计费*log d_jfei(strut d nd,truct date srt,imoney) long feng; it ,b; a=end.our-start.hu; /计算小时 b=end.day-stat.ay; /计算天数 if(>=10) iyong=(b1)*one;/如果小时数大于10,则算为一天 ele if(a>=0) fiyo=bmoey;/如果小时数大于而小于10,则不计算小时 ese a=a+24; /如果小时数小于0,则小时数加4,天数减一,按天数计费重新计算 b=b-1; f(a10) feyong=(b+)*oey; else feiyog=bmn; ur feiyon; 返回费用值 *按小时计费* lnghjifei(suctdateed,struc date at,int money) lng eiyong; int a,b; a=endhour-stahou; /计算小时 =end.da-tatda; / 计算天数 f(a<0) a=a24;/如果小时数小于0,则小时数加24,天数减一,按小时计费重新计算 b=b-1; feyog=(a+b*4)oy; retun iyong; /返回费用值 *结账时所有开销收费*/ void yinzhf(lon on,intp) og dif(long)dep-ney; if(df=0) prtf("押金余总费用相等");/判断应支付是否大于押金金额 else f(f) pint("酒店应找还顾客%d元",dif);/押金金额大于应支付 ese pritf("顾客应再支付%ld元",if*(-);/押金金额小于应支付 *退出函数,返回欢迎主菜单页面函数* int ui() int z; rnt("您需要返回欢迎界面吗?1-是2否nn"); scan(%d,z); if(z=)/ 返回欢迎界面 welcoe(); ele pintf("* 谢谢您的惠顾,欢迎您下次光临!*!nn"); exi(0); *欢迎主菜单页面*/vdwelome() intnfind(); int i,j; rintf("&&&&&&&&&&&&&&&&&&&&#&&&&&&&&&&&&&&&&&&&&"); pintf("t-欢迎来到*酒店-n"); printf("ttt . 登记入住nn");nf("tt 2. 查询房间入住情况 nn"); printf("ttt .查询当前费用 nn"); prin(ttt 4 结账退房nn); print("tt 5.退出系统nn"); prit("t总房间数: d t入住人数: d t空房间数: %d",M,n,M-n); prinf(nn&&&&&&&&&&&&&&&&&&&#&&&&&&&&&&&&&&&&&nn"); prinf("ttt 请选择您所需的服务:"); scan("%d",&); itch()/控制选择项目 cae :j=dengji();break;/进入相应操作目录 case :j=looko_rom();brea; cse :=lforpric();eak; ce 4:j=uifag();bre; faul:rntf(" 欢迎您下次光临nn");输入错误退出 exit(); hil(j!) wloe(); /进入欢迎菜单主界面 snf("%d",&); sich(i) ase 1:=gji();break; as :j=lokoro();bk; cas 3:=okfr_pric();beak; ase4:j=tuifang();ba; default:pintf("n* 欢迎您下次光临 *nn"); ext(0); /*顾客登记入住函数*/ nt dengji() inti,j,k,yain,s,a,n; ar ch,ai; prtf(nn# 登记入住#n"); if(d()=M) /入住人数与房间总数相等 rntf(当前房间已满,是否返回(Y/N): ); ch=tchar(); if(ch') retur(1); /返回主菜单 ee eit(0); printf("请选择房间类型:n"); pitf(.单人间 2.双人间nn"); sanf("",&); ritf(可供您选择的房间有: nn"); fo(=0*(-1)1,j;i<30*+1;i+)/单人间的入住人数,剩余房间数 f(roo-1.flg=0) printf("t",i); j=j1; f(50)prin(n"); pntf("请输入您准备入住的房间号: "); /房间号rom-1 scanf(%",&k); roomk-.kind=n; rook-1.um=; pritf("nn请选择您的计费方式:(1.按小时收费为%d元时-2.按天计费为d元/天)t,roomk.h_mone,oo-1.money); sanf("%d",&s); whle(s!=1&&s!) pintf("输入有误,请重新输入: "); caf(%d,&); if(s=) ok-1.lag1; else rook-1.flag=2; rif(n请输入您的姓名: "); scanf("s",oom1nam); ri("n请输入您的身份证号:"); scan(%s",rook-.I); witch(n) case :yan=80;brk; cas 2:yajin=00;reak; printf("nn您应当缴纳的押金金额为d元",yajin); print("n请输入您实际缴纳的押金金额: "); sn(",&room-1.depoit); while(roomk-1.dposi<0) prt(tn! 输入有误,请重新输入 !n"); pintf("nn请输入您实际缴纳的押金金额: ); snf("%d,&rook-1deposit); rnf("请输入是否入住(.是 2否): "); scanf("%d",&a); le(a!=&&a!2) printf("nn 输入有误,请重新输入: ); canf("%d,a); if(a=1) pint(请输入您的入住时间(分别输入月*日*时): "); scaf("%d月",&romk1.tie.mon); scanf(%d日,&roomk1.me.ay); scanf("d时,&romk1.time.ur); witch(rok-1ag) cse 1:stcpy(gsi,"按小时计费");rea; ca 2:srcpy(fangs,"按天计费");rak; efaul:break; pritf("n您选择的计费方式为-%s",fnshi); prinf("nn您已成功登记!nn); qut(); etun(0); /顾客查询房间入住情况函数*/ int oofr_roo() in i,j,k,s; rc atetm_t; char a20; rinf("n 查询房间入住 nn"); printf("tt. 按房号查询nntt. 按客户信息查询nntt. 按入住时间查询nnt4. 退出"); printf("n请选择: "); scanf("%d",&i); wie(1) i(i>5|i<) prntf("nt 输入有误,请重新输入: "); sanf("d",&i); els if(i=1)/按顾客所住房号查询 prinf("nn请输入房间号: "); s("d",&); if(oomj1.fla=)printf(nn此房间无人住n"); lse printf("您的个人信息为: "); pr_r(j-); rak; l (i=2)/按顾客个人信息查询 pintf("nn请输入您的身份证号:"); scanf(%s",a); hie(1) r(0;<M;k+) f(strmp(a,romk.ID)=0)break; /比较输入与登记的客户信息 if(k!=M) pritf("您的个人信息为:"); per_infor();break; els intf(tn1. 输入有误,请重新输入2.不存在此人信息,退出 nn"); canf("%d",s); f(s=1) ntf("n请输入您的身份证号: "); sanf("%,a); else reur(1); break; else i(i=3)/ 按顾客入住时的日期时间查询 prinf("nn请输入入住时间: ); scanf(%d月",&tim_t.mon); caf("%d日",tim_tday); fr(k=;k<M;k+) (tm.monromk.time.mo&im_t.dy=room.tie.day)brk; f(k=M) pritf("n此时间无入住登记n"); ele inf("您的个人信息为: ); r_infr(); pintf("nn"); reak; es if(i=)rk; else pitf("ttnn1 输入有误,请重新输入nn"); prn("t1. 按房号查询nntt2. 按客户信息查询nntt3. 按入住时间查询nntt4. 退出"); printf("nn请选择: ); scaf(%",&i); qut(); return(0);/*顾客查询到目前为止所消费的费用/ ntlookorprce() in i,s; strut dte end; ritf(n$查询您当前消费费用$nn); f(fnd()=0) rintf("当前客房全部为空房,没有数据可以查询!nn); lse prntf("请输入您的房间号码: "); sanf("%",i); whle(1) if(omi-1.flg=