-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.结束语参考文献-3-第一章引言1.1引言:随着社会的迅速发展,人们的生活水平越来越高,人们的经济越来越多,所以人们对自己的资产保护也越来越注重,这便产生了银行,而随着人口的迅速增长,存钱的人也越来越多,因此设计一个程序是存钱和取钱的时间缩短是非常重要的,设计一个好的程序,使之能更好的方便我们的生活。在开发这个银行系统时,用到了c语言里的函数调用,结构体等,并用基本对话框的一些控件对之进行实现。使之完成了一些功能。报告将会对银行模拟系统程序的一些功能模块进行具体的分析,写出概要设计方案,详细设计,各个功能的流程图,以及调试分析等,从各个方面具体的对程序进行了分析。1.2课题意义银行系统是非常之重要的,对于我们的生活将有巨大的作用,所以我们学习是更应该努力学,以对银行取款信息有充分的了解,并进行编程实现。通过程序实践来巩固运用所学的专业知识,提高我们的计算机应用技能,提高编程能力,加深对相关内容的理解,拓宽知识面,培养我们的创新精神和实践能力。1.3背景和应用领域随着社会的迅速发展,人们的生活水平越来越高,人们的经济越来越多,所以人们对自己的资产保护也越来越注重,这便产生了银行,而随着人口的迅速增长,存钱的人也越来越多,因此设计一个程序是存钱和取钱的时间缩短是非常重要的,设计一个好的程序,使之能更好的方便我们的生活。它的领域使用在人们快速取款或存款当中。-4-第二章需求分析:2.1功能需求设计一个简单的银行业务模拟程序,主要实现的功能是使每个存款或取款的窗口都不是空闲的,保持每个窗口都在工作。即是实现最大的工作效率。1本题需要求客户在银行内逗留的平均时间,用客户逗留除以客户总数即可2本题涉及到队列的建立、初始化和插入,队列的关键字为整数,处理第一、二种业务分别用负数和正数表示。3对客户进行编号用来统计客户总数,同时在队列元素的循环处理中更新总的逗留时间。4演示程序以用户和计算机的对话方式执行,即在计算机终端显示的“提示信息”下,输入数据进行测试。5最后对所得结果进行简要分析。设计一个简单的银行业务模拟程序,主要实现的功能是使每个存款或取款的窗口都不是空闲的,保持每个窗口都在工作。即是实现最大的工作效率。2.2数据需求银行业务模拟程序主要用于存取的各种信息,所包含的有排队的人数扽很多重要数据。第三章.概要设计:3.1简要算法分析本程序包含两个模块:1)主程序模块:Voidmain(){初始化:do{接受命令;处理命令}while(“命令”!=“退出”);2)队列单元模块—实现队列的抽象数据类型各模块之间的调用关系。-5-1队列的抽象数据类型定义ADTQueue{数据对象:D={ai∈Elemseti=1,2,…,n,n≥0}数据关系:R1={ai-1aiai-1ai∈D,i=2,…,n}约定其中a1端为队列头,an端为队列尾.基本操作:InitQueue(&Q)操作结果:构造一个空队列QQueueEmpty(Q)操作结果:若Q为空队列,则返回TRUE,否则FALSEGetHead(Q&q)EnQueue(&Qq)操作结果:插入元素q为Q的新的队尾素DeQueue(&Q&q);操作结果删除Q的队头元素,并用q返回其值。3.2算法流程图-6-输入初始存款A和营业时间T建立队列初始客户序列号客户取款?量!未定义的书签,A111111处理后离开并更新资金和当前时间插入队列2处理还款客户并更新总资金和当前时间顺序查找可处理的元素输出总时间和处理的总客户数结束开始-7-3.3客户服务系统客户服务模块包含两个子系统:取款系统和存款系统。客户服务功能图模块如图2客户服务系统取款系统存款系统银行模拟系统客户服务系统数据管理系统取款系统存款系统数据采集数据整理存款系统客户服务系统取款系统-8-图2取款系统和存款系统:银行通过判断用户业务类型进行业务办理。3.4数据管理系统数据管理系统模块包含两个子系统:数据整理系统和数据管理系统。数据管理功能图模块如图。数据采集系统:收集客户信息包括存取款的资金数目数据整理系统:更新银行现存资金总额、客户的逗留时间、已办理的客户总数。3.5简要算法为了实现上述程序功能,需要定义单链表的抽象数据类型如下:链表结构体:structAction{charname[50];//客户名doubledeposit;//存取款金额intsloveTime;//处理需要的时间intarriveTime;//到达时间,距开业的分钟数intgrap;//与前一个客户的间隔时间intwaitTime;//总的等待时间};typedefstructNode{Actiondata;数据管理系统数据采集数据整理-9-Node*next;}LinkNode,*LinkList;队列结构体如下:typedefstructNode{Actiondata;Node*next;}LinkNode,*LinkList;typedefstruct{Node*front;Node*rear;}LinkQueue,*Queue;3.6函数调用1.主函数main2.进栈函数push3.出栈函数pop4.查找和处理函数service*searchAndDel5.到达函数arrive6.存款函数putMoney7.群款函数getMoney8.随机函数rand第四章调试与测试:4.1调试编制银行业务模拟程序时,用到了很多语句,如队列,指针,函数调用等等许多程序。由于自己的知识有限且学习的也不是很多,总的来说还是很缺乏编程知识,经过我的努力最后还是运行成功。-10-4.2测试银行业务模拟程序,在编译的时候,由于对话框之间的衔接不太懂,所以并没有实现应有的结果。但后来还是通过学生,上网查询等多种方法,终于弄清了对话框之间的衔接和一些基本算法。最终也运行出来了。第五章.测试结果::-11-第六章.设计体会:经过了两周的数据结构课程设计,至今我仍感受颇深,从选题到定稿,从理论到实践,在短短的两个星期的日子里,我虽然吃了很多苦,但我学到了很多很多以前不知道的的东西,同时不仅复习和巩固了以前所学过的知识,而且看到了和学到了很多在书本上所没有学到过的知识,使我懂得了很多,理论必须和实践永远的结合起来,才能有质的飞跃,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到过很多问题,困难很多,但我一直坚持着,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,现在觉得一定要把以前所学过的知识重新温故。虽然我的算法不够完好,还有许多问题,但我一定会调试成功的。第七章结束语:时间过的很快,在不知不觉中,课程设计也接近了尾声.说起课程设计,我认为最重要的就是做好设计的预习,并且认真的去复习以前的知识和查各种资料同时认真的研究老师给的题目,老师对题目的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计来才会有底,有信心。课程设计是一门培养学生综合运用所学知识,发现,提出,分析和解决实际问题的学科,它能充-12-分锻炼我们的动手能力,时我们实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。我想这次不只是一次简单的课程设计,更体现了数据结构算法和生活的紧密联系。生活中也存在许多与数据结构有关联的事情,它让人不得不深思,这一个学期的学习,这两年来的大学学习生涯,自己究竟学会了什么,掌握了多少,我也不清楚,我以前也疯狂的玩过,现在才知道自己时多么的缺乏知识,大多数问题自己不能解决,感觉将来自己是否能胜任以后作编译人员的职位。我想大家都心里都有很多的感触。对于自己,我想我已经认识到了自己的不足,在今后的学习过程中,我一定以最好的心态去对待,以最好的面貌来迎接大三的软件专业课程,并且经常上机调试,坚持理论与实践相结合。相信自己将会有很大的进步。。参考文献【1】严蔚敏,吴伟民数据结构(C语言版)清华大学出版社【2】谭浩强C程序设计(第三版)清华大学出版社【3】附录源代码:#includeiostream#includestringusingnamespacestd;inttotal;//初始时银行现存资金总额intcloseTime;//营业结束时间intarriveTime;//两个到达事件之间的间隔上限intdealTime;//客户之间交易的时间上限intdealMoney=5000;//交易额上限intcurrentTime=0;//当前时间inttotalTime=0;//客户逗留总时间intcounter=0;//客户总数intnumber=1;//初始客户序列号+structservice-13-{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;-14-q.rear=temp;}//ifelse{//队列不为空,插入元素dq.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;elseq.head=q.head-next;deletetemp;}service*front(queue&q){//返回队首元素returnq.head;}service*back(queue&q){//返回队尾元素returnq.rear;-15-}service*searchAndDel(queue&q,intm){//在对列中寻找可处理元素service*sign=q.head;//标记头节点service*temp;while(NULL!=q.head){if((-(q.head-money))m){//队首元素可以处理if(q.head==q.rear){temp=q.head;q.head=q.rear=NULL;returntemp;}//ifelse{//队首元素出列temp=q.head;q.head=q.head-next;//首节点后移一位,返回原首节点returntemp;}//else}//whileelse-16-{//队首元首不能被处理if(q.head==q.rear){}else{//首节点移到