数据结构课设报告-理发馆经营状况模拟系统 本文关键词:理发馆,数据结构,经营状况,模拟,报告
数据结构课设报告-理发馆经营状况模拟系统 本文简介:数据结构课设报告——理发馆经营状况模拟系统数据结构课设报告姓名:xxx学号:xxxxxxxx学院:计算机学院完成日期:2013年9月题目:理发馆经营状况模拟系统一、程序基本功能1.能够从文件中读取所需条件。2.随机产生每个顾客进门时的理发时间durtime、间隔时间intertime、服务选项sel
数据结构课设报告-理发馆经营状况模拟系统 本文内容:
数据结构课设报告——理发馆经营状况模拟系统
数
据
结
构
课
设
报
告
姓名:xxx
学号:xxxxxxxx
学院:计算机学院
完成日期:2013年9月
题目:理发馆经营状况模拟系统
一、
程序基本功能
1.
能够从文件中读取所需条件。
2.
随机产生每个顾客进门时的理发时间durtime、间隔时间intertime、服务选项select。
3.
统计每天不同级别理发师的营业时间、创收和每天理发馆总创收并写入到文本文件中
二、
需求分析
1.
本演示程序中用户和计算机以文本方式进行交流,即用户将所需数据写入到data.txt文件中,计算机将结果输出到sesult.txt文件中。
2.
演示程序以图形界面输出当前状况。
3.
演示程序中需要用到数据结构中的离散模型、顺序存储、有序表、线性结构。
4.
程序执行命令包括:
a)
读出data.txt文件中的相应数据。
b)
生成顾客信息。
c)
进行理发服务,并计算相应数据。
d)
结果存入到result.txt文件中。
5.
测试数据
09:30
18:00
9
1
3
2
1
3
2
4
1
5
2
6
3
7
3
8
1
9
2
三、
概要设计
本程序主要分为四大模块
为了实现上述程序功能,应以有序表表示理发队列
1.
理发队列:
typedef
struct
Qnode
{
int
num;
//理发者编号
struct
Qnodenext;
}Qnode,*Queueptr;
2.
等待队列:
typedef
struct
{
Queueptr
front;
//队头指针
Queueptr
rear;
//队尾指针
}LinkQueue;
LinkQueue
A;
//等待队列A为1
LinkQueue
B;
//等待队列B为2
LinkQueue
C;
//等待队列C为3
3.
顾客参数的抽象数据类型;
typedef
struct
customer
{
int
no;
//编号
int
intime;
//进入理发店间
int
durtime;
//所需服务时间
int
intertime;
//下一个顾客到达所需时间
int
select;
//选择服务等级:1,2,3
int
starttime;
//开始理发时间
int
leavetime;
//离开时间
int
serve_flag;
//是否在理发
float
turnover;
//营业额
}customer
;
4.
理发师参数的抽象数据类型:
struct
barber
{
int
No;
//理发师编号
int
level;
//理发师级别
}Br[N];
//理发师
5.
离散模型:
while(currenttime0
while(Bchair>0
while(Cchair>0
}
if((cus[totalcustom].intime+cus[totalcustom].intertime)==currenttime)
customer_in();
//判断有无人进入
currenttime++;
}
while(!QueueEmpty(A))
{
char
sInfo[128]
=
{0};
currenttime++;
for(i=1;i0
}
}
OutputDebugString(“while
2
is
done.“);
while(!QueueEmpty(B))
{
currenttime++;
for(i=1;i0
}
}
while(!QueueEmpty(C))
{
currenttime++;
for(i=1;i0
}
}
lasttime=cus[1].leavetime;
//求出最后离开的顾客的离开时间
for(i=2;i是从电脑的库文件里边取
#include
#include
#include
#include
#include
#include
#include
#include
#define
MAX
30000
#define
TRUE
1
#define
FALSE
0
#define
R
rand()
#define
N
20
float
wait_length;
//等待队列长度
int
totalcustom;
//总顾客数
int
totaltime;
//总理发时间
int
currenttime;
//当前时间
int
addtime;
//加班时间
int
Achair;
//当前A级可用椅子
int
Bchair;
//当前B级可用椅子
int
Cchair;
//当前C级可用椅子
int
h1;
//开始时间
int
min1;
//开始分钟
int
h2;
//结束时间
int
min2;
//结束分钟
double
wait_A;
double
wait_B;
double
wait_C;
double
aver_serve_time;
//平均服务时间
double
aver_wait_len;
//平均等待长度
double
wait_len_A;
//理发队列长度
double
wait_len_B;
double
wait_len_C;
int
n;
//理发师人数
float
discount;
//折扣
int
x,y;
//画方格横纵坐标
int
i,a,b,c,d,e,f,h,k;
//参数
int
T;
//营业总时长(分钟)
int
lasttime;
//最后一个离开时间
float
allturnover;
//总营业额
int
Atime;
//1级理发师营业额
int
Btime;
//2级理发师营业额
int
Ctime;
//3级理发师营业额
float
Aturnover;
//1级理发师营业时间
float
Bturnover;
//2级理发师营业时间
float
Cturnover;
//3级理发师营业时间
int
r;
struct
barber
{
int
No;
//理发师编号
int
level;
//理发师级别
}Br[N];
//理发师
typedef
struct
customer
{
int
no;
//编号
int
intime;
//进入理发店时间
int
durtime;
//所需服务时间
int
intertime;
//下一个顾客到达所需时间
int
select;
//选择服务等级:1,2,3
int
starttime;
//开始理发时间
int
leavetime;
//离开时间
int
serve_flag;
//是否在理发
float
turnover;
//营业额
}customer
;
customer
cus[MAX];
typedef
struct
Qnode
{
int
num;
//理发者编号
struct
Qnodenext;
}Qnode,*Queueptr;
typedef
struct
{
Queueptr
front;
//队头指针
Queueptr
rear;
//队尾指针
}LinkQueue;
LinkQueue
A;
//等待队列A为1
LinkQueue
B;
//等待队列B为2
LinkQueue
C;
//等待队列C为3
void
Myinterface();
//输出界面
void
load();
//读取文件
void
InitQueue(LinkQueue
//队列初始化
int
Queue_length(LinkQueue
//求等待队列当前长度
void
EnQueue(LinkQueue
//将顾客插入队尾
int
DeQueue(LinkQueue
//队头出队,e返回去编号
int
QueueEmpty(LinkQueue
//判断队列是否为空,空返回1
void
customer_serve(int
n);
//服务
void
customer_in();
//顾客到达
void
customer_leave(int
n);
//顾客离开
void
list();
//平均等待长度和等待时间
void
save();
//存取数据
void
click();
//显示当前状态
void
close();
//关闭图形界面
void
currentstate(int
e,int
f);
//修改界面
void
clearstate();
void
initialize();
//初始化
void
time_initialize();
//时间初始化
void
haircut();
void
clk(int
n);
void
outget();
int
_tmain(int
argc,_TCHAR*
argv[])
{
initialize();
load();
Myinterface();
time_initialize();
click();
InitQueue(A);
//初始化队列
InitQueue(B);
InitQueue(C);
customer_in();
haircut();
for(b=1;bnext=NULL;
}
int
Queue_Length(LinkQueue
Queueptr
p;
p=Q.front;
while(p->next)
{
p=p->next;
++length;
}
return
length;
}
void
EnQueue(LinkQueue
p=(Queueptr)malloc(sizeof(Qnode));
p->num=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
int
DeQueue(LinkQueue
int
e;
p=Q.front->next;
e=p->num;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return
e;
}
int
QueueEmpty(LinkQueue
}
void
customer_serve(int
n)
//理发
{
cus[n].starttime=currenttime;
cus[n].leavetime=cus[n].durtime+currenttime;
switch(cus[n].select)
//理发座位-1
{
case
1:
Achair--;
click();
break;
case
2:
Bchair--;
click();
break;
case
3:
Cchair--;
click();
break;
default:
break;
}
cus[n].serve_flag=TRUE;
}
void
customer_in()
{
totalcustom++;
cus[totalcustom].no=totalcustom;
cus[totalcustom].intime=currenttime;
//记录顾客进入时间
cus[totalcustom].durtime=25+rand()%50;
//生成所需服务时间
cus[totalcustom].intertime=15+rand()%30;
//下一个顾客到达时间
cus[totalcustom].select=1+R%3;
//生成服务等级1-3
cus[totalcustom].turnover=(20.0000+cus[totalcustom].durtime*cus[totalcustom].select/1.0000)*(discount/100.0000);//单人营业额
switch(cus[totalcustom].select)
{
case
1:
if(QueueEmpty(A)
}
else
{
cus[totalcustom].serve_flag=FALSE;
//否则入队等待
EnQueue(A,totalcustom);
wait_len_A=wait_len_A+Queue_Length(A);
//累计队长
char
lengthA[5];
sprintf(lengthA,“%d“,Queue_Length(A));
outtextxy(100,400,lengthA);
}
break;
case
2:
if(QueueEmpty(B)
}
else
{
cus[totalcustom].serve_flag=FALSE;
//否则入队等待
EnQueue(B,totalcustom);
wait_len_B=wait_len_B+Queue_Length(B);
//累计队长
}
break;
case
3:
if(QueueEmpty
}
else
{
cus[totalcustom].serve_flag=FALSE;
//否则入队等待
EnQueue(C,totalcustom);
wait_len_C=wait_len_C+Queue_Length(C);
//累计队长
}
break;
default:
break;
}
}
void
customer_leave(int
n)
//顾客离开
{
cus[n].serve_flag=FALSE;
switch(cus[n].select)
//理发座位+1
{
case
1:
Achair++;
click();
break;
case
2:
Bchair++;
click();
break;
case
3:
Cchair++;
click();
break;
default:
break;
}
totaltime
=
totaltime+currenttime-cus[n].intertime;
}
void
list()
{
aver_serve_time=totaltime/totalcustom-c;
wait_length=wait_len_A+wait_len_B+wait_len_C;
aver_wait_len=wait_length/(totalcustom*1.00000);
for(i=1;i=220
while(Bchair>0
while(Cchair>0
}
if((cus[totalcustom].intime+cus[totalcustom].intertime)==currenttime)
customer_in();