数据结构课程设计银行模拟系统.docx
- 文档编号:9479445
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:123.82KB
数据结构课程设计银行模拟系统.docx
《数据结构课程设计银行模拟系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计银行模拟系统.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构课程设计银行模拟系统
数据结构课程设计报告
班级:
专升本1班
姓名:
杨野
学号:
38号
指导教师:
成绩:
软件工程学院
2011年6月6日
摘要(题目)课题题目是:
客户业务分为两种。
第一种是申请从银行得到一笔资金,即取款或借款。
第二种是向银行投入一笔资金,即存款或还款。
银行有两个服务窗口,相应的有两个队列。
客户到达银行后先排第一个队。
处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。
每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。
目录
1.引言
1.1引言
1.2课题意义
1.3背景和应用领域
2.需求分析
2.1功能需求
2.2数据需求
3.概要设计
3.1简要算法分析
3.2算法流程图
3.3客户服务系统
4.详细设计
4.1调试
4.2测试
5.测试结果
6.调试分析
7.设计体会
8.结束语
参考文献
第一章引言
1.1引言:
随着社会的迅速发展,人们的生活水平越来越高,人们的经济越来越多,所以人们对自己的资产保护也越来越注重,这便产生了银行,而随着人口的迅速增长,存钱的人也越来越多,因此设计一个程序是存钱和取钱的时间缩短是非常重要的,设计一个好的程序,使之能更好的方便我们的生活。
在开发这个银行系统时,用到了c语言里的函数调用,结构体等,并用基本对话框的一些控件对之进行实现。
使之完成了一些功能。
报告将会对银行模拟系统程序的一些功能模块进行具体的分析,写出概要设计方案,详细设计,各个功能的流程图,以及调试分析等,从各个方面具体的对程序进行了分析。
1.2课题意义
银行系统是非常之重要的,对于我们的生活将有巨大的作用,所以我们学习是更应该努力学,以对银行取款信息有充分的了解,并进行编程实现。
通过程序实践来巩固运用所学的专业知识,提高我们的计算机应用技能,提高编程能力,加深对相关内容的理解,拓宽知识面,培养我们的创新精神和实践能力。
1.3背景和应用领域
随着社会的迅速发展,人们的生活水平越来越高,人们的经济越来越多,所以人们对自己的资产保护也越来越注重,这便产生了银行,而随着人口的迅速增长,存钱的人也越来越多,因此设计一个程序是存钱和取钱的时间缩短是非常重要的,设计一个好的程序,使之能更好的方便我们的生活。
它的领域使用在人们快速取款或存款当中。
第二章需求分析:
2.1功能需求
设计一个简单的银行业务模拟程序,主要实现的功能是使每个存款或取款的窗口都不是空闲的,保持每个窗口都在工作。
即是实现最大的工作效率。
1本题需要求客户在银行内逗留的平均时间,用客户逗留除以客户总数即可
2本题涉及到队列的建立、初始化和插入,队列的关键字为整数,处理第一、二种业务分别用负数和正数表示。
3对客户进行编号用来统计客户总数,同时在队列元素的循环处理中更新总的逗留时间。
4演示程序以用户和计算机的对话方式执行,即在计算机终端显示的“提示信息”下,输入数据进行测试。
5最后对所得结果进行简要分析。
设计一个简单的银行业务模拟程序,主要实现的功能是使每个存款或取款的窗口都不是空闲的,保持每个窗口都在工作。
即是实现最大的工作效率。
2.2数据需求
银行业务模拟程序主要用于存取的各种信息,所包含的有排队的人数扽很多重要数据。
第三章.概要设计:
3.1简要算法分析
本程序包含两个模块:
1)主程序模块:
Voidmain(){
初始化:
do{
接受命令;
处理命令
}while(“命令”!
=“退出”);
2)队列单元模块—实现队列的抽象数据类型
各模块之间的调用关系。
1队列的抽象数据类型定义
ADTQueue{
数据对象:
D={ai∈Elemseti=1,2,…,n,n≥0}
数据关系:
R1={
约定其中a1端为队列头,an端为队列尾.
基本操作:
InitQueue(&Q)
操作结果:
构造一个空队列Q
QueueEmpty(Q)
操作结果:
若Q为空队列,则返回TRUE,否则FALSE
GetHead(Q&q)EnQueue(&Qq)
操作结果:
插入元素q为Q的新的队尾素
DeQueue(&Q&q);操作结果删除Q的队头元素,并用q返回其值。
3.2算法流程图
3.3客户服务系统
客户服务模块包含两个子系统:
取款系统和存款系统。
客户服务功能图模块如图2
图2
取款系统和存款系统:
银行通过判断用户业务类型进行业务办理。
3.4数据管理系统
数据管理系统模块包含两个子系统:
数据整理系统和数据管理系统。
数据管理功能图模块如图。
数据采集系统:
收集客户信息包括存取款的资金数目
数据整理系统:
更新银行现存资金总额、客户的逗留时间、已办理的客户总数。
3.5简要算法
为了实现上述程序功能,需要定义单链表的抽象数据类型如下:
链表结构体:
structAction{
charname[50];//客户名
doubledeposit;//存取款金额
intsloveTime;//处理需要的时间
intarriveTime;//到达时间,距开业的分钟数
intgrap;//与前一个客户的间隔时间
intwaitTime;//总的等待时间
};
typedefstructNode{
Actiondata;
Node*next;
}LinkNode,*LinkList;
队列结构体如下:
typedefstructNode{
Actiondata;
Node*next;
}LinkNode,*LinkList;
typedefstruct
{
Node*front;
Node*rear;
}LinkQueue,*Queue;
3.6函数调用
1.主函数main
2.进栈函数push
3.出栈函数pop
4.查找和处理函数service*searchAndDel
5.到达函数arrive
6.存款函数putMoney
7.群款函数getMoney
8.随机函数rand
第四章调试与测试:
4.1调试
编制银行业务模拟程序时,用到了很多语句,如队列,指针,函数调用等等许多程序。
由于自己的知识有限且学习的也不是很多,总的来说还是很缺乏编程知识,经过我的努力最后还是运行成功。
4.2测试
银行业务模拟程序,在编译的时候,由于对话框之间的衔接不太懂,所以并没有实现应有的结果。
但后来还是通过学生,上网查询等多种方法,终于弄清了对话框之间的衔接和一些基本算法。
最终也运行出来了。
第五章.测试结果:
:
第六章.设计体会:
经过了两周的数据结构课程设计,至今我仍感受颇深,从选题到定稿,从理论到实践,在短短的两个星期的日子里,我虽然吃了很多苦,但我学到了很多很多以前不知道的的东西,同时不仅复习和巩固了以前所学过的知识,而且看到了和学到了很多在书本上所没有学到过的知识,使我懂得了很多,理论必须和实践永远的结合起来,才能有质的飞跃,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到过很多问题,困难很多,但我一直坚持着,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,现在觉得一定要把以前所学过的知识重新温故。
虽然我的算法不够完好,还有许多问题,但我一定会调试成功的。
第七章结束语:
时间过的很快,在不知不觉中,课程设计也接近了尾声.说起课程设计,我认为最重要的就是做好设计的预习,并且认真的去复习以前的知识和查各种资料同时认真的研究老师给的题目,老师对题目的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计来才会有底,有信心。
课程设计是一门培养学生综合运用所学知识,发现,提出,分析和解决实际问题的学科,它能充分锻炼我们的动手能力,时我们实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
我想这次不只是一次简单的课程设计,更体现了数据结构算法和生活的紧密联系。
生活中也存在许多与数据结构有关联的事情,它让人不得不深思,这一个学期的学习,这两年来的大学学习生涯,自己究竟学会了什么,掌握了多少,我也不清楚,我以前也疯狂的玩过,现在才知道自己时多么的缺乏知识,大多数问题自己不能解决,感觉将来自己是否能胜任以后作编译人员的职位。
我想大家都心里都有很多的感触。
对于自己,我想我已经认识到了自己的不足,在今后的学习过程中,我一定以最好的心态去对待,以最好的面貌来迎接大三的软件专业课程,并且经常上机调试,坚持理论与实践相结合。
相信自己将会有很大的进步。
。
参考文献
【1】严蔚敏,吴伟民数据结构(C语言版)清华大学出版社
【2】谭浩强C程序设计(第三版)清华大学出版社
【3】
附录源代码:
#include
#include
usingnamespacestd;
inttotal;//初始时银行现存资金总额
intcloseTime;//营业结束时间
intarriveTime;//两个到达事件之间的间隔上限
intdealTime;//客户之间交易的时间上限
intdealMoney=5000;//交易额上限
intcurrentTime=0;//当前时间
inttotalTime=0;//客户逗留总时间
intcounter=0;//客户总数
intnumber=1;//初始客户序列号+
structservice
{
intnum;//客户号
stringtype;//到达或离开
intbeginTime;
intendTime;
intmoney;//正数为存款,负数为取款
service*next;
};
structqueue
{//队列
service*head;
service*rear;
};
voidpush(queue&q,intd)
{//插入元素d为Q的新的队尾元素
service*temp=newservice;
temp->money=d;
temp->next=NULL;
if(NULL==q.head)
{//队列为空,初始化
q.head=temp;
q.rear=temp;
}//if
else
{//队列不为空,插入元素d
q.rear->next=temp;
q.rear=q.rear->next;
}//else
}
voidpop(queue&q)
{//若队列不空,出对列函数
service*temp;
temp=q.head;
if(NULL==q.head->next)
q.head=q.rear=NULL;
else
q.head=q.head->next;
deletetemp;
}
service*front(queue&q)
{//返回队首元素
returnq.head;
}
service*back(queue&q)
{//返回队尾元素
returnq.rear;
}
service*searchAndDel(queue&q,intm)
{//在对列中寻找可处理元素
service*sign=q.head;//标记头节点
service*temp;
while(NULL!
=q.head)
{
if((-(q.head->money)) {//队首元素可以处理 if(q.head==q.rear) { temp=q.head; q.head=q.rear=NULL; returntemp; }//if else {//队首元素出列 temp=q.head; q.head=q.head->next;//首节点后移一位,返回原首节点 returntemp; }//else }//while else {//队首元首不能被处理 if(q.head==q.rear){} else {//首节点移到队列尾部 q.rear->next=q.head; q.rear=q.rear->next; q.head=q.head->next; q.rear->next=NULL; }//else }//else if(q.head==sign)//队列循环一周时停止 returnNULL; } returnNULL; } boolstate=1;//用于判断是否有窗口在处理 intcurrentTimeOfDeal=0; inttheArriveTime=0; queueeq;//事件队列 queuefq;//队列一 queuesq;//对列二 //初始化三个队列 voidarrive() {/*"到达"函数随机产生顾客,进入队列一 产生到达事件进入事件队列*/ push(fq,(rand()%(2*dealMoney)-dealMoney));//随机产生顾客加入第一队列 back(fq)->beginTime=currentTime; back(fq)->num=number; push(eq,(back(fq)->money));//将产生事件加入事件队列 back(eq)->beginTime=currentTime; back(eq)->type="到达"; back(eq)->num=number; ++number; } voidputMoney() {//存款函数 total+=front(fq)->money;//更新资金总额 push(eq,front(fq)->money);//加入事件队列离开 back(eq)->type="离开"; back(eq)->num=front(fq)->num; back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1); ++counter;//更新客户总数 totalTime+=(back(eq)->endTime-front(fq)->beginTime);//更新逗留时间 pop(fq);//删除第一队列第一个业务 currentTimeOfDeal=back(eq)->endTime; state=0; } voidgetMoney() {//取款函数 if((-fq.head->money)>total) {//资金短缺加入第二队列 push(sq,front(fq)->money); back(sq)->beginTime=front(fq)->beginTime; back(sq)->num=front(fq)->num; pop(fq); }//if else { total+=back(fq)->money; push(eq,front(fq)->money);//加入事件队列离开 back(eq)->type="离开"; back(eq)->num=front(fq)->num; back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1); back(eq)->beginTime=0; currentTimeOfDeal=back(eq)->endTime; ++counter;//更新客户总数 totalTime+=(back(eq)->endTime-back(fq)->beginTime);//更新逗留时间 pop(fq);//删除第一队列第一个业务 state=0; }//else } service*temped; intrandomTemp; voidfindAndDeal() {//在对列中寻找可处理元素,对其进行处理 while((temped=searchAndDel(sq,total))&&NULL! =temped) {//查找可处理取款 total+=temped->money;//更新资金总额 push(eq,temped->money);//加入事件队列训离开 back(eq)->type="离开"; back(eq)->num=temped->num; randomTemp=rand()%dealTime+1; back(eq)->endTime=currentTime+randomTemp; currentTimeOfDeal+=randomTemp; ++counter;//更新客户总数 totalTime+=(back(eq)->endTime-temped->beginTime);//更新逗留时间 deletetemped;//删除节点 temped=NULL; } state=0; } intmain() { printf("********************************************\n"); printf("**\n"); printf("*欢迎进入银行模拟系统*\n"); printf("**\n"); printf("********************************************\n"); printf("1.开始模拟0.退出\n"); intn; scanf("%d",&n); while(n==1) { srand(time(NULL));//初始化随机函数 printf("输入银行的初始存款: \n"); scanf("%d",&total); printf("输入银行的营业时间: \n"); scanf("%d",&closeTime); printf("输入最大到达时间间隔: \n"); scanf("%d",&arriveTime); printf("输入最大的处理时间: \n"); scanf("%d",&dealTime); theArriveTime+=rand()%arriveTime+1;//首次到达时间 while(currentTime { ++currentTime; if(currentTimeOfDeal if(currentTimeOfDeal==currentTime)state=1; if(currentTime==theArriveTime)//到达事件 { arrive(); theArriveTime+=rand()%arriveTime+1; }//if if(1==state&&NULL! =fq.head) { if(fq.head->money>=0) { putMoney(); findAndDeal(); }//if else getMoney(); }//if } cout< while(NULL! =eq.head)//清除事件队列 { if(eq.head->type=="离开") cout< if(eq.head->type=="到达") cout< pop(eq); } cout<<"未处理客户: "<<""< while(NULL! =fq.head) { totalTime+=(closeTime-fq.head->beginTime);//更新结束时第一队列中未处理的客户 cout< ++counter; pop(fq); }//while cout<<"客户逗留平均时间为: "< cout<<"银行当前余额: "< break; }//while(n==1) return0; }//maim()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 银行 模拟 系统