资源下载(包含所有代码、MakeFile、以及一份简单描述分析思路和流程图的WORD文档):
http://download.csdn.net/detail/htianlong/4443226
/*************************************************************
题目:电话客户服务模拟
1、 问题描述
一个模拟时钟提供接听电话服务的时间(以分钟计),然后这个时
钟将循环地自增1(分钟),直到到达指定的时间为止。在时钟的每
个“时刻”,就会执行一次检查来看看当前电话的服务是否已经完成,
如果是,这个电话从电话队列中删除,模拟服务将从队列中取出下
一个电话(如果有)继续开始。同时还需要执行一个检查来判断是
否有一个新的电话到达,如果有将其到达的时间记录下来,并为其
产生一个随机服务时间,这个服务时间也被记录下来,然后将这个
电话放入电话队列中,当客户服务人员空闲时,按照先来先服务的
方式处理这个队列。当时钟到达指定时间时,不会再接听新电话,
但是服务将继续,直到队列中所有电话得到处理为止。
2、 要求
(1) 程序需要处理的初始数据包括:客户服务人员的人数
、时间限制,电话到达的速率,平均服务时间。
(2) 程序产生的结果包括:处理的电话数,每个电话的平
均等待时间
运行环境:Linux
Linux下调试通过。
*************************************************************/
#include <stdio.h>
#include <time.h>
#include "queue.h"
/**需要输入的数据*/
int customer_service_staff_num = 5;//客户服务人员的人数
time_t time_limite = 20;//时间限制
double telephone_rate = 60.0/60;//电话到达的速率
/*此处为简化程序默认通电时间在0到2倍平均时间之间均匀分布*/
int average_service_time = 10;//平均服务时间
/**其他全局变量*/
time_t start_time;//记录开始时间
time_t t;//上次时间
int period_time;//电话到达的周期
time_t rawtime;//当前时间,以秒计,从1970年1月一日起算
queue tel_wait_que;//电话等待队列
int wait_time_sum = 0;//等待时间
int phone_sum = 0;//电话计数
int phone_service_finished = 0;//电话服务是否全部完成?1:未完成;0:完成
/**题目中所指的电话队列指的不可能是计算机用语中的队列,因为删除的不是总在开头*/
time_t *tel_que;//“电话队列”指针
void init()//初始化
{
int i;
system("clear");
printf("请输入客户服务人员的人数(建议输入5)\n");
scanf("%d", &customer_service_staff_num);
printf("请输入时间限制(建议输入20)