好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

数据结构课设报告-理发馆经营状况模拟系统

数据结构课设报告-理发馆经营状况模拟系统 本文关键词:理发馆,数据结构,经营状况,模拟,报告

数据结构课设报告-理发馆经营状况模拟系统 本文简介:数据结构课设报告——理发馆经营状况模拟系统数据结构课设报告姓名: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();

TAG标签: