物流公司信息系统的实现,信息管理论文_第1页
物流公司信息系统的实现,信息管理论文_第2页
物流公司信息系统的实现,信息管理论文_第3页
物流公司信息系统的实现,信息管理论文_第4页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

物流公司信息系统的实现,信息管理论文【题目】【第一章】【第二章】【第三章】【第四章】【第五章】物流公司信息系统的实现【第六章】【结论/以下为参考文献】第5章系统实现由于系统包括基于web和基于C/S两种构造,在本文阐述经过中将逐一介绍。首先介绍基于Web的软件系统实现。5.1、基于Web的软件系统实现5.1.1、用户登陆功能实现系统定义了YHUser类、YHWareUser类、YHAdmin类、YHDepAdmin类用于支持与用户相关的操作。YHUser是YHWareUser类、YHAdmin、YHDepAdmi的父类。YHUser是用来定义和获取用户基本信息的类,本系统的普通用户角色中的用户能够直接使用YHUser类描绘叙述。YHWareUser继承于YHUser类,用来定义和获取普通用户角色中的仓储用户基本信息的类。YHAdmin继承于YHUser类,用来定义和获取系统管理员基本信息的类。YHDepAdmin继承于YHUser类,用来定义和获取部门信息管理员基本信息的类。由于系统在初始化时已经建立了用户,所以省略了用户注册功能,用户初次使用本系统,直接使用由企业邮件通知的用户名和密码即可登陆本系统。用户初次成功登陆后,即可修改用户密码,用户名不允许修改。在用户登陆界面YHlogin.jsp上定义一个文本框和一个密码框,用于用户输入用户名和密码,点击登陆按钮触发action,由struts配置文件中定义的映射关系调用yhLoginCheck()方式方法。假如登陆成功,则将登陆用户名存放在session中,通过GoUserUI()方式方法在baseinfor表中查找用户角色,根据用户角色跳转到相关界面。当用户角色等于4时时,表示这是一个普通用户;等于3时,表示这是一个具有仓储管理权限的普通用户;等于2时,表示该用户是部门信息管理员;等于1时,表示该用户是系统管理员。用户登陆流程图如此图5.1所示,系统登陆界面如此图5.2所示,系统管理员界面如此图5.3所示。图5.1用户登陆流程图图5.2用户登陆界面〔index.jsp〕图5.3系统管理员界面〔admin/index.jsp〕普通用户、部门信息管理员和系统管理员的界面基本一致,除了导航栏与系统管理员相比缺少相应的功能。5.1.2、企业基础信息模块实现现前阶段的企业基础信息模块完成了企业员工的信息录入和查询工作。只要是系统的注册用户〔全体员工〕都能够通过导航栏中的员工信息调用它。用户能够补充和修改自个的信息,能够阅读别人的信息。员工信息界面〔info/index.jsp〕如此图5.4所示。图5.4员工信息界面点击自个的名字,进入到信息编辑页面inforedit.jsp,在该界面上能够补充和修改个人信息;假如点击了别人的名字,则能够显示出该员工的基本信息。5.1.3、仓储管理模块实现用户登陆后,具有仓储管理使用权限的用户才能够通过操作界面选择仓储管理,在仓储管理页面中,能够看到入库信息、出库信息、还库信息和库存信息。仓储管理中所有的数据修改后,都通过wareDao类与数据库进行操作。在库存列表界面〔warehouse/warelistall.jsp〕中选择要入库的产品名称,点击与该产品名对应的入库链接,进入inStorage.jsp界面,调用wareList()方式方法,进入wareList.jsp界面,显示出与该产品相关的数据,确认入库数据后点击入库按钮,调用wareDao.insert()方式方法,将入库信息插入storage_instocks表中。入库管理功能的流程如此图5.5所示。图5.5入库流程图为了便于用户操作,系统在库存列表界面中显示产品库存数据的同时,设置了入库和出库两个链接,分别对于产品的入库和出库操作。与入库处理一样,在进行出库处理时,首先在库存列表界面〔warehouse/warelistall.jsp〕中选择要出库的产品名称,点击与该产品名对应的出库链接,进入outStorage.jsp界面,调用wareList()方式方法,进入wareList.jsp界面,显示出与该产品相关的数据,确认出库数据后点击出库按钮,调用wareDao.insert()方式方法,将出库信息插入storage_outstocks表中,并调用weareDao.delete()方式方法,将出库数据从storage_instocks表中删除。出库管理功能的流程如此图5.6所示。图5.6出库流程图仓储管理牵涉的所有方式方法都定义在WareMan类中。库存列表的界面显示如此图5.7所示。图5.7库存列表界面5.1.4、企业公告管理实现所有的用户都能够阅读公告信息,但是只要部门信息管理员有权发布、修改和删除信息。所有的公告都是根据提交部门分类的,公告发布后系统通过getDateTime()方式方法自动记录公告发布时间。最后由informDao.save()方式方法将数据保存到公告信息表inform中。使用informDao.find()查找公告信息,它的参数是一个字符串变量,能够是部门名或all,假如是all则查找全部公告,在find()方式方法中调用了sort()根据时间降序序列对公告排序,再通过informView.show()方式方法在inform.jsp页面上显示。企业公告显示界面如此图5.8所示。图5.8公告显示界面5.2、企业聊天软件的实现根据企业业务需要,系统提供一个工具软件YH-Hello聊天软件,该工具只限企业员工使用,员工能够不受任何限制在所有员工范围内添加好友。企业员工默认已经注册了用户,用户帐号是工作证号,用户昵称为部门名-员工名,密码为工作证号。用户初次登陆后能够修改昵称和密码,但昵称必须保存原格式,且部门部分不允许改变,员工名能够自行修改。YH-Hello聊天软件是一个典型的Java程序,分为客户端和服务器端,服务器端分为应用服务器和数据服务器。在现有部署环境中,该聊天工具的服务器和本系统提供的基于B/S架构的软件系统部署在同样的应用服务器和数据服务器中。应用服务器提供YH-Hello的服务界面,包括服务启动关闭等功能,并提供监听端口,随时响应客户端的请求。数据服务器使用mysql数据库存储用户、密码、昵称、聊天信息等数据。客户端提供登陆界面、好友列表界面和聊天界面供用户执行操作,并使用线程与服务器进行通信。在物流企业信息系统界面上提供调用YH-Hello聊天软件的按钮〔假如用户使用默认安装途径〕,用户可以以从系统外直接调用该软件。由于YH-Hello用于工作,所以在设计时简化了通用聊天类软件的部分功能,如只考虑好友列表,而不考虑陌生人和黑名单的情形,在该软件中,好友的定义是与该用户工作相关的企业员工。5.2.1、程序包构造设计服务器端由四个包构成:com.yhhello.server.view是服务器端呈现包,包括YH-Hello服务器端的服务管理界面。com.yhhello.server.model是服务器端模型包,包括服务器端所有的业务逻辑。com.yhhello.server.db是服务器端数据库操作包,用于数据库的操作交互。mon是服务器端公共包,在客户端也有同样的包存在,用于保持服务器和客户端的一致。服务器端包构造如此图5.9所示。图5.9YH-Hello服务器端包图客户端也由四个包构成:com.yhhello.client.view是客户端呈现包,包括YH-Hello的登陆界面、好友列表界面和聊天界面。com.yhhello.client.model是客户端模型包,包括客户端所有的业务逻辑。com.yhhello.client.thread是客户端线程包,用于处理通信线程以及管理线程类、好友列表类和聊天界面类。mon是客户端公共包,在服务器端也有同样的包存在,用于保持服务器和客户端的一致。客户端包构造如此图5.10所示。图5.10YH-Hello客户端包图5.2.2、客户端设计与实现、客户端界面1、客户端登录界面:YhCliLogin.java界面布局分析:界面能够分为上、中、下三部分,上面是公司的图片Logo,能够定义一个JLabel对象Jltop,图片Logo使用ImageIcon绘制;以下为一个JPanel的流布局,定义JPanel对象Jpfoot,在Jpfoot上提供两个按钮,分别定义JButton对象Jb1、Jb2,触发登陆、取消事件,为了界面美观,两个按钮都是使用ImageIcon绘制;中间是登陆界面的主体部分,能够使用用户名〔用户昵称〕和工作证号两种方式登陆聊天,所以在登陆界面的主体部分由选项卡JTabbedPane对象Jt_switch1来对两个不同的Jpanel对象〔一个用于用户名登陆Jpm1,一个用于工作证号登陆Jpm2〕进行切换。打开登陆界面默认显示的是用户名登陆。在Jpm1和Jpm2上都使用网格来布局,网格定义为3行3列,即GridLayout(3,3),在其上定义了6个控件来实现界面功能,华而不实包括3个JLabel对象,分别定义为文本用户名〔Jpm2则为工作证号〕、密码和忘记密码;1个JTextField对象,定义用户名输入框〔Jpm2则为工作证号输入框〕;1个JpasswordField对象,定义密码输入框;1个JCheckBox对象,定义为记住密码。为了使用户在点击登陆后,触发客户端与服务器的连接,在登陆按钮Jb1上添加addActionListener()方式方法用于响应用户点击操作,定义actionPerformed()方式方法,在点击登陆按钮后开创建立一个YhCliUser对象和一个User对象,User对象中分别使用getText()和getPassword()获得登陆时使用的用户名和密码。然后使用checkCliUser(Userur)方式方法判定结果能否为真,为真则表示能够跳转到好友列表界面并使用dispose()方式方法关闭登陆界面。假如为假,则使用JOptionPane.ShowMessageDialog()方式方法弹出一个对话框表示用户名与密码不一致,请重新登陆!假如用户成功登陆,则跳转到该用户的好友列表界面,所以在点击Jb1的同时,还要发送一个要求返回在线好友信息的YhMessage包。设计步骤如下:1.判定能否点击了Jb1按钮,假如是则发送一个要求返回所有在线好友的信息包,为了能保存返回的好友信息,首先开创建立一个YhFriList对象friList,该对象的参数是发出请求客户端的用户名,使用getUser()方式方法获得,getUser()在mon包中User类中定义;传递客户端用户名的目的是告诉服务器要找谁的好友列表;2.使用YhManFriList类中的addFriList()方式方法把好友信息添加到friList;3.开创建立一个YhMessage对象,定义它的发送者是本客户端,信息类型是请求在线好友类型Mess_get_onLinFri;4.使用对象流的方式方法发送YhMessage。YH-Hello客户端登陆界面如此图5.11所示。图5.11YH-Hello登陆界面2、好友列表:用户登陆成功后,调用好友列表界面:YhFriList.java界面布局分析:界面整个是一个JpanelBorderLayout布局,上面是一个JLabel,定义文本好友列表,下面部分是一个JScrollpane控件,在其上放置了JpanelGridLayout布局,初始化一个JLabel数组用来显示用户名和头像。由于想要鼠标移动到用户时出现高亮效果,则对每一个JLable做一个addMouseListener监听,并在mouseEntered()方式方法中,定义一个JLabel对象JLa,使之初始化为arg0.getSource(),并设置其前景色。使用同样的方式方法在mouseExited()中恢复原有的前景色,即可产生鼠标移动时的高亮效果。另外,当鼠标双击某一用户时,弹出聊天界面,则在mouseClicked()方式方法中首先通过arg0.getSource().getText()得到用户名,并赋值给string变量uname;然后开创建立一个YhChat(string)对象〔该对象在YhChat.java中定义〕,将uname传入。当一个用户成功登陆后,向服务器发送一个Mess_get_onLinFri类型的YhMessage,向服务器请求他的所有好友信息;服务器接到请求后,向客户端发送一个Mess_retu_onLinFri类型的YhMessage,返回该客户端所有的好友信息。系统默认初始情况下YhFriList定义只要该用户自个在线,别人都不在线,在获得服务器的响应后,需要更新客户端的好友列表。定义updateFriend(YhMessagem)方式方法来执行更新操作。设计思路是:定义一个字符串数组onLinFri[]来保存由m中获得的好友名。当点击好友列表中的某个用户时,会从YhFriList.java跳转到YhChat.java,即聊天界面。为了获取当下用户,则在mouseClicked()方式方法中开创建立一个YhChat(friusid,uName)对象,string类型的firusid中储存的是已经在mouseClicked()方式方法中获得的好友用户名。另外要在好友列表的标题栏中显示当下用户的用户名,则在构造函数中添加一个参数stringuName。在开创建立了聊天界面后,根据程序设计逻辑,要把它参加到聊天界面管理类YhManChat中,使用YhManChat.addChat()方式方法添加。好友列表界面如此图5.12所示。图5.12好友列表界面3、聊天界面YhChat.java界面布局分析:包括一个JTextArea对象用于显示聊天内容,一个Jpannel对象,在Jpannel对象上有一个JTextField对象用于输入聊天信息和一个JButton对象的发送按钮。由于在聊天界面的标题上要显示正在与谁聊天的信息,为了能够获取当下聊天对象,在构造函数YhChat(Stringfriusid,StringuName)中定义两个参数。friusid表示与谁聊天,uName表示我是谁。监听发送按钮Jb,假如用户点击了发送按钮,则做如下处理:1、开创建立一个YhMessage对象m1,在YhMessage类中有私有成员变量sender用于表示发送信息的人,getter表示接收信息的人,content用于表示信息内容。使用m1.setSender()、m1.setGetter()和m1.setContent()分别获取它们的值。其中m1.setSender()获取的是uName的值;m1.setGetter()获取的是friusid的值;m1.setContent()获取的是JTextField对象jtf1中输入的字符串,使用jtf1.getText()方式方法即能够获得。2、将获得的信息m1发送给服务器。开创建立一个objectOutputStream对象,并使用writeObject(m1)方式方法将m1发送给服务器。另外,为了在聊天界面的JTextArea对象Jta中不停的读取YhMessage对象数据,定义run()方式方法并循环执行它。在run()方式方法中能够获得YhMessage对象m1中发信人、收信人和信息内容,通过一个String类型的变量dialogue,对其赋值为m1.getSender()+对+m1.getGetter()+讲:+m1.getContent()+\r\n,然后使用Jta.append(dialogue)将dialogue添加到Jta中,则能够通过聊天界面逐一显示每一条聊天信息。格式如下:业务部-Lesley对业务部-小猫讲:你好!聊天界面如此图5.13所示。图5.13聊天界面、客户端业务逻辑客户端的业务逻辑层包括两个包,com.yhhello.client.model和com.yhhello.client.thread。之所以分为两个包,主要考虑线程和管理在客户端的业务逻辑中是比拟复杂和重要的部分,所以将与它们相关的业务逻辑单独定义了一个包。另外在调用关系上,两个包固然都在业务逻辑层,但有层次上的区别。YhCliConSer.java位于com.yhhello.client.model包,是客户端后台程序,用于与服务器端交互。YhCliConSer类定义了客户端发送信息给服务器的方式方法。YH-Hello客户端发送给服务器的信息内容能够分为两类:一类是用户登陆信息;另一类是聊天信息,即当用户登陆后直至用户退出软件,发送的都是聊天信息。基于这两类信息的不同,定义了YhCliconLogin()方式方法和YhClicon()方式方法,分别应用于初次连接〔即登陆连接〕和其它连接〔非登陆连接〕,它们的参数都是一个对象类型。YhCliconLogin(objecto)方式方法设计思路:1、定义一个Socket对象sc,定义服务器IP地址和监听端口,监听端口必须与服务器端com.YHhello.server.model包中的YhSerVerify类中定义的监听端口一致。2、开创建立一个objectOutputStream对象,并使用writeObject()将对象发出。3、使用InputStream()方式方法接收信息,接收的信息是一个object对象,将该对象转换为YhMessage对象。4、判定返回的信息类型,在MessType类中定义了YH-Hello最常见的信息包类型接口,与本段程序相关的有:假如信息类型=1,表示登陆成功确认包〔mess_succ〕;信息类型=2,表示登陆失败确认包〔mess_fail〕。5、由于YhCliconLogin用于登陆连接,所以定义当信息类型等于1时,YhCliconLogin()返回true,并开创建立一个该客户端与服务器通信的线程,步骤如下:(1)开创建立一个YhCliConSerThr对象〔sc是它的参数〕,然后启动该线程。(2)将该线程参加到线程管理类YhManCliSerThr中,该类中定义了addCliConSerThr方式方法能够添加线程。YhClicon(objecto)方式方法相对来讲比拟简单,定义socket通信即可。YhCliUser.java位于com.yhhello.client.model包,它定义了一个boolean类型的方式方法checkCliUser(Userur),该方式方法的参数是一个User对象〔在公共包中定义〕,用于验证用户能否合法,在该方式方法中调用YhCliconLogin方式方法。YhCliConSerThr.java文件位于com.yhhello.client.thread包中,它用于定义客户端连接服务器端线程。开创建立线程的关键是将socket对象传进来,因而在定义构造函数时,使之带有一个Socket类型的参数。只要客户端和服务器通信,就一定会使用YhCliConSerThr,在该类中定义了run()方式方法用于不停的读取服务器端发来的信息。run()方式方法设计思路如下:1、定义一个YhMessage对象m用于保存从s.getInputStream()中读取的信息。s是一个socket对象,实际上我们获取的信息是一个对象流,要把它强迫转换成YhMessage对象。2、根据获取消息包的类型进行相应的处理。(1)假如消息类型是mess_content,则把它显示在聊天界面上。(2)假如消息类型是mess_get_onLinFri,则更新好友列表。YhManCliConSerThr.java文件位于com.yhhello.client.thread包中,它用于管理客户端线程。使用HashMap存储所有的线程,它的K值是用户帐号,V值是YhCliConSerThr类型的线程。对它提供addCliConSerThr()方式方法和getCliConserThr()方式方法用于将线程参加到HashMap和通过用户帐号获得该线程。YhManChat.java文件位于com.yhhello.client.thread包中,它用于管理聊天界面。设计思路与其它管理类基本一致,将所有的聊天界面存储到HashMap中,并提供参加addChat(Stringchatid,YhChatyhchat)和取出getChat(Stringchatid)两个方式方法。YhManFriList.java文件位于com.yhhello.client.thread包中,它用于管理好友列表。设计思路同上,将所有的好友信息存入HashMap,提供参加addFriList(Stringyhfrid,YhFriListyhfrilist)和取出getFriList(Stringyhfrid)两个方式方法。5.2.3、服务器端设计与实现、服务器端界面服务器主界面YhSerMainpage.java,它在com.yhhello.server.view包中。界面分析:服务器主界面的功能是通过该界面能够启动和关闭服务器:为了实现这一功能,在界面上定义两个JButton对象Jb1和Jb2,分别对应启动服务器和关闭服务器按钮,这两个按钮放在一个Jpanel上。在Jb1上做监听,一旦点击了Jb1按钮,即便用getSource()获得的值等于Jb1,则开创建立YhSerVerify对象,启动服务器;当getSource()获得的值等于Jb2,执行System.exit(0)关闭服务器。界面呈现如此图5.14所示:图5.14服务器界面、服务器端业务逻辑在服务器的业务逻辑层包括3个主要类,分别是:YhSererify:服务器后台程序,所谓的启动服务器就是调用该程序。它提供验证客户端的功能。YhSerConCli:服务器连接客户端的线程,每个客户端连接服务器都会为它开创建立一个线程。YhSerManCli:管理服务器连接客户端的线程。业务逻辑层的所有操作都部署在com.YHhello.server.model包中。服务器后台程序YhSerVerify.java用于监听客户端能否有连线请求并验证用户信息。程序设计思路如下:1.开创建立ServerSocket对象ss,定义监听端口;2.发现能否有堵塞,假如有则表示服务器与客户端之间存在连接,假如没有则表示如今是等待连接阶段。使用accept()方式方法判定能否存在堵塞;3.接收客户端发送的信息,在本程序中,客户端和服务器端在网络上以对象流的方式传递信息。将getInputStream()获得的信息转换为User类型,使用readObject()读取User对象,此时的User对象中包括的是用户名和密码信息。4.com.yhhello.server.db包中的YhSerConDb类定义了数据库的操作,调用该类中定义的方式方法验证用户名和密码能否正确。假如正确,则setMessType(1)。反之则返回2。在包中的YhMessage类中定义,1表示登陆成功;2则表示登陆失败。将信息类型使用writeObject()方式方法返回客户端。5.开创建立YhSerConCli对象scc1,并通过YhSerManCli类中addCliThread()为连接的客户端开拓scc1线程,使用start()方式方法启动线程,使用notifyOUser()通知其它在线用户。scc1线程能够保持服务器和该客户端之间的通信。6.循环执行2-5步,为每个连接的客户端开拓一个线程。在YhSerVerify的程序流程中,我们能够看到YhSerConCli和YhSerManCli两个类起到了重要的作用。YhSerConCli.java文件中定义了服务器与某个特定的客户端的通信线程,它的构造函数中的参数是一个Socket对象,传递该参数的目的是获得服务器与该客户端的连接。YhSerConCli.java主要由run()方式方法和notifyOUser()方式方法组成。run()方式方法用来接收和转发客户端发来的信息。程序设计思路如下:1.从Socket中读取YhMessage,获得的YhMessage是由object类型转换而来的。2.通过YhMessage类中定义的getSender()、getGetter()和getCon()方式方法获取发送者、接收者和信息内容。3.根据YhMessage类对从客户端获取的消息进行类型判定:(1)假如该消息的类型为Mess_content,则表示这是一个聊天信息包。此时服务器要将这个YhMessage对象转发给接收者,步骤如下:1)先获得接收者的通信线程,它由YhSerManCli类中getCliThr(m1.getGetter())方式方法获得,m1是YhMessage对象。2)获得接收者的通信线程后,以对象流的方式转发m1。(2)假如该消息的类型为Mess_get_onLinFri,则表示这是一个请求在线好友的信息包。此时服务器要将把该客户端的所有好友发送给该客户端,步骤如下:1)调用YhSerManCLi类中的getAllUser()得到所有好友名;2)开创建立一个YhMessage对象m2,设置它的类型是Mess_retu_onLinFri〔该类型表示这是一个返回在线好友信息包〕;内容为好友名;接收者是m1.getSender(),即m2.setGetter(m1.getSender()),即此时的接收者就是向服务端发出请求的客户端;3)以对象流的方式转发m2。以上是run()方式方法的主要功能和设计思路,另外一个重要的方式方法notifyOUser()的功能是通知其它用户,有一个客户端连接了服务器。程序描绘叙述如下:1.首先得到所有在线的用户线程,我们使用HashMap保存服务器上开拓的所有线程。Hashmap使用迭代的方式方法遍历它的key值,进而获得所有的在线用户,即Iteratorit1=hm.keySet().iterator();2.当it1.hasNext()为真时,表示这是一个在线用户的线程。我们定义一个YhMessage对象,设置该YhMessage对象的类型是Mess_retu_onLineFri,即返回在线好友包〔关于YhMessage的各种定义在YhMessage.java中提到〕,并取出在线用户的名字,将其设置为该YhMess

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论