|
|
@ -85,48 +85,9 @@ durtime客户办理业务的时间;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 2.1 概要设计
|
|
|
|
## 2.1 概要设计
|
|
|
|
#### 主程序的流程
|
|
|
|
系统划分为几个模块,可以画模块图。
|
|
|
|
主程序先是让外部进行测试数据输入,待测试数据输入完后,执行银行业务模拟系统,产生客户逗留平均时间。
|
|
|
|
逐个说明每个模块的功能(输入、输出、做什么,这里不写怎么做)。
|
|
|
|
###### 其具体操作如下:
|
|
|
|
|
|
|
|
1.以单链表表示模拟客户排队,窗口,管理客户,队列的功能。
|
|
|
|
|
|
|
|
2.以有序表的插入和删除操作来存储和处理客户到达和客户离开两种情况(客户)。
|
|
|
|
|
|
|
|
3.用队列来有效存储和处理客户到达时间和离开时间(窗口)。
|
|
|
|
|
|
|
|
4.以队列的排序和插入算法解决客户找到最短等待队列。
|
|
|
|
|
|
|
|
5.使用了删除算法来解决客户的离开事件,删除和插入的算法效率为O(n)。
|
|
|
|
|
|
|
|
6.采用人机交互来针对银行开门,关门,营业窗口数目,客户到达时间等问题。
|
|
|
|
|
|
|
|
7.保存银行营业的工作记录,储存客户的到达时间和离开时间。
|
|
|
|
|
|
|
|
8.显示出在某一天整个银行系统中客户在银行逗留的平均时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###### 以上项目步骤可用代码大体分为以下三个模块:
|
|
|
|
|
|
|
|
`````
|
|
|
|
|
|
|
|
(1)客户
|
|
|
|
|
|
|
|
void Bank_Simulation(int CloseTime);//银行业务模拟,统计一天内客户在银行逗留的平均时间
|
|
|
|
|
|
|
|
int cmp(Event a, Event b);//比较事件发生先后
|
|
|
|
|
|
|
|
void OpenForDay();//银行开门
|
|
|
|
|
|
|
|
void OrderInsert(EventList L, Event en, int(*cmp)(Event a, Event b));//插入事件
|
|
|
|
|
|
|
|
void CustomerArrived();//客户进门
|
|
|
|
|
|
|
|
void CustomerDepature();//客户离开
|
|
|
|
|
|
|
|
int Minimum(LinkQueue Q[5]);//求长度最短队列
|
|
|
|
|
|
|
|
(2)链表
|
|
|
|
|
|
|
|
Status InitList(LinkList& L);//链表初始化
|
|
|
|
|
|
|
|
Status ListInsert_L(LinkList& L, int i, ElemType e);//在第i个位置之前插入元素e
|
|
|
|
|
|
|
|
Status ListEmpty(LinkList L);//判断链表是否为空
|
|
|
|
|
|
|
|
Status DelFirst(LinkList L, LNode*& q);//删除链表中第一个结点并以q返回
|
|
|
|
|
|
|
|
LNode* GetHead(LinkList L);//返回链表头结点
|
|
|
|
|
|
|
|
ElemType GetCurElem(LNode* p);//已知p指向线性链表中的一个结点,返回p所指结点中元素的值
|
|
|
|
|
|
|
|
void PrintEventList();//打印事件链表
|
|
|
|
|
|
|
|
Status ListTraverse(LinkList& L);//遍历链表
|
|
|
|
|
|
|
|
(3)链队列
|
|
|
|
|
|
|
|
Status InitQueue(LinkQueue& Q);//链队列的初始化
|
|
|
|
|
|
|
|
Status EnQueue(LinkQueue& Q, QElemType e);//入队
|
|
|
|
|
|
|
|
Status DeQueue(LinkQueue& Q, QElemType& e);//出队
|
|
|
|
|
|
|
|
int QueueLength(LinkQueue Q);//返回队列的长度
|
|
|
|
|
|
|
|
Status GetHead(LinkQueue Q, QElemType& e);//获取队头元素 注:由于参数个数不同,发生函数重载
|
|
|
|
|
|
|
|
Status QueueEmpty(LinkQueue Q);//判断队列是否为空
|
|
|
|
|
|
|
|
void PrintQueue();//打印队列
|
|
|
|
|
|
|
|
Status QueueTraverse(LinkQueue Q);//遍历队列Q
|
|
|
|
|
|
|
|
```````
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 2.2 数据结构设计
|
|
|
|
## 2.2 数据结构设计
|
|
|
|
首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
|
首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
|
|
|
@ -165,7 +126,7 @@ E data; // 数据元素
|
|
|
|
LNode *next; // 指向下一个结点的指针
|
|
|
|
LNode *next; // 指向下一个结点的指针
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
````
|
|
|
|
|
|
|
|
|
|
|
|
对该数据结构的特点进行分析。
|
|
|
|
对该数据结构的特点进行分析。
|
|
|
|
|
|
|
|
|
|
|
@ -333,7 +294,7 @@ The Average Time is 15.285714
|
|
|
|
成员(1)刘彩月:
|
|
|
|
成员(1)刘彩月:
|
|
|
|
经过这次数据结构的实训,我认识到了数据结构和生活应用的联系。用数据结构中的队列和单链表的知识,可以模拟解决银行的排队问题。同时我也感受到了个人技术和团队合作的重要性,在学习数据结构的同时,我应该联合生活中的一些具体的问题,联系具体问题来巩固数据结构的相关知识;通过数据结构解决生活中的相关问题。努力提高自己的个人技术,提高自己的编程能力。良好的团队合作往往可以达到事半功倍的效果,我还应该注重团队合作的重要性。和队员之间相互合作,相互信任等都是团队合作中最基础的。
|
|
|
|
经过这次数据结构的实训,我认识到了数据结构和生活应用的联系。用数据结构中的队列和单链表的知识,可以模拟解决银行的排队问题。同时我也感受到了个人技术和团队合作的重要性,在学习数据结构的同时,我应该联合生活中的一些具体的问题,联系具体问题来巩固数据结构的相关知识;通过数据结构解决生活中的相关问题。努力提高自己的个人技术,提高自己的编程能力。良好的团队合作往往可以达到事半功倍的效果,我还应该注重团队合作的重要性。和队员之间相互合作,相互信任等都是团队合作中最基础的。
|
|
|
|
成员(2)金雨佳:
|
|
|
|
成员(2)金雨佳:
|
|
|
|
成员(3)赵亚璇:在项目的前期准备阶段,大家一起讨论,跟随课程的推进,使用课程中学到的各种知识,将整个项目的架构逐渐搭建起来,层次和逻辑也越来越清晰。在这一阶段时间,学习的过程虽然不容易,但确实学到了不少实用的知识。在运用相关框架进行实践开发的过程中,也遇到了各种各样的问题,通过查找资料和不断的尝试也都逐一解决了,这一过程自己的能力也得到了锻炼,有不错的成就感。
|
|
|
|
成员(3)赵亚璇:
|
|
|
|
成员(4)刘梦琦:
|
|
|
|
成员(4)刘梦琦:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|