住宿结帐管理系统Word格式文档下载.docx
《住宿结帐管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《住宿结帐管理系统Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
8、系统源代码…………………………………12
试验目的:
(1)加深对C语言的理解,将在书本上掌握的知识点运用到实际的系统编程中去,为以后的学习打下基础。
(2)通过简单的系统设计,增强面对复杂问题的处理能力,为以后实际中解决问题打下基础。
实验内容:
试设计一个住宿结帐管理系统,住宿结帐管理信息包括:
住宿信息的录入修改、删除功能;
住宿信息的排序浏览功能;
系统总体模块图:
主程序模块
信息保存模块
按住宿房间号码查询模块
按住宿天数查询模块
按住宿天数浏览模块
信息统计模块
信息删除模块
信息修改模块
信息读取模块
信息录入模块
按住房间号码浏览模块
按房间号码排序模块
按住宿天数排序模块
小组任务分工
(1)由郭凌瑞负责住宿信息的录入、修改、删除功能;
(2)由张亮负责文件的读取与写入操作,统计及主函数;
(3)由方宇负责排序、浏览、查询功能;
子系统设计方案:
信息的录入、修改与删除通过对信息的标志的判断与修改,执行信息录入的地址、修改的目标及删除功能的实现。
文件的读取与写入可用已知的库函数来完成,统计工作可由已有信息通过计算获得,主函数可由swith语句来达到菜单选折功能的目的。
(3)信息的排序、浏览、查询;
排序功能可通过冒泡法来实现,浏览实现排序然后显示即可,查询时,根据“==”来达到找到匹配信息的目的。
子系统主要程序流程图
N为所有房间数,NN为非空房间数
信息读取模块流程图
开始
0=>
i
i+1=>
i<
N?
N
Y
P[i].flang==1?
N
输入一个信息P[i]
1=>
P
[i].flang
NN+1=>
NN
i==N-1?
“y”or“n”
输入信息房间已满
结束
信息修改模块流程图
输出所有住宿信息
输入修改的房间号n
i,NN=>
j
n==0?
Y
j--
Y
P[i].Rome==n?
重新输入该信息P[i]
j==0?
未找到要修改的信息
信息删除模块流程图
输入要删除的房间号n
N
P[i].flang
未找到要删除的信息
输入删除的房间号n
结束
按住宿时间查询模块
输入要查询的日期(年月日)
i<
N?
日期是否相等
N
输出要查询的信息P[i]
j==0?
未找到要查询的信息
按房间号码查询模块
输入要查询房间号码no
房间号码是否相等
个人设计小结及心得体会:
(1)在我设计的子系统部分,包含很多细节问题,如果稍有不慎,往往导致模块无法运行,在设计中,我尝试了很多方法,对思维能力有了很大锻炼,提高了解决复杂问题的能力,同时,也很大程度上锻炼了耐心,做到不急不弃是系统最终成功的保证。
计053郭凌瑞
(2)我的工作比较简单,但在书写代码时,发现了自己的问题:
文件无法顺利操作!
文件是很重要的一个知识点,很兴庆在这次实践中我及时弥补了以前的缺憾,为以后的继续学习和面对复杂问题打下了坚实的基础,问题在实践中才能被更好地发现和解决,在今后的学习中要更加重视实践的作用!
软051张亮
(3)在我设计的模块中,主要是对已有信息的处理,对排序算法有了一个新的认识,从深层次理解了排序函数的思想,突破了以前是似而非的局限。
查询模块的书写,注意了很多细节,使模块在整体上有了很大优化,给了用户一个人性化的界面。
软052方宇
小组设计总结:
本次课程设计,我们做了一个简单管理系统,系统的功能较以前的小程序有了很大加强,对个人及团队的能力有了更大的要求,事实上,在本次课设中的确出现了很多以前没有遇到的问题,这是一次自我提高的过程,从中我们弥补了以前遗漏的很多东西,使自己的知识结构更加完善和牢固;
同时,这也是一次实践的机会,是增加面对复杂问题处理经验的机会,对以后做一些比较大的系统有一定的借鉴。
在本次试验的整个过程中,组员之间的合作起到了很大作用,共同解决了很多关键性难题,最终,在我们的共同努力下,我们的第一个系统正常运行了,巨大成就感促使我们有一种挑战更高目标的欲望!
#include<
stdio.h>
string.h>
#defineN3//总房间数
intNN=0;
//非空房间数
//类定义区
structDate{//入住时间
intyear;
intmonth;
intday;
};
structPayroll{//顾客信息列表
intflang;
//用来标志该顾客信息是否存在
charName[15];
//顾客姓名
Datedate;
//入住时间
intRome;
//房间号
intNumber;
//顾客数量
intPrice;
//每日价格
intDays;
//住宿天数
floatDiscountrate;
//折扣率
floatMoney;
//实收金额
//子函数声名区
voidImput(PayrollP[],FILE*fp);
//结帐信息的录入
voidRead(PayrollP[],FILE*fp);
//结账信息的读取
voidSave(PayrollP[],FILE*fp);
//信息保存为文件
voidReput(PayrollP[],FILE*fp);
//结账信息的修改
voidDelete(PayrollP[],FILE*fp);
//结账信息的删除
voidStat(PayrollP[],FILE*fp);
//信息统计
voidTimeread(PayrollP[],FILE*fp);
//按住宿天数浏览
voidRomenumber(PayrollP[],FILE*fp);
//按住宿房间浏览
voidTime(PayrollP[],FILE*fp);
//按住宿天数查询
voidRome(PayrollP[],FILE*fp);
//按住宿房间查询
voidDAY(PayrollP[],FILE*fp);
//按住宿天数排序
voidROME(PayrollP[],FILE*fp);
//按房间号码排序
//以下为主函数
voidmain()
{
FILE*fp;
structPayrollP[N];
fp=fopen("
accout.dat"
"
ab+"
);
intselect;
Read(P,fp);
//从文件中读取结账信息
printf("
*******************住宿结账管理系统***************\n\n"
~~~~~~~~~~~~~~~~~~~~欢迎使用本系统!
~~~~~~~~~~~~\n\n"
===============菜单===============\n"
"
请选择:
\n"
1--添加新信息\n"
2--修改信息\n"
3--删除信息\n"
4--统计信息\n"
5--按住宿天数浏览\n"
6--按住宿天数查询\n"
7--按放房间号码浏览\n"
8--按房间号码查询\n"
9--退出\n"
scanf("
%d"
&
select);
while(select!
=9)//没有退出本系统时,循环提示操作
{
switch(select)
case1:
Imput(P,fp);
//信息录入
break;
case2:
Reput(P,fp);
//修改信息
break;
case3:
Delete(P,fp);
//删除信息
break;
case4:
Stat(P,fp);
//统计信息
case5:
Timeread(P,fp);
case6:
Time(P,fp);
case7:
Romenumber(P,fp);
//按放房间号码浏览
case8:
Rome(P,fp);
//按房间号码查询
}
\n\n"
请选择要进行的操作:
//每完成一次操作选折下一次操作
"
Save(P,fp);
//将本次系统运行结果保存为文件
谢谢使用,再见!
}
//子函数定义区
voidImput(PayrollP[],FILE*fp)//结帐信息的录入
inti;
charch;
姓名入住时间房间顾客数量每日价格住宿天数折扣率\n"
printf("
=============================================\n"
for(i=0;
N;
i++)
{
if(P[i].flang!
=1)//避免覆盖已有信息
scanf("
%s%d%d%d%d%d%d%d%f"
P[i].Name,&
P[i].date.year,
&
P[i].date.month,&
P[i].date.day,&
P[i].Rome,&
P[i].Number,
P[i].Price,&
P[i].Days,&
P[i].Discountrate);
P[i].flang=1;
//标示已存信息
NN++;
P[i].Money=P[i].Days*P[i].Discountrate*P[i].Price;
if(i==N-1)
printf("
是否继续录入?
(yorn)"
getchar();
ch=getchar();
if(ch!
='
n'
)
姓名入住时间房间顾客数量每日价格住宿天数折扣率\n"
======================================\n"
else
break;
if(i==N-1)
printf("
抱歉,所有房间已满!
voidSave(PayrollP[],FILE*fp)//信息保存为文件
if(P[i].flang==1)
fwrite(&
P[i],sizeof(structPayroll),1,fp);
fclose(fp);
voidRead(PayrollP[],FILE*fp)//结账信息的读取
fread(&
voidReput(PayrollP[],FILE*fp)//结账信息的修改
intn,j=NN;
charch;
姓名住宿时间房间顾客数量每日价格住宿天数折扣率实收金额\n"
=========================================================================\n"
if(P[i].flang==1)
%8s%6d%3d%3d%10d%8d%8d%8d%8.2f%8.2f\n"
P[i].Name,
P[i].date.year,P[i].date.month,P[i].date.day,P[i].Rome,P[i].Number,
P[i].Price,P[i].Days,P[i].Discountrate,P[i].Money);
请输入要修改的房间号(输入零结束修改!
):
scanf("
n);
while(n!
=0)
if(P[i].Rome==n)
{
确认要修改吗?
getchar();
ch=getchar();
if(ch=='
y'
{
请重新输入该信息:
===========================================================\n"
P[i].date.year,&
P[i].date.day,
P[i].Number,&
P[i].Price,
P[i].Money=P[i].Days*P[i].Discountrate*P[i].Price;
}
else
continue;
}
else
j--;
}
else
continue;
if(j==0)
没有找到要修改的内容!
请确认后再输入!
):
voidDelete(PayrollP[],FILE*fp)//住宿信息的删除
inti,n;
intk=NN,j=NN;
intNO=NN;
姓名入住时间房间顾客数量每日价格住宿天数折扣率实收金额\n"
=============================================================================\n"
%8s%6d%3d%3d%10d%6d%8d%8d%8.2f%8.2f\n"
P[i].Name,P[i].date.year,P[i].date.month,P[i].date.day,
P[i].Rome,P[i].Number,P[i].Price,P[i].Days,
P[i].Discountrate,P[i].Money);
请输入要删除的房间号(输入零结束删除!
{
{
printf("
确认要删除吗?
if(ch=='
if(k==1)//此时删除所有住宿信息
for(i=0;
P[i].flang=0;
NO--;
P[i].flang=0;
//删除该项内容
k--;
else
}
j--;
if(k==0)
if(j==0)
没有找到要删除的内容,请确认!
scanf("
}
NN=NO;
voidTimeread(PayrollP[],FILE*fp)//按天数浏览
{
//Read(P,fp);
DAY(P,fp);
姓名入住时间房间顾客数量每日价格
住宿天数折扣率实收金额\n"
============================================
=======================\n"
voidRomenumber(PayrollP[],FILE*fp)//按住宿房间浏览
inti,j=NN;
ROME(P,fp);
姓名入住时间房间顾客数量每日价格
住宿天数折扣率实收金额\n"
================================================
=================\n"
%8s%6d%3d%3d%8d%6d%8d%8d%8.2f%8.2f\n"
voidStat(PayrollP[],FILE*fp)//信息统计
inti,n=N;
intSumperson=0;
//总人数
floatSum=0;
//总收入