新华东交通大学数据结构课程设计银行模拟系统副本.docx
《新华东交通大学数据结构课程设计银行模拟系统副本.docx》由会员分享,可在线阅读,更多相关《新华东交通大学数据结构课程设计银行模拟系统副本.docx(8页珍藏版)》请在冰豆网上搜索。
![新华东交通大学数据结构课程设计银行模拟系统副本.docx](https://file1.bdocx.com/fileroot1/2022-12/1/50ea4807-0312-4bfa-9090-e5819ef3afe3/50ea4807-0312-4bfa-9090-e5819ef3afe31.gif)
新华东交通大学数据结构课程设计银行模拟系统副本
新华东交通大学数据结构课程设计(银行模拟系统)(副本)-
课程设计(论文)任务书
软件学院XXXX专业12月XX日至12月XX日课程设计(论文)定位:
XXXX培训中心4、课程设计(论文)内容要求:
1。
本课程设计
(1)的目的是让学生掌握抽象数据类型的组织和定义;
(2)使学生掌握数据类型的定义和实现;(3)培养学生组织和分析数据的能力;
(4)培养学生分析和应用基于不同数据结构的算法的能力;(5)提高学生科技论文的写作能力2.基本要求:
每个学生可以选择下列题目之一(打勾)并独立完成课程设计:
□稀疏矩阵运算:
实现稀疏矩阵的输入、输出、加法、减法和乘法运算
□关键路径:
找出至少需要多长时间来完成整个项目以及整个项目中的关键活动
(1)能够输入和存储描述项目的AOE网络;
(1)对于输入的AOE网络,应判断其是否能够顺利进行;
(2)如果项目能够顺利进行,输出完成整个项目至少需要多长时间,以及每个关键活动所附加的两个顶点,最早发生时间和最晚发生时间。
□银行业务模拟:
参见数据结构P683.课程设计论文的写作要求为
(1)按照稿件的规格打印并抄录课程设计报告;
(2)报告分为四个部分:
封面、任务书(本文件)、正文、课程设计经验和参考文献。
学生签名:
日期
课程设计(论文)复习意见
(1)话题分析
(XXXX日期
文本
1,数据结构定义
1。
抽象数据类型
本设计中使用的数据结构ADT定义如下:
ADT队列{
数据对象:
d={ai|ai∈elemset,i=1,2,...,n,n≥0}数据关系:
r1={|ai-1,ai∈d,i=2,...,n}基本操作:
voidinit_Q(队列操作结果:
构造空队列QintQ_empty(队列Q);初始条件:
队列Q中存在
操作结果:
如果Q为空,返回真,否则返回假整数Q_length(队列Q);初始条件:
队列Q有
个操作结果:
返回到队列Q的元素数,即队列长度intgethead_Q(队列Q);初始条件:
队列q有
个操作结果:
队列头元素void_q返回到队列q(队列初始条件:
队列q有
个操作结果:
插入带有元素eq的新队列结束元素队列初始条件:
队列Q有
个操作结果:
删除队列Q的队列头元素}ADTqueue
3
2。
存储结构定义
数据存储结构的c语言定义如下:
typedefint状态;
//-银行排队模拟//事件和事件表typedefstructqcu事件{intoccurtimeint类型;
structQCuevent*next;
}QCuEvent,*EventListwindowtypedef结构elem{intarrivaltime之前的队列元素。
持续时间;
结构QCuElem*next
}QCuElem,*QEptr。
//窗口指针typedef结构{QEptrfront
QEptr后部;
}QCustomerp,*QCupp。
4
3。
基本操作
数据结构的基本操作实现如下:
//基本操作功能
状态顺序插入器(事件列表//按时间顺序将事件插入到事件表中。
//查找窗口队列长度intmincuqueue(qcpq);//查找最短队列窗口
状态队列事件(事件列表//删除第一个事件状态队列(QCUSTOMERRP//初始化窗口队列状态队列(QCUSTOMERRP//进入队列
状态队列(QCUSTOMERRP//删除元素状态集合QHead(QCUSTOMERRPQn,QCUELEM//获取队列中的第一个元素状态队列(QCUSTOMERRPQn));//销毁队列voidptint_qstatus([qcustomerpqcu])。
//打印队列长度无效库_模拟函数();空隙试验([);
2,问题解决过程
1。
问题分解
问题应主要实现以下功能:
1)。
应实现数据输入;
2)。
从各种窗口访问和输出数据;
3)当前窗口中人员分布的动态显示4)存储结构:
队列存储结构
5)实现模拟银行的程序设计,包括每个客户的出发时间和统计,以及窗口排队的可视化模拟。
运行测试通过。
6)测试数据:
1。
需要所有法律数据;2.全部非法数据;3.本地非法数据进行程序测试以确保程序的稳定性。
2。
模块结构
系统主要由2个模块组成。
它们是:
①主程序模块
②队列模块——实现队列抽象数据类型
的模块之间的结构如下:
每个模块相互调用如下:
主程序模块
队列模块
3。
解决方案
每个模块的实施步骤是
(1)。
实施步骤
首先,分析问题需求,划分实施模块,绘制总体流程图,并定义基本数据类型,如结构、队列等。
其次,考虑基本操作,例如开门时间、顾客到达时提供的服务以及顾客离开时的操作。
6
再次,实现上述基本操作所需的具体操作,具体实现每个环节所需的基本操作,即具体编写每个小函数的实现函数;
最后,编写主函数按需调用每个实现并实现操作
(2)。
流程图
开始客户到达
选择服务窗口
是窗口繁忙
队列
服务和扩展无队列空队列以获得客户
窗口空闲处理和不留时间到
结束图-1事件流程图
7
结束输出队列空开始主()客户实现
代码和注释#定义确定1#定义真1#定义假0#定义错误0
8
#定义不可行-1#定义溢出-2
typedefint状态;
//-银行排队模拟//事件和事件表typedefstructqcu事件{intoccurtimeint类型;
structQCuevent*next;
}QCuEvent,*EventListwindowtypedef结构elem{intarrivaltime之前的队列元素。
持续时间;
结构QCuElem*next
}QCuElem,*QEptr。
//窗口指针typedef结构{QEptrfront
QEptr后部;
}QCustomerp,*QCupp。
//主操作功能
9
statuspenday(事件列表//开门状态客户到达//客户到达状态客户部门(事件列表//客户离开无效关闭日期();//基本操作函数
statusorderinser(eventlist//按时间顺序将事件插入事件表intQLength(QcustomerPqn);//查找窗口队列长度intmincuqueue(qcpq);//查找最短队列窗口
状态队列事件(事件列表//删除第一个事件状态队列(QCUSTOMERRP//初始化窗口队列状态队列(QCUSTOMERRP//进入队列
状态队列(QCUSTOMERRP//删除元素状态集合QHead(QCUSTOMERRPQn,QCUELEM//获取队列中的第一个元素状态队列(QCUSTOMERRPQn));//销毁队列voidptint_qstatus([qcustomerpqcu])。
//打印队列长度无效库_模拟函数();空隙试验([);
#include\#include\#include\
intI=0,e=0,counter=0;
intTotalTime=0,CustomerNum=0;//累计客户停留时间,客户数量
10
9积分时间;//关闭时间intwindowsnum=0;//main函数intmain(){EventListev;//事件表QCuEventenQCu=空;OpenForDay(ev,en,Qcu);而(ev->next){en。
NYPe=ev->下一个->NYPe;恩。
出现时间=ev->下一个->出现时间;delfirstevent(ev);if(en。
NType==0)自定义(ev,QCu,en);
else
customerdeparture(ev,QCu,en);ptint_QStatus(Qcu);
}
CloseForDay();
}
//mainfunctionsubfunction
statusopenday(eventlist
printf(\请输入一个随机数种子(或输入0以使用随机种子):
\scanf(\
if(temp==0)srand((无符号)time(null));elsesrand(温度);
printf(\请以分钟为单位输入工作时间):
\scanf(\CloseTime=temp;
TotalTime=0;customernum=0;恩。
出现时间=0;恩。
NType=0;en.next=空;
ev=(EventList)malloc(sizeof(QCuEvent));ev->next=空;OrderInser(ev,en)。
printf(\请输入窗口数(至少一个):
\scanf(\
q=(qcustomerorp*)malloc((windowsnum+1)*sizeof(qcustomerorp));对于(intI=1;iArrivalTime=en。
出现时间;
13
Q->持续时间=持续时间;Q->下一个=空;intI=MinCuqueue(q);[一世;//插入出发事件
entamp.incomingtime=en.incomingtime+durtime;恩泰普。
n类型=I;下一个=空;
if(qLength(q[I))==1)OrderInser(ev,EnTemp);返回“确定”;
}
状态客户部门(eventlist
printf(\出发时间%d\\n\if(en.occuringtime>closetime){destoryqueue(q[I]);
}其他{QCuElem客户;顾客排队(q[I);
//客户停留时间14
totaltime+=en.occuringtime-customer.arrivaltime;Printf(\总时间为%d\\n\if(q[一)。
前台->下一个){客户(q[I);QCuEventenTemp
enTemp。
出现时间=en。
出现时间+客户。
持续时间;恩泰普。
n类型=I;OrderInser(ev,EnTemp);
}
}
返回“确定”;
}
无效关闭日(){printf(\printf(\
printf(\所有客户交易的总时间:
%d分钟\\n\printf(\客户交易数:
%d\\n\
printf(\每人平均处理时间:
%f\\n\printf(\
printf(\
)entamp->ReconTime=en。
出现时间;enteMP->NYPE=en。
NTypeentemp->next=空;如果(!
ev->next){ev->next=entamp;返回“确定”;
}
qtemp=ev。
while(qtemp->next)
entamp->next=qtemp->next;qtemp->next=entamp;返回“确定”;
}
intQLength(QcustomerPqn){
16
QePTrqteMP。
intI=0;
qtemp=qn.front->next;while(qtemp){qtemp=qtemp->next;i++;
}返回I;
}
intMinCuqueue(Qcuppq){intI,min
(I=1,min=1;不精确=p->下一个;免费(p);返回“确定”;
}
状态初始化队列(QCustomerpqn.front->next=空;qn.后=qn.前;返回“确定”;
}
状态编码队列(Qcustomerpqn.rear=Q;返回“确定”;
}
状态十字形队列(Qcustomerp
qtemp=qn.front->next;
Q。
ArrivalTiME=qtemp->ArrivalTiME;18
问持续时间=qtemp->持续时间;qn.front->next=qtemp->next;if(qn.rear==qtemp)qn.rear=qn.front;自由(qteMP);返回“确定”;
}
状态获取QHead(QCustomerpqn,QcuelemQ.Duration=qn.front->next->Duration;返回“确定”;
}
状态设计队列(QcustomerPqn){Qeptrp;
while(qn.front->next){p=qn.front->next;qn.front->next=p->next;免费(p);
}
qn.front->next=NULL;
qn.后=qn.前;
19
返回正常;
}
voidPtint_QStatus(QcustomerpQcu[)){intl;
(intI=1;i