Compare commits

..

No commits in common. 'ca3d3de4c6fdcb31893a490033d0131e5b13568e' and '629352ced85f55fa03c92eb4d5e9b52d4a94b8a4' have entirely different histories.

@ -4,7 +4,6 @@
刘彩月,刘梦琦,金雨佳,赵亚璇
摘要:针对银行营业的工作记录和计算一天中客户在银行的逗留时间的问题。实现了模拟客户排队,窗口,管理客户,队列的功能。为了有效的存储和处理客户(客户到达,客户离开)采用有序表,其主要操作是插入和删除事件,用一个单链表表示。为了有效存储和处理窗口( 客户到达时间,离开时间)采用了队列。为了解决客户找到最短等待队列使用了排序和插入算法为了解决客户离开事件使用了删除算法。删除和插入的算法效率为On。针对银行开门关门营业窗口数目客户到达时间采用人机交互。完成了保存银行营业的工作记录储存客户的到达时间和离开时间显示出在某一天整个银行系统中客户在银行逗留的平均时间。
项目开发过程中采用Kanban (看板)进行任务管理和分工协作并使用Git对程序代码和文档进行版本管理。
任务分工及完成情况:
|任务|设计|开发|测试|文档|
@ -28,56 +27,35 @@
## 1.1问题描述
银行有n个窗口对外接待客户从早晨银行开门起不断有客户进入银行。由于每个窗口在某时刻只能接待一个客户因此在客户人多时需分别在各个窗口前排队。对于刚进入银行的客户如果某个窗口的营业员正在空闲则可上前办理业务反之若n个窗口均有客户正在办理业务新来的客户便会排在人数最少的队伍后面。
设计一个银行业务模拟系统,模拟银行的业务运行并计算一天中客户在银行逗留的平均时间。
1通过人机互交的方式设定程序所需要的参数银行的开门时间和关门时间营业窗口数目。
2客户的到达时间可通过人机互交文件导入或随机产生的方式输入。
3保存银行营业的工作记录储存客户的到达时间和离开时间。
4显示出在某一天整个银行系统中客户在银行逗留的平均时间。
要求系统运行正常,功能完整;数据结构使用得当,算法有较高的效率;代码规范,可读性高,结构清晰,具有一定的健壮性,可靠性和可维护性。
设计一个银行业务模拟系统,模拟银行的业务运行并计算一天中客户在银行逗留的平均时间。通过人机互交的方式设定程序所需要的参数:银行的开门时间和关门时间,营业窗口数目。客户的到达时间可通过人机互交,文件导入或随机产生的方式输入。保存银行营业的工作记录,储存客户的到达时间和离开时间。显示出在某一天整个银行系统中客户在银行逗留的平均时间。要求系统运行正常,功能完整;数据结构使用得当,算法有较高的效率;代码规范,可读性高,结构清晰,具有一定的健壮性,可靠性和可维护性。
## 1.2可行性分析
运用了单链表和链队列,运用了排序,插入和删除的算法。
客户排队的过程是一个按照到达时间先到先接受服务的过程这一过程可以通过队列实现。n个不同的窗口对应n个队列队列中每一个元素对应一个客户。
算法中处理的事件有两类:一类是客户到来事件,另一类是客户离开事件。客户到来事件发生的时刻随客户到来自然形成,客户到来后,使用排序算法找到最短的等待队列,将客户插入队列;客户离开事件发生的时刻由银行窗口为其办理业务的完成时间决定,业务办理完成后,客户从等待队列中出队,窗口为下一个客户(如果存在的话)服务。
客户排队的过程是一个按照到达时间先到先接受服务的过程这一过程可以通过队列实现。n个不同的窗口对应n个队列队列中每一个元素对应一个客户。算法中处理的事件有两类一类是客户到来事件另一类是客户离开事件。客户到来事件发生的时刻随客户到来自然形成客户到来后使用排序算法找到最短的等待队列将客户插入队列客户离开事件发生的时刻由银行窗口为其办理业务的完成时间决定业务办理完成后客户从等待队列中出队窗口为下一个客户如果存在的话服务。
本项目涉及的对象主要包括客户、银行窗口,可以设计两个数据结构实现客户和窗口的功能。此外,管理客户、队列的功能可以单独实现(类似银行进门处的接待员,引导客户在哪里排队)。
## 1.3 需求分析
### 1输入和输出
主要输入:银行的营业时间
主要输出:根据随机数输出实时银行运行状态;输出在银行营业时间内客户在银行逗留的平均时间。
随机数:
1客户办理业务的时间当前客户
2当前客户和下一个客户到达的间隔时间
确定系统的主要输入和输出,如可以设定的参数,数据文件等,明确其主要作用。
### 2数据字典
描述系统中需要处理的所有数据包含的具体信息。例如:
OccurTime表示事件发生的时间
NType表示客户的状态办理业务中或离开
ArrivalTime表示客户到达时间
CustomerNum记录客户的数目
CloseTime银行关门时间
durtime客户办理业务的时间
每个客户在银行的等待时间取决于队列里前一个节点的离开时间,而不是自己的到达时间+服务时间即en.OccurTime + intertime;
在银行营业时间内总的办理业务的时间TotalTime += en.OccurTime - customer.ArrivalTime;
学生 = 学号 + 姓名 + 成绩
### 3数据文件
1当前客户的柜台被服务时间当前客户和下一个客户到达的间隔时间用随机产生的方式输入。
2保存银行营业的工作记录储存客户的到达时间和离开时间。
3显示出在某一天整个银行系统中客户在银行逗留的平均时间。
系统中需要读取xx数据文件以获取xx数据或者需要导出xx数据。举例说明xx数据文件的具体格式。
### 4参数设定
提示信息:请输入银行的营业时间(min)
用户输入:银行的营业时间(min)
系统开始运行时,需要设置的参数。可以用户手册的形式给出设定参数的过程,如系统提示信息和用户输入等。
### 5链表功能
该功能的主要作用是:给客户分配银行窗口
### 5XX功能
其他具体功能。
首先简要说明该功能的主要作用,可以用户手册的形式给出系统提示信息、用户输入和系统输出等。
### 6链队列功能
该功能的主要作用是是:让客户有序高效办理业务
### 6XX功能
其他功能逐项列出。
@ -147,144 +125,11 @@ void bubble_sort(T a[], int n)
# 4.系统测试
描述测试的思路和方法。比如,先用小数据量进行测试,再用真实数据进行测试。
测试应考虑到输入数据的特殊情况。
给出若干测试用例,包括输入、预期结果、运行结果或是否通过测试。运行结果和预期结果一致,为通过测试。
```
请输入银行的营业时间(min)30
********action********
一个新客户在银行营业 0min后进来办理业务花费了25min下一个客户过了 1min后进来
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 0 个客户:--Is empty.
窗口 3 有 0 个客户:--Is empty.
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:1,Event Type:0
OccurTime:25,Event Type:1
********action********
一个新客户在银行营业 1min后进来办理业务花费了 6min下一个客户过了 7min后进来
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 1 个客户:(到达时刻 1 min 办理业务需要花费 6 min)
窗口 3 有 0 个客户:--Is empty.
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:7,Event Type:2
OccurTime:8,Event Type:0
OccurTime:25,Event Type:1
********action********
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 0 个客户:--Is empty.
窗口 3 有 0 个客户:--Is empty.
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:8,Event Type:0
OccurTime:25,Event Type:1
********action********
一个新客户在银行营业 8min后进来办理业务花费了 6min下一个客户过了 7min后进来
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 1 个客户:(到达时刻 8 min 办理业务需要花费 6 min)
窗口 3 有 0 个客户:--Is empty.
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:14,Event Type:2
OccurTime:15,Event Type:0
OccurTime:25,Event Type:1
********action********
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 0 个客户:--Is empty.
窗口 3 有 0 个客户:--Is empty.
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:15,Event Type:0
OccurTime:25,Event Type:1
********action********
一个新客户在银行营业15min后进来办理业务花费了25min下一个客户过了 0min后进来
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 1 个客户:(到达时刻 15 min 办理业务需要花费 25 min)
窗口 3 有 0 个客户:--Is empty.
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:15,Event Type:0
OccurTime:25,Event Type:1
OccurTime:40,Event Type:2
********action********
一个新客户在银行营业15min后进来办理业务花费了 5min下一个客户过了 7min后进来
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 1 个客户:(到达时刻 15 min 办理业务需要花费 25 min)
窗口 3 有 1 个客户:(到达时刻 15 min 办理业务需要花费 5 min)
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:20,Event Type:3
OccurTime:22,Event Type:0
OccurTime:25,Event Type:1
OccurTime:40,Event Type:2
********action********
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 1 个客户:(到达时刻 15 min 办理业务需要花费 25 min)
窗口 3 有 0 个客户:--Is empty.
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:22,Event Type:0
OccurTime:25,Event Type:1
OccurTime:40,Event Type:2
********action********
一个新客户在银行营业22min后进来办理业务花费了13min下一个客户过了 3min后进来
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 1 个客户:(到达时刻 15 min 办理业务需要花费 25 min)
窗口 3 有 1 个客户:(到达时刻 22 min 办理业务需要花费 13 min)
窗口 4 有 0 个客户:--Is empty.
Current Eventlist is:
OccurTime:25,Event Type:0
OccurTime:25,Event Type:1
OccurTime:35,Event Type:3
OccurTime:40,Event Type:2
********action********
窗口 1 有 1 个客户:(到达时刻 0 min 办理业务需要花费 25 min)
窗口 2 有 1 个客户:(到达时刻 15 min 办理业务需要花费 25 min)
窗口 3 有 1 个客户:(到达时刻 22 min 办理业务需要花费 13 min)
窗口 4 有 1 个客户:(到达时刻 25 min 办理业务需要花费 27 min)
Current Eventlist is:
OccurTime:25,Event Type:1
OccurTime:35,Event Type:3
OccurTime:40,Event Type:2
OccurTime:52,Event Type:4
********action********
窗口 1 有 0 个客户:--Is empty.
窗口 2 有 1 个客户:(到达时刻 15 min 办理业务需要花费 25 min)
窗口 3 有 1 个客户:(到达时刻 22 min 办理业务需要花费 13 min)
窗口 4 有 1 个客户:(到达时刻 25 min 办理业务需要花费 27 min)
Current Eventlist is:
OccurTime:35,Event Type:3
OccurTime:40,Event Type:2
OccurTime:52,Event Type:4
********action********
窗口 1 有 0 个客户:--Is empty.
窗口 2 有 1 个客户:(到达时刻 15 min 办理业务需要花费 25 min)
Current Eventlist is:
List is empty.
The Average Time is 15.285714
```
# 5. 总结
概况项目和完成情况。

@ -72,9 +72,10 @@ Status QueueTraverse(LinkQueue Q);//遍历队列Q 
/*
1
2
+*/
1
2
2便
+*/
int main()
{

Binary file not shown.
Loading…
Cancel
Save