北京工业大学-数据结构课设-理发馆-报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

理发馆学号_____110703xx___姓名_____xxx______指导教师______xx______2013年10月目录1需求分析31.1程序功能介绍31.2程序数据要求31.3开发与运行环境需求41.4用户界面设计52数据结构设计72.1主要数据结构72.2程序整体结构112.3模块功能描述113详细设计124测试224.1正确运行示例224.2错误运行示例245总结提高251需求分析1.1程序功能介绍本程序模拟理发馆一天的经营状况,理发馆的环境如下:1.理发馆有N把理发椅,可同时为N位顾客进行理发(2N9);2.理发师按技术水平分为三个等级(一级最高,三级最低),对应不同的服务收费。理发馆一天的工作过程如下:1.顾客进门时,需要选择某级别的理发师,只要该级别的理发师有空椅,则可立即坐下理发,否则需排队等候;2.一旦该级别的理发师有顾客理发完离去,排在该位理发师队列队头的顾客便可以开始理发。理发馆老板统计每天不同级别理发师的营业时间、创收和每天理发馆总创收,并写入文本文件中,可作为理发师工资与奖金的发放依据。1.2程序数据要求1.2.1输入数据(由文本文件输入):7:3061121324352630.6数据说明:第一行的09:30表示理发馆将于九点半开门;第二行的6表示理发馆有6张理发椅(此处可输入3~9的任意值);随后的N行:表示第i张椅子的理发师的级别(如:第1张理发椅是1级理发师,第2张理发椅是1级理发师…)。最后一行的0.6代表折扣(可选)1.2.2随机数据需求:每个顾客进门时将负责生成三个随机数:1)理发时间durtime:进门顾客理发所需服务时间;2)间隔时间intertime:该顾客与下一位顾客到达的时间间隔;3)服务选项select:该顾客选择理发师的级别。由随机数函数产生。1.2.3输出数据(输出到文本文件中):本日账目清单===============================按理发师===============================理发师编号:1级别:1工作时长:17本日盈收:17理发师编号:2级别:1工作时长:29本日盈收:29理发师编号:3级别:2工作时长:28本日盈收:14理发师编号:4级别:3工作时长:73本日盈收:23理发师编号:5级别:2工作时长:24本日盈收:12理发师编号:6级别:3工作时长:27本日盈收:9理发师编号:7级别:3工作时长:20本日盈收:6理发师编号:8级别:1工作时长:30本日盈收:30================================按级别===============================1级别理发师总工时:76总收入:762级别理发师总工时:52总收入:263级别理发师总工时:120总收入:38=================================总汇===============================本日总创收:1401.3开发与运行环境需求1.3.1开发环境:Visualstudio20101.3.2运行环境:Winxp/Win7/Win81.4用户界面设计1.4.1初始化界面(例:6个队列)8队列界面1.4.2顾客到达、理发及等待界面1.4.3顾客离开界面1.4.4DOS/GUI同步演示程序过程1.4.5折扣选择界面2数据结构设计2.1主要数据结构2.1.1事件类(Event)//事件类:包含事件发生时间,事件类型,和下一个事件(指针)三个数据成员classEvent{public:intoccurtime;intevent_type;Event*next_event;Event(){}Event(intoccurtime,intevent_type):occurtime(occurtime),event_type(event_type),next_event(NULL){}~Event(){}};2.1.2事件表(EventList)//事件表类:数据成员:头指针,两个用于插入删除事件结点的指针,和事件表长度classEventList{public:Event*head,*ptr_before,*ptr_after;intlength;//事件表长度EventList(){head=newEvent(-1,-1);length=1;}~EventList(){}voidOrderIn(Event*new_in);intListEmpty();intCmp(Event*new_in,Event*t1);};2.1.3顾客类(Customer)classCustomer{public:intdurtime;intselect;Customer*next;Customer():select(-1){}Customer(intdurtime,intselect):durtime(durtime),select(select),next(NULL){}~Customer(){}};2.1.4顾客队列类(CustomerQueue)classCustomerQueue{public:Customer*front,*rear;intselect;intlength;intworktime;intmoney;CustomerQueue():front(NULL),rear(NULL),select(-1),length(0),money(0),worktime(0){}~CustomerQueue(){}voidEnQueue(Customer*add);voidDelQueue();};2.1.5随机函数类(Random):classRandom{public:intdurtime;intintertime;intselect;Random(){srand((int)time(NULL));}~Random(){}intDurtime();intIntertime();intSelect();};2.1.6文件操作类(FileOperation):classFileOperation{public:intinput_time[2];//接收输入时间小时、分钟charmaohao;//接收中间的冒号intnumber[11];//用于接收理发师编号信息intchairs;//理发师人数floatdiscount;//折扣(可选)charzhekou;FileOperation():discount(1.0){}~FileOperation(){}voidFileInput(ifstream&from_file,int&opentime,CustomerQueuecq[],int&closetime);voidFileOutput(ofstream&to_file,CustomerQueuecq[],int&total_money);};2.1.7绘图类(barbergraph):classbarbergraph{public:IMAGEbackground_img;//顾客去背景图片IMAGEbaber_desk;//理发师桌子背景IMAGEmy_clock;//时钟背景IMAGEdoor;//门charnow_time[10];//时钟信息存储charbarber_info[20];//理发师信息chargraphic_symbol[15];//图例信息Customer*p;//获取当前动作顾客intchairs;//获取理发师人数barbergraph(){//读取背景图片集loadimage(&background_img,_T(背景1.jpg));loadimage(&baber_desk,_T(六张桌子.jpg));loadimage(&my_clock,_T(时钟.jpg));loadimage(&door,_T(门.jpg));}voidset_chairs(intchairs);//初始化理发师人数voidCommonGraph(CustomerQueuecq[],intopentime);//通用绘图界面voidBarberGraph(CustomerQueuecq[],intopentime);//无事件状态界面voidArriveBarberGraph(CustomerQueuecq[],intarrival,intnowtime);//顾客到来界面voidDepartBarberGraph(CustomerQueuecq[],intdeparture,intnowtime);//顾客离开界面~barbergraph(){}};2.1.8理发馆类(Barbershop):classBarberShop{public:EventListev;//事件表CustomerQueuecq[11];//六个顾客队列1~10可选intopentime;//开门时间Event*cur_event;//当前事件Event*new_event;//初始事件Customer*new_customer;//新顾客指针intclosetime;//TODO:目前为调试数据(22:00理想,未实现)inttotal_money;//理发馆一天总收入intchairs;//接收理发师人数BarberShop():cur_event(NULL),new_customer(NULL),total_money(0){}voidOpenForDay(barbergraph&bg,intchairs);//开门初始化函数intMinimum(intselect);//求同级别最短队列函数voidCustomerArrived(Random&ran,barbergraph&bg);//顾客到来voidCustomerDeparture(barbergraph&bg);//顾客离开voidBarberSimulation(Random&ran,barbergraph&bg,intchairs);//事件驱动模型~BarberShop(){}};2.2程序整体结构2.2.1函数调用图:2.3模块功能描述2.3.1Event:作为EventList的结点元素,数据:事件类型、事件发生的时间2.3.2EventList:事件表,为有序表。数据:头指针,时间表长度length;操作:插入、删除Event2.3.3Customer:保存顾客信息。数据:durtime,select2.3.4CustomerQueue:保存顾客队列信息以及理发师信息。数据:select,length,worktime,money,头尾指针;操作:入队,出队;2..3.5Random:生成要求中的三个随机数。2.3.6FileOperation:从文件读入数据,向文件输出数据。2.3.7BarberGraph:绘制图形界面,包括初始化界面、顾客到来、顾客离开界面。2.3.8barbershop:处理顾客到来,顾客离开,含事件驱动主程序。mainBarberSimulationFileinputOpenForDayCustomerArrivedCustomerDepartureOrderInBarberGraphEnQueueListEmptyFileoutputDepartBarberGraphArriveBarberGraphDelQueueMinimum3详细设计3.1.1eventlist.cpp#includeeventlist.hvoidEventList::OrderIn(Event*new_in){//插入事件表if(1==length){//如果长度为一,直接插入head-next_event=new_in;length++;return;}else{//如果长度不为一,用两指针一前一后进行插入操作ptr_before=head-next_event;ptr_after=head;while(ptr_bef

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功