收藏 分销(赏)

C语言.程序设计.客房管理系统源码和报告.doc

上传人:二*** 文档编号:4514633 上传时间:2024-09-26 格式:DOC 页数:17 大小:166KB 下载积分:5 金币
下载 相关 举报
C语言.程序设计.客房管理系统源码和报告.doc_第1页
第1页 / 共17页
本文档共17页,全文阅读请下载到手机保存,查看更方便
资源描述
可编辑版 《C语言程序设计》综合实验报告 一、 需求分析 编写一个客房管理系统,提供键盘式菜单实现功能选择,功能包括:用户登记、统计、查询和用户信息修改。 软件平台:CODEBLOCKS 二、整体设计 整个客房管理系统被设计为用户登记模块、统计模块、查询模块和修改模块。数据以TXT格式存储,支持保存信息。 三、 详细设计 客房管理系统 三 查询模块 二 统计模块 四 修改模块 一 登记模块 〔1用户登记模块 通过函数readfile读取txt文件信息到room数组,提示用户选择想要入住的房间号,判断是否已经被占用,若占用,重新选择房间号,若没有占用,提示输入登记信息,把数据存入Room数组中,通过savefile添加信息到txt。 调用readfile函数读取txt信息 读取用户输入的的房间号 判断房间是否被占用 是 否 提示用户输入登记信息 调用savefile函数存储登记信息 〔2统计模块 读取txt信息到结构体数组room,提示用户选择统计方式,设置计数器,顺序遍历Room数组, 1、 计数器记录数组数,即总客房数 2、 判断每一个数组中的结构体的时间是否和需要查询的日期相同,若相同,计数器加一 调用readfile函数,读取信息 选择统计方式 2、按时间统计 1、统计总客房数 〔3查询模块 读取信息 调用readfile函数,将信息读入room结构体数组中,提示用户选择查询方式,通过基本查找算法查找Room数组。可以按房间号、价格、房间标记、用户姓名、居民身份证查询。 选择统计方式 按价格查询 按身份证号查询 按姓名查询 按房间号查询 每一个查询函数内部结构如下: 遍历每一个结构体j 判断是否和要查询的信息相同 是 调用打印函数,打印j结构体信息 〔4修改模块 调用readfile函数,读取信息到room结构体数组,提示用户输入需要修改的房间号,采用基本查找算法在数组中找到要修改的数据,提示用户重新更改房间信息,最后将结构体数组重新写入文件保存。 调用readfile〔读取文件函数 输入需要查询的房间号 遍历每一个结构体j 判断是否是用户需要修改的房间号 修改结构体j 调用saveall函数,保存结构体数组 四、 源代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #define M 80 //客户结构体 typedef struct client { char name[12]; //姓名 int sex; //性别 int age; //年龄 char id[20]; //身份证号 int year; //入住时间 int month; int date; }CLIENT; //客房结构体 struct Hotel { int roomid; int tel; //用户的话 int price; //价格 int sign; //默认标记为空房间 CLIENT client_list; //客户信息 }room[M]; void Menu<>; //目录界面 void dengji<struct Hotel room[]>; void savefile<struct Hotel room[],int i>; int readfile<struct Hotel room[]>; void tongji<struct Hotel room[]>; void chaxun<struct Hotel room[]>; void printmessage<struct Hotel room[],int n>; void xiugai<struct Hotel room[]>; //主函数 int main<> { int n; char reply; Menu<>; do{ printf<"请输入选项对应的数字:\n">; scanf<"%d",&n>; while<n!=1&&n!=2&&n!=3&&n!=4> { printf<"请输入各选项对应的数字!\n">; scanf<"%d",&n>; } switch <n> { case 1: dengji<room>; break; case 2: tongji<room>; break; case 3: chaxun<room>; break; case 4: xiugai<room>; break; } printf<"是否还要进入其它选项?〔回复Y或y继续\n">; scanf<" %c",&reply>; }while <reply=='y'||reply=='Y'>; return 0; } //系统目录 void Menu<> { printf<"************************客房管理系统***************************\n">; printf< "\t\t\t 1————登记\n" >; printf< "\t\t\t 2————统计\n" >; printf< "\t\t\t 3————查询\n" >; printf< "\t\t\t 4————修改\n" >; printf<"***************************************************************\n">; } //登记客户信息 void dengji<struct Hotel room[]> { int x,j,i,flag; char answer; do { i=readfile<room>; do { flag=0; printf<"输入您想入住的房间号:〔三位数\n">; scanf<"%3d",&x>; for<j=0;j<i;j++> { if<room[j].roomid==x> { printf<"该房间已经被占用!\n">; flag=1; } } }while<flag>0>; room[i+1].roomid=x; printf<"请输入您的电话:<仅支持六位数号码~>\n">; scanf<"%d",&room[i+1].tel>; printf<"入住价格\n">; scanf<"%d",&room[i+1].price>; printf<"请输入您的名字\n">; scanf<"%s",room[i+1].client_list.name>; printf<"性别:〔1表示女,0表示男\n">; scanf<"%d",&room[i+1].client_list.sex>; printf<"您的年龄:\n">; scanf<"%d",&room[i+1].client_list.age>; printf<"您的id:\n">; scanf<"%s",room[i+1].client_list.id>; printf< "请输入入住年月日〔格式:2015 11 11\n">; scanf<"%4d%2d%2d",&room[i+1].client_list.year,&room[i+1].client_list.month,&room[i+1].client_list.date>; savefile<room,i+1>; printf<"是否还要继续登记?〔回复Y或y继续\n">; scanf<" %c",&answer>; }while<answer=='Y'||answer=='y'>; } //读取txt中的信息 int readfile<struct Hotel room[]> { FILE *fp; int i; if<<fp=fopen<"room.txt","r">>==NULL> { printf<"Failure to open score.txt!\n">; exit<0>; } for <i=0;!feof<fp>;i++> { fscanf<fp,"%5d",&room[i].roomid>; fscanf<fp,"%6d",&room[i].price>; fscanf<fp,"%15d",&room[i].tel>; fscanf<fp,"%12s",room[i].client_list.name>; fscanf<fp,"%4d",&room[i].client_list.sex>; fscanf<fp,"%6d",&room[i].client_list.age>; fscanf<fp,"%20s",room[i].client_list.id>; fscanf<fp,"%7d",&room[i].client_list.year>; fscanf<fp,"%5d",&room[i].client_list.month>; fscanf<fp,"%5d",&room[i].client_list.date>; } fclose<fp>; return i; } //保存结构体数组信息到文件 void savefile<struct Hotel room[],int i> { FILE *fp; if<<fp = fopen<"room.txt","a">>==NULL> { printf<"Failure to open score.txt!\n">; exit<0>; } fprintf<fp,"%5d%6d%15d%12s%4d%6d%20s%7d%5d%5d", room[i].roomid, room[i].price, room[i].tel, room[i].client_list.name, room[i].client_list.sex, room[i].client_list.age, room[i].client_list.id, room[i].client_list.year, room[i].client_list.month, room[i].client_list.date>; fclose<fp>; } //统计模块 void tongji<struct Hotel room[]> { int n,x; int year,month,day,j,count=0; x=readfile<room>; printf<"请选择统计方式:1>统计房客数,2>统计某一天的房客数\n">; scanf<"%d",&n>; switch <n> { case 1: printf<"客房总数为:%d\n",x>; break; case 2: printf<"请输入具体时间:\n">; scanf<"%d%d%d",&year,&month,&day>; for<j=0;j<x;j++> { if<room[j].client_list.year==year&&room[j].client_list.month==month&&room[j].client_list.date==day> { count++; } } printf<"%d年%d月%d号的房客数为%d",year,month,day,count>; } } //查询模块 void chaxun<struct Hotel room[]> { int n,x,roomid,price,j; char name[12],id[20]; x=readfile<room>; printf<"按房间号查询请按1;按价格查询请按2;按用户姓名查询请按3;按身份证号码查询请按4\n">; scanf<"%d",&n>; switch<n> { case 1: printf<"请输入房间号:\n">; scanf<"%d",&roomid>; for<j=0;j<x;j++> { if<room[j].roomid==roomid> { print<room,j>; } } break; case 2: printf<"请输入价格:\n">; scanf<"%d",&price>; for<j=0;j<x;j++> { if<room[j].price==price> { print<room,j>; } } break; case 3: printf<"请输入客户姓名:\n">; scanf<"%s",name>; for<j=0;j<x;j++> { if<strcmp<room[j].client_list.name,name>==0> { print<room,j>; } } break; case 4: printf<"请输入身份证号码:\n">; scanf<"%s",id>; for<j=0;j<x;j++> { if<strcmp<room[j].client_list.id,id>==0> { print<room,j>; } } } } //打印 void print<struct Hotel room[],int j> { printf<"%5d%6d%15d%12s%4d%6d%20s%7d%5d%5d\n", room[j].roomid, room[j].price, room[j].tel, room[j].client_list.name, room[j].client_list.sex, room[j].client_list.age, room[j].client_list.id, room[j].client_list.year, room[j].client_list.month, room[j].client_list.date>; } void printmessage<struct Hotel room[],int n> { int j; for<j=0;j<n;j++> { printf<"%5d%6d%15d%12s%4d%6d%20s%7d%5d%5d\n", room[j].roomid, room[j].price, room[j].tel, room[j].client_list.name, room[j].client_list.sex, room[j].client_list.age, room[j].client_list.id, room[j].client_list.year, room[j].client_list.month, room[j].client_list.date>; } } //修改模块 void xiugai<struct Hotel room[]> { int i, m, roomid; m = readfile<room>; printf<"请选择房间号:\n">; scanf<"%d",&roomid>; for<i=0;i<m;i++> { if<room[i].roomid==roomid> { printf<"请输入您的电话:\n">; scanf<"%d",&room[i].tel>; printf<"入住价格\n">; scanf<"%d",&room[i].price>; printf<"请输入您的名字\n">; scanf<"%s",room[i].client_list.name>; printf<"性别:\n">; scanf<"%d",&room[i].client_list.sex>; printf<"您的年龄:\n">; scanf<"%d",&room[i].client_list.age>; printf<"您的id:\n">; scanf<"%s",room[i].client_list.id>; printf< "请输入入住年月日〔格式:20150101">; scanf<"%4d%2d%2d",&room[i].client_list.year,&room[i].client_list.month,&room[i].client_list.date>; } } saveall<room,m>; } //保存所有信息到txt文件 void saveall<struct Hotel room[],int m> { int j; FILE *fp; if<<fp = fopen<"room.txt","w">>==NULL> { printf<"Failure to open score.txt!\n">; exit<0>; } for<j=0;j<m;j++> { fprintf<fp,"%5d%6d%15d%12s%4d%6d%20s%7d%5d%5d", room[j].roomid, room[j].price, room[j].tel, room[j].client_list.name, Room[j].client_list.sex, room[j].client_list.age, room[j].client_list.id, room[j].client_list.year, room[j].client_list.month, room[j].client_list.date>; } fclose<fp>; } 五、 调试与测试 主界面: 1、登记功能测试: 情况1:客户需要入住的房间号被占用,提示已经被占用,重新选择 情况2:选择的房间没有被占用,提示用户输入登记信息,登记完成后系统后台执行保存,弹出窗口询问是否继续登记下一个顾客 17 / 17 2、 统计功能测试: 情况1:选择统计客房总数,系统返回总客房数 情况2:选择按日期统计,系统返回具体某天的客房总数 3、 查询功能测试: 情况1:按房间号查询 情况2:按价格查询 情况3:按用户名查询 情况4:按身份证号查询 4、修改功能测试:输入需要修改的房间后,系统提示用户重新写入房间信息 六、 总结 本程序可通过键盘选择目录对应的功能,提供登记、查询、统计、修改四大功能。 优点:客户信息通过txt文件保存,在下次运行程序时仍然能读取保存的信息。 不足:功能尚不完善,没有添加退房功能;用户操作界面需要美化,提高可操作性;可以加入清屏功能,以便在用户在选择相关功能以后,不再显示菜单目录。 个人心得: 这是本学期第一次用C语言编写一个系统,实现比较完整的功能。 1、 遇到的部分问题: 程序不能将信息正确从txt文档中读取,出现乱码。 原因:读取函数和存储函数的读取/存储格式没有对应。 查询功能模块中按日期查询出现错误,只能正确读取最后一组数据的日期 原因:每组数据之间没有空格符号,导致前一组和后一组数据的日期和房间号牵连到一块,导致读取错误。更改读取和存储函数的格式。 1、 通过实践,体会到了需求分析和结构设计流程等编程准备工作的重要性:一个大的程序,不可能通过大脑的构思,一步就能完成,要想减少程序编写过程中遇到的思路错误,必须要在此之前构思好,清楚该实现什么功能,这个功能怎么实现,需要一些什么途径。 2、 分而治之、信息隐藏的思想对于大型程序来说尤为重要,不但能减少程序中重复的代码,还能使程序结构和功能更加清晰,可读性更强。 3、 关键地方要加以注释,以便日后能够读懂函数的程序的功能。
展开阅读全文

开通  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 

客服