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