您的位置:首页 > 其它

银行排队系统的设计与实现

2013-06-16 22:49 369 查看
******计 算 机 工 程 系
《数据结构》课程设计报告书


银行排队系统的设计与实现





学生姓名:*****

学 号:******

年级专业及班级:*****级计算机科学与技术(2)班

指导老师及职称:****** 讲师

专 业:计算机科学与技术

******

提交日期:2013年06月



银行排队系统的设计与实现

学 生:*****

指导老师:*****
(*****计算机工程系,*** ****)

摘 要

这次数据结构课程设计的课题是银行排队系统的设计与实现,该系统通过模拟银行排队而设计,针对具体的银行排队需求,进行了一个小小的创新。随着银行业务量的快速发展,银行柜台业务承受的压力越来越大,排队等待现象屡见不鲜,银行排长队现象成为困扰银行和用户的难题。为了解决这一难题,目前大部分银行的营业厅都使用了取号系统来改善银行窗口排长队的现象,提高银行的服务效率。本文设计并实现了银行取号模拟系统,模拟取号的整个过程,实现了取号、排队、服务、及管理等功能。系统能够记录用户及工作人员的相关信息,管理员通过对用户及工作人员信息的统计和分析,可以进一步优化银行营业厅的排队问题,提高银行业务办理效率。通过数据结构中链表及队列的相关操作,进行一个系统的实现。所有的数据都按每天的操作进行单独的存储,每天存储3个txt文件,在查找时也方便查找,避免了数据存放的混乱。

关键词
银行排队;取号;队列;链表;文件。


1、前言

为了给客户提供方便、快捷的服务,各大银行在全国各地建立了众多的分行,每天接待许多的客户。客户在办理现金和非现金业务时需要排若干次队,甚至经常发生排错队的现象,另一方面,嘈杂、混乱的工作环境也影响了银行工作人员的办事效率,从而降低了银行的服务质量。这次课程设计解决了传统模式的银行排队的问题,杜绝了插队等的现象。在这次课程设计中,我们通过模拟客户登录排队,实现了该过程。这个课程设计中设置了客户注册、客户登录、管理员登录、操作员登录和帮助文档五个大的模块,功能完善、实用,使用也简单,操作简便易懂。
2、设计分析

2.1 需求分析
2.1.1
编程环境
Window 7操作系统、DEV-C++编译器、C/C++语言、数据结构。

2.1.2 系统架构分析
2.1.2 数据结构体定义
typedef struct knode{//客户信息结构体定义OK

char id[12];//客户***号码 在客户注册之后保存,暂时用2001、2来模拟

char psw[12];//客户密码 在客户注册之后保存

char yw[12];//客户选择的业务(“0”表示默认值,"非现金","现金")

char numd[12];//存放客户的等待号码 在客户登录之后保存

char numw[12];//客户所在的窗口序号 在客户办理业务时赋值

char czyid[12];//存放受理业务的操作员id,便于系统进行统计分析

char cg[12];//"0"表示默认值,成功/缺到

char enuse[12];//"可用"/“不可用”

struct knode *next;

}KNode,*KList;



typedef struct gnode{//管理员/操作员信息结构体定义 操作员的信息都是由管理员

string id;//操作员工作ID(想定为1001、之类,管理员用0001、0002之类的)

string psw;//操作员密码(限定6位)

string quxian;//权限(“1”表示管理员,“0”表示操作员)

string num;//操作员工作的服务窗口序号(默认为“0”)

struct gnode *next;

}GNode, *GList;



struct Wnode{//定义一个业务窗口结构体 //存放该文件的第一行有,两个数,

//第一个表示已经处理了的总数(包括未到的),第二个表示已经排队,但是未到的OK

char kx[12]; //用来判断该窗口是不是空闲,“0”表示空闲,“1”表示忙碌

char ckczyid[12];//办理业务的操作员ID

char ckid[12];//客户ID

charfinally_cznumber[12];//存放该操作员处理了业务的个数,可

charweidao[12];//已经分派号码,但未进行操作的

}WNode[SIZE+1];//注意,这里的下表是从1开始,0号,存放的是第一行表头信息



typedef struct Qnode{//队列 OK

KNode data;//元素的属性(客户的结构体定义)

struct Qnode *next;

}QNode,*QList;



typedef struct LinkQueue{//队列的指针定义 OK

QList front;//队头指针

QList rear;//队尾指针

}LinkQueue;

3、实现方法

该系统的实现,共用了33个界面函数、24个调用函数。具体如下:

3.1 以下区域是33个界面函数的申明
void main_welcome(void); //副页 OK

void main_interface(void);//主界面 OK

void kh_interface(void);//客户登录界面 OK

void khzc_interface(void);//客户注册界面 OK

void kh_welcome(KNode kh);//客户欢迎界面 OK

void kh_information(KNodekh,char yw);//客户选号信息界面 OK

void kh_seepaidui(KNode kh);//客户查看当前排队情况界面OK

void gly_interface(void);//管理员登录界面 OK

void gly_control(GNode gly);//管理员管理界面 OK

void gly_ywshow(GNode gly);//查看业务受理情况OK

void gly_ontimeyw(GNodegly);//查看当天实时业务受理情况OK

void gly_seedayyw(GNodegly);//查看某日业务OK

void gly_seemonthyw(GNodegly);//查看某月业务 OK

void gly_seeczy(GNode gly);//查看管理员(或者操作员)详细信息 OK

void gly_addczy(GNode gly); //添加管理员(或者操作员)信息 OK

void gly_updataczy(GNode gly);//修改管理员(或者操作员)信息OK

void gly_deleteczy(GNode gly);//删除管理员(或者操作员)信息OK

void czy_interface(void);//操作员登录界面 OK

void czy_ywinterface(GNodeczy, int wnum);//操作员业务受理窗口界面 OK

void czy_ywshow(GNode czy, intwnum);//操作员业务情况查看界面 OK

void czy_ywshouli(GNode czy,int wnum);//操作员业务受理界面OK

void czy_success(GNode czy,int wnum, KNode e); //操作员成功处理OK

void czy_next(GNode czy, intwnum, KNode e); //操作员继续呼叫下一位OK

void Help_interface(void);//帮助主界面 OK

void Help_kh1(void);//客户帮助文档界面(未登录的) OK

void Help_gly1(void);//管理员帮助文档界面(未登录的)OK

void Help_czy1(void);//操作员帮助文档界面(未登录的)OK

void Help_kh(KNode kh, intn);//客户帮助文档界面 OK

void Help_khtuichu(KNode kh,int n);//客户帮助文档退出中转界面OK

void Help_gly(GNode gly, intn);//管理员帮助文档界面OK

void Help_glytuichu(GNode gly,int n);//管理员帮助文档退出中转界面 OK

void Help_czy(GNode czy, intn, int wnum);//操作员帮助文档界面OK

void Help_czytuichu(GNode czy,int n, int wnum);//操作员帮助文档退出中转界面OK

3.2 以下区域是24个调用函数的申明
string password(void);//密码输入显示*的保护模式输入函数 OK

string time_title(void);//用于文件存档时的时间操作函数 OK

string time_title2(void);//用于当日业务查看时的title函数调用 OK

void show_time(void);//显示日期函数 OK

bool K_InitList(KList&K);//构造一个空的线性表K OK

int K_ListLength(KList K);//计算链表K的元素个数 OK

bool A_Existadmin(void); //测试administrationtxt文件是不是存在 OK

bool K_Existkhzc(void);//测试当天的客户注册txt文件是不是存在 OK

bool K_Existywsl(void); //测试当天的业务受理txt文件是不是存在 OK

bool Q_Existw(void); //判断当天的窗口信息txt文件是不是存在 OK

bool K_ropenkhzc(void); //打开当天的客户注册txt文件OK

void K_readzc(KList &K,int &n);//将txt文件中的数据读到K链表到中 OK

void K_readywsl(KList &K,int &n);//将txt文件中的数据读到K链表到中 OK

void K_savezc(KList &K,int n, KNode q);//将K链表中的数据写入到txt文件中去 OK

void K_saveywsl(KList &K,int n, KNode q);//将K链表中的数据写入到txt文件中去 OK

bool G_InitList(GList&G);//构造一个空的线性表G OK

bool Q_InitList(QList&Q);//构造一个空的队列Q OK

bool Q_EnQueue(LinkQueue&Q, KNode e);//入队操作 OK

bool Q_DeQueue(LinkQueue&Q, KNode &e);//出队操作 OK

int Q_Length(LinkQueue Q);//求队列长度 OK

void G_AddTxt(GList &G,int &n);//将administration.txt文件的内容写入链表G中 OK

void G_CinTxt(GList &G,int n, string id, string psw, string quxian, string num);//注释如下面两行 OK

//将链表G中的信息写入到administration.txt文件中

//将administration.txt文件中的信息进行输出

void W_strtoint(Wnode &w,int &czn, int &wein);//将字符串数转换成int型的数,然后返回,用于在窗口中统计个数用的OK

void W_thedays(int year, int&sum, int month);//返回输入的年月当月的天数 OK

4、调试问题

4.1 文件的操作
在对数据进行文件存储的过程中,一开始是使用C++的文件操作方式,本系统中管理员和操作员的数据的存储都是用C++的文件操作方式,他们的数据结构体定义也是直接使用的string类型的,所以在操作过程中,没有遇到麻烦,但是在对客户进行文件操作时,因为涉及到客户的后续一系列操作的需求,将string类型的元素改成了char型数组,所以操作就出现了问题,同时在C++的文件操作中,没有找我想要用日期作为txt文件名的一个实现的方法,但是参阅和查找了相关的文件操作的知识,最后在C语言中找到了解决这个问题的方法。同时也调试出了其他一些问题,并且一一解决了,下面列出这次操作的核心代码。
① FILE*fp=NULL;//打开用当天日期作为文件名的文件
char *k = "客户注册";
string tempstring;
char b[10] = {0};
char a[30] = {0};
tempstring = time_title2();//使用调用函数实现,提取当天的日期
int len = tempstring.length();
int j;
for (j = 0; j < len ;j++)//将string类型的转换成char型数组
b[j] = tempstring[j];
sprintf(a,"%s%s.txt",b,k);
fp=fopen(a,"r");//用读的形式打开文件
if(fp==0){puts("error");exit(0);}
……
Fclose(fp);//关闭文件
② 下面是实现数字字符数组和int型数字直接的转换 将数字字符数组转换成int型的数字
int sum =atoi(WNode[wn].finally_cznumber);
将int型的数字转换成数字字符数组
sprintf(WNode[wn].finally_cznumber,"%d",sum);
因为在我设计的窗口信息的表格中,用来统计的定成为一个char型字符数组的,原本的想法是定义成一个int的,但是在实际的操作中,如果改动的话,牵涉到的修改的部分太多了,而且在相应的txt文档中,表头信息都是文字,所以改动就比较麻烦,虽然找到了改成int的解决方案,但是权衡之后,并且在实际的调试过程中找到了这个解决方案,所以就采用这个方案。
4.2 界面函数的带值传递
在对界面的不断调试操作中,因为涉及到帮助文档以及显示相关实时信息的操作,就需要进行相应的传值操作,一开始,我设计的都是无参的界面函数的调用,所以在后续的操作中,又对相应的界面函数做了一个调整。在对帮助文档的操作中,因为涉及到登录和非登录两种状态进入阅读,所以相应的帮助文档,在后续的调试中,我写了两个,两个帮助文档的差别就在于是否带参调用,由此来区分是否是登录操作下和非登录操作下进入的一个操作。这样就可以起到一个系统的安全性以及可操作性。下面列出帮助文档的函数申明。
void Help_kh1(void);//客户帮助文档界面(未登录的) OK

void Help_kh(KNode kh, intn);//客户帮助文档界面 OK

void Help_gly1(void);//管理员帮助文档界面(未登录的)OK

void Help_gly(GNode gly, intn);//管理员帮助文档界面OK

void Help_czy1(void);//操作员帮助文档界面(未登录的)OK

void Help_czy(GNode czy, intn, int wnum);//操作员帮助文档界面OK











5、系统的使用说明书

5.0 配置系统文件
运行该系统时,首先,系统会配置系统文件,如果该系统中要操作的txt文件不存在,则会自动创建文件。界面如下:

5.1 客户注册
(1、主界面→选“2”

(2、客户注册界面→选“Y”,并接着注册ID和密码



(2、客户注册界面→“注册成功” →“客户登录”

5.2 客户登录
(1、主界面→选“1”(或者由客户注册界面注册成功后跳转)

(2、登录成功→客户欢迎界面



(3、客户欢迎界面→(有6个操作选项)

→“1”,选择现金业务办理,并成功分配等待号码

→“2”,选择非现金业务办理,并成功分配等待号码

→“3”,查看当前排队情况

→“4”,查看客户帮助文档

→“5”,返回上一界面

→“6”,退出

5.3 管理员登录
(1、主界面→选“3”

(2、主界面→管理员登录界面→“y” →ID→密码

(3、管理员登录成功→管理员管理界面

(4、客户欢迎界面→(有8个操作选项)

→“1”,查看业务受理情况(里面有3个细分的查看选项)

→“2”,查看管理员(或者操作员)信息

→“3”,查看管理员帮助文档

→“4”,添加管理员(或者操作员)信息

→“5”,修改管理员(或者操作员)信息

→“6”,删除管理员(或者操作员)信息

→“7”,返回上一界面

→“8”,退出



5.4 操作员登录
(1、主界面→选“4”

(2、主界面→操作员登录界面→“y” →ID→密码→窗口号



(3、操作员登录成功→操作员业务受理窗口界面



(4、操作员业务受理窗口界面→(有5个操作选项)

→“1”,查看业务受理情况

→“2”,业务受理操作

→“3”,查看操作员帮助文档

→“4”,返回上一界面

→“5”,退出

(5、→“2”,业务受理操作(队列中无元素,即没有排队顾客时)



(5、→“2”,业务受理操作(队列中有元素,即有排队顾客时)



5.5 帮助文档
(1、主界面→选“5”



(2、主界面→帮助文档界面



6、结论

这次课程设计的顺利完成,得到了老师和同学的很多帮助。这次实现的是银行排队系统,在应用方面可以很好的解决当前银行业务排队的一些问题,更好的为银行客户服务。

从课程设计开始到结束,这个过程中,也是从什么都不懂,到系统的最后顺利完工。在课程设计实现的过程中,通过不断地和同学讨论,在讨论中发现问题,最后共同寻求解决方案,从而使得该系统的功能不断完善。

这次课程设计的完成,让我明白了很多,以前觉得总是觉得自己的知识学得不够好,所以一开始没有什么信心,但是在课程设计开始之后,在不断的实现过程中,就开始发现,其实也不是那么难,最后明白了,知识只有在真正地实战操作中才能得以巩固和加强。



参考文献
[1] 谭浩强著.C程序设计(第三版)[M].北京:清华大学出版社 页码P330-P348

[2] 高一凡著.数据结构算法解析[M].北京:清华大学出版社 页码P69-P77
[3] 严蔚敏 吴伟民编著.数据结构(C语言版)[M]. 北京:清华大学出版社 页码P27-P62
[4] StanleyB.Luppman等著.C++ Primer中文版[M].北京:人民邮电出版社 页码P243-P259


致 谢
本报告是在******老师的悉心指导和热情关怀下完成的。从该系统的需求分析到文件的管理分类、以及相关知识点的指导,****老师都给了我很好的建议,感谢***老师的耐心讲解和分析,最后我的系统得意顺利的完工。

这次数据结构课程设计的顺利完成还要感谢那些帮助我的同学,在需求分析这一块我找了***以及***,我们在一起讨论了这个银行排队系统的需求,在一次又一次的讨论中,最终,我的需求得以更加完善,同时在讨论的过程中,我也发现了自己思考问题的一些不足,及时吸取了他们的经验。例如,在对管理员、操作员的文件操作方面,我借鉴了他们的 C++文件操作的方法,同时在他的方法的基础上做了一个小小的调整。在创建日志文件的时候,我得到了***同学的耐心帮助,最后寻求了一种解决用日期作为文件名的日志文件的存储操作,同时在***的建议的基础之上,又对文件的操作做了一个小小的修改和完善,最后实现了这个系统中用到的对于日志文件的操作。在用户体验这一块,感谢***同学的测试和用户体验,在他提出的一些建议之后,我对部分的界面跳转操作,做了一个优化操作,使得客户操作更具有人性化。这次课程设计的顺利完成感谢这些同学的帮助,在与他们的讨论之中,我也发现了很多自己没有考虑到的部分,在借鉴他们的思路的基础之上,优化完善了自己的解决方法和步骤。

感谢**老师和同学的帮忙,我的数据结构课程设计才得以顺利的完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: