旅店收款POS机管理系统c语言数据结构实习报告.docx
《旅店收款POS机管理系统c语言数据结构实习报告.docx》由会员分享,可在线阅读,更多相关《旅店收款POS机管理系统c语言数据结构实习报告.docx(22页珍藏版)》请在冰豆网上搜索。
旅店收款POS机管理系统c语言数据结构实习报告
信息工程学院
数据结构与C语言综合训练报告
(2012~2013学年第二学期)
报告题目:
旅店收款POS机管理系统
*******
专业:
信息
年级班级:
121
完成日期:
2013/7/20
一、综合训练目的和要求
本综合训练是计算机科学与技术、信息管理与信息系统、软件工程、电子商务专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。
本课综合训练的目的和任务:
1.巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言、数据结构解决实际问题的能力
二、综合训练任务内容
1.前台管理:
包括空房分等级显示、入住登记、退房结算、洗衣房管理和娱乐项目管理;
2.后台管理包括客房预定分析、营业额统计,报表;
3.设计数据结构文件来实现数据库管理,包括数据录入、查询、删除、修改、更新。
三、总体设计
1.程序设计组成框图:
2.程序运行流程图:
四、详细设计说明
函数功能、入口及出口参数说明,函数调用关系描述等
(分模块逐一说明函数功能、入口及出口参数,函数调用关系描述等)
1.此系统可以设计要求:
☞前台管理:
包括空房分等级显示、入住登记、退房结算、洗衣房娱乐项目管理;
☞后台管理包括客房预定分析、营业额统计、营业史报表);
☞设计数据结构文件来实现数据库管理,包括数据录入、查询、删除、修改、更新。
2.功能简易介绍:
☞录入:
a、判断存储上次保留的文件是否有未退房的旅客,有则录入到当前旅客列表
b、顾客基本信息的录入及存储,选房间时候要考虑到房间是否已经被使用和是否存在该房间号,所选房间星级,身份证,电话等;
☞.顾客基本信息的删除与修改,与信息录入存储紧密联系。
要考虑到顾客之信
息是否存在,是否允许删除,以及删除与修改后房间的剩余量等房间信息的随之改变
☞.顾客是否需要其他服务,如早中晚餐,洗衣,娱乐项目,并且加以计费。
☞.后台服务台对任意顾客信息的查询,当前旅店信息的查询(房间使用情况,营业史等
☞.顾客选择退房,并且记录下来,结算现金,删除其信息
☞.退出时提示当前信息可能丢失,是否选择保存,或是回到主菜单取消退出
☞…………
三个头文件
#include"c1.h"
#include"definition.h"
#include"fun.h"
3.定义(包含在definition.h的头文件里
☞typedefstructpassenger
{
charname[20];
introomnum;
intstar;
charID[20];
chartel[20];
intmoney;
}ElemType;
☞structRooms{
intprice;
intnum;
intremain_num;
}room3,room4,room5
☞structrooms{
introom_300;
intflag_room;
}allroom[301]={0,0};
☞structLNode
{
ElemTypedata;
LNode*next;
};
typedefLNode*LinkList;
4.部分主要函数(包含在fun.h的头文件里)
☞voidwelcome()
打开软件的欢迎界面,任意键可以进入使用界面。
☞voiddesktop()
显示菜单的界面,具有一定的的美观性。
菜单的选项一目了然,从键盘输入正确菜单选项即可运行,输入非法或错误选项时,会有亲情提示
☞voiddo_rooms300(void)
再次初始化300间房,具体是将房间号分别命名为1、2、3……299、300,使其恰好是结构体数组allroom[300]的下标,对后面的房间信息处理提供便利
☞StatusInitList(LinkList&L)
定义全局变量的链表指针L后,在主函数首先将其初始化,建立空的链表,用于存储所有旅客的信息
☞Statusread_left_info(LinkList&L)
每一次打开软件时,此函数用于读取文件(上次退出时保存的未退房旅客的信息)里的数据,如果上次退出没有保存旅客信息或是没有未退房旅客信息需要保存,此函数讲不执行
☞Statusout(LinkListL)
选择退出系统时的提示函数,如果有未退房旅客,此函数会提示用户直接退出会丢失信息,可以选择保存在退出,以便下次使用系统时读取(read_left_info函数读取)
☞Statuscreate(LinkList&L)
创建旅客信息的函数,有旅客需要住房,需要录入各种旅客信息,以及选择几星级房间和房间号,如果输入房间等级和房间号不合法会有提示,如果输入的房间号已经在使用之中,也会有“此房间已被使用”的提示,完全正确输入后自动返回主菜单
☞Statusdeleteroom(LinkList&L)
删除某客房信息的函数,在有必要时舍弃某些信息,次信息直接从当前链表删除,不存储到文件(不同于outroomnum函数)
☞Statusoutroomnum(LinkList&L)
选择某房间号的退房处理,退房时会有收取旅客费用(基础客房费用和额外的消费)的提示,将其从链表删除节点,成功退房后,还会将旅客信息存入文件,已被将来查找住房记录或营业额统计
☞Statusresearchroomnum(LinkListL)
查找并查看某客房的信息,若是空房,或非法输入会有提示
☞Statuschangeroomnum(LinkList&L)
改变旅客信息的函数,需要重新输入次客房旅客的信息,修改时其住房消费会改变,
如果更改房间等级,房间不同等级的剩余量以及其他相关信息亦会随之更新
☞StatusallInfoPrint(LinkListL,void(*vi)(ElemType))
用于查看当前所有已用房间及住客的基本信息
☞Statusothercost(LinkList&L)
旅客可以选择在旅馆的其他消费,如用餐、洗衣、娱乐和购买生活用品等,并收取费用(可在消费前退出消费)
☞StatusInfoCon(LinkListL)
查看其他信息:
查找所有旅客:
显示出所有旅客姓名;
查找所有客房信息:
提供所有客房信息,各等级房间的使用量剩余量,已使用、未使用的房间号,以及各个房间所在的楼层;
查找未收房费及其房间号及未收费的总额;
查找营业业务史,以表格的形式显示过去营业的总报表(退房时再次存储记录),总营业额。
☞…………
5.Main函数中的循环:
用循环来进行多次菜单项的选择操作,直到退出
do
{
输入菜单选项k;
switch(k)
{
case0:
if(out(L)==2)
{
continue;
}
printf("\n\t\t已退出系统--谢谢使用");
exit(0);
case1:
create(L);
break;
case2:
outroomnum(L);
break;
case3:
researchroomnum(L);
break;
case4:
changeroomnum(L);
break;
☞……………………
default:
printf("无此选项,请重新输入\n");
printf("\a");
break;
}//switch
}//do
while(k!
=0);
五、软件使用说明
☞开始运行软件,进入欢迎界面,出现pos机的图形,有提示任意键可进入使用状态,
如图所示
:
☞
进入菜单界面出现简明的菜单选项(可能会有这在录入的提示,这是上次退出储存了一些未退房的旅客,此次打开系统会自动读取,如下图:
)。
☞进入菜单,可以进行菜单选择,如选择1,及进行来客信息录入(在录入房间等级和房间号时会有严格的要求,任何错的操作都会有提示,所以提供的应有的提示信息,如上图所示:
)
☞其他菜单选项,如查找,要求输入正确的房间号(1—300)查看当前房间信息,未登记房间会有“此房间未使用”提示。
如下图:
。
。
。
☞其他查询信息:
如图所示为查找4项中的未收费用,及当前所有住客住房及其费用,然后统计总费用:
☞菜单选项7供旅客其他生活的消费,可选择房间号进入消费状态,或是退出,输入有效的房号会有次旅客基本信息的显示,并提供消费选择及其价格(此时亦可退出消费),如图:
☞查看6.2选项时会有所有客房信息的输出,所有客房信息,各等级房间的使用量、剩余量,已使用、未使用的房间号,以及各个房间所在的楼层,使用中的房间号在楼层中显示“xx”,如上图:
☞查看6.2选项会输出所有历史住客记录(包括以前使用软件是进行退房操作的对象),此信息存在txt文件里,便于以后查看。
最后还会显示住房房次,总营业额。
☞选项0退出时会对当前客房信息进行检索如有未退房者(存贮旅客信息的链表不为空),如果为空直接退出,否则显示如下图:
☞如果选择舍弃信息,会有如图1提示,此时防止信息丢失可选择返回(主菜单)
当然若再次确认舍弃,就会退出程序,丢失信息(可能是无用的信息,否则尽量选择存储在退出,如下2图)
图1
图2
☞☞☞☞☞尚有其他功能再次简单补充说明(无图),☜☜☜☜☜☜☜
☞退房选项:
退房时会要求输入对的房间号,提示收取费用,并将其信息存入文件,以备后期使用软件查看历史用房记录报表。
☞修改信息:
输入客房号,重新写入次旅客信息,重新选房,其相关信息,如因房间等级变化消费的变化,旅店客房不同等级剩余量的改变等(此些改变都可以在信息查询显示中看到信息输出的变化)。
☞☞☞等等其他功能
六、调试与测试
实习过程中所得经验教训和所学到的处理问题的新知识如下:
☞在使用库函数时,要注意正确的拼写,有些错误的拼写是没有错误提示的,但是在编译时就会出现错误的结果,往往难以查找错误所在,如:
把default写错不会有提示错误,但是编译时达不到预想效果。
☞还有就是处理字符型误输入为字符型导致程序出错或陷入死循环的情况(可参考7-14的日志)运用循环语句块:
do{
printf("请进行菜单选项:
");
do
{if(scanf("%d",&k)!
=1)
{
printf("无此选项,请重新输入\n");
fflush(stdin);
continue;
}
elsebreak;
}while
(1);
判断语句if(scanf("%d",&k)!
=1)的意思是如果输入的数据类型不是整型数就执行下面的语句,这是因为scanf(“%d”,&k);在正确使用时返回值为1,输入错误返回值为0.
☞注意“=”和“==”的正确使用,虽然这是个很简单的问题,但是好多人都有混淆使用的情况!
☞在编写changeroom函数时,需要改变相关等级房间remain_num(房间剩余量)大小,就要在输入所需改变房间号时先让当前所在房间的remain_num--;输入改变后的房间等级再让所在等级的remain_num++;至于消费的改变要用到小算法:
【更新后的消费=(更新后的等级-之前的房间等级)*50+更前后的消费】
这是因为3,4,5星级房间相邻等级差价都是50元。
☞在处理界面交换(每一次操作周后回到主菜单),用到:
system("cls"):
清除屏幕所有内容;
easydesktop():
重新显示界面。
把他们放到主函数的do-while循环里即可
七、工作日志
☞2013-7-12周五
今天是实习的day1,看着刚拿到的实习训练题:
旅店收款POS机管理系统,心里充满了期待,期待实习过程中解决问题的那种爽的感觉,期待自己10天后的成果,期待10天后就可以回家乡了!
此题的要求很实用,因此我才选了它:
1)前台管理:
包括空房分等级显示、入住登记退房、洗衣房和娱乐项目的管理;
2)后台管理包括客房预定分析、营业额统计、营业史报表;
3)设计数据结构文件来实现数据库管理,包括数据录入、查询、删除、修改、更新
今天的任务就是熟悉项目要求规划自己的设计要求,不过还是简简单单开始了编程之旅,设计一个简单的界面先,先要给人以美的印象。
☞2013-7-13周六
实习day2,要对自己的程序有个大致的设计吧,不然函数会无从下手的:
1录入:
a、判断存储上次保留的文件是否有未退房的旅客,有则录入到当前旅客列表;b、顾客基本信息的录入及存储,选房间时候要考虑到房间是否已经被使用和是否存在该房间号,所选房间星级,身份证,电话等;
2.顾客基本信息的删除与修改,与信息录入存储紧密联系。
要考虑到顾客之信
息是否存在,是否允许删除,以及删除与修改后房间的剩余量等房间信息的随之改变
3.顾客是否需要其他服务,如早中晚餐,洗衣,娱乐项目,并且加以计费。
4.后台服务台对任意顾客信息的查询,当前旅店信息的查询(房间使用情况,营业史等)
5.顾客选择退房,并且记录下来,结算现金,删除其信息。
6、退出时提示当前信息可能丢失,是否选择保存,或是回到主菜单取消退出
有了大致的规划就知道接下来几天要干什么了,可能有些功能的实现会遇到棘手的问题,在自己的努力和同学指导老师的帮助下,一定都能实现
☞2013-7-14周日
Day3开始真正的编程用do-while循环为主体写出来主函数的框架,是对菜单栏选择重复多次使用的保障,还有就是创建creat函数,在此期间遇到的最大问题就是如何处理允许输错的情况,经过一天的学习,得到了1种解决方案:
把选项的数字定义成整型数
do{
printf("请进行菜单选项:
");
do
{if(scanf("%d",&k)!
=1)
{
printf("无此选项,请重新输入\n");
fflush(stdin);
continue;
}
elsebreak;
}while
(1);//处理误输入字符的情况
此循环语句解决了,数字类型的数字误输入为字符而使程序出现错误的情况,在通过switch选择语句对数字处理,无此数字选项用default:
continue;break;即可从新循环。
☞2013-7-15周一:
Day4要进行大量函数的编写:
首先完善界面:
voidwelcome();voiddesktop();
建立存储信息的链表:
StatusInitList(LinkList&L);
继续做建立信息的函数,毕竟里面有很多小问题:
Statuscreate(LinkList&L);
删除信息的函数,很简单的:
Statusdeleteroom(LinkList&L);
查找旅客信息的函数:
Statusresearchroomnum(LinkListL);
此外对昨天的问题找到解决方案2:
把选项的数字定义成整型数,再用清除缓存函数fflush(stdin);
但是这种方案的缺点就是:
如果输入选项为1,输入”12334….”,亦可以通过,这是因为首先读取的“1”,再清除缓存,‘1’是符合选项要求的,所以本人不提倡此种方案。
☞2013-7-16周三
实习day5开始有了疲惫的感觉,还好明天就可以休战了,继续坚持些函数:
改变旅客信息:
Statuschangeroomnum(LinkList&L);
所有信息输出:
StatusallInfoPrint(LinkListL,void(*vi)(ElemType));
其他信息统计:
StatusInfoCon(LinkListL);
消费:
Statusothercost(LinkList&L);
☞2013-7-18周四
Day6状态良好,主要的函数都实现了,计划添加文件操作,复习一下上学期的知识,完善退房的功能:
退房时把信息存入文本文件;再完善打开退出软件的功能:
退出提示信息的存储到文本文件,打开时自动录入文本文件的数据。
☞2013-7-19周五
Day7进行调试,找出还有什么不完美的地方,不过没啥问题了,很好。
☞2013-7-20周六
终于快结束了,day8要开始写实践报告,总结和展示自己的成果,顺便与同学交流心得,互相帮助解决剩下的问题。
☞2013-7-21周七
今天day9算是最后一天坐机房了,花了整整一天写报告,再次熟悉自己的成果吧,目前正在写报告中……
☞2013-7-22周一
Day10,剩下的只有期待数天1000多行的代码期待有所收获,then,Gohome!
八、综合训练心得与体会
编程题具有一定挑战性,看到题目一开始会不知所措,主要是因为没有理清条理,在编程过程中遇到各种问题,每个函数块都要用心调试,解决函数调用以及使所需功能正常实现的问题。
理清条理后,题目要求的操作会变的简单,逐渐找到和提升编程的能力、感觉。
通过编程解决实际问题,不仅熟练掌握了结构体、数组、文件的使用,函数的算法设计、函数的各个调用、选择结构、循环结构的应用,链表的基本操作的使用甚至从新设计链表上的算法,进一步掌握了C语言及数据结构的实践操作;还提升了个人的思维能力,面对实际问题时要考虑全面,尽量能让自己的代码得到的软件实用,贴近生活。
此次实习得到的不仅仅是对所学知识的巩固,更重要的是提高解决实际问题的能力,很高兴有10天的时间来用心做一件事,不管成绩如何,用心者必有收获,偷工减料的偷鸡摸狗找代码抄袭就是在浪费自己生命!
九、意见和建议
本综合训练是计算机科学与技术、信息管理与信息系统、软件工程、电子商务专业重要的实践性环节之一,意在熟练掌握C语言及数据结构的实践操作。
本人有如下意见:
☞实习花费大家暑假前期10天的时间,有些同学为之不满,所以可以变化时间的选定,比如在学期上课期间,而且实习之后继续进入学习状态,效果也许会更好。
☞实习期间我们都希望有更多的指导教师或助教帮助解决问题,教授编程技巧和技术上的问题,当然自己解决问题更好,但有些很多知识和技能还是需要指导教师或助教的指导,这样的实习效率会更高,学到更多知识,节约时间。