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