1、卓勇银行排队系统的设计方案与实现 怀 化 学 院 计 算 机 系数据结构课程设计报告书银行排队系统的设计与实现 学生姓名:卓 勇 学 号:1106402034 年级专业及班级:2018级计算机工程系班 指导老师及职称:黄隆华讲师 专 业:计算机科学与技术专业湖南怀化提交日期:2018年6月 摘要1关键词11 前言22 设计分析22.1需求分析22.2 设计意义和目的32.3主要知识点32.4整体框架43、实现方法54、调试问题385、系统的使用说明书396、结论44参考文献45致谢45银行排队系统的设计与实现学 生:卓 勇指导老师:黄隆华(怀化学院计算机工程系,怀化 418008摘 要:随着经
2、济的快速发展,银行的业务量逐渐增加,银行柜台的压力越来越大,排队等待的现象也就越来越多,客户在排队中产生矛盾的可能性也随之增加,银行排长队现象成为困扰银行和用户的难题。为了更好地服务客户,减少排队中不合理的现象,许多银行采用了自动取号排队的系统,本课程设计设计并实现了银行排队取号的模拟系统。模拟了取号、排队、服务、及管理等部分功能,在模拟过程中用到了队列、结构体、文件的操作以及链表等知识点。系统中采用了注册登陆取号机制,有效的防止了倒票现象的发生,系统能够记录用户及工作人员的相关信息,管理员通过对用户及工作人员信息的统计和分析,可以进一步优化银行营业厅的排队问题,提高银行业务办理效率。本文用流
3、程图等方式对系统进行了需求分析,确定了系统的功能。系统用TXT文件模拟数据库,运用c和c+语言实现系统全部功能,并在最后对系统进行过测试,可以保证系统的稳定性和可靠性。关键词:银行排队业务;队列;链表;数据结构1 前言数据结构一直以来是一门比较有难度的学科,关于数据结构的学习,我认为要学好数据结构,要比较熟练的掌握各种基本的结构操作,如二叉树,链表。就必须要多练习、多实践。这次的课设计就是给我们提供了一个实践的平台,可以让我们更好的掌握数据结构,进一步巩固这方面的知识。数据结构课程作为计算机的一门关键课程,所牵涉到计算机算法方面的问题是必然的,我希望通过这次课程设计的练习能让自己在这次的设计中
4、有多方面的提高,能更好的掌握相关的知识。我的选题的信息描述:根据输入文件/欢迎界面窗口 system(cls。 string n。 printf(n。 printf(n。 printf( *n。 printf( *n。 printf( * *n。 printf( * *n。 printf( * 欢迎光临, 工商银行! *n。 printf( * *n。 printf( * *n。 printf( * 1:登陆 2:注册 *n。 printf( * 0:退出 *n。 printf( * *n。 printf( *n。 printf( *n。 printf(请输入您的选择:n。 printf( 。
5、 cin n。 if (n = 0 /输入“0”退出程序 exit(0。 else if (n = 1 /输入“1” 进入登陆界面 LongIn(。 else if (n = 2 /输入“2” 进入注册界面 SignIn(。 else /输入有误 printf(您的输入有误!n。 _sleep(1000。 show(。 来到主界面后,用户要使用本系统就需要先进行注册,然后再登陆来使用系统的相应功能。在进入到注册界面时,我先询问了用户是否确定进行注册,并设置了返回按钮,可以方便用户不小心按错之后返回主界面来选择他 /密码输入显示*的保护模式输入函数 char c。 int i=0。 string
6、 pas。 while (c=getch(!=r if (c=b /处理退格键 putch(c。 putch( 。 putch(c。 if (!pas.empty( pas=pas.erase(pas.size(-1,1。 else if (isprint(c/只用可显示字符做密码 putch(*。 pas+=c。 cout endl。 /coutpas/注册函数 基本完成。 system(cls。/清屏 int n, i, k。 /k标记,0表示用户名还没有注册过 ,1表示用户名已被注册 string m。 / m为“0”返回上一级菜单 string pwd。 /用来存放返回的输入的密码 c
7、har kh_name40。/存放输入的用户名 char kh_pwd40。/存放输入的密码 LinkList L。 /定义链表 L = (LinkListmalloc(sizeof(LNode。/给链表初始化 if (!L exit(0。 L-next = NULL。 printf(n。 printf( *n。 printf( *n。 printf( * *n。 printf( * *n。 printf( * 1:继续注册操作 *n。 printf( * *n。 printf( * *n。 printf( * 0:返回上一级菜单 *n。 printf( * *n。 printf( * *n。
8、 printf( *n。 printf( *n。 printf(请输入您的选择:n。 printf( 。 cin m。 if (m = 0 /输入“0”返回上一级菜单 show(。 else if (m = 1 /输入“1” 继续注册操作 printf(请输入您的用户名(120字以内,不能有空格:n。 printf( 。 cin kh_name。/从控制台输入用户名 k = 0。 ifstream cinFile。/打开文件,从文件中读取数据 cinFile.open(客户注册信息.txt。 if (!cinFile.is_open(/当文件打开失败是提示检修系统 printf(打开文件失败!
9、,请检修系统n。 cinFile n。/表示当前已有注册人数 /*当客户输入用户名后,判断是否此用户名是否已被注册,k = 0表示此用户名可用,k=1表示此用户名已经被注册过,不可用*/ LinkList p。 p = L。 for (i = 1。 i LinkList q。 q = (LinkListmalloc(sizeof(LNode。 q-next = p-next。 cinFile q-data.name q-data.pwd。 if (strcmp(kh_name, q-data.name = 0 k = 1。 break。 p-next = q。 p = q。 cinFile.c
10、lose(。 if (k = 1 printf( 您输入的用户名已存在。 n。 _sleep(2000。 SignIn(。 /当用户名不可用时,重新跳转到注册界面 if (k != 1 printf(请输入密码(120字以内不能有空格:n。/ 提醒注册客户输入密码 printf( 。 pwd = password(。 for (i = 0。 i 。 i+ kh_pwdi = pwdi。 kh_pwdi = 0。 /*打开文件,并修改当前已有注册人数,添加现在在注册的用户*/ ofstream coutFile。 coutFile.open(客户注册信息.txt。 if (!coutFile.i
11、s_open( printf(打开文件失败!,请检修系统n。 coutFile n+1 endl。 coutFile kh_name t kh_pwd next。 while (L / cout data.name t data.pwd endl。 /自己测试用过 coutFile data.name t data.pwd next。 / cout kh_name t kh_pwd 。 printf( 注册成功! n。/提示注册成功, _sleep(2000。 LongIn(。 /注册成功,调转到登陆界面 else /输入有误 printf(您的输入有误!n。 _sleep(1000。 Sig
12、nIn(。 在注册完成后就进入登陆界面,同样登陆界面也会询问用户是否确定登陆,并设有返回上一级菜单的按钮,以防止用户不小心按错时可以返回上级菜单重新选择功能。此系统为了体现排队的公平,没有设置VIP用户,在登陆成功后就进入了业务选择接界面,用户可以根据自己所办理业务的不同选择不同的业务,进入不同的队列中取号进行排队,为了更人化没更为用户考虑,在不同的业务类型中还增添了查看排队详情和查看自己当前的排队位置的功能。下面是现金业务功能函数:void CashBusiness(/客户所使用的现金业务 system(cls。/清屏 string c, c1。 LinkQueue Q1。 /定义队列Q1
13、QueuecinFile(Q1, 1。 /调用Q1的文件打开,创建队列Q1 printf(n。/选择业务界面 printf( *n。 printf( *n。 printf( * *n。 printf( * 现金业务当前排队人数:。 printf(%d, QueueLength(Q1。/当前排队人数 printf( *n。 printf( * 1:查看排队详情 *n。 printf( * *n。 printf( * 2:取号排队 *n。 printf( * *n。 printf( * 3:查看您排队所在的位置 *n。 printf( * *n。 printf( * 4:返回上一级菜单 *n。 p
14、rintf( * *n。 printf( * 0:退出登录 *n。 printf( * *n。 printf( *n。 printf( *n。 printf(请输入您的选择:n。 printf( 。 cin c。 if (c = 0 /现金业务主界面 输入”0“退出登录,放回主界面 show(。 else if (c = 1 / 现金业务主界面 输入”1“查看排队详情 LookCashDetails(。 else if (c = 2 /现金业务主界面 输入”2“取号排队 printf( 确定取号?【0(不取号/1(取号】n。 printf(请输入您的选择:n。 printf( 。 cin c1
15、。 if (c1 = 0 /输入“0”不取号 CashBusiness(。 else if (c1 = 1 /输入“1”取号 CashNumberList(。 else /选择输入有误 printf(您的输入有误!n。 _sleep(1000。 CashBusiness(。 else if (c = 3/现金业务主界面 查看客户做在的位置 int e。 printf(请输入您的号码:n。 printf( 。 cin e。 if (e next-data | e Q1.rear-data printf(您的输入有误!n。 _sleep(1000。 CashBusiness(。 else Cash
16、LookLocation(e。 else if (c = 4 /现金业务主界面 输入”3“返回上一级菜单 SelectBusiness(。 else /现金业务主界面 输入有误 printf(您的输入有误!n。 _sleep(1000。 CashBusiness(。 下面是非现金业务功能函数:void NonCashBusiness(/客户所使用的非现金业务 system(cls。/清屏 string c, c1。 LinkQueue Q2。 /定义队列Q2 QueuecinFile(Q2, 2。 /调用Q2的文件打开,创建队列Q2 printf(n。/选择业务界面 printf( *n。 p
17、rintf( *n。 printf( * *n。 printf( * 非现金业务当前排队人数:。 printf(%d, QueueLength(Q2。/当前排队人数 printf( *n。 printf( * 1:查看排队详情 *n。 printf( * *n。 printf( * 2:取号排队 *n。 printf( * *n。 printf( * 3:查看您排队所在的位置 *n。 printf( * *n。 printf( * 4:返回上一级菜单 *n。 printf( * *n。 printf( * 0:退出登录 *n。 printf( * *n。 printf( *n。 printf( *n。 printf(请输入您的选择:n。 printf( 。 cin c。 if (c