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

上传人:b****8 文档编号:23883330 上传时间:2023-05-21 格式:DOCX 页数:26 大小:208.17KB
下载 相关 举报
C语言程序设计 客房管理系统源码和报告.docx_第1页
第1页 / 共26页
C语言程序设计 客房管理系统源码和报告.docx_第2页
第2页 / 共26页
C语言程序设计 客房管理系统源码和报告.docx_第3页
第3页 / 共26页
C语言程序设计 客房管理系统源码和报告.docx_第4页
第4页 / 共26页
C语言程序设计 客房管理系统源码和报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

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

《C语言程序设计 客房管理系统源码和报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计 客房管理系统源码和报告.docx(26页珍藏版)》请在冰豆网上搜索。

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

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

《C语言程序设计》综合实验报告

一、需求分析

编写一个客房管理系统,提供键盘式菜单实现功能选择,功能包括:

用户登记、统计、查询和用户信息修改。

软件平台:

CODEBLOCKS

 

二、整体设计

整个客房管理系统被设计为用户登记模块、统计模块、查询模块和修改模块。

数据以TXT格式存储,支持保存信息。

 

三、详细设计

 

 

(1)用户登记模块

通过函数readfile读取txt文件信息到room数组,提示用户选择想要入住的房间号,判断是否已经被占用,若占用,重新选择房间号,若没有占用,提示输入登记信息,把数据存入Room数组中,通过savefile添加信息到txt。

 

 

(2)统计模块

读取txt信息到结构体数组room,提示用户选择统计方式,设置计数器,顺序遍历Room数组,

1、计数器记录数组数,即总客房数

2、判断每一个数组中的结构体的时间是否和需要查询的日期相同,若相同,计数器加一

 

(3)查询模块

调用readfile函数,将信息读入room结构体数组中,提示用户选择查询方式,通过基本查找算法查找Room数组。

可以按房间号、价格、房间标记、用户姓名、居民身份证查询。

 

每一个查询函数内部结构如下:

 

(4)修改模块

调用readfile函数,读取信息到room结构体数组,提示用户输入需要修改的房间号,采用基本查找算法在数组中找到要修改的数据,提示用户重新更改房间信息,最后将结构体数组重新写入文件保存。

 

 

四、源代码

#include

#include

#include

#defineM80

//客户结构体

typedefstructclient

{

charname[12];//姓名

intsex;//性别

intage;//年龄

charid[20];//身份证号

intyear;//入住时间

intmonth;

intdate;

}CLIENT;

//客房结构体

structHotel

{

introomid;

inttel;//用户的话

intprice;//价格

intsign;//默认标记为空房间

CLIENTclient_list;//客户信息

}room[M];

voidMenu();//目录界面

voiddengji(structHotelroom[]);

voidsavefile(structHotelroom[],inti);

intreadfile(structHotelroom[]);

voidtongji(structHotelroom[]);

voidchaxun(structHotelroom[]);

voidprintmessage(structHotelroom[],intn);

voidxiugai(structHotelroom[]);

//主函数

intmain()

{

intn;

charreply;

Menu();

do{

printf("请输入选项对应的数字:

\n");

scanf("%d",&n);

while(n!

=1&&n!

=2&&n!

=3&&n!

=4)

{

printf("请输入各选项对应的数字!

\n");

scanf("%d",&n);

}

switch(n)

{

case1:

dengji(room);

break;

case2:

tongji(room);

break;

case3:

chaxun(room);

break;

case4:

xiugai(room);

break;

}

printf("是否还要进入其它选项?

(回复Y或y继续)\n");

scanf("%c",&reply);

}while(reply=='y'||reply=='Y');

return0;

}

//系统目录

voidMenu()

{

printf("************************客房管理系统***************************\n");

printf("\t\t\t1————登记\n");

printf("\t\t\t2————统计\n");

printf("\t\t\t3————查询\n");

printf("\t\t\t4————修改\n");

printf("***************************************************************\n");

}

//登记客户信息

voiddengji(structHotelroom[])

{

intx,j,i,flag;

charanswer;

do

{

i=readfile(room);

do

{

flag=0;

printf("输入您想入住的房间号:

(三位数)\n");

scanf("%3d",&x);

for(j=0;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("请输入入住年月日(格式:

20151111)\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中的信息

intreadfile(structHotelroom[])

{

FILE*fp;

inti;

if((fp=fopen("room.txt","r"))==NULL)

{

printf("Failuretoopenscore.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);

returni;

}

//保存结构体数组信息到文件

voidsavefile(structHotelroom[],inti)

{

FILE*fp;

if((fp=fopen("room.txt","a"))==NULL)

{

printf("Failuretoopenscore.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);

}

//统计模块

voidtongji(structHotelroom[])

{

intn,x;

intyear,month,day,j,count=0;

x=readfile(room);

printf("请选择统计方式:

1>统计房客数,2>统计某一天的房客数\n");

scanf("%d",&n);

switch(n)

{

case1:

printf("客房总数为:

%d\n",x);

break;

case2:

printf("请输入具体时间:

\n");

scanf("%d%d%d",&year,&month,&day);

for(j=0;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);

}

}

//查询模块

voidchaxun(structHotelroom[])

{

intn,x,roomid,price,j;

charname[12],id[20];

x=readfile(room);

printf("按房间号查询请按1;按价格查询请按2;按用户姓名查询请按3;按身份证号码查询请按4\n");

scanf("%d",&n);

switch(n)

{

case1:

printf("请输入房间号:

\n");

scanf("%d",&roomid);

for(j=0;j

{

if(room[j].roomid==roomid)

{

print(room,j);

}

}

break;

case2:

printf("请输入价格:

\n");

scanf("%d",&price);

for(j=0;j

{

if(room[j].price==price)

{

print(room,j);

}

}

break;

case3:

printf("请输入客户姓名:

\n");

scanf("%s",name);

for(j=0;j

{

if(strcmp(room[j].client_list.name,name)==0)

{

print(room,j);

}

}

break;

case4:

printf("请输入身份证号码:

\n");

scanf("%s",id);

for(j=0;j

{

if(strcmp(room[j].client_list.id,id)==0)

{

print(room,j);

}

}

}

}

//打印

voidprint(structHotelroom[],intj)

{

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);

}

voidprintmessage(structHotelroom[],intn)

{

intj;

for(j=0;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);

}

}

//修改模块

voidxiugai(structHotelroom[])

{

inti,m,roomid;

m=readfile(room);

printf("请选择房间号:

\n");

scanf("%d",&roomid);

for(i=0;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文件

voidsaveall(structHotelroom[],intm)

{

intj;

FILE*fp;

if((fp=fopen("room.txt","w"))==NULL)

{

printf("Failuretoopenscore.txt!

\n");

exit(0);

}

for(j=0;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:

选择的房间没有被占用,提示用户输入登记信息,登记完成后系统后台执行保存,弹出窗口询问是否继续登记下一个顾客

 

2、统计功能测试:

情况1:

选择统计客房总数,系统返回总客房数

情况2:

选择按日期统计,系统返回具体某天的客房总数

3、查询功能测试:

情况1:

按房间号查询

情况2:

按价格查询

情况3:

按用户名查询

情况4:

按身份证号查询

4、修改功能测试:

输入需要修改的房间后,系统提示用户重新写入房间信息

六、总结

本程序可通过键盘选择目录对应的功能,提供登记、查询、统计、修改四大功能。

优点:

客户信息通过txt文件保存,在下次运行程序时仍然能读取保存的信息。

不足:

功能尚不完善,没有添加退房功能;用户操作界面需要美化,提高可操作性;可以加入清屏功能,以便在用户在选择相关功能以后,不再显示菜单目录。

个人心得:

这是本学期第一次用C语言编写一个系统,实现比较完整的功能。

1、遇到的部分问题:

程序不能将信息正确从txt文档中读取,出现乱码。

原因:

读取函数和存储函数的读取/存储格式没有对应。

查询功能模块中按日期查询出现错误,只能正确读取最后一组数据的日期

原因:

每组数据之间没有空格符号,导致前一组和后一组数据的日期和房间号牵连到一块,导致读取错误。

更改读取和存储函数的格式。

1、通过实践,体会到了需求分析和结构设计流程等编程准备工作的重要性:

一个大的程序,不可能通过大脑的构思,一步就能完成,要想减少程序编写过程中遇到的思路错误,必须要在此之前构思好,清楚该实现什么功能,这个功能怎么实现,需要一些什么途径。

2、分而治之、信息隐藏的思想对于大型程序来说尤为重要,不但能减少程序中重复的代码,还能使程序结构和功能更加清晰,可读性更强。

3、关键地方要加以注释,以便日后能够读懂函数的程序的功能。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1