基于cs的java多线程队列牌号系统的设计与实现内容摘要:

图 54 自动出号信息 实体图 系统 ER图 图 55 实体之间关系 ER图 数据库物理结构设计 在上面的实体以及实体之间关系的基础上,形成各个表格之间的关系。 牌号系统数据库中的各个表的设计结果如下 表所示( 每个表格表示数据库中的一个表 )。 ( 1) 顾客信息表 customer_tbl 表 customer_tbl 用来保存顾客取票信息,结构如表 51 所示。 表 51 customer_tbl 的结构 字段名 字段类型 中文描述 备注 非空 主键 Id NUMBER 唯一标识 √ nextId NUMBER 顾客牌号 Unique √ takeDate Date 取票日期 √ type NUMBER 服务类型 1: vip 2:普通 √ flag NUMBER 处理标记 Unique √ ( 2) 业务端信息表 work_tbl 表 work_tbl 用来保存业务端信息,结构如表 52所示。 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 表 52 work_tbl 的结构 字段名 字段类型 中文描述 备注 非空 主键 Id NUMBER 唯一标识 √ processDate Date 处理日期 √ workId NUMBER 服务台编号 √ type NUMBER 服务类型 1: vip 2:普通 √ nextId NUMBER 顾客牌号 Unique √ ( 3) 业务员信息表 workmen_tbl 表 workmen_tbl 用来表示业务员信息,结构如表 53所示。 表 53 workmen_tbl 的结构 字段名 字段类型 中文描述 备注 非空 主键 Id NUMBER 唯一标识 √ name varchar2(20) 用户名 √ password varchar2(20) 密码 √ ( 4) 自动出号信息 srt_tbl 表 srt_tbl 用来产生唯一的号票信息 , 表结构如表 54所示 表 54 srt_tbl的结构 字段名 字段类型 中文描述 备注 非空 主键 nextId NUMBER(20) 顾客牌号 √ tyep NUMBER(7) 服务类型 Unique √ 系统安全性设计 ( 1) 数据因素:系统数据库中包含多个表信息,所以在系统与数据库的连接上,直接封装到代码中,由于 java 的安全机制比较好,所以数据信息在存储和传递过程中不可见。 ( 2) 硬件及物理因素:系统硬件及安全环境安全可靠,包括机 房设施、计算机主体、存储系统、数据通信设备设施等方面是安全的。 ( 3) 存储安全:通过 oracle 的数据库安全设置,连接数据库需要用户名和密码,保证了数据库的安全性 [3]。 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 6 系统实现 系统结构流程图 服务端 根据系统的执行流程分析,可得服务器系统结构流程如图 61所示。 图 61 服务器 系统结构 流程 图 客户端 根据系统的执行流程分析,可得客户端系统结构流程如图 62所示。 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 图 62 客户端系统 结构 流程 图 各功能模块的实现 系统主界面的实现 ( 1)服务器主界面的实现 用户在取号的时候必须先启动服务器,才能进行取号。 服务器端主界面如图 63所示。 图 63 服务器端主界面 服务器端主界面采用菜单式风格,用户可以根据需求进行取号,查询,删除等功能。 界面主要采用了 Grid Layout, Flow Layout, BorderLayout 等布局管理器来对界面进行布局的。 ( 2)客户端界面的实现 客户端是为业务员设计的以下是客户端登录界面如图 64所示。 图 64 业务员登录界面 客户端业务处理界面如图 65所示。 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 图 65 业务处理界面 客户端业务处理界面也采用了菜单式风格,采用了布局管理器对界面进行布局管理 , 其中在显示这一项里采用了 JTable 设计的设计界面如下图 66 所示。 图 66 员工处理情况界面 部分实现代码如下: 界面信息的显示的实现,在这里调用了 Dao 层的方法获得需要的信息 String colHeads[] = { 服务台编号 , 服务类型 , 处理时间 , 顾客票号 }。 IWorkDao dao = (IWorkDao) (workDao)。 ListWork list = ()。 Object data[][] = new Object[()][4]。 for (int i = 0。 i ()。 i++) { data[i][0] = (i).getWorkId()。 data[i][1] = (i).getType()。 if((i).getType()==1){ data[i][1]=vip 用户。 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 }else{ data[i][1]=普通用户。 } data[i][2] = (i).getProcessDate()。 data[i][3] = (i).getNextId()。 } JTable table = new JTable(data, colHeads)。 服务器端取号的实现 在整个系统中取号是一个至关重要的环节,也是设计它的目的所在。 它的实现与其他模块紧密相连,它在 Server 端实现的,取号分为两个服务类型: vip 业务和普通业务。 首先在数据库里建立 srt_tbl 这张表,它用来存储自动生成的客户牌号。 它里面设置两个字段,一个是 nextId,一个是 type类型。 nextId是用来标识顾客的牌 号的,而 type 则是用来表示顾客所要选取的服务类型, vip 业务和普通业务。 当点击其中的一个业务时它就会产生一个牌号,这个牌号是通过在 dao 层的一个方法实现的, dao 层通过 JDBC 连接数据库实现数据的持久化。 在取完号的同时调用 Dao 层的 saveID()方法把这个信息保存在 cuntomer_tbl 表中。 ( 1) vip 会员取号如图 67 所示。 图 67 vip用户取号界面 实现代码如下: 1) 产生号票 num = (1)。 Customer customer = new Customer(num, 1)。 2) 把顾客取到的号票存储到数据库中 , 调用 findUprocess()方法查找没有被处理的号票并在界面上显示。 (customer)。 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 (num, 1)。 ListCustomer list = (1)。 int num1 = () 1。 })。 ( 2) 普通会员取号如图 68所示。 图 68普通用户 取号界面 普通会员的取号的实现跟 vip 会员一样这里就不详细标注说明。 客户端业务处理的实现 这个模块的实现主要是在不同的业务员登录后选择了服务台以后才开始业务处理,业务处理的实现首先是 server端调用 socketThread这个多线程类,在这个类的run方法里调用了 service层的 unProcess(int type)方法从数据库中拿到 nextId(牌号), client 端从 server 端的输出流里获得牌号,进行处理。 处理的时候会显示提示信息。 因为各个单位所有的服务台是不确定的,所以在这里采 用了多线程,可以按需求增加服务台数量。 每增加一个服务台就启动一个线程,实现了多用户同时在线服务。 由于采用了 TCP 协议,也实现了点对点通信。 在服务台界面设计时,把 id=1 设为 vip 服务台, id1 的设为普通服务台。 当取 vip 业务的牌号大于 2 时候,普通服务台优先处理 vip业务,当处理的低于 2的时候就处理普通业务,如没有需要处理的普通的业务就停止业务处理。 以下是实现界面和实现代码: ( 1) 当 vip 人数大于 2 时 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 图 69业务处理界面 ( 2) 当 vip 人数小于 2 时 图 610 业务处理界面 主要实现代 码如下: 1) 如果输入的服务台编号为 1,服务台专门处理 vip 业务。 并且客户端通过流输入把信息传到服务器端获得相应的信息再返回给客户端 if (id == 1) { (vip + id)。 ICustomerDao dao = (ICustomerDao) BeanFactory .getPojo(customerDao)。 IWorkDao workdao = (IWorkDao) BeanFactory .getPojo(workDao)。 2) 从服务器端读入信息 int num = (())。 if (num 0) { 3) 把业务员的信息保存到数据库中 Work work = new Work(1, 1, num)。 (work)。 4) 查找未处理的 vip业务人数并且在标签里显示 ListCustomer list = (1)。 int num1 = ()。 (正在为 Vip 业务 + num + 号顾客办理业务。 + 有 + num1 + 人等待 ) 精品毕业论文、毕业设计,优质的论文服务: 精品论文网 提供毕业设计(论文)和图文教程、视频教程等一揽子解决方案 } 5) id 不等于 1 为普通用户同样通过流输入把信息传递给服务器端获得相应的信息 if (id != 1) { (normals + id)。 String temp = ()。 int index = 0。 int num = 0。 6) 判断是否为 vip 用户,如果是,在普通服务台进行优先业务处理。 if ((index = (vip)) != 1) { ICustomerDao dao = (ICustomerDao) BeanFactory .getPojo(customerDao)。 IWorkDao workdao = (IWorkDao) BeanFactory .getPojo(workDao)。 num = ((index + 3))。 if (num 0) { Work work = new Work(id, 1, num)。 (work)。 7) 查询还有多少 vip号票没有处理 ListCustomer list = (1)。 int num1 = ()。 } 8) 判断是否为普通会员 else if ((index = (normals)) !=1) { ICustomerDao dao = (ICustomerDao) (customerDao)。 IWork。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。