《数据结构银行排队系统》由会员分享,可在线阅读,更多相关《数据结构银行排队系统(10页珍藏版)》请在金锄头文库上搜索。
1、宁波大红鹰学院信息工程学院课程设计报告项目名称:银行排队系统项目组长:白钰琦项目成员:项鸿伟、徐海域、徐程凯班级名称:10计科1专业名称:计算机科学与技术完成时间:2012年11月27日信息工程学院制目 录一、 系统总体描述- 1 -二、模块设计(包括文档设计、项目流程设计)- 1 -三、程序设计(界面设计、后台详细设计)- 3 -四、设计总结- 7 -五、设计总结- 16 -1、完成情况- 16 -2、心得体会- 16 - / 文档可自由编辑打印一、 系统总体描述 银行排队系统是利用现代网络通信技术和计算机信息管理技术来代替传统排队的系统,从本质上改善传统排队管理所存在的拥挤、嘈杂、混乱现象
2、,避免各种不必要的纠纷。通过使用排队系统,由传统的客户站立排队改变为取票进队、排队等待、叫好服务,由传统物理的多个队列变为一个逻辑队列,使“先来先服务”的思想得到更好地贯彻。本系统可以实现银行排队的主要业务活动。本系统分为以下6个功能模块: (1)顾客到达。分为VIP客户和普通客户进行排队拿号,普通客户进入逻辑队列。 (2)顾客离开。顾客离开时将客户从队列中删除,并提供让客户对银行窗口职员评价的平台。 (3)查看业务办理。可以查看每个业务窗口正在给第几号顾客办理业务。 (4)查看排队情况。可以查看当前顾客有多少个顾客在排队等候。 (5)系统查询。可以查询本系统为多少个普通用户和VIP客户办理过
3、业务。 (6)退出。退出整个银行排队系统。二、模块设计(包括文档设计、项目流程设计)本程序包含主程序模块、菜单选择模块和队列操作模块,调用关系如下图:菜单选择模块链表操作模块主程序模块 模块调用示意图2、 系统子程序及功能设计(1)void Initshuzu(); /初始化数组(银行业务窗口)(2)void print1(); /输出数组(银行业务窗口)界面(3)void print1(); /输出排队等候队列界面(4)void daoda(int x); /解决客户到达事件算法,调用(11)(5)void likai(int x); /解决客户到达事件算法,调用(12)(6)int gui
4、tai(); /判断输入的柜台号是否正确 (7) int pingfen(); /判断输入的分数是否正确 (8) void mygrade(); /主评分函数,调用(6)和(7) (9) void VIP(int x); /VIP用户认真认证 (10)void time(); /时间函数(11)void Enqueue(Linkqueue *Q,int elem); /进队列 (12)int Dlqueque(Linkqueue *Q); /出队列(13)void Initqueue(); /主函数。设定界面颜色和大小, 调用工作区模块函数。3、 函数主要调用关系图 14 main()3189
5、24510000 121167 系统函数调用关系图三、程序设计(界面设计、后台详细设计)主界面四、设计总结#include stdio.h#include conio.h#define MAXSIZE 100/*定义数据结构*/typedef struct _CUSTOMER_INFO int nNO;CUSTOMER_INFO,*CUSTOMER_INFO_PTR;typedef structCUSTOMER_INFO_PTR base;int front;int rear;QUEUE;bool InitQueue(QUEUE &Q)Q.base= new CUSTOMER_INFOMAXS
6、IZE;if(Q.base = NULL)return false;elseQ.front=Q.rear=0;return true;int EnterQueue(QUEUE &Q, int m)if(Q.rear+1)%MAXSIZE=Q.front)printf(队满!n);return 0;Q.baseQ.rear.nNO=m;Q.rear = (Q.rear+1)%MAXSIZE;return 1;int LeaveQueue(QUEUE &Q)if(Q.front=Q.rear)printf(队空!n);return 0;elseint n;n =Q.baseQ.front.nNO;
7、Q.front=(Q.front+1)%MAXSIZE;return n;int Qlength(QUEUE Q)return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;int main(int argc, char* argv)int nChoice;int nCount = 1;int nIteration = 1;int num;int length;QUEUE Q4; CUSTOMER_INFO customer;printf(*农村信用社排队系统*n);for(int i = 0; i 4; i+)InitQueue(Qi);for(; ;)printf(nn
8、=第%d次模拟处理=n,nIteration+);for(int j = 0; j 4; j+)if(j = 0)printf(正在等待服务的顾客: );elseprintf(%d号柜台已服务顾客: , j);length=Qlength(Qj);customer = Qj.baseQj.front;for(int k=1;k=length;k+)printf(%3d, customer.nNO);customer=Qj.baseQj.front+k;printf(n);printf(n);printf(1-1号柜台服务n);printf(2-2号柜台服务n);printf(3-3号柜台服务n
9、);printf(4-新客户取号等待服务n);printf(0-退出银行排队系统n);printf(请选择: );scanf(%d,&nChoice);if(nChoice 4)getchar();printf(n输入非法!n);if(nChoice = 0)break;else if(nChoice = 4)customer.nNO =nCount;nCount=nCount+1;EnterQueue(Q0, customer.nNO);else if(nChoice =1 & nChoice 当前没有等待客户!n);return 0;五、设计总结1、完成情况这次是数据结构的第二个项目,我们
10、小组基本还是能顺利完成本次项目内容,组长分工明确,各成员能按时并保质保量完成各自模块,但是在拼接时候出现很多问题,有的是细节,有的是源程序本身存在的错误,通过大家齐心协力,多次修改整合之后,最终上交了一份我们自己的成果。虽然最后的功能创新点不是很多,但是我们在完善课本的内容时,解决困难也可以更加巩固所学到的知识,将学习到的知识运用到设计软件的代码里。2、心得体会白钰琦:通过此次的银行排队系统的设计开发,让我对数据结构中链式队列结构有了更多的理解,对列是限定仅在一端进行插入,而在另一端进行删除操作的线性表,在此次实验中,我们才用的是链式队列的存储结构,该存储模式合适增删,但不适合查找,次程序可采
11、用循环模式,但容易溢出。同时,此次的设计让我更多的理解了c语言编程的规则,对以后的项目有了更好的基础。徐程凯:我这次负责的项目主要是视频的制作。这次的项目是关于队列与栈的。我们小组最后决定是用的是链式链表,因为这个项目不需要我们进行修改和查找只需要添加删除,所以我们觉得使用链式列表是最为科学的方法。这次课程设计使我加强了自身的编程能力的同时,也让我认识到要将所学灵活的应用到实际生活中去,不可以凭空想象,要着眼实际,找到生活所需,理论里联系实际,才可以编写出真正有价值的程序。徐海域:课程设计不同于平时的编程实验,它的要求更多更全面,需要程序编写者在前期做出准确的需求分析,还有后期全面的程序测试,这些都是在过去的学习中很少接触到的。通过老师的讲解和自身在编程中的实践,我深刻体会到需求分析可以使得程序更贴近生活,更具实用性,而全面到位的程序设计则可以保证程序的实用性和健壮性。项鸿伟:通过这次课程设计,我学到了不少东西,对大型的编写有了一丁点额了解,更重要的是断了了我的自学能力,这对我们的学习很有好处。但是也存在很多问题,程序调试的时候出了很多问题,但是在同学的帮助下还是顺利的完成了这个程序。