数据结构课程设计银行模拟系统

上传人:xian****hua 文档编号:138026856 上传时间:2022-08-19 格式:DOC 页数:22 大小:432KB
收藏 版权申诉 举报 下载
数据结构课程设计银行模拟系统_第1页
第1页 / 共22页
数据结构课程设计银行模拟系统_第2页
第2页 / 共22页
数据结构课程设计银行模拟系统_第3页
第3页 / 共22页
资源描述:

《数据结构课程设计银行模拟系统》由会员分享,可在线阅读,更多相关《数据结构课程设计银行模拟系统(22页珍藏版)》请在装配图网上搜索。

1、数据结构课程设计报告班 级:软件092班姓 名:余祖彬学 号: 34号指导教师:董跃华成 绩: 信息工程学院 2011 年 6月 6日 摘要(题目) 课题题目是:客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应的有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重

2、新排到第二个队列的队尾。 目录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语言里的函

3、数调用,结构体等,并用基本对话框的一些控件对之进行实现。使之完成了一些功能。报告将会对银行模拟系统程序的一些功能模块进行具体的分析,写出概要设计方案,详细设计,各个功能的流程图,以及调试分析等,从各个方面具体的对程序进行了分析。1.2课题意义银行系统是非常之重要的,对于我们的生活将有巨大的作用,所以我们学习是更应该努力学,以对银行取款信息有充分的了解,并进行编程实现。通过程序实践来巩固运用所学的专业知识,提高我们的计算机应用技能,提高编程能力, 加深对相关内容的理解,拓宽知识面,培养我们的创新精神和实践能力。1.3背景和应用领域 随着社会的迅速发展,人们的生活水平越来越高,人们的经济越来越多,

4、所以人们对自己的资产保护也越来越注重,这便产生了银行,而随着人口的迅速增长,存钱的人也越来越多,因此设计一个程序是存钱和取钱的时间缩短是非常重要的,设计一个好的程序,使之能更好的方便我们的生活。它的领域使用在人们快速取款或存款当中。第二章 需求分析:2.1 功能需求设计一个简单的银行业务模拟程序,主要实现的功能是使每个存款或取款的窗口都不是空闲的,保持每个窗口都在工作。即是实现最大的工作效率。1本题需要求客户在银行内逗留的平均时间,用客户逗留除以客户总数即可2本题涉及到队列的建立、初始化和插入,队列的关键字为整数,处理 第一、二种业务分别用负数和正数表示。3 对客户进行编号用来统计客户总数,同

5、时在队列元素的循环处理中更新总的逗留时间。4演示程序以用户和计算机的对话方式执行,即在计算机终端显示的“提示信息”下,输入数据进行测试。5 最后对所得结果进行简要分析。设计一个简单的银行业务模拟程序,主要实现的功能是使每个存款或取款的窗口都不是空闲的,保持每个窗口都在工作。即是实现最大的工作效率。2.2数据需求银行业务模拟程序主要用于存取的各种信息,所包含的有排队的人数扽很多重要数据。 第三章.概要设计:3.1简要算法分析本程序包含两个模块:1)主程序模块:Void main()初始化:do 接受命令;处理命令while(“命令”!=“退出”);2)队列单元模块实现队列的抽象数据类型各模块之间

6、的调用关系。 1队列的抽象数据类型定义ADT Queue 数据对象:D=aiElemset i=1,2,n,n0 数据关系:R1= ai-1 aiD,i=2, ,n 约定其中a1端为队列头,an端为队列尾. 基本操作: Init Queue(&Q) 操作结果:构造一个空队列Q QueueEmpty(Q) 操作结果:若Q为空队列,则返回TRUE,否则FALSE GetHead(Q &q) EnQueue(&Q q) 操作结果:插入元素q为Q的新的队尾素 DeQueue(&Q &q);操作结果删除Q的队头元素,并用q返回其值。3.2算法流程图输入初始存款A和营业时间T建立队列初始客户序列号客户取款

7、?量!未定义的书签,A111111AAAAA处理后离开并更新资金和当前时间插入队列2处理还款客户并更新总资金和当前时间顺序查找可处理的元素输出总时间和处理的总客户数结束开始银行模拟系统客户服务系统数据管理系统取款系统存款系统数据采集数据整理存款系统客户服务系统3.3客户服务系统 客户服务 模块包含两个子系统:取款系统和存款系统。 客户服务功能图模块如图2取款系统客户服务系统取款系统存款系统 图2取款系统和存款系统:银行通过判断用户业务类型进行业务办理。3.4数据管理系统 数据管理系统模块包含两个子系统:数据整理系统和数据管理系统。 数据管理功能图模块如图。数据管理系统数据采集数据整理 数据采集

8、系统:收集客户信息包括存取款的资金数目数据整理系统:更新银行现存资金总额、客户的逗留时间、已办理的客户总数。3.5 简要算法为了实现上述程序功能,需要定义单链表的抽象数据类型如下:链表结构体:struct Actionchar name50;/客户名double deposit ;/存取款金额int sloveTime;/处理需要的时间int arriveTime;/到达时间,距开业的分钟数int grap;/与前一个客户的间隔时间int waitTime;/总的等待时间;typedef struct NodeAction data;Node* next;LinkNode,*LinkList;

9、队列结构体如下:typedef struct NodeAction data;Node* next;LinkNode,*LinkList;typedef structNode *front;Node *rear;LinkQueue,*Queue;3.6函数调用1.主函数 main2.进栈函数push3.出栈函数pop4.查找和处理函数service* searchAndDel5.到达函数arrive6.存款函数putMoney7.群款函数getMoney8.随机函数rand第四章 调试与测试:4.1 调试编制银行业务模拟程序时,用到了很多语句,如队列,指针,函数调用等等许多程序。由于自己的知识

10、有限且学习的也不是很多,总的来说还是很缺乏编程知识,经过我的努力最后还是运行成功。 4.2 测试银行业务模拟程序,在编译的时候,由于对话框之间的衔接不太懂,所以并没有实现应有的结果。但后来还是通过学生,上网查询等多种方法,终于弄清了对话框之间的衔接和一些基本算法。最终也运行出来了。 第五章测试结果:第六章.设计体会:经过了两周的数据结构课程设计,至今我仍感受颇深,从选题到定稿,从理论到实践,在短短的两个星期的日子里,我虽然吃了很多苦,但我学到了很多很多以前不知道的的东西,同时不仅复习和巩固了以前所学过的知识,而且看到了和学到了很多在书本上所没有学到过的知识,使我懂得了很多,理论必须和实践永远的

11、结合起来,才能有质的飞跃,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到过很多问题,困难很多,但我一直坚持着,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,现在觉得一定要把以前所学过的知识重新温故。虽然我的算法不够完好,还有许多问题,但我一定会调试成功的。第七章 结束语:时间过的很快,在不知不觉中,课程设计也接近了尾声.说起课程设计,我认为最重要的就是做好设计的预习,并且认真的去复习以前的知识和查各种资料同时

12、认真的研究老师给的题目,老师对题目的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计来才会有底,有信心。课程设计是一门培养学生综合运用所学知识,发现,提出,分析和解决实际问题的学科,它能充分锻炼我们的动手能力,时我们实践能力的重要环节,是对学生实际工作能力的具体训练和考 察过程。我想这次不只是一次简单的课程设计,更体现了数据结构算法和生活的紧密联系。生活中也存在许多与数据结构有关联的事情,它让人不得不深思,这一个学期的学习,这两年来的大学学习生涯,自己究竟学会了什么,掌握了多少,我也不清楚,我以前也疯狂的玩过,现在才知道自己时多么的缺乏知识,大多数问题自己不能解决,感觉将来自己是否能胜任以

13、后作编译人员的职位。我想大家都心里都有很多的感触。对于自己,我想我已经认识到了自己的不足,在今后的学习过程中,我一定以最好的心态去对待,以最好的面貌来迎接大三的软件专业课程,并且经常上机调试,坚持理论与实践相结合。相信自己将会有很大的进步。 。 参考文献【1】 严蔚敏,吴伟民 数据结构(C语言版) 清华大学出版社【2】 谭浩强 C程序设计(第三版) 清华大学出版社【3】附录 源代码:#include #include using namespace std;int total; /初始时银行现存资金总额int closeTime; /营业结束时间int arriveTime; /两个到达事件之

14、间的间隔上限int dealTime; /客户之间交易的时间上限int dealMoney = 5000; /交易额上限int currentTime = 0; /当前时间int totalTime = 0; /客户逗留总时间int counter = 0; /客户总数int number = 1; /初始客户序列号+struct service int num; /客户号 string type; /到达或离开 int beginTime; int endTime; int money; /正数为存款,负数为取款 service* next; ;struct queue /队列 servic

15、e* head; service* rear; ;void push(queue &q,int d)/ 插入元素d为Q的新的队尾元素 service* temp = new service; 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 void pop(queue &q)/ 若队列不空,出对列函数 servic

16、e* temp; temp = q. head; if(NULL =q. head-next) q.head = q. rear =NULL; else q. head=q. head-next; delete temp; service* front(queue &q)/返回队首元素 return q. head;service* back(queue &q)/返回队尾元素 return q. rear;service* searchAndDel(queue &q,int m)/在对列中寻找可处理元素 service* sign = q. head; /标记头节点 service* temp

17、; while(NULL != q. head) if(-(q. head-money) next; / 首节点后移一位,返回原首节点 return temp; /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)/队列循环一周时停止 return NULL; return

18、 NULL; bool state =1; /用于判断是否有窗口在处理int currentTimeOfDeal = 0;int theArriveTime = 0;queue eq; /事件队列queue fq; /队列一queue sq; /对列二 /初始化三个队列 void arrive()/*到达函数 随机产生顾客,进入队列一 产生到达事件 进入事件队列*/ push(fq,(rand()% (2*dealMoney) -dealMoney); /随机产生顾客加入第一队列 back(fq)-beginTime = currentTime; back(fq)-num = number;

19、push(eq,(back(fq)-money); /将产生事件加入事件队列 back(eq)-beginTime = currentTime; back(eq)-type = 到达; back(eq)-num = number; +number; void putMoney() /存款函数 total += front(fq)-money; /更新资金总额 push(eq,front(fq)-money); /加入事件队列 离开 back(eq)-type = 离开; back(eq)-num = front(fq)-num; back(eq)-endTime = (front(fq)-be

20、ginTime + rand()%dealTime +1); +counter; /更新客户总数 totalTime += (back(eq)-endTime - front(fq)-beginTime); /更新逗留时间 pop(fq); /删除第一队列第一个业务 currentTimeOfDeal = back(eq)-endTime; state =0; void getMoney()/取款函数 if( (-fq.head-money) total ) /资金短缺 加入第二队列 push( sq,front(fq)-money ); back(sq)-beginTime = front(

21、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;

22、+counter; /更新客户总数 totalTime += ( back(eq)-endTime - back(fq)-beginTime ); /更新逗留时间 pop(fq); /删除第一队列第一个业务 state =0; /else service* temped ;int randomTemp;void findAndDeal()/在对列中寻找可处理元素,对其进行处理 while( (temped= searchAndDel(sq,total)&NULL != temped ) /查找可处理取款 total += temped-money; /更新资金总额 push(eq,temped

23、-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 ); /更新逗留时间 delete temped; /删除节点 temped = NULL; stat

24、e = 0;int main() printf( *n); printf( * *n); printf( * 欢迎进入银行模拟系统 *n); printf( * *n); printf( *n); printf(1.开始模拟 0.退出n); int n; scanf(%d,&n); while(n=1) srand(time(NULL); /初始化随机函数 printf(输入银行的初始存款:n); scanf(%d,&total); printf(输入银行的营业时间:n); scanf(%d,&closeTime); printf(输入最大到达时间间隔:n); scanf(%d,&arrive

25、Time); printf(输入最大的处理时间:n); scanf(%d,&dealTime); theArriveTime +=rand()%arriveTime + 1; /首次到达时间 while(currentTime closeTime) +currentTime; if( currentTimeOfDeal money = 0) putMoney(); findAndDeal(); /if else getMoney(); /if cout endl 客户序列t 事件类型tt 时间t 处理金额type=离开) cout numtttypettttendTimettmoneytype=到达) cout numtttypettttbeginTimettmoneyendl; pop(eq); cout 未处理客户: beginTime ); /更新结束时第一队列中未处理的客户 cout num endl ; +counter; pop(fq); /while cout 客户逗留平均时间为: totalTime/counter endl; cout银行当前余额:totalendl; break; /while(n=1) return 0; /maim()

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!