1、超市收银系统设计分析一、 系统整体架构图 1从图 1 可以看出,系统框架很清晰,用户登录,根据用户权限的不同,对应不同的操作方法,操作对象为商品。但本系统要求使用 C/S 框架结构来设计。C/S 框架介绍:C/S 结构,即大家熟知的客户机和服务器结构。C/S 结构的基本原则是将计算机应用任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布”原则。客户端完成数据处理,数据表示以及用户接口功能;服务器端完成 DBMS(数据库管理系统)的核心功能。这种客户请求服务、服务器提供服务的处理方式是一种新型的计算机应用模式。Client 和 Server 常常分别处在相距很远的两台计算机上,Clie
2、nt 程序的任务是将用户的要求提交给 Server 程序,再将 Server 程序返回的结果以特定的形式显示给用户;Server 程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。鉴于超市收银系统的特性,本系统不牵扯多个客户端,不需要线程同步。二、 代码设计框架因为使用 C/S 框架设计程序,因此有固定的设计步骤:1. 项目包的设计:图 2client 包:主要由客户端操作界面类和客户端业务类组成,客户端操作类也就是客户端main 方法类,主要负责引导用户操作,提供系统界面信息提示操作,包括:初始化登录视图、商品库存管理视图和收银管理视图;客户端业务类主要包括处理
3、客户端请求并将客户端请求打包发送给服务器的方法和一些辅助操作方法。处理库存管理员请求方法为:商品入库、商品出库、新增商品、查询全部商品和按编号查询商品;处理收银员请求方法为:扫描商品、修改购买数量商品和结账。entity 包:主要由系统所涉及的实体类组成,根据操作视图可以确定为用户类和商品类。图 3 用户信息图 4 商品信息server 包:主要由服务器主流程类(线程类)和服务器(数据处理)业务类组成,服务器主流程类也即 main 方法类,主要负责接收客户端请求,并根据请求标志信息分配相应操作,最后再将处理数据发送给客户端;服务器数据处理业务类主要由处理客户端请求的方法和商品信息库组成。uti
4、l 包:util 包为实用工具包,主要包括项目中一些工具类,主要包括数据处理类(加密、解密、数据转换、特殊文件操作和数据打包)和常量类。本项目主要包括数据打包类、常量类和 proprties 文件操作类。sys.properties 文件:Properties 文件是一个文本文件;properties 文件的语法有两种,一种是注释,一种是属性配置;注释:前面加上#号;属性配置:以“键=值”的方式书写一个属性的配置信息。Properties 类本身表示了对一种 Map 结构的操作,properties 文件本身就表示一个“键值对”的集合,因此,Properties 类属于集合容器的家族,在使用前
5、应该创建一个Properties 的容器,实际上就是创建一个默认不带参数的 Properties 对象,通过别的方式给里面添加“键值对” 。sys.properties 在本项目的作用主要用来配置服务器信息:主机名和端口号。2、项目设计知识点本项目主要设计关键知识点:类和对象,封装,继承,异常,集合和泛型,输入/输出,多线程和网络编程。3、代码编写思路1) 创建项目2) 创建 Java 包:客户端包,服务器包,实体包,实用工具包。3) 创建配置文件:.properties 文件或 .xml 文件。4) 创建各 Java 包中的类文件:客户端包:客户端操作界面类和客户端业务类;服务器包:服务器主
6、流程类(线程类)和服务器业务类(数据处理) ;实体包:根据具体项目情况创建;实用工具包: 数据包类:主要储存客户端和服务器之间交互的关键数据,包括实体对象和逻辑判断标志等; 常量类:客户端和服务器之间需要共同使用的状态常量,一般为业务操作标识符和系统信息常量(正确、错误状态常量,配置信息常量) 。 工具类:一般为配置文件的操作类。5) 编写个项目文件(由简入繁:单个功能实现到全部功能拓展) 。6) 项目调试。三、 具体代码分析1. sys.properties 文件编写该文件主要用户配置 socket 套接字属性:主机名和端口号,在此配置信息为:图 5 sys 信息2. 实体类编写根据 ent
7、ity 包分析可知:Goods 类和 Users 类。Goods 类:图 6 Goods 类Users 类:图 7 Users 类注:因为涉及到 socket 编程,因此两实体类均需要序列化。3. 实用工具包类编写1) 数据包类(Datas 类):因为该项目为超市收银系统,根据项目效果图可知,主要设计对象为:商品对象(goods) ,用户对象(user) ;为便于商品信息操作,创建商品集合,又因为牵扯到库存管理和收银两个类,进而创建库存商品集合和 购买商品集合;又因为牵扯到客户端和服务器端业务请求操作,因此创建业务操作标识变量:flag。具体内容如下:图 8 Datas 类图 9 库存商品集合
8、应用需求图 10 购买商品集合应用需求注:因为涉及到 socket 编程,Datas 类需要序列化。2) 工具类(Tools 类文件):Tools 文件主要用于操作 sys.properties 文件,对 sys.properties 文件操作之前,首先需要加载源文件(鉴于加载操作特殊性(提前操作) ,使用 static 块来封装) ,然后才能读取 sys.properties 文件中键对应的值。该类主要是用于读取 socket 参数信息(host,port) 。图 11Propertis 方法:void load(InputStream inStream) 从输入流中读取属性列表(键和元素对
9、)。ClassLoader 类:类加载器是负责加载类的对象。InputStream getResourceAsStream(String name):返回读取指定资源的输入流。3) 常量类:由代码编写思路分析可知:常量类列表主要由以下几个部门组成:系统配置常量,系统信息反馈常量,系统操作常量,管理员操作常量,收银员操作常量。图 12 常量列表注:具体常量参数可以在具体编程中增加或删减。4. 客户端类编写1) 客户端操作界面类:客户端操作界面类主要完成如下工作:(1)用户登录(2)用户操作用户登录有两个选项:管理员和收银员;用户操作也分别按照管理员和收银员来展开。图 13 管理员登录成功视图图
10、14 收银员登录成功视图鉴于登录操作只有两个选项,采用 if-else 编写较为快捷。具体代码截图如下:图 15 登录操作代码管理员操作和业务员操作选择较多,因此采用 switch 来实现较为合适,具体代码截图如下:图 16 管理员操作代码图 17 收银员操作代码main()方法:原则上 main()越简单越好,具体代码截图如下:图 18 main()方法代码注:代码编写按如上模块来进行编写(登录方法,管理员操作方法,收银员方法) ,具体方法的实现依靠客户端业务类,本类中主要负责视图的引导和显示,可以分模块来进行编写和调试,遵循由简入繁原则。2) 客户端业务类:客户端类的方法编写主要为满足客户
11、端操作界面类的需求且需要实现与服务器端的信息交互(通过 socket 编程实现) ,因此具体代码包括登录信息的处理(方法) ,管理员视图下的业务操作处理(方法) ,收银员视图下的业务操作处理(方法) ,以及业务操作过程需要的逻辑操作方法的编写。具体代码截图如下:图 19 客户端业务方法因为需要使用 socket 编程来实现客户端与服务器的数据通信,因此需要 socket 的初始化和 socket 的关闭操作。具体代码如下:图 20 socket 的初始化和关闭操作注:客户端业务类的调试应该在服务器类的框架搭好之后进行(可以完成基本的通信应答操作) 。客户端编程关键点:客户端发送数据编写原则,通过 Datas 类中的属性参数作为载体,即对客户信息,商品信息和业务操作常量标识符进行数据打包,统统将需要发送的关键信息封装到 Datas对象内,然后将这个对象发送给服务器,具体代码截图如下:图 21 商品入库关键信息 Datas 打包发送代码