智术园的资源

  • 基于Jsp和MySql的汽车维修管理系统

    摘 要随着人们生活水平的不断提高,私家车的数量正在逐年攀升。这带动了汽车维修行业的发展。越来越多的汽车维修厂如雨后春笋般涌现。同时,维修厂的业务操作产生了庞大的数据,这给汽车维修厂工作人员的数据管理提出了新的要求,他们需要去考虑如何高效无差错的处理数据,保证维修厂的高效运营,来提升他们的经济效益。所以,汽车维修厂需要一个能够帮助他们处理维修厂的业务数据、客户数据和员工数据信息管理系统。
    本课题主要解决的问题有:

    车辆接待:系统需要实现添加来访者以及其车辆的信息,进行开单操作,并为维修单分配维修人员和质检人员
    维修项目登记:维修人员维修检查,登记维修用料和维修工时的情况
    维修领料:维修人员人员领取维修材料
    质检完工:质检员进行质检,录入质检结果到系统中
    消费结算:查询维修单,进行付款操作
    配件管理:工作人员管理配件的信息

    本文首先介绍了汽车维修管理的课题研究的背景,当前发展的现状和面临的问题。接着介绍了本次课题所用到的技术。然后是需求分析,使用面向对象的思想方法结合UML分析建模工具来完成。然后介绍了系统的设计部分,详细说明了系统的业务逻辑和具体的实现方法。描述了系统的数据库设计。还介绍了系统的具体实现部分。本系统使用SMM框架来实现,页面使用EasyUI来完成。最后介绍了系统的测试部分,选取了一部分功能进行测试。
    关键词:汽车维修管理;Java;SSM;EasyUI
    AbstractWith the continuous improvement of people’s living standards, the number of private cars is increasing year by year. This leads to the development of the automotive maintenance industry. More and more car repair factories have sprung up. At the same time, the maintenance operations of the plant have generated a large amount of data, which put new requirements for the data management of the staff of the vehicle repair factory. They need to think about how to handle data efficiently and without error to ensure efficient operation of the maintenance and plant their economic benefits. Therefore, the car repair factories need a business data management system that can help them deal with the maintenance plant’s business data, customer data and employee data.
    The main problems solved in this paper are:

    vehicle reception: the system needs to add visitors and their vehicle information, billing operations, and assign maintenance staff and quality inspection staff to the maintenance order
    maintenance project registration: maintenance staff can carry out maintenance inspection, register maintenance materials and maintenance hours
    maintenance picking: maintenance staff receive maintenance materials
    quality inspection completed: quality inspectors quality inspection and input quality inspection results to system
    consumer billing: check the maintenance order and make payment operation
    accessories management: staff management accessories information

    This paper firstly introduces the background, current situation and problems of vehicle maintenance management. Then the paper introduces the technology used in this project. Then the requirement analysis is carried out by using the object-oriented method and UML analysis modeling tools. Then the design of the system is introduced, and the business logic of the system is described in detail. It describes the database design of the system. It also describes the specific implementation of the system. The system uses the SMM framework to achieve and the pages use EasyUI to complete. At last, it introduces the test part of the system and selects some functions to test it.
    Keywords: Vehicle Maintenance Management; Java; SSM; EasyUI
    1 绪论1.1 课题研究的背景随着我国汽车制造业的不断发展,汽车数量在不断的增加。在这种背景下,出现了越来越多的汽车修理厂,汽车维修行业展现了蓬勃发展的趋势。有相关的调查资料显示,在2013年,我国的汽车售后的资金规模量已经高达4500亿元,未来还在呈不断上升的趋势。我们可以发现,汽车的售后服务在整个产业链中占据着越来越重要的地位。很多的汽车厂家开始把自己品牌售后服务维修作为重要的战略要点之一。
    由于这些新增长点的出现,汽车修理厂的业务数据量也变得多了起来,这对汽车维修行业的管理者们对业务数据的管理发起了新的挑战。维修厂的工作人员除了要面对自己眼前的维修任务,还要处理来自修理厂其他的基础业务信息。这些数据即使被记录下来也无法被加以有效的管理和利用。在传统的汽车修理厂的管理模式中,维修厂的工作人员只能通过手工表格的方式来记录这些信息。但是这些数据量过于庞大和复杂,查找起来不太容易更不方便去统计,这给工作人员的数据处理带来了一定的麻烦,在一定程度上降低了修理厂的运营效率。这些问题也逐渐成为了汽车维修管理中的痛点。所以在这种背景下,需要有一个管理系统,来将维修厂日常运营产生的数据进行管理、分析和统计,让维修厂的管理人员从繁琐的数据处理中解脱出来。从现有普遍的汽车修理厂的工作模式出发,经过调查和分析,整个业务流程大体上分为五个主要的步骤,分别为维修接待、维修登记、维修领料、维修质检和支付结算。汽车维修厂信息管理系统需要能够实现客户资料的管理、维修订单的维修领料情况管理和维修项目登记管理等功能。让这些数据便于汽修厂内部的对账、修理厂员工的考绩效核以及消费者最终的消费结算。基于以上的讨论,一个能够支撑汽车修理厂日常运营的信息管理系统需要被开发出来,来帮助修理厂提高工作的效率,解决数据存储和统计的相关问题,为汽车修理厂带去更多的经济效益提升在同行业中的竞争力。
    1.2 课题研究的现状在现实场景中,按照传统的做法,汽车修理厂的工作人员每天需要记录大量的来访的用户的信息,对于用户的每一个订单需要进行维修进度的追踪,以及支付的追踪。还要处理一大堆员工的业绩和汽车维修零件相关采购等基础信息,在这些大量复杂而且没有经过处理的数据面前,工作人员也会束手无策。现在市面上的一些类似的管理系统有很少的一部分能够真正从汽车维修厂的实际业务出发,解决汽车修理厂的维修订单追踪和庞大的数据统计等问题。
    1.3 课题研究的意义汽车行业作为当前热门的的行业之一,在我们的生活中扮演着重要的角色,对于维修厂而言,如何高效的提高汽修厂的工作效率是我们需要考虑的问题。按照传统的方式,汽车维修厂的数据维护成本太大,效率低下,而且容易出现错误,这严重阻碍了汽车修理厂的正常的运营。所以一个能够帮助汽车修理厂从接单到维修到维修领料再到完工以及最后的支付结算需要被设计开发出来,而本课题就是着重解决这几个业务流程,帮助用户去除维修管理中的痛点,真正做到高效的自动化管理,提高维修厂工作人员的效率。为汽车修理厂解决数据量大,数据复杂不知如何管理的问题。
    1.4 文档的内容全文共有六大模块。

    第1章绪论:该部分主要介绍了本课题研究的背景、现状和意义。是全文的开篇,着重阐述了本文需要解决哪些现实生活问题
    第2章开发工具和相关技术:该模块主要说明了完成本系统主要采用了哪些技术,对于这些技术做一个简要的描述
    第3章需求分析:该部分作为系统的前期分析设计模块,主要内容为需求的陈述以及业务建模
    第4章系统设计:该部分主要分为四个小部分,分别为:体系结构设计、系统功能设计、数据库设计和安全性设计部分
    第5章系统实现:该部分主要展现了系统实现的具体情况和相关的功能说明
    第6章系统测试:该部分为系统测试模块为针对系统的主要功能做出的一些测试的结果

    2 开发工具及相关技术2.1 Eclipse工具Eclipse是备受广大程序员爱好的一款软件开发工具。它具备源代码开放、免费的的优势,拥有优秀厂商的技术支持,同时eclipse具备丰富的可拓展的插件,Eclipse不仅仅是java的集成开发环境,还支持其他的编程语言,比如C/C++、Python和PHP等等。
    2.2 WebStorm工具WebStorm是备受很多国内JS开发者热宠的一款前端开发利器。很多人对WebStorm在前端开发的表现有很高的评价,它被称为“最优秀的javascriptIDE”、“前端开发的神器”和“最高效的HTML5集成开发环境”。
    2.3 Navicat for MySQL工具Navicat是香港卓软数码科技有限公司旗下生产的一种图形化的数据库管理软件,它支持当前多种主流的数据库,比如Oracle、MySQL、Microsoft SQL Server及MariaDB等。该软件适用于DBA和程序员,它能够支持多重连接本地和或者远程的数据库,操作十分方便。
    2.4 Java技术Java是一门面向对象的跨平台的高级程序设计语言,开始由sun公司推出。经过数十年的不断发展,java的发展已经日臻成熟,越来越多的编程人员开始学习并使用java来编写很多有趣的程序。Java语言还具备自己其他的一些新的特性,比如自动垃圾回收机制、泛型等等。
    2.5 Spring技术Java技术的发展日新月异,各种框架层出不穷。技术的发展来源于人们对于简单高效的追求,而Spring正是为了用这样的方式解决现实生活问题而产生的。Spring由于其具备简单、轻量级、依赖注入和面向切面编程的特性而备受java开发人员的追捧。本系统决定使用spring来简化系统的开发。
    3 需求分析3.1 需求陈述汽车维修管理系统是针对维修厂日常运营管理而设计的一款软件。该软件需要能够帮助修理厂从维修接待、维修检测施工、维修领料、质检核算等环节实现自动化,帮助维修厂的工作人员提高工作效率,减少出错的概率,使汽车维修厂能够平稳高效运营,提升修理厂的经济效益。同时该系统需要能够帮助维修厂统计的营业效益,用图表统计的方式让数据更加生动的展现出来。该系统核心模块有客户的接待模块、维修登记模块、维修领料模块、维修质检模块和支付结算模块。这些模块共通组成了汽车维修厂所真正需要的一个B/S架构的在线管理系统。
    3.2 业务建模3.2.1 业务流程
    车辆接待:汽车修理厂的工作人员接待新的客户,当有车辆到汽修厂时,需要进行用户信息的登记。首先工作人员先查看本维修厂是否有当前的客户,如果有当前的客户就继续登记车辆的其他信息,如果没有登录则需要重新记录用户的信息形成用户的档案。在确定了用户信息之后,需要登记车主描述的车辆状况的信息,登记汽车上的贵重物品,与用户核实是否需要清洁车辆、查看旧件、检查备胎等业务,确定用户最终提车的时间。然后工作人员会安排当前汽车修理厂的相关的维修人员和质检人员。用户拿到发票等待汽车的维修完成。没有其他的异常情况进入下一个业务环节
    维修项目登记:维修人员了解当前自己维修的任务有哪些,查看维修订单,了解客户描述的车辆的状况,然后进行汽车的检测,记录当前的车辆需要维修的项目以备最终的支付结算。同时维修人员需要对自己维修工作中对于当前车辆所要用到的零件进行登记,并由维修人员拿到的零件领取单去零件仓库领取相关的材料,来完成最终的维修任务。维修人员在维修完毕并确定无误后可交接给质检人员进行相关维修项目的质检,观察维修项目是否合格。维修人员如果还未曾领取材料则到第三个步骤进行维修材料的领取。维修完毕后则进入第五个步骤质检完工的环节
    维修领料:在第二步骤的操作中,维修人员在登记了自己所要领取的材料之后,需要进行材料的领取。领取材料后需要对领取人、领取材料的时间、领取材料的名称以及领取材料的数量进行登记,进行后续的操作。如果发现零件库存不够则通知相关的采购人员进行原材料的采购工作,如果材料数量足够则用户领取材料继续第二个步骤维修项目登记的环节
    采购配件:当维修人员进行领取材料的时候,发现材料库存量不足则需要进行材料的采购工作,采购员拿到相关的待采购的订单后,进行采购订单的业务环节,期间采购需要记录下采购的商家、零件的名称、采购的价格、采购的日期以及采购的单价等信息,方便财务管理和后续的业务操作。采购完成后,待维修人员进行维修材料的领取。没有异常情况,进行后续的业务操作
    质检完工:维修人员在交接给维修质检人员时,质检人员需要查看质检人员登记的维修项目有哪些,根据维修项目进行质检,对于质检不通过的需要告知维修人员哪里还存在问题,退回给维修人员继续维修直至维修质检完全通过。当该订单所有的内容经过维修并且已经维修通过的时候,该笔订单就进入到的维修支付的阶段,如果没有质检通过,则退回到第二个步骤维修登记部分
    消费结算:作为最后一个部分支付部分,该部分为用户到维修厂进行提车,用户对自己的汽车进行订单的支付功能,工作人员会列出用户当前所有的登记过的维修项目的费用和已经使用过相关零件材料的费用进行合计。顾客针对自己的订单完成支付。整个维修过程,从接单、维修、支付提车就结束了

    3.2.2 业务用例建模根据需求的分析,利用建模工具分析得出了以下的业务用例,用例图的具体设计内容如图3-1。

    3.2.3 业务活动图根据业务分析的结果,得到汽车维修管理系统的业务活动图如图3-2。

    3.2.4 业务静态建模根据业务逻辑分析,设计出业务静态建模图,如图3-3所示。

    4 系统设计4.1 体系结构设计汽车维修管理系统使用MVC设计的思想,将模型层、视图层和控制层。结合工厂模式整体设计思路如下,分别将数据访问层,服务层每一层的最上方封装一个工厂类,控制层通过服务层的工厂类调用相关服务,服务类再调用数据访问层的工厂类来实现相关的数据访问层操作,体系结构设计的详情如图4-1。

    4.2 系统总体设计汽车维修管理系统主要分为五大模块,分别为汽车维修管理、配件管理、财务管理、基础数据管理和系统维护,系统功能总体的设计图如图4-2所示。

    4.3 系统功能设计4.3.1 车辆接待功能车辆接待的功能主要是为了实现前台的工作人员对于来访的车辆进行一个车主和车辆信息的登记,同时安排相关的维修人员和质检人员进行后续的维修工作。该部分的主要业务逻辑为用户来访先查询是否有当前用户如果没有就需要重新录入用户的相关的信息。录入或者选择完用户的信息后,用户对用户的当前的车辆进行信息的登记,记录用户对应车辆的状况的描述,同时选择相关的维修人员和质检人员进行后续的修理操作。
    车辆接待功能的设计类图如图4-3所示。

    如上图4-3 车辆接待功能设计类图所示:

    VehicleReception.jsp:该类表示汽车维修管理系统的接待页面
    VehicleReception:该类表示汽车维修接待的控制层
    ServiceFactory:该类为了描述所有的服务的类
    IVehicleMaintence:该类主要为了描述汽车维修接待的服务接口
    VehicleMaintence:该类主要描述了汽车维修管理部分的业务接口实现的部分
    ICustomerMapper:改类为操作用户信息的数据访问接口
    Ipersonalallocate:该类为维修订单人员分配的数据访问接口

    车辆接待功能的顺序图如图4-4所示。

    如上图4-4 车辆接待功能设计顺序图所示:

    getAllUserDept:获取所有的用户信息和用户所在部门的信息
    getVehicleMaintence:获取汽车维修管理的服务对象
    queryUserSectorInEUI:查询出用户和部门的信息将结果以easyui数据结构的形式返回
    getUserinfoMapper:获取用户信息数据库操作的接口
    addUser:添加用户和车辆信息的方法
    addUserVehicleInfo:服务层添加用户和车辆信息的方法,返回操作的结果
    receptOrders:控制层用来添加维修订单的方法
    newOrderList:服务层用来添加维修订单的方法

    4.3.2 维修项目登记维修项目登记为维修人员进入系统后查询到分配给自己的任务,可以根据条件查询,如按照时间范围、关键字和维修单的状态等进行查询。维修人员点击一条维修单可以看清楚接单员填写的有关车辆相关的信息,然后系统会查询维修用料情况和维修项目工时等相关情况。维修人员可以对维修项目工时的情况和使用零件材料情况进行管理。
    维修项目登记功能的设计类图如图4-5所示。

    如上图4-5 维修项目登记设计类图所示:

    MaintanceProjReg.jsp:该类主要描述了维修项目登记的页面
    IOrdersMapper:该类主要描述了维修订单管理的数据访问的接口
    IMainprojregMapper:该类主要描述了维修项目登记的数据访问的接口
    IPartMapper:该类主要描述了维修项目使用材料的数据访问接口

    维修项目登记功能主要包括加载维修人员的维修任务信息、查看客户登记的信息、维修项目登记管理和维修使用材料登记管理等功能,其顺序图如图4-6所示。

    如上图4-6 维修项目登记功能的顺序图所示:

    queryAllTasks:该方法为查询所有当前的维修的任务
    addMaintRegRecord:为当前的订单添加维修项目的登记
    partsManage:为当前的维修的订单添加零件使用的纪录
    endFixed:标记当前的维修项目已经登记完成进入下一步
    queryMaintanceOrders:查询当前的所有维修的任务
    addMainItemRecord:登记维修项目的信息
    addPartRegtion:登记零件使用情况
    finisedFixed:结束当前维修单的维修

    4.3.3 维修领料维修领料的环节为维修人员在登记了材料后,进行领取材料的操作。用户可以根据自己的工号、姓名和时间范围查询到自己的维修领料情况。用户点击维修后写入领取记录表,改变库存的数量,如果库存不足则写入采购表中,等待采购人员采购。维修领料的类图设计如图4-7所示。

    如上图4-7 维修领料设计类图所示:

    MaintenancePicking.jsp:该类主要作用为描述维修领料的页面
    BeanUtils:该类主要作用为封装了将List类型的集合转化为分页的形式的数据结构
    IPartusedMapper:该类主要作用为封装了零件使用历史记录的数据访问接口
    IPartstorageMapper:该类为零件存储的数据访问接口
    IPartprocMapper:零件采购的数据访问接口

    维修领料的顺序图如图4-8所示。

    如上图4-8 维修领料顺序图所示:

    queryAllPickingRows:查询所有的领取材料的信息
    pickPart:该方法主要功能为领取材料的信息
    queryPickingView:该方法主要实现分页查询领取材料的信息
    topagedResult:该方法主要实现的功能为将list类型的数据转化为分页形式的数据
    selectPartUsed:查询已经登记过的材料的信息
    IPartusedMaper.selectByPrimaryKey:通过主键查询已经登记过的材料的信息
    updateByPrimaryKeySelective:更新已经登记过材料的信息
    IPartstorageMapper.selectByPrimaryKey:通过主键查询零件存储的信息
    insertSelective:向零件采购表中添加数据

    4.3.4 质检完工质检完工主要的功能为维修人员在进行维修结束后对自己的维修订单进行确认,确认无误后点击完成维修,则该笔维修订单到了质检完工的环节,质检人员首先查看自己的当前的所有的质检任务,然后点击质检查看维修人员登记维修项目的详细内容。质检人员对维修人员登记的每一个项目进行质检操作,如果合格点击审核通过,如果不合格点击审核不通过,同时可以输入不通过的理由。质检人员可以点击回退按钮,将该笔维修单让相关的维修人员重新进行维修操作。当所有的维修项目没有问题之后,质检人员可以点击审核通过,该笔订单进入支付结算的环节。
    质检完工的设计类图如图4-9所示。

    如上图4-9 质检设计类图所示:

    IQualityinspecMapper:该类为质检的数据操作的接口
    IMainprojregMapper:该类为维修项目数据操作的接口
    IOrdersMapper:该类为订单信息数据操作的接口

    质检完工的顺序图如图4-10所示。

    如上图4-10 质检完工顺序图所示:

    queryQualiting:按照条件查询当前所要质检的项目
    getVehicleMaintence:控制层查询所要质检项目的方法
    queryFixing:根据订单的编号查询当前维修订单下所有维修项目列表
    queryAllFlexing:服务层查询所有维修项目等级情况的信息
    endQualitied:结束质检项目的方法,改方法包含结束通过质检和将维修订单退回到维修环节中

    4.3.5 消费结算消费结算主要的功能是经过下单、维修质检后的最后一个步骤,用户进行付费提车。系统在付费时候,会自动查询出当前的订单所使用的的材料以及维修项目的列表的详细信息。用户支付完成以后表示整个业务环节结束。
    消费结算的设计类图如图4-11所示。

    如上图4-11消费结算设计类图所示:

    ConsumptionSettle.jsp:该类表示维修订单结算的页面
    IOrdersMapper:该类表示订单的数据访问接口
    IBalancesheetMapper:该类表示维修订单支付情况的数据访问接口

    消费结算的顺序图如图4-12所示。

    如上图4-12 消费结算顺序图所示:

    queryPayingView:查询待支付的维修订单的信息
    queryAllPayOrder:业务层查询待支付订单的信息
    queryAllPartUsedView:查询所有的当前订单下使用的材料的详细信息
    queryMainitemUsed:查询所有的已经登记过的维修项目的信息
    paymyOrders:对我的订单进行支付结算

    4.4 数据库设计4.4.1 数据库逻辑结构设计汽车维修管理系统的ER图如图4-13所示。

    4.4.2 数据表设计账户(Account)数据表,作用是用来描述系统用户的信息。如表4-1所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    账户表编号


    2
    accountnumber
    char(20)
    No
    账户号


    3
    passwords
    char(20)
    No
    密码


    5
    accountflag
    char(10)
    No
    账户的标记


    6
    userinfoid
    int
    No
    用户信息表编号



    结算(Balancesheet)数据表,作用描述用户支付的信息。如表4-2所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    结算表的编号


    2
    settlementdate
    datetime
    No
    结算日期


    3
    totalamount
    double
    No
    总金额


    4
    settler
    char(20)
    No
    操作员


    5
    ordersid
    int
    No
    订单表的编号



    业务状态(Bustatus)数据表,作用是描述业务名称的信息。如表4-3所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    servicecode
    char(20)
    No
    服务的编号


    3
    statename
    varchar(40)
    No
    业务名称


    4
    remarks
    char(40)
    No
    备注



    客户信息(Customer)数据表,作用是描述客户的信息。如表4-4所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    numbering
    char(20)
    No
    用户名称


    3
    mailbox
    char(80)
    No
    邮箱


    4
    contactinfo
    varchar(100)
    No
    联系方式


    5
    idcard
    char(18)
    No
    身份证号码


    6
    customerflag
    char(50)
    No
    客户的标记



    客户信息来访(Customervisthis)数据表,作用是记录用户来访的信息。如表4-5所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    customername
    char(20)
    No
    客户姓名


    3
    contactinfo
    char(20)
    No
    联系方式


    4
    visitime
    datetime
    No
    来访时间


    5
    servicecontent
    varchar(200)
    No
    登记内容


    6
    isnew
    smallint
    No
    是否是新用户


    7
    customer
    int
    No
    客户信息表的编号



    维修项目(Mainitem)数据表,作用是描述维修项目的信息。如表4-6所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    mainnumbering
    char(20)
    No
    维修项目编号


    3
    projName
    varchar(100)
    No
    项目名称


    4
    projcategoryid
    int
    No
    项目类别编号


    5
    itemprice
    double
    No
    项目的价格


    6
    mainflag
    char(10)
    No
    维修项目的标记



    维修项目登记(Mainprojreg)数据表,作用是描述的登记订单的维修项目的信息。如表4-7所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    ordersid
    int
    No
    订单的编号


    3
    mainitemid
    int
    No
    维修项目的编号


    4
    regperson
    char(20)
    No
    登记人


    5
    spenttime
    double
    No
    耗费的工时


    6
    mainstatus
    char(10)
    No
    维修项目登记的状态


    7
    haspassed
    smallint
    No
    审核是否通过



    订单(Orders)数据表,作用是描述订单的信息。如表4-8所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    numbering
    int
    No
    订单的流水号


    3
    customerid
    int
    No
    客户的编号


    4
    miles
    double
    No
    行驶里程数


    5
    ifused
    smallint
    No
    是否查看旧件


    6
    ifcheckspare
    smallint
    No
    是否检查备胎


    7
    ifclean
    smallint
    No
    是否清洗车辆


    8
    esdeliverytime
    datetime
    No
    预计提车时间


    9
    warrcontent
    varchar(200)
    No
    登记的内容


    10
    caritems
    varchar(200)
    No
    随车物品


    11
    valuableobj
    varchar(200)
    No
    贵重物品


    12
    ownerdescribtion
    text
    No
    车主描述故障信息


    13
    hassettled
    smallint
    No
    是否修理完成


    14
    completedate
    datetime
    No
    完成日期


    15
    settlecompdate
    datetime
    No
    支付完成日期


    16
    bustatusid
    int
    No
    业务状态的编号


    17
    paystatusid
    int
    No
    支付状态的编号



    零件(Parts)数据表,作用是零件的信息。如表4-9所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    partnumbering
    int
    No
    零件的流水号


    3
    partcategoryid
    int
    No
    零件类别的编号


    4
    partname
    varchar(200)
    No
    零件的名称


    5
    purchaseprice
    double
    No
    采购价格


    6
    salesprice
    double
    No
    销售价格


    7
    specifications
    char(100)
    No
    规格


    8
    remarks
    varchar(400)
    No
    备注


    9
    partflag
    char(10)
    No
    零件的标记


    10
    supplierid
    int
    No
    供应商的编号



    零件类别(PartCategory)数据表,作用是描述零件类别的信息。如表4-10所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    numbering
    int
    No
    零件系统编号


    3
    partcategory
    varchar(100)
    No
    零件类别名称


    4
    partcatFlag
    char(10)
    No
    零件标记



    零件采购(PartProc)数据表,作用是描述零件采购的信息。如表4-11所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    partcategoryname
    varchar(100)
    No
    零件类别的名称


    3
    partcategorycode
    char(20)
    No
    零件类别的编号


    4
    partname
    varchar(100)
    No
    零件名称


    5
    partcode
    char(20)
    No
    零件的编号


    6
    suppliercode
    char(20)
    No
    供应商编号


    7
    suppliername
    varchar(100)
    No
    零件的名称


    8
    pruchdemand
    double
    No
    零件的需求量


    9
    pruchprice
    double
    No
    零件的采购价格


    10
    pruchenum
    double
    No
    零件采购数量


    11
    prucher
    char(20)
    No
    采购人


    12
    totalpurchase
    double
    No
    采购合计


    13
    purchstatus
    char(10)
    No
    采购的状态



    零件存储(Partstorage)数据表,作用是描述零件采购的信息。如表4-12所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    partid
    int
    No
    零件编号


    3
    warehouseid
    int
    No
    零件仓库编号


    4
    detaillocation
    varchar(200)
    No
    零件的详细位置


    5
    inventory
    double
    No
    库存量


    6
    storagetime
    datetime
    No
    入库时间


    7
    purchaser
    char(20)
    No
    采购人


    8
    contactinfo
    char(20)
    No
    联系电话


    9
    jobnumber
    char(20)
    No
    工号


    10
    remarks
    varchar(200)
    No
    备注



    零件使用记录(Partused)数据表,作用是描述零件使用的信息。如表4-13所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    ordersid
    int
    No
    订单编号


    3
    partid
    int
    No
    零件编号


    4
    useamount
    double
    No
    使用的数量


    5
    applicant
    char(20)
    No
    申请人


    6
    jobnumber
    char(20)
    No
    工号


    7
    concatinfo
    char(20)
    No
    联系方式


    8
    applicattime
    datetime
    No
    申请时间


    9
    registedspecnum
    double
    No
    登记使用的数量


    10
    noreceivingnum
    double
    No
    剩余领取量


    11
    receivednum
    double
    No
    领取数量


    12
    receivestatus
    char(10)
    No
    领取状态



    支付状态(Paystatus)数据表,作用是描述支付状态的信息。如表4-14所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    paystatuscode
    char(20)
    No
    支付状态代码


    3
    statusname
    char(40)
    No
    状态名称


    4
    remarks
    char(40)
    No
    备注



    人员分配(Personallocate)数据表,作用是描述人员分配的信息。如表4-15所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    userinfoid
    int
    No
    用户信息的编号


    3
    ordersid
    int
    No
    订单编号


    4
    taskcategory
    char(10)
    No
    任务类别


    5
    allocatetime
    datetime
    No
    分配的时间



    项目类别(Projcategory)数据表,作用是描述人员分配的信息。如表4-16所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    numbering
    int
    No
    类别编号


    3
    projcateNum
    int
    No
    项目类别代码


    4
    projname
    varchar(100)
    No
    项目名称


    5
    catflag
    char(10)
    No
    类别标志



    项目质检(Qualityinspec)数据表,作用是描述项目质检的信息。如表4-17所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    mainprojregid
    int
    No
    登记项目编号


    3
    inspectperson
    char(20)
    No
    质检员


    4
    jobnum
    char(20)
    No
    工号


    5
    inspecttime
    datetime
    No
    质检时间


    6
    remarks
    varchar(200)
    No
    备注



    部门(Sector)数据表,作用是描述部门的信息。如表4-18所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    deptname
    varchar(100)
    No
    部门名称


    3
    secflag
    char(10)
    No
    部门的标记



    供应商(Supplier)数据表,作用是描述零件的供应商的信息。如表4-19所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    supplierName
    varchar(200)
    No
    供应商名称


    3
    contacts
    char(20)
    No
    部门的标记


    4
    phone
    char(20)
    No
    电话


    5
    contactInfo
    varchar(50)
    No
    联系方式


    6
    fax
    char(20)
    No
    传真


    7
    mailbox
    char(50)
    No
    邮箱


    8
    address
    varchar(200)
    No
    地址


    9
    postcode
    char(20)
    No
    邮政编码


    10
    bankaccount
    char(20)
    No
    银行账户


    11
    suppflag
    char(10)
    No
    标记



    用户信息(Userinfo)数据表,作用是描述用户的信息。如表4-20所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    username
    char(20)
    No
    用户信息


    3
    jobnumber
    char(30)
    No
    工号


    4
    concatinfo
    char(20)
    No
    联系方式


    5
    address
    varchar(200)
    No
    地址


    6
    entrytime
    datetime
    No
    登记时间


    7
    userflag
    char(10)
    No
    用户标记


    8
    sectorid
    int
    No
    部门编号



    用户权限(Userrights)数据表,作用是描述用户权限的信息。如表4-21所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    permissionid
    int
    No
    权限编号


    3
    accountid
    int
    No
    账户表编号



    汽车(Vehicle)数据表,作用是描述汽车的信息。如表4-22所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    vehname
    varchar(50)
    No
    汽车名称


    3
    carmodel
    varchar(50)
    No
    汽车型号


    4
    inspectiondate
    datetime
    No
    年检日期


    5
    milage
    char(20)
    No
    里程


    6
    platenum
    char(20)
    No
    汽车牌号


    7
    vehflag
    char(10)
    No
    汽车标记


    8
    customerid
    int
    No
    客户表编号



    仓库(Warehouse)数据表,作用是描述仓库的信息。如表4-23所示:



    序号
    字段名
    数据类型
    是否主键
    意义




    1
    id
    int
    Yes
    编号


    2
    warehouseName
    varchar(100)
    No
    仓库名称


    3
    warehouseAdd
    varchar(200)
    No
    仓库地址


    4
    remarks
    varchar(200)
    No
    备注


    5
    wareflag
    char(20)
    No
    标记



    4.5 安全性设计汽车维修管理系统在安全性设计方面采用了登录、权限管理和拦截器的方式来保证系统的安全性和可靠性。
    登录
    用户在使用系统时,需要正确的输入自己的账号和密码否则系统校验不通过拒绝请求,登录设计的流程图如图4-14所示:

    权限管理
    用户准备登录时,在左侧的导航栏需要展示用户的所具备的功能,用户所具备的权限是系统管理员分配的。在一定程度上保证了系统的安全性。权限管理安全设计的流程图如图4-15所示:

    拦截器
    在前台调用后台的API时候,需要对发起请求的人进行身份的认证,认证方法为检查当前的session是否为空,如果为空表示为非法的请求,系统自动跳转到登录的页面。拦截器的安全设计流程图如图4-16所示:

    5 系统实现5.1 登录页面的实现该页面作为系统的入口,用户通过输入自己的账号和密码,进入系统进行后续的操作。在登录框的右下角有记住账号和密码的勾选框,除非用户特别要求,系统默认勾选,表示让浏览器记住当前用户输入的账号和密码,避免以后用户重复输入。记住账号和密码保存在cookie中,系统设置浏览器保存cookie时长为2天,过期则会失效。系统具体页面设计和功能详情见图5-1。

    5.2 后台首页的实现该页面作为系统登录之后的第一个页面,首先显示的是四块统计图表的内容。分别为:接单量统计、营销额统计、采购金额统计和收入与采购占比。其中接单量统计、营销额统计和采购金额统计主要统计的默认当前年份下,按照月份为参数进行的一个数量的统计,收入和采购总额用饼图的方式展现了出来,这些图标形象生动的展现了当前汽车维修厂的业务情况。在接单统计表中,按照不同的月份进行统计,虚线部分代表平均值。在营销额统计表中,分别统计了每个月中结算的金额,展现了修理厂的运营情况。采购金额统计图表中,统计了每个月的采购材料的情况。在最后一张图表中,用饼图的方式展现了采购额和营销额的对比的情况。在导航栏部分,功能项是根据用户的权限自动生成的权限树,并显示出来,用户可以点击功能按钮切换到不同的功能页面。具体页面设计和功能详情见图5-2。

    5.3 车辆接待的实现5.3.1 车辆接待信息填写页面的实现这部分主要是接单,用于填写客户的车辆状况信息,并安排维修人员和质检人员。其中选择员工为该系统下的所有的员工按照不同的部门树状图来显示,当需要添加维修人员时,点击任意部门下的员工进行拖拽,放置到已选维修人员的表格中,即可完成任务的分配。在提交信息之前系统会对所填写的信息进行一个合理的验证,保证数据的合理性。用户点击充值,可以清楚已经填写的相关的信息。页面具体设计和功能见图5-3。

    5.3.2 添加用户的实现该部分功能主要是应对客户第一次到当前汽车维修厂的场景。如果系统之前没有记录,需要将用户和车辆的相关信息录入到系统中,然后进行后续的业务操作。页面的设计和具体的功能见图5-4。

    5.3.2 选择用户的实现该功能主要应对的是老客户进入修理厂的业务场景,直接进行检索选择。在输入关键字中可以输入用户名、手机号、车牌号进行模糊查询,双击表示选中,然后进行后续的操作。页面的设计和具体的功能见图5-5。

    5.4 维修项目登记的实现5.4.1 维修项目登记主页面实现该页面主要实现的工为进行维修的记录,包括维修项目的登记和维修使用材料的登记。在维修任务一栏,可以按照关键字、任务的状态、开始和结束时间进行条件查询,筛选出符合条件的记录。点击查看维修一栏,系统会加载客户的详情信息,以及维修项目和使用材料的信息。页面的设计和具体的功能见图5-6。

    5.4.2 维修项目登记的实现该页面主要是进行维修项目的添加,维修项目的修改以及维修项目删除的操作功能实现。根据业务逻辑当订单已经通过质检后无法进行删除修改的操作,在维修项目登记一栏显示了维修项目的状态。页面设计和具体功能见图5-7。

    5.4.3 维修材料登记页面的实现该页面主要完成的是对于某一个维修单进行维修材料的登记,在选择材料时,可以按照关键字进行模糊查询到相关的零件,然后双击,填写用料数量,确定并完成使用材料的登记,用户还可以在未曾质检之前对材料进行修改或者删除操作。页面设计和具体功能见图5-8。

    5.5 维修领料的实现该页面实现的功能为当维修人员进行材料登记后,进行领料的环节。可以根据维修人员的姓名或者工号、领取的状态、开始时间和结束时间进行模糊查询。当材料不够时,系统提示采购中,采购完成后方可领取材料。页面的具体设计和功能见图5-9。

    5.6 质检完工的实现该页面主要实现质检完工,当维修人员点击确定完工后,质检人员会查询到关于自己的维修单,单击维修检测,可以查看到订单维修的情况,然后可以点击审核,进行质检,通过或者不通过。当所有确认无误后,点击通过质检,并且该操作不能撤销,进入下一个业务环节。页面设计和具体功能见图5-10。

    5.7 消费结算的实现该页面主要完成当汽车完成了维修任务后进入到结算环节,系统会自动查询当前订单所有的使用材料和维修项目的详细情况,计算出总额进行支付。点击支付后表示用户完成了支付,该笔订单成为历史订单,整个主要业务环节结束。页面设计和具体功能见图5-11。

    5.8 采购配件的实现该页面主要是针对当库存不足时进行采购的操作,用户可以按照关键字、采购状态、开始时间和结束时间进行条件查询。用户还可以导出当前条件的excel文档。点击采购输入采购的金额,完成采购。页面设计和具体功能见图5-12。

    5.9 库存管理的实现该页面主要实现查看当前的所有的库存情况,用户可以点击修改销售价格进行零件信息价格的修改。在关键词一栏输入零件的名称或者零件的类别名称可以实现模糊查询零件的信息。页面设计和具体功能见图5-13。

    5.10 供应商信息管理的实现该功能主要是针对供应商的管理,用户可以按照关键字,供应商的状态进行条件查询。用户可以将所有的供应商的信息导出为excel文档。同时用户可以进行供应商的修改和删除操作。页面设计和具体功能见图5-14。

    5.11 客户资料管理的实现该功能主要是对系统中所有的客户信息的管理。可以按照客户名、客户的联系方式和汽车牌号进行模糊查询,修改和导出excel等操作。页面设计和具体功能见图5-15。

    5.12 系统基础数据配置的实现该功能为系统所有权限的管理,用户可以点击开启或者关闭功能,进行权限的放开和回收功能,页面设计和具体功能见图5-16。

    5.13 系统用户管理的实现该功能主要实现的是对系统用户的管理,用户可以按照用户名、手机号、工号和状态进行条件查询,还可以对用户进行删除和修改信息操作。页面设计和具体功能见图5-17。

    5.14 修改密码的实现该页面主要实现用户对密码的修改操作,两次输入的密码必须一致才能修改成功,修改成功后需要重新登录。页面设计和具体功能见图5-18。

    5.15 数据备份还原的实现该页面主要实现的功能为将数据库的数据和接口导出为sql文件,或者将sql文件导入进行数据库的还原操作。页面设计和具体功能见图5-19。

    6 系统测试软件开发和部署完毕后需要对已经开发好的系统进行一个测试,下面对车辆接待的功能模块进行系统的测试,具体的测试内容如下所示。
    6.1 车辆接待模块选择用户功能测试车辆接待模块选择用户功能的测试结果如图6-1所示:



    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    点击选择用户
    弹出模态框,里面分页显示了客户的相关信息
    与预期的结果相符
    1


    2
    输入关键字查询用户的信息
    系统会显示出所有的符合条件的数据
    与预期的结果相符
    1


    3
    点击下一页,进行数据的切换
    系统会显示对应页号的数据
    与预期的结果相符
    1


    4
    双击选中用户
    系统会选中当前数据,把用户名和汽车牌号显示在当前用户的输入框中
    与预期的结果相符
    1


    5
    点击清除用户
    系统会将当前的用户的信息栏清空
    与预期的结果相符
    1


    6
    未完全填写必要的字段,点击提交数据
    系统提示请填写相应的数据
    与预期的结果相符
    1



    6.2 车辆接待模块选择添加用户功能能测试车辆接待模块添加用户功能测试的结果如图6-2所示:



    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    点击添加按钮
    弹出模态框,显示输入用户信息模块框
    与预期的结果相符
    1


    2
    不输入信息直接提交
    系统验证表单不通过,提示输入信息
    与预期结果相符
    1


    3
    输入合法信息提交
    系统添加当前用户的信息,并把当前的用户的姓名和汽车牌号显示在当前用户的输入框中,提示成功
    与预期的结果相符
    1



    6.3 车辆接待模块分配维修人员和质检人员功能测试车辆接待功能分配维修人员和质检人员功能测试结果如图6-3所示:



    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    选中该用户拖拽到表格中
    表格中会显示当前选中的用户的信息
    与预期的结果相符
    1


    2
    点击删除
    表格中的用户会被删除,提示删除该用户成功
    与预期的结果相符
    1


    3
    如果重复添加用户
    系统会提示已经添加过该用户,请重新添加
    与预期的结果相符
    1



    6.4 车辆接待模块添加维修单功能测试车辆接待功能模块添加维修单功能测试结果如图6-4所示:



    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    不输入信息
    系统提示请输入信息后提交
    与预期的结果相符
    1


    2
    输入合法信息
    系统提示是否确认提交,确定后提示添加成功
    与预期的结果相符
    1


    3
    清除用户信息
    系统提示是否确定删除,如果确认就删除所选择的用户的信息
    与预期的结果相符
    1


    4
    点击刷新
    系统会提示刷新后将不再保存当前的数据,是否刷新?确定后将重新刷新该页面
    与预期的结果相符
    1



    结论该系统主要是解决汽车修理厂的日常管理任务而设计和开发的一款比较实用的软件。能够帮助维修厂的工作人员减轻一定的工作压力,综合分析来看整个软件在以下几个方面具有一定的参考价值和实际价值。

    需求分析阶段使用了强大的UML分析建模工具结合面向对象思想和软件工程的方式来分析设计这款软件
    从软件架构上,采用了目前企业比较流行的java开发框架SSM,分别为Spring、SpringMVC和MyBatis,大大减少了开发人员的工作量,提高了开发效率,使开发人员真正专注于业务逻辑代码的实现,而不用去多的底层的重复的冗余部分
    在软件的用户体验上来看,软件使用了当前比较流行的后端管理系统的前端开发框架EasyUI,页面整齐大方重点功能突出,用户体验相对较好
    在软件安全的方面,汽车维修管理系统专门开发了用户权限管理部分和接口访问的拦截器部分,这大大提高了软件的安全性,从多方面去保护用户的数据不被窃取
    从软件的现实价值上来看,软件能够真正帮助汽车维修厂解决他们日常运营的痛点,提升他们的工作效率,在一定程度上为汽车修理厂带来了经济效益,提升他们在同行业中的竞争力

    汽车维修管理系统能够保证维修厂日常的运营工作,同时也有很多其他方面问题需要去解决。

    比如在系统的财务管理部分没有去深挖需求,让维修厂的维修工作和财务工作无缝的对接
    软件在维修材料这方面的信息管理没有做到强控制,比如原材料采购方面还是需要工作人员从系统中导出excel文档,查看相应的维修任务,去进行原材料的采购,系统可以在这方便再做一些优化
    系统在分析统计报表上用户能够查看每一个月的具体营销情况,但是可以考虑做到细粒度的统计,统计每一天的接单量和维修报表情况

    总体上,系统完成了需求分析中的维修厂管理的的需求要点,流程安排相对合理、规范,达到了本课题设计的要求。
    参考文献[1] 布奇.UML用户指南[M].北京:人民邮电出版社,2013
    [2] 李刚.轻量级Java EE企业应用实战(第4版)[M].北京:电子工业出版社,2014
    [3] 袁梅宇,王海瑞. Java EE企业级编程开发实例详解[M]. 北京:清华大学出版社,2013
    [4] 杨开振.深入浅出MyBatis技术原理与实战[M].北京:电子工业出版社,2016
    [5] 井上诚一郎,土江拓郎,渡边将太(著), 陈筱烟(译).Javascript编程全解[M].北京:人民邮电出版社,2015
    [6] Ben Frain.响应式Web设计HTML5和CSS3实战[M].北京:人民邮电出版社,2016
    [7] Craig Walls(著),张卫滨(译).Spring实战(第4版)[M].北京:人民邮电出版社,2016
    [8] Robert Sedgewick,Kevin Wayne(著),谢路云(译).算法(第4版)[M].北京:人民邮电出版社,2016
    [9] 高红岩.Java EE核心框架实战[M].北京:人民邮电出版社,2014
    [10] Java EE轻量级框架应用与开发:S2SH[M].北京:清华大学出版社,2015
    [11] Kirk Knoernschild(著),张卫滨(译).Java应用架构设计:模式化模式与OSGi[M].北京:机械工业出版社,2013
    [12] QST青软实训.Java EE轻量级框架应用与开发:S2SH[M].北京:清华大学出版社,2015
    [13] 宋娟.Java常用算法手册(第3版)[M].北京:中国铁道出版社,2016
    [14] 上野宣(著),于均良(译).图解HTTP[M].北京:人民邮电出版社,2014
    [15] 松下隆史(著),乌尼日其其格(译).图解TCP IP[M].北京:人民邮电出版社,2013
    [16] 张容铭.JavaScript设计模式[M].北京:人民邮电出版社,2015
    [17] Michael Fogus(著),欧阳继超,王妮(译)Javascript函数式编程[M].北京:人民邮电出版社,2015
    [18] 司徒正美.Javascript框架设计[M].北京:人民邮电出版社,2014
    [19] 党建.Web前端开发最佳实践[M].北京:机械工业出版社,2015
    [20] 明日科技.Java从入门到精通 [M].北京:清华大学出版社,2016
    [21] 葛一鸣.现代汽车维修企业管理实务(第3版)[M].北京:机械工业出版社,2014
    [22] 晋东海.汽车维修管理实务(运营至胜篇 第2版)[M].北京:机械工业出版社,2016
    [23] 许福有.突出重围 汽车维修企业经营与管理实战问答[M].北京:机械工业出版社,2016
    [24] 夏长明,宋晓丽.汽车维修企业管理[M].北京:机械工业出版社,2015
    [25] 王波. jQuery EasyUI开发指南[M].北京:人民邮电出版社,2015
    [26] 陶国荣. jQuery权威指南(第2版)[M].北京:机械工业出版社,2013
    [27] 廖伟华.图解CSS3:核心技术与案例实战[M].北京:机械工业出版社,2014
    [28] Andy,Clarke(著),腾讯FERD(译). 前端体验设计 HTML5+CSS3终极修炼[M].北京:人民邮电出版社,2017
    [29] 陈平.毕业设计与毕业论文指导[M].北京:北京大学出版社,2015
    [30] 杜文洁.计算机专业毕业设计指导教程[M].北京:清华大学出版社,2013
    0  留言 2020-12-17 09:58:42
  • 基于SSH和MySQL的易买网商城

    1 开发背景1.1 系统开发背景与意义近年来,随着Internet的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通领域。于是电子商务开始流行起来。网上购物网站作为B2B,B2C(BusinesstoCustomer,即企业对消费者),C2C(CustomertoCustomer,即消费者对消费者)电子商务的前端商务平台,在其商务活动全过程中起着举足轻重的作用。尤其是购物商城的出现,为新一代的购物形式提供了一种全新的购物平台。本文主要考虑的是如何建设B2C的网上购物网站。
    网络的日益普及和迅猛的发展,市场竞争日益激烈,利用网络进行服务和管理已经成为一种趋势.网络的发展给用户带来了很大的方便,风起云涌的网站在炒足了”概念”之后,都纷纷转向了”务实”,而”务实”比较鲜明的特点之一:是绝大多数的网站都在试图做实实在在的”网上交易”,所谓网上交易就是利用计算机技术、网络技术和远程通信技术,实现整个商务(买卖)过程中的电子化、数字化和网络化,
    网上购物是一种具有交互功能的商业信息网站。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物网站具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。
    随着社会的不断进步及网络经济时代的蓬勃发展,互联网已逐步深入人心,人们不再满足于传统的购物方式, “ 网上购物 ” 这种新型的购物方式已经为更多的人所接受 。我国的计算机技术起步较晚,而近几年随着经济的发展,计算机价格的下降和人们生活水平的提高,计算机技术在我国已经得到了普及,不论单位还是家庭都拥有了计算机,计算机已成为人们工作和生活的重要组成部分。所以传统的购物已经不能满足人们的需要,而网络购物的商品的种类多样性,价格的低廉,恰好为网上购物提供了良好的基础,另外我国国内的网络的快速发展和良好的群众基础为网上购物这种新的购买形式提供了良好的群众基础。所以网上购物方式日益被大家所接受。
    在最近一段时间里,我也查了一些关于网上购物的信息。有 60.4% 的网站属于企业网站,可见如今企业都将网站作为推广自己的重要手段。其次是个人网站。而政府部门的网站占到 4.4% 。但是,另有调查显示,将近 75% 的企业的网站每天的点击率在 200 次以下,更有 51.5% 的企业网站的点击率不足 50 次,仅有 8.6% 的企业网站的点击率每天超过 1000 次。这说明,做好一个网站,做出网站的特色也企业信息与新闻相结合来吸引人观看是一个非常重要的问题。
    另外,作为信息、新闻传播的传统模式的报刊业也将目光和精力投入到网络网站上来。毫无疑问,高速,海量的信息传输对报刊业也是巨大的刺激。此外,随着电子时代的迅速发展, MP3 等电子产品已受到广大的消费群体高度的关注。生产制造 MP3 的厂商作为新时代产业的一个主要部分,当然也会紧随着时代的发展来使自己在市场与行业中更具竞争力。利用电子商务的模式,在介绍推广自己的同时,以新的一种渠道销售自己的产品,也愈发被关注。因此,设计一个具有电子商务功能的企业网站具有非常好的开发与应用前景。随着信息化的浪潮席卷全球,传统的商务模式受到巨大的冲击。越来越多的企业和个人消费者。
    在 Internet 开放的网络环境下,一种基于 B/S(Browser/Server) 应用模式,实现消费者网上购物,商户之间的网上交易和在线电子支付的新型的商业运营模式 — 送电子商务应运而生。电子商务在中国也发展了一段时间,目前在国内也有很多电子商务的平台,通过分析国内的电子商务网站可知,目前国内的电子商务做的都是集合型,一个平台中各个方面的商务领域似乎都有涉及到。像比较有名的一些网购平台,如:京东商城,淘宝网,拍拍网等电子商务网站,涉及的门类都很多,而且他们都有一个共通的特点就是只有产品的展示与订购,很少有厂家企业的介绍。目前中国能用上电子商务平台的都是一些大中型的企业,而大部分的中小型,特别是小型企业还是用着以前的生意模式,靠朋友,靠关系,靠老客户来维持企业,这种模式在过去的时代会有一定的优势,但在信息网络时代这种模式缺乏主动性,往往会使企业处在被动的状态。像阿里巴巴这样的大型电子商务平台是能很好地帮助企业做宣传,联系客户,但是阿里巴巴基本上是 面对大中型的企业,每年的管理费用都非常高,对于一些中小企业要承受一笔高的资金是很困难的。为了能够上中小型企业特别是小型企业能够用上电子商务平台,我们特地开发此系统,使中小型企业也能做到生产,宣传,销售一条龙 。
    这使得对开发网上购物系统的技术要求更高了。传统的基于 JSP , Servlet 以及 JavaBean 技术所开发的系统扩展能力不强,不能够满足人们快速增长的需求,并且显示页面有时要进行逻辑处理,降低了运行效率。此外,对数据库的处理往往较复杂,特别是与数据库的连接浪费了大量的时间。这使得使用 SSH 这三个开源框架的优点被很好的体现出来了。开源框架的设计思路是将整个系统的实现分为三层:表现层、业务逻辑层、持久层。表现层主要是负责前台的显示,业务逻辑层主要负责处理业务逻辑以及页面的转向,持久层主要负责后台与数据库的连接以及交换数据。这样大大增加了系统的扩展性,能够即使的调整系统功能来满足用户的需求;使得结构更加严谨,每层完成指定的任务,减轻显示页面的工作量,增加了它们的执行效率。此外增加了持久层,也就增加了更多的安全性 。
    1.2 研究内容针对B/S模式网络商城系统的建设与应用,提出Struts+Spring+Hibernate(SSH) 技术架构的解决方法,给出其在 Web 系统快速设计与开发中的具体实现过程,结果证明,SSH技术架构在构建复杂业务系统中提高了开发效率和系统的可维护性,同时增强了系统的可扩展性。
    本文将重点研究基于SSH框架的网络商城平台设计与实现,其中将包括对该系统的分析、设计、编码及测试等进行研究,一切按照软件工程思想进行必要分析与相应的实现说明。
    1.3 文档的组织结构本毕业设计主要是介绍基于SSH的易买网商城的设计与实现。项目建立准备条件的设计等,该项目主要有以下内容:

    第一章:开发背景
    第二章:需求分析,可行性分析、功能分析、关键技术本章都做了详细的介绍
    第三章:项目网站分析及概要设计。本章在第一章的基础上,创建流程图、时序图、功能图
    第四章:项目网站分析及概要设计,具体介绍了此项目开发的具体步骤和方法
    第五章:总结与展望

    2 需求分析2.1 可行性分析本网站是以业务需求为基础,网站需要完成的以下任务:网站需要让供应商、客户以及浏览者能看到商城的信息及动态,另一个重要的内容就是能够显示出该商城现有的各类型商品及其详细信息;由于消费者的需求在增长和变化,商城在面对面销售的基础上也要随之发展出相应的服务,如在线订购等技术。另外,企业营销商除了能与普通客户一样浏览网站之外,还需要对网站进行管理。企业需要定期更新现有商品的详细信息、商城动态和联系方式,必要时还要对企业的介绍做更改。对于消费者通过网站提交的各种订单能够进行处理以方便销售。
    因此,本文基于以上原则,在对商城进行可行性分析时,主要从技术可行性、经济可行性以及管理可行性三个方面进行分析
    2.1.1 经济性为了提高商城的服务质量和水平,扩大商城的宣传力度,而且应客户的普遍要求,商城的领导非常支持这种商城信息化的建设,将为网站的开发提供充足的物质保障,有效保证网站整个开发过程的顺利实施。而且,商城信息网站建成之后,将会极大提高商城的服务质量和水平,完善商城与客户之间的沟通渠道,扩大商城的宣传和影响,为提高商城的经济效益是有很大帮助的。因此,对于商城信息管理网站的经济性分析也是可行的。
    根据调查的资料,现在聘用一支团队设计并建设企业商务型网站的费用为5300元左右,另外每年交纳600元占用网站空间和网站维护费。为了使网站建成后能达到增加企业经济效益的效果,寻找一支创新与技术优秀的团队最多需要增加3000元的一次性投资。这样看来一个成功的网站建成后为这个营销商带来的效益将会远大于成本。但架设好一个网络中的服务器,以满足互联网中浏览者对速度的需求,这样每年服务器与网络线路和设备的维护费用将是企业不得不重点考虑的因素。如何做好经济可行性分析,需要通过仔细的调查与投资和行业方面的专业人士分析。
    2.1.2 技术性针对商城网站的技术可行性,首先对商城信息管理网站的结构模式进行分析。就目前的技术情况而言,大多数网站主要采用响应式结构模式。对于响应式网站而言,目前是网站的发展趋势,它是一种基于浏览器的结构模式,网站如果采用响应式模式开发的话,就不再需要特别去安装网站的客户端,客户只需登录网络,直接进入平台主页,独立运行和操作,因此采用响应式模式开发的网站更加快捷方便,使得网站对于计算机的依赖性明显下降,更加适合商城信息管理网站的应用,可以让客户随时随地登录网站了解商城信息,完成操作,这无疑对提高商城的服务水平和质量是有很大帮助的。而对于采用C/S模式开发的网站而言,它与响应式的最大区别在于,在使用网站之前必须先行在所要使用的计算机上安装网站客户端,这样相对于响应式模式来说,其灵活性和便捷性大大降低,而且网站的维护也较响应式模式的网站麻烦,而且随着产品的升级可能会造成硬件性能不足的情况出现,进而影响网站的使用而出现各种各样的问题,不利于网站日后的升级和维护。因此,本网站采用Web进行开发。
    2.1.3 管理可行性本网站的设计和开发将全面提高商城对客户和商品信息的管理,提高整体的办公效率,进而提高商城水平和服务质量的提高。通过商城信息管理网站将更加快捷的将各种信息传递给客户,并将客户的反馈信息及时反馈给商城,实现商城和客户的良好互动。而且减少人工操作的环节,减少工作人员的工作量,提高整个商城的管理水平和质量。
    2.2 功能分析基于SSH的商城信息管理网站面向普通用户,即普通用户普通用户为商城的大众客户,通过该网站与商城进行信息交流;集合以上所有的业务分析,用户有这些功能。

    第一个注册登录页面,网站登录进去之后就可以显示出登录页面输入用户名以及密码后注册成功就可登录,这里是登录注册的一个功能
    第二个是首页界面,这里的话就是主页的一个模块,可以看到前端的主界面的一些相关容以及功能按钮之类的
    第三个就是个人信息管理模块,这里是用户的基本资料,还有可以修改用户资料
    第四个就是注销管理,这里就是我们可以注销我们的账户
    第五个就是订单管理,这里主要就是我们订单管理的列表,就是我们的购买的商品的列表相关性信息
    第六个就是购物车管理,这里我们可以把喜欢的商品加入购物车,然后进入购物车中选择下单

    2.3 关键技术2.3.1 J2EE 概述J2EE ( Java 2 Platform, Enterprise Edition )是由 SUN 公司开发的一套以 Java2 平台标准版为基础的应用规范,其作用是用于企业应用软件的开发、部署和管理。 J2EE 保留了标准版中的诸多优点,比如“编写一次、随处运行”的跨平台性、与数据库连接的接口 JDBC API ,在 Internet 应用中维持数据完整性的安全模式等,同时还具有其他显著的特性,比如支持 EJB , Servlet , JSP 和 XML 等技术。并且 J2EE 提供了事务处理,对象生存控制,并发控制,资源共享等系统服务,只要利用简单的配置就可以完成以上服务,开发者因此可以从复杂且困难的系统设计中解脱出来,而将主要精力放在业务逻辑的设计上, J2EE 为企业提供了一个能够明显缩短开发时间的软件开发体系结构。
    2.3.2 SSH整合框架是一种可复用的软件,它需要具备灵活的结构以便于扩展。选择一个好的开发框架进行开发能够极大地增加系统的可维护性,进而提高开发的效率。使用合适的框架 , 可以节省设计人员的精力。 J2EE 多层结构的出现将面向对象技术推向了新的高点。 SSH 集成框架支持多种主机类型、多操作系统、多数据库。并且生成的页面和组件代码完全符合 J2EE 标准,开发人员可以开发出更为强大更具特色的应用系统 。
    SSH 三层架构的出现 , 有效地解决了传统架构存在的问题。其架构模型与传统 J2EE 架构的关键区别在于各层的内部实现方式不同。 SSH 架构分为 Web 层、业务逻辑层、数据持久层。 Web 层使用 Struts 结构完成数据的获取和回复,业务逻辑层通过使用 Spring 的配置文件来进行逻辑控制并对数据的处理,数据持久层使用 Hibernate 框架来进行应用程序与数据库的数据交换。 SSH 集成框架实现了分层结构设计的技术要求, 使每一层的功能和职责定义十分清楚,通过接口在层与层之间进行连接,增强了系统的稳定性,安全性,可扩展性,有效提高了系统开发速度,降低了层与层间的耦合度。具体包括:

    Web 层用来管理用户的请求和响应,提供了一个控制器将调用委托给业务层进行处理,将来自于其他层的处理纳入到 Struts Action 中,并且执行 UI 校验
    业务逻辑层用来处理应用层的业务逻辑和业务校验,提供同其他层进行连接的接口,协调业务对象之间的依赖性,从表现层提供给业务层上下文以获得业务服务,管理从业务层到表现层的功能实现
    数据持久层用来实现对象的映射关系, Hibernate 是通过 HQL 查询语言,或者使用 API 存储、更新和删除存储在数据库中的信息

    SSH 三层架构体系如图 2.1 所示。

    2.3.3 Hibernate框架Hibernate 是一种对象关系映射框架,其本身是开放源代码的,它是一种强大高效的持久层查询服务器,它以面向对象的思维,解决数据库的操作问题, Hibernate 高效的保证了运行效率、内存消耗以及开发效率,并自动封装了事务控制,安全性代码等功能 。同时 Hibernate 还是一种非强迫性的解决方案,能与一些数据库和 Java 服务器进行平稳的集成 。 Hibernate 的强大缓存机制能一定程度上的缓解服务器端频繁读取数据库的压力,这也是 Hibernate 广泛使用得重要原因之一。它轻量级的封装了 JDBC 对象,从而使得代码编写者在操作数据库时可以使用对象编程思想。 Hibernate 既可以在 Java 的客户端程序中使用,也可以在 Web 应用程序中使用,可以说任何使用 JDBC 的场合都能够使用 Hibernate 。更为重要的是,在应用 EJB 的 J2EE 架构中, Hibernate 可以取代 CMP 从而完成数据持久化。 Hibernate 实现了面向对象的业务模型和商业逻辑的最优结合,它不仅可以管理 Java 对象和数据库的映射,还可以查询数据并且获取数据,极为显著的缩短了开发时使用 SQL 和 JDBC 的数据处理时间。
    Hibernate 将 Java 中的对象与对象关系映射至关系模型数据库中的表格与表格之间的关系, Hibernate 提供了这个过程中自动对应转换的方案。 Hibernate 的体系结构如图 2.2 所示。

    Hibernate 的核心接口一共有 5 个,包括: Session , Session Factory , Configuration , Transaction , Query 和 Criteria 接口。主要的组件有三个,分别为:连接管理组件,事务管理组件,对象 / 关系映射组件。
    Hibernate 提供的持久化服务是一个接口,它由业务逻辑调用。其优势在于使得开发者可以把被持久化的对象实现成与持久化环境无关的类。
    总之, Hibernate 是一个优秀并且开放源代码的 Java 对象持久层轻量级封装框架,它既可以在 Java 应用程序中用来取代大部分 JDBC 代码,也可以整合到 J2EE 系统中作为持久层框架。
    3 系统设计3.1 设计原则审美原则:好的创意必须具有审美性。一种创意如果不能给浏览者以好的审美感受,就不会产生好的效果。创意的审美原则要求所设计的内容健康、生动、符合人们审美观念。
    目标原则:创意自身必须与创意目标相吻合,创意必须能够反映主题、表现主题。网页设计必须具有明确地目标性。网页设计的目的是为了更好的体现网站内容。
    3.2 系统整体设计图本网站简单的系统总流程图大致情况如图 3.1 所示。
    简易流程图结构图

    购物车流程图

    修改密码流程图

    3.3 系统功能需求根据上商家的实际需求,开发一个通用的SSH网络商城购物系统。网络商城系统按角色分配的总的功能需求,如图 3.4 所示。

    网络商城系统按角色划分,每个角色都有着本身的功能需求,下面我们将按游客、普通用户这两个角色来细分该平台系统的功能需求。
    游客的功能需求,如图 3.5 所示。


    注册用户:系统为任何用户提供普通用户注册功能
    浏览商品:游客可登陆平台,查看各种商品及资讯信息
    购物车功能:添加商品至购物车、从购物车中删除、购物车结算总价(不可以提交订单)
    查询商品:可根据类别查询平台的商品信息及资讯信息,提供模糊查询功能
    资讯浏览:可查看系统最新资讯和公告信息
    其他功能:匿名留言功能、投诉举报功能等

    普通用户的功能需求(如图 3.6 所示)。

    4 系统实现4.1 登录注册点击功能条的用户注册/登录功能进入功能界面,登陆界面如图4.1所示,注册界面如图4.2所示,登陆后显示客户的详细信息。
    程序运行效果图如图4.1所示:
    登录页面

    注册页面

    在登陆页面输入用户名和密码以后,当点击提交按钮后,就会跳转到loginservice中,在该service中会对用户名,密码进行判断,验证通过进入对应的页面。
    登录界面代码实现:
    1. <div class="shadow"> 2. <em class="corner lb"></em> <em class="corner rt"></em> 3. <div class="box"> 4. <h1>欢迎回到易买网</h1> 5. <form id="loginForm" method="post" action="user_login.action" 6. onsubmit="return checkForm()"> 7. <table> 8. <tr> 9. <td class="field">用户名:</td> 10. <td><input class="text" type="text" id="userName" 11. name="user.userName" value="" /> 12. </td> 13. </tr> 14. <tr> 15. <td class="field">登录密码:</td> 16. <td><input class="text" type="password" id="password" 17. name="user.password" value="" /> 18. </td> 19. </tr> 20. <tr> 21. <td class="field">验证码:</td> 22. <td><input class="text" style="width: 60px;margin-right: 10px;" 23. type=text value="" name="imageCode" id="imageCode"><img 24. onclick="javascript:loadimage();" title="换一张试试" name="randImage" 25. id="randImage" src="image.jsp" width="60" height="20" border="1" 26. align="absmiddle"> 27. </td> 28. </tr> 29. 30. <tr> 31. <td></td> 32. <td><label class="ui-green"><input type="submit" 33. name="submit" value="立即登录" /> </label> 34. <font id="error" color="red"></font> 35. </td> 36. </tr> 37. </table> 38. </form> 39. </div> 40. <div id="register" class="wrap"> 41. <div class="shadow"> 42. <em class="corner lb"></em> 43. <em class="corner rt"></em> 44. <div class="box"> 45. <h1>欢迎注册易买网</h1> 46. <ul class="steps clearfix"> 47. <li class="current"><em></em>填写注册信息</li> 48. <li class="last"><em></em>注册成功</li> 49. </ul> 50. <form id="regForm" method="post" action="user_register.action" onsubmit="return checkForm()"> 51. <table> 52. 53. <tr> 54. <td class="field">用户名(*):</td> 55. <td><input class="text" type="text" id="userName" name="user.userName" onblur="checkUserName(this.value)" /> <font id="userErrorInfo" color="red"></font></td> 56. </tr> 57. <tr> 58. <td class="field">登录密码(*):</td> 59. <td><input class="text" type="password" id="password" name="user.password" /></td> 60. </tr> 61. <tr> 62. <td class="field">确认密码(*):</td> 63. <td><input class="text" type="password" id="rePassWord" name="rePassWord" /></td> 64. </tr> 65. 66. <tr> 67. <td class="field">性别(*):</td> 68. <td> 69. <input type="radio" name="user.sex" value="男" checked="checked"/>男 70. <input type ="radio" name="user.sex" value="女"/>女 71. </td> 72. </tr> 73. <tr> 74. <td class="field">出生日期:</td> 75. <td> 76. <input type="text" id="birthday" name="user.birthday" class="Wdate" onClick="WdatePicker()"/> 77. </td> 78. </tr> 79. <tr> 80. <td class="field">身份证号:</td> 81. <td><input class="text" type="text" id="dentityCode" name="user.dentityCode" /></td> 82. </tr> 83. <tr> 84. <td class="field">Email:</td> 85. <td><input class="text" type="text" id="email" name="user.email" /></td> 86. </tr> 87. <tr> 88. <td class="field">手机号码(*):</td> 89. <td><input class="text" type="text" id="mobile" name="user.mobile" /></td> 90. </tr> 91. <tr> 92. <td class="field">收获地址(*):</td> 93. <td><input class="text" type="text" id="address" name="user.address" /></td> 94. </tr> 95. <tr> 96. <td></td> 97. <td><label class="ui-green"><input type="submit" name="submit" value="提交注册" /></label></td> 98. </tr> 99. <tr> 100. <td> </td> 101. <td><font id="error" color="red"></font> </td> 102. </tr> 103. </table> 104. </form> 105. </div> 106. </div> 107. <div class="clear"></div> 108. </div>
    4.2 首页模块这就是商城的首页页面,展现出商城的商品。
    程序运行效果图如下所示4.3、4.4、4.5所示:
    主界面01

    主界面02

    主界面03

    展示实现代码:
    1. package com.java1234.service.impl; 2. 3. import java.util.LinkedList; 4. import java.util.List; 5. 6. import javax.annotation.Resource; 7. 8. import org.springframework.stereotype.Service; 9. 10. import com.java1234.dao.BaseDAO; 11. import com.java1234.entity.PageBean; 12. import com.java1234.entity.ProductBigType; 13. import com.java1234.service.ProductBigTypeService; 14. import com.java1234.util.StringUtil; 15. 16. @Service("productBigTypeService") 17. public class ProductBigTypeServiceImpl implements ProductBigTypeService{ 18. 19. @Resource 20. private BaseDAO<ProductBigType> baseDAO; 21. 22. @Override 23. public List<ProductBigType> findAllBigTypeList() { 24. return baseDAO.find(" from ProductBigType"); 25. } 26. 27. @Override 28. public List<ProductBigType> findProductBigTypeList( 29. ProductBigType s_productBigType, PageBean pageBean) { 30. List<Object> param=new LinkedList<Object>(); 31. StringBuffer hql=new StringBuffer("from ProductBigType"); 32. if(s_productBigType!=null){ 33. if(StringUtil.isNotEmpty(s_productBigType.getName())){ 34. hql.append(" and name like ?"); 35. param.add("%"+s_productBigType.getName()+"%"); 36. } 37. } 38. if(pageBean!=null){ 39. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param, pageBean); 40. }else{ 41. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param); 42. } 43. } 44. 45. @Override 46. public Long getProductBigTypeCount(ProductBigType s_productBigType) { 47. List<Object> param=new LinkedList<Object>(); 48. StringBuffer hql=new StringBuffer("select count(*) from ProductBigType"); 49. if(s_productBigType!=null){ 50. if(StringUtil.isNotEmpty(s_productBigType.getName())){ 51. hql.append(" and name like ?"); 52. param.add("%"+s_productBigType.getName()+"%"); 53. } 54. } 55. return baseDAO.count(hql.toString().replaceFirst("and", "where"), param); 56. } 57. 58. @Override 59. public void saveProductBigType(ProductBigType productBigType) { 60. // TODO Auto-generated method stub 61. baseDAO.merge(productBigType); 62. } 63. 64. @Override 65. public void delete(ProductBigType productBigType) { 66. // TODO Auto-generated method stub 67. baseDAO.delete(productBigType); 68. } 69. 70. @Override 71. public ProductBigType getProductBigTypeById(int id) { 72. return baseDAO.get(ProductBigType.class, id); 73. }
    4.3 个人信息管理模块这里是用户的个人信息资料,可以修改信息
    程序运行效果图如下所示4.6、4.7:
    个人信息

    修改个人信息

    展示实现代码:
    1. package com.java1234.service.impl; 2. 3. import java.util.LinkedList; 4. import java.util.List; 5. 6. import javax.annotation.Resource; 7. 8. import org.springframework.stereotype.Service; 9. 10. import com.java1234.dao.BaseDAO; 11. import com.java1234.entity.PageBean; 12. import com.java1234.entity.User; 13. import com.java1234.service.UserService; 14. import com.java1234.util.StringUtil; 15. 16. @Service("userService") 17. public class UserServiceImpl implements UserService{ 18. 19. @Resource 20. private BaseDAO<User> baseDAO; 21. 22. @Override 23. public void saveUser(User user) { 24. // TODO Auto-generated method stub 25. baseDAO.merge(user); 26. } 27. 28. @Override 29. public boolean existUserWithUserName(String userName) { 30. String hql="select count(*) from User where userName=?"; 31. long count=baseDAO.count(hql, new Object[]{userName}); 32. if(count>0){ 33. return true; 34. }else{ 35. return false; 36. } 37. } 38. 39. @Override 40. public User login(User user) { 41. List<Object> param=new LinkedList<Object>(); 42. StringBuffer hql=new StringBuffer("from User u where u.userName=? and u.password=?"); 43. param.add(user.getUserName()); 44. param.add(user.getPassword()); 45. if(user.getStatus()==2){ 46. hql.append(" and u.status=2"); 47. } 48. return baseDAO.get(hql.toString(), param); 49. } 50. 51. @Override 52. public List<User> findUserList(User s_user, PageBean pageBean) { 53. List<Object> param=new LinkedList<Object>(); 54. StringBuffer hql=new StringBuffer("from User"); 55. if(s_user!=null){ 56. if(StringUtil.isNotEmpty(s_user.getUserName())){ 57. hql.append(" and userName like ? "); 58. param.add("%"+s_user.getUserName()+"%"); 59. } 60. } 61. hql.append(" and status=1"); 62. if(pageBean!=null){ 63. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param, pageBean); 64. }else{ 65. return null; 66. } 67. } 68. 69. @Override 70. public Long getUserCount(User s_user) { 71. List<Object> param=new LinkedList<Object>(); 72. StringBuffer hql=new StringBuffer("select count(*) from User"); 73. if(s_user!=null){ 74. if(StringUtil.isNotEmpty(s_user.getUserName())){ 75. hql.append(" and userName like ? "); 76. param.add("%"+s_user.getUserName()+"%"); 77. } 78. } 79. hql.append(" and status=1"); 80. return baseDAO.count(hql.toString().replaceFirst("and", "where"), param); 81. } 82. 83. @Override 84. public void delete(User user) { 85. // TODO Auto-generated method stub 86. baseDAO.delete(user); 87. } 88. 89. @Override 90. public User getUserById(int id) { 91. return baseDAO.get(User.class, id); 92. } 93. 94. }
    4.4 商品模块这里主要就是商品的详情页、购物车、付款等页面
    程序运行效果图如下所示4.8、4.9、4.10所示:
    商品详情页页面

    展示实现代码:
    1. <div class="spacer"></div> 2. <div class="last-view"> 3. <h2>最近浏览</h2> 4. <dl class="clearfix"> 5. 6. <dt> 7. <img src="images/product/2.jpg" class="imgs" style="height: 50px;width: 50px;"> 8. </dt> 9. <dd> 10. <a href="product_showProduct.action?productId=291" target="_blank">Vero Moda透视拼接修身包边圆领蕾</a> 11. </dd> 12. 13. </dl> 14. </div> 15. </body> 16. </html> 17. </div> 18. 19. 20. 21. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 22. <html> 23. <head> 24. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 25. <title>Insert title here</title> 26. <script type="text/javascript"> 27. function addShoppingCart(productId){ 28. if('zengyao'==''){ 29. alert("请先登录,然后购物!"); 30. }else{ 31. $.post("shopping_addShoppingCartItem.action",{productId:productId}, 32. function(result){ 33. var result=eval('('+result+')'); 34. if(result.success){ 35. alert("已成功加入购物车!"); 36. location.reload(); 37. }else{ 38. alert(result.error); 39. } 40. } 41. ); 42. } 43. } 44. 45. function goBuy(productId){ 46. if('zengyao'==''){ 47. alert("请先登录,然后购物!"); 48. }else{ 49. window.location.href="shopping_buy.action?productId="+productId; 50. } 51. } 52. </script> 53. </head> 54. <body> 55. <div id="product" class="main"> 56. <h1>Vero Moda透视拼接修身包边圆领蕾</h1> 57. <div class="infos"> 58. <div class="thumb"> 59. <img class="img" src="images/product/2.jpg" /> 60. </div> 61. <div class="buy"> 62. <br/> 63. <p> 64. 商城价:<span class="price">¥499</span> 65. </p> 66. <p>库 存:99</p> 67. <br/> 68. <div class="button"> 69. <input type="button" name="button" value="" onclick="goBuy(291)" /><br/> 70. <a href="javascript:addShoppingCart(291)">放入购物车</a> 71. </div> 72. </div>
    购物车页面

    展示实现代码:
    1. <script> 2. $(function(){ 3. 4. $(".add").click(function(){ 5. var t=$(this).parent().find('input[class=text_box]'); 6. t.val(parseInt(t.val())+1); 7. var product_id=$(this).parent().find('input[id=product_id]').val(); 8. var price=$("#price_"+product_id).html(); 9. $("#productItem_total_"+product_id).html(price*t.val()); 10. 11. refreshSession(product_id,t.val()); 12. setTotal(); 13. }); 14. $(".text_box").blur(function(){ 15. var t=$(this).parent().find('input[class=text_box]'); 16. if(parseInt(t.val())<0){ 17. t.val(0); 18. } 19. var product_id=$(this).parent().find('input[id=product_id]').val(); 20. var price=$("#price_"+product_id).html(); 21. $("#productItem_total_"+product_id).html(price*t.val()); 22. 23. refreshSession(product_id,t.val()); 24. setTotal(); 25. }); 26. 27. function setTotal(){ 28. var s=0; 29. $(".productTr").each(function(){ 30. var n=$(this).find('input[class=text_box]').val(); 31. var price=$(this).find('label[class=price_]').html(); 32. s+=n*price; 33. }); 34. $("#product_total").html(s); 35. } 36. 37. function refreshSession(productId,count){ 38. $.post("shopping_updateShoppingCartItem.action",{productId:productId,count:count}, 39. function(result){ 40. var result=eval('('+result+')'); 41. if(result.success){ 42. 43. }else{ 44. alert("刷新Session失败"); 45. } 46. } 47. ); 48. } 49. 50. setTotal(); 51. 52. }); 53. 54. function removeShopping(productId){ 55. if(confirm("您确定要删除这个商品吗?")){ 56. window.location.href="shopping_removeShoppingCartItem.action?productId="+productId; 57. } 58. } 59. </script> 60. </head> 61. <body> 62. <div id="shopping"> 63. <form action="order_save.action" method="post"> 64. <table id="myTableProduct"> 65. <tr> 66. <th>商品名称</th> 67. <th>商品单价</th> 68. <th>金额</th> 69. <th>购买数量</th> 70. <th>操作</th> 71. </tr> 72. 73. <tr class="productTr"> 74. <td class="thumb"> 75. <img class="imgs" src="images/product/2.jpg" /><a href="product_showProduct.action?productId=291" target="_blank">Vero Moda透视拼接修身包边圆领蕾</a> 76. </td> 77. <td class="price" ><span>¥<label class="price_" id="price_291">499</label></span> 78. </td> 79. <td class="price" > 80. <span>¥<label id="productItem_total_291">499</label></span> 81. </td> 82. <td class="number"> 83. <input type="hidden" id="product_id" value="291"/> 84. <input class="min" name="" type="button" value=" - " /> 85. <input class="text_box" style="width: 30px;text-align: center" name="" type="text" value="1" /> 86. <input class="add" name="" type="button" value=" + " /> 87. </td> 88. <td class="delete"><a 89. href="javascript:removeShopping(291)">删除</a> 90. </td> 91. </tr> 92. 93. </table> 94.
    结算成功页面

    4.5 订单管理这里是我们购买商品的记录,订单管理页面。
    程序运行效果图如下所示4.11所示:
    订单页面

    展示实现代码:
    1. package com.java1234.service.impl; 2. 3. import java.util.LinkedList; 4. import java.util.List; 5. 6. import javax.annotation.Resource; 7. 8. import org.springframework.stereotype.Service; 9. 10. import com.java1234.dao.BaseDAO; 11. import com.java1234.entity.Order; 12. import com.java1234.entity.PageBean; 13. import com.java1234.service.OrderService; 14. import com.java1234.util.StringUtil; 15. 16. @Service("orderService") 17. public class OrderServiceImpl implements OrderService{ 18. 19. @Resource 20. private BaseDAO<Order> baseDAO; 21. 22. @Override 23. public void saveOrder(Order order) { 24. // TODO Auto-generated method stub 25. baseDAO.save(order); 26. } 27. 28. @Override 29. public List<Order> findOrder(Order s_order, PageBean pageBean) { 30. List<Object> param=new LinkedList<Object>(); 31. StringBuffer hql=new StringBuffer("from Order"); 32. if(s_order!=null){ 33. if(s_order.getUser()!=null&&s_order.getUser().getId()!=0){ 34. hql.append(" and user.id=?"); 35. param.add(s_order.getUser().getId()); 36. } 37. if(s_order.getUser()!=null&&StringUtil.isNotEmpty(s_order.getUser().getUserName())){ 38. hql.append(" and user.userName like ?"); 39. param.add("%"+s_order.getUser().getUserName()+"%"); 40. } 41. if(StringUtil.isNotEmpty(s_order.getOrderNo())){ 42. hql.append(" and orderNo like ?"); 43. param.add("%"+s_order.getOrderNo()+"%"); 44. } 45. } 46. hql.append(" order by createTime desc"); 47. if(pageBean!=null){ 48. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param,pageBean); 49. }else{ 50. return baseDAO.find(hql.toString().replaceFirst("and", "where"), param); 51. } 52. } 53. 54. @Override 55. public void updateOrderStatus(int status, String orderNo) { 56. // TODO Auto-generated method stub 57. List<Object> param=new LinkedList<Object>(); 58. String hql="update Order set status=? where orderNo=?"; 59. param.add(status); 60. param.add(orderNo); 61. baseDAO.executeHql(hql, param); 62. } 63. 64. @Override 65. public Long getOrderCount(Order s_order) { 66. List<Object> param=new LinkedList<Object>(); 67. StringBuffer hql=new StringBuffer("select count(*) from Order"); 68. if(s_order!=null){ 69. if(s_order.getUser()!=null&&s_order.getUser().getId()!=0){ 70. hql.append(" and user.id=?"); 71. param.add(s_order.getUser().getId()); 72. } 73. if(s_order.getUser()!=null&&StringUtil.isNotEmpty(s_order.getUser().getUserName())){ 74. hql.append(" and user.userName like ?"); 75. param.add("%"+s_order.getUser().getUserName()+"%"); 76. } 77. if(StringUtil.isNotEmpty(s_order.getOrderNo())){ 78. hql.append(" and orderNo like ?"); 79. param.add("%"+s_order.getOrderNo()+"%"); 80. } 81. } 82. return baseDAO.count(hql.toString().replaceFirst("and", "where"), param); 83. } 84. 85. @Override 86. public Order getOrderById(int id) { 87. return baseDAO.get(Order.class, id); 88. } 89. 90. }
    1  留言 2020-12-15 10:44:50
  • 基于JSP和MySQL的网络图书管理系统

    1 开发背景1.1 系统开发背景与意义随着互联网的发展,越来越多的高校图书馆开始创建自己的网站。基于互联网的信息服务已经成为现代大学一项不可缺少的内容。很多高校图书馆已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代图书馆需要的是一个功能强大的,能为网络商务提供完善服务的且能够支持注册登录的网站。同时人们的生活方式也在随着发生改变,传统的购物方式已不能满足人们的需求。JSP是Sun公司推出的一种网站开发技术,Sun公司借助自己在Java.上的极高造诣,又把人们引进JSP时代,JSP即Java Server Page,它可以在Servlet和JavaBean的支持下,完成功能强大的Web应用程序。所以在我的毕业设计中,我采用了Myeclipse作为开发工具,设计了一个能实现基本的网络商务的小型动态商务网站——网上图书销售系统。我所设计的这个系统能实现用户的注册、登录功还能够实现商品的查询,订购等功能。该系统基本上都有一个网上商品销售系统应该有的常用功能,
    该设计项目基本上体现了设计一个动态商务网站所需要的技术,可以说,目前的大型商务网站也就是我们这个小型网站在内容上的补充和完善。
    随着时代的发展,信息技术、数据库技术的不断发展完善,网络进程的加快,传统的购物方式也越来越不能满足人们快节奏的生活需求,使得大部分企业的IT部门已经认识到Internet的优势,网络商务就是在这样一个背景下产生和发展起来的。伴随着网络商务技术的不断发展,网络商务的功能也越来越强大,注册登录的用户可以在网上搜索购买到自己想要的各种各样的商品,开始让人们体会到了足不出户,便可以凭自己喜好来购物的快感。我的毕业设计也就正是一个网络商务系统的开发—-网上图书销售系统。
    随着计算机的广泛应用,其逐渐成为现代化的标志。甚至是书店,在正常运行的过程中总是面对很多的用户信息,书籍信息以及有时因些许客户因不想买或者不能卖该书所产生的借书信息、还书信息。因此需要对用户资源、书籍资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变化,要对因此而产生的单据进行及时的处理,为了提高网络图书或者企业内部对网络图书以销售和未销售的自动化的管理,能够更加快速的满足用户的要求,提高各种工作的效率,现对其设计相应的系统,以达到上述的目的。
    网络图书管理系统的主要功能是实现网络图书网络图书借阅和归还的管理的自动化。围绕这一主要功能,本系统涉及到以下主要的功能:借阅管理,归还管理。除了这些主要功能外,还包括一些基本的和辅助功能,它们分别是:图书查询、男性专区图书、女性专区图书、优质版权、特殊专栏、免费专栏、短篇、排行榜、书库。
    1.2 研究内容本课题主要研究的内容有:

    建立图书管理系统数据库管理图书和用户
    完成菜单栏,图书查询、男性专区图书、女性专区图书、优质版权、特殊专栏、免费专栏、短篇、排行榜、书库等选项
    管理网络图书的增删改查,实现借书还书功能
    实现账户管理,密码修改功能,并能增加用户、管理员
    能查看所有网络图书,已借阅网络图书,网络图书查询

    1.3 文档的组织结构本毕业设计主要是介绍基于JSP网络图书管理系统设计与实现。项目建立准备条件的设计,也就是开发环境的设计,数据库的建立等,该项目主要有以下内容:

    第一章:开发背景
    第二章:项目开发工具配置及介绍。本章主要说明了MyEclipse开发工具的使用等工具以及技术,本章都做了详细的介绍
    第三章:项目系统分析及概要设计。本章在第一章的基础上,创建数据库模型,并创建该系统需要的数据库表。通过本章的学习,可以试着了解怎样去建立一个数据库
    第四章:基于JSP网络图书管理系统设计与实现开发。项目系统分析及概要设计,具体介绍了此项目开发的具体步骤和方法,是整个项目的重点,本章主要有:主界面、男性专区与女性专区、特殊专栏、免费专栏、借阅管理
    第五章:总结与致谢

    2 需求分析2.1 可行性分析部分只负责买进和售出的企业在运营过程中,经常会受到以下-些条件的限制:产品的宣传受到限制,采购商或顾客只能通过上门咨询、电话沟通等方式进行各种信息的获取,受一定的时间与物理空间的局限且成本较高。庞大的商业经济周转。复杂的产品周转渠道。从看样品、谈价格到支付货款等系列的产品周转案道过于复杂,
    企业与顾客之间缺乏全面的沟通与快捷运营的平台。部分只负责买进和售出的企业中根据季节的变化,热销商品在销售高峰到来时货源紧张,企业需要实时了解商品的销售情况,保证热销商品的足够充足,能满足客户的需求量。因此,企业需要重新了解市场、消费者以及自身市场定位,正确认识网络商务技术在企业中的重要地位,以少量的时间和资金建立企业信息门户网站并架设-一定范围的商务网络,以此来制定长远发展战略,使企业与顾客间的经济活动变得更灵活、更主动。
    本系统是一个中小型的网络商务系统—-网上书店,可以为各类用户提供方便的在线买书环境,符合目前国内流行的网络商务模式。用户可以在系统中实现注册、浏览商品搜索查询商品、下定单、处理定单等功能;管理员可以通过用户管理、定单管理、商品管理.评论管理等管理功能来对系统进行维护更新。在技术.上,目前市场上开发网络商务平台的技术很多,如ASP,PHP,PB,.NET 等。我采用SUN公司的JSP技术,它是目前市场上最流行的技术之一,JSP具有-次编译,处处运行的忧点。由分析可得,不论是商业还是技术上,网络图书管理系统的开发都是可行的。
    2.1.1 经济可行性经济可行性研究是对组织的经济状况和投资能力进行分析研究,对系统建设的运行和维护费用进行评估预算,对系统建成后有可能取得的社会效益和经济效益进行预估。因为这次的项目系统是作为毕业设计由我自己开发的,所以经济有限,系统完成之后为企业采购管理提供更多的便利,原因是服务器端的安装更加的简单易懂,客户机端不再需要安装任何软件,可以直接通过浏览器进行访问,无论你人咋哪里,在经济方面因为本项目主要是属于一个开放的系统,就是免费的系统,但是在经济方面也是有提升的空间,例如可以接一些广告之类的植入费,但是收益虽然小,但目前来说,这属于一个小型的系统,因为从投入的人力,财力物力的话来讲,他的花费也是比较小,所以经济上还是可行的。
    2.1.2 技术可行性技术可行性就要考虑现有的技术条件能否支持顺利完成开发工作,软硬件配置可不可以满足开发的需要等内容。通过本来就有的系统和开发系统的系统流程图和数据流图,对系统来进行评估比较,分析原有系统的优越性和运行后环境等对其影响程度的大小。在开发过程中,尽可能采用比较成熟的技术,用于提高该系统的成功率,并且其优化程度好,可操作性强,鉴于以上原因,因此,完成系统实现在技术上完全具有可行性。技术方面采用了当前比较流行的JSP框架,目前在网上这方面的资源也比较多,所以实现起来也比较容易开发的,软件也有很多,而而且也比较成熟,例如数据库Mysql,在本系统上面也不会出现很多性能问题,他的技术也比较发达,因为生活中有很多这种实例,所以在技术上是可行的。
    2.1.3 操作可行性这个系统总体来说操作简单,功能简单便捷。所以整个系统在系统操作上来说是可行的。
    2.2 功能分析
    后台可管理图书,前台可以浏览信息
    后台可以对已经发布的信息进行删除或者修改
    管理员可管理系统内所有资源的权限
    管理员可修改密码
    用户可以查询图书,借阅图书

    2.3 关键技术我所使用的这个系统它是采纳面向对象的软件开发方法,以Java开发环境作为首要开发工具,用Mysql作为存储数据的仓库,再加上功能强大的SQL查询语言兑现创建一个存储数据的仓库,访问数据仓库,以及对数据仓库的更创新,都很好的落实了预定的功能。
    2.3.1 JAVA简介Java是当今新一代程序设计的编程语言,非常适合互联网应用的设计与开发。Java的产生与流行是当今Internet发展的客观要求,Java语言是一门性能优越的计算机语言,首先,它的最显著的特征是简单方便,易于理解,特别适合开发互联网应用系统。JAVA编程语言是一门完完全全的面向对象的语言,适合用来开发Internet程序,尤其在电商网站和信息系统中使用的非常广泛。由于它在保留了C语言的语句结构的同时去掉了指针、运算符重载、多继承等降低安全性、可靠性的元素。
    2.3.2 MYSQL简介MySQL是一个真正的多用户像仓库一样可以存储的服务器。它就是一个存储数据的仓库,它里面存储的数据就好像一些摆放整齐的物品,是由多不同的小程序和库组成。SQL语言是世界上最盛行的和规范的数据库编程语言。SQL语言是一种非常正规的语言,它让存储、更新和存取信息变得更加容易且简单。就比如,用户可以用SQL语言为某个销售系统查找商品信息以及存储顾客的信息一样,MySQL也能快捷的的保存数据。
    2.4 开发工具2.4.1 MyEclipse工具介绍关于MyEclipse这个开发工具,它也是一个非常好用而且很方便的用于开发Java,MyEclipse的功能它是非常强大的。MyEclipse可以支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是包括了目前世界上大部分主流开源产品的专属eclipse设计开发软件。
    2.4.2 Tomcat工具介绍Tomcat它是一种非常方便且好用的的小型服务器,里面的的程序代码都是免费的,并且支持访问量极少,所以常常被我们学生或者私人来使用程序设计中tomcat是最好的选择,换句话说,他是一个很好的软件,自己的电脑上面可以通过它对HTML页面进行访问请求。
    3 系统设计3.1 设计原则该系统主要建立一个基于B/S模式的网络图书借阅管理系统,主要解决传统的图书管理系统中人工管理带来的检索速度慢,效率低,借阅归还网络图书量大,网络图书统计工作量大,藏书不能完成及时更新的问题,该系统可以对跟系统的三个用户类型的使用实现:

    对于用户在本系统的应用下可实现查询网络图书的藏书清单,方便的借阅网络图书,续借网络图书,归还网络图书,能够查询自己的借阅网络图书情况
    对于网络图书工作人员能够实现方便的对网络图书进行查询,方便的进行用户借阅情况查询,方便的进行借书还书处理等,便捷的对网络图书信息进行添加、修改、删除,对用户信息进行相关添加,修改等操作
    对于系统管理员可以对网络图书信息进行修改更新操作,对系统用户进行添加、修改等操作

    3.2 网络图书管理系统结构图
    网络图书模块管理该模块主要有网络图书增加、编辑、查询和网络图书删除三个功能,其描述如表2-1所示:



    功能描述
    对网络图书进行基本操作和信息管理




    访问的数据库表
    网络图书类型表:book_gl


    进行的操作
    添加、修改、删除网络图书,对网络图书的书号、书名、单价、作者、出版社等基本信息进行管理


    产生的结果
    对网络图书基本操作管理,对不同网络图书参数进行各自信息的设置管理


    结果存储位置或输出
    结果存储在网络图书类型表(book_gl)中,结果在网络图书查询页面输出



    网络图书管理模块功能流程图

    用户流程图

    借阅管理模块功能该模块主要包含借书,还书两个子模块。



    功能描述
    对用户借阅网络图书进行基本操作和信息管理




    访问的数据库表
    网络图书信息表:book_gl,用户信息表:book_user,管理员信息表:book_biz


    进行的操作
    对用户借阅网络图书进行管理


    产生的结果
    用户借阅成功,系统对借阅信息进行记录


    结果存储位置或输出
    结果存储在网络图书信息表(book_gl)中,结果在网络图书借阅查询页面输出



    还书的描述如表3-3所示:



    功能描述
    对用户归还网络图书进行基本操作和信息管理




    访问的数据库表
    网络图书信息表:book_gl 用户信息表:book_user 管理员信息表:book_biz


    进行的操作
    对用户借阅网络图书进行管理


    产生的结果
    用户借阅成功,系统对借阅信息进行记录


    结果存储位置或输出
    结果存储在网络图书归还表(book_gl)中



    借阅管理模块模块功能流程图如图3.3所示:

    账户管理模块功能该模块主要包含密码修改,用户账户管理,根管理员功能三个子模块。密码修改的描述如表3-4所示。



    功能描述
    对已登录系统的账户进行密码修改操作




    访问的数据库表
    管理员信息表:book_user


    进行的操作
    修改本账户密码


    产生的结果
    修改成功,旧密码将被新密码替换


    结果存储位置或输出
    结果存储在管理员信息表(book_user)中



    用户账户管理的描述如表3-5 所示。



    功能描述
    对用户账号进行基本操作和信息管理




    访问的数据库表
    管理员信息表: book_user


    进行的操作
    增加、删除用户账号


    产生的结果
    操作成功,系统对用户账号信息进行记录或修改


    结果存储位置或输出
    结果存储在管理员信息表(book_user)中



    管理员功能的描述如表3-6 所示。



    功能描述
    对管理员账号进行基本操作和信息管理




    访问的数据库表
    管理员信息表:book_biz


    进行的操作
    增加、删除管理员账号


    产生的结果
    操作成功,系统对管理员账号信息进行记录或修改


    结果存储位置或输出
    结果存储在管理员信息表(book_biz)中



    账户管理模块模块功能流程图如图3.4所示:

    查询管理模块功能该模块主要包含所有藏书,已借网络图书,网络图书查询三个子模块。
    所有藏书的描述如表3-7所示:



    功能描述
    对网络图书藏书进行查询




    访问的数据库表
    网络图书信息表:book_gl


    进行的操作
    查询网络图书所有藏书


    产生的结果
    操作成功,系统对所有网络图书信息进行显示


    结果存储位置或输出
    结果存储在网络图书信息表(book_gl)中



    已借网络图书的描述如表3-8所示:



    功能描述
    对已借网络图书进行查询




    访问的数据库表
    网络图书信息表:book_gl


    进行的操作
    查询已借网络图书


    产生的结果
    操作成功,系统对已借网络图书信息进行显示


    结果存储位置或输出
    结果存储在网络图书信息表(book_gl)中



    网络图书查询的描述如表3-9所示。



    功能描述
    对网络图书名进行模糊查询筛选出需要的网络图书




    访问的数据库表
    网络图书信息表:book_gl


    进行的操作
    按网络图书名查询所需网络图书


    产生的结果
    操作成功,系统对筛选网络图书信息进行显示


    结果存储位置或输出
    结果存储在网络图书信息表(book_gl)中



    查询模块模块功能流程图如表3.5所示:

    各模块时序图下图所示:
    登录时序图

    男性专区与女性专区图书时序图

    特殊专栏时序图

    查询模块功能流程图

    3.3 数据库设计概述数据库是存储数据的大仓库,它是一个完整系统的基础,数据库设计的好与不好都将直接影响到整个系统的优劣。它已经成为现代信息系统不可分割的重要组成部分。
    数据库具有较高的程序与数据独立性,同时还拥有方便简单的编写程序等优点,因大型的网站系统也是建立在数据库设计之上的。它既便于数据的集中管理,又有利于应用程序的研制和维护,提高了数据的利用性和兼容性。数据库设计是把现实世界的实体模型与需求转换成数据库的模型的过程,它是建立数据库应用系统的核心问题。数据库及其应用的性能都建立在良好的数据库设计的基础之上,数据库的数据是一切操作的基础,如果数据库设计不好,那么其它一切用于提高数据库性能的方法收效都是有限的。
    设计数据库必须遵循一定的规则,在关系型数据库中,这种规则就是范式,范式是符合某一种级别的关系模式的集合。一般人们设计数据库遵循第三范式。即:数据库表中不包含已在其他表中包含的非主关键字信息。采用范式减少了数据冗余,节约了存储空间,同时加快了增、删、改的速度。
    整个系统所包括的信息有网络图书信息、用户信息、管理员信息、网络图书状态信息。可将这些信息抽象为下列系统所需要的数据项和数据结构:

    网络书籍信息(网络书籍编号,网络书名,价格,作者大大,出版社,借阅人)
    管理员信息(用户名,密码)
    用户信息(用户名,密码)

    如下是数据库关系图图3.10所示:

    3.3.1 网络图书信息表结构设计网络图书信息E-R图

    网络图书信息表



    列名
    数据类型
    可否为空
    说明




    book_Id
    int
    Not null
    小说编号


    book_name
    Varchar(30)
    Not null
    小说名称


    book_class
    Varchar(30)
    Not null
    小说类型


    book_price
    Varchar(30)
    null
    小说价格


    book_borrow
    Varchar(6)
    null
    小说借还


    book_beizhu
    Varchar(50)
    null
    备注


    book_user
    int
    Not null
    小说使用人



    3.3.2 管理员信息表结构设计设计这个表是用来存储书籍管理员的身份信息的,根据管理员们的需求不一样从而对他们设置不同的权限,用来限制不同类型的管理员。
    管理员信息E-R图

    管理员信息表



    字段名称
    数据类型
    可否为空
    说明




    uname
    Varchar(50)
    No
    用户名


    passwd
    Varchar(50)
    No
    密码


    id
    int
    Np
    主键id



    3.3.3 用户信息表结构设计设计读者用户信息表是为了让书籍管理员能对读者进行管理,因为ReadId号码都是不相同且不重复的,这样做是由于读者用户在借阅图书时需要输入读者户的ReadId号码身份进行识别。
    用户信息E-R图

    用户员信息表



    列名
    数据类型
    可否为空
    说明




    Id
    int
    Not null
    主键-用户编号


    uname
    Varchar(20)
    Not null
    用户姓名


    upass
    Varchar(20)
    Not null
    用户密码


    Email
    Varchar(20)
    null
    用户邮箱


    Phone
    int
    null
    用户电话



    4 系统实现4.1 主界面当用户打开首页页面,进入主页面,主页面如图4.1、4.2、4.3、4.4所示:
    主页面01图

    主页面02图

    主页面03图

    主页面04图

    主页面05图

    相关代码如下:
    1. <div class="returnTop_Img"></div> 2. <div class="returnTop_Img22"></div> 3. <div class="returnTop_Main"> 4. <div class="returnTop_Box returnTop_Box1"> 5. <div class="returnTop_In1 returnTop_In1_Hot"> 6. <p>神作</p> 7. <p>推荐</p> 8. </div> 9. <div class="returnTop_In1"> 10. <p>必看</p> 11. <p>新作</p> 12. </div> 13. <div class="returnTop_In1"> 14. <p>完结</p> 15. <p>专区</p> 16. </div> 17. <div class="returnTop_In1"> 18. <p>每日</p> 19. <p>更新</p> 20. </div> 21. <div class="returnTop_In1"> 22. <p>神作</p> 23. <p>限免</p> 24. </div> 25. <div class="returnTop_In1"> 26. <p>短篇</p> 27. <p>小说</p> 28. </div> 29. <div class="returnTop_In1"> 30. <p>贤者</p> 31. <p>书评</p> 32. </div> 33. <div class="returnTop_In1"> 34. <p>科学</p> 35. <p>艺术</p> 36. </div> 37. </div> 38. <div class="returnTop_Box returnTop_Box2"> 39. <a href="https://www.8kana.com/active/index/download" target="_blank" class="returnTop_In2 returnTop_In2_APP"> 40. APP下载 41. <div class="APPerweima"> 42. <div class="APPerweima_Box"> 43. <img src="static/picture/footer_erweimaapp.png" style="width: 100%; height: 100%;"> 44. </div> 45. </div> 46. </a> 47. <div class="returnTop_In2" id="feedback_Btn">意见反馈</div> 48. <div class="returnTop_In2_Last"> 49. <div class="returnTop_Btn_Icon"></div> 50. <div class="returnTop_In2_LastText">返回顶部</div> 51. </div> 52. </div> 53. <div class="clearfix returnTop_Border"> 54. <div class="left returnTop_BorderIn"></div> 55. <div class="left returnTop_BorderIn"></div> 56. </div> 57. </div> 58. </div> 59. </div> 60. <!--返回顶部--> 61. 62. <!--顶部导航--> 63. 64. <div class="fixedNav"> 65. <div class="clearfix fixedNav_In"> 66. <div class="left fixedNav_Main"> 67. <ul> 68. <li class="fixedNav_Hot"> 69. <a href="/" class="fixedNav_MainIn">首页</a> 70. <div class="fixedNav_list"> 71. <a href="/community/xzindex/index" target="_blank" class="fixedNav_listIn">贤者之城</a> 72. <a href="/community/ysindex/index" target="_blank" class="fixedNav_listIn">艺术工坊</a> 73. <a href="/bbs" target="_blank" class="fixedNav_listIn">暴风酒馆</a> 74. </div> 75. </li> 76. <li> 77. <a href="/www/bookclass/serial/7" class="fixedNav_MainIn">少女幻想</a> 78. </li> 79. <li> 80. <a href="/www/bookclass/serial/3" class="fixedNav_MainIn">烧脑</a> 81. </li> 82. <li> 83. <a href="/www/bookclass/serial/4" class="fixedNav_MainIn">轻小说</a> 84. </li> 85. <li> 86. <a href="/www/bookclass/serial/6" class="fixedNav_MainIn">神州</a> 87. </li> 88. <li> 89. <a href="/www/copyright" class="fixedNav_MainIn">优质版权</a> 90. </li> 91. <li> 92. <a href="/www/rank" class="fixedNav_MainIn">排行榜</a> 93. </li> 94. </ul> 95. </div> 96. <div class="left fixedNav_search"> 97. <form id="search" action="/www/search" method="post"> 98. <input type='hidden' id="hd_token2" name='' value='' /> 99. <a href="javascript:" class="right nav_btn"> 100. <span></span> 101. </a> 102. <div class="right fixedNav_Input"> 103. <input type="text" name="keyword" placeholder="搜索你感兴趣的作品或作者"> 104. </div> 105. </form> 106. 107. <script> 108. $("#search a").click(function() { 109. $("#search").submit(); 110. }); 111. </script> 112. </div> 113. <div class="right" id="LoginInfo1"> 114. <div class="right IDphoto "> 115. <a rel="nofollow" class="IDphoto_a" href="/member/index/index" target="_blank"><img src="" id="UserAvatar1" style="width: 100%; height: 100%;"></a> 116. </div> 117. <a rel="nofollow" id="bookshelf_hot1" href="/member/bookshelf/index" class="right topBar_bookList" target="_blank"> 118. <div class="clearfix right topBar_bookListText"><span class="left">书架</span><span id="bookshelf1" class="left"></span></div> 119. </a> 120. </div> 121. <!--未登录状--> 122. <div id="LoginUrl1" class="right topBarR_Index" style="display: none"> 123. <div class="right topBarR_Index_login"> 124. <script type="text/javascript"> 125. var html = ''; 126. html += '<a href="' + kana.getDomain('www') + '/www/passport/login?returnUrl=' + window.location.href + '" class="left topBarR_Index_login_Lbtn">登录</a>'; 127. html += '<span class="left topBarR_Index_login_border">|</span>' 128. html += '<a href="' + kana.getDomain('www') + '/www/passport/register?returnUrl=' + window.location.href + '" class="left topBarR_Index_login_Rbtn">注册</a>'; 129. document.write(html); 130. </script> 131. </div> 132. </div> 133. <!--未登录状态--> 134. </div> 135. </div> 136.
    4.2 男性专区与女性专区图书用户进入主界面,页面显示“首页”、“男性专区”、“女性专区”、“ 优质版权”、“特殊专栏”、“免费专栏”、“短篇”、“排行榜”的目录。点击“男性专区”进入男性专区的图书页面,里面是通过热门推荐选入男性专区的书籍页面。页面中显示第一本“九州问剑录”图书,以及该图书的相关信息,还有一些和书籍相关的链接,点击“女性专区”进入女性专区的图书页面,里面是通过热门推荐选入女性专区的书籍页面,和一些与书籍相关链接其中有免费的,有付费的图书页面如图4.5、4.6、4.7、4.8、4.9、4.10所示:
    男性专区01图

    男性专区02图

    男性专区03图

    女性专区01图

    女性专区02图

    女性专区03图

    相关代码如下:
    1. <div class="wrapper channel"> 2. <div class="channelClassNav"> 3. <a href="javascript:;" class="channelClassNav_In boy_channelClassNav_InHot">全部</a> 4. <a href="/www/bookclass/serial/7" class="channelClassNav_In ">少女幻想</a> 5. <a href="/www/bookclass/serial/8" class="channelClassNav_In ">浪漫现实</a> 6. <a href="/www/bookclass/serial/9" class="channelClassNav_In ">古风历史</a> 7. </div> 8. <div class="clearfix channelBox"> 9. <div class="clearfix channelBox_Main"> 10. <div class="channelBox_OneLeft"> 11. <div class="channelBox_OneCover"> 12. <div class="channelBox_OneCover_In" style=" "> 13. <a href="/book/26024.html" class="channelBox_OneCover_Img" target="_blank"> 14. <img src="static/picture/26024_8b018_5574_m.jpg" style="width: 100%; height: 100%;"/> 15. <div class="CoverIcon_0"></div> 16. </a> 17. <a href="/book/26024.html" class="channelBox_OneBookInfo" target="_blank"> 18. <div class="channelBox_OneBookName">拍砖打鬼进行中</div> 19. <div class="channelBox_OneBookAuthor"> 20. <span class="channelBox_OneBookAuthorName">作者:拍砖姑娘</span> 21. <span>12.58万字 | </span> 22. <span class="channelClass_Color">少女幻想</span> 23. </div> 24. <div class="channelBox_OneBookSynopsis">身为一名宅女,花宝宝一觉睡醒,竟然被人打晕了。 25. 再次醒来,竟然有着一只胖胖的狐狸盯着自己,胡扯八扯些什么没的。 26. 自此,她一手板砖,身后一堆灵鬼尾随,王者霸气侧漏,从此走上人生的“巅峰”? 27. 28. Oh my god!?</div> 29. </a> 30. </div> 31. <div class="channelBox_OneCover_In" style="display: none "> 32. <a href="/book/27227.html" class="channelBox_OneCover_Img" target="_blank"> 33. <img src="static/picture/27227_335da_5783_m.jpg" style="width: 100%; height: 100%;"/> 34. <div class="CoverIcon_0"></div> 35. </a> 36. <a href="/book/27227.html" class="channelBox_OneBookInfo" target="_blank"> 37. <div class="channelBox_OneBookName">我那跃动而明亮的人生</div> 38. <div class="channelBox_OneBookAuthor"> 39. <span class="channelBox_OneBookAuthorName">作者:木童心&魔界轮回</span> 40. <span>10.72万字 | </span> 41. <span class="channelClass_Color">浪漫现实</span> 42. </div> 43. <div class="channelBox_OneBookSynopsis">那高低起伏的排球挥洒着他们的汗水,又仿佛他们躁动不安的青春。 44. 那是他们彼此都难以割舍的过往。 45. 大猪蹄子,接我一记扣杀!</div> 46. </a> 47. </div> 48. <div class="channelBox_OneCover_In" style="display: none "> 49. <a href="/book/26795.html" class="channelBox_OneCover_Img" target="_blank"> 50. <img src="static/picture/26795_2035d_5691_m.jpg" style="width: 100%; height: 100%;"/> 51. <div class="CoverIcon_0"></div> 52. </a> 53. <a href="/book/26795.html" class="channelBox_OneBookInfo" target="_blank"> 54. <div class="channelBox_OneBookName">甜蜜过招999式</div> 55. <div class="channelBox_OneBookAuthor"> 56. <span class="channelBox_OneBookAuthorName">作者:糖红豆</span> 57. <span class="channelClass_Color">浪漫现实</span> 58. </div> 59. <div class="channelBox_OneBookSynopsis">为完成奶奶临终前的心愿,原本生活平静的唐浅雪开启疯狂相亲之路,在接连相亲26次后,却在第27次相亲时,相错对象恋对人、偶遇被家人以死相逼出来相亲的腹黑霸道总裁白亦成,一见如故。 60. 二人当天领证闪婚,从此开始一段你追我躲的甜蜜撒粮生活。 61. (纯净无毒,粮大管饱) 62. </div> 63. </a> 64. </div> 65. <div class="channelBox_OneCover_In" style="display: none "> 66. <a href="/book/26393.html" class="channelBox_OneCover_Img" target="_blank"> 67. <img src="static/picture/26393_a09dc_5618_m.jpg" style="width: 100%; height: 100%;"/> 68. <div class="CoverIcon_0"></div> 69. </a> 70. <a href="/book/26393.html" class="channelBox_OneBookInfo" target="_blank"> 71. <div class="channelBox_OneBookName">高冷男友有点弯</div> 72. <div class="channelBox_OneBookAuthor"> 73. <span class="channelBox_OneBookAuthorName">作者:素者</span> 74. <span>25.3万字 | </span> 75. <span class="channelClass_Color">浪漫现实</span> 76. </div> 77. <div class="channelBox_OneBookSynopsis">#不得志的可爱哭泣包女生VS又冷又甜的冰淇淋男生日常# 78. 他为了某个目的帮她追喜欢的人,她因某事感恩默默帮他掰直,结果…… 79. 长得像个福娃娃般的可爱女生尴尬看着某高冷男,“那个,我,我误会...唔...”被壁咚强吻说不出话,真是好讨厌,但又觉得有点甜怎么破?</div> 80. </a> 81. </div> 82. <div class="channelBox_OneCover_In" style="display: none "> 83. <a href="/book/26104.html" class="channelBox_OneCover_Img" target="_blank">
    4.3 特殊专栏当用户进入主页面,在首页的列表中点击特殊专栏,页面将跳转到特殊专栏的专属页面当中,这个页面中我们可以选择自己喜欢的图书。这个页面的基本功能实现,每个图书旁边都会有一些简单的简介,还有这个图书的当前热度,以及下载量。
    特殊专栏界面如图4.11、4.12、4.13、4.14所示。
    特殊专栏01页面

    特殊专栏02页面

    特殊专栏03页面

    特殊专栏04页面

    相关代码如下:
    1. <div class="nav"> 2. <div class="navTop wrapper"> 3. <ul class="left navTopL clearfix"> 4. <li class="navTopL_list navTopL_current" onclick="click_num(21,20);"> 5. <a href="index.html" class="navTop_type">首页</a> 6. </li> 7. 8. <li class="navTopL_list navTopL_list_boy "> 9. <a href="nanpin.html" class="navTop_type navTop_type_Boy">男性专区</a> 10. </li> 11. <li class="navTopL_list "> 12. <a href="girl.html" class="navTop_type">女性专区</a> 13. </li> 14. <li class="navTopL_list "> 15. <a href="copyright.html" class="clearfix navTop_type"> 16. <span class="left">优质版权</span> 17. <i class="left yzIcon"></i> 18. </a> 19. </li> 20. <li class="navTopL_list "> 21. <a href="vip.html" class="navTop_type">特殊专栏</a> 22. </li> 23. <li class="navTopL_list "> 24. <a href="freezone.html" class="navTop_type">免费专栏</a> 25. </li> 26. <li class="navTopL_list "> 27. <a href="dppd.html" class="navTop_type">短篇</a> 28. </li> 29. <li class="navTopL_list " onclick="click_num(29,20);"> 30. <a href="rank.html" class="navTop_type">排行榜</a> 31. </li> 32. <li class="navTopL_list " onclick="click_num(28,20);"> 33. <a href="bookshelf.html" class="navTop_type">书库</a> 34. </li> 35. <li class="navTopL_list"> 36. <a href="qczw.html" class="navTop_type" style="font-size:16px; color:#FF986F; font-weight:800">征文大赛</a> 37. </li> 38. </ul> 39. <div class="right nav_R_authorWelfare" onclick="click_num(35,33);"> 40. <a class="clearfix" href="https://www.8kana.com/bbs/index/show/16941.html" target="_blank">网站福利</a> 41. </div> 42. <div id="btn_submission" class="right btn_submission right" onclick="click_num(7,1)"> 43. <a onclick="authorConfirm()" href="javascript:click_num(14,0);"> 44. <span class="left"> 45. <script> 46. if(GPT.getCookieValue('IsAuthor')==1) 47. document.write('作者中心'); 48. else 49. document.write('我要投稿'); 50. </script> 51. </span> 52. </a> 53. </div> 54. </div> 55. </div> 56. <div class="navClass"> 57. <div class="clearfix navClassIn"> 58. <a href="/www/bookclass/serial/3-302" class="navClassIn_Text">悬疑22</a> 59. <a href="/www/bookclass/serial/3-305" class="navClassIn_Text">灵异</a> 60. <a href="/www/bookclass/serial/3-303" class="navClassIn_Text">智斗</a> 61. <a href="/www/bookclass/serial/4-405" class="navClassIn_Text">轻小说</a> 62. <a href="/www/bookclass/serial/4-404" class="navClassIn_Text">同人</a> 63. <a href="/www/bookclass/serial/1-101" class="navClassIn_Text">超能</a> 64. <a href="/www/bookclass/serial/1-104" class="navClassIn_Text">现实</a> 65. <a href="/www/bookclass/serial/1-103" class="navClassIn_Text">游戏</a> 66. <a href="/www/bookclass/serial/2-201" class="navClassIn_Text">玄幻</a> 67. <a href="/www/bookclass/serial/2-202" class="navClassIn_Text">奇幻</a> 68. <a href="/www/bookclass/serial/2-203" class="navClassIn_Text">科幻</a> 69. <a href="/www/bookclass/serial/6-601" class="navClassIn_Text">新派武侠</a> 70. <a href="/www/bookclass/serial/6-602" class="navClassIn_Text">幻想神州</a> 71. <a href="/www/bookclass/serial/8-801" class="navClassIn_Text">青春</a> 72. <a href="/www/bookclass/serial/8-802" class="navClassIn_Text">民国</a> 73. <a href="/www/bookclass/serial/8-803" class="navClassIn_Text">都市</a> 74. <a href="/www/bookclass/serial/7-701" class="navClassIn_Text">脑洞</a> 75. <a href="/www/bookclass/serial/7-702" class="navClassIn_Text">二次元</a> 76. <a href="/www/bookclass/serial/2-202" class="navClassIn_Text">奇幻</a> 77. 78. <a href="javascript:;" class="navClassIn_Text">仙侠</a> 79. <a href="javascript:;" class="navClassIn_Text">宅斗宫斗</a> 80. <a href="javascript:;" class="navClassIn_Text">架空</a> 81. </div> 82. </div> 83. 84. <script> 85. $.get("/www/index/ajaxGetSubMenu", {}, function(response){ 86. var str = ''; 87. for(var i in response.sub_classes) { 88. var subClass = response.sub_classes[i]; 89. str += '<a href="/www/bookclass/serial/' + subClass.Parent + '-' + subClass.ClassId + '" class="navClassIn_Text">' + subClass.Name + '</a>'; 90. } 91. 92. $(".navClassIn").html(str); 93. }, 'json'); 94. 95. $(".navTopL_list").hover(function(){ 96. $(this).find(".navTop_type_list").slideDown(); 97.
    4.4 借阅管理用户要进行借阅书籍的操作时,需要输入自己已注册成功的用户名和正确的密码进行登录操作,再点击“借还管理”里的“图书借还”,便可以对书籍进行借还。
    图书借阅界面如图4.15所示:

    相关代码如下:
    1. public void doPost(HttpServletRequest request, HttpServletResponse response) 2. throws ServletException, IOException { 3. 4. response.setContentType("text/html;charset=utf-8"); 5. request.setCharacterEncoding("utf-8"); 6. PrintWriter out= response.getWriter(); 7. String opr = request.getParameter("opr"); 8. List<Book> lists = new ArrayList<Book>(); 9. BookDaoImpl daoImpl = new BookDaoImpl(); 10. try { 11. if("list".equals(opr)) { 12. lists = daoImpl.listAll(); 13. request.setAttribute("list", lists); 14. request.getRequestDispatcher("templateSetting.jsp").forward(request, response); 15. }else if("insert".equals(opr)) { 16. //新增 17. 18. String book_name = request.getParameter("book_name"); 19. String book_class = request.getParameter("book_class"); 20. String book_price = request.getParameter("book_price"); 21. String book_borrow = request.getParameter("book_borrow"); 22. String book_beizhu = request.getParameter("book_beizhu"); 23. 24. Book book = new Book(); 25. 26. book.setBook_name(book_name); 27. book.setBook_class(book_class); 28. book.setBook_price(book_price); 29. book.setBook_borrow(book_borrow); 30. book.setBook_beizhu(book_beizhu); 31. 32. int result = daoImpl.insert(book); 33. if(result > 0) { 34. out.println("新增成功"); 35. response.sendRedirect("BookDaoServletb?opr=list"); 36. } 37. }else if("delete".equals(opr)) { 38. //删除 39. int id = Integer.parseInt((request.getParameter("id"))); 40. try { 41. Book deleteDef = new Book(); 42. deleteDef.setBook_Id(id); 43. int result = daoImpl.delete(deleteDef); 44. if(result > 0) { 45. out.println("删除成功"); 46. response.sendRedirect("BookDaoServletb?opr=list"); 47. } 48. } catch (Exception e) { 49. e.printStackTrace(); 50. } 51. }else if("update".equals(opr)) { 52. //修改 53. int book_id=Integer.parseInt(request.getParameter("book_id")); 54. String book_name = request.getParameter("book_name"); 55. String book_class = request.getParameter("book_class"); 56. String book_price = request.getParameter("book_price"); 57. String book_borrow = request.getParameter("book_borrow"); 58. String book_beizhu = request.getParameter("book_beizhu"); 59. 60. Book book = new Book(); 61. 62. book.setBook_name(book_name); 63. book.setBook_class(book_class); 64. book.setBook_price(book_price); 65. book.setBook_borrow(book_borrow); 66. book.setBook_beizhu(book_beizhu); 67. int result = daoImpl.update(book,book_id); 68. if(result > 0) { 69. out.println("修改成功"); 70. response.sendRedirect("BookDaoServletb?opr=list"); 71. } 72. }else if("insertSingle".equals(opr)) { 73. //根据id查询 74. int book_id=Integer.parseInt(request.getParameter("book_id")); 75. lists = daoImpl.QueryById(book_id); 76. request.setAttribute("list", lists); 77. request.getRequestDispatcher("moduleSetting.jsp").forward(request, response); 78. }else if("single".equals(opr)) { 79. //根据id查询 80. int book_id = Integer.parseInt((request.getParameter("id"))); 81. System.out.println(book_id); 82. lists = daoImpl.QueryById(book_id); 83. request.setAttribute("list", lists); 84. request.getRequestDispatcher("updateTem.jsp").forward(request, response); 85. } 86. 87. } catch (Exception e) { 88. e.printStackTrace(); 89. } 90. } 91. 92. }
    4.5 免费专栏当用户打开主页面,在首页中点击免费专栏,免费专栏主要提供免费的图书,分为几个小的子阶段,第一个是“编辑力推”这是用户都认为比较好看的图书,图书周边会有图书的简介以及图书的热度。“男生都在看”是属于男生都喜欢看的图书,图书周边会有图书的简介以及图书的热度,还有图书的更新的最新章节。“女生都在看”是属于男生都喜欢看的图书,图书周边会有图书的简介以及图书的热度,还有图书的更新的最新章节。界面如图4.16、4.17、4.18所示:
    免费专栏01页面

    免费专栏02页面

    免费专栏03页面

    相关代码如下:
    1. <div class="clearfix wrapper mainBox_In freezoneTwo"> 2. <!-- 编辑力荐 --> 3. <div class="freezoneTitle freezoneTitle1"></div> 4. <div class="clearfix freezone_Main"> 5. <a href="/book/26583.html" class="left freezoneTwo_In" target="_blank"> 6. <div class="freezoneTwo_Cover"> 7. <img src="static/picture/26583_bef03_915_m.jpg" style="width: 100%; height: 100%"> 8. <div class="freezoneTwo_Block">4790.16万热度</div> 9. </div> 10. <div class="freezoneTwo_Name">亡者之路1代号摩萨利尔</div> 11. <div class="freezoneTwo_Text">简介:本文讲述了被除籍少校林锐与义兄弟古...</div> 12. <div class="freezoneTwo_New">最新:<span>第八十章 云中漫步(上)</span></div> 13. </a> 14. <a href="/book/27040.html" class="left freezoneTwo_In" target="_blank"> 15. <div class="freezoneTwo_Cover"> 16. <img src="static/picture/27040_3e54b_5766_m.jpg" style="width: 100%; height: 100%"> 17. <div class="freezoneTwo_Block">214.1万热度</div> 18. </div> 19. <div class="freezoneTwo_Name">君有云</div> 20. <div class="freezoneTwo_Text">简介:十里琅珰,学宫所在,由儒圣坐镇,其...</div> 21. <div class="freezoneTwo_New">最新:<span>036 天字</span></div> 22. </a> 23. <a href="/book/12484.html" class="left freezoneTwo_In" target="_blank"> 24. <div class="freezoneTwo_Cover"> 25. <img src="static/picture/12484_3c650_2148_m.jpg" style="width: 100%; height: 100%"> 26. <div class="freezoneTwo_Block">7054.96万热度</div> 27. </div> 28. <div class="freezoneTwo_Name">圣堂之城</div> 29. <div class="freezoneTwo_Text">简介: 220年,一款最热最火爆的游戏席...</div> 30. <div class="freezoneTwo_New">最新:<span>1304 杀招</span></div> 31. </a> 32. <a href="/book/26179.html" class="left freezoneTwo_In" target="_blank"> 33. <div class="freezoneTwo_Cover"> 34. <img src="static/picture/26179_1df4e_996_m.jpg" style="width: 100%; height: 100%"> 35. <div class="freezoneTwo_Block">138.49万热度</div> 36. </div> 37. <div class="freezoneTwo_Name">影照玄朝开疆记</div> 38. <div class="freezoneTwo_Text">简介: 孤庭寰幽震北原,戎鏖战图平霜严...</div> 39. <div class="freezoneTwo_New">最新:<span>第五十一章 谍中反谍,局中布局</span></div> 40. </a> 41. <a href="/book/22999.html" class="left freezoneTwo_In" target="_blank"> 42. <div class="freezoneTwo_Cover"> 43. <img src="static/picture/22999_7c034_5106_m.jpg" style="width: 100%; height: 100%"> 44. <div class="freezoneTwo_Block">137.56万热度</div> 45. </div> 46. <div class="freezoneTwo_Name">一不小心成了喵神</div> 47. <div class="freezoneTwo_Text">简介: 这是一个在修真界混吃等死、胸无大...</div> 48. <div class="freezoneTwo_New">最新:<span>第550章 凶兽出世啦!</span></div> 49. </a> 50. <a href="/book/27174.html" class="left freezoneTwo_In" target="_blank"> 51. <div class="freezoneTwo_Cover"> 52. <img src="static/picture/27174_f4888_5776_m.jpg" style="width: 100%; height: 100%"> 53. <div class="freezoneTwo_Block">22.28万热度</div> 54. </div> 55. <div class="freezoneTwo_Name">沙之巅</div> 56. <div class="freezoneTwo_Text">简介:枯黄色、灰色、白色 废料厂、沙漠、... 57. </div> 58. <div class="freezoneTwo_New">最新:<span>020暗红</span></div> 59. </a>
    5 总结与展望最后,我通过观察用户反馈发现现如今书籍管理系统普遍都存在一些问题,比如操作繁琐,工作效率较低,数据遗漏,误报等等,从而编写了这个软件系统,从分析结果可以看出,这个软件系统可以很好地解决关于书籍管理这方面的一些问题,让用户拥有了更好的使用体验。
    在开发这个软件的过程中,从需求分析到设计、写代码、测试软件,我都严格要求自己做到非常规范和标准,努力将自己在大学这三年所学的知识运用到该软件的开发里,尽量做到本系统的进度和质量都在水准之上,给自己的三年大学生涯画一个完美的句号,不给自己留下遗憾。虽然,在开发该系统时,有很多问题都是能通过所学的知识去处理好的,但是也给我增加了一些小小的麻烦。比如说:软件有时候运行不了,怎么使用框架等等诸如此类。虽说这些都会消耗系统开发的时间,但在老师的指导下,我还是顺利的完成了这个毕业设计,成功实现了相关的功能。
    本毕业设计完成的主要工作有:

    用户在使用该系统的时候可以又方便又快速的查找各种各样的书籍,自己借书的详细信息,和用户自己想要借阅什么样的书籍,还可以非常方便的了解各类书籍的详细信息
    书籍管理员可以非常方便而且又很快速的对书籍进行查询和管理,比如对书籍进行增加,删除,更改,查询等
    书籍管理员能使用户进行更方便的查找书籍等操作

    但本系统还存在很多不足,如:很多功能还未实现,但是我再接下来的日子里面逐渐去完善这个系统,代码不便于日后修改升级等,这些均有待改善。
    3  留言 2020-12-11 09:32:49
  • 基于Java的健身房管理信息系统

    摘 要随着经济的发展与生活水平不断提高,人们对自己的健康状况特别关注,健身房作为专业的健身服务行业,已经越来越受到人们的亲睐。然而随着客户数量的剧增,健身房规模的扩大,传统的人工管理模式已经不能适应其发展。本课题的主要内容是设计并实现一个健身房管理信息系统,为健身房更专业的健身服务和科学化的管理提供支持。本健身房管理信息系统服务于管理员、俱乐部会员以及教练三种不同的用户。除了实现了对会员信息、教练信息和课程信息的统一管理外,还提供公共课排课、私教课预约、体测数据登记和查询等功能。本文详细介绍了该系统的需求分析及系统范围说明、总体设计、系统实现、系统测试等过程。本系统的开发是经过实际的需求分析,将系统设计成C/S模式(Client/Server,客户端/服务器),采用了Java开发技术和Oracle 11g数据库管理系统作为工具进行开发。
    关键词:健身房管理; 需求分析; C/S; Java; Oracle 11g
    0  留言 2020-08-23 23:03:05
  • 基于JSP和Mysql的公司员工管理系统

    摘 要随着互联网技术越来越普及,全球的经济形态也随之发生了巨大的变化,转变为以信息化技术为主的新经济形态。而企业想要应对新经济时代带来的挑战,谋求更好的发展,就需要利用信息技术将庞大的数据运用到企业的各项工作中。所以开发一款科学合理的、方便现代人使用的员工管理系统,可以提高公司的人力资源管理效率,从而增加企业的市场占有率和总体竞争力,让企业在经济全球化竞争中处于优势地位。
    关键词:信息化;新经济;提高效率;公司员工管理系统
    1 绪论1.1 设计背景企业作为一个国家经济的重要组成部分,然而随着公司的发展壮大,公司员工也随之增多,每 年公司对员工管理的成本也在增加,面临的各种问题也在增多。当公司的规模尚小时,老式的纸质 化管理方式还可以比较容易的完成对员工信息与事务的管理,但随着公司规模越来越大,人员与事 务的增多,这种老式的方法就会出现非常多弊端,例如:纸质文档非常难以保存、查询起来非常方 便、耗费了大量人力资本但工作效率却依然十分低,工作时的出错率还高等很多问题,这种方法已 经跟不上时代的发展了。所以开发一款科学合理的、方便现代人使用的员工管理系统十分有必要。
    1.2 设计意义利用计算机开发一个员工管理系统来对人力资源进行管理,具有老式的纸质化管理所无法比拟的优 点。例如:查找起来十分迅速准确、可存储数据量大、安全保密性能好、成本相对低等。这些优点 对于提高企业对员工和事务管理工作的效率,从而增加企业的市场占有率和总体竞争力,让企业在 经济全球化竞争中处于优势地位十分有帮助。并且运用信息技术将庞大的数据运用到企业的各项工 作中,是企业面对新经济形态挑战强而有力的应对手段。
    1.3 设计思路公司员工管理系统采用了经典的 M-V-C 开发模式,利用的技术有 java 语言开发、面向对象的分析和 设计思想、相关网页脚本语言,使用 Myeclipse 作为开发工具,使用 Mysql 作为数据库工具,设计出 来的系统基本可以完成公司人事部门对员工的各种管理工作。
    2 需求分析2.1 需求描述员工管理系统是一个企业内部的后台系统,所以只能供企业内部的管理员来使用,管理员通过分配 的用户名和密码就能登录系统。管理员在成功登陆系统后,就可以实现各种对员工的管理操作,比 如对职位部门信息、签到考勤信息、奖励与惩罚信息、薪金信息、员工的信息进行管理,也可以对 自己的登录信息进行修改,以及消息查询等。
    2.2 用例建模管理员在成功登录系统后,可以对企业职员相关信息、职位和部门信息、签到考勤信息、奖励与惩 罚信息、职员薪金信息、自己的登录信息及个人信息等进行管理。

    2.3 用例描述2.3.1 个人信息用例描述
    目的:管理员登陆后可以查看自己收到消息和通知,自己的基本信息并可以更改自己登陆系统的密码操作等
    事件流:管理员想要对个人信息进行操作时,本用例开始执行

    管理员登录系统成功点击个人信息板块首先会显示个人的基本信息点击查看消息按钮会显示个人收到的消息点击修改密码按钮可以进行修改密码操作用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员点击个人信息板块查看自己了的基本信息、点击消息按钮,进行了更改登录密码操作

    2.3.2 员工管理用例描述
    目的:管理员在登陆系统后可以查看公司所有职员的基本信息,并可以录入相关员工、更改员工信息、开除员工操作
    事件流:管理员想要对职员的信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击员工管理板块,先会列出所有的员工点击查看详细按钮会显示员工的详细信息点击删除员工按钮会将员工删除点击增添员工按钮可以录入员工信息点击编辑员工按钮可以编辑员工信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看了相关职员的详细信息、并进行了录入新的员工操作、开除一个 或多个员工操作、修改员工信息操作

    2.3.3 部门管理用例描述
    目的:管理员在登陆系统后可以查看公司的各个职位部门信息,并可以设立新的部门,修改已存在 的部门,移除已存在的部门操作
    事件流:管理员想要对部门信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击部门管理板块会列出所有的部门点击查看按钮会显示员工的详细信息点击移除部门按钮会将部门移除点击增添部门按钮可以新增部门点击编辑部门按钮可以编辑部门信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看详细职位部门按钮、进行了移除部门操作、设立新部门操作、更 改部门信息操作

    2.3.4 考勤管理用例描述
    目的:管理员在登陆员工系统后可以查看已发布的签到考勤信息,并且可以对其进行更改操作,或 发布一条新的签到考勤信息、删除已存在考勤信息
    事件流:管理员想要对考勤信息进行管理操作时,本用例开始执行

    管理员登录系统成功点击考勤管理板块会显示考勤信息列表点击查看按钮会显示考勤的详细信息点击删除考勤按钮会将考勤信息删除点击发布考勤按钮可以新增考勤信息点击编辑考勤按钮可以编辑考勤信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员进行了发布新的签到考勤操作、查看了已存在签到考勤、更改已存在的签到考勤操作、移除相关考勤信息操作

    2.3.5 奖惩管理用例描述
    目的:管理员在登陆系统后可以查询职员的奖励与惩罚信息、并且可以修改奖励与惩罚、增加奖励 或者惩罚、移除奖惩信息操作
    事件流:管理员想要对奖励与惩罚信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击奖惩管理板块会显示奖惩列表点击查看按钮会显示奖惩的详细信息点击删除奖惩勤按钮会将奖惩信息删除点击增添奖惩按钮可以新增奖惩信息点击修改奖惩按钮可以编辑奖惩信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看详细的奖励与惩罚信息、增加新的奖励或惩罚、更改奖惩信息操 作、移除奖惩信息操作

    2.3.6 工资管理用例描述
    目的: 管理员在登陆系统后可以查看每个员工对应的薪金信息、更改薪金信息、移除相关工资信息、 添加员工的薪金信息操作
    事件流:管理员想要对工资信息进行各种操作时,本用例开始执行

    管理员登录系统成功点击工资管理板块会列出所以工资信息点击查看按钮会显示工资的详细信息点击删除工资按钮会将工资信息删除点击新增工资按钮可以新增工资信息点击编辑工资按钮可以编辑工资信息用例结束
    前置条件:管理员登录系统成功
    后置条件:管理员查点击了查看详细工资信息、更新工资、发布新的工资、移除工资按钮。

    3 系统设计3.1 数据库设计3.1.1 数据库整体设计本系统采用 MySQL 数据库,数据库名为 personal,,数据库系统中包括八张数据表。分别是员工信 息表、职位信息表、奖惩信息表、薪金信息表、部门信息表、考勤信息表、个人信息表。

    3.1.2 数据库脚本




    3.2 系统架构设计公司员工管理系统采用了 M-V-C 的设计思想,所谓 MVC,即 Model-View-Controller。

    Model 层:在本系统中 com.model 包中存放了项目所有的实体类,在包 com.dao 中存放了 项目所需的所有的数据操作接口,两者共同实现了系统所需的全部的增删改查等数据操作
    Controller 层:在本系统中 com.action 包中存放了所有的对 Servlet 进行的各种请求操作
    View 层:在本系统中用根据不同功能设计的网页来表现视图部分

    3.3 模块设计3.3.1 功能模块设计
    4 产品实现4.1 登录模块的实现4.1.1 界面设计登录界面

    4.1.2 功能实现
    4.2 考勤管理模块实现4.2.1 界面设计考勤管理信息列表界面

    考勤管理增添界面

    考勤管理详细界面

    考勤管理编辑界面

    4.2.2 功能实现Com.dao / CheckonDao 主要代码


    4.3 工资管理模块实现4.3.1 界面设计工资管理列表界面

    工资管理增添界面

    工资管理详细界面

    工资管理编辑界面

    4.3.2 功能实现招聘管理 com.dao / Reward 主要代码


    4.4 部门管理模块实现4.4.1 界面设计部门管理列表界面

    部门管理增添界面

    部门管理增添界面

    部门管理编辑界面

    4.4.2 功能实现

    4.5 员工管理模块实现4.5.1 界面设计员工管理列表界面

    员工管理增添界面

    员工管理详细界面

    员工管理编辑界面

    4.5.2 功能实现

    5 产品测试5.1 测试方法与策略测试方法:黑盒测试法
    5.2 考勤管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    考勤信息查看
    系 统 会 显 示 所 有的考勤信息
    与 预 期 的 结 果相符
    1


    2
    考勤信息增添
    可 以 成 功 增 添 考勤信息
    与 预 期 的 结 果相符
    1


    3
    考勤信息编辑
    可 以 成 功 编 辑 考勤信息
    与 预 期 的 结 果相符
    1


    4
    考勤信息删除
    可 以 成 功 删 除 考勤信息
    与 预 期 结 果 相符
    1



    5.3 工资管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    工资信息查看
    系 统 会 显 示 所 有的工资信息
    与 预 期 的 结 果相符
    1


    2
    工资信息增添
    可 以 成 功 增 添 工资信息
    与 预 期 的 结 果相符
    1


    3
    工资信息编辑
    可 以 成 功 编 辑 工资信息
    与 预 期 的 结 果相符
    1


    4
    工资信息删除
    可 以 成 功 删 除 工资信息
    与 预 期 结 果 相符
    1



    5.4 部门管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    部门信息查看
    系 统 会 显 示 所 有的部门信息
    与 预 期 的 结 果相符
    1


    2
    部门信息增添
    可 以 成 功 增 添 部门信息
    与 预 期 的 结 果相符
    1


    3
    部门信息编辑
    可 以 成 功 编 辑 部门信息
    与 预 期 的 结 果相符
    1


    4
    部门信息删除
    可 以 成 功 删 除 部门信息
    与 预 期 结 果 相符
    1



    5.4 员工管理模块测试


    序号
    测试用例
    预期结果
    实测结果
    测试状态




    1
    员工信息查看
    系 统 会 显 示 所 有的员工信息
    与 预 期 的 结 果相符
    1


    2
    员工信息增添
    可 以 成 功 增 添 员工信息
    与 预 期 的 结 果相符
    1


    3
    员工信息编辑
    可 以 成 功 编 辑 员工信息
    与 预 期 的 结 果相符
    1


    4
    员工信息删除
    可 以 成 功 删 除 员工信息
    与 预 期 结 果 相符
    1



    6 结论6.1 毕业设计成果特点公司员工管理系统设计的逻辑也比较合理,加之页面设计的也比较友好,所以操作起来十分顺畅。 员工管理系统的出现,解决了老式的纸质管理方法的弊端,提高了企业在人事方面的管理效率,从 而增加企业的市场占有率和总体竞争力。
    6.2 不足之处或遗留未予解决的问题这个系统基本上是根据个人的理解来进行设计与实现的,所以在开发过程中还是有很多问题是没有 考虑全面的,同时也有许多问题自己无法解决,还有很多可以进一步完善的地方:

    由于自己对前端不是很精通,所以在页面的设计方面有点过于简单和不美观了。在设计每 个 jsp 页面的过程中,虽然参考了网上的素材模板,但由于时间和技术的局限性,很多地方未能结合 自己的代码来美观的实现,这也提醒我后面的学习需要注意到对于前端页面这一方面的提升
    有些功能设计的欠缺考虑,与实际的员工管理事务有一定差距
    对于框架的理解与运用还比较差,也是后面学习所需要注意的

    参考文献[1]胡敏.Web 系统下提高 MySQL 数据库安全性的研究与实现[D]. 北京邮电大学, 2015.
    [2]杨磊, 陈凌云. 精通 Eclipse Web 开发:Java 体系结构、工具、框架及整合应用[M]. 人民邮电 出版社, 2006.
    [3]李志峥,杨社堂. 基于 B/S 结构下的软件系统测试研究[J]. 图书情报导刊, 2006, 16(7):232-234.]
    [4] 张勇.基于 J2EE 架构的企业人事管理系统的研究与开发[D]. 电子科技大学, 2013.
    [5] 陶幸辉, 宋志刚. 软件系统测试类型及测试用例设计[J]. 科技、经济、市场, 2011(6):3-5.
    8  留言 2020-08-26 10:31:50
  • 基于JSP和MYSQL的酒店房间管理系统

    摘 要随着社会服务行业的不断发展,使用计算机系统软件来管理整个酒店业务的 要求也逐年提高,我国一些酒店都采用了相关的酒店管理系统来管理酒店业务, 以解决酒店全凭原始的手工记录管理效率低、易出错的缺陷;另外酒店行业对自 身提供服务的质量和能力也有了更高的要求,因此,酒店管理系统正因此而越来 越受到管理者的重视。
    本课题结合酒店管理系统的开发过程,详细介绍如何针对酒店的需求,将先 进的软件应用技术融入现代酒店管理系统当中,开发出功能更完善的酒店管理系 统。本酒店管理系统采用 JSP 技术、MYSQL 数据库,基于 B/S 结构开发实现,系 统主要包括两大功能模块,即用户功能模块和管理员功能模块。本系统采用当前 流行的 B/S 结构,将酒店管理各方面信息集中存储于数据库,实现了信息的实时 共享,适合酒店向集团化发展的需要。系统具有运行稳定、数据结构严谨、稳定 性强等特点。
    关键词 :酒店管理系统; MYSQL 数据库; JSP 技术; B/S 结构
    1 概述1.1 研究背景网络的快速发展从根本上更改了世界的企业的管理方式,自二十世纪九十年 代开始,我国的很多企业就设想可以通过互联网来进行管理企业相关信息。因为 当时存在很多的原因,比如企业的声誉非常不好进行认证、互联网的相关法律法 规也不够完善、开发技术也不够成熟等,阻碍了互联网在各大企业中的发展速度。 进入二十一世纪以后,我国经济有了快速的发展,限制企业管理的各个难题逐一 被解决,国内各大企业都加入到了电子信息化的管理模式中来。
    由于我国经济发展水平正在飞速发展,酒店这个行业作为服务行业中的重要 组成部分,己经越来越显示出其强劲的发展势头。随着我国酒店的不断增多,酒 店这一行业竞争也越来越激烈,因此需要开辟一个新的管理方式。我国酒店业利 用计算机管理系统来加强管理、提高服务水平,虽然至今已有多年的历史,但由 于我国起步发展较晚,只是一些浅层次应用,大多数还停留于七拼八凑的 MIS 系 统水平,甚至还仅限于简单的电算化和信息发布阶段,与国际酒店业先进信息化 应用的差距非常明显。信息化程度不高导致企业决策失误、市场反应速度缓慢等, 己经成为制约我国酒店业进一步发展的重要瓶颈。
    鉴于目前酒店管理的现状,结合信息管理系统的发展,该 JSP 酒店管理系统 充分运用 MIS 的总体思想,综合应用了 MYSQL、JSP 等技术开发,具有很好的管 理功能,真正完好地达到服务于用户的计划。
    1.2 研究现状根据最新调查得知,在此之前对酒店信息的管理通常是基于文本,表格等纸 介的手工处理,酒店客户信息情况的统计和核实等通常采用人工检查与核实,以 及对客房信息的管理等通过人工计算或手抄等方式进行,信息量大,但在数据处 理方面存在工作量大且易出错,其次还存在数据繁多与数据丢失等现象出现,而 且还不方便查找,在总体上存在缺乏系统与规范的信息管理系统现象,为了提高 工作效率我们急需开发出这套 JSP 酒店管理系统。
    随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信 息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,使用计算机来管理酒店信息成为必然。开发合适的酒店管理系统, 可以方便酒店管理者对客房、预订以及会员等信息的管理,提高酒店管理的工作 效率及查询效率,有利于更好的了解客户、管理客户。
    1.3 研究意义JSP 酒店管理系统是酒店业务流程的重组整合用户信息资源,以更有效的方 法来管理酒店业务,从而降低运营成本,为客户提供更经济、快捷、周到的服务, 保持和吸引更多的客户,以求最终达到酒店利润最大化的目的。
    JSP 酒店管理系统与传统方式管理方式比较有很多的优点如:

    查询比较方便:JSP 酒店管理系统提供了非常多的查询途径,可以通过各种途径进行查询, 快速又准确
    信息量大:与过去的管理方式比较,JSP 酒店管理系统能够提供方便的酒店信息
    成本比较低,风险小,不受地点的限制:JSP 酒店管理系统最突出的优势是,管理员通过本系统可快速进行酒店相关 信息的管理,这样就使管理者直观的了解酒店相关信息,大大节省了手工翻阅的 时间。同时为用户提供了一个便利的查询预订的途径,更好的为客户服务

    2 系统相关技术介绍2.1 开发工具本系统的设计主要运用了 MyEclipse 和 Tomcat 后台服务器技术,设计时中 采用了 JSP 技术完成了页面设计过程,接下来我们主要对 MyEclipse 和 Tomcat 进行说明。
    2.1.1 MyEclipseMyEclipse,通常用来设计 Java, J2EE 的 Eclipse 插件集合,利用它可以 完成对数据库和 J2EE 的开发。通过对应用程序服务器进行整合,可以大大的增 强运算速度。MyEclipse 的功能十分强大,几乎涵盖了各种设计功能。
    2.1.2 TomcatTomcat 是一种是一个免费的开放源代码的 Web 应用服务器。在访问客户比 较少的情况下被经常采纳,在设计 JSP 程序时成为最好的选择。换句话说,将 Tomcat 服务器安装到一台电脑上时,可通过它对 HTML 页面的访问请求进行配合。 事实上,Tomcat 可以看成 Apache 服务器基础上的延伸,但它工作时相对比较独 立,因此当 tomcat 工作时,事实上它是看成一个与 Apache 服务器相对独立的 进程运行的。
    2.2 JSP 技术JSP 程序使用了 Java 编程语言,JSP 技术可以对动态网页进行封装。通过 tags 和 script,网页还能访问存在于服务端的资源的应用逻辑。JSP 可以分离网页逻 辑与网页设计和显示,对可重用的基于组件的开发进行支撑,更容易的对基于 Web 的应用程序进行设计。
    当 Web 服务器接收到访问 JSP 网页的请求时,首先运行的程序段,接下来将 JSP 文件中的 HTML 代码和运行效果一并返还给用户。通过 Java 文件的插入能够 对数据库、网页多重定向等运行,从而满足构建动态网页所需要的程序。JSP 和 Servle 相同,都可以通过服务器端运行。由于能够将一个 HTML 文本返回给用户 端,所以用户端具备浏览器就可以进行浏览。HTML 程序和穿插在内部的 Java 程 序可以构建 JSP 网页。在服务器被用户端访问时,能够处理相应的 Java 代码, 然后将产生的 HTML 页面再返回给用户端的浏览器。JSP 的设计关键是 Servlet, 通常大型的 Web 应用程序的设计成果也通过 Java Servlet 和 JSP 的协作。JSP既拥有了方便快捷的 Java 程序,又统统的面向用户,既实现了平台的无关性危 险还比较小,可以具备互联网的全部优势。
    JSP 技术的优点:

    一次编写,到处运行。除了系统之外,代码无需做任何改动
    系统的多平台支持。通常情况下,能够在任何情况下的全部平台上进 行设计,能够安排在任何情况中,也能够在任何情况下进行发展。相比 ASP/.net 来说,优点是显而易见的
    强大的可塑性。通过一个不大的 Jar 程序能够对 Servlet/JSP 进行运 行,也能够通过很多服务器进行集群和负载平衡,甚至能够通过多台 Application 解决问题。单台服务器到多台服务器,Java 展现了一个强大的功能
    具有强大和多样化的开发工具支持。Java 已经有了很多的设计方法, 何况大部分工具都是没有花费的,这中间有很多都在多种平台之下顺畅的进展
    支持服务器端组件。只有很有力的服务器端组件才能支撑 web 运行,因 此开发者可以在调用 web 页面时通过另外的开发工具来达成纷乱效用的组件,来 加强系统的可操作性。JSP 可以通过完善的 JAVA BEANS 组件来达成纷乱的商务功能

    内部对象表现出:request 用户端请求,此请求会涵盖来自 GET/POST 请求 的参数; response 网页传回用户端的反应;管理 pageContext 网页的属性; session 与请求相关的会话;application servlet 正在进行的内容;out 用来 输送响应的输出流; config 代码片段配置对象;page JSP 网页本身。
    2.3 B/S 结构在三层体系结构的 B/S(Browser/Server,浏览器/服务器结构)系统中, 用户可以通过浏览器向分布在网络上的众多服务器发出请求。B/S 系统极大地简 化了客户机的工作量,客户机上只需要安装、配置少量的客户端运行软件即可, 服务器将担负大量的工作,对数据库的访问以及应用程序的执行都将由服务器来 完成。
    B/S 架构的不断成熟,主要使用 WWW 浏览器技术,结合多种浏览器脚本语言, 用通用浏览器需要实现原本复杂的专有软件来实现的强大功能,并节约了开发成 本,是一种新的软件架构。B/S 系统包括:表示逻辑层,控制逻辑层,数据展现 层,三层是相对独立又相互关联。
    2.4 MYSQL 数据库在软件项目中,通过使用数据库来操作数据,可以保证数据的独立性、一致 性和安全性,为系统提供有效地访问数据的方式,同时为程序员减少了应用程序 的开发时间。
    常见的数据库无非分为两类,一类是关系型数据库(Oracle,DB2,MySQL, SQL Server )和非关系型数据库(NoSql、MongeDB)。不同的数据库有各自的优缺 点,此处不做具体介绍。
    MySQL 支持多线程的特点,可以方便的利用系统资源,有效提高速度,而 且提供了 TCP/IP、ODBC 和 JDBC 等多种方式途径来连接数据库;虽说其功能 不够强大、规模也相对较小,但是对于本系统来说足够了,同时也可以进行二次 开发的数据库表结构空间的扩展。
    使用 MySQL 建立系统数据库,不仅有利于前期对数据的整合处理操作,同 时利于后期的二次开发的数据扩展操作,对于有限级的数据处理,MySQL 可以 很好的胜任。
    3 系统分析3.1 可行性分析对所有的系统来说,都有可能会受到时间和空间上的制约。所以,我们在设 计每一个项目的时候,必须对该系统实行可行性分析,这样不但能够降低项目的 危害,还能改降低人力、物力和财力的损耗。下面对技术、经济、操作和法律四 个方面进行介绍。
    3.1.1 技术可行性JSP 酒店管理系统的开发基于 B/S 模式,主要包括前端应用程序的开发以及 后台数据库的建立和维护两个方面。对于应用程序的开发要求具备功能要完备、 使用应简单等特点,而对于数据库的建立和维护则要求建立一个数据完整性强、 数据安全性好、数据稳定性高的库。
    在过去很长一段时间,网络软件的开发都采用客户端(Client)/服务器(Server)模式,即所谓的 C/S 模式。比如在 Java 中,可以通过 Socket 实现一 个客户端/服务器的架构。在这种模式下,主要业务逻辑都集中与客户端的程序, 因此,必然导致以下问题:

    系统的安装、运行、调试、维护和升级的困难
    在 JSP 酒店管理系统中,客户端分布在信息逻辑和用户界面之间,必然增 加了系统的安全隐患

    正是由于 C/S 架构的这些问题,人们逐渐接受了基于浏览器/服务器(Server) 结构的系统,即 B/S 模式。在 B/S 这个模式中,用通用的浏览器来取代之前的客 户端系统程序就是主要的核心。
    B/S 模式对 C/S 模式虽然只作了少许改动,但却带来了很大的优势:因为客 户端统称为浏览器,所以,应用程序在下载、升级、维护时,仅需要在服务器端 进行配置就可以了。所有的配置工作均集中在服务器端,大大的解决了了系统的 安全隐患。
    虽然 B/S 模式拥有很多优势,但是因为在客户端能够利用编程对象仅仅是浏 览器,因此,之前在 C/S 模式下很简单就能实现的一些客户端功能,在 B/S 模式 下,却变的很难实现甚至无法实现。
    虽然如此,B/S 模式仍然是当前许多应用系统的首要选择模式。
    对于计算机专业毕业的学生,对数据库比较熟悉,该系统运行 MYSQL 数据库, 掌握了 Java 编程语言,建立这样一个系统应该在能力范围之内。
    因此从技术方面讲开发此系统是可行的。
    3.1.2 经济可行性本系统采用的软件都是开源的,这样能够削减很多的精力和资源,降低开发 成本。同时也能够提升设计的作用,JSP 酒店管理系统对计算机配置的条件要求 很低,即使是网吧淘汰下来的计算机也能够满足需要,因此,本系统在经济上是 完全具有可行性的。
    3.1.3 操作可行性JSP 酒店管理系统是基于 B/S 模式,通过电脑进行访问和操作,且界面简单 易操作,用户只要平时使用过电脑都能进行访问和操作。本系统具有易操作、易 管理、交互性好的特点,在操作上是非常简单的。因此本系统可以进行开发。
    3.1.4 法律可行性此 JSP 酒店管理系统是自己设计的管理系统,具有很大的实际意义。开发环 境软件和使用的数据库都是开源代码,因此对这个系统进行开发与普通的系统软 件设计存在很大不同,没有侵权等问题,在法律上完全具有可行性。
    总而言之,设计一个 JSP 酒店管理系统具有效率高,操作简便,降低成本等 优点,所以,建立一个 JSP 酒店管理系统是非常必要的。
    3.2 用户需求分析JSP 酒店管理系统主要满足 2 种类型用户的需求,这 2 种类型用户分别为管理员和用户。用户间的静态结构图如图 3-1 所示:

    3.3 性能需求分析为了保证JSP酒店管理系统能够长期、稳定、高效的运行,必须要保证系统 开发的性能。在JSP酒店管理系统的开发过程中,必须用充分的方法确保系统的 安全性和有效性。我们要充分考虑以下几点:

    安全性:在信息化的时代,信息就是宝贵的财富,保证信息的安全,特别是 个人信息更要求可靠的安全性
    先进性:结合当前流行趋势,开发要符合用户的需求,能够快速准确的实现 酒店信息管理相关功能
    可扩展性:JSP酒店管理系统给酒店信息管理带来了极大的便利,提高了管 理效率,备受管理人员的关注,因此在开发JSP酒店管理系统的过程中,我们要 考虑到系统的可扩展性,便于将来系统的升级、更新
    有效性:有效性主要包括功能有效性,设计JSP酒店管理系统的功能一定要 最大限度地满足用户的需求

    3.4 系统流程分析3.4.1 操作流程为了保证系统的安全性,要使用本系统必须先登陆到系统中,管理员和用户 通过不同的账号和密码,登录到不同的管理界面。其登录流程图如图3-2所示。

    3.4.2 注册流程用户在注册账号的时候,首先进入注册界面,填写用户信息进行注册。用户 注册流程图如图3-3所示。

    3.5 系统用例分析3.5.1 管理员用例系统中的核心用户是系统管理员,管理员登录后主要功能有系统用户管理, 注册用户管理,酒店楼层管理,酒店类型管理,酒店客房管理,客房信息管理, 酒店活动管理,留言管理和系统管理。管理员用户的用例如图3-4所示。

    3.5.2 用户用例用户可以查看网站信息,包括首页,酒店活动,地理位置,客房信息,在线 留言,注册登录,登录后进入个人中心,包括个人资料管理,我的预订管理,入 住记录管理和退房记录管理,用户用例图如图3-5所示。

    4 系统设计4.1 系统结构设计JSP 酒店管理系统的设计与实现主要分为用户和管理员 2 个用户角色,系统 结构图 4-1 所示:

    4.2 系统功能模块设计4.2.1 功能概述JSP酒店管理系统分为三个用户角色,分别是管理员,员工和用户,其具体 功能如下:

    管理员功能模块: 管理员登录后主要功能有系统用户管理,注册用户管理,酒店楼层管理,酒店类型管理,酒店客房管理,客房信息管理,酒店活动管理留言管理和系统管理
    用户功能模块: 用户可以查看网站信息,包括首页,酒店活动,地理位置,客房信息,在线留言,注册登录,登录后进入个人中心,包括个人资料管理,我的预订管理,入 住记录管理和退房记录管理

    4.2.2 系统功能结构通过上述分析,得出本JSP酒店管理系统功能模块图如图4-2所示:

    4.3 系统顺序图顺序图表示交互、是指为得到一个期望的结果而在多个分类器角色之间进行的交互序列。
    4.3.1 登录模块顺序图
    4.3.2 添加信息模块顺序图
    4.4 数据库设计4.4.1 数据库设计原则在概念设计中,通常用四种方法: 自顶向下、自底向上、逐步扩张、混合策略,以它为骨架集成由自底向上策略中设计的各局部概念结构 在物理结构设计阶段首先分两步走:确定数据库的物理结构,在关系数据库中主要是指存取方法和存储结构。对 物理结构的评价是时间和空间效率。选取正确的关系模式存取方法,常用的有:存取索引方法、聚簇存取、HASH 存取方法等。
    4.4.2 数据库实体在此阶段,用户可以参与和评价数据库系统的设计,从而有利于保证数据库 系统的设计与用户的需求相吻合。在概念模式的设计中,E-R模型法是最常见的 设计方法。
    通过上述分析对数据库的需求,与系统概念模型的特点及开发方法相结合, 我们可以建立E-R模型图,本系统的E-R图如下图所示:
    管理员信息实体E-R图如图4-5所示:

    酒店客房信息实体E-R图如图4-6所示:

    客房预订信息实体E-R图如图4-7所示:

    留言板信息实体E-R图如图4-8所示:

    入住登记信息实体属性图如图4-9所示:

    退房信息实体属性图如图4-10所示:

    4.4.3 数据库表设计本酒店管理系统需要后台数据库,本系统采用MYSQL数据库进行数据的存储, 下面介绍数据库中的各个表的详细信息。
    allusers 管理员信息表



    列名
    数据类型
    长度
    是否主键
    注释




    ID
    int
    1,1

    编号


    username
    varchar
    50

    用户名


    pwd
    varchar
    50

    密码


    cx
    varchar
    50

    权限


    addtime
    datetime


    添加时间



    jiudiankefang 酒店客房信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50
    用户名
    房号


    louceng
    varchar
    50

    楼层


    leixing
    varchar
    50

    类型


    jiage
    varchar
    50

    价格


    yajin
    varchar
    50

    押金


    zhuangtai
    varchar
    50

    状态


    tupian
    varchar
    50

    图片


    beizhu
    varchar
    500

    备注


    addtime
    datetime


    添加时间



    kefangyuding 客房预订信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50

    房号


    louceng
    varchar
    50

    楼层


    leixing
    varchar
    50

    类型


    jiage
    varchar
    50

    价格


    yajin
    varchar
    50

    押金


    yudingriqi
    varchar
    50

    预定日期


    yudingshiduan
    varchar
    50

    预定时段


    tianshu
    varchar
    50

    天数


    yudingren
    varchar
    50

    预订人


    xingming
    varchar
    50

    姓名


    shenfenzheng
    varchar
    50

    身份证


    beizhu
    varchar
    500

    备注


    issh
    varchar
    2

    是否审核


    addtime
    datetime


    添加时间



    liuyanban 留言板信息表



    列名
    数据类型
    长度
    是否主键
    注释




    Id
    int
    1,1

    编号


    cheng
    varchar
    50

    昵称


    xingbie
    varchar
    2

    性别


    QQ
    varchar
    50

    QQ


    youxiang
    varchar
    50

    邮箱


    dianhua
    varchar
    50

    电话


    neirong
    varchar
    500

    留言内容


    addtime
    datetime


    留言时间


    huifuneirong
    varchar
    500

    回复内容



    ruzhudengji 入住登记信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50

    房号


    louceng
    varchar
    50

    楼层


    leixing
    varchar
    50

    类型


    jiage
    varchar
    50

    价格


    yajin
    varchar
    50

    押金


    xingming
    varchar
    50

    姓名


    shenfenzheng
    varchar
    300

    身份证


    ruzhuriqi
    varchar
    50

    入住日期


    lidianriqi
    varchar
    50

    离店日期



    tuifang 退房信息表



    列名
    数据类型
    长度
    是否主键
    注释




    id
    int
    1,1

    编号


    fanghao
    varchar
    50

    房号


    yajin
    varchar
    50

    押金


    xingming
    varchar
    50

    姓名


    shenfenzheng
    varchar
    50

    身份证


    jine
    varchar
    50

    金额


    feiyongjiesuan
    varchar
    50

    费用结算


    tuifangriqi
    varchar
    50

    退房日期


    tuifangren
    varchar
    50

    退房人


    beizhu
    varchar
    200

    备注


    issh
    varchar
    2

    是否审核


    addtime
    datetime


    添加时间



    5 系统的实现5.1 用户功能模块的实现5.1.1 系统主界面用户进入本系统可查看酒店活动、地理位置以及客房信息等,系统主界面如 下图5-1所示。

    5.1.2 用户登录界面用户要想实现酒店客房预订操作必须登录系统,用户登录界面展示如图5-2 所示。

    5.1.3 酒店客房信息界面用户可就如酒店客房信息界面查看客房详情信息,登录后并可进行预订和评 论操作,酒店客房信息界面展示如图5-3所示。

    5.1.4 客房预订界面用户在客房预订界面可输入预定日期、离店时间以及身份证等,客房预定界 面展示如图5-4所示。

    5.1.5 用户注册界面未有账号的用户可进入注册界面进行注册操作,用户注册界面展示如图5-5 所示。

    5.1.6 在线留言界面用户在在线留言界面可输入留言内容,进行留言操作,在线留言界面展示如 图5-6所示。

    5.1.7 我的预订管理界面用户登录后可进入我的预定管理界面查看个人预定信息,并可对其进行删除 操作,我的预定管理界面展示如图5-7所示。

    5.2 管理员功能模块的实现5.2.1 管理员登录界面管理员要想进入系统后台进行管理操作,必须登录系统,管理员登录界面展 示如图5-8所示。

    5.2.2 注册用户管理界面管理员登录后可查看注册用户信息,并可对其进行审核、修改和删除操作, 注册用户管理界面展示如图5-9所示。

    5.2.3 酒店楼层管理界面管理员可添加、修改和删除酒店楼层信息,酒店楼层管理界面展示如图5-10 所示。

    5.2.3 酒店客房管理界面管理员可添加、修改和删除酒店客房信息,酒店客房管理界面展示如图5-11 所示。

    5.2.5 预订信息查询界面管理员可查看用户客房预订信息,并可对其进行审核和添加预订入住操作, 预订信息查询界面展示如图5-12所示。添加预订入住界面展示如图5-13所示。
    预订信息查询界面

    添加预订入住信息界面

    6 系统测试6.1 系统测试目的与意义系统测试是开发一个管理信息周期中非常重要而且漫长的的阶段。其重要性 体现在他是保证系统质量与可靠性的重要关口,是对整个系统开发过程的最终审 查。
    系统测试的主要任务是尽可能的检查出程序中的错误,提高系统的可靠性, 主要的目的是位列检验系统“做得如何”。其中这一阶段又可以分为三个步骤: 模块测试;组装测试;确认测试;通过测试整个管理系统来确定能不能够满足用 户的需求。通过测试发现问题以后,我们要经过不断的调试找出错误具体原因和 位置,然后对其进行修改。
    6.2 测试方法在我们设计软件的过程中,测试系统常用的测试方法主要有两种:功能测试 和结构测试。
    功能测试也被叫做黑盒测试和数据驱动测试,是在已经知道系统应该具有的 具体功能的情况下,通过黑盒测试来测试系统功能是不是能够正常运行。在测试 时,将系统当做不能打开的盒子,在不管系统内部结构与特性的状况下进行测试, 它只检查系统功能是不是根据系统说明书的规定正常运行的,同时检测系统是否 能正确接收的输入信息和输出信息的正确对应,并保持系统的完整性的外部信息 需求。
    白盒测试与黑盒测试相反,它了解系统内部工作的各项具体程序,能够通过 测试来检查系统内部的运行是不是按照系统说明书的规定进行正常运作的,因 此,白盒测试又被叫做结构测试和逻辑驱动测试。根据测试程序的结构在每个道 路试验,当系统运行时不是能按预定要求正确运行,无论其功能如,白盒测试试 验,道路试验是一个逻辑驱动器,这种测试主要用来软件测验。
    软件测试工作必须要通过制定测试计划、设计测试、实施测试、执行测试、 评估测试五个阶段完成。设计测试的目的是确定、描述和生成测试过程和测试用 例。实施测试的目的是实施设计测试中定义的测试过程。测试的目的是实施和测 试过程定义的设计实现。测试的目的是确保由运行意图建立系统的实现。
    6.3 其他错误在程序设计实现的过程中不可避免的会产生各种难以预料的错误,如书写错 误、传值类型不一致、参数传递问题等等。这些都需要通过细心的检测与不断的 调试才能够排除。比如在servlet路径配置时因粗心错误导致运行导致所报错误, 如图6-1所示:

    6.4 测试结果经过对上述的测试结果分析,本酒店管理系统满足用户的要求和需求。所有 基本功能齐全,操作简单,系统运行性能良好,是一个值得推广的酒店管理系统。
    7 系统评价7.1 系统的特点和优点本系统设计时借鉴了国内外优秀网站的优点,从界面到系统设计都保证了管 理员、员工以及用户能够方便操作。系统的主要特点和优点归纳如下:

    本系统用的移置性和针对性都比较高,因为针对性高可以提供更好的 服务而移置性可以在多个系统上运行,更给客户带来了极大的方便
    该酒店管理系统内容全面,管理方便可以及时的全面的处理各种错误, 异常,这样避免了很多因客户的马虎操作而出现的失误,其操作方便,用户界面 友好,能够上网的人都可以很好的进行操作

    7.2 系统存在的不足和改进方案本系统应为时间仓促造成了很多的不足,下面我来一一的进行陈述并在日后 得到更好的改进方案:
    首先界面并不够美观,不能更好的吸引用户,所以在今后的日子里我会对其 视觉上的不足作出修改,其次系统的代码和数据库出现了非常多的冗余现象,都 是因为对编程技术的应用不够熟练,在日后我会加强自己的自身学习和能力,减 少这样的冗余现象。
    6  留言 2020-08-26 10:31:16
  • 基于Java Web和Mysql的汽车租赁系统设计与实现

    摘 要今天,现如今的中国的经济正处于稳定的上升阶段,现在每个家庭基本上都有一部汽车作为代步工具,根据中汽协11月份发表的10月份汽车产销数据可知,中国车市已经连续四个月下滑,这意味着中国的家庭对于汽车这个商品的购买欲望已暂时趋于缓和,这个时候从一个渐趋于饱和的市场去开拓市场,事倍功半。
    这个汽车租赁管理系统针对手中有可出租车辆资源的客户或公司设计,主要实现了用户的注册、登录功能,租赁人在实体店选好车型后,可在该系统的租赁界面,填写订单,实现了添加订单功能,编辑订单,删除订单的操作。这个项目是基于JavaWeb开发的一个汽车租赁系统,使用了eclipse,MySQL,Tomact8.0,xampp,Navicat for MySQL工具进行项目开发及功能测试。
    这个产品的想法,出自于每天日常的出行,尤其是走入社会后,住房可能与公司的上班地点相间太远,又或者周六日和朋友短途出去游玩,拥有一辆汽车就很有必要性了,刚进入社会的大部分人,都是没有经济能力去支付购买一辆车的费用,更何况提车后的油费,保养费,停车费等等,而共享汽车刚好可以弥补这一块空白期。
    关键词:汽车;租赁;互联网
    1 绪论1.1 系统开发背景与意义今天,现如今的中国的经济正处于稳定的上升阶段,现在每个家庭基本上都有一部汽车作为代步工具,根据中汽协11月份发表的10月份汽车产销数据可知,中国车市已经连续四个月下滑,这意味着中国的家庭对于汽车这个商品的购买欲望已暂时趋于缓和,这个时候从一个渐趋于饱和的市场去开拓市场,事倍功半。
    这个汽车租赁管理系统针对手中有可出租车辆资源的客户或公司设计,主要实现了用户的注册、登录功能,租赁人在实体店选好车型后,可在该系统的租赁界面,填写订单,实现了添加订单功能,编辑订单,删除订单的操作.
    这个项目是基于JavaWeb开发的一个汽车租赁系统,使用了eclipse,MySQL,Tomact8.0,xampp,Navicat for MySQL工具进行项目开发及功能测试.
    1.2 文章的研究内容
    HTML:整个项目的界面,是用户对这个系统的第一印象,界面需满足用户的基本审美要求,简单易懂
    功能源码:包括jsp、sevlet,dao类(实现功能代码)、对应数据库表单的实体类,封装好的一个打通数据库通道的类
    数据库(MySQL):储存整个项目所所长生的信息,比如用户登录账号的注册信息、租赁人的订单信息
    Tomact的版本运行

    这个项目实现了用户的通过浏览器,进行注册或登录项目的操作,用户登录成功后可以通过订单展示查看所有的历史订单,可以在订单展示页面进行编辑订单和删除订单的操作;鼠标左键单击添加订单按钮,会跳转进入添加订单页面,进行添加新的订单操作。
    开发环境:Eclipse、MySQL、Tomact8.0
    整个系统采用了jsp,servlet,session,jdbc等技术。
    1.3 文章的组织结构这个章节的内容:

    第一章大致对开发的这套程序做一个讲解,让大家了解这个系统开发的意义
    第二章主要讨论了项目与管理人员的需求以及实现项目功能的一些核心技术
    第三章详细介绍了系统的业务建设与设计。对系统的管理人员与及系统功能需求进行了讲解

    第四章主要对这个系统的实现进行了详细地解释,最后对所有工作进行说明总结

    2 系统需求分析与关键技术2.1 可行性分析2.1.1 经济可行性这个项目的开发,主要是为了管理员可以方便的对客户基本信息、车辆信息进行登记和储存,方便公司后期做数据分析。
    2.1.2 技术可行性这个产品的运行,需要一台装有Eclipse ,配置好java开发环境和Tmocat8.0服务器的电脑,测试环境是360极速浏览器的兼容模式,可以实现所有开发好的功能,界面简洁,功能很容易上手操作。
    2.1.3 运营可行性互联网时代,办公基本上离不开电脑,大数据的也是基于大量的网上的数据进行分析,所有的信息最后基本都汇总到了各个云服务器,此次开发的这个汽车租赁系统界面简洁明了,管理人员可以轻松的掌握所有功能,做这个项目时充分考虑了管理人员用电脑和手机的习惯,运营可行性高。
    2.2 功能分析2.2.1 登录注册功能这个功能主要是对管理员的信息进行收集,实行可以登录。

    注册:用户进入系统的起始页,有两个按钮,分别是登录和注册,点击注册按钮可以进入注册界面,进行登录人员的信息的收集,并且把信息注入数据库中,实现信息的收集
    登录:注册的人进入系统的起始页,分别在账号和password输入框内输入曾经注册过的信息,按下登录图标,即可进入产品的功能界面

    2.2.2 信息的增删改查功能管理员进入系统后可以操作增加订单,添加用户,修改订单信息,删除订单,查询指定租赁人的功能。

    添加用户:管理员可以在界面添加新的人员登录此系统,进行相关功能的操作
    添加订单:管理员订单左侧菜单栏中的添加订单,即可进图添加订单页,进行租赁客户的相关信息登记
    查询:管理员添加数据后,点击左侧的菜单栏中的订单展示,即可查看所有订单的信息,订单展示页上方添加了一个身份证号的查询框,实现了对数据库中的订单实施精准查询
    修改:订单展示页面的每条订单后面都有一个编辑按钮,这个图标可以对该条信息进行修改,单击图标,就能进入编辑页面,对该条订单进行edit和保存
    删除;订单展示页面的每条订单后面都有一个删除按钮,此按钮可以对该条订单实施删除操作,若改订单已完结,即可进行订单的删除


    2.2.3 分页功能分页功能主要面对显示客户信息更优化管理。基于显示客户信息的基础上考虑到客户的数量进行合理化的分页进行管理,每6条客户信息为一个页面,可以进行比较好的可视化管理。
    2.3 关键技术2.3.1 jQuery框架jQuery里面涵盖了html,css,js的基本元素,并且将这些我们使用频繁的元素进行了更好的优化,让程序员使用提供的比较舒服的体验,节省了许多的时间进行代码的书写。此项目中系统主页,与栏目的子页使用了此项技术。
    2.3.2 分页技术分页这个技术是使用mysql进行查询我所需要的数据,然后每个页面设置所能展示的数据条数,设置当前数据条数然后根据对数据的总数进行分页,可以点击页面数与上下页的链接进行页面之间的浏览。
    2.3.3 精准查询精准查询功能,因为身份证号码的唯一性,这个项目是根据订单表里面的身份证号来进行进准查询,管理员可以在订单展示界面,输入租赁人的身份证号,即可在大量数据中准确的找到该订单的详细信息。
    3 业务建模与设计3.1 系统的整体设计先要把这个程序的大概想出来,下面就是对系统代码的解说图3-1进行设计:

    文件夹介绍
    src文件夹下有bean包有Lease实体类(订单)和User实体类(登录用户);dao包下有两个的LeaseDao类和UserDao类,实现用户注册登录,订单的增删改查功能接口的方法; servlet包下有servlet接口及实现类, util包有打通数据库的Dbutil类。
    WebCt文件夹

    WebCt文件夹有系统需要用到的的jsp页面
    css文件夹涵盖项目网页需要用的的样式
    img文件夹涵盖项目网页需要用的图片
    js文件夹包含网页的动态代码
    META-INF文件夹:这个包用来配置控制程序的正常运行,使得功能可以运转。文件中的manifest.mf文件,是用jar打包时自动产生的
    WEB-INF文件夹:有一个web.xml配置文件

    3.2 业务用例建模3.2.1 角色分析此系统中有管理员一个角色,管理员可以可添加新的订单,对历史订单进行编辑,删除操作,可以使用身份证精准查询出租赁人的订单。
    3.2.2 用例分析如下是程序的关系,就是更好能看清系统的功能,这图为3-2(管理模块):

    从上面的用例图可以知道,这系统只有一个角色,就是管路员,管路员登录系统,能查询单子的信息,生成一个单子,把他给摧毁,edit某个单子的信息。
    3.3 业务流程建模由流程图图3-3 说明管理人员先进入网站,进行系统登入,如果没有注册信息就先注册信息再进入系统,进入系统后可以进行添加订单信息,编辑订单信息,删除订单信息,查询订单信息,退出系统等一系列操作。

    3.4 系统数据库的设计下面进行数据库的打样。要完成客户需求构建出E-R图。然后根据E-R图设计表单。
    3.4.1 E-R图设计订单信息的实体的E-R图,如图3-4所示:

    用户信息的实体的E-R图,如图3-5所示:

    3.4.2 物理表设计管理人员注册表
    (注:id是自增长的不需要输入,用户注册需要输入账号,密码,输入邮箱)

    客户信息表

    上面有两个数据库的表格,分别是客户信息表,用户信息表。
    客户信息表的成员有:id(主键,自增长的,标识为一,是实现删除功能,编辑功能的重要参数),Name(是租赁客户的名字),Phone(是客户的手机号码),IDcard(是客户的身份证号码,这个参数是用来辅助完成精准查询的重要参数),Cartype(是客户选择租赁的车型),Create date(是该笔订单生成的时间,用于订单列表展示,默认按创建日期降序排列)。
    4 系统的实现与应用4.1 登录注册功能模块4.1.1 登录注册功能第一次使用这款产品,需要先注册一个账号,方可进入项目进行后续操作。
    注册展示图

    登录展示图

    MySQL数据库管理人员注册表

    注册页面的前端代码

    登录的前端代码

    注册页面的dao层代码(DAO)

    注册的Servlet层

    登陆的dao层代码

    4.2 系统的管理功能模块4.2.1 添加订单信息管理人员进入系统添加客户信息

    MySQL数据库订单信息表

    添加订单的DAO层功能代码

    添加订单的Servlet层

    4.2.2 修改订单信息管理人员点击显示管理信息后点击操作下的编辑按钮跳转到如图:


    修改订单的DAO层功能代码

    修改订单的servlet代码,抓取要修改的订单数据,传入修改界面

    抓取修改后要保存的订单信息,保存到数据库

    4.2.3 删除订单信息管理员点击展示管理信息后操作栏目下有产出的按钮如图:

    删除功能的DAO层代码

    4.3 分页功能模块管理人员面对大量的数据需要进行合理的分页来管理,查看这些数据如图:


    分页功能Dao层代码

    分页功能servlet代码

    分页功能的JSP代码


    4.4 精准查询管理员可以根据订单租赁人的身份证号实施精准查询:


    精准查询的DAO层代码

    精准查询的servlet代码

    精准查询的JSP代码

    精准查询的dao层代码


    5 结论这三个月的独立开发周期,让自己成长了很多,对于Java面对象编程理解的更加深刻,像jsp如何把值传到后台,后台如何接受前端传过来的值,以前总是模棱两可,现在对这些小知识点掌握的程度更深,整个项目做下来,虽然功能都是一些简单的功能,但是真的实实在在的感受到了Java基础加强了一遍理解,也更有信心去投新的简历。
    12  留言 2020-08-24 12:30:42
  • 基于JSP和Mysql的停车管理系统的设计与实现

    摘 要社会的高速发展,我们能够发现城市的汽车越来越多,同时城市的交通压力也增大了。城市中车辆的集中管理被人们提出车辆进出的秩序、车辆存放的安全性、车辆存放管理的有偿性等要求。源于此,停车场管理系统产品应运而生,同时该系统在现代停车场管理中发挥着十分重要的作用。
    智能停车管理系统通常被称为停车场管理系统或智能停车场,也被大部分的行业内人士称为“停车场”。停车场管理系统运用了现代机械电子和通讯科学技术,同时也集控制硬件、软件于一体。伴随着科技的高速发展,停车场管理系统也一同高速发展着。
    停车管理系统意在解决城市停车管理难、运营商收益难、车主停车难等问题,同时为城市交通管理者打造城市级静态交通管理平台。包括停车场、共享停车、立体车库和路侧停车等停车场景。
    文章选择大型城市的停车场作为研究背景,设计实现适用于市区停车场的管理系统,为城市车辆管理发展提供技术支持。
    文章研究了停车用户与停车场业务运作过程中对于信息化管理的实际需求,明确了信息化建设所能够给停车管理带来的效益。深入研究了停车管理总体业务运作过程,明确了停车管理业务运作所包括的具体环节。分析了停车管理系统需要具备的功能特性,从实际业务处理需求角度出发构造了系统功能需求分析文档。研究了各项功能中主要业务的运作流程,通过业务流程图、数据流图构造了业务运作分析模型。分析了不同类型使用者对于物流快递系统的功能用例要求,形成了参与者功能用例分析模型。
    采用J2EE技术进行系统开发,运用Struts搭建了系统开发平台,设计了软件层次结构划分模型。详细设计了满足应用程序运行过程中对并发量要求很高的数据库结构模型,从中得到对应的数据字典同时创建数据库表结构模型。详细设计了停车管理系统各项功能实现的应用程序功能类和方法,完成了系统程序开发与界面设计。
    停车管理系统的设计与实现,为城市车辆管理提升业务运作能力提供了技术保障,提升了企业的信息化水平。
    关键词:管理系统;J2EE;Mysql
    1 绪论本段主要陈述了停车管理系统的设计与实现的意义、背景,从实际出发分析现状,从而提出了本文要研究的内容及目标。
    1.1 设计背景自我国改革开放以来的四十年间,我国科学发展的水平和经济建设的速度在不断的提高,人们的生活水平同时也得到了提高。相比十多年前,现在很多的家庭都有了私家车,私家车的大量普及也带来了许许多多、各式各样的问题,其中最主要的一个问题是停车难。
    现在,“停车经济”这一个新兴的产业已经开始。许多人看中了这个潜力巨大的商机,为了这块从汽车行业衍生出的经济价值产业链上诱人的蛋糕。据调查,在深圳市中心有个停车场,只是一个不引人注目的普通停车场,在一众经营者们合理的经营和有序的管理下,白天时间段车位基本不空,晚上又可以与周边的社区错峰停车,给这个停车场带来每年超过500多万的收入。而且其他的业内人士反应,目前,在有些停车场除了有停车收费这个收入项目以外还有对停车位进行买卖,一个停车位,10万左右的价格。可以说现在经营一个停车场,就是在养一只“下金蛋的鸭”
    在这些引述中,一个高效率的、便捷的停车管理系统,无论是对于停车场管理人员,还是对于停车用户,都可以提供许多便捷的,尤其是对于停车场来说,一个智能的停车管理系统可以帮助停车场节约很多的人力成本,并提供一个更好、更高效的管理环境。基于这样的想法,设计和实现一个方便、快捷高效率的停车管理系统就显得非常必要。和传统的人工纸张记录相比,使用本系统可以更加便捷,高效的管理停车场里的车辆和车位,而停车用户也可以提升出行效率。
    1.2 设计意义设计这个停车管理系统就是为了能改变当下这种使用传统人工记录方式的停车管理,从而能够优化效率,在此基础上,尽力做到以最大限度节约人力和物力。根据我们对于停车场管理人员的调查,我发现对于当前使用的停车管理系统最大的问题是系统过于复杂。根据我调查到的情况和现在的实际信息,本项目着重构建一个以高效率和便捷操作为核心要素的系统。
    该系统为停车场管理人员提供了对停车场中车辆,车位和财务的管理。操作员可以灵活地使用相关权限开展工作。在车位管理,车辆的停放和驶离、缴费,停车场收入汇总等工作全部交给系统来完成,以此来实现高效率的管理,这样可以减轻工作量,让他们可以参与到其他的工作中去,也或许可以节省一笔人力的费用支出。这就是研发本系统的意义。
    1.3 设计思路在Web层使用Struts的技术;Service层使用了Spring,当前Service层的主流框架;Dao层使用了Spring data jpa,它底层调用了Jpa的技术,简化了整个项目的开发。
    2 需求分析现在家庭持有车辆高速增长。人均车辆保有量也是增长明显,这种情况在中国各个城市发生着,但是城市停车位却无法满足这些车辆的需求,同时停车用户寻找停车场也很困难。所以高效便捷安全的停车管理系统是有着很大的市场需求。目前发达国家已经有较多类似案例,并且应用效果很不错。所以停车管理系统具有开发价值,应当进行研发。
    2.1 需求描述停车管理系统的功能模块如下图。

    系统中主要有两种角色:管理员和普通用户。

    管理员

    用户管理:查看停车用户状态并提供更改用户信息停车场管理:对多个停车打开关闭状态的管理以及信息的更改设备管理:查看停车场内对应设备的状态
    停车用户

    查看附件停车场状态并选择停车场进行预订

    2.2 用例建模系统管理员在登录验证后,对停车场、停车用户以及设备的管理。

    用户在登录验证后,选择停车场进行停车预定。

    2.3 用例描述
    管理用户模块用例描述

    用例编号:CASE01用例名称:用户管理用例描述:系统管理员对用户的信息进行CRUD操作前置条件:系统管理员登录验证成功后置条件:系统管理员在系统中新增了用户或修改了用户信息或删除了系统中已经存在的用户或查看某个用户的信息活动步骤
    系统管理员登录系统系统以分页模式显示用户列表系统管理点击【添加用户】按钮,弹出新建用户界面,系统管理员可以输入新的用户信息,点击【添加】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的用户列表系统管理员在用户列表中选择某个用户,点击【修改】,弹出用户修改界面,显示用户的当前信息,管理员更改用户信息,点击【提交】,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的用户列表系统管理员在用户列表中选择某个用户,点击【删除】,弹出删除提示框,当系统管理员确定删除后,系统将当前用户信息删除,并返回到用户列表,显示删除后的用户列表
    扩展点:如果管理员没有用户管理权限,则提示“没有权限”数据格式:用户信息(用户ID、用户名,密码,性别,注册日期,管理)
    停车场管理用例描述

    用例编号:CASE02用例名称:停车场管理用例描述:系统管理员对停车场的信息进行CRUD操作前置条件:系统管理员登录验证成功后置条件:系统管理员在系统中新增了停车场或修改了停车场信息或删除了系统中已经存在的停车场或查看某个停车场的信息活动步骤
    系统管理员登录系统系统以分页模式显示停车场列表系统管理点击【添加停车场】按钮,弹出新建停车场界面,系统管理员可以输入新的停车场信息,点击【添加】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的停车场列表系统管理员在停车场列表中选择某个停车场,点击【修改】,弹出停车场修改界面,显示停车场的当前信息,管理员更改停车场信息,点击【提交】,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的停车场列表系统管理员在停车场列表中选择某个停车场,点击【删除】,弹出删除提示框,当系统管理员确定删除后,系统将当前停车场信息删除,并返回到停车场列表,显示删除后的停车场列表
    扩展点:如果管理员没有停车场管理权限,则提示“没有权限”数据格式:停车场信息(停车场ID、停车场名称,停车场状态,停车位数量,管理)
    设备管理用例描述

    用例编号:CASE03用例名称:设备管理用例描述:系统管理员对设备的信息进行CRUD操作前置条件:系统管理员登录验证成功后置条件:系统管理员在系统中新增了设备或修改了设备信息或删除了系统中已经存在的设备或查看某个设备的信息活动步骤
    系统管理员登录系统系统以分页模式显示设备列表系统管理点击【添加设备】按钮,弹出新建设备界面,系统管理员可以输入新的设备信息,点击【添加】按钮,系统对输入的信息进行验证,将合法的信息保存,然后显示新增后的设备列表系统管理员在设备列表中选择某个设备,点击【修改】,弹出设备修改界面,显示设备的当前信息,管理员更改设备信息,点击【提交】,系统对输入的信息进行验证,将合法的信息保存,然后显示修改后的设备列表系统管理员在设备列表中选择某个设备,点击【删除】,弹出删除提示框,当系统管理员确定删除后,系统将当前设备信息删除,并返回到设备列表,显示删除后的设备列表
    扩展点:如果管理员没有设备管理权限,则提示“没有权限”数据格式:设备信息(设备ID、设备名称,设备状态,设备所属停车场id,管理)

    3 系统设计停车管理系统中有权限管理,停车场管理,订单管理,实现对市内停车场资源的合理分配和管理。
    3.1 数据库设计停车管理系统中有系统管理员以及用户这两个身份,需要分别创建两个表;然后市内停车场内有许多的车位以及设备需要进行管理,故而创建了停车场,停车位以及设备的表;最后,用户对停车位的预订生成了订单需要创建订单的表来保存订单信息。
    3.1.1 概念模型
    3.1.2 逻辑模型
    3.1.3 物理模型
    3.1.4 数据库脚本/*SQLyog Ultimate v11.27 (32 bit)MySQL - 5.6.33 : Database - park**********************************************************************//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;CREATE DATABASE /*!32312 IF NOT EXISTS*/`park` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `park`;/*Table structure for table `admin_info` */DROP TABLE IF EXISTS `admin_info`;CREATE TABLE `admin_info` ( `a_id` int(10) NOT NULL AUTO_INCREMENT, `a_name` varchar(50) DEFAULT NULL, `a_pwd` varchar(50) DEFAULT NULL, `register_date` date DEFAULT NULL, PRIMARY KEY (`a_id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;/*Data for the table `admin_info` */insert into `admin_info`(`a_id`,`a_name`,`a_pwd`,`register_date`) values (1,'root','root','2018-07-07'),(2,'rooo','rooo','2018-07-07');/*Table structure for table `facility` */DROP TABLE IF EXISTS `facility`;CREATE TABLE `facility` ( `f_id` int(10) NOT NULL AUTO_INCREMENT, `f_name` varchar(50) DEFAULT NULL, `f_state` tinyint(1) DEFAULT '1' COMMENT '设备是否启用', `pl_id` int(10) DEFAULT NULL COMMENT '停车场id', PRIMARY KEY (`f_id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;/*Data for the table `facility` */insert into `facility`(`f_id`,`f_name`,`f_state`,`pl_id`) values (1,'监控',1,1),(2,'灯光',1,1),(3,'监控',1,2),(4,'灯光',1,2),(5,'监控',1,3),(6,'灯光',1,3),(7,'临时1',1,NULL),(8,'临时2',1,NULL),(9,'临时3',0,0);/*Table structure for table `orders` */DROP TABLE IF EXISTS `orders`;CREATE TABLE `orders` ( `o_id` int(10) NOT NULL AUTO_INCREMENT, `o_stime` datetime DEFAULT NULL COMMENT '开始时间', `o_time` time DEFAULT '01:00:00' COMMENT '预约停车时长', `o_etime` datetime DEFAULT NULL COMMENT '结束时间', `o_money` int(10) DEFAULT '5' COMMENT '停车费用,每小时5元', `u_name` varchar(50) DEFAULT NULL, `p_id` int(10) DEFAULT NULL, `pl_id` int(10) DEFAULT NULL, PRIMARY KEY (`o_id`)) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;/*Data for the table `orders` */insert into `orders`(`o_id`,`o_stime`,`o_time`,`o_etime`,`o_money`,`u_name`,`p_id`,`pl_id`) values (3,'2018-07-10 19:33:13','00:00:01','2018-07-10 20:33:13',5,NULL,NULL,NULL),(4,'2018-07-10 19:33:13','00:00:00','2018-07-10 19:33:13',5,'1',1,2),(5,'2018-07-10 19:33:13','00:00:00','2018-07-10 19:33:13',10,'1',1,3),(6,'2018-07-10 19:33:13','00:00:01','2018-07-10 19:33:13',10,'1',1,4),(7,'2018-07-10 19:33:13','01:00:00','2018-07-10 19:33:13',10,'1',1,5),(8,'2018-07-10 19:33:13','01:00:00','2018-07-10 19:33:13',10,'1',1,6),(9,'2018-07-10 19:33:13','01:00:00','2018-07-10 19:33:13',10,'1',1,7),(10,'2018-07-11 17:27:04','01:00:00','2018-07-11 18:27:04',5,'5',1,8),(11,'2018-07-11 18:11:24','12:00:00','2018-07-12 06:11:24',60,'rock',1,1),(12,'2018-07-11 18:49:24','01:00:00','2018-07-11 19:49:24',5,'r',1,9),(13,'2018-07-11 18:49:24','01:00:00','2018-07-11 19:49:24',5,'r',1,10),(14,'2018-07-11 18:49:24','01:00:00','2018-07-11 19:49:24',5,'rrrrrr',2,11),(15,'2018-07-11 18:49:24','01:00:00','2018-07-11 19:49:24',5,'rrrrrr',2,12),(16,'2018-07-11 18:49:24','01:00:00','2018-07-11 19:49:24',5,'asa',2,13),(17,'2018-07-11 18:49:24','01:00:00','2018-07-11 19:49:24',5,'asa111',2,14),(18,'2018-07-11 19:48:16','00:00:01','2018-07-11 21:48:16',5,'rockcc',2,15),(19,'2018-07-11 19:52:41','00:00:01','2018-07-11 20:52:41',5,'rock',3,16),(20,'2018-07-11 19:53:12','00:00:21','2018-07-12 16:53:12',105,'rock',3,17),(21,'2018-07-11 19:55:04','00:00:12','2018-07-12 07:55:04',60,'rock',3,18),(22,'2019-03-07 18:54:35','00:02:22','2019-03-17 00:54:35',1110,'11',1,1),(23,'2019-05-21 13:34:50','00:00:11','2019-05-22 00:34:50',55,'123',1,1),(24,'2019-05-21 13:34:50','00:00:11','2019-05-22 00:34:50',55,'123',1,1);/*Table structure for table `parklot` */DROP TABLE IF EXISTS `parklot`;CREATE TABLE `parklot` ( `pl_id` int(10) NOT NULL AUTO_INCREMENT, `pl_name` varchar(50) DEFAULT NULL, `pl_state` tinyint(1) DEFAULT '1' COMMENT '停车场状态', `pl_amount` int(5) DEFAULT '5' COMMENT '停车位数量', PRIMARY KEY (`pl_id`)) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;/*Data for the table `parklot` */insert into `parklot`(`pl_id`,`pl_name`,`pl_state`,`pl_amount`) values (1,'环线停车场',1,10),(2,'市中心停车场',1,5),(3,'度假村停车场',1,20),(20,'临时停车场',0,5),(21,'临时停车场2',1,5),(22,'临时停车场3',0,5),(23,'临时停车场4',1,5),(24,'临时停车场5',0,5),(25,'临时停车场10',1,5),(28,NULL,0,5);/*Table structure for table `parkspace` */DROP TABLE IF EXISTS `parkspace`;CREATE TABLE `parkspace` ( `p_id` int(10) NOT NULL AUTO_INCREMENT, `p_state` tinyint(1) DEFAULT '1' COMMENT '车位是否被占用', `u_id` int(10) DEFAULT NULL COMMENT '用户id', `pl_id` int(10) DEFAULT NULL COMMENT '停车场id', PRIMARY KEY (`p_id`)) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;/*Data for the table `parkspace` */insert into `parkspace`(`p_id`,`p_state`,`u_id`,`pl_id`) values (1,1,1,1),(2,0,2,1),(3,0,3,1),(4,0,4,1),(5,1,5,1),(6,1,6,1),(7,1,7,1),(8,1,8,1),(9,1,NULL,1),(10,1,NULL,1),(11,1,NULL,2),(12,0,NULL,2),(13,0,NULL,2),(14,1,NULL,2),(15,0,NULL,2),(16,1,NULL,3),(17,1,NULL,3),(18,1,NULL,3),(19,1,NULL,3),(20,1,NULL,3),(21,1,NULL,3),(22,1,NULL,3),(23,0,NULL,3),(24,0,NULL,3),(25,0,NULL,3),(26,0,NULL,3),(27,1,NULL,3),(28,0,NULL,3),(29,0,NULL,3),(30,1,NULL,3),(31,1,NULL,3),(32,1,NULL,3),(33,1,NULL,3),(34,1,NULL,3),(35,1,NULL,3);/*Table structure for table `users` */DROP TABLE IF EXISTS `users`;CREATE TABLE `users` ( `u_id` int(10) NOT NULL AUTO_INCREMENT, `u_name` varchar(50) DEFAULT NULL, `u_pwd` varchar(50) DEFAULT NULL, `u_gender` char(4) DEFAULT NULL COMMENT '性别', `u_rdate` date DEFAULT NULL COMMENT '注册日期', `pl_id` int(10) DEFAULT NULL COMMENT '停车场id', `p_id` int(10) DEFAULT NULL COMMENT '停车位id', PRIMARY KEY (`u_id`)) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;/*Data for the table `users` */insert into `users`(`u_id`,`u_name`,`u_pwd`,`u_gender`,`u_rdate`,`pl_id`,`p_id`) values (5,'yyy','222','女','2018-07-08',1,2),(6,'123','123','男','2018-07-08',1,3),(8,'qqq','a11','男','2018-07-11',1,4),(10,'eee','122','男','2018-07-11',1,5),(11,'rrr','q11','女','2018-07-11',1,6),(12,'ttt','111','男','2018-07-11',1,7),(13,'yyy','123','男','2018-07-11',NULL,NULL),(14,'uuu','111','男','2018-07-11',NULL,NULL),(15,'iii','111','男','2018-07-11',NULL,NULL),(16,'aaa','111','男','2018-07-11',NULL,NULL),(19,'zzz','123','男','2018-07-09',NULL,NULL),(21,'zyx','111222','女','2018-07-10',NULL,NULL),(23,'w1','w1','女','2018-07-10',NULL,NULL),(24,'123','22','男','2018-07-11',NULL,NULL),(25,'123','22','男','2018-07-11',NULL,NULL),(26,'123','22','女','2018-07-11',NULL,NULL),(27,'123','22',NULL,'2018-07-11',NULL,NULL),(28,'123','22','男','2018-07-11',NULL,NULL),(29,'r','q1','男','2018-07-11',NULL,NULL),(30,'','','','2019-03-07',NULL,NULL),(31,'','','','2019-03-07',NULL,NULL),(32,'','','','2019-03-07',NULL,NULL),(33,'','','','2019-03-07',NULL,NULL),(34,'11','11','11','2019-03-07',NULL,NULL),(35,'11','66','','2019-03-07',NULL,NULL),(36,'','','','2019-03-26',NULL,NULL),(37,'','','','2019-03-26',NULL,NULL),(38,'ls','123','?','2019-03-26',NULL,NULL),(39,'','','','2019-03-26',NULL,NULL),(40,'1111','1234','4','2019-03-26',NULL,NULL);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    3.2 系统架构设计在Web层使用Struts的技术;Service层使用了Spring,当前Service层的主流框架;Dao层使用了Spring data jpa,它底层调用了Jpa的技术,简化了整个项目的开发。

    系统架构图

    3.3 模块设计3.3.1系统管理员类图
    3.3.2 管理员操作流程
    3.3.3 用户类图
    3.3.4 用户操作流程
    4 产品实现4.1 管理员模块实现4.1.1 界面设计登录界面

    用户管理添加/修改界面

    停车场管理添加/修改界面

    设备管理添加/修改界面

    4.1.2 功能实现


    4.2 用户模块实现4.2.1 界面设计用户界面-停车场信息

    用户界面-停车位信息

    用户界面-订单填写

    用户界面-订单确认

    4.2.2 功能实现

    5 产品测试5.1 测试方法与策略我所采用的测试方法是白盒测试。这样的测试方法可以发现潜在的逻辑错误,但是这样子的错误一般在功能测试时是发现不了的。
    白盒测试法是说到底是一个穷举路径的测试方法。在测试中,我们需要检查出程序的完整内部构造,以检查程序的逻辑入手,最终得出测试的详细数据。但是在白盒测试中即使将每条路径都测试到了仍然可能会出现一些错误。首先,穷举路径决不能查出软件程序违反了设计规范的问题,即程序本身错误的程序。再者,穷举路径不能检查出软件程序中因为路径遗漏而出错的问题。最后,穷举路径发现不了一部分与数据相关的错误。
    此次测试一开始时并没有出现问题,但是到了后面的测试中发现数据库存储数据时发生了巨大的错误,数据没有存入到数据库中,我后来检査了许久才找到这个问题。这样的问题告诉我,在编程过程中有一个好的测试意识是多么的重要,测试的越早,可以在开发过程中发现问题,从而节省时间和成本。
    5.2 管理员模块测试
    用户信息,停车场信息输入:随机生成多组数据,进行添加,修改,删除等操作,测试是否能够正常录入
    用户信息,停车场信息查询:选择多组多种格式的信息并输入,通过系统性的信息查询,来查询结果是否和预期的数据统一,以此来确定数据的准确性
    用户信息,停车场信息的删除:通过对系统中信息的删除,然后进行信息查询,验证此次对信息的操作是否已经成功
    登录成功后没有显示当前管理员ID,后续发现是url传值错误

    5.3 用户模块测试
    订单信息输入:随机生成多组数据,进行添加,修改,删除等操作,测试是否能够正常录入
    订单信息查询:选择多组多种格式的信息并输入,通过系统性的信息查询,来查询结果是否和预期的数据统一,以此来确定数据的准确性
    订单信息的删除:通过对系统中信息的删除,然后进行信息查询,验证此次对信息的操作是否已经成功
    生成订单时没有关联到对应车位,并标记为以被预定状态,后续发现是表与表之间没有关联

    6 结论6.1 毕业设计成果特点我的这次毕设是一篇基于 java web技术的停车管理系统,研究了用MyEclipse集成工具来分析该停车管理系统。实现基于J2EE平台开发,基本实现了停车管理系统所设想的功能。这个系统采用了MVC的开发设计模式,这个设计模式将这个系统分成三个模块:视图、模型和控制器,让他们在系统中分担着不同的任务。
    6.2 设计成果的实用价值或应用前景这个系统是采用B/S架构,我最终将该系统部署在了阿里云服务器上,对于管理员以及用户而言,无需再下载应用,直接使用浏览器并使用对应权限的账户登录就可以使用该系统了。该系统很好的从软件层面解决了城市交通系统中停车一环的巨大压力,我相信后续如果能在硬件层面得到更好的支持的话,能够大大的改善城市交通压力。
    6.3 不足之处或遗留未予解决的问题在我的停车管理系统中预约停车、取车收费是整个系统的最重要的部分,我通过算法来实现收费。停车管理系统中还有很多的缺陷,我希望能在后续的使用中进行改进。根据后续停车管理系统在运行中出现的问题,在性能、功能方面做更多的完善。

    参考文献[1] 刘文利;国内停车场管理系统的现状与发展趋势;中国新技术新产品:2011年第1期
    [2] Gallardo,Raymond,The Java tutorial a short course on the basics16
    [3] Horstmann,Cay s..Core Java.fundamentals=Java核心技术,卷1:基础知识东南大学出版社:2016
    [4] 李刚;轻量级Java EE企业应用实战:Struts 2+Spring 4-Hibenate整合开发(第4版);电子工业出版社:2014.10
    [5] Ronald Bradford,Chris Schneide著;李雪锋,陈健鸿译:Effective MySQL之深入解析复制技术;清华大学出版社:2014
    [6] 程朝斌,张水波:MysQL数据库管理与开发实践教程;清华大学出版社:2016
    [7] 贾倍,镇明敏,杜磊:Java Web整合开发实战:基于Struts 2-Hibernate-Spring;清华大学出版社:2013
    1  留言 2020-08-24 12:10:08
  • 基于Java开发的图书管理系统

    摘要随着网络技术的发展、计算机应用水平的提高的扩大,原来系统的时效性、数据的正确性、操作的方便性上都存在不足,已影响到系统的正常使用。经过考察比较,决定利用自己的力量对图书管理系统重新设计,使系统能利用软件开发技术的成果,方便图书的管理。
    图书管理系统是典型的信息管理系统。系统介绍了图书系统的开发过程,设计中遇到的问题及解决方法以及提高当前应用程序或系统开发进度和改善工作性能。利用其提供的各种面向对象的开发工具,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。
    本次课程设计利用JAVA开发工具和SQL SERVER 2005数据库来开发这个图书管理系统。该系统要解决的图书管理所要解决的问题,可以满足图书管理基本要求,包括添加、删除等功能。该系统能根据用户的需求,快捷方便的为读者提供借阅服务。
    关键词:图书管理系统、信息管理、JAVA
    一、绪论随着社会信息量的与日俱增,作为信息存储的主要媒体之一图书,数量、规模比以往任何时候都大的多,不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。在计算机日益普及的今天,对个人而言若采用一套行之有效的图书管理系统来管理自己的书籍,会方便许多。
    对图书管理部门而言,以前单一的手工检索已不能满足人们的要求,为了便于图书资料的管理需要有效的图书管理软件。
    计算机网络近年来获得飞速的发展,十年前,很少有人接触过网络。如今,计算机网络已经成为我们社会结构的一个基本组成部分。网络已被应用到人类生活的各个方面,人们通过网络通信,共享资源,网上超市、电子银行等也应运而生,各种提供不同特色,不同内容的网站如雨后春笋般涌现。
    计算机网络的发展为人们打开了一种新的视野,促成了一个新领域新产业的产生。网络的发展试图用一种全新的概念冲击各个传统的商业模式,改变人们的生活方式。新的需求产生了,人们想通过网络进行个人通信、媒体传播、商业运作、办公、教学等。总之网络技术的发展促进了社会经济结构的变革。反之,社会经济对网络发展提出的新的需求又大大的促进了网络的发展,计算机网络及其所涉及的一系列技术成为计算机领域新的研究热点。
    在计算机日益普及的今天,对个人而言若采用一套行之有效的图书管理系统来管理自己的书籍,会方便许多。对图书管理部门而言,以前单一的手工检索已不能满足人们的要求,为了便于图书资料的管理需要有效的图书管理软件。
    而采用功能强大的数据库软件开发工具进行图书管理软件开发,具有很好的可移植性,可在应用范围较广的WINDOWS系列等操作系统上使用。除此以外,图书馆管理系统已成为方便了广大师生、学校与外界之间的沟通架起了一座桥梁。但是,这并不能满足目前师生的需要。比如一些特定的需要要,在管理方面特别不方便,因为它受到地域的限制太大。就目前情况而言,急需充分利用网络方式的图书管理。我们的网络图书馆管理系统就是为了解决这问题而设计的。
    只要管理员掌握用户名和密码,无论这个管理员在哪里,只要能上网冲浪,就能进行工作。而且,该系统对计算机的软硬件都要求并不高,使用性比较强。
    二、需求分析《图书管理系统》针对的用户是单个中小型图书室或者个人,藏书的种类和数量较少,读者的数量和来源受到一定的限制。相应的需求有:

    能够存储一定数量的图书信息,并方便有效的进行相应的书籍数据操作和管理,这主要包括:

    图书信息的录入、删除及修改图书信息的多关键字检索查询图书的出借、返还和资料统计
    能够对一定数量的读者进行相应的信息存储与管理,这其中包括:

    读者信息的登记、删除及修改读者资料的统计与查询
    能够提供一定的安全机制,提供数据信息授权访问,防止随意删改,同时提供信息备份的服务

    三、系统描述3.1 数据库设计图书管理系统的表单包括:图书信息表、学生信息表、管理员信息表、借阅信息表、图书类别信息表。
    图书信息表T-book



    字段英文名称
    列名
    数据类型
    字段约束
    可否为空




    Book_id
    图书编号
    varchar(15)
    主键



    Type_id
    类别编号
    varchar(10)
    外键



    Type_name
    类别名称
    varchar(20)
    外键



    Book_name
    书名
    varchar(20)




    Book_writer
    作者
    varchar(10)




    Book_company
    出版社
    varchar(20)




    Book_date
    出版日期
    datetime




    Book_brief
    简介
    varchar(100)





    学生信息表T-student



    字段英文名称
    列名
    数据类型
    字段约束
    可否为空




    Stu_id
    学号
    varchar(15)
    主键



    Stu_name
    姓名
    varchar(10)




    Stu_pwd
    密码
    varchar(20)




    Stu_sex
    性别
    varchar(2)




    Stu_tel
    联系电话
    varchar(15)




    Borrow_num
    借书数量
    number(2)
    默认为0



    Stu_Depart
    所在院系
    varchar(10)





    管理员信息表T-admin



    字段英文名称
    列名
    数据类型
    字段约束
    可否为空




    Admin_id
    工作号
    number(5)
    主键



    Admin_name
    姓名
    varchar(10)




    Admin_pwd
    密码
    varchar(20)





    借阅信息表T-borrow_student



    字段英文名称
    列名
    数据类型
    字段约束
    可否为空




    Book_id
    图书编号
    varchar(15)
    外主键



    Stu_id
    学生学号
    varchar(15)
    外主键



    Borrow_date
    借阅日期
    datetime




    Return_date
    还书日期
    datetime




    renew
    是否续借
    varchar(2)





    图书类别信息表T-book_type



    字段英文名称
    列名
    数据类型
    字段约束
    可否为空




    Type_id
    类别编号
    varchar(10)
    外主键



    Type_name
    类别名称
    varchar(20)
    外主键




    3.1.1 动态数据
    输入数据:

    鼠标对按钮的点击查询方式、查询关键字新建图书项、读者项图书项、读者项相应纪录更改借阅、返还、丢失注销时的书号、借阅证号
    输出数据:

    查询关键字确定的数据库记录的子集;信息录入、删改结果(成功或失败)图书借阅、返还、丢失注销等操作结果

    3.1.2 数据流图和数据词典《图书管理系统》的总体功能如下:

    图书的出借
    图书的返回
    图书的增删改;读者的增删改
    图书管理者查询统计图书和读者信息

    读者借书过程:

    读者还书过程

    读者查询浏览过程

    图书管理员查询浏览过程

    四、系统功能模块的设计与实现4.1软件结构设计主模块结构如图4-1所示:

    借书模块如图4-2所示:

    还书模块如图4-3所示:

    图书库操作模块如图4-4所示:

    读者库操作模块如图4-5所示:

    4.2 程序描述4.2.1 读者添加功能:

    建立与数据库连接
    查验输入的读者,性别。自动生成借书证号
    保存并断开与数据库的连接

    读者添加功能模块如图4-6所示:

    读者添加模块如图4-7所示:

    4.2.2 读者查询修改功能:

    查验输入的读者证号。运行查询
    获取该读者的相关信息
    修改、删除读者信息(姓名)


    4.2.3 图书添加功能:

    建立与数据库连接
    查验输入的图书信息。自动生成图书编号
    保存并断开与数据库的连接


    4.2.4 图书查询修改功能:

    查验输入的图书相关信息
    获取该图书的相关信息
    查询借阅
    分页显示


    4.2.5 借书模块功能:

    借书

    4.2.6 查询借阅还书模块功能:

    显示查询借阅页面
    查验输入的图书书号/图书证
    对合法输入登录还书信息
    显示相关信息(本次还书操作信息,尚未归还图书的相关信息,读者信息)


    4.2.7 续借模块功能:

    显示查询借阅页面
    查验输入的图书书号/图书证。核对合法输入续借信息
    显示相关信息(本次续借操作信息,尚未归还图书的相关信息,读者信息)


    4.2.8 图书查询模块功能:

    根据给定查询条件
    查询数据库
    获取图书信息


    总结管理信息系统(MIS)的概念已经用许许多多的方式定义过,因为任何MIS的组织模型似乎都不同,所以各MIS的定义随应用范围的不同而变化就不奇怪了。按照我们的思想,一个MIS可定义为这样一个基于计算机的数据处理过程的网络系统,它是一个机构为了支持决策及其它必需的管理功能提供及时有效的信息而开发的,并且可按需要把人工操作过程结合在一起。
    4  留言 2020-08-15 22:19:54
  • 基于Java的洗衣店管理系统

    摘 要随着科技的快速发展,人们的需求也是越来越多,为了方便对信息的管理我们小组就设计了一个洗衣店订单的管理系统。
    洗衣店管理系统是典型的的信息管理系统,创建了六个类,分别是:Test类;Person类;ordManager类;Ordering类;Clothes类;Cdata类:

    Test类:定义了数组,初始化了订单,并对菜单的操作,实现菜单的循环输出
    Person类:定义了name,telenumber并进行了封装
    Test类中Ordering类:继承父类Person,对订单的数据进行处理
    Clothes类:实现对衣服数据的处理
    ordManger类:实现创建订单,查看订单,删除订单等功能
    Cdata类:实现对数据的管理保存

    使用java来设计程序,并描述订单信息(顾客的姓名,电话,所洗衣物的类型及价格),掌握类和对象的定义和使用方法,继承,封装等方法,掌握面向对象的思想。
    关键字:继承;类;封装;面向对象
    一、开发背景随着社会的不断进步与发展,衣服的种类越来越多,衣服的清洗方式也就变得多种多样了,在我们的生活中,洗衣店也就变得常见,随着网络的高速发展,洗衣服必须上门预约就变得十分不人性化,有许多的缺点,也非常不方便。
    随着计算机技术的发展和互联网时代的到来与飞速发展,我们已经进入了信息时代,也有人称之为数字化时代,传统的洗衣店管理方法就逐渐的暴露了它的缺点。若使用计算机对洗衣店的管理,运营进行管理,就会变得方便而又高效,顾客可以在家里进行订单查询等,管理员也不需要记住大量顾客的信息与订单详情,所以,设计一个洗衣店管理系统会减少很多不必要的麻烦。
    二、需求分析本系统的主要目的就是实现顾客信息订单管理,使顾客清楚的查看自己的订单,使管理者减轻信息记忆的工作,提高工作效率,减少不必要的麻烦。
    三、模块说明在登录界面进入对应通道在增加模块创建订单,通过修改订单、删除订单、查找订单来改变订单的信息或者状态。
    3.1 用户登录模块
    功能描述:选择通道并查看菜单
    输入:选择项….员工通道需要输入密码
    输出:客户和员工进入专属通道各自的菜单

    3.2 增加模块
    功能描述:由工作管理员通过密码登录后创建新的客户订单信息
    输入:客户的名字,电话,洗的衣服的型号,洗的洗衣服的数量,但需要每种衣服创建一个订单
    输出:表达订单创建成功的意思

    3.3 修改模块
    功能描述:更改订单的状态,将未处理的订单标记为已处理的订单
    输入:菜单中选择修改选项并确认
    输出:更改成功

    3.4 删除模块
    功能描述:删除这个客户的历史已处理订单
    输入:在菜单中选择删除选项并确认删除
    输出:将所有订单删除成功

    3.5 查找模块
    功能描述:提供给客户以及工作人员进行数据的查找
    输入:菜单中选择查找,并输入正确的个人信息
    输出:对应的订单中的信息,如名字、电话……

    四、详细设计测试类作为主菜单来调用各个模块的功能。在订单管理类里面有创建订单的基本信息,如客户的姓名、电话、洗衣类型和洗衣数量;使用查找模块时可以查找订单的基本信息;使用修改模块时可以将订单的状态改变;使用删除模块时可以将标记状态的完订单全部删除。在订单类里面可以计算和统计订单内的信息。客户类包含了客户的基本信息的设置。在数据类中设置的数据是用于统计该用户的历史订单。在衣服类中包含了对衣服数据的设置。
    4.1 测试(Test)类
    类名:Test
    继承父类:无
    实现接口:无
    概述:定义一个Ordering []a=new Ordering[20]; 的对象数组,通过do…while();循环,switch()语句,调用类中的个方法,完成订单的增加,修改,删除,查找等功能
    属性及说明:定义一个Ordering []a=new Ordering[20];的对象数组,定义一个ordManager ord=new ordManager();然后定义一个Cdata []cd=new Cdata[20];的对象数组,定义一个Scanner input=new Scanner(System.in);并通过对象调用Ordering类、ordManager类、cdata类、Clothes类的相关方法来完成相对应的操作
    方法及说明:通过调用设置默认数据给对象数组初始化;通过调用ord.ceateOrd(a[i],cd);方法创建订单信息;通过调用ord.deleteOrd(a);方法删除所有订单;通过调用mer.Finsh(data);方法修改订单状态;通过调用ord.searchOrd(a,cd);方法查看订单

    4.2 订单管理(ordManager)类
    类名:ordManager
    继承父类:无
    实现接口:无
    概述:实现对订单的数据的处理
    属性及说明:设置String ctype;(衣服型号)int num ;(总量)String name;(用户名字)等多个属性;主要用这些属性代表用户的个人信息和对应的订单信息等
    方法及说明:ceateOrd();(添加数据)deleteOrd(); (删除数据)finshOrd();(修改数据) searchOrd();(查找数据)多个方法




    ceateOrd方法
    添加数据,找到数组为空的位置输入数据,根据判断反馈信息,然后进行相关操作。




    deleteOrd方法
    删除数据,将订单中所有信息置空所有数值置零。


    finshOrd方法
    查找订单,将订单状态进行修改


    searchOrd方法
    查找数据,输入要查找的数据并判断 ,根据结果提供提示,正确后显示查找的订单信息。



    4.3 订单(Ordering)类
    类名:Ordering
    继承父类:person
    实现接口:无
    概述:实现对订单数据的查看
    属性及说明:设置double price ;(价格)String type;(衣服型号)String num ;(总量)等多个属性;主要用这些属性代表价格如何、衣服型号、洗衣总量多少等信息
    方法及说明:包含Ordering();(订单数据)Price();(价格计算)Type(); (型号判断)Num();(总量统计)等多个方法




    Ordering()方法
    构造两个函数 无参数构造函数和有参构造函数对订单的数据进行操作




    Price()方法
    用两个方法设置price的值


    Type()方法
    设置type的值并获得type的值


    Num()方法
    获得num的值



    4.4 客户(Person)类
    类名:Person
    继承父类:无
    实现接口:无
    概述:实现对订单数据的查看
    属性及说明:设置String name;(名字)String telenumber;(电话)属性,用这些属性来表示客户的基本信息
    方法及说明:包含Person();(客户)Name();(名字)Telenumber(); (电话)等多个方法




    Person()方法
    将数据送入person接收name,telenumber




    Name()方法
    设置name的值并获得name值


    Telenumber()方法
    设置telenumber并获得telenumber值



    4.5 数据(Cdata)类
    类名:Cdata
    继承父类:无
    实现接口:无
    概述:实现对订单数据处理
    属性及说明:设置String cname;(名字)String ctelenumber;(电话)属性, int yurong;(羽绒服)int pige;(皮革) int maoyi;(毛衣)int others;(其他衣服)int allprice;(历史消费)用这些属性来记录订单内的部分数据
    方法及说明:




    Cdata()方法
    记录每种衣服的型号的件数




    Cname()方法
    设置Cname的值并获得Cname值


    cTelenumber()方法
    设置cTelenumber的值并获得cTelenumber值



    4.6 衣服(Clothes)类
    类名:Clothes
    继承父类:无
    实现接口:无
    概述:实现对衣服类型的数据处理
    属性及说明:设置String ctype;(衣服型号)int num;(数量)用这些属性来记录订单内的部分数据
    方法及说明:




    Ctype()方法
    设置Ctype并获得Ctype的值




    Cnum()方法
    获得Cnum的值



    五、系统实现5.1 主界面选择相应的命令完成相应的操作:

    根据相应的提示输入要添加的数据:

    根据相应的提示输入要添加的数据:

    5.2 增加模块选择创建订单功能后添加客户订单数据:

    5.3 删除模块根据相应的提示删除:

    5.4 修改模块根据相应的提示输入要修改的数据:

    5.5 查找模块根据相应的提示输入要查找的订单:

    总 结这次java程序设计历时一周,内容很充实几乎涵盖了java所有的基础知识,在课堂上我们学习的知识在这次程序设计中得到了实践,这些知识不再是书本上的枯燥的理论,通过这次的课程设计,让我们对java这门课产生了更加浓厚的兴趣。
    参考文献[1] Kumar K, Kaur P. A Comparative Analysis of Static and Dynamic Java Bytecode Watermarking Algorithms[M]// Software Engineering. 2019.
    [2] Kumar K, Kaur P. A Comparative Analysis of Static and Dynamic Java Bytecode Watermarking Algorithms[M]// Software Engineering. 2019.
    [3] 佚名. 基于项目驱动式教学的《Java面向对象程序设计》课程实践[J]. 计算机产品与流通, 2019(1):263-264.
    [4] 佚名. Java开发入门与项目实战[M]. 2009.
    [5] 佚名. Java面向对象程序设计与应用开发教程[M]. 2010.
    [6] 佚名. Java面向对象程序设计教程[M]. 2004.
    [7] 佚名. 从零开始——Java基础培训教程[M]// 从零开始,Java基础培训教程. 2003.
    [8] 唐红杰. Java语言程序设计之Java基本语法的教学研究[J]. 软件, 2014(6):23-24.
    [9] 吉根云, 蒋蕾. Java基础知识应用编程[J]. 电脑编程技巧与维护, 2005(2):5-8.
    [10] 佚名. Java基础教程.第2版[M]// Java基础教程 第2版. 2012.
    [11] D.S.Malik P.S.Nair. Java基础教程:从问题分析到程序设计[M]// Java基础教程 : 从问题分析到程序设计. 2004.
    0  留言 2020-08-14 14:42:41
  • 基于Java的电脑销售系统

    摘 要电脑管理是通过采购、仓储、综合、出库、配送等活动,解决物资供需之间存在的时间、空间、数量、品种、价格等方面的矛盾,以此衔接社会生产的各环节,从而确保生产的顺利进行。随着社会经济的发展,当企业的物流业务发展到一定规模之后,执行效率就成为物流发展的瓶颈。计算机信息管理技术的迅速发展恰恰解决了这个问题,它使计算机技术与现代管理技术相互配合,来更加准确、高速地完成工业企业日常的电脑销售管理工作,使企业能够以最少的人员来完成更多的工作。 
    系统的开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。本系统使用SQL Server 2008建立数据库后台,使用C#进行前台界面和处理程序的开发,前者建立成数据一致性和完整性强、数据安全性好的数据库,而后者具有应用程序功能完备,易使用等特点。
    一、开发背景伴随着互联网的蓬勃发展,网络购物以成为人们认可的一种简便的购物方式,它正以其高效、低成本的优势,逐步成为新兴的经营模式和理念,人们已不再满足于信息浏览和发布,而是渴望着能够充分享受网络所带来的更多的便利。的确,客户足不出户便可以方便快捷的选购自己喜欢的商品,这正是电脑销售系统客户带来的好处。
    电脑销售系统将传统的商务流程电子化、数字化,一方面以电子流代替了实物流,可以大量减少人力、物力,降低了成本;另一-方面突破了时间和空间的限制,使得交易活动可以在任何时间、任何地点进行,从而大大提高了效率以及其所具有的开放性和全球性的特点,为企业创造了更多的贸易机会。电脑销售使企业可以以相近的成本进入全球电子化市场,使得中小企业有可能拥有和大企业一样的信息资源,提高了中小企业的竞争能力。该系统重新定义了传统的流通模式,减少了中间环节,使得生产者和消费者的直接交易成为可能,从而在一定程度上改变了整个社会经济运行的方式。另外它一方面破除了时空的壁垒,另一方面又提供了丰富的信息资源,为各种社会经济要素的重新组合提供了更多的可能,这将影响到社会的经济布局和结构。
    二、需求分析本系统的主要目的就是实现电脑销售的管理,使顾客与销售员你更加简便易懂的使用本系统,从而提高工作效率,降低管理成本。
    系统中主要对不同身份进行不同操作,采用登录进入系统的形式。
    伴随着互联网的蓬勃发展,网络购物以成为人们认可的一种简便的购物方式,它正以其高效、低成本的优势,逐步成为新兴的经营模式和理念,人们已不再满足于信息浏览和发布,而是渴望着能够充分享受网络所带来的更多的便利。的确,客户足不出户便可以方便快捷的选购自己喜欢的商品,这正是电脑销售系统客户带来的好处。
    伴随着互联网的蓬勃发展,网络购物以成为人们认可的一种简便的购物方式,它正以其高效、低成本的优势,逐步成为新兴的经营模式和理念,人们已不再满足于信息浏览和发布,而是渴望着能够充分享受网络所带来的更多的便利。的确,客户足不出户便可以方便快捷的选购自己喜欢的商品,这正是电脑销售系统客户带来的好处。
    电脑销售系统将传统的商务流程电子化、数字化,一方面以电子流代替了实物流,可以大量减少人力、物力,降低了成本;另一-方面突破了时间和空间的限制,使得交易活动可以在任何时间、任何地点进行,从而大大提高了效率以及其所具有的开放性和全球性的特点,为企业创造了更多的贸易机会。电脑销售使企业可以以相近的成本进入全球电子化市场,使得中小企业有可能拥有和大企业一样的信息资源,提高了中小企业的竞争能力。该系统重新定义了传统的流通模式,减少了中间环节,使得生产者和消费者的直接交易成为可能,从而在一定程度上改变了整个社会经济运行的方式。另外它一方面破除了时空的壁垒,另一方面又提供了丰富的信息资源,为各种社会经济要素的重新组合提供了更多的可能,这将影响到社会的经济布局和结构。
    三、模块说明为满足顾客和销售员的各种问题,一共分了5个类分别是:主菜单、销售员、顾客、电脑、订单。
    销售员可以进行增删改查电脑信息。
    顾客可进行查看电脑信息和购买电脑。
    3.1 用户注册模块
    功能描述:此模块主要功能是实现用户用个人信息注册账号,完成登录操作。系统要求用户输入个人信息后才能完成操作
    输入:姓名 、性别、年龄、钱数以及密码完成注册
    输出:账号及密码。

    3.2 用户登录模块
    功能概述:此模块主要功能是用户登录自己的账号完成登录,进入系统查看物品信息
    输入:账号、密码、姓名、性别、年龄以及钱数。用户可根据此系统查看电脑信息
    输出:电脑的型号,价格以及配置等信息

    3.3 查看模块顾客和销售员可查看电脑信息,主要有电脑品牌、价格和库存,另外销售员还可以查看总库存。
    3.4 增加模块功能概述:由销售员进行增加未有电脑信息

    输入:电脑品牌、价格和库存
    输出:增加的电脑信息(在查看中可见)

    3.5 删除模块
    功能概述:由销售员进行删除已有电脑信息
    输入:需要删除的电脑序号
    输出:该电脑的品牌、价格和库存都将删除(在查看中可见)

    3.6 修改模块功能概述:由销售员进行修改已有电脑信息

    输入:电脑品牌、价格和库存
    输出:以修改的电脑信息(在查看中可见)

    四、详细设计方法的引用可以通过其他类来体现,为了更好的体现增删查改,不同类中有不同的方法。
    4.1 顾客类
    类名:customer
    继承父类:(order)类
    概述:order是订单类,通过创建构造函数在customer类中调用,实现订单的使用
    属性及说明:computerName、computerBrand、computerPrice为ordedr类中的三个属性,在调用中实现购买电脑后根据价格扣钱和库存量的改变
    方法及说明:“ding“是order类中的一个方法,既实现在点击购买选择的商品后显示你购买的信息(品牌、价格、优惠活动提示语句和库存量)

    4.2 电脑类类
    类名:computer
    概述:既实现显示该电脑销售系统所有的商品信息
    属性及说明:brand、price、inventory为该类的属性,此出运用对象数组将这3个关于电脑商品信息用数组存起来,让顾客查看所有商品的信息,并进行选择

    五、系统实现通过上面的介绍系统的各个模块,现在来具体实施。
    5.1 主界面在主菜单中可以看到销售员和顾客登录两种方式,也可直接退出系统:

    得到销售员信息,需输入密码进行验证:

    根据需要进行操作:

    5.2 查看模块在此可看到已有商品的信息和总库存:

    5.3 增加模块选择增加电脑信息后输入相应的数据:

    5.4 删除模块按下相应的序号进行删除:

    5.5 修改模块选择需要修改的序号提示信息进行修改:

    总结通过此次课程设计,使我更加扎实的掌握了有关面向对象和类方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
    在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,也永远不可能得到社会及他人对你的认可!
    课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。通过这次课程设计,我掌握了程序的识别和测试;熟悉了类和面向对象的知识; 我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
    回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
    实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
    此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
    参考文献[1] 孙卫琴.Java面向对象编程[M].电子工业出版社,2006.
    [2] Kafura D .JAVA面向对象程序设计教程[M].机械工业出版社,2003.
    [3] 吴育锋,周建东. Java面向对象编程[M].浙江大学出版社,2015.
    [4] 李发致.Java面向对象程序设计教程[M].清华大学出版社,2004.
    [5] DennisKafura.Java面向对象程序设计教程[M].机械工业出版社,2003.
    [6] 黎明,杨先凤.Java面向对象程序设计教程[M].电子科技大学出版社,2005
    [7] 严莉,刘丹.Java面向对象程序设计实验教程[M].华中师范大学出版社,2015.
    [8] Sanders K ,AndriesVanDam Java面向对象程序设计:图形化方法[M].机械工业出版社,2006.
    [9] 巴克.Java面向对象编程指南[M].电子工业出版社,2001.
    [10] 邹蓉.Java面向对象程序设计[M].机械工业出版社, 2014.
    0  留言 2020-08-13 11:12:20
  • 基于Java的高校团委团员档案管理系统

    摘 要校团委团员档案管理系统是一个针对校团委对团员信息的管理系统,设计的程序要实现对团员档案基本信息的增、删、修、查、统,掌握继承和类的定义和使用方法,掌握面向对象的基本思想。
    本课题要设计的有三个类,分别是Secretary类,File类和测试(Test)类;在File类中描述团员的基本信息,包括:姓名(names)、性别(sexs)、家庭住址(address)、学号(number)、入团入党时间(time)、状态(state);在Secretary类中定义五个方法去实现团员档案管理的基本信息的增加add()、删除delete()、查询check()、修改change()、统计total();在测试(Test)类中通过继承Secretary类,从而调用Secretary类中的方法去实现五大功能,并增加了返回功能。
    关键字:团员档案;类;面向对象思想;继承
    一、开发背景由于高等学校的快速发展,高校规模的逐渐扩大,学生的素质和能力不断的增强和思想觉悟的不断提高,越来越多的大学生想要入团入党加入党组织,成为一名优秀的党员,为祖国奉献自己的一份力量,做一个有责任有担当的大学生。而与此同时管理团员档案信息就成为了一个难题。在管理的过程中,手工操作不仅仅会耗费学生和工作人员的大量时间和精力,其记录信息的效率和准确性也很低。那么如何让团员档案管理人员更加快捷、方便、准确的对团员档案进行管理就成为了一个难题。
    利用计算机对团员档案信息管理不仅仅能够保证准确、无误、快速,而且还可以利用计算机对有关的团员进行查询,且检查迅速、可靠、存储量大和保密性好。要科学的实现信息化管理,开发一个适合学校进行信息增加、删除、修改、查看、统计功能的团员档案管理系统是十分重要的。
    本课题就是针对团员档案管理的问题而设计的一个高校团委团员档案管理系统。
    二、需求分析本系统的主要目的就是实现对团员档案信息的管理,使得校团委更加容易、便捷的对团员信息进行管理,从而提高工作效率,降低管理成本。
    三、模块说明共设置了四个模块,来说明档案员对团员信息的管理。
    3.1 档案员管理(增)档案模块
    功能描述:此模块的主要功能是实现档案员对团员档案的基本信息进行管理(增)
    输入:团员姓名、学号、性别、状态、入团时间和地址
    输出:团员姓名、学号、性别、状态、入团时间和地址

    3.2 档案员管理(删)档案模块
    功能描述:此模块的主要功能是实现档案员对团员档案的基本信息进行管理(删)
    输入:学号
    输出:此人已不存在!!!

    3.3 档案员管理(改)档案模块
    功能描述:此模块的主要功能是实现档案员对团员档案的基本信息进行管理(改)
    输入:团员学号,姓名或状态
    输出:修改后的团员姓名、学号、性别、状态、入团时间和地址

    3.4 档案员管理(查)档案模块
    功能描述:此模块的主要功能是实现档案员对团员档案的基本信息进行管理(查)
    输入:团员姓名或状态
    输出:查询后得到的团员姓名、学号、性别、状态、入团时间和地址

    四、详细设计通过设置三个类,来实现以上四大模块。
    4.1 档案(File)类
    类名:File
    继承父类:无
    实现接口:无
    概述:定义了关于团员基本信息的成员变量
    属性及说明:姓名(names)、学号(number)、性别(sexs)、地址(address)、状态(state)、入团时间(time),主要用这些属性来描述团员的基本信息
    方法及说明:无

    4.2 档案员(Secretary)类
    类名:Secretary
    继承父类:File
    实现接口:无
    概述:通过定义五种方法来实现档案员对团员档案信息的管理。
    属性及说明:无
    方法及说明:在增加团员add(File[]file)里,首先找到一个空地方,让档案员可以录入团员信息,然后在for语句中用if语句判断所录入的团员名字是否已被占用。如果没有就录入团员的基本信息,如果被占用,就退出if语句进行下一次for语句循环,再判断是否有空位可以录入团员的基本信息;在删除delete()里,先输入需要删除的对象的学号,用for、if语句来判断该对象不能为空,才可以进行删除;在查询check()里,分为按名字查看和按状态查看;当查看时都是用了for和if语句来将数组的信息全部查看一遍,然后找到与名字或状态一致的地方,则可以显示出要查看的对象的基本信息,当查看的对象超出数组的长度,就输出“此人不存在!!!”;在修改change()里,先用for和if语句来判断是否在数组中找得到和输入对象的学号一致的地方,然后再进行修改;方法total(file)进行团员状态的统计

    4.3 测试(Test)类
    类名:Test
    继承父类:Secretary
    实现接口:无
    概述:通过继承Secretary类,定义一个File[] file = new File[51];的对象数组,while();循环,switch()语句,从而调用Secretary类的五中方法来实现增、删、查、改、统五大基本功能
    属性及说明:通过定义一个File[] file = new File[51];的对象数组,定义Secretary类的对象Secretary s =new Secretary();通过调用和实现Secretary类中的功能进行一些相关的操作
    方法及说明:通过调用add(file)方法添加团员数量及基本信息; 通过调用delete(file)方法删除团员;通过调用change(file)方法修改需修改的团员信息;通过调用check(file)方法查找团员;通过调用total(file)方法统计各状态的团员信息

    五、系统实现5.1 主界面显示高校团委团员档案管理系统的主菜单:

    5.2 增加团员模块输入需增加团员的信息并显示:

    5.3 删除团员模块按姓名或状态查找到需删除的团员并删除:

    5.4 修改团员模块按学号进行查找,并修改该团员的地址、状态:

    5.5 查询团员模块按姓名或状态查找到团员并显示:

    5.6 统计团员模块输出各状态的人数:

    总结通过这次课题的设计和实现,我们小组从中学习到了很多的知识,如我们更加深入的了解到了面向对象的思想(将功能等通过对象来实现,将功能封装进对象之中,让对象去实现的具体细节),并且把它运用到了本次的课题设计中。在本次的课题中,我们学会了首先理解课题并对本次课题内容进行一个了解和分析,比如对属性和功能的分析;其次是对功能实现的一个大概预想;最后是带着预想去编写代码,进行对功能的调用和实现,观察出错地方,并对此进行修改直到没有出错点为止。
    参考文献[1] 邢如意. Java语言中对象的理解与应用[J]. 软件工程, 2017, 20(4):9-11.
    [2] 赵卓君. Java程序设计[M]. 北京交通大学出版社, 2015.
    [3] 佚名.面向对象与Java程序设计(第2版)[M]//面向对象与Java程序设计.第2版. 2015.
    [4] 张华, 李劲, 吴成英. 面向职业岗位的Java课程群构建与教学方法研究[J]. 计算机时代, 2016(4):76-79.
    [5] 陈旭, 朱湘宝, 蒋振华. 基于Java环境的字幕自动获取软件的研究和应用[J]. 电子世界, 2017(13):18-18.
    [6] 佚名. XML与JAVA程序设计大全[M]. 2002.
    [7] 陈红军, 耿永军, 闫洪亮. 《JAVA程序设计》课程教学改革探讨[J]. 信息系统工程, 2010(1):128-130.
    [8] 蓝雯飞, 李子茂. “Java程序设计”课程教学思考[J]. 计算机时代, 2013(1):37-39.
    [9] 李晓辉, LIXiao-hui. “Java程序设计”课程的教学改革与实践[J]. 长春大学学报, 2011, 21(8):102-103.
    [10] 李英梅, 夏伟宁, 丁金凤. Java程序设计语言课程群建设[J]. 计算机教育, 2012(7):86-89.
    1  留言 2020-08-12 10:10:14
  • 基于JAVA的酒店住宿管理系统

    摘 要进入大学的第二次课程设计中,我们小组选择了酒店住宿管理系统作为我们课程设计的课题,这个系统的主要目的在于利用面向对象程序设计来实现旅客的入住、退订、查阅、更换房间以及查询。这个程序总共4个类,以组长为中心,其他两个组员每个人分别负责基本的一个基础个类,由组长进行汇总,再做最后的修改、调整、编译、运行。在汇总的过程中,我们对住院的天数的这一情况设计方法产生了分歧,后来组合在一起之后,发现我们的程序漏洞百出,出现了很多问题,就开始一起进行进一步的修改与完善。从一开始毫无头绪一起慢慢琢磨、慢慢摸索,我们学到了很多,对酒店住宿管理系统也越来越熟悉。
    在设计中,我们通过分工完成每一个模块,并将它们整合起来,完成了这次设计。在设计中我们利用了Eclipse这个平台来修改及实现我们的程序。充分利用了java的面向对象的特点,让我们的程序架构更清晰、系统更加简洁。
    关键词:入住;退订;更换;查询;java;Eclipse
    一、开发背景酒店住宿是现在百姓热议的话题之一,常常会有需要住宿而没有房间的情况发生,为了优化住宿管理,提高酒店住宿流通的效率,我们小组在此背景下开发了这一款酒店住宿管理系统。
    二、需求分析一个酒店住宿管理系统,有两个主要的实体(旅客、管理员),和实现注册、分配房间、收费、管理的功能。旅客—姓名、年龄、编号)。
    实现记账、收费、管理的功能我们放在测试类中实现。
    三、模块说明3.1 入住模块
    功能描述:此模块的主要功能是实现旅客入住的信息登记和实现
    输入:姓名、年龄、身份证号码、电话号码
    输出:入住成功

    3.2 退订模块
    功能描述: 此模块的主要功能是清空房间和结清费用、注销旅客信息
    输入:旅客姓名
    输出:旅客个人信息以及应结算的入住费用

    3.3 查询模块
    功能描述: 查询旅客信息
    输入: 旅客姓名
    输出: 住宿旅客信息或不存在此旅客

    四、详细设计4.1 passager类
    类名:passager
    继承父类:无
    **实现接口:无
    概述:定义房间类,旅客信息
    属性及说明:
    String names; //姓名int ages ; //年龄int tel ; //电话int IDnumber; //身份证号码
    方法及说明:
    public passenger(String names,int age,int tel,int IDnumber, int zhusustate) //passager构造方法

    4.2 room类
    类名:room
    继承父类:无
    实现接口:无
    概述:定义房间类,旅客所住房间及信息
    属性及说明:
    String room; //房间int roomnum; //房间号double price; //价格
    方法及说明:
    public String getroom() //输出roompublic void setroom(String room) //获得roompublic int getroomnum() //输出roomnumpublic void setroomnum(int roomnum) //获得roomnumpublic double getPrice() //输出Pricepublic void setPrice(double price) //获得PricePublic room(String room,int roomnum,doubleprice) // room构造方法

    4.3 zhusu类
    类名:zhusu
    继承父类:无
    实现接口:无
    概述:对旅客类及房间类进行关联
    属性及说明:
    Room a; //room类对象Passager b; //passager类对象
    方法及说明:
    public void zhusu(rooma,passager b) //zhusu构造方法

    4.4 tuifang类
    类名:tuifang
    继承父类:无
    实现接口:无
    概述:记录退房的旅客的退房时间
    属性及说明:
    int year; //年int month; //月int day; //日
    方法及说明:
    public int time() //计算天数public tuifang(int year,int month,int day) //tuifang构造方法

    4.5 administrator类
    类名:administrator
    继承父类:无
    实现接口:无
    概述:定义入住、退房、查询功能
    属性及说明:
    zhusu num[] = new zhusu[24];int i, j = 0;int zhusustate = 0;int[][]a = new int[3][6];double[]price = {100.0, 300.0, 500.0};int pay=0; //初始化总花费
    方法及说明:
    public void zhusu() //住宿public void chaxun() //查询public void tuifang () //退房

    4.6 test类
    类名:Test
    继承父类:无
    实现接口:无
    概述:实现住宿、退房、查询功能以及界面的运行
    属性及说明:无
    方法及说明:
    public static void main(String[] ages)

    五、系统实现5.1 主界面
    输入对应的编码,进入编码对应的模块。
    5.2 住宿模块


    输入:姓名、年龄、身份证号码、电话号码、房间类型
    输出:成功住宿的旅客

    5.3 退房模块

    输入:旅客姓名
    输出:应结算的住宿费用

    5.4 查询模块

    输入:旅客姓名
    输出:住宿旅客信息或不存在此人

    总结课程设计说难也难,说容易也容易,说难,是因为这个任务很艰巨,无法靠一个人来实现,说容易,是因为我们团结在了一起,使任务细化,最后变成了小问题,这就和java中“面向对象”的思想一样,每个人都专门设计程序的一部分,最终再合并到一起。经过三个人的不懈努力,这个系统从起步到完善再到完美,最终大功告成。
    参考文献[1] Dennis Kafura. Java面向对象程序设计教程[M]//JAVA面向对象程序设计教程. 2003.
    [2] 杨晓燕.基于应用的Java面向对象程序设计课程研究与教材建设[J].计算机教育, 2012(3):42-45.
    [3] 黄胜宇. Java面向对象编程的教学思路[J].科技资讯, 2010(17):203-203.
    [4] 邝砾,于美琪,冯文韬,等.基于层次考核的计算机类课程考试改革研究——以Java面向对象程序设计课程为例[J].计算机教育, 2017(1):62-66.
    [5] 杨雪. Java面向对象语言的教学探讨[J].家教世界, 2012(6):52-53.
    [6] 菊花. 使用综合案例贯穿Java程序设计课程教学的探索[J]. 内蒙古师范大学学报:教育科学版, 2010, 23(11):139-140.
    [7] 刘冬冬, 赵正平, 王秀友. Java程序设计课程实践教学改革探索[J]. 阜阳师范学院学报(自然科学版), 2014, 31(1):103-107.
    [8] 王国华, 刘新桥. 高职《Java程序设计》任务驱动分步迭代教学改革与实践[J]. 科技信息, 2012(3).
    [9] 刘才铭, 张雁. 结合实际案例的JAVA程序设计课程教学探索与实践[J]. 计算机光盘软件与应用, 2014(6):221-222.
    [10] 张璞, 夏英. 软件设计模式在Java程序设计课程教学中的应用研究[J]. 软件工程, 2017(7).
    1  留言 2020-08-11 10:36:51
  • 基于JAVA的房屋中介管理系统

    摘 要随着住房制度改革不断深化和居民收入水平的提高,住房成为新的消费热点,大部分城市房屋销售价格上涨明显。随之而来国家出台了多项针对房地产行业的调空政策。房屋中介行业是房地产业的重要组成部分,其在房地产业经济运作的全过程之中起着至关重要的作用,为房地产业的生产、流通和消费提供了多元化的中介服务。房屋中介行业作为一个管理房屋信息的机构,其对信息的管理应该准确,无误。数据库,流程控制结构和数组等知识设计一个房屋中介管理的项目对于提高该中介机构的工作效率尤为重要。
    “房屋中介管理系统”的开发定位在一个能够满足数据库管理系统,即具备一个数据库管理系统的基本功能,包括数据的增加,删除,修改,查询等,便于用户查看,操作,和查询房屋登记信息。该系统符合各房产中介公司的需求。在开发过程中注重明确需求分析,遵循用户参与、优化创新、使用高效、处理规范化的原则,使开发模型更加趋于完善。
    在设计中,我们通过分工完成每一个模块,并将它整合起来。完成了这个实验,利用Eclipse这个平台来修改,。充分利用Java的面向对象的特点。
    关键词:中介;信息管理;数据库;数据对象;面向对象
    一、开发背景房屋中介行业是房地产业的重要组成部分,其在房地产业经济运行的全过程之中起着重要的作用,为房地产业的生产、流通和消费提供了多元化的中介服务 。房地产中介具有很强的灵活性。房地产中介机构以佣金为主要收入来源。国外及港台房地产中介服务具有悠久的发展历史,具有一套较为完善的独立法规体系,包括市场准入法规、执业人员职业道德法规以及执业质量控制标准等。法国房屋中介业历史悠久,形成了一套完善的法律和管理办法,实行从帮助寻找客户到签约、管理等“一条龙”服务。有实力的房屋中介公司业务范围更广,不仅从事单元房、宅院、商业用房、车库和仓库等租赁或买卖,还与合伙人共同参与房屋建设,成为房屋的共同物主。随着互联网的广泛应用,法国的房屋中介公司大都设有网站,从公司诚信为客户服务、帮你解除烦恼的承诺到各种房屋租赁、买卖业务的经营项目,一应俱全。而在中国古代和近代市场中为房屋买卖双方介绍交易)评定房地产商品质量)价格的居间行商称之为宅行。中国房地产中介机构的前身,现称房屋中介。房屋中介机构往往有大量的信息需要处理,传统的手工登记的方式对于处理大量信息而言不仅效率低下,而其极易发生信息的记录错误,甚至发生信息丢失的情况。而计算机技术的发展为解决这一问题提供了良好的途径。
    信息技术作为当今使用频率最高的名词之一,随着计算机技术在工业、农业以及日常生活中等各方面的广泛应用,已经被越来越多的个人和企业作为自己赶超世界潮流的标志之一,而数据库技术则是信息技术中一个重要的支撑。数据库技术是计算机科学技术的一个重要分支。从20世纪50年代中期开始,计算机应用从科学研究部门扩展到企业管理及政府行政部门,人们对数据处理的要求也越来越高。在1968年,世界上诞生了第一个商品化的信息管理系统IMS(Information Management System),从此,数据库技术得到了迅猛发展。在互联网日益被人们接受的今天,Internet又使数据库技术、知识、技能的重要性得到了充分的放大。现在数据库已经成为信息管理、办公自动化、计算机辅助设计等应用的主要软件工具之一,帮助人们处理各种各样的信息数据。所以将数据库的技术应用于房屋中介机构,方便其数据管理就变得尤为重要。
    二、需求分析传统的以手工登记为主的房屋中介公司往往有成堆的文件需要人工去处理,对于房屋信息的记录,更新,查询都非常缓慢,而且容易出错,信息管理效率低下,无法保证高质量的信息服务,难于快速到满足客户的需求,其在无形中就耗费了更多的时间,人力,物力,增加了房屋中介公司的运营成本。所以开发房屋中介管理系统对于房屋中介的管理人员,以及客户来说都具有些意义。该系统方便房屋中介机构对房屋信息的记录,更新,查询,利于其信息管理,对于客户提出的要求能够及时满足,提高了中介机构的工作效率,同时,开发这样一套管理系统对于我们即将计算机科学与技术专业毕业的学生来说,也是一次将计算机应用于现实的一次很有意义的实践活动。
    三、模块说明房屋中介管理系统,有增加、查询、删除、出租、归还等模块。
    3.1 增加房屋模块
    功能描述:主要功能是实现对房屋信息的添加
    输入:房屋的基本信息
    输出:添加成功

    3.2 信息查询模块
    功能描述:主要功能是实现对房屋信息的查询
    输入:房屋编号
    输出:房屋的基本信息和不存在

    3.3 删除模块
    功能描述:实现对房屋信息的删除
    输入:房屋编号
    输出:房屋已删除或不存在

    3.4 出租模块
    功能描述:主要功能是实现对房屋出租
    输入:房屋租房或出售
    输出:房屋的状态

    3.5 归还模块
    功能描述:主要功能是实现对房屋的收回和计算费用
    输入:房屋的名字和日期
    输出:归还成功和中介的费用

    四、详细设计先登记房屋初始信息,增加房屋基本信息,删除房屋基本信息,查寻房屋的基本信息,归还房子及计算租房费用。
    4.1 House类
    类名:House
    继承父类:无
    实现接口:无
    概述:定义房屋类、房屋信息
    属性及说明:
    public class house { // 定义house类String[] name=new String[50]; // 把对象的引用传递给nameint[] state = new int[50]; // 把对象的引用传递给stateString[]date=new String[50]; // 把对象的引用传递给dateint[] count=new int[50]; // 把对象的引用传递给count......};
    方法及说明:
    public void house(){ // 声明housethis.name[0]=“01”; // 对house的名字进行初始定义this.state[0]=0; // 对house的状态进行初始定义this.date[0]=“2017年03月01日”; // 对house的日期进行初始定义......

    4.2 Caidan类
    类名:caidan类
    继承父类:无
    实现接口:无
    概述:在控制台输出功能选项的菜单
    属性及说明:
    void caidan(){ // 声明菜单类System.out.println(“欢迎使用房屋中介管理系统” ); // 信息提示System.out.println(“-----------”);System.out.println(“1.新增HOUSE”); // 输出菜单提示信息......
    方法及说明:
    (使用switch语句进行功能选择)xuhao=in.nextInt(); // 序号的输入Switch(xuhao){ // Switch语句进行选择case 1: // 选择1为zengjia功能break; // 跳出switch语句case 2: // 选择2为chakan功能 this.chakan();break;......default: System.out.print(“对不起您的输入有误,请重新输入”); // 输入异常数字的处理

    4.3 Shanchu`类
    类名:shanchu类
    继承父类:无
    实现接口:无
    概述:对已经出租的房子进行信息删除
    属性及说明:
    public class shanchu{ // 定义删除类}
    方法及说明:
    void shanchu(){ // 声明删除类System.out.println(“删除”); // 提示功能...for(int i = 0;i<this.name.length;i++){ // for循环对i处理 if(this.name[i]=null){ // 判断名字是已否存在 if(this.name[i].equalsIgnoreCase(name)){// 寻找对应house if(this.state[i]==0){ // 判断是否已经租出......

    4.4 Guihuan类
    类名:guihuan类
    继承父类:无
    实现接口:无
    概述:进行已租出的房屋的归还,及信息记录
    属性及说明:
    public class guihuan{ // 定义归还类...}
    方法及说明:
    System.out.println("归还"); // 信息提示System.out.println("****** // 信息提示**欢迎进入还HOUSE******************");System.out.println("请输入还HOUSE的名称:"); // 录入信息提示Scanner input = new Scanner(System.in); // 屏幕输入 String name = input.next(); // 传递引用for(int i = 0;i<this.name.length;i++){ // for遍历循环if(this.name[i]!=null){ //有 // 判断是否已经存在if(this.name[i].equalsIgnoreCase( name) && this.state[i] == 0){ // 对两个条件进行判断this.state[i] = 1; // 定义house状态System.out.println("请输入房子交还的时间(年-月-日):"); Scanner inputDate = new Scanner(System.in); // 更新日期

    五、系统实现对房屋中介管理系统进行实现。
    5.1 主界面
    对菜单进行显示,提示1~6对应选项的功能,客户可根据自己的需求进行选择,于提示处,输入对应数字,即可进行相应的功能。
    5.2 查询模块
    查询房子的基本信息,选择2对应功能进入信息查询页面。例如:序号1房子的名称为“01”,其状态为已经出租,并对应租出时间,信息列表的末端,输入0,可回到菜单页面。
    5.3 删除模块
    删除房子的基本信息,通过输入对应名称,对房屋信息进行删除,已使查询页面简便,删除成功后提示:“02”已经删除,输入0可回到功能选择页面。
    总 结课程设计,对于所有组来说都不是很简单,但是可以依靠团队来进行解决,思考,讨论,最后完成这个项目。我们自认为一个人处理不好所有的问题,所以我们就进行交流,学习,合作,还有各自的分工,最后合在一起,完成这个项目。在这个过程中我们学到了很多东西,也巩固了以前的知识。
    通过此次对房产中介管理系统的设计,我们都学到了很多。例如,流程的两种控制方式,及循环结构和选择结构。有if-else语句,if语句,switch语句,while循环,do-while循环。学习基本的面向对象的思想,对“对象”“类”“属性”及“方法”等有一个的初步理解。还有数组的用法,对数组进行声明和初始化,遍历数组,Arrays类的使用的知识。运用封装,继承,多态,抽象类和抽象方法,接口等。再然后对程序的“异常捕获和处理”。最后保证“房产中介管理系统”正常运行。在此过程中,加深了对java语言程序设计理论和基本知识的理解,将课堂上学习的内容付诸于实践,在实践中找出自己的不足,并努力解决,从而使自己不仅加深对java语言的知识点的巩固,而且加强自己的实践能力。
    参考文献[1] 明日科技.Java从入门到精通.第五版.清华大学出版社.2019
    [2] 罗如为. Java Web开发技术与项目实战.水利水电出版社.2019
    [3] 李刚.疯狂Java讲义.第四版.电子工业出版社.2018
    [4] 汪文君.Java高并发编程详解.机械工业出版社.2018
    [5] 汪云飞.JavaEE开发的颠覆者.电子工业出版社.2016
    [6] Cay.S.Horstmann.Java核心技术.第十版.机械工业出版社.2016
    [7] 陈强.精通Java开发技术.清华大学出版社.2014
    [8] 黄俊.Java程序设计与应用开发.第二版.机械工业出版社.2014
    [9] 王爱国.Java面向对象程序设计.机械工业出版社.2014
    [10] 陈云婷.21天学通Java.电子工业出版社.2014
    [11] 张剑飞.Java EE开发技术.哈尔滨工业大学出版社.2013
    [12] 向昌成.Java程序设计项目化教程.清华大学大学出版社.2013
    [13] Metsker S J.Java设计模式.第二版.电子工业出版社.2012
    [14] Metsker S J.Java框架设计.第一版.电子工业出版社.2012
    2  留言 2020-08-10 11:46:44
  • 基于Java的考勤管理系统

    摘 要该考勤信息管理系统用于实现学校对在校学生的考勤信息的管理,是典型的管理信息系统。学生考勤信息的手工登记查询,是一项非常繁重而枯燥的劳动。在计算机技术飞速发展的今天,应用数据库技术实现学生考勤信息统计的管理是行之有效的。
    本报告系统地介绍了一个基于java的学生考勤信息管理系统,论述了一个基于java的学生/老师考勤信息管理系统的设计原理、设计思想及具体的实现过程,对部分架构及设计思想和设计过程作了详细阐述。系统具有师生个人信息查询、请假、随堂点到等功能,信息管理模块、考勤管理模块和考勤系统模块。
    本系统开发主要包括后台数据的简历以及前端应用程序代码的开发两部分。其一要求建立起的数据库具有完整性和一致性,并具有一定的数据安全性;其二要求程序界面友好、功能完备,通俗易懂。本次课程设计着重讨论了用java开发考勤管理系统时的数据库访问技术和面对对象程序开发技术,并给出了部分实现代码。
    关键词:Java;面对对象;学生考勤管理系统
    一、开发背景随着社会的发展,计算机科学日渐成熟,计算机越来越深入到我们的日常生活中,成为我们不可或缺的辅助工具。其强大的功能已为人们深刻认识,它已进入人类社会的各个领域,并发挥着越来越重要的作用,各行各业的人们无需经过特别的训练就能够使用计算机完成许许多多复杂的工作。
    随着我国人口的增长,高校的生源也日益增加。学校考勤信息的管理作为高校管理的一项日常工作,也随着学生人数的管理而变得繁琐起来。与此同时,计算机技术的发展也是与时俱进一日千里,于是,使用计算机代替人工记录管理学生的考勤信息自然而然的进入了人们的视野里。
    二、需求分析我们需要设计一个系统可以实现学生基本信息的查看和管理等功能。在主菜单界面中有输入学生信息、根据ID好查询学生信息、显示数据库中的学生信息、学生请假经过老师审批、学生修改密码、老师查看学生考勤信息等功能,通过不同的选择进入到不同的功能,根据提示进行输入操作。
    三、模块说明根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。数据管理中实现对学生的基本信息、学生考缺课的查询,以及具体缺课内容,是迟到、早退、请假、旷课。查询管理通过根据学生学号等信息,来达到我们需求的目的。
    3.1 用户登录模块
    功能描述:此模块的主要功能是实现用户登录。系统的用户必须在登录系统后才能进行对应的操作。用户在登录页面正确输入账号、密码时就可以成功登录。当密码错误时,用户根据系统的提示进行密码的修改重新进行登录
    输入:用户学号、密码、新密码、旧密码
    输出:

    欢迎使用考勤信息系统请输入旧密码请输入新密码请再次输入新密码修改成功两次密码不一致,请重新输入密码输入错误,请重输

    3.2 用户查询模块
    功能描述:此模块的主要功能是实现用户查询信息。学生在登录系统后查询自己的考勤信息,以此得到自己的出勤情况;老师通过该模块
    输入:学号、专业班级、个人信息等
    输出:用户考勤信息或学生个人考勤信息

    3.3 请假模块
    功能描述:请假分为学生请假申请、老师请假审批、学生请假状态查询;学生提交的请假申请需要老师的审批,只有批准之后学生请假信息方可录入学生状态查询。学生通过此功能模块进行在线请假及查看请假记录信息;老师在线审批学生请假及查看请假记录信息
    输入:学生姓名、请假原因、请假时间、老师批准选项等
    输出:

    请假条:某某同学因某某原因所以请假,请假时间为:xxx,希望老师批准请老师选择:同意(agree) or 不同意(disagree )老师已同意、不同意某某学生的请假选择错误!请老师重新选择决定

    3.4 考勤记录模块
    功能描述:系统具备考勤管理系统、考勤修改系统、后台管理系统这三大主要功能。其中在考勤管理系统中任课老师通过该系统对学生的考勤信息进行录入、修改、统计,在线管理学生出勤信息;学生在线查看自己所有全年的出勤信息。该模块的功能是学生考勤信息统计的实现、查看及管理,涉及学生和老师用户中的所有用户
    输入:老师录入学生需要修改的考勤信息,其中包括学号、信吗、专业班级及考勤情况
    输出:学生个人考勤信息及修改后的学生考勤信息

    四、详细设计本系统是基于数据库的学生考勤信息管理系统,实现了连接数据库,增加、删除、查询、修改学生信息的功能。通过Java语言设计一个学生考勤管理系统,包括学生查询信息、老师管理查看信息以及学生请假老师审批的设计。
    4.1 学生信息(Student)类
    类名:Student
    继承父类:无
    实现接口:无
    概述:学生在线查看自己所有的出勤信息;对密码进行修改等
    属性及说明:
    public String number; //定义一个学号public String major = "computer";// 专业初始化public String class1 = "1804";//班级初始化public String name = "xxx";//姓名初始化private String password;//定义一个密码public String att_s = "暂无考勤信息";//考勤信息初始化
    方法及说明:
    public void set_password(String password);//修改密码public void check_show(String password);//输出学生信息

    4.2 请假(Leave)类
    类名:Leave
    继承父类:无
    实现接口:无
    概述:学生提交的请假申请需要老师的审批,只有批准之后学生请假信息方可录入学生状态查询
    属性及说明:
    String name = "小栋", time ="3,4节课", reason = "感冒发烧,要打点滴";//初始化姓名、时间、原因String chooice = "agree";//初始化请假单的状态
    方法及说明:
    public void showStudent();//学生填写请假单public void showTeacher();//老师对请假单的操作public void LeaveStates();//学生查看请假单的状态

    4.3 老师信息(Teacher)类
    类名:Teacher
    继承父类:Student
    实现接口:无
    概述:老师对学生的考勤信息进行录入、修改、统计,在线管理学生出勤信息
    属性及说明:
    private String number1; //账号private String password1;// 密码public Teacher();//默认的构造函数public Teacher(String number,String name,String major,String class1,String att_s)//带参数的构造函数
    方法及说明:
    public void get_pass(String number,String password);//储存登录密码public void set_pass(String password);//修改密码public void check_in();//考勤录入public int check_set(String num);//考勤修改public void check_s();//考勤统计

    4.4 测试(Main)类
    类名:Main
    继承父类:无
    实现接口:无
    概述:对学生查询信息、老师管理查看信息以及学生请假老师审批的设计在主菜单中的实现
    属性及说明:
    String number;//登录账号(老师的职工号;学生的学号)String password;//登录密码Teacher get = new Teacher();//构建Teacher类的对象(储存老师的账号和密码)Student got = new Student();//构建Student类的对象Leave stu = new Leave();//构建Leave类的对象
    方法及说明:
    get.get_pass(number, password);//使用账号和密码登录get.set_pass("...");//修改密码stu.showTeacher();//老师审批请假条for(int c = 3;;)check[c].check_in();//用循环多次录入学生考勤

    五、系统实现学生考勤管理系统的主要任务是用计算机对学生、出勤状况等信息进行日常的管理。如查询、修改、增加、删除以及存储等,迅速准确地完成各种信息的统计计算和汇总工作,针对系统服务对象的具体要求,设计了学生考勤管理系统。该系统除了能实现信息的录入,删除,插入,更新,打印等基本功能之外,还能够根据用户的需要进行操作。
    该系统实现的流程图如下:

    5.1 主界面
    登录考勤系统界面,通过该界面选择用户身份为老师后登录;输入功能选择,系统自动加入相应操作的界面。

    登录考勤系统界面,通过该界面选择用户身份为老师或学生后登录到各自相应的菜单功能界面;输入功能选择,系统自动加入相应操作的界面。(模块未注明用户为老师用户)
    5.2 修改密码模块

    修改密码时,系统提示输入旧密码,但旧密码错误时,系统自动判断提示:密码输入错误,请重输。修改密码需要进行两次输入新密码才能进行操作,从而使密码修改成功。

    当旧密码输入成功时,系统自动进行下一步操作实现修改密码。
    5.3 请假模块
    老师用户在选择请假批准功能时,系统将学生上传的请假条进行展示,给老师审批;输入agree代表同意,输入disagree带表不同意;系统根据用户输入的信息判断程序下一步的运行状况。


    学生用户通过选择用户身份登录主菜单后选择功能2请假申请,用户根据系统提示写请假条,请假成功。

    功能3请假情况查询为学生通过请假申请录入请假信息后得到的学生请假条。
    5.4 考勤模块
    当老师用户选择功能3考勤录入时,系统提示输入需要输入考勤的学生信息,包括学号、姓名、专业、班级、考勤情况;系统提示用户继续录入按数字1,不录入按任意键返回。

    学生通过功能4考勤情况查询自己的考勤信息;该学生信息暂未由老师录入,所以该学生的考勤信息暂无,考勤情况可由老师用户登录进行录入、修改和删除。

    老师用户选择其相应的功能菜单功能4考勤修改时自动提示用户输入需要修改考勤信息学生的学号,系统后台数据库将该学生的考勤信息进行调用给用户查看,提示用户依次输入要修改考勤学生的学号、姓名、专业班级、考勤情况等信息。 
    老师用户在修改学生考勤信息之后,选择功能5考勤统计查看所有修改、添加、原有的学生考勤信息。
    总 结课程设计顺利完成,题目所要求的功能也都一一实现,可以对学生的缺课信息进行添加、修改、删除以及查询的显示。但这个程序还有些不够完善,例如不能类中很好的进行承接。
    参考文献[1] 张利锋,孙丽.Java语言与面向对象程序设计[M].清华大学出版社,2015.
    [2] 黄平牧 编.面向对象与Java程序设计[M].清华大学出版社,2015.
    [3] 严莉,刘丹.Java面向对象程序设计实验教程[M].华中师范大学出版社,2015.
    [4] 李恩临.基于JAVA的面向对象开发技术[M].中国财富出版社,2016.
    [5] 张永强.计算机软件Java编程特点及其技术分析[J].计算机产品与流通,2019(01):25.
    [6] 魏华.计算机软件开发的JAVA编程语言与实际应用分析[J].数码世界,2018(8).
    [7] 王娟.基于计算机软件开发的JAVA编程语言分析[J].数字通信世界,2017(12).
    [8] 高阳.JAVA编程语言在计算机软件开发中的应用[J].电脑迷,2018,No.94(05):55.
    [9] 邢如意.Java语言中对象的理解与应用[J].软件工程,2017(4).
    [10] 刘妍东[1].Java类的继承[J].科教导刊(电子版),2017:175.
    5  留言 2020-08-09 11:03:49
  • 基于Java的学生选课管理系统

    摘 要Java是一种被广泛使用的编程语言,它的主要特点在于它是一种既面向对象又可跨平台的语言。Java语言通过为每个计算机系统提供一个叫做Java虚拟机的环境来实现跨平台。Java不但适用于单机应用程序和基于网络的程序,而且还可以用于创建消费者类设备和附件程序。面向对象是一种直观而且程序结构简单的程序设计方法,他比较符合人类认识现实世界的思维方式。其基本思想是把问题看成是由若干个对象组成,这些对象之间是独立的,但是又可以相互配合、连接和协调,从而共同完成整个程序要实现的任务和功能。面向对象的三大特征:封装、继承和多态。继承可以解决编程中代码冗余的问题,继承的最基本作用就是使代码可重用,增加软件的可扩充性。面向对象的优点:

    与人类的思维习惯一致
    信息隐藏,提高了程序的可维护性和安全性
    提高了程序的可重用性

    Java中只支持单继承,既每个类只能有一个直接父类。一个普通类只能继承一个父类,但能同时实现多个接口,也可以同时继承抽象类和实现接口。
    我做的这个程序是学生选课管理系统,这个程序是由我一个人完成的。由于时间比较短且具体实现不需要用到Java的全部语法和功能,所以我做的这个程序不能体现Java的全部语法和功能。我的这个程序定义了三个类,他们分别是:增添类、修改类、删除类和管理员类。并且把这四个类放到了一个叫学生选课系统的包里面,“包”在Java中有很重要的意义,包的声明必须是Java源文件中的第一条非注释性语句,设计包需要与文件系统结构相对应。包的作用有:

    包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件
    防止命名冲突,Java中只有在不同的包中的类才能重名
    包允许在更广的范围内保护类、数据和方法

    根据访问规则,包外的代码有可能不能访问该类。另外数组的应用在我的程序中也有很大的体现,数组是Java中的很重要的语法。数组是用来储存一组相同类型数据的数据结构。当数组初始化完毕后,Java为数组在内存中分配了一段连续的空间,其在内存中开辟的空间也随之固定,此时的数组的长度就不能再发生改变。即使数组中没有保持任何数据,数组所占据的空间依然存在。数组的数据类型用于确定分配的每个空间的大小。JDK中提供一个用于操作数组的工具类,既Arrays类,位于Java.util包中。该类提供了一系列的方法来操作数组,如排序、复制、比较、填充等,用户直接调用这些方法即可,不需要自己编码实现,降低了开发难度。在我的这个程序中,我就用到了toString(arry)这个方法,很方便的实现了把数组中保存的课程信息用一个字符串输出,既方便又快捷。另外for循环在我的程序中也有很重要的应用,实现了对数组的遍历输出。
    总之,我们不管干什么都要遵循一定的规则,充分利用资源,在巨人的肩膀上看世界。Java作为一种既面向对象又可跨平台的语言,确实很好用,非常的便捷。
    一、开发背景学生选课在大学是非常常见的一件事情,学生网上选课系统的开发具有十分重要的意义,可以减少大量的人力、物力、财力。为了优化学生选课管理系统,提高学生选课管理系统程序的效率,我在这一背景下开发了这一款学生选课管理系统。
    二、需求分析学生选课管理系统需要实现增添、修改、查询功能,分别由三个功能类来完成,再设计一个管理员类来实现主要功能。
    三、模块说明3.1 增添课程信息模块
    功能描述:此模块的主要功能是实现增添课程信息。系统的用户可增添需要增添的课程名称及相关信息,并将其保存到数组中,增添完毕后会输出所有的课程信息,便于判断增添是否成功,并明确有哪些课程信息,方便用户使用
    输入:需要增添的课程名称及相关信息
    输出:增添后textbooks数组中,增添后的所有的课程名称及相关信息

    3.2 修改课程信息模块
    功能描述:此模块的主要功能是实现修改课程信息。系统的用户可修改需要修改的课程名称及相关信息,并将其保存到数组中,修改完毕后会输出所有的课程信息,便于判断修改是否成功,并明确有哪些课程信息,方便用户使用
    输入:需要修改的课程名称及相关信息
    输出:修改后textbooks数组中,修改后的所有的课程名称及相关信息

    3.3 删除课程信息模块
    功能描述:此模块的主要功能是实现删除课程信息。系统的用户可删除需要删除的课程名称及相关信息,并将其保存到数组中,删除完毕后会输出所有的课程信息,便于判断删除是否成功,并明确有哪些课程信息,方便用户使用
    输入:需要删除的课程名称及相关信息
    输出:删除后textbooks数组中,删除后的所有的课程名称及相关信息

    3.4 管理员模块
    功能描述:此模块的主要功能是实现学生选课管理系统的主要功能,包括保存学生的选课信息。系统的用户可根据输出的课程信息选择要选修的课程,选择需要选修的课程名称及相关信息,并将其保存到数组中,方便用户使用
    输入:需要选修的课程名称及相关信息
    输出:可供选择的课程信息;学生已经输入的选修的课程名称及相关信息

    四、详细设计4.1 增添课程设计类
    类名:增添
    继承父类:无
    实现接口:无
    概述:增添需要增添的课程名称及相关信息
    属性及说明:无
    方法及说明:

    for循环语句:实现数组的遍历输出课程名称及相关信息 if判断:找到暂时没有保存课程信息的null的数组的下标值,用于增添所需课程名称及相关信息

    4.2 修改课程设计类
    类名:修改
    继承父类:无
    实现接口:无
    概述:修改需要修改的课程名称及相关信息
    属性及说明:无
    方法及说明:

    for循环语句:实现数组的遍历输出课程名称及相关信息if判断:找到需要修改的课程名称及相关信息所在的数组的下标值,修改所需修改课程名称及相关信息

    4.3 删除课程设计类
    类名:删除
    继承父类:无
    实现接口:无
    概述:删除需要删除的课程名称及相关信息
    属性及说明:无
    方法及说明:

    for循环语句:实现数组的遍历输出课程名称及相关信息if判断:找到需要删除的课程名称及相关信息所在的数组的下标值,删除所需修改课程名称及相关信息

    4.4 管理员设计类
    类名:管理员
    继承父类:无
    实现接口:无
    概述: 实现学生选课管理系统的主要功能,包括保存学生的选课信息
    属性及说明:无
    方法及说明:

    for循环语句:实现数组的遍历输出课程名称及相关信息使用scanner方法:保存学生所选择的课程名称及相关信息

    五、系统实现设置增添、修改、删除三个功能类,以及一个管理员类共同来实现学生选课管理系统。增添类实现课程数目或者内容的增添,定义了一个add变量来储存所需要增添的课程名称,通过for循环遍历textbooks数组,找到null后,将保存在add变量中的课程名称保存到textbooks数组,从而实现了增添功能。修改类实现课程数目或者内容的修改,定义了一个change变量来储存所需要修改的课程名称,通过for循环遍历textbooks数组,找到保存在change变量中的课程名称在textbooks数组的储存空间并且返回它保持在textbooks数组的下标值,将找到的课程名修改成所需要的课程名,从而实现了修改功能。删除类实现课程数目或者内容的删除,定义了一个delete变量来储存所需要删除的课程名称,通过for循环遍历textbooks数组,找到delete变量来储存所需要删除的课程名称后,将保存在delete变量中的课程名称保持在保存到textbooks数组的下标值返回,然后将其置为null,从而实现了删除功能。管理员类实现学生选课管理系统的主要功能,使用了toString(array)方法来将所有的课程名称以字符串的形式输出,通过所输出的课程信息来确定所需要选择的课程,并且将其保存到content数组,通过for循环遍历students list数组,按照顺序依次保存学生的选课信息,从而基本上实现了学生选课管理系统的功能。
    5.1 主界面
    5.2 增添模块
    5.3 修改模块
    5.4 删除模块
    总 结通过这一次课程设计,我基本上重温了一下这一学期所学的Java程序设计基础的内容。在实践时发现想到以前觉得理解了的知识点并没有完全理解,还存在许多的疑问点或者说完全不懂的知识点。这个学生课程管理系统程序是由我独立完成的,虽然存在很大的不足,但是在整个的课程设计中我还是明白了很多的东西。我个人觉得独自完成课程设计的意义更大,因为对于同一件事情不同的人会有不同的看法,而这些看法本身并没有对错,但是不同的看法会产生不一样的行为,所以我个人觉得我们应该独立的完成课程设计。通过这次课程设计我对Java中一些重要的语法有了更加深刻的认识,我觉得我以后应该多编写一些程序,在这个过程中,我们可以系统的运用所学的Java知识,同时也可以让我们对编程产生兴趣,更好的培养我们的学科思维,增强我们的职业素养。面向对象是一种直观而且程序结构简单的程序设计方法,他比较符合人类认识现实世界的思维方式。其基本思想是把问题看成是由若干个对象组成,这些对象之间是独立的,但是又可以相互配合、连接和协调,从而共同完成整个程序要实现的任务和功能。我们可以更好的认识这个世界。人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。知识并不是孤立的,我们应该广泛的学习各个方面的知识。
    参考文献[1] 尹友明. Java语言与Java技术概述[J].中国新技术新产品, 2011(6):99-99.
    [2] 佚名. Java语言编程技术[M]. 1997.
    [3] 邝砾,于美琪,冯文韬,等.基于层次考核的计算机类课程考试改革研究——以Java面向对象程序设计课程为例[J].计算机教育, 2017(1):62-66.
    [4] 杨雪. Java面向对象语言的教学探讨[J].家教世界, 2012(6):52-53.
    [5] H.M.Deitel. Java语言程序设计大全[M]// Java 语言程序设计大全. 1997.
    [6] Y.DanielLiang. Java语言程序设计.基础篇[M]. 2008.
    [7] 杨晓燕.基于应用的Java面向对象程序设计课程研究与教材建设[J].计算机教育, 2012(3):42-45.
    [8] Dennis Kafura. Java面向对象程序设计教程[M]//JAVA面向对象程序设计教程. 2003.
    [9] 佚名.面向对象程序设计与Java语言[M]. 2004.
    1  留言 2020-08-09 11:03:08
  • 基于Java的员工培训管理系统

    摘 要随着信息技术的迅速发展,信息资源数字化、网络化的进程进一步加快,信息化的管理系统越来越重要。在本次的课程设计中我们小组选择的是员工培训管理系统作为我们课程设计的目标程序,本程序采用的是java计算机语言编写,主要思想为面向对象的思想。这个程序的是个关于员工培训的管理系统,主要功能是注册员工的系统账号,ID,以及密码进行保存于系统中,登入员工账号后可以进行选择培训课程类型和难度,对课程的余量进行查询,对自己信息的修改。
    为完成以上功能我们分出四个类,分别为ManageInformation类,Register类,Test类,TrainRegister类。以组长为小组的核心,两个组员分别负责Register类和
    TrainRegister类,组长负责ManageInformation类和Test类,由组长进行汇总,再由整个小组一起做最后的修改、调整、编译、运行,最后将程序完成。
    在本次的课程设计中,我们通过将整个系统分为各个类分给各个组员完成,并最后将他们整合起来完成了本次的课程设计,在这次的课程设计中我们所用的是Eclipse的编译软件,利用数组等方式大大减少的程序的行数,同时充分的将Java计算机语言中的面向对象的思想融入到程序中。
    关键词:用户;培训;管理;系统;课程;Java;eclipse
    一、开发背景当代社会也就是一个信息时代,人的生活离不开计算机,更加离不开计算机程序。
    由于计算机技术的飞速发展,数据库技术作为数据管理的一种有效的手段,在各行各业中得到广泛的应用。传统的员工培训管理办法已经限制了企业的高速发展,而高效的程序员工培训管理系统能够提高企业整体的科技含量与管理效率,加快企业的信息化建设。该管理系统以JAVA为开发语言,可以满足绝大部分的企业对员工培训管理系统的要求
    二、需求分析本程序是一个小型的员工培训管理系统,主要应用与企业、学校、政府部门等企业单位,以使他们能对档案进行简便的管理。程序能方便的管理用户个人信息和培训课程信息,包括添加、删除、修改、查询等。
    本程序用的是java开发语言,操作界面简单易懂,便于用户的使用,
    三、模块说明3.1 用户注册模块
    功能描述:此模块的主要功能是实现用户注册。系统的用户必须在注册获得合法身份之后才能登录系统进行对应的操作。此外本模块还提供用户登录功能,最后通过一个对象数组把注册用户的信息保存起来,也提供了相应的信息查看功能
    输入:用户账号、用户名、密码
    输出:注册成功
    登录:输入用户账号、密码和对象数组中的信息对比
    用户信息:可以查看指定用户信息,也可以查看所有用户人信息

    3.2 管理用户信息模块
    功能描述:此模块的主要功能是实现对用户信息添加、删除、查找、修改的功能
    添加用户信息:输入用户的ID、user、cold、科目、培训登记,读入到用户注册对象书中,目前该功能只能实现顺序添加,更多的功能期待以后的程序完善
    删除用户信息:输入要删除用户的对象数组下标,如果该位置有人注册了,则对该用户的信息进行删除,删除该用户的信息后,该用户的信息全部置为NULL
    查找用户信息:输入想要查找的对象数组下标号,从对象数组中进行数组对比,有该用户信息则输出用户信息,说明查找成功
    用户信息修改:输入想要修改的对象数组下标号,定位到该位置上,就可以对该用户所有信息进行修改

    3.3 培训课程报名模块
    功能描述:此模块的主要功能让用户选择自己想要培训的课程和相关课程的难度。报名成功后把用户信息存储在用户信息对象数组中。还新增了查看培训用户信息情况功能,该功能更用来提示用户当前课程人数情况。那些是可以选择的,每门课程的最多人数为50人
    输入:想要培训课程,难度
    输出:可选择的课程和相关的难度
    查看培训用户课程情况:在主函数中调用本类中的方法实现

    3.4 测试模块
    功能描述:提供了一个用户界面窗口,主函数通过提示用户输入相应的数据调用方法实现相应的功能
    四、详细设计4.1 Register类
    类名:Register
    继承父类:无
    实现接口:无
    概述:用户信息注册、登录、存储用户信息、查看用户信息
    属性及说明:
    String id; //用户账号String user; //用户名String cold; //用户名String kemu; //用户培训科目String level; //用户培训科目等级
    方法及说明:
    Register()默认构造方法Register(String id, String user, String cold,String kemu,String level){}设置用户信息构造方法 Register(String id, String user, String cold) //用户注册构造方法public void show(Register userInformation[] ,int a) //查看所有用户信息方法public void show1(int y,Register userInformation[] )//查看特定用户信息方法public void land2(Register[] userInformation1, String id,String cold,int a)//用户登录方法

    4.2 ManageInformation类
    类名:ManageInformation
    继承父类:无
    实现接口:无
    概述:用户信息添加、删除、查找、修改
    属性及说明:无
    方法及说明:
    public void add( Register b,Register userInformation1[],int x)//指定位置添加用户信息方法public void del(Register userInformation1[],int x ) //删除指定用户信息方法public void search(Register userInformation1[],int x ) //查找指定位置的用户信息方法public void change(Register userInformation1[],int x)//修改用户指定位置用户信息方法

    4.3 TrainRegister类
    类名:TrainRegister
    继承父类:无
    实现接口:无
    概述:用户科目报名、科目信息查看
    属性及说明:
    String kemu[]={"AI","bigdata","engineer"}; //可以选择的科目String level[]={"basic","medium","high"}; //科目的等级
    方法及说明:
    public void kemuxinxi() //查看可以选择的科目方法public int choosekemu(String name,int x1[]) //选择科目方法public void nandu(String level1) //查看科目等级难度方法TrainRegister(Register userInformation2[],int a1[],int a) //查看科目人数信息构造方法TrainRegister() //默认构造方法

    五、系统实现5.1 主界面
    (说明)主菜单根据用户输入的数字选择不同的功能,输入1可以实现用户注册功能;输入其他的数字可以实现不同的功能。
    5.2 注册功能
    (说明)输入1实现注册功能,用户根据提示输入账号、用户名和密码。
    5.3 登录功能
    (说明)输入2实现登录功能,用户根据系统提示输入账号和密码登录系统。
    5.4 培训报名功能
    (说明)输入3实现培训报名功能,用户根据系统提示输入报名课程、课程难度完成报名
    5.5 显示用户信息功能
    (说明)输入4实现显示用户信息功能,可以查询某一个人的信息和查询所有人的信息,输入1可显示所有人的信息,系统提示显示某一个的信息只需要输入一个0—49的数字即可显示。
    5.6 查询课程情况功能
    (说明)输入5实现查询课程情况功能,会显示每个课程的报名人数以便于用户了解每个课程是否还能进行报名。
    5.7 管理信息功能



    参考文献[1] 邢如意. Java语言中对象的理解与应用[J]. 软件工程, 2017(4).
    [2] 江伟.构建面向计算思维的Java程序设计课程教学模式的研究[J].软件导刊(教育技术), 2018, v.17;No.163(07):80-81.
    [3] 黄艳峰,陈涛.Java构造方法解析[J].河南科技, 2016(3):37-38.
    [4] 黄国华. Java程序设计课程中“类与对象”的教学实践[J].新校园:上旬刊, 2016(5):91-91.
    [5] 周本海.基于面向对象程序设计教学的改革方法研究[J]. 考试周刊, 2015(14):10-10.
    [6] 李茂民.《JAVA语言程序设计》课程教学改革实践探讨[J]. 软件工程师, 2015(5).
    [7] 刘灵敏,谢倩,胡婧, et al.“Java语言程序设计”课程教学改革与实践[J].亚太教育, 2015(12):90-90.
    [8] 宋海洋.基于JAVA的汽车销售订单管理系统[D].
    [9] 宋俊玲.基于jsp+javabean技术的图书管理系统[J]. 电子技术与软件工程, 2014(16):216-216.
    [10] 张泽,雷光波. 基于Java Web的创新创业管理系统设计与实现[J]. 软件导刊, 2017, 16(2):113-115.
    0  留言 2020-08-07 10:34:30
  • 基于Java的个人通讯录管理系统

    摘 要随着社会的发展,人际关系变得越来越重要,为了保持良好的人际关系,必须常与亲戚朋友,同学同事保持联系,但有时候存在许多限制条件,因此我们需要为了快速查找联系人的信息,节省查找时间,开发通讯录管理系统。
    通讯录管理系统是一个基于Java的个人通讯录管理系统,它是将自己的联系人具体信息集中处理,成为一个方便人们使用的小软件。
    通过采用相关技术,将系统设计的功能全部实现。功能包括:添加联系人信息,修改联系人信息,删除联系人信息,查询联系人信息,可以浏览全部通讯录联系人等功能。
    关键字:Java;通讯录;联系人信息
    一、开发背景当今时代,网络已经成为人们生活中不可缺少的一部分,世界的第三媒体——Internet,它打破了地域时间限制,改变了人们的工作和生活方法,制作站点是企业和个人的宣传自己的重要手段,同时也是学习的重要手段。近年来,随着网络用户要求的不断提高及计算机科学的迅速发展,计算机在管理中应用的普及,利用计算机实现各种管理势在必行,对于机关单位来说明利用计算机支持高效率完成通讯录,是适应社会制度要求、推动机关单位信息走向科学化、规范化的必要条件。
    二、需求分析设计一个通讯录管理系统,要求可增加记录、删除记录、显示所有记录、查询记录、修改记录、退出等功能。通讯录记录信息包括:姓名,电话,email等。
    三、模块说明依据需求分析结果,通讯录管理系统可以分为3个模块:联系人信息模块、通讯录模块,测试模块。
    3.1 联系人信息模块
    功能描述:此模块的主要功能是实现联系人信息存储
    输入:联系人编号、姓名、性别、地址、邮箱、电话号码
    输出:无

    3.2 通讯录模块
    功能描述:此模块的主要功能是实现添加、删除、查找、显示、修改联系人信息
    输入:联系人编号、姓名、性别、地址、邮箱、电话号码
    输出:联系人信息及各种界面

    3.3 测试模块
    功能描述:此模块的主要功能是对系统进行测试
    输入:各个功能的编号
    输出:通讯录管理系统界面

    四、详细设计4.1 联系人信息(Message)类
    类名:Message( )
    继承父类:无
    实现接口:无
    概述:定义联系人类、联系人信息
    属性及说明:
    String Name[] = new String[50]; //姓名String sex[] = new String[50]; //性别int Number[] = new int[50]; //编号String Address[] = new String[50]; //地址String E_mail[] = new String[50]; //邮箱String Phone[] = new String[50]; //电话
    方法及说明:无

    4.2 通讯录(Communication)类
    类名:Communication( )
    实现接口:无
    概述:用于实现联系人信息的增加、删除、显示、查询、修改
    属性及说明:
    String Name_2 //用户
    方法及说明:
    public void Add( ) //添加信息public void Search( ) //查询信息public void Show( ) //显示信息public void Modification( ) //修改信息public void Delete( ) //删除信息

    五、系统实现通讯录管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下:
    5.1 主界面
    5.2 通讯录模块添加联系人信息图

    修改联系人信息图

    删除联系人界面

    查询联系人界面

    显示所有联系人界面

    总 结通过一个星期的面向对象课程设计实习,我从中收益匪浅。对java语言程序设计这一门课程有了更深一步的认识,对一些细节语法有了更新、更深刻的理解,知其然,亦知其所以然。尤其在程序调试过程中,程序的执行过程与语法相联系,尽量独立差错纠错,最后请教老师,对程序的优化设计和调试方法都有了很大的进步。这次课程设计的进步是很大的,我了解到,我们需要将所学的理论知识和实践联系起来,在实践设计中不断进步,不断熟练,光是读透书本知识是不够的。虽然我对一些java语言知识运用得还不是很熟练,但是我相信在接下来的学习过程中,我们会有更大的进步,还有很大的空间可以发挥。
    在这次课程设计中,我们做的是课题十,编程实现通讯录管理系统,完成相应的增加记录、删除记录、显示所有记录、查询记录、退出等功能。其中运用了很多方面的知识。如运用类、输入输出流等。可以看出,一个简单设计的完成,需要很多方面的知识来共同完成,没方面的知识都要理解透彻,运用熟练,其实我们需要在平日里打好基础。这一次的课程设计,自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次课程设计中彻底暴露出来,经过不断的思考,不断查阅资料和上机运行,解决其中大部分的问题,当然还存在一些问题没能解决。我相信在以后的学习中能够很好的解决它们。但是收获还是不小的,我们不仅对java操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释格式。还有一些算法的使用,了解如何优化自己的算法,这对知识运用的灵活性掌握有很高的要求。我们知道,我们的程序其实存在很多问题,我们的编程思想还是会不自主的运用到面向过程,C语言的思想非常牢固。经过这一次课程设计的答辩,我了解到了自己所存在的问题。更下定决心,以后要把java学的透彻,要把面向对象的这个思想在脑海里扎根。所以,通过一次短短的课程设计就可以看出,我们需要学习的东西还很多,掌握的知识也不够透彻明白。总之,这次课程设计,让我看到很多不足,为我今后的学习指出了新的学习方向,这是我们最大的收获!
    参考文献[1] CayS.Horstmann.写给大忙人看的Java核心技术[M].2016.
    [2] 刘学波.浅谈项目教学法在JAVA语言教学中的应用[J].电大理工,2018(1):40-41.
    [3] 任翠池,陈静,张西忠.基于BOOPPS模型的《面向对象java程序设计》课程教学模式探讨[J].中国新通信,2017,19(4).
    [4] 李书卿.浅析JAVA语言的开发平台及J2EE编程技术[J].数码世界,2017(8):21-21.
    [5] 王娟.基于计算机软件开发的JAVA编程语言分析[J].数字通信世界,2017(12).
    [6] 王开丽.基于学习结果(OBE)的工程教育模式在Java面向对象程序设计教学中的应用[J].电脑知识与技术,2018,v.14(13):99-100.
    [7] 李蔚妍,耿霞,孙未,等.Java语言程序设计教学中构造方法的研究[J].福建电脑,2018(3).
    [8] 谢琳.计算机软件开发的JAVA编程语言与实际应用分析[J].电脑迷,2018,No.106(09):64-65.
    [9] 高阳.JAVA编程语言在计算机软件开发中的应用[J].电脑迷,2018,No.94(5):55.
    [10] 王红伟,李会凯.计算机软件开发的Java编程语言探究[J].无线互联科技,2018,15(10):62-63.
    0  留言 2020-08-06 12:35:38
  • 基于C#和SQL Server 2012房屋买卖租赁系统

    摘 要随着我国经济的快速发展和人们生活水平的不断提高,人们对房屋的需求也日益增长,这极大的增加了房屋买卖租赁公司门店服务人员的工作量,大量信息的流动和处理使得数据不易管理和分类。
    房屋买卖租赁系统利用信息技术对大量复杂的信息进行有效的管理和分类,极大的减少了房屋买卖租赁公司人力的开销,简化了大量信息的流动和处理。该系统主要实现房产经纪人对房源登记、客户需求、看房记录、交易记录、客户数据的信息录入以及对房屋信息、客户信息查询等功能,人事管理员对公司人员进行账号分配和管理的功能。
    该系统是基于C#的应用程序设计,使用Microsoft Visual Studio2012和Microsof SQL Sever2012数据库作为开发工具。该系统的开发主要包括需求分析和实现两个阶段,需求分析阶段主要使用的技术是:利用E-R图对概念模型进行分析,利用数据流图对需求分析进行分析,利用Microsof SQL Sever2012数据库对关系模型进行实现。实现阶段主要使用的技术是:利用三层架构+EF框架进行前台页面和后台功能的实现。
    一、开发背景随着经济和房地产业的迅猛发展,连带着房屋租赁买卖行业也在快速发展。在这个计算机技术快速发展的时代背景下,各行各业都在逐渐实现管理的现代化,房屋租赁买卖管理的现代化也势在必行。
    开发本系统主要就是为了解决房屋租赁公司在房屋租赁信息管理中的一些不规范,使得房屋租赁信息的管理向着规范化、简单化、有效化得方向发展。
    二、需求分析2.1 用户基本需求描述本系统的主要使用者是房屋买卖租赁公司的门店服务人员(房产经纪人),主要是实现房源登记、供求匹配、看房交易、客户数据登记管理和房产经纪人信息管理等功能。房产经纪人使用该系统对客户信息、房源信息、看房记录和交易记录等数据进行登记和有效管理,能快速查询历史记录和供求双方匹配的房源数据。人事管理员使用该系统管理人员信息,分配帐号和密码。
    2.2 数据流图分析
    整个系统从整体上分为以下三个部分:

    用户数据管理:包括客户数据(承租客户、房东)和房产经纪人数据
    房屋信息管理:房屋的租赁买卖信息记录
    记录管理:承租客户的看房记录、客户的需求记录和交易记录


    该系统的主要功能为:

    需求处理:记录客户的需求
    供求匹配:根据客户需求查询符合客户需求的房源信息
    看房记录:对客户看房之后的信息进行记录
    交易记录:看房之后,如果用户要买房/租房,对交易记录进行记录
    修改房屋信息:对已交易的房屋信息及时进行修改(已售出的房屋信息及时删除)


    该分层图是对客户的需求信息进行处理,根据客户的需求查询房源信息,如若有房源信息匹配,房产经纪人带客户看房。

    此分层图为房产经纪人带客户看房后,对看房记录进行登记,如若客户满意,同意交易,房产经纪人对客户的交易信息进行处理。

    此分层图是房产经纪人对客户的买房/租房交易信息进行处理。

    此分层图是房产经纪人根据已经交易的房源信息对房源信息记录进行修改
    2.3 数据字典数据流条目



    数据流名称
    别名
    简述
    来源
    去向
    组成




    客户需求信息
    客户需求
    客户对房屋提出的需求
    客户
    加工1“登记客户的需求信息”
    编号+户型+位置+楼层+类型


    房屋信息供求匹配结果
    房屋信息匹配供求
    根据客户提出的需求查询房屋信息
    房产经纪人
    加工1“根据需求查询房屋信息”
    True\
    False


    修改的房屋信息
    修改房屋信息
    对房屋信息的修改
    房产经纪人
    加工1“房屋信息管理”
    房屋编号+位置+楼层+状态+户型+类型


    添加看房信息
    记录看房记录
    登记客户的看房记录
    房产经纪人
    加工1“看房记录管理”
    客户编号+房屋编号+记录编号+时间+结果+客户反馈


    添加交易信息

    记录客户买房/租房的交易信息
    房产经纪人
    加工1“交易记录管理”
    客户编号+房屋编号+编号+时间+类型+价格+佣金比例



    数据存储条目



    数据存储条目
    别名
    简述
    组织方式
    查询方式




    需求记录

    存放所有客户需求信息
    索引文件,以客户需求编号为关键字
    要求能立即查询


    房屋记录

    存放所有房屋信息
    索引文件,以房屋编号为关键字
    要求能立即查询


    看房记录

    存放所有客户看房记录
    索引文件,以看房记录编号为关键字
    要求能立即查询


    交易记录

    存放所有客户的交易记录
    索引文件,以交易记录编号为关键字
    要求能立即查询



    数据项条目



    数据项条目
    别名
    简述
    类型
    长度




    客户编号
    clientID
    房屋买卖租赁公司客户的编号
    int



    客户名字
    clientName
    房屋买卖租赁公司客户的名字
    varchar
    20


    客户性别
    clientSex
    房屋买卖租赁公司客户的性别
    char
    2


    客户电话
    clientPhone
    房屋买卖租赁公司客户的电话号码
    char
    11


    客户地址
    clientAddress
    房屋买卖租赁公司客户的地址
    varchar
    50


    客户角色
    clientRole
    房屋买卖租赁公司客户的身份(买主\
    房东)
    char
    4



    三、详细设计3.1 概念模型设计
    3.2 关系模型设计
    客户(ID,姓名,性别,电话号码,地址,角色)
    房屋(ID,位置,楼层,户型,类型,状态)
    看房记录(ID,时间,结果,客户反馈,客户ID,房屋ID)
    交易记录(ID,时间,类型,价格,佣金比例,客户ID,房屋ID)
    员工(ID,姓名,性别,电话,地址,密码)
    需求(ID,户型,位置,楼层,类型,客户ID)

    3.3 物理模型设计客户表



    学段名
    中文名
    类型
    长度
    允许为空
    约束




    clientID
    客户编号
    int


    PK


    clientName
    客户名字
    varchar
    20




    clientSex
    客户性别
    char
    2




    clientPhone
    客户电话
    char
    11




    clientAddress
    客户地址
    varchar
    50




    clientRole
    客户角色
    char
    4




    员工表



    学段名
    中文名
    类型
    长度
    允许为空
    约束




    agentID
    员工编号
    int


    PK


    agentName
    员工名字
    varchar
    20




    agentSex
    员工性别
    char
    2




    agentPhone
    员工电话
    char
    11




    agentAddress
    员工地址
    varchar
    20




    agentPassword
    员工密码
    char
    6




    staff
    员工职别
    int


    FK



    看房记录表



    学段名
    中文名
    类型
    长度
    允许为空
    约束




    lookHouseID
    记录编号
    int


    PK


    lookTime
    看房时间
    datetime





    lookResult
    看房结果
    varchar
    50




    clientBack
    客户反馈
    varchar
    50




    clientID
    客户编号
    int





    houseID
    房屋编号
    int


    FK



    交易记录表



    学段名
    中文名
    类型
    长度
    允许为空
    约束




    dealID
    记录编号
    int


    PK


    dealTime
    交易时间
    date





    dealType
    交易类型
    varchar
    10




    dealPrice
    交易价格
    decimal
    (10, 2)




    commmissionRate
    佣金比例
    decimal
    (6, 2)




    clienID
    房产经纪人ID
    int





    houseID
    房屋ID
    int


    FK



    房屋表



    学段名
    中文名
    类型
    长度
    允许为空
    约束




    houseID
    房屋编号
    int


    PK


    houseType
    房屋户型
    varchar
    10




    houseFloor
    房屋楼层
    tinyint





    housePlace
    房屋位置
    varchar
    20




    houseGenre
    房屋类型
    char
    6




    houseStatus
    房屋状态
    char
    4




    clientID
    客户编号
    int


    FK



    客户需求表



    学段名
    中文名
    类型
    长度
    允许为空
    约束




    demandID
    需求编号
    int


    PK


    demandType
    需求户型
    varchar
    50




    demandPlace
    需求位置
    varchar
    50




    demandFloor
    需求楼层
    varchar
    20




    demandGenre
    需求类型
    char
    6




    clientID
    需求编号
    int


    FK



    四、系统功能模块说明4.1 用户登录模块此模块的主要功能是实现用户登录。系统的用户必须拥有管理员分配的合法账号才能登录系统进行对应的操作。

    输入:用户编号、密码
    输出:进入主页

    4.2 房屋信息管理模块此模块的主要功能是房产经纪人对房东提供的房屋信息进行管理,包括对信息的增加、更新、删除和查询。

    输入:房屋编号,户型,楼层、位置、类型、状态、房东
    输出:房屋信息记录

    4.3 客户信息管理模块此模块的主要功能是房产经纪人对客户的信息进行管理,包括对信息的增加、修改、删除和查询。

    输入:客户姓名、性别、联系方式、地址、身份、负责的房产经纪人
    输出:客户信息记录

    4.4 需求管理模块此模块的主要功能是房产经纪人对客户提出的需求信息进行管理,包括对信息的增加、修改、删除和查询。

    输入:需求户型、需求楼层、需求位置、需求类型、提出需求的客户
    输出:需求信息记录

    4.5 看房管理模块此模块的主要功能是房产经纪人对客户的看房信息进行管理,包括对信息的增加、修改、删除和查询。

    输入:看房时间、看房结果、反馈、房屋编号、看房的客户
    输出:看房信息记录

    4.6 交易管理模块此模块的主要功能是房产经纪人对客户买房/租房的交易信息进行管理,包括对信息的增加、修改、删除和查询。

    输入:交易时间、交易类型、交易价格、佣金比例、房屋编号、客户
    输出:交易信息记录

    4.7 人员信息维护模块此模块的主要功能是人事管理员对人员的信息进行管理,包括对信息的增加、修改、删除和查询。

    输入:帐号、姓名、性别、地址、联系方式、密码、职务
    输出:人员信息记录

    五、系统实现5.1 解决方案
    5.2 主界面
    此主界面为房产经纪人登录后可操作的功能模块,分为房源管理、客户管理、需求管理、看房管理、交易管理五个模块。

    此主界面为人事管理员登录主界面,主要是人事管理员为房产经纪人分配帐号密码。
    5.3 登录模块
    房产经纪人和人事管理员在此页面使用自己的帐号密码登录,分别进入各自的主页进行相应的操作。
    5.4 房源管理模块
    房产经纪人在此页面对房源数据进行维护,可对房源进行增加、修改和删除操作,还可按相应的关键字进行查询。
    5.5 客户管理模块
    房产经纪人在此页面对客户数据进行管理,可对客户信息进行增加、修改和删除操作,还可按客户的名字快速查询客户的信息。
    5.6 需求管理模块
    房产经纪人在此页面对客户提出的需求进行管理,可对客户提出的需求进行增加、修改和删除操作,也可按相应的关键字进行查询。
    5.7 看房管理模块
    房产经纪人在此页面对客户的看房记录进行管理,可对看房记录进行增加、修改和删除,也可按相应的关键字进行查询。
    5.8 交易管理模块
    房产经纪人在此页面对客户的交易信息进行管理,可在此页面对交易信息进行增加、修改和删除操作,也可按相应的关键字进行查询。
    5.9 人员信息维护模块
    人事管理员可在此页面对房产经纪人信息进行管理,可增加、修改和删除房产经纪人信息,并为房产经纪人分配帐号密码。
    总 结通过此次数据库课程设计,提高了自己对项目的需求分析能力,熟悉并加强了画ER、数据流图的步骤以及对数据关系和业务关系的处理,熟悉并掌握了ER-关系模型的转换,掌握了数据库的创建库、创建表和约束的T-SQL命令,进一步熟悉了数据库与应用程序的连接以及在项目中的应用。
    熟练掌握了MVC+EF框架以及easyui的使用,对于实现程序有了进一步的成长,也对数据库课程进行了巩固学习,更好的消化了上课所学习的知识理论,能够更好的分析程序之间的逻辑,梳理主体与主体直接存在的直接或间接联系。对于系统实现程序有了更好的掌握与认识。
    通过此次课程设计,对上课所学习的内容进行新的复习与巩固,熟悉了前台页面的设计,对页面布局美化有了进一步的了解,熟悉了画ER图与数据流图的步骤,但是对于其他方面能力尚且不足,今后会继续努力。
    参考文献[1] 曾登高..NET系统架构与开发[M].电子工业出版社:北京,2003:103-105.
    [2] 张海藩.软件工程导论[M].清华大学出版社:北京,2003:87-100.   
    [3] 萨师煊,王珊.数据库系统概论[M].高等教育出版社:北京,2002年:3-460.
    [4] 周佩德.数据库原理及应用[M].电子工业出版社:北京,2004:18-24.  
    [5] 张莉,韩其睿.浅谈C#编程语言的特点及潜在的新功能[J].仪器仪表用户,2005,5:83-85.
    [6] 顼宇峰.ASP.NET+SQL Server 典型网站建设案例[M].清华大学出版社出版:北京,2006:56-89.
    [7] 彭连刚,张震等.管理系统中计算机应用[M].上海交通大学出版社:上海,2008:5-11.
    [8] 郑人杰,马素霞,殷人昆.软件工程概论[M].机械工业出版社:北京,2009:53-109.
    [9] 陈志波,王春玲.数据库原理及应用教程[M].人民邮电出版社:北京,2008:24-99.
    [10] 王小科,李继业.C#开发宝典[M].北京工业出版社:北京,2012:88-120.
    3  留言 2020-08-05 10:47:24
  • 基于JSP和MySQL的网上订餐管理系统的设计与实现

    摘 要随着科学技术与经济的快速发展,网络信息技术也有了显著的提升与进步,当今的社会是一个集数字化,网络化,信息化的,并且是以网络为核心的现代化社会。伴随信息互联网的高速成长,使得互联网应用也走进家家户户的日常生活。网上订餐作为一种新的生活方式,更加新颖。
    毕业设计中,界面的设计主要使用了在jsp插入HTML语言以及JavaScript对系统的页面进行相关的加工处理完善以使得页面实现的效果尽可能的满足美观的要求。而对于后台的设计主要是使用了javaSE基础编程,及javaEE中的Jsp页面的动态编程,servlet处理交互逻辑,并且使用jdbc连接数据库,数据库则选用了更为高效的MySql数据库。
    本论文就此次毕业设计的系统内容,从餐品的管理,餐品的分类以及查询,到订餐车实现,客户对订单的处理,再到系统对订餐和餐品的管理。系统从业务流程的角度上分析,完成了订餐系统的基本功能,可是使得用户通过互联网进行点餐以及交易。相比于以往的订餐方式,网上订餐更加便捷,高效,对于餐厅更加节省人力,有利于管理,对于顾客更加省时省力。
    关键字:网上订餐系统;JSP;系统管理
    AbstractWith the rapid development of science and technology and economy, network information technology has also been improved and significant progress, the society is a set of digital, network, information, and network as the core of the modern society. With the rapid growth of information and Internet, Internet applications have entered daily life in every family. Online ordering as a new way of life, more innovative.
    The graduation design, the interface design of the main use of the HTML language and JavaScript system to insert page processing related to the perfect page to achieve the effect of as much as possible to meet the aesthetic requirements in jsp. For the background of the design is mainly used javaSE based programming, dynamic programming and javaEE Jsp page, servlet interactive logic, and use JDBC to connect to the database, the database is more efficient in MySql database.
    This paper on the graduation design of the system content, from the management of the meal, the classification of food and query, to the order cart, customer order processing, and then to the system of ordering and food management. From the point of view of the business process, the system has completed the basic functions of the ordering system, but it allows users to order and trade via the internet. Compared to the previous way of ordering, online ordering more convenient and efficient, for restaurants to save more manpower, is conducive to management, for customers more time and effort.
    Keywords: online ordering system; JSP; system management
    绪 论随着我国在本世纪科学技术与经济的快速提高,网络信息技术也有了显著的提升与进步。在我们平日生活中有很多生活方式以及习惯随着周围信息化的快速提高也有和以往相比变化越发的翻天覆地。本次毕业设计“基于jsp的网上订餐系统的设计与实现”,相比与之前传统的电话订餐,门店订餐这种靠无线电话,人工传递的方式的信息途径,这些方式解决问题的效率很低,店家(餐厅)不能及时将餐厅对菜品的调整通知顾客,顾客对于用餐需求也不能进行调整,线下的交流并不能形成方便快捷的交互。很多时候对于,餐厅以及顾客都是一种损失。由于上述缺陷,为了适应当前时代信息快速发展,数据大爆炸的趋势,采用先进的发展的网上订餐管理系统使上述的种种缺陷得以得到缓解和解决,精简了餐厅的工作流程,顾客的订餐更加便捷,从而提高了餐厅的营业额。由于网络的的快速发展,所以订餐系统随着网络也要有一定的发展与变化。因此毕业设计“基于jsp的网上订餐系统的设计与实现”是非常有必要的。网上订餐系统对订餐所涉及的两个主要用户:客户与店家(餐厅),在实现网上订餐之前,双方进行订餐工作,双方都需要花费大量不必要的时间精力。而快速发展的网络技术,使得订餐系统中所要使用的管理流程在很大程度上做到了极大的简化了,使得餐厅的管理系统更加快速高效,更加便捷。提高餐厅工作人员的整体工作效率,更加给使用订餐系统的顾客更加便捷的使用享受和良好的用户体验。
    从始至终人们都寻求便捷,舒适的生活方式。网络作为提高生活水平的重要工具,在出现后,人们逐渐对其产生了依赖,在依赖的同时也希望网络能给自己带来更方便的帮助,从而大量的销售网站,娱乐网站等等也就慢慢诞生了,这个网上订餐系统是一种基于B/S架构的一种系统模式,订餐系统网站的上手非常的方便,即使第一次登陆,通过网站的指引也会让您订餐非常顺利便捷,如同多次订餐的老顾客一般。
    此次毕业设计的系统,网上订餐系统的开发与设计,在系统可靠性,以及项目的扩展性上占有极大优势。此外对一些java相关技术进行了部分研究,设计并且实现系统,同时为以后自己的可能还要做的其他项目打下了有效以及坚实的基础。
    1 系统概述与技术介绍网上订餐系统作为一个销售管理系统,首先在页面的结构上一定要相对有自己的独特之处,凸显餐厅的风格,餐品的质量。只有如此才能从一开始吸引顾客的目光,通过美观的页面满足顾客对此类订餐系统的好感依赖以及业务功能的需求。与此同时,系统也要有先对强的实用性,系统的实用性不强,这样的系统会是的顾客产生厌恶心理,不利于一个餐厅的未来发展。当然,作为一个销售管理系统,要对顾客的点餐做数据统计,这样才能方便餐厅对该顾客的用餐习惯分析,更好的对顾客实施更加人性化的服务。
    1.1 课题背景上世纪90年代,互联网逐渐走进人们的视野,在不知不觉中改变着社会的商品交易方式。国内各大企业从认识到互联网的重要性之后,一直坚持不断的探索网上交易的可能。但是由于网络生活具有很大的虚拟性,商家的信誉很难得到保证、有关网上交易的法规未出台、物流的滞后以及其他的一些问题,都成为了网络交易发展的绊脚石。但是,社会的进步是具有持续性的,21世纪以来,各个瓶颈问题包括网上支付、物流速递等一一被攻破,网上交易的黄金时代也随之来临。
    调查显示,由于科技的进步极大地繁荣了物质生产生活,人们对于生活的便利性要求进一步提高,网上交易特别是以食品外卖为代表与大众日常生活休戚相关的网络交易量将在未来几年达到高峰。
    网上交易这一方式给人们的消费模式注入了一股新的活力,极大地冲击了原有的传统购物消费习惯。网上订餐这一方式,在90后人群中拥有大量的支持者,促使他们做出选择的,不仅仅是这一形式的便利性,还包括相关网站对于消费者的引导。
    1.2 B/S结构的介绍此次系统的设计过程主要运用到了我们在学校以及公司经常提及使用的B/S结构。所谓的B/S系统就是浏览器、服务器的系统结构。网上订餐系统使用B/S结构,主要就是需要服务端的计算机安装数据库以及服务器。而在客户端,一个浏览器就足够。服务器在服务端运行,浏览器在客户端运行,
    B/S结构作为目前最先进的软件构造技术,在用户使用的浏览器向服务器提交了一些请求之后,服务器端如果接收到了用户在浏览器端发送的请求之后,服务器端对从浏览器接收而来的请求对其进行相应的业务逻辑处理,随后将其完成处理后的结果返回给浏览器所在的客户端。
    B/S结构也是有很多种的,例如:针对OA系统的开发,这些系统主要包括应用程序的研发(基于C/S结构的开发),以及使用传统的C/S结构的跟网络技术结合的混合应用,以及到目前为止是我们常常用到的网站制作的技术。但是不可否认的是,每中结构以及技术都有自己的优点以及缺点:在此前的C/S结构中,更多的它是一种比较传统的使用较为广泛的软件开发的模式,主要是通过客户端以及数据库两层结构完成系统的实现,在两层之间还可以加入其他层次与结构,C/S作为先前传统的软件开发标准以及开发设计结构,在伴随网络和软件的开发技术快速进步,在各种新兴技术不断出现下,被取代或弥补了其结构的很多缺陷,于是也被其衍生出来的新兴结构技术在系统开发的过程中渐渐的将其取代。
    1.3 JSP技术的介绍此次网上订餐系统中页面主要使用到的技术是java的JSP技术,JSP技术之所以被广泛被使用到各种项目中去,主要也是因为其自身拥有的很多功能,这使得在项目中可以实现满足开发人员,程序员对项目所需要的效果。
    作为JSP技术的基础,servlet技术在此前的开发中一直被开发人员所应用。JSP技术的优点:

    进过一次的开发和编写,可以在多种平台运行:因为JSP/Servlet都是基于Java变成语言的,因此具有其编程语言的一个主要优点——平台无关性,这个就是著名的的“一次编写,随处运行(WORA – Write Once, Run Anywhere)”
    系统的多平台支持性:在目前已知的所有平台JSP技术可以进行任意的环境开发,并且在平台中将项目部署在任意的环境里,相比于其他技术,可以根据自己项目的需求任意的环境中拓展。这些优势相比ASP/PHP的局限性是显而易见的
    强大的可伸缩性:JSP可以运行小到从有一个jar文件,大到多台服务器进行集群和负载均衡,多到多台Application进行transaction,还有消息处理,从一台服务器到无数台服务器,Java程序编程语言显示了其巨大的能量
    功能得多态多样以及获得大多数开发工具的技术支持:这个优势和ASP有点类似,java拥有众多的的开发工具并且极为优秀好用。并且都是免费下载使用的,而且可以成功稳定得在多个平台上顺利运行
    JSP标签可扩充性:JSP对Web网页的动态构建主要是利用脚本技术和标签,JSP技术站在开发者的角度考虑允许开发者拓展JSP标签,定制专属的标签库,xml标签拥有很好的兼容性以及强大的功能,网页制作者可以充分利用,减少对脚本语言的大量依赖,利用自己定制的标签,使网页制作程序员降低了制作网页的难度以及复杂度

    1.4 JavaScript语言介绍此次毕业设计,在其中的前台jsp页面中大量的使用了前端脚本语言JavaScript。 JavaScript编程语言以其独有特性,使得他在目前的大多数项目的前台页面设计以及编程都占有重要的一席之地。由于js设计来的产品会主要运行在用户的浏览器客户端,使得只要用户点击页面的一些按钮或者特殊位置,就可以触发特定的事件进行操作,在页面的JavaScript脚本就会将事件传给客户端(浏览器),在客户端被设计好的事件就会执行进行相应的事件处理完成一系列的操作。
    网上订餐管理系统在前台页面的编写设计中就多次使用到了JavaScript这种流行的前端编程语言,众多的优势,使得很多项目的前台都是它和它发展衍生的众多类库编写的,例如我们熟知的:jQuery,easyUI,Extjs等在众多的丰富的前端js类库。
    网上订餐管理系统在很多地方都用到了JavaScript脚本语言,例如:顾客以及管理员登录页面时候的,检出数据是否有效,包括重复为空等场景。
    1.5 MySQL数据库介绍首先要说的是MySQL是一个开源免费的数据库。这也是为什么作为一个小型关系型数据库管理系统,却获得了大量的使用,当然这并不是它的最大优点。MySQL数据库拥有很多优点,比如说:MySql的适应性很好,运行和反应速度快,使用的可靠性高。与此同时,结构化查询语句是MySql数据库系统主要使用的数据库管理方式,结构化查询语言也是目前在数据库管理语言中最受人们欢迎的,也是最为常用的。因此在很多的项目系统开发中都会被开发人员关注,经常使用。由于数据库开发者的允许,MySql作为开源的软件,在官方网站和很多其他网站都可下载到各种版本的MySql数据库。并且根据个人或者开发团队的项目需要对下载的代码做出合理的修改。由此我们可以看出,作为一个小型的关系型数据库,在一些项目的管理上是一个很好的选择,当然这也是在此项目没有超出MySql的数据处理能力的范围之外。
    1.6 MyEclipse介绍此次毕业设计主要是面向顾客用户在前台页面订餐,后台管理人员对前台页面出来的数据请求进行数据处理,并对客户端页面进行及时调整,完善的管理系统。
    MyEclipse开发软件对系统项目的开发更加方便快捷,开发项目的管理更具有条理性。相比于被广泛使用的Eclipse开发软件,MyEclipse在Eclipse开发软件的基础上进行了详细的优化和功能的完善,并且对Eclipse的开发环境进行了优化,最大的限度进行了拓展。使用Eclipse中很多时候我们自己要寻找安装插件,但是MyEclipse基本会帮开发人员在使用之前就集成好了,这对于开发人员的开发是十分便利的,因此目前正在广泛使用于企业级集成开发中去。而且,MyEclipse开发软件在应用程序的整合方面也显得十分成功,如果开发人员能十分熟悉Eclipse,那么对MyEclipse的使用也一定不会陌生,因为MyEclipse的快捷键与Eclipse基本保持一致。
    1.7 MVC模式介绍此次毕业设计为了能够在设计实现上达到最初的想法及要求。并且使完成的系统可以具有一个优秀系统所拥有的一些优点:安全性高,可移植性好,跨品台性高,拓展性优秀,还能具有分布式结构。因此在项目中用到了前文所介绍的B/S结构体系,我所设计实现的订餐系统正式基于Java编程语言的B/S设计模式的。为了更加完善系统,结合在大学时期学过的计算机软件知识,我还用到了另一个结构模式,MVC三层结构,MVC三层结构主要是指基于模型model,视图view以及控制controller的结构模型,而MVC正是这三者英文的首字母缩写。
    控制器,视图,模型三层软件设计模式是MVC软件设计模式的根本。这三层模式对应到了实际项目系统中的web服务器。目前,在网上订餐管理系统中主要使用的MVC模式,如下图。

    由以上的结构图可以得知,在此次的项目系统中,前台界面页面的主要任务就是使用系统的用户可以正常的使用系统逻辑正确完成所要实现的业务。当我们使用网上订餐管理系统的时候,仅仅需要在用户的本地计算机,移动通讯设备安装一个浏览器,在这里使用的浏览器不会限制其版本,开发团队以及类型。用户就可以通过这个浏览器作为客户端与我们的网上订餐管理系统建立网络连接,用户在使用的浏览器中发送需求信息,交由在系统当中的业务逻辑进行准确的数据处理,这些过程主要是由MVC结构中的对应层次进行处理的。业务逻辑得到准确的执行处理后,将处理好的数据进行数据库的数据交互。在模型层中,数据访问层必不可少,他主要实现了当前的系统(网上订餐管理系统)对数据的增、删、改、查等数据处理操作。
    由上述的阐述,我们可以得出MVC设计模式具有众多的优势,其中主要是有:

    低耦合性,高内聚性
    有利于开发者使用,极高的重用性
    可以简单方便的使用,快速的部署
    具有比较好的可维护性,易于未来的维护
    具有生命周期本身成本较低的优势
    软件过程化的管理方法更有利于开发的进行

    2 系统需求分析2.1 开发环境此次毕业设计“基于JSP的网上订餐管理系统”的开发计算机环境主要是:

    学校配发的戴尔品牌笔记本电脑,型号是惠普242G1
    处理器为英特尔酷睿i5 3代系列
    内存容量为 4GB
    显示屏 14英寸
    显卡芯片品牌NVIDIA
    型号NVIDIA GeForce GT 730M+Intel GMA HD 4000
    硬盘品牌希捷,容量500GB
    使用的系统是Windows7旗舰版 SP1

    在我开发完成的订餐项目系统中,主要使用的数据库是当前非常受欢迎的开源免费的数据库MySQL。进行项目系统开发,发布管理的软件也是MyEclipse工具。使用到的技术,主要是JSP技术,以及前端流行的脚本语言JavaScript,还有JAVA编程语言,HTML标签 等。此次完成的系统项目,订餐管理系统是不需要使用户安装客户端程序就可以使用,用户只需要使用浏览器就可以正常的,完整的使用订餐管理系统的全部所有功能。
    2.2 需求分析参照软件开发的标准规范,参考很多成功的软件开发案例,软件开发很重要的一环就是软件需求分析。软件需求分析当中很重要的一点就是通过这次分析,真正准确了解到用户的真实需求,完整准确地项目设计以及编码开发,这样才能在项目完成之后,交给用户一个满意的系统。不仅如此,同时还能在软件开发之初,对软件项目进行风险评估。最后完成一次完整的软件开发设计。
    软件项目的需求分析这个在软件开发过程中至关重要的一环,无论在什么时候都占有着不可忽视的地位,不能被省略或者敷衍而过。这正是因为它在整个的项目开发当中有着举足轻重的作用。因为软件项目的需求分析,才能在项目的设计开发之前,充分理解用户需要,准确的明确开发的方向。在开发的过程中知道。什么功能是必须实现的,什么工作是必须完成的。对系统进行全面的定义,准确,具体的需求,才能更好的实现在项目开发当中具有极其重要的功能。
    一个完善优秀的项目系统在开发之初,开发的初期就要准备充足的资料,进行项目的需求分析。只有在这个阶段完成一个明细,详尽的需求分析,我们才能在后期的设计,编码中更好的实现系统功能,完成一个用户满意的系统。
    2.3 可行性研究分析在开发的前期,对一个项目系统进行可行性分析,这是软件开发过程中不可或缺的工作。从多个角度,维度进行可行性分析,可以将项目分析的更加透彻具体,从项目的方方面面来深入理解项目系统。
    2.3.1 技术可行性分析在目前大多数的公司使用到的软件开发工具是MyEclipse ,例如我目前实习的公司就是用的是MyEclipse2016,因此我在我此次的项目系统,网上订餐管理系统就是用到了MyEclipse 软件开发工具。ava作为一当下最受欢迎关注的编程语言,历久弥新,而且方便灵活使用,是此次开发系统的不二之选。
    2.2.2 经济的可行性分析此次毕业设计,在整个项目系统设计编码完成之后,用户不需要在自己所在的客户端安装任何的客户端应用程序,只需要正常上网就可以完成对系统的访问和使用,除此之外,只要保证项目系统被正确的部署在服务器上,并且已经正常运行。那么,用户就可在任何连接互联网的浏览器上对系统进行访问。
    2.2.3 法律可行性分析此次毕业设计“基于JSP的网上订餐管理系统的设计与实现”,不仅可以提高餐厅对订餐的管理效率,为顾客对订餐需求上提供便利,提供更加贴心优质的服务,良好的用户使用体验。而且在整个的开发过程中都符合具体的软件开发流程及规范的。在项目的的开发过程中使用到的都是一些开源的免费的数据库以及开发人员主要使用的开发工具,参考以及使用到的一些代码,也都是在开源社区和论坛分享的主要开源代码。因此,此次的网上订餐管理系统是不存在任何问题,在法律上是可行的,满足法律可行性的所有要求。
    为了实现这些要求,我对界面页面的开发做到最大化的简单易懂,将功能实现尽可能的减少不必要的步骤,做到让顾客在最短的事件内可以快速订餐,突出餐厅餐品的特色。做到只要会使用电脑查看网页,就能成功点餐。因此,在操作可行性上也十分可靠。
    3 系统概要设计3.1 系统设计概述系统的设计阶段作为在项目开的发整个过程中,最为复杂的一环,其实也是在项目开发的整个过程中极为重要的的一环,必须经过,必不可缺少。在进行系统项目的设计之前,说明系统项目已经完成了对其自身的分析与设计阶段,这是一个具有发展性的过程,将从分析阶段得出的有些抽象的用户需求进行具体的实现,编码。在对系统项目的设计过程中需要考虑众多因素,例如在系统实现过程中所面对的内在环境和外在因素,对项目进行良好的业务和功能完善以及应该具有的敬业态度。
    作为主要的任务和目标,在系统设计阶段就是为了满足在系统分析阶段提出的用户要求.因此,要从用户的要求出发在不仅可以满足系统分析阶段得出的对系统项目逻辑功能的同时,还要充分考虑到多方因素,包括技术,成本以及时间环境等相关方面。对于不论是在正在进行中的整体的设计结构还是局部的每一个部分,都有相关的技术和针对性的应对方案。在合理的要求和基础上,对项目系统所必要的需求进行满足,并且提出该系统具体到实处的实行方案,使其可以得到完整的实现,完成最初的目标以及要求。
    系统设计的主要方向以及相关要点:

    在系统设计的阶段,主要工作涉及到了绝大多数都是技术以及专业知识
    为了满足用户的需求,在系统项目的设计过程中,可以对之前已经得出的系统项目分析结论作出一些修改,当然,这是基于非原则性上的
    使整个项目系统最终可以获得成功,不仅仅需要完善的分析,严谨的设计,更需要系统项目的设计环境。这个环境不仅仅是技术环境与管理环境,更是两者的有效结合。因此,这是急不可缺的重要一点

    有上述可知系统设计的要点,那么为了更好地设计系统项目就需要了解系统设计的原则:

    易用性原则:对项目做系统设计是为了,开发出的系统项目,可以满足用户提出的需求,达到用户的满意。这种满足需求表现在各个方面,例如:用户的业务需求,用户的逻辑需求,以及使用户处理部分业务时候更加简便,提高用户的用户体验
    开发阶段原则:开发项目系统软件,在系统技术选择阶段主要是站在系统的数据结构的角度进行设计与开发,而实现功能阶段则有不同,这是需要站到用户需求以及开发人员实现的角度考虑的
    业务完整原则:设计实现的项目系统软件,要保证在完成业务的同时保证数据的完整性,减少数据的无处,例如数据库中常常出现的脏读,误读等数据误差
    规范化的业务原则:在最初的设计阶段中,系统主要是完成用户需求要求的业务,但是在实际的操作总。对于系统项目的要求是更高的,它不仅要正确的完成用户的业务要求,也要面对完善的业务流程,以及系统安全性

    3.2 系统功能分析作为网上订餐管理系统主要是为顾客提供便捷,全面的订餐服务,重点要放在面对顾客的页面功能上,其次是管理员对餐品以及餐厅的管理,系统主要模块的设计:

    前台模块

    食品展示模块食品查询模块购物车模块收银台模块用户维护模块订单查询模块公告模块
    后台模块

    食品管理模块用户管理模块管理员维护模块订单管理模块公告管理模块留言管理模块

    如图3-1系统功能层次图所示。
    主要包括这几个方面,其中顾客订餐功能模块是主要重点模块,其次是管理员管理功能模块。当订餐系统管理员使用拥有管理权限的管理员用登录管理员页面的时候。可以看到目前订餐系统中保存的用户信息数据,菜品的数据,员工的数据以及状态,订餐的具体信息,采购原材料的具体情况,以及对顾客页面的管理,例如:留言板,以及营养小贴士等等。通过管理员对餐厅的管理,给予顾客最好的网上订餐服务。
    顾客订餐功能的相对应的模块:主要是顾客进入订餐系统网站之后,可以看到整体的订餐系统网站结构,进行系统的客户端登录,注册,以及对现登陆用户的信息修改,搜索菜品,点餐,订餐,支付,留言的相关功能,通过众多的订餐系统功能。
    管理员系统管理功能相关模块:主要是餐厅管理员从后台管理页面登录管理系统之后,对订餐系统的一些具体业务的调整,可以注册新管理员,以及对现有登录管理员信息的修改,查看分析管理目前注册的顾客的信息,查看修改调整现有菜品的具体情况,新增,删除,完善菜品;对目前餐厅原材料的采购和统计;以及对餐厅员工的管理,新增删除和调整状态;更重要的是可以对目前已知订餐的及时管理,还有就是对顾客订餐页面的一些人性化管理,查看顾客留言,修改给顾客查看的营养小贴士。
    通过这个两个主要的模块,可以完成订餐系统的综合管理,包括了顾客的主要功能,注册,登录,点餐等;以及管理员对餐厅多方面的管理,完成管理员对顾客的服务交互。

    3.3 系统用例图通过管理员用例图,可以清晰的,直观的看到管理员在网上订餐管理系统中对用户订餐以及用户本身的一些主要的操作:

    管理员可以管理餐品信息

    管理员可以添加菜品信息管理员可以删除菜品信息
    管理员可以管理订单信息
    管理员可以管理订餐系统中注册的用户信息

    管理员可以删除用户注册信息管理员可以修改用户信息
    管理员可以对留言进行管理
    管理员可以对用户进行管理

    管理员用例图图,如图3-2所示。

    通过用户(顾客)用例图,可以更加直观的理解在网上订餐管理系统中主要的客户端服务,用户主要使用的功能以及进行的操作,如下:

    游客可以注册会员信息
    游客可以浏览菜品
    游客可以查看公告
    注册会员的用户可以通过注册信息登录
    会员可以在订餐页面浏览菜品信息
    会员可以修改会员信息
    会员可以对正在进行的订餐进行修改
    会员可以对完成的订餐进行查询
    会员可以进行留言

    因此,为了可以更加准确,生动的理解上述所说的用户主要使用的订餐服务功能。绘制用例图就很方便的展示了用户使用主要使用的功能,用户(顾客)用例图,如图3-3所示。

    对于主要功能的业务处理,例如网上订餐管理系统整个业务逻辑处理中最为主要的一部分就是订单处理部分,为了更加直观的理解整个业务逻辑,最对订单的具体的操作如下:

    可以通过用户操作对订单信息,菜品信息进行添加
    可以通过用户操作对订单信息,菜品信息进行处理
    可以通过用户操作对订单信息,菜品信息进行删除

    3.4 系统流程图想对订餐管理系统进行操作,管理员需要登录订餐管理系统的后台管理系统,才能进行一系列的对应管理操作。如果登录时候出现异常,登录失败等状况,系统会要求管理员核对身份密码后重新登录。登录成功之后,就可以通过订餐管理系统的后台模块对整个订餐管理系统进行正确有效的管理。对订单的处理,对菜品的修改,添加,删除。对员工的添加,删除,管理。对原材料的采购登记。订餐管理系统目前的概况,都可以从订餐管理系统的管理员模块进行查看,分析,以及做出及时的相应调整。
    如图,是订餐管理系统的后台管理员模块操作的基本流程图,通过路程图,可以更为直观的看到管理员进行登录操作时的系统业务流程,进行登录,成功进行模块的管理,失败则重新登录等操作,如图3-4管理员流程图所示。

    4 数据库设计与实现4.1 数据库的结构设计一个项目系统软件的设计开发,数据库可以说是必不可少的,没有数据库,用户的数据无法保存,系统的使用人员无法处理数据,那么整个系统可以说是没有意义,以及没有任何使用价值的。在系统项目中,数据库就是用来给用户,管理员等各种使用系统的角色进行数据存储以及取出等交互动作的。不仅如此,根据数据的数据结构的不同,数据库还会对应有不同的存储方式。
    网上订餐管理系统,主要是使用流行的关系数据库MySQL,MySQL是一个开源的免费的关系型数据库,在开发者中极为流行,极为受欢迎。他的众多优点,例如:开源,免费使用,对服务器占用更小,速度更快,是系统更加流畅。这些都使得,系统软件开发的陈本较低,用户体验更佳。
    此次,我们毕业设计“基于JSP的网上订餐管理系统的设计与实现”中主要使用到了MySQL数据库,以下,就对主要的数据表结构进行描述与说明。
    4.1.1 概念结构设计本数据库为满足网上订餐系统的要求,保证使用者信息准确充分的同时,系统的安全性也同样重要。所以,至少要拥有以下功能:

    建立数据表保存使用者注册、登录、验证等功能所需要的数据
    建立两张表,分别保存食品分类信息和食品的详细信息所需要的数据,对食品分类信息分类管理
    使用者确认下单后出现的订单应当记录,包括订单号、地址等详细信息
    订单自动生成滞后,需要记录订单的状态
    除系统管理员外,其他人不能进行系统维护,所以要建立一张表保存管理员的信息
    使用者会对餐品提出意见,那么应该有留言表,留言表内含标题、日期和留言详情

    根据以上信息,网上订餐系统的E-R图如图4-1所示。

    4.1.2 表概要说明网上订餐管理系统主要包括了9张数据表,分别是餐品菜品信息数据表c_book,用户顾客注册数据表表member,管理员数据表admin,餐品菜品类别数据表c_booktype,用户评论数据表comment,订餐车数据表gouwuche,营养小贴士数据表news,订单数据表num,订单详情信息数据表orderbook。其中最为重要的5张数据表,将会在详细描述其表结构。
    4.1.3 数据表的结构餐品菜品信息表c_book
    餐品菜品信息数据表主要是用来保存菜品的基本信息,价格,菜名,描述等,该表的结构如表4-1所示。



    字段名
    数据类型
    长度
    主键否
    描述




    id
    int
    4

    ID


    name
    varchar
    50

    菜名


    author
    varchar
    50

    厨师


    price
    varchar
    50

    价钱


    number
    varchar
    50

    编号


    type
    varchar
    50

    类别


    Sum
    varchar
    50

    数量


    Remark
    varchar
    50

    描述


    tate
    varchar
    50

    原材料


    imgpath
    varchar
    150

    菜品图片



    管理员信息数据表admin
    管理员信息数据表,主要是适用于保存管理员的基本信息。表结构如表4-2所示。



    字段名
    数据类型
    长度
    主键否
    描述




    id
    int
    4

    ID


    name
    varchar
    50

    用户名


    quanxian
    varchar
    10

    权限


    pwd
    varchar
    50

    密码



    菜品类型数据表 c_booktype
    菜品类型数据表,主要保存了当前订餐系统的菜品类型,类型可以根据餐厅的需求,管理员对其进行增加,删除,以及修改等操作管理,如表4-3所示。



    字段名
    数据类型
    长度
    主键否
    描述




    Id
    int
    4

    id


    name
    varchar
    50

    菜品类型名



    用户(顾客)注册信息数据表member
    用户注册信息数据表主要保存了,使用订餐管理系统的用户注册的信息,这张数据表极为重要,表结构如表4-4所示。



    字段名
    数据类型
    长度
    主键否
    描述




    Id
    int
    4

    id


    name
    varchar
    50

    用户名


    pwd
    varchar
    50

    密码


    sex
    varchar
    50

    性别


    realname
    varchar
    50

    真实姓名


    age
    varchar
    50

    年龄


    card
    varchar
    50

    身份证号


    address
    varchar
    150

    地址


    phone
    varchar
    50

    电话(手机)


    email
    varchar
    50

    电子邮件


    code
    varchar
    50

    邮政编码


    type
    varchar
    50

    会员



    订单详情信息数据表orderbook
    订餐详细信息数据表,主要记录了顾客订餐之后,完成的订餐,订餐中主要记录了此时用户完成的订单的详细信息。数据表的结构如表4-5所示。



    字段名
    数据类型
    长度
    主键否
    描述




    id
    int
    4

    id


    userid
    varchar
    50

    用户id编号


    bookid
    varchar
    50

    菜品id标号


    booksum
    varchar
    50

    菜品数量


    times
    varchar
    50

    订餐时间



    5 系统的实现5.1 前台模块首页作为网上订餐管理系统,展现给用户的客户端前台页面是整个项目中最为重要的一环,而首页也是使用户的留下主要印象,重要的得分点之一。一个好的首页能为系统做良好的推广效应,展现系统的主要功能,使得用户可以通过简单快捷的熟悉上手,掌握使用方法,实现自己当前的需求。前台客户端页面首页,运行效果如图5-1。

    如图5-1,我们可以看到,用户使用的首页展示了系统客户端的主要功能,包括,用户的登录,一些管理员希望用户看到的信息,以及目前餐厅主要的菜品,还有就是重要的模块功能导航栏,通过导航栏的点击,用户可以进入相应的功能模块,实现自己目前的需求,包括:详细的点餐,会员中心,订餐车,留言,找回密码等主要用户使用功能。
    首页的部分JSP页面代码:
    <table border="0" width="99%" cellspacing="0" cellpadding="0"height="100%"><tr><td><% ArrayList alNewly = (ArrayList) request.getAttribute("books"); ArrayList alType = (ArrayList) request.getAttribute("type"); int tem = 0; int x = 0; if (alNewly.size() % 3 == 0) { tem = alNewly.size() / 3; } else { tem = alNewly.size() / 3 + 1; }for (int n = 1; n <= tem; n++) { %><table cellspacing="0" cellpadding="3" width="710" border="0"><tr><% for (int i = n * 3 - 3; i < alNewly.size(); i++) { ArrayList alNewlyRow = (ArrayList) alNewly.get(i); %><td align="middle" width="710"> <table border="0" cellspacing="0" cellpadding="0"><tr><td colspan="2" align="center" bgcolor="#FFE3BB"><font color="#ff9900"><% for (int j = 0; j < alType.size(); j++) { ArrayList alTypeRow = (ArrayList) alType.get(j); if (alTypeRow.get(0).equals(alNewlyRow.get(8))) { %><a href="servlet/SearchServlet?types=<%=aTypeRow.get(0)%>"><%=alTypeRow.get(1)%></a><% break;}}%></font>
    5.2 用户注册登录管理用户在使用订餐管理系统客户端页面进行订餐。首先需要登录系统,登录之后才能享受订餐系统带来的便捷快速的订餐服务,如果当前还没有可以登录的账号,首页提供有注册用户的入口。针对已经登录的用户,若果想对自己当前所使用的用户信息进行一些调整,系统也提供了会员中心管理页面,来满足此类用户的需求。如图5-2为用户登录功能的页面:

    用户进行登录之后就可以进行点餐,搜索等相应功能的操作了。用户登录的程序流程图如图5-3所示。

    在用户进行注册成为系统的正式用户之后,就可以进行功能的使用了,但是如果出现对当前用户信息的变更操作,就可以在用户的会员中心,对当前登录的用户信息进行修改,如图5-4为用户会员中心页面效果图:

    5.3 用户订餐管理功能订餐管理系统,作为用户使用的客户端的主要功能就是给用户带来便利的网上点餐服务,此次设计实现的基于JSP的网上订餐管理系统,点餐服务主要通过两个页面来展示菜品使用户进行点餐操作,一是首页点餐,首页会展示目前主要的菜品,以及销售排行和新上菜品,根据这些推荐信息,可以给用户带来更加贴心的用户体验;二是搜索点餐,可以通过首页上方的工具栏,点击进入搜索点餐页面,通过菜品的名称或者菜品所属的类别进行针对性的搜索,然后进行点餐,如图5-5为首页点餐页面效果图。

    如图5-6为搜索点餐页面效果图。

    搜索点餐页面,通过针对性的搜索可以使用户快速的找到自己需要的菜品,进而完成自己的点餐过程。
    进行菜品搜索的servlet部分主要代码是:
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Validate vd = new Validate(); String name = vd.getUnicode(request.getParameter("name")); String types = vd.getUnicode(request.getParameter("types")); String sql = "select * from s "; String[] args = {"id","name","author","publishing","number","price","storage","brief","type","tate","sums","imgpath","price1","sums1"}; if(name != null && !name.equals("")){ sql += "where name like '%"+name+"%'";//构建对菜品名称查询的SQL语句 } if(types != null && !types.equals("")){ sql += "where type='"+types+"'";//构建对菜品类别查询的SQL语句 } SelectBean sb = new SelectBean(); ArrayList al = sb.select(sql, args); request.setAttribute("search", al); RequestDispatcher rd=request.getRequestDispatcher("/qiantai/search.jsp");//跳转到前台菜品搜索页面 rd.forward(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); }
    当用户找到自己心仪的菜品之后,进行点餐操作,所选菜品点餐成功之后,将跳转到订餐车页面,订餐车页面将展示目前为止,用户所选的菜品,如图5-7为订餐车页面效果图。

    在购物车页面中,用户可以清晰的看到目前所点的菜品信息,也可以根据目前自己的需求对已经点的菜品进行操作,例如修改数量,或者删除目前选中的菜品,甚至清空,如果认为还有所需要的菜品,可以点击继续点餐,进入点餐页面,继续点餐操作。当用户认为菜品足够,可以点击收银台,进行订单的提交。
    进行提交之后,将进入收银台页面,点击在线支付,将提供支付宝链接,这样就可以支持网上在线支付,使得用户可以付款进而完成当前的订单。如图5-9为收银台页面效果图。

    5.4 用户其他功能操作页面网上订餐管理系统,不仅能让用户进行注册,登录,修改信息的操作,更重要的是让用户得到良好的订餐功能体验。因此,用户除了可以操作上述的订餐页面之外,也可由有其他更加人性化的功能,例如在此次毕业设计“基于JSP的网上订餐管理系统”中出现的营养小贴士,以及在线留言功能。
    营养小贴士可以用过管理员在后台进行编写,让点餐的用户看到,提供更加贴心的服务,而在线留言功能可以让用户对当前订餐管理系统中存在的问题,以及改进意见进行表达,达到更好的交互体验。如图5-10为用户在线留言页面效果图。

    5.5 后台管理员登录,注册功能作为一个订餐管理系统,仅仅有用户功能的页面是远远不够的,要提供更加全面的服务,为餐厅管理员提供功能管理页面就显得十分重要。通过系统的后台管理管理页面,对餐厅做出实时的管理,了解用户点餐情况以及目前员工的管理,这样才能更好运作系统,使得用户拥有更好的用户订餐体验。
    如图5-11为后台管理员登录页面效果图,5-11为注册管理员,以及修改管理员页面效果图。

    通过登录,管理员可以进入后台管理页面对订餐系统进行管理,可以对当前登录管理员进行修改以及添加新管理员。

    5.6 后台管理员菜品管理管理员通过添加新菜品,以及修改原有菜品,对订餐系统中的菜品进行调整,通过添加菜品的类别可以对菜品进行更加完善的管理。添加菜品时候,通过添加菜名,原材料,价格,图片,以及添加目前拥有的菜品类别等信息,来给用户展示一道菜的方方面面,这样使用户通过网络放心的进行订餐。如图5-13为添加菜品页面效果图。

    5.7 后台员工及会员管理管理员登录后台管理系统之后,不仅能对现有系统注册的会员进行管理,还可以对当前餐厅的员工进行管理,可以添加,删除,修改员工信息,根据目前员工的工作状态也可以在系统中进行标注。添加了员工搜索功能,这样方便了网上订餐管理系统,后台管理模块对员工的综合管理,如图5-14为员工管理页面效果图。

    5.8 后台材料采购管理作为一个订餐管理系统,要将每一天做菜使用的原材料进行统计管理,这样才是一个完善的订餐管理系统。对于原材料采购的记录管理,这样更能方便餐厅管理员,对整个餐厅进行全面的管理,做到对每一天的食材的把控,部分食材采购量的调整,对餐厅运营的成本的管理把控。如图5-15为原材料采购管理页面效果图。

    通过对原材料的统计把控,以及对一段时间的采购单种类及数量的分析,可以知道什么时候需要采购什么材料,采购的数量的参考量,采购的具体方向。对近期,原材料价格走向进行统计分析,得出对餐厅最为合适的采购方案,避免不必要的采购,或采购的数量不准确,导致的餐厅管理成本的提高,这都是需要注意以及及时避免的。
    5.9 销售订餐及统计管理作为网上订餐管理系统,对于当前订餐订单的管理是不可或缺的,因为只有对近期订单进行分析才能知道,用户喜欢的菜品,进而进行针对化的应对,挺高服务质量,对销量高的菜品背后的工作者—厨师,进行奖励管理,提高工作效率,菜品的质量保证。对近期采购单的统计,有效的看出采购方向,和采购数量,为今后采购提供了有力的数据参考保障,避免采购人员出现不必要的事物,餐厅承担不必要的损失。如图5-16为销售订单管理页面效果图。

    如图可以看到,管理页面提供了多样的搜索条件用来搜索符合条件的订餐,例如:用户id,菜品名称,订购数量,这些搜索条件可以快速定位符合条件的订单,然后反馈给管理员来进行订单的管理。
    除此之外,还有统计管理功能,如图5-17为统计管理功能页面效果图:

    如图,统计管理页面可以清晰,完整的看到当日的订餐销售量,销售信息,以及当日对原材料的采购量信息,这方便了管理员对餐厅的管理,也为用户提供快速,优质的使用体验实现了坚实的保障。
    使管理员对当前餐厅的实时状况有了深刻的认识,哪些菜品销量高,需要提前准备,原材料需要大量采购;哪些菜品销量过低,需要减少原材料的采购,甚至下架。近期的用户更喜欢,哪些类别的菜品,是否与天气季节相关,需要对员工厨师进行具体化的调整,提供了有力的数据佐证,与数据分析的资料。这都对今后餐厅的发展十分重要,也是网上订餐管理系统可以被餐厅使用的重要原因之一。
    6 系统测试在大学四年的专业知识学习中,可以得知。作为完整的规范的软件开发流程,在完成系统设计,编码开发之后,进行软件测试是非常重要的一环。是对完成开发,即将投入使用的系统的一次性能以及质量的综合鉴定。在项目正式上线使用之前,进行的必要工作。也是对项目最初的需求分析,系统的总体设计,编码开发的检验,多方面工作的综合最终审核。
    6.1 测试方法在项目进行完整的整合与交互中,对项目系统进行全面的测试,对项目的整体进行问题的查找,在这个过程中耗时相对而言较多。但是也正是因为系统测试的存在,使得系统有了综合质量的保证。
    为了确保网上订餐系统的稳定运行,本节对主要功能模块进行测试。
    6.2 测试流程写好测试的数据以及案例,并对测试数据进行设计逻辑的处理,得出期望结果。
    6.2.1 前台首页测试
    查询模块的测试:首先点击主页正中间的查询栏,在查询栏里中输入要查找的菜品关键字,如果弹出所查找菜品的信息,则说明该模块可行。对该模块进行大量数据的测试,验证其成功无错误
    菜品分类浏览模块的测试:单击页面左边的菜品分类信息,选定某一种类后,系统会弹出属于该类别的所有菜品信息。对给模块进行大量数据的测试,验证其成功无错误,该模块能够完整地实现功能

    6.2.2 购物车模块测试在本模块中首先对修改数量单元进行了测试,如果填写的数量为可行的有效数字如1、2、3,则系统提示修改成功,如果输入的制服非法,系统默认修改数量为1。通过随机数据的测试,验证其成功无错误。假如使用者订购了同一个商品,系统就会对该商品的购买数量进行累加。
    然后对购物车是否能满足使用者的购买数量进行测试,向购物车中添加大量的食品,查看购物车是否会发生崩溃现象。经过测试,购物车完全满足设计要求,达到了预期目标。
    6.2.3 菜品管理模块测试
    添加功能的测试:在菜品添加的功能下,对于已经选定的菜品名、菜品信息、菜品的图片、价格、特价、菜品种类进行添加。通过下拉的选择列表选择菜品的类别,对于菜品图片的添加,需要选择本地的菜品图片,然后上传,当所有必须的食品信息都已经填写完毕的时候,即可上传添加。完成添加以后,随机使用几组不完整的数据对本功能进行测试,均显示失败
    删除功能的测试:以上述添加的这一条记录为例,点击删除按钮,会跳出是否删除的提示信息,点击确定按钮之后,系统返回删除成功的信息。对于菜品分类信息的删除,则需要在本分类之下已经没有菜品信息,否则将不能删除

    6.2.4 会员注册模块测试在会员注册模块中涉及到了三项数据,项目分别为密码和确认密码、使用者真实姓名、住址、性别、E_mail、QQ。测试这个模块准备的数据有:

    979332、979332、王艺博、太原市万柏林区、男、123456@qq.com、123456
    岑志云、12345、1234岑志云、太原市万柏林区、男、bzhi@123.com、6434634

    点击注册按钮,输入第一组数据,单击注册按钮网站会提示表单信息不能为空,因为表单信息要全部填写,而昵称没有填写。接着测试第二组数据,两次所输入的密码并不一样,系统会弹出提示。
    6.3 系统测试结果当本次毕业设计完成完整的项目开发之后,对本次的“基于JSP的网上订餐管理系统设计与实现”,进行了相应的测试,主要的情况如下:
    在项目开发的过程中,每一个进程的每一步都需要被全面的考虑到,从而确保系统在个个时期具备可控性和稳定性。本章注重对前台首页、购物车模块、使用者注册模块和商品管理模块进行了详细的测试说明。对这些模块进行大量数据的测试,验证其成功无错误。
    参考文献[1] 康牧,JSP动态网站开发实用教程,清华大学出版社,2009.
    [2] 戴维尔,JavaScript程序员教程,电子工业出版社,2010.
    [3] 杨学瑜,高立军,软件开发过程与项目管理,电子工业出版社,2008.
    [4].唐友国 湛洪波著.JSP网站开发详解.电子工业出版社2008年10月.
    [5]卫红春等著.信息系统分析与设计[M].北京.清华大学出版社.2009.
    [6] 张文静 林琪著.JSP程序设计.人民邮电出版社.2005.
    [7] 张孝祥、徐明华, JAVA基础与案例开发详解, 清华大学出版社, 2009.
    [8] 张洁才,Java web应用开发教程,科学出版社,2005.
    [9] 戴维尔,JavaScript程序员教程,电子工业出版社,2010.
    [10] James D. McCaffrey等著.NET软件测试自动化之道[M]. 北京.电子工业出版社.2007.
    [11] 黎连业、王华、李淑春,软件测试与测试技术,清华大学出版社,2009.
    [12] 张大方 李玮等著.软件测试技术与管理[M].湖南.湖南大学出版社,2007.
    [13] (美)Elliotte Rusty Harold著.Java Network Programming.东南大学出版社 .2005.
    [14] (美)H.M.Deitel,P.Jdeitel著.Java程序设计教程(第五版). 清华大学出版社.2004.
    [15] (美)David flanagan著.Java技术手册(第五版).东南大学出版社.2006.
    [16] (美)John J.Patrick著.SQL基础(第二版).清华大学出版社.2004.
    16  留言 2020-08-04 12:30:59
  • 基于Struts2+Spring+Hibernate+MySQL网上体育商城的设计与实现

    摘 要如今我们生活在一个互联网时代,随着智能手机与网络技术的日益发达,电子商务空前发展,许多商品的销售也逐渐从有形的市场转向虚拟的网络,为了满足人们购买体育用品的需求,网上体育商城应运而生,目的是在体育商城与消费者之间建立一座高速、便捷的网上信息桥梁,从而可以节省用户的时间、方便他们购买,使其永远走在时代的前沿。
    本系统的设计严格遵循软件开发流程,使用MVC模式,采用开源框架Struts2、Spring、Hibernate进行开发,使用java语言编写,后端的数据库采用MySQL,通过Spring配置文件与数据库进行无缝连接,应用可以跨平台的Web应用技术与SSH结合开发的网上购物系统—网上体育商城,通过使用这些框架,使开发过程中的逻辑更加清晰,更有层次,也简化了代码的书写,更好的了解了Web应用程序和这些开源的框架技术,熟练了使用框架开发的流程。
    该体育商城网站的前台页面非常简单明了,当用户第一次访问该商城时,可以清晰的看到商城中的新款商品与销量排行,可以非常方便的挑选到自己需要的商品,后台的管理也很方便,管理员可以对商品、订单等进行管理,所以该网上体育商城的创建可以更好地解决人们因没有时间到实体店而不能买到自己需要的体育用品的问题,商家使用该系统,也可以方便管理,提高工作效率。
    关键词:网上体育商城;Struts2;Spring;Hibernate;MVC
    AbstractNowadays,we live in an era of the Internet,With the development of smart phones and network technology, the unprecedented development of e-commerce,many goods s-ales have gradually shifted from the tangible market to the virtual network.In order to meet the needs of people to buy sporting goods,Online sports malls came into being.The aim is to establish a high-speed and convenient online information bridge between the sports mall and the consumers,which can save the user’s time and make them easy to buy and keep it at the forefront of the times.
    The design of the system strictly follow the software development process, the use of MVC model, the use of open source framework Struts2, Spring, Hibernate development, the use of java language, back-end database using MySQL,through the Spring configuration file and database seamless connection, the application can be cross-platform Web application technology and SSH combined with the development of online shopping system - online sports mall,by using these frameworks, the logic of the development process is clearer, more hierarchical, simplifying code writing, better understanding of Web applications and these open source framework technologies, and proficient in the use of framework development processes.
    The front desk page of the sports mall website is very simple and clear, when the user first visit the mall, you can clearly see the mall in the new goods and sales ranking, can be very convenient to pick their own needs goods,the management of the background is also very convenient, the administrator can manage the goods, orders, etc., so the creation of online sports mall can better solve people because there is no time to the store and can not buy their own needs sporting goods,businesses use the system, you can also facilitate the management, improve work efficiency.
    KEYWORD:Online sports mall; Struts2; Spring; Hibernate; MVC
    第1章 前言1.1 系统开发背景伴随着互联网加时代的到来,智能手机的不断普及,过快的工作节奏,使人们在紧张繁忙的工作之后,没有大把的时间再去逛商场购买物品,因此很多人选择在网上商城购买自己心仪的物品。我们生活中常见的体育用品从外表观察,品种繁多,实体店无法有足够大的店面来展示所有物品,有些喜欢锻炼的朋友没有时间去实体店挑选,而且现在的网上购物环境越来越好,买到的东西如果不满意还可以免费退换,人们也乐于尝试在线购买。所以网上体育商城在互联网上纷纷出现。
    由于我国的互联网已经基本全面覆盖,速度很快而且信息量也很全面,方便了人们的生活。就在网上销售体育用品的商城而言,销售理念其实非常简单明了,就是尽最大的可能帮助顾客在第一时间寻找到自己需要的体育用品。对于喜欢锻炼的人来说,网上体育商城近在咫尺,并且二十四小时营业,只要顾客来访问店铺,肯定有客服招待,只要你有网,就可以随时浏览和购买商品,不再需要亲自跑去商店,一家一家的跑,只要打开电脑访问商城就可买到自己所需要的体育商品,而且顾客在网上商城看到的商品要比实体店里多的多,下单也很方便,同时还减少了购买过程中的支出,现在时间对于每个人来说都非常宝贵,网上购买体育商品可以节省大量时间,这对于那些没有时间经常逛实体店或其住所离店面较远的顾客来说,无疑是一个好的选择。所以我认为该网上体育商城一定会有大的发展空间。设计该系统的最初目的就是要实现在线销售体育商品,顾客可以注册会员、浏览商品、在线留言、购物下单等一系列功能,可以保证顾客不用出家门就能够在该体育商城购买到自己非常喜爱的商品,最终用户可以买到自己喜欢的商品,商家也可以获取更多的利润,形成一个互利的局面。
    1.2 国内外研究现状现如今,随着智能手机的飞速发展,越来越多的人已经习惯了在网上购买商品,因此最近几年来,国内出现了很多大的网上体育商城,主要是买一些专业的体育用品和一些运动类的服装,大家平时所访问的有淘宝、天猫、京东、虎扑、优个网等等,这些网站上的商品都是品牌直接授权,正品保障,在业内的口碑不错,还有一些有名的体育类的品牌商家,也把线下的实体店转到了线上,比如李宁、361、安踏等等,他们也有专门卖自己品牌商品的网上商城。
    国外使用互联网的时间要比咱们早,网络技术的发展相对咱们也要强,因此国外的网上商城的发展也是相当不错的,比较有名的有亚马逊,在这个网站上面可以买到自己喜欢的很多商品。
    纵观国内外的发展,我感觉网上体育商城是网络购物中不可缺少的部分,因为在网上购买体育商品能够弥补传统购买方法的很多缺点,互联网加传统购物行业,既为需要购买商品的顾客提供了方便,也使商家尝试了一种新的销售手段。
    现在网络正处于大力发展的时候,各行各业都需要计算机的辅助加以提高效率,购买体育用品更应该求助于快速并且方便的网络工具——网上体育商城。
    1.3 系统开发目的及意义在各行各业竞争日益激烈的今天,工作的效率和质量,是每个企业都要面对并且重视的问题。如果网上体育商城的系统开发成功,有些着急需要使用产品而没有时间的客户,将不再需要去实体店寻找,现在Wifi的覆盖率也非常广,可以在任何地方,拿出自己的手机或电脑,登上体育商城的网站,挑选自己需要的商品,下单订购就好了,非常的方便,顾客使用这样的系统,既可以节约时间,又能挑选自己喜欢的商品,非常省事,而商家使用这样的系统,可以提高办事效率,把以前对销售员的开销能省下来。
    随着这种购物网站的不断出现,计算机和网络技术的不断进步和提升,个人电脑和智能手机的增加,使人类的信息传播方式和生活方式都得到了很大的改变,人们的网购也会越来越频繁,这无形中也促进了互联网在中国的发展,对提高我国的经济发展水平也是有利的,所以我认为开发这个网上体育商城,对人们的生活有诸多的好处,值得开发。
    第2章 相关技术工具介绍2.1 Struts2与MVCStruts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,Struts2中对于用户的请求是通过拦截器来处理的,当用户在客户端对浏览器发出HTTP请求,根据web.xml配置,该请求被FilterDispatcher接收,根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton,Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证,Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面,返回HTTP响应到客户端浏览器,简单的说,就是用户在页面发出一个请求,通过struts找到对应的方法进行处理,处理完成把结果返回。
    MVC模式是项目开发中最常用的设计模式,英文即Model-View-Controller,模型里有JavaBean,JavaBean的主要工作是负责数据模型,进行业务逻辑和访问数据库,视图中有JSP,JSP可以允许在HTML中插入JAVA代码,控制层里有Servlet,Servlet的作用是接收请求和控制应用程序,当用户在客户端发送请求时,服务器响应客户端的执行过程是,先执行Servlet,Servlet调用JavaBean,JavaBean访问数据库,数据库返回数据给JavaBean,Servlet调用了JavaBean之后,转向JSP页面,然后JSP页面就可以动态的显示数据呈现给用户,主要目的就是把大量的数据分开展示,也就是模型层和视图层的分离,中间用控制层来协调,起着一个类似中介的作用,将模型运算的结果发送到视图,视图负责将这部分数据显示给客户。

    模型(Model)相当于人体的骨骼,里面封装了各种拥有私有属性和set/get方法的类
    视图(View)相当于人体展示的动作,将数据用控制层提供的方法从模型层中取出来放在视图层中展示出来
    控制器(controller) 相当于人体的大脑,封装了各种读取模型层中数据的方法,主要控制各种业务逻辑

    这三者之间的关系如图2-1所示。

    2.2 HibernateHibernate是一个开源持久框架。它是由Gavin King在2001创建。简单来说,Hibernate是一个轻量级的ORM(对象关系映射)解决方案或java工具、Hibernate框架进行简化,用java开发应用程序与数据库的交互。Hibernate框架的主要优点是:比起JDBC,Hibernate没有很多复杂的SQL语句需要书写。使用Hibernate框架,没有必要在JDBC中完成所有不必要的繁琐工作;域对象与关系数据库的高效映射。因此,没有必要集中精力管理数据库中的数据;它的性能更好,速度快,因为使用缓存内部处理。Hibernate框架在数据库中自动创建表,因此不需要手工创建表。它简化了复杂的连接,由于这种简化,它很容易从多个表中获取数据。Hibernate支持继承、集合和关联。Hibernate有自己的独立数据库查询语言。
    2.3 SpringSpring 是一个开源框架,通俗来说是用来关联两个对象的,对象和对象之间不再需要实例化,只需用在spring的配置文件中配置一下就可以确定两个对象之间的依赖关系,spring的两大特点是依赖注入和控制反转,简单点来说,就是在代码中对对象实例化以后,需要调用对象的方法,但是使用了spring以后,就可以直接在代码中指向需要的对象和对象的方法,只需要在配置文件中自动把类注入,不需要自己在写new,是系统的耦合度降低了,这样做的好处是只需要知道对象的名称而不需要知道对象具体是干什么的,一旦对象改变只需要简单的改一下配置文件即可。
    AOP又称为面向切面编程,它的实现原理还是用了反射,通过对某一个种类的方法名做监控来实现统一处理,面向切面编程最大的用途就是提供了事务管理的能力,事务管理非常的复杂,而我们的目的是去访问数据库,而不想管理太多的事务,所以spring在我们访问数据库之前,自动帮我们开启事务,当访问数据库结束时,会自动提交或回滚事务,这样可以使我们写的代码更加的简洁,注重于它实际需要解决的问题。
    2.4 开发工具以及环境2.4.1 Eclipse工具说明Eclipse是IBM公司投资开发的,是一个开源、功能强大、最为流行的Java编程工具,因为可以免费下载使用,所以大多数人都是将Eclipse作为Java的集成开发环境使用。
    Eclipse里的插件非常多,基本上能想到的插件都有,可以无限的进行扩展,尤其是公司做项目时,用eclipse找各种插件非常的方便,而且eclipse的图形化界面非常好,不会出现字体丑的问题,它提供的快捷键非常的好用,还可以设置自动补全,它里面的很多功能都是为java量身定做的,用它编写java代码非常的快。
    2.4.2 MySQL工具说明MySQL数据库软件中的一种,是当前比较受欢迎的开源的小型关系型数据库管理系统,因为它可以免费使用,而且体积小、速度快,所以受到很多中小型企业的喜爱,其被甲骨文公司收购后,由甲骨文进行开发、分发和支持。MySQL可以运行在所有的操作系统上,包括Linux,UNIX和Windows,可以说应用非常广泛,但是MySQL最常用于是基于Web的应用程序,由于它的性能优越,搭配JAVA和Apache tomcat可组成良好的开发环境。
    2.4.3 Tomcat服务器介绍Tomcat 服务器是SUN公司官方推荐的服务器和Jsp容器,是由java语言开发的,它只是一个servlet容器,是Apache的扩展,主要用来处理动态网页,是jsp的服务器之一,如果网页是纯html静态网页,通过浏览器就可以直接解析查看效果,但是网页一旦用jsp来生成动态网页,浏览器就无法直接解析了,需要用Tomcat服务器来进行解析,在这次开发中也应用到了。Tomcat部署很简单,只需要先将Tomcat添加到eclipse中,然后把需要运行的项目添加到Tomcat中,然后启动Tomcat服务器,Tomcat会自动检测这个文件,通常情况下第一次运行速度比较慢,而后运行速率会加快,因为在第一次部署完成后Tomcat要将jsp转化为Servlet文件后才能编译。
    2.4.4 系统运行环境
    操作系统:Windows7及以上
    Web服务器:tomcat7.0
    浏览器:Fire Fox、Google Chrome

    第3章 系统的分析3.1 系统可行性分析随着我国科技力量的不断提高,互联网的覆盖率越来越广,智能手机的技术越来越成熟,使用它的人也越来越多,在互联网上的各种各样的信息都很多,关于购物的信息也很多,网上购物已经是如今互联网中不可缺少的一部分,人们可以在任意时刻在手机上挑选自己喜爱的商品,我相信要不了多长的时间,人们就可以在网络世界上购买他们在现实生活中不方便买到的所有商品。可行性研究的目的,就是看如果这个项目开发成功,能否达到最初的开发目标,把它的最大价值发挥到极限。要想达到这种效果,必须它的可行性进行分析,预估一下开发成功的概率和成功以后的可用性。
    系统的可行性分析主要包括经济可行性,技术可行性,操作可行性和法律可行性。本系统的可行性分析如下:
    3.1.1 经济可行性由于开发网上体育商城所需的电脑,在电脑商城可以很容易的购买到,所需的软件也可以在官网上方便的下载,因此开发环境可以很容易搭建好,系统的主要成本主要集中在本系统的前期开发上和后期的维护上,前期的开发可能相对后期的测试辛苦一点,但假设通过自己的努力,成功的完成了此项目的开发,将来如果投入使用,卖家可以提高自己的工作效率,一个人就可以打理一个很大的店铺,节省了很多的劳动力,买家如果使用这个网站购买商品,可以大大的节约自己的时间,坐在家里就可以买到自己需要的体育商品,不需要再去大商场跑,由于系统的设计不是很复杂,开发的时间也不是特别长,所需提供的人员、花费的金钱都比较少,所以从经济可行方面来考虑此系统是可以开发的。
    3.1.2 技术可行性该网上体育商城有关技术方面的开发,主要包括对主要代码逻辑的实现、网站前台页面的设计和后台数据库的建立。对于前端客户端的开发应该做到功能完整、使用方便,对于前台页面的设计应该做到美观大方,对于后台数据库应该做到数据完整和一致、数据库安全性较好。
    开发该体育商城系统所采用的语言是主流语言java,数据库用的是Mysql,目前jsp是比较火的制作动态网页的技术,因此使用它作为处理动态网页的技术,这些开发所需用的技术都可以很方便的寻找到资源,并且能够顺利完成开发工作,因此从技术方面来讲开发此系统是可行的。
    3.1.3 操作可行性网上体育商城是一个基于Web的体育商城。系统的前台界面非常直观,不管你是不是第一次使用这个网站,打开网页就知道如何操作,无论用户在什么地方,只要有网,都可以在电脑上通过浏览器访问该体育商城,所有的操作都非常简单,商家不需要进行专门的培训学习,就可以对商城里自己的商品进行管理,买家就更不用说了,直接打开网站,浏览商品,有看中的直接加入购物车,付款就完成了,因此在操作上该商城的系统是可行的。
    3.1.4 时间可行性从现有的时间上来看,对于该商城系统的开发有将近四个月的时间,除过查询资料学习技术的时间,剩下的时间足够实现该项目的最基本功能,因此该系统在时间上是可行的。
    3.1.5 法律可行性从法律上讲,开发此系统所使用的所有技术、所有软件工具都是开源的、合法的,不存在触犯法律的行为,系统的设计都是自己独立完成的,没有抄袭任何系统的源代码,完全是自己的设计思想,并且该体育商城系统是为毕业设计准备的,并没有投入任何商业市场获得利润,因此该体育商城系统从法律上讲是可开发的。
    3.2 系统需求分析根据对该网上体育商城的功能进行分析,为了满足用户的需求,该系统应该满足以下功能,接下来从前台的客户端界面和后台管理界面分别对该系统的功能加以描述。
    前台页面的功能主要包括:

    体育商品分类:当用户第一次访问该商城时,可以按照商品分类快速查找到自己所需商品是属于哪一类型
    所售商品描述:当用户看到某一商品时,可以很快看到这件商品的详细介绍
    商品销量排行:在该商城的客户端界面,用户可以清晰的看到该商城畅销的前五件商品
    商品的搜索栏:当用户不想逐一类别的查找自己需要的商品时,可以在搜索栏进行查找,该搜索栏必须支持模糊查询,用户只输入关键字,就可以快速查找到自己需要的
    会员留言:该功能是用来专门给用户提供反馈意见的机会,用户对在该商城买的商品有某些意见,可以进行留言,或者对该商城有某些建设性的建议,也可以进行留言,总之,就是为用户提供一个与商家交流的窗口
    会员的注册登录:该功能是一个购物网站不可缺少的主要功能,用户只有注册登录成功后,才可以进行后续的一系列操作,不然就只能浏览商品,不能进行购买
    购物车:该功能也是一个购物网站必须的功能,用户不可能看中一件商品就去付一次款,这样对商家和用户都不是很方便,用户可以先将看中的商品加入购物车中,等挑选结束后,再进行统一付款
    查看订单:该功能主要是方便用户查看自己的订单,当用户下一次单时,商家可以受理此订单并进行发货,用户收到货后,可以确认收货并评价商品
    查看个人信息:当用户在该商城进行注册时,需要填写自己的个人信息,如姓名、性别、地址、邮箱、电话、QQ等信息,注册成功后,该商城会把每一位注册成功的用户信息保存下来,用户登录成功后,可以查看并修改个人信息
    联系我们:该功能主要是给用户提供商家的联系方式,当用户有某些需求时,可以直接跟商家电话联系
    网站公告:该功能主要是方便商家对顾客发布一些公告,如商城搞活动或有新商品上架等
    后台登录:在前台页面的下方提供一个管理员登录后台的按钮,管理员点击该按钮,可以进入后台登录界面,方便管理员进行管理

    后台管理页面的功能主要包括:

    系统参数:该功能可以使管理员看到该商城系统的版本号和作者及作者的邮箱,有需要改进的地方可以直接和作者联系
    管理员维护:该功能可以让管理员对自己的密码进行修改
    注册会员的管理:管理员可以对前台已经注册的一些会员用户进行管理,当某些会员用户有非法操作时可以进行删除,防止对该商城系统造成大的损害
    商品管理:该功能使管理员对该商品的类别和具体商品进行管理,对商城所售商品的类别进行增加、修改和删除,对具体某一件商品进行添加和删除
    订单管理:当某一用户在前台下单后,管理员在后台可以查看订单明细,受理此订单或删除该订单,方便管理员对订单的管理
    销量管理:管理员在后台可以对该商城所售商品的销量进行管理,商品的销量按从高到低进行排列
    留言公告管理:管理员在后台可以查看或删除用户的留言,发布最新的公告或删除过期的公告
    退出后台:该功能主要是方便管理员的退出,当管理员想退出后台管理页面时,点击此按钮,可以迅速返回到后台的登录页面

    以上就是该体育商城的前台客户端页面和后台管理页面所需要实现的所有功能。
    3.3 业务流程分析网上体育商城的主要工作流程为:启动服务器并进入系统界面,用户可以浏览网页,挑选自己喜欢的体育商品,管理员的权限是最大的,既可以管理整个系统,又可以管理已经注册的会员用户,对所售体育商品进行添加、修改和删除,还可以处理客户订单,以及对商品销量进行查看管理、查看留言。
    用户在该体育商城系统中的业务流程图如图3-1所示。

    该系统是将程序技术与生活中的实际应用紧密结合的好的案例,利用编程语言的技术改善了人们的生活,使不懂得技术的人也能与计算机进行交互,并且在该系统中,为了提高服务的人性化,专门设计了一个交流平台,商家可以发布公告,买家可以进行留言,对店铺提出自己的建议,有利于系统的不断完善。并且此系统界面简单直观,操作非常方便,只需轻轻点击鼠标就可以完成相应的操作,功能也非常丰富,适合所有的购物网站,方便移植,需要的商家只需要对前台代码做小的改动,就能更新前台的系统界面,及时显示出新的画面效果,省去了更改系统源代码的复杂,对工作效率和工作质量的提高很有帮助。
    第4章 系统的设计4.1 系统的设计在该网上体育商城的设计过程中,突出了面向对象的设计理念,使用的开发模式为B/S模式,后台管理系统与前台客户端的处理层次分的很清楚,并且考虑到了不同用户浏览网页的方式不同,在页面的开始设置了一个搜索栏,系统的界面非常简单友好,用户在访问的过程中,操作方便,系统的响应速度非常快,占用的资源很少,可以满足大多数用户的购买需求,页面设计比较人性化,匿名用户第一次访问该网站,可以很轻松的找到自己想要的商品。在设计和开发这个系统时,模块化的设计理念也很突出,把一个大的系统划分成好几个小的模块,简化设计,有利于更好的开发。
    4.2 业务对象设计在该体育商城的系统设计中,普通用户的权限有注册会员、登录网站、浏览商品、查询商品、加入购物车、下单购买,因为普通的用户登录网站主要就是想买到自己喜欢的体育用品,所以拥有这些权限足够了,普通会员用户的用例图如图4-1所示。

    也有一些访问者可能是匿名用户,用例图如图4-2所示。

    在该商城系统中,核心的管理者是系统管理员,管理员对商城里的各个功能模块都可以进行操作,对商城里的所销售的体育用品信息也可以修改,处理客户的订单,并能及时的增加一些时下流行的体育商品,下架一些过时的体育商品,反馈客户的留言,发布公告,管理员的用例图如图4-3所示。

    4.3 业务流程设计4.3.1 业务流程图在该体育商城的系统中,普通的用户第一次访问商城网站时,不能立即购买商品,只能浏览网页,要想马上购买商品,就必须要注册会员,输入自己的基本信息,设置正确格式的用户名和密码,然后登录,就可以买喜欢的商品了,而要想进入这个体育商城系统的后台管理界面,身份必须要是管理员,输入正确的名字和密码后就可以进入后台管理界面。管理员成功登陆后可以对访问该网站的会员人员进行管理、对商品的基本信息管理、对订单、销量、留言等进行管理。
    根据以上的叙述,建立了普通用户的系统流程图,如图4-4所示。

    建立了管理员的系统流程图,如图4-5所示。

    4.3.2 系统前台功能图根据系统的需求分析,设计了普通用户的功能模块图,如图4-6所示。

    4.3.3 系统后台功能图根据系统的需求分析,设计了管理员的用户模块图,如图4-7所示。

    4.4 数据库数据库简单的来说,就是一个保存数据的小仓库,所有需要的数据都可以往里面存,现在我们生活中的各行各业都离不开它,最普通的例子,我们平时使用微信聊天,所有的好友,聊天记录都是存在数据库中的,我们手机里的联系人,短信也都是存在数据库里的,这也就是所谓的数据库,它产生于二十世纪六十年代,特别是最近几年,随着电子商务技术的不断发展,市场需求的不断变化,数据库不再仅仅具有存储数据的功能,而要满足对不同的数据进行管理的功能,现在各行各业的发展都有大量的数据,都离不开对数据的管理,为了科学的和有效的管理,都需要依靠数据库,因此数据库技术得到了广泛的应用。
    4.4.1 数据库需求分析该体育商城系统的数据库需求具体体现在对所有的注册会员的用户进行管理,对各种体育商品的情况进行管理,这就要求数据库能及时的更新数据,确保每一条数据都能够保存,保证对每个会员,每件商品进行有效的管理,为最终项目的成功运行提供保障。
    4.4.2 数据库概念结构设计数据库的概念结构设计在整个开发过程中非常的重要,没有一个好的概念设计,编码做得再好都是徒劳,一般可以利用E-R图进行数据库的概念设计,E-R图可用于描述各个实体之间的关系。
    经过对该体育商城系统的分析:
    得出一个系统管理员可以管理多个体育商品,而一个体育商品也可以被多个管理员进行修改,所以是多对多的关系,如图4-8所示。

    管理员实体的E-R图如图4-9所示。

    登录用户的E-R图如图4-10所示。

    每个体育商品的E-R图如图4-11所示。

    商品订单的E-R图如图4-12所示。

    4.4.2 数据库逻辑结构设计该体育商城系统的概念结构设计完成后,该数据库的逻辑结构设计可以参照概念结构设计转化过来。
    网上体育商城数据库中各个表的设计如下所示,每个表格表示在数据库中的一个表。
    描述管理员各个属性的表为管理员表 t_admin,主要包含管理员的ID号、用户名和密码,如表4-1所示。



    列名

    数据类型
    长度
    允许空




    用户序号
    userId
    int
    11
    主键


    用户名
    userName
    varchar
    50
    not null


    密码
    userPw
    varchar
    50
    not null



    描述商品所有类别的表为商品类别表 t_catelog,主要包含商品类别的ID号、类别的名称和具体描述,如表4-2所示。



    列名

    数据类型
    长度
    允许空




    类别序号
    catelog_id
    int
    4
    主键


    类别名称
    catelog_name
    varchar
    50
    not null


    类别描述
    catelog_miaoshu
    varchar
    5000
    not null



    描述公告信息的表为t_gonggao,主要包含某条公告的ID号、公告的标题、公告的内容、公告的发布时间和发布者,如表4-3所示。



    列名

    数据类型
    长度
    允许空列名




    公告序号
    gonggao_id
    int
    4
    主键


    公告标题
    gonggao_title
    varchar
    50
    not null


    公告内容
    gonggao_content
    varchar
    50
    not null


    发布时间
    gonggao_data
    datetime
    50
    null


    发布者
    gonggao_fabuzhe
    varchar
    50
    null



    描述用户留言的表为 t_liuyan,主要包含用户留言的ID号、留言的标题、留言内容、留言的日期和留言人,如表4-4所示。



    列名

    数据类型
    长度
    允许空




    留言序号
    liuyan_id
    int
    4
    主键


    留言标题
    liuyan_title
    varchar
    10
    not null


    留言内容
    liuyan_content
    varchar
    8
    not null


    留言日期
    liuyan_date
    varchar
    10
    not null


    留言者
    liuyan_user
    varchar
    4
    null



    描述商品具体属性的表为 t_goods,主要包含某件商品的ID号、商品的名称、商品的详细描述、商品图片和该商品所属类别的ID号,如表4-5所示。



    列名

    数据类型
    长度
    允许空




    商品序号
    goods_id
    int
    4
    主键


    商品名称
    goods_name
    varchar
    10
    not null


    商品描述
    goods_miaoshu
    varchar
    8
    not null


    商品图片
    goods_pic
    varchar
    10
    not null


    类别ID
    goods_catelog_id
    int
    11



    描述商品订单属性的表为 t_order,主要包含订单的ID号、某条订单的编号、订单的日期、订单目前的状态、订单的金额、订单的送货方式和付款方式,还有下此条订单的用户ID号,如表4-6所示。



    列名

    数据类型
    长度
    允许空




    订单序号
    order_id
    int
    4
    主键


    订单编号
    order_bianhao
    varchar
    10
    not null


    订单日期
    order_date
    varchar
    8
    not null


    订单状态
    order_zhuangtai
    varchar
    10
    not null


    订单金额
    order_jine
    varchar
    4
    null


    订单送货方式
    order_songhuodizhi
    varchar
    4



    订单付款方式
    order_fukuangfangshi
    varchar
    4



    用户ID
    order_user_id
    int
    4



    描述商品订单明细的表为 t_orderitem,主要包含该订单明细的ID、订单的ID号、商品的ID号和商品的数量,如表4-7所示。



    列名

    数据类型
    长度
    允许空




    订单明细ID
    orderItem_id
    int
    4
    主键


    订单ID
    order_id
    int
    4
    not null


    商品ID
    goods_id
    int
    4
    not null


    商品数量
    goods_quantity
    int
    4



    描述会员用户属性的表为 t_user,主要包含用户的ID号、用户名、密码、真实姓名、地址、性别、电话、邮箱和QQ号,如表4-8所示。



    列名

    数据类型
    长度
    允许空




    用户序号
    user_id
    int
    4
    主键


    用户名
    user_name
    varchar
    50
    not null


    密码
    user_pw
    varchar
    50
    not null


    真实姓名
    user_realname
    varchar
    50
    not null


    地址
    user_address
    varchar
    50
    null


    性别
    user_sex
    varchar
    50
    null


    电话
    user_tel
    varchar
    50
    null


    邮箱
    user_email
    varchar
    50
    null


    QQ
    user_qq
    varchar
    50
    null



    描述用户评价的表为 t_ping,主要包含该评价的ID号、评价某条订单的ID、订单明细的ID、所评价商品的ID、商品的名称、用户的ID、写该条评价的用户名、评价的具体内容和评价的日期,如表4-9所示。



    列名

    数据类型
    长度
    允许空




    评价序号
    id
    int
    4
    主键


    订单序号
    order_id
    int
    50
    null


    订单明细序号
    orderitem_id
    varchar
    50
    null


    商品编号
    goods_id
    varchar
    50
    null


    名称
    mingcheng
    varchar
    50
    null


    用户序号
    user_id
    varchar
    50
    null


    用户名
    loginname
    varchar
    50
    null


    评价信息
    info
    varchar
    50
    null


    添加日期
    adddate
    varchar
    50
    null



    第5章 系统的实现根据对该体育商城系统的需求分析,该商城的界面主要分为后台管理页面和前台客户端页面,用户只可以访问前台客户端页面,通过浏览网页来满足自己的购物需求,商城前端的所有功能都是通过后台的管理来实现的,所显示的所有商品信息都需要通过后台管理系统来增加、修改和删除,后台管理页面只有管理员可以访问。因为在后台需要对所有商品的信息进行处理,所以后台管理部分的开发比前台客户端要复杂。
    对于该体育商城系统,概括起来,主要实现了以下功能:

    前台部分

    商品分类:用户可以查看商品的所有分类,方便用户快速找到自己需要的商品商品描述:用户可以查看每件商品的详细描述销量排行:用户可以看到该商城中商品销售排在前五的商品商品搜索:用户可以搜索自己感兴趣的体育商品,该搜索栏支持模糊查询,只需输入关键字就可以查到会员注册:用户填写自己的基本信息,可以成为该商城的会员用户用户登录:注册成功后,可以登录该商城的网站购物车:用户看中一件商品不需要马上付款,可以先加入到购物车中,挑选结束后再整体付款订单管理:用户可以查看自己已下的订单,看是否被管理员受理,收到商品后,可以点击收货,并对商品进行评价留言:用户可以对网站进行留言,发表自己的建议或意见公告管理:管理员可以在后台发布公告,用户可以在前台进行点击看到公告的详细信息联系我们:提供网站的联系方式,用户有某些需求可以直接联系
    后台部分

    系统参数:管理员可以查看此刻系统运行环境管理员维护:管理员可以对自己的密码进行修改会员管理:管理员可以对该体育商城的用户进行删除商品管理:管理员可以对商品的类别进行添加、修改和删除,对具体某一类别的商品进行添加和删除订单管理:管理员可以查看用户订单的详细信息,还可以受理用户的订单或删除用户的订单销量管理:管理员可以查看该商城中所有商品的销售情况,按商品的销售量由多到少进行排列留言公告管理:管理员可以查看所有用户的留言或删除,发布新的公告或删除旧的公告退出系统:当管理员的所有操作都结束后,可以点击退出系统进行退出

    下面分别说明这些功能进行具体的说明。
    5.1 体育商城前台界面5.1.1 首页界面用户第一次登录商城时,可以在浏览器中输入 localhost:8087/tyypsc ,发出请求后,前台显示index.jsp,用户可以看体育商城主界面,主要分为三个div模块,上面为一块,下面分成左右两块,界面如图5-1所示。

    当用户刚打开该商城网站时,点击在线留言、我的信息、购物车、我的订单,都会提示请先登录,主要是通过以下代码实现的:
    <s:if test="#session.user==null"> alert("请先登录");//弹出对话框</s:if>
    新款上市主要是按商品ID号进行降序排列,关键代码如下:
    String sql="from TGoods where goodsDel='no' and goodsIsnottejia='yes' order by goodsId desc";//按商品ID号降序排列List goodsYesTejiaList=goodsDAO.getHibernateTemplate().find(sql);if(goodsYesTejiaList.size()>5){ goodsYesTejiaList=goodsYesTejiaList.subList(0, 5); //商品列表中的前五个商品品}request.put("goodsYesTejiaList", goodsYesTejiaList);
    5.1.2 商品分类对商品信息进行分类,既使商家方便管理商品,更有利于用户更快的挑选自己需要的商品,该商城的商品主要分为以下四类,点击每一类,都可以查看这个类中的所有商品,如图5-2所示。

    点击商品信息,可以查看该商城所售的所有商品,如图5-3所示。

    5.1.3 商品描述用户在商城主页面点击任意一张喜欢的商品图片可以跳转到一个新的jsp页面,在该页面用户可以看到该体育用品的基本介绍,和已购买用户的评价,如图5-4所示。

    5.1.4 销量排行根据顾客的喜欢程度,将销售情况较好的前五件商品展示出来,这样更有利于顾客的挑选,如图5-5所示。

    销量排行的关键代码如下:
    sql="select sum(goodsQuantity),goodsId from TOrderItem group by goodsId order by sum(goodsQuantity) desc"; //按照商品销售数量的多少进行降序排列
    5.1.5 商品搜索该搜索功能支持模糊查询,只要输入所需商品关键字,点击商品搜索按钮,调用goodsAction.java中的goodSearch方法,可跳转到goodSearch.jsp页面,可以查询到用户需要的商品,如图5-6所示。

    5.1.6 会员注册注册功能是购物网站最基本的功能,用户只有成功注册,才能继续进行接下来的一系列操作,在该体育商城中,当用户在前台页面点击注册按钮后,会弹出注册的jsp页面,显示一个填写信息的form表单,用户按照要求填写基本信息,check1方法会判断用户填入的信息是否符合要求,如果符合要求,点击确定按钮,提示注册成功,如图5-7所示。

    注册成功后,用户输入正确的用户名和密码,可以成功登录该网站,登录后点击我的信息,可以跳转到userXinxi.jsp页面,在该页面中,用户可以修改自己的基本信息,如图5-8所示。

    用户点击注册按钮后,填完基本信息,点击确定按钮时,会弹出操作成功,提示本窗口将在3秒后自动关闭,如下图所示,这个功能主要是通过以下代码实现的。
    function clock(){ i = i -1; if(i > 0) { document.getElementById("info").innerHTML = "本窗口将在"+i+"秒后自动关闭"; //先获取到id为info的标签 setTimeout("clock();",1000); } else { closewindow(); }}
    5.1.7 购物车购物车模块也是一个购物网站不可缺少的功能,用户可以将喜欢的商品先放入购物车中,然后点击导航栏中的购物车,会跳转到购物车的jsp页面,在这个页面中,用户可以查看自己已挑选的商品,还可改变购买数量,这里的个数后台通过正则表达式进行限制,只可以输入正整数,如图5-9所示。

    限制商品数量的关键代码如下:
    function modiNum(goodsId,quantity){ var r1= /^[0-9]*[1-9][0-9]*$/  //运用正则表达式限制为正整数 var val=r1.test(quantity); //str为你要判断的字符 执行返回结果 true 或 false if(val==false) { alert("数量必须是正数,请重新输入"); } else { document.getElementById("indicator1").style.display="block"; cartService.modiNum(goodsId,quantity,callback); }}
    如果顾客没有输入购买个数,也会弹出提示对话框,提示“请输入购买数量”。
    if(document.buy.quantity.value==""){ alert("请输入购买数量"); return false;}
    5.1.8 订单管理顾客可以在前台页面点击我的订单查询自己的订单信息,点击后会跳转到myOrder.jsp页面,如图5-10所示。

    如果自己已经收到货物,可以点击收获按钮,会显示收货成功的对话框。
    点击评价按钮,可跳转到orderDetailPing.jsp页面,这个页面可显示已购买的商品名称和图片,还可填写评价,如图5-11所示。

    5.1.9 留言顾客在导航栏点击在线留言,可跳转到liuyanAll.jsp页面,在这个页面可以发表问题,咨询,建议并进行提交,如图5-12所示。

    5.1.10 公告点击网站公告下的任意一条,可跳转到gonggaoDetailQian.jsp页面,该页面可详细介绍这条公告的完整信息,如图5-13和5-14所示。


    5.1.11 联系我们顾客点击导航栏的联系我们,跳转到lianxi.jsp页面,该页面可显示网站的联系方式,如图5-15所示。

    5.2 体育商城后台管理5.2.1 首页界面在该体育商城中,在前台页面的下方有个管理登录按钮,管理员点击后,可跳转到后台的登录页面,管理员按要求输入用户名、密码和验证码,就可成功登录后台管理系统,后台通过frame框架分成三部分,页面顶部为一部分,下面分成左右两部分,如图5-16、5-17和5-18所示。

    以下这段代码主要实现了后台登录时验证码的功能:
    public class RandomValidateCode {public static final String RANDOMCODEKEY = "RANDOMVALIDATECODEKEY";//放到session中的key private Random random = new Random();private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//从这里面随机产生一个字符串 private int width = 80;//图片宽 private int height = 26;//图片高 private int lineSize = 40;//干扰线数量 private int stringNum = 4;//随机产生字符数量 //获得字体 private Font getFont(){ return new Font("Fixedsys",Font.CENTER_BASELINE,18); } //获得颜色 private Color getRandColor(int fc,int bc){ if(fc > 255) fc = 255; if(bc > 255) bc = 255; int r = fc + random.nextInt(bc-fc-16); int g = fc + random.nextInt(bc-fc-14); int b = fc + random.nextInt(bc-fc-18); return new Color(r,g,b); } //生成随机图片 public void getRandcode(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类 BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR); Graphics g = image.getGraphics();//产生Image对象的Graphics对象,该对象可以对图像进行各种绘制操作 g.fillRect(0, 0, width, height); g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18)); g.setColor(getRandColor(110, 133)); //绘制干扰线 for(int i=0;i<=lineSize;i++){ drowLine(g); } //绘制随机字符 String randomString = ""; for(int i=1;i<=stringNum;i++){ randomString=drowString(g,randomString,i); } session.removeAttribute(RANDOMCODEKEY); session.setAttribute(RANDOMCODEKEY, randomString); System.out.println(randomString); g.dispose(); try { ImageIO.write(image, "JPEG", response.getOutputStream());//将内存中的图片以流动的形式显示到客户端 } catch (Exception e) { e.printStackTrace(); } } //绘制字符串 private String drowString(Graphics g,String randomString,int i){ g.setFont(getFont()); g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121))); String rand = String.valueOf(getRandomString(random.nextInt(randString.length()))); randomString +=rand; g.translate(random.nextInt(3), random.nextInt(3)); g.drawString(rand, 13*i, 16); return randomString; } //绘制干扰线 private void drowLine(Graphics g){ int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(13); int yl = random.nextInt(15); g.drawLine(x, y, x+xl, y+yl); } //获取随机的字符 public String getRandomString(int num){ return String.valueOf(randString.charAt(num)); }}

    通过frameset框架集,把后台管理界面分成了三块。
    <frameset rows="59,*" cols="*" frameborder="no" border="0" framespacing="0"> <frame src="top.jsp" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" title="topFrame" /> <frameset cols="213,*" frameborder="no" border="0" framespacing="0"> <frame src="left.jsp" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame" title="leftFrame" /> <frame src="version.jsp" name="mainFrame" id="mainFrame" title="mainFrame" /> </frameset></frameset>

    5.2.2 系统参数可以查看此刻该系统运行环境,如图5-19所示。

    5.2.3 管理员维护点击管理员维护,可以修改密码,如图5-20所示。

    5.2.4 会员管理点击会员管理,可以对该网站会员的信息进行查看和删除,如图5-21所示。

    5.2.5 商品管理该商城的商品管理主要分为两部分,一部分是添加和删除某个商品类别,另一部分是对具体某个类别的商品进行管理,如图5-22和5-23所示。


    5.2.6 订单管理订单管理主要包含三个功能,一是对用户刚买的订单进行受理,二是查看订单明细,三是删除任意一条订单,如图5-24所示。

    5.2.7 销量管理管理员点击销量管理,可查看该商城所有商品的销量情况,按从高到低排列,如图5-25所示。

    5.2.8 留言公告管理管理员点击留言公告,可以对用户的留言进行管理,添加商城公告信息或删除已发布的消息,如图5-26和5-27所示。


    点击退出系统就可返回到后台登录界面。
    由于该系统在开始设计的时候就没有考虑的复杂,所以系统界面比较简单明了,用户使用起来也非常方便,在此不再详细叙述如何操作。总而言之,该系统界面设计虽然简单,但功能齐全无遗漏,是该体育商城的最大亮点。
    5.3 配置文件说明在struts2中,通过Filter可以启动struts框架,在web.xml中的配置如下:
    <filter> <filter-name>struts</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
    在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作,struts.xml文件需要存放在src目录下,struts2读取到struts.xml的内容后,以javabean的形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,所以不需要每次都读取struts.xml文件,该体育商城系统中struts.xml的部分配置文件如下代码:
    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="liu" extends="struts-default"><action name="upload" class="com.util.upload" method="upload"> <result name="success">/upload/upload_re.jsp</result> </action> <action name="index" class="indexAction" method="index"> <result name="success">/qiantai/index.jsp</result> </action></package></struts>
    第6章 系统的测试6.1 程序调试一个系统从开始设计,到最终的开发完成,中间过程可能会出现各种各样的问题,也会时常出现一些意想不到的错误。对于在写代码的时提示的语法错误,程序在编译的过程中会自动报错,这类错误比较好发现,修改也比较容易,我们可以根据提示修改错误。但在开发的过程中,除了这一种错误,还会出现别的错误,当程序在运行的过程中,由于编写逻辑的错误,或一些不正确的操作,而产生错误的结果,这类型错误比较难解决,要想处理,必须要从根本上想办法,才能保证系统在后期成功运行,因此,在开发的过程中我们不断的要调试程序,发现错误立即处理,防止到后期累积了很多的错误,造成系统的开发失败。
    测试和调试一般被认为是一个层次,其实他们并非同一个任务。简单地说,测试是在已知程序存在某些问题而要做解决问题的工作,而调试则是在该系统已经具备能正常工作能力而进行的功能性测试的工作。
    6.2 程序的测试6.2.1 测试的重要性及目的迪杰斯特拉曾经说过:测试可以显示程序中有错误,他的希望是,该程序可以正确地通过某种实施过程,可以避免绝大多数的错误,所以有时候是没有必要进行测试的。这的确是个理想化的目标,对目前的实际程序开发而言,要省去测试这个过程显然不现实,所以应专注于如何测试,如何更快地检测程序错误,如何使工作更高效的完成。在一个系统的开发过程中,要不断的进行一系列的测试,使得软件能够正常运作。对于大部分时刻都是编码与测试相结合,完成此功能之后,对此功能做一些必要的测试,使系统更加合理,是软件质量保证非常关键重要的一部分。
    测试的重要性
    在软件的生命周期中,测试占据很大的一部分,有着重要的地位,千里之堤毁于蚁穴,如果前期的小错误没有及时发现并处理,到了后期可能会成为一个很大的错误。微软是世界上最大的IT公司之一,其中做开发的员工只有三成,而做测试的却占了七成,这表明测试过程在软件开发中是很重要的。在软件正式交付、运作之前,测试部门会对软件做一个比较全面的测设,保证软件运行过程中,不会出现大的问题。结合软件开发之前的可行性分析、概要设计、详细设计等各种设计,会对整个过程制定严格地测试计划,保证测试的全面性,不会有遗漏,因此测试在软件开发的过程中是值得重视的。
    测试目的
    在一个系统的开发过程中,软件测试的成功与否,直接影响到用户及自身的利益,避免大的错误造成不可挽回的影响,必须要进行测试,其主要目的,在一个成功运行的系统里,不断地发现新的错误,并对此进行分析,再交给技术部门进行改正,不断完善整个系统。保证所交付的产品是可用的、优秀的。对于比较繁杂的,不方便进行全面测试的,要根据用户的需求与实际应用,针对主要的选择进行,尽可能多的保证软件可以满足需求设计中的每一项内容。好的测试是什么,好的测试就是成功的发现到现在为止还没有发现的错误,一个好的测试员是要不断努力的在程序中找出错误,而不关注程序中正确的功能,所有工作都是围绕错误展开的。
    6.2.2 测试的步骤一个系统的测试与开发的过程非常相似,必须一步一步来,分步骤进行,而不能随便测试,前一步的测试内容都是下一步的基础。一个大的软件系统一般是由几个小的系统组成,而每个小系统又可以分成若干个模块。因此,对于项目的测试,也需要分步骤进行:

    代码审查:对于一个大的软件项目,代码的工作量着实不少,审查主要是对代码中的逻辑进行细致分析,看其是否合理
    单元测试:对于一个项目中的某一个小的模块进行测试,首先看一下它的编码有没有错误,然后看这个模块所实现的功能符不符合最初的设计要求,如果不符合,看需要从哪一方面进行改进
    集成测试:集成测试,是将该体育商城系统所划分的每个模块都结合在一起,同时进行测试,有的时候单个模块测试不会出现问题,但一旦进行整体测试,就会出现意想不到的错误,尤其是接口方面的错误,因此必须进行集成测试,看整个系统在运行起来有没有错误,如果各个模块之间不能很好的兼容,到开发的后期会出现很大的问题,对用户会造成很大的损失
    确认测试:随着单元测试和集成测试的完成,保证每个模块都没有问题,各个模块之间的组合也非常成功,接下来就该完成确认测试,确认测试主要是验证客户所提出的需求在该商城系统中有没有一一实现,对客户的要求能否满足,有没有遗漏某些功能
    系统测试:当整个的项目系统开发结束后,上面几步的测试也都完成,最后还要进行系统测试,系统测试首先验证客户所要求的全部功能系统能否全部实现,其次对整个系统所能承受的强度进行检测,比如当有很多用户同时访问该系统网站时,会出现什么情况,最后要对系统的安全性进行测试,例如当输入用户名和密码时,输入一个非法的或错误的数据时,看系统会出现什么结果,可以测出系统的抗干扰能力的强弱

    第7章 总结7.1 系统总结该体育商城系统采用的主要编码语言是主流语言Java,数据库使用的是MySQL,在开发时采用了模块化的设计思想,逻辑比较清晰,该系统满足了一般购物者所需要的基本功能,系统的前台界面比较简单,用户操作起来非常方便。
    刚开始时对整个网站系统的需求以及整体开发的流程和开发过程中各部分资源的分配进行了较为详细的分析,并在此基础上对于该系统的开发所需要的技术以及环境进行了较为准确的定位,从数据库到服务器以及其他的架构和框架技术都进行了确认,这些工作保证了开发的顺利完成。开发过程中又证实了数据库的设计,各功能模块的设计基本符合开发需求。开发完成后对整个系统进行了较为全面的测试评估,其中的用户模块的用户,注册,登录,用户个人信息修改功能完全实现,商品购买模块实现的也很完美,管理员模块中会员管理对用户信息的修改,删除功能也是完全实现。
    其次,该系统的开发流程也遵循了传统的软件开发流程,需求分析,概要设计,详细设计,系统总体设计,详细模块设计,最后系统测试。经过这一系列的流程,逐步实现了整个系统的完整,后期系统的情况也是比较稳定的。
    最后,虽然之前对开发该系统所需要的技术都有过接触,有一定的基础,但在开发时候才发现自己掌握的其实是远远不够的,特别是Html和CSS这块对于网页的布局,颜色设计,动画等这些都没有做的很好,使得整个网站看上去较为单薄,并且视觉体验上不算优秀。代码方面因为有框架的引入使得整体代码结构有了一定的规范,但是个人对于代码的注释还是不够优秀,总体来说代码这块还是不够优秀,只能达到最基本的要求,改进的空间还很大。
    7.2 设计收获与心得此次毕业设计是对我们大学四年所学知识的一次综合检测,在实现这个系统的时,不仅用到了平常所学的所有知识,而且自己通过查资料学了很多新知识,在设计中所遇到的问题,也培养了我与人交流、解决问题的能力,在开发项目的过程中,使我编写代码的技术也得到了训练,并且有了很大程度的提高。
    在开发此体育商城的系统时,我也有很深的体会:在开发一个新的项目时,想一次做到完全的成功是不可能的,刚开始肯定会有很多考虑不到的地方,只有通过不断地改进,才能达到最初的目标;在开发的过程中,用到了以前从没有接触过的技术,要不断的练习,才能熟练掌握新的技术;一个商城系统要想让更多的人喜欢使用,界面的设计必须吸引人,在设计界面的时候,我们要多听取别人的建议;在开发的过程中肯定会遇到困难,当系统遇到自己无法解决的大问题时,我们要虚心的请教别人,弄清楚其中的道理,真正理解。
    虽然开发这个商城系统只有短短的几个月的时间,但还是让我从中学到了很多知识,认识到了自己的不足,还需要不断地努力学习。
    7.3 展望该体育商城系统从设计到开发完成,仅仅用了四五个月的时间,还有自己的知识储备量不足,技术能力也不是特别高,开发出的系统肯定有很多不足的地方,改进的空间还是非常大的,比如:对用户信息进行加密、前台界面设计的美观性、后台功能的强大等很多方面需要改进,我相信,随着自己不断地学习,技术能力的提高,会使系统的功能不断强大,用户的使用评价越来越高。
    参考文献[1] 赵伟,李东明 Java语言 北京航空航天大学出版社 2011
    [2] Bruce Ecke Thinking in Java 机械工业出版社 2007
    [3] 王珊,萨师煊 数据库系统概论(第5版) 高等教育出版社 2014
    [4] 李爱萍,崔冬华,李东生. 软件工程. 人民邮电出版社 2014.
    [5] 赵志超,吴铁锋 基于J2EE的网上体育用品店的设计 数字技术与应用 2012
    [6] 沈洪,朱军 Photoshop图像处理技术 中国铁道出版社 2011
    [7] 谢希仁 计算机网络 电子工业出版社 2013
    [8] Patton.R 张小松等译Software Testing 机械工业出版社 2006
    [9] D Raggett HTML 4.01 Specification 1999
    [10] 朱少民 软件测试 人民邮电出版社 2013
    3  留言 2020-08-03 19:00:17
  • 基于JSP和MySQL的健身俱乐部会员管理系统的设计与实现

    摘 要目前我国虽然己经开发出了应用计算机操作的健身俱乐部管理系统,但管理软件,管理方法和管理思想三者往往相脱节。造成我国健身俱乐部信息管理系统极端化的缺陷。在国外健身俱乐部已经有了一整套涉猎了人力资源开发和管理,市场销售,广告制作投放计划到健身项目规划的管理系统,由此可见国外拥有了更加全面具体强大的俱乐部管理系统并已投入了使用并为其带来了巨大利益。
    设计与实现信息管理系统要根据俱乐部对顾客及其员工管理的实际情况来设计。能更好的方便俱乐部对顾客、员工和健身设备进行集中的管理工作。本信息管理系统包括的功能为:修改登录密码、工作人员管理、会员卡类型管理、会员资料管理、健身器材管理、教练执教管理、安全退出系统。
    本系统的发展适和了健身俱乐部的自动管理需求,经过对现实的需求探讨,本系统采用了JSP和MySQL数据库管理系统作为基础工具进行开发。运用了B/S的3层结构模式和瑞典MySQL AB公司开发的MySQL数据库,并在设计初期。首先,完成了数据库系统的搭建,在设计中录入了一些数据;其次,完成了数据库、开发环境软件和运行环境软件的衔接并最终实现了本系统的运行。JSP拥有Java语言“一次性编写,各处都能运行”的特点,用JSP为基础做成的这套俱乐部管理系统可以轻松移植到任何的平台进行运行。所以用JSP来开发是完全可行的。
    关键词:健身中心,JSP,B/S结构
    AbstractAlthough our country has developed a fitness club management system application of computer operations, but management software, management methods and ideas of the three phases are often disjointed. Cause of extreme fitness club information management system of the defects. Fitness club in a foreign country has been set forays into human resource development and management, marketing, advertising plans to launch a health project planning management system. Thus abroad have a more specific and comprehensive management system and powerful clubs have been put into use and its enormous benefits.
    Design and implementation of information management systems to be designed according to the club management to customers and its employees actual situation. To better facilitate the club for customers, employees and fitness facilities for centralized management. The information management system includes functionality for: modify login password, member type management, staff management, member information management, fitness equipment management, coaching management, safe withdrawing.
    The system is suitable for the development of automated management needs and fitness club, after the demand for the real discussion and MySQL database management system as a the system uses the fundamental tool development. The use Sweden MySQL AB of the B/S three-layer structure model and developed in MySQL database and the early stages of design. First, build a complete database system, input some data in the design; secondly, finished databases software development environment and run time environment software interface and ultimately the operation of the system. JSP has the Java language, “once written, everywhere can run” features, based on JSP made of this club management system, you can easily migrate to any platform for running
    Key words: Fitness center, JSP, B/S structure
    第一章 绪论随着计算机科学与技术的迅速发展,微机技术己经涉及到了人们生活和工作中的每一个角落,与之而来的高性能、高效率的计算机软件给其他各行各业的技术更新和科技革命都起到了推动的作用。
    健身一种体育项目,尤指包括徒手或用器械的体操,体操可以增强力量、柔韧性、增加耐力、提高协调、控制身体各部分的能力,从而使身体强健。如今社会,很多人都长期处于紧张的环境压力。例如,面临高考升学、商务应酬、企业经营、人际交往、职位竞争等社会活动。所以,没有过多的时间进行运动,而进入亚健康状态。而健身俱乐部的出现,可以使人们用少量的时间来系统的、专业的锻炼身体,使人们获得健康。健身俱乐部的发展适应人们需求,所以俱乐部也需要更好的信息管理系统来帮助俱乐部管理,俱乐部有了发展,人们就能更好的利用时间进行锻炼。
    如今的欧美国家,健身己经不是追求时尚,而是获得健康的方式。它己经逐步走入人们的生活,成为生活必需品。越来越多的人也开始接受健身这种活动。而健身俱乐部发展的也越来越迅速。在我国,俱乐部的数量和质量都远远落后于欧美等国家。在经济快速发展的同时,人们的生活水平也在不断的提高,所以越来越多的人对通过健身来锻炼身体的意识也越来越强。花在这上面的费用和时间也越来越多。所以,中国的健身业己经蓬勃发展,在北京,就出现了很多的著名俱乐部。
    开发该健身俱乐部信息管理系统的目的是使健身俱乐部的工作效率得到提高。只要根据俱乐部对顾客及其员工管理的实际情况来设计就能更好的方便俱乐部对顾客、员工和健身设备进行集中的管理工作。
    1.1 课题背景中国加入WTO之后,越来越多的世界级企业和集团进入中国市场,加速了我们的经济发展,同时也对本土的企业和集团公司带了很多挑战,相对陈旧的低效率的企业管理体制己经不能适宜新的市场竞争的需要,为了能够适应新的挑战,利用企业局域网对企业资源进行合理利用,使企业管理规范化、科学化己经成为一种必然的趋势。企业管理系统的迅速发展改变了传统的管理手段,随着我国经济不断的持续发展,人民生活水平的的提高,也提高了管理效率,健康也就成为了人们追求高质量生活中十分关心的问题。科学高效的健身项目越来越受到广大消费者的青睐和认可,各种专业的健身俱乐部会所的出现为追求科学高效的人们提供了有利条件。
    经调查,我国当前健身俱乐部会所拥有超过数万家,规模有大也有小,相对比较出名有中体倍力和青鸟等健身俱乐部,他们拥有学习国外的先进健身俱乐部管理经验以及利用Internet网等先进计算机技术,使得自己的业务由单一的通过俱乐部平台面向广大客户上升到了客户足不出户就可以享受到专业新闻的指导和科学健身知识,方便了客户的利益也在同行业中成为了佼佼者,他们的成功不仅归功于科学管理还要归功于计算机网络带来的便利,这是利用计算机软件及网络技术扩大其业务成功的典范,但是国内健身俱乐部应用这种模式的运营的又有多少呢?其实并不多,大多健身俱乐部的管理模式和业务交流还停留在传统的,低效率的用人管理的阶段,现代管理的需求致使人工管理模式己经越来越不能满足,一方面是因为每天的客户量越来越多,手工处理的方式避免不了会在业务和财务等方面上出现短板,给客户和俱乐部带来了不必要的麻烦,于此同时也给俱乐部的经营和管理带来了很多弊端;另一方面经营者也经常会由于财务管理和会员的管理而感到“头痛”,随着俱乐部的经营规模的不断壮大,上面的问题会越来越明显,一定会成为俱乐部发展的绊脚石。无论规模大小,各个健身俱乐部为了更好的生存和发展就必须在管理模式上引进先进的管理软件系统,从而在会员管理,会员管理,产品管理,新闻管理,项目管理,及活动管理等方面提高和改善了手工方式所不能达到的效果和价值。
    将计算机管理应用在健身俱乐部的管理中也是近年来随着计算机被广泛的应用于各行各业之中的一个典范。健身俱乐部管理此外,一个集成开发和管理公司在每个主要部分(自、项目产品,活动)代表更先进的管理理念和管理方法健身对现代化管理的重要工具,这房子我们健身房越来越广泛的应用。
    目前健身俱乐部会所的计算机管理水平还是很低,我也曾实地走访过几家健身俱乐部,他们的计算机应用是处在刚刚起步时的使用阶段,但是俱乐部采用计算机软件管理业务、财务和活动记录等诸多问题即将成为健身俱乐部会所和其他相关企业发展的必然趋势和必不可少的工具。
    1.2 课题研究的目的和意义中国2008奥运会成功举办,全民健身的热浪一浪高过一浪,最近这些年,各种层次、类型的健身俱乐部在全国各地不断的发展起来。这象征着中国体育基制改革逐步向纵深的方向发展,基层的体育组织机构正在不断的发生改变,制度的创新不断出现。健身俱乐部的不断兴起受到全国各界人民的欢迎。随着社会不断的进步,人民的富足,城市化发展的加速,越来越多的占地被高楼大厦所取代,加之环境的恶化和工作节奏的加快,高效科学的健身俱乐部逐渐被广大消费者所认可,为向广大消费者提供专业的健身服务,实施专业化、科学化的管理是俱乐部共同追求的目标。作为经营者,应该培养市场意识,将工业与健身行业相结合,建立自己的管理系统,在硬件上达到一定的高度,在软件上要有自己的一套管理模式。只有具备了高效地管理、个性化的服务,才会使这个行业有更长远地发展。
    在当今这个人民素质逐渐提高、社会经济不断发展的时代,网络技术己经进入高速的发展时期,信息化的时代变革给所有的领域不断带来新的机会。跟着电脑办公自动化的普及,公司的自动化管理、顾客的自动化管理出现了,这全都都归功于电脑发展的巨大奉献,网络的世界里蕴藏着无数的生机,这只有你想不到的事情,没有你做不到的。
    计算机的办公自动化己经将管理从传统模式解放出来,但只是作为一个机器对它来说是一种巨大的浪费,由计算机联合所组成的互联网正在改变整个管理思路与体系。他可以实现单位管理最根本的需求:投入最少的资源做最有效率的工作。将计算机装备起来,然后根据自我的管理理念,顾客信息管理不但需要创造一个全新的客户数据管理与事业关系管理系统,而且还要将它放在最前面,换掉经营者的以前的大部分办公程序,将会更大程度的减轻管理者的工作任务,提高事业人员的管理效率,用一个更加优秀可靠的事业形象呈现在客户们的面前,并且在客户资料的收集、统计等方面更加的快速,更能迅速有效的予给管理者参考。这些都为我们开发这样的软件提供了良好的条件,使经营现代化、科学化成为可育昌。
    随着北京奥运会申办成功,人们的健身意识不断增强。物质和意识的双重保障便注定了中国健身业的发展会越来越好,而这正是一个管理公司得以生存并发展的基础。现在中国健身行业的发展现状差不多和国外20年前一样,国内俱乐部的历史只有短短四五年,经营者在管理上没有丰富的经验。我们正好可以利用国外成熟的经营管理经验来为中国健身产业服务并促进其发展。管理公司虽然引进国外的管理系统,但由于国情的不同,所以经营模式和数据不能照搬,而是借鉴过来适应国内的具体需要。即使是一套管理标准,在不同的地方,不同的俱乐部,也要配合其具体情况而定。
    目前,国内己研究开发了一些健身俱乐部的管理软件,比较突出的有贝尔健身俱乐部管理软件、飞跃健身俱乐部管理软件、飞扬健身俱乐部管理软件等,这些软件的功能较为全面,涉及了客户、经营者、会员等的多方面的管理,使俱乐部的经营管理更为科学化、技术化,方便化。现在国内较为出名的大型健身俱乐部例如中体倍力,青鸟都建立了较为完善的基于C/S模式的网络管理机智,是百姓可以足不出户就可以想享受到网络带来的方便快捷的专业的健身指导和服务。
    另外,随着信息技术的日益成熟和普及,健身行业的不断发展和盛行,与国外的交流与合作将成为一个必然趋势。随之带来的问题就是要实现俱乐部管理的网络化。但就网上收集的资料来看,目前多数的软件都是PB, Delphi等开发完成的,这些只能用于俱乐部内部的经营和管理,却脱离了互联网这个大平台,客户本可以足不出户就可以了解自己的健身状况和健身俱乐部相关信息,这种开发己经与客户的需求背道而驰,为了能够使客户和健身俱乐部更好的联系和互动,采用C/S模式开发动态的网站,实现数据库的动态维护将是一个发展方向。我们可以借鉴己开发软件的优点,根据实际需求调查,在此基础上开发出功能较为完善的基于Web的网络管理系统,JSP是在ASP和PHP技术之后,一种新兴的动态网站开发技术,它不像ASP技术的安全性较差,也不像PHP技术扩展性较小,在继承了他们优点的基础之上,还能够支持XML技术,使得功能更加强大,逐渐成为新兴网站开发的首选技术,这次我们用JSP开发这一软件,正迎合了这一技术发展趋势,对我们来说也是一次挑战。
    1.3 课题发展前景及趋势本课题是采用JSP技术进行开发的基于WEB的健身俱乐部管理系统,随着近些年Internet的飞速发展,传统的提供静态网页的Web服务己经无法满足广大Internet用户的需求,动态网页技术随之诞生,如ASP, PHP, JSP等,其中JSP 由于具备“一次编写,随处运行(Write Once,Run Anywhere)”的特点,在WEB应用开发中得到了广泛的应用。应用JSP技术开发健身俱乐部管理系统能够使JSP在网络技术中的性能得到淋漓尽致的发挥,调查研究表明,大多数健身俱乐部管理软件的主要问题是受阻基于健身俱乐部会所内部的管理的,脱离了与广大客户的联系,它变的孤立而且功能受限,一个脱离了广大客户的管理系统,就必将在未来的市场中无用武之地。更与现今的常用的软件开发模式B/S, C/S模式背道而驰,加之这样JSP技术可以支持多种运行平台,运行速度快,难易程度低,扩展性安全性好,数据库支持多等特点,为设计者、使用者和维护者提供了方便。
    核心问题之一在当前发展趋势的发展健身俱乐部管理系统和互联网结合引发需求为健身俱乐部管理互联网规模的健身俱乐部,因为根据越来越多的业务信息交换、健身俱乐部和俱乐部之间扩大管理进一步追求不同,更方便数据共享政策,没有燃烧我的摩托车这己经满足于一个简单的方法来共享文件和信息,但不再是吗?看看核心大人,数据库自己的健康,我将客户机器系统。互联网络系统结构转换的原因对服务器模型,虽然它总是根据俱乐部自身的进步,特别是大型健身俱乐部,国际发展工作我必须跨地区可能己经有一些客户,甚至国际体系和数据传输,信息共享和表示当互联网可以跨境区域,用户可以享受伟大的不可避免的俱乐部坚决持有许多客人突然,他占领的激烈的市场竞争能力,互联网网络之间的联系,更多的顾客和健身俱乐部与客户服务工作与客户提供的俱乐部信息管理系统网络通过一个良好的快速查询、分析,建立科学的管理手段,健康俱乐部的大规模数据管理和报告的一种多层次的总结,所以健身房网络管理迫切需要另一个互联网俱乐部管理提供各种服务管理如何结合管理支持系统和互联网网络技术提供有机网络,一组查询为什么时间管理俱乐部内部的一个综合管理系统,己经报告的基础,一个重大的挑战。
    1.4 课题内容简介本课题解决的问题是如何通过设计一个切实可行的软件系统来解决健身俱乐部管理目前存在的一系列问题。该课题是基于Windows的操作系统,后台数据库采用MySQL,前端使用JSP进行开发。
    本课题所研究的健身俱乐部管理系统主要由六个模块组成,即人事资料模块、预约管理模块、器材管理模块、会员管理模块、系统管理模块。运行本系统先由登陆界面窗口进入用户权限认证窗口,通过用户名和口令验证的用户方可进入系统主窗口进行浏览与操作。

    会员管理子系统:包括会员个人信息的修改、会员的增加和删除、会员信息查询以及会员卡的管理
    预约管理子系统:包括健身预约信息的录入、和删除
    人事资料管理子系统:包括人事资料的添加、删除、修改功能
    器材管理子系统:包括器材信息的录入、增加和删除、修改、产品信息查询
    考勤、工资管理子系统:包括考勤、工资信息的录入、增加和删除、修改
    系统维护子系统:包括修改密码、修改用户名、删除管理员和增加管理员四个功能模块
    用户管理模块:管理员添加、删除、查询用户基本信息和设置用户权限

    1.5 开发工具此次设计主要采用MyEclipse加Tomcat后台服务器进行,设计过程中页面主要使用JSP技术完成,下面对MyEclipse、Tomcat和MySQL数据库进行简要介绍。
    1.5.1 MyEclipseMyEclipse,是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSP, CSS, Javascript, SQL, Hibernate。
    1.5.2 TomcatTomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当运行Tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
    1.5.3 MySQLMySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。
    数据库是数据的结构化集合,计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分。
    MySQL服务器还有一套实用的特性集合,这些特性是通过与我们用户密切合作而开发的。在我们的基准测试主页上,给出了MySQL服务器和其他数据库管理器的比较结果。
    MySQL服务器最初是为处理大型数据库而开发的,与已有的解决方案相比,它的速度更快,多年以来,它已成功用于众多要求很高的生产环境。尽管MySQL始终在不断发展,但目前MySQL服务器已能提供丰富和有用的功能。它具有良好的连通性、速度和安全性,这使得MySQL十分适用于访问Internet上的数据库。
    每次发布的MySQL服务器均是可用的,权当用户尝试源自“灰色区域”的代码时才会出现问题。当然,新用户不了解“灰色区域”是什么。因此,在本节中,我们介绍了目前已知的这类区域。本节所做的介绍主要针对MySQL服务器5.5版和更高版本,在最新版本中,更正了所有已知和通报的缺陷,但“缺陷”一节所列的除外,这类缺陷与设计无关。
    1.5.4 JSPJSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
    Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端就是一个HTML文本,因此客户端只要有浏览器能浏览。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。JSP技术的优点:

    一次编写,到处运行:除了系统之外,代码不用做任何更改
    系统的多平台支持:基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/.net的局限性是显而易见的
    强大的可伸缩性:从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力
    多样化和功能强大的开发工具支持:Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下
    支持服务器端组件:Web应用需要强大的服务器端组件来支持,开发人员需要利用其他工具设计实现复杂功能的组件供Web页面调用,以增强系统性能。JSP可以使用成熟的JavaBeans 组件来实现复杂商务功能

    内部对象说明:request 客户端请求,此请求会包含来自GET/POST请求的参数; response 网页传回客户端的响应;pageContext 网页的属性是在这里管理; session 与请求有关的会话; application servlet正在执行的内容;out 用来传送响应的输出流; config 代码片段配置对象;page JSP网页本身; exception 针对错误网页,未捕捉的例外。
    1.5.5 JavaScriptJavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。在HTML基础上,使用JavaScript可以开发交互式Web网页。JavaScript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。在本系统中很多地方使用了JavaScript技术,比如说,检验用户输入数据的有效性,是否重复,是否为空等等。
    1.6 软硬件需求
    硬件需求

    CPU:Pentium以上计算机内存:512M以上
    软件需求

    操作系统版本:Windows 7开发工具:MyEclipse后台服务器:Apache Tomcat 7.0开发语言:Java浏览器:IE6.0

    第二章 需求分析2.1 需求调研在项目的开始是需求调研,并且走访了健身会所,经过一系列的调查与谈话中发现,健身会所市场的管理和规范问题,是困扰我们多年的一个老问题,也是政府管理中的一个难点,健身的一个最基本的业务,表面上看,它只是健身会所业务的一个简单的部分,但是它涉及到管理与客户服务等多方面。
    2.2 可行性分析在项目的开发过程中,可行性分析是非常重要的一个环节,它是基于技术等进行分析之后得出的一个结论,这个结论说明了这个项目是否可以继续开展,本章从技术可行性、操作可行性、安全可行性、社会可行性等方面综合阐述了项目的可行性。
    2.2.1 技术可行性技术上的可行性主要是根据系统分析得到的需要开发的软件,来分析利用现有技术是否能实现待开发的软件。本系统需要连接到互联网上,运用jsp+servlet技术开发,方便快捷,开发所需要的软件工具都是简单易操作的且开源,安全,可维护性强,本系统在MyEclipse的开发环境下采用java语言编写,Java语言具有较强的可移植性,安全性和稳定性,可以在不同的系统上运行,本系统采用的服务器是Apache-Tomcat-7.0版本,开发技术则采用的是jsp+servlet技术。下面介绍本系统使用的几种常见的技术:
    2.2.1.1 JSP技术JSP(Java Server Page服务器网页)是从1998年开始出现的新技术。由Sun公司倡导,基于JavaServlet以及整个Java体系的web开发技术,并且他是由许多公司参与一起建立的一种动态网页技术标准。在传统的网页HTML文件(*.htm,*.html)中加入脚本片段和JSP标记(Tag),构成JSP网页(*.jsp)。JSP技术为创建显示动态生成内容的web页面提供了简便的方法。JSP作为Java家族的一员,承袭了Java的特点,即跨平台的特性,也即一次编译,到处运行。
    对于我们现在的使用,JSP无疑是一种非常方便的工具,可以精确的写出自己想要的界面效果,这也是我使用JSP技术的重要原因。
    JSP网站开发标准给出了两种使用JSP的技术,可以归纳为模式一、模式二。

    模式一:JSP+JavaBeans技术。在这种模式中,JSP页面独自响应请求并将处理结果返回给客户。Bean处理所有数据访问,JSP实现页面的表现,以实现内容生成与显示相分离。当处理复杂的大型应用时,页面被嵌入大量的脚本或Java代码段,当需要处理的商业逻辑复杂时,这种情况会变得非常糟糕,大量的内嵌代码使得页面程序变得复杂,对于前端界面设计人员,这是不可思议的事情。所以模式一可用于小型应用,不能够满足大型应用的需要
    模式二:JSP+Servlet+JavaBeans技术。Servlet技术是一种采用Java技术来实现CGI功能的一种技术,Servlet技术非常适于服务器端的处理和编程,并且Servlet会长期驻留在内存

    从开发的观点看,模式二具有更清晰的页面表现,清楚的开发者角色划分,在大规模项目开发中,模式二更被采用,模式二也更符合当前流行的MVC结构(Model/view/controller),其中Servlet对应controller,处于控制者的位置,处理HTTP请求,负责生成JSP中使用的Beans组件或对象,并判断应将请求传递给哪个JSP等,JSP对应view,负责生成最终的动态网页并返回给浏览器。而JavaBeans对应的是Model,实现各个具体的应用逻辑与功能。
    2.2.1.2 MyEclipse Enterprise Workbench 8.5MyEclipse企业级工作平台(My Eclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。
    MyEclipse 是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属Eclipse开发工具。
    2.2.1.3 SQLServer2005SQLServer2005最初的开发者的意图是用SQLServer2005和他们自己的快速低级例程(ISAM)去连接表格。不管怎样,在经过一些测试后,开发者得出结论:SQLServer2005并没有他们需要的那么快和灵活。这导致了一个使用几乎和SQLServer2005一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于SQLServer2005而写的第三方代码更容易移植到SQLServer2005。
    Microsoft SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
    2.2.1.4 JDBC技术JDBC技术是Java Data Base Connectivity的缩写,它是SUN公司提供的一种支持基本SQL功能的通用的应用程序接口(Application Programming Interface)。它是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。通过执行相应SQL语句,完成对不同数据库的访问。因此,开发人员使用JDBC API可以不必编写一个应用程序来访问Sybase数据库,又另外编写一个应用程序去访问Oracle数据库,再写一个应用程序访问Microsoft的SQL Server。不但如此,使用Java语言编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上开发不同的应用程序。
    简单地说,JDBC能完成下列三件事:

    同一个数据库建立连接
    向数据库建立连接
    处理数据库返回的结果

    JDBC是一种通用低层的应用程序编程接口,它在不同的数据库功能模块的层次上提供一个统一的用户界面。说JDBC是一处低级的API,是指它直接调用SQL命令,它比其他的一些数据库连接API要容易使用些,但它有同样可以作为更高级的,用户版面更友好的API或开发工具基础。
    浏览器端程序要访问数据库,首先通过中间件,然后由中间件对数据库操作权限进行认证,认证通过才能对数据库进行操作,数据库访问的三层结构如图2-1所示。

    用户对数据库的存取权限认证是中间件中完成,对数据库的查询、插入、更新和删除操作等都封装在中间件中,该中间件位于服务器端,中间件对数据库进行操作后,再将处理结果通过Web服务器返回到浏览器端用户。这样,在用户端输入的用户名和密码,可以通过加密算法进行加密后在网络上传输,在中间件中进行解密认证,然后再进行数据库的存取操作,数据库存取权限的用户名和密码出现在位于服务器端的中间件中,这样就更加安全。本系统采用的正是这样的三层结构的数据库访问模式。
    在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们返回用户。其模型如图2-2所示。

    因为“中间层”可以进行对访问的控制并协同数据库的更新,并且可以使用一个易用的高层API,这个API可以由“中间层”进行转换,转换成低层的调用。所以在许多种情况下,三层模型可以提供更好的性能,本系统中所采用的就是此种模型。
    简单地说,JDBC 可以做三件事:与数据库建立连接,发送SQL语句并且获得数据,最后根据得到的数据进行处理。
    数据库连接如图2-3所示:

    在建立数据连接时,要判断连接是否建立成功了,如果没有建立成功,要进行异常的捕捉等的错误处理,如果连接建立起来了,那么就继续进行。得到数据库连接后,就要执行事先写好的SQL语句,通常可以用预编译命令,防止SQL注入,在执行时,如果SQL语句出现错误,也要进行异常的捕捉和处理,如果SQL语句正确,则成功之后就会返回ResultSet这个结果集,我们可以对其进行一些操作。
    2.2.1.5 B/S模式B/S模式是一种以Web技术为基础的新型的MIS系统平台模式。把传统C/S模式中的服务器部分分解为一个数据服务器与一个或多个应用服务器(Web服务器),从而构成一个三层结构的客户服务器体系。

    第一层客户机是用户与整个系统的接口。客户的应用程序精简到一个通用的浏览器软件,如Netscape Navigator,微软公司的IE等。浏览器将HTML代码转化成图文并茂的网页。网页还具备一定的交互功能,允许用户在网页提供的申请表上输入信息提交给后台,并提出处理请求。这个后台就是第二层的Web服务器
    第二层Web服务器将启动相应的进程来响应这一请求,并动态生成一串HTML代码,其中嵌入处理的结果,返回给客户机的浏览器。如果客户机提交的请求包括数据的存取,Web服务器还需与数据库服务器协同完成这一处理工作
    第三层数据库服务器的任务类似于C/S模式,负责协调不同的Web服务器发出的SQL请求,管理数据库

    它无需像C/S模式那样在不同的客户机上安装不同的客户应用程序,而只需安装通用的浏览器软件。这样不但可以节省客户机的硬盘空间与内存,而且使安装过程更加简便、网络结构更加灵活。假设一个企业的决策层要开一个讨论库存问题的会议,他们只需从会议室的计算机上直接通过浏览器查询数据,然后显示给大家看就可以了。甚至与会者还可以把笔记本电脑联上会议室的网络插口,自己来查询相关的数据。其次,它简化了系统的开发和维护。系统的开发者无须再为不同级别的用户设计开发不同的客户应用程序了,只需把所有的功能都实现在Web服务器上,并就不同的功能为各个组别的用户设置权限就可以了。各个用户通过HTTP请求在权限范围内调用Web服务器上不同处理程序,从而完成对数据的查询或修改。现代企业面临着日新月异的竞争环境,对企业内部运作机制的更新与调整也变得逐渐频繁。相对于C/S,B/S的维护具有更大的灵活性。当形势变化时,它无须再为每一个现有的客户应用程序升级,而只需对Web服务器上的服务处理程序进行修订。这样不但可以提高公司的运作效率,还省去了维护时协调工作的不少麻烦。如果一个公司有上千台客户机,并且分布在不同的地点,那么便于维护将会显得更加重要。
    再次,它使用户的操作变得更简单。对于C/S模式,客户应用程序有自己特定的规格,使用者需要接受专门培训。而采用B/S模式时,客户端只是一个简单易用的浏览器软件。无论是决策层还是操作层的人员都无需培训,就可以直接使用。B/S模式的这种特点,可以让MIS系统维护的限制因素变得更少。
    最后,B/S特别适用于网上信息发布,使得传统的MIS的功能有所扩展。这是C/S所无法实现的。而这种新增的网上信息发布功能恰是现代企业所需的。这使得企业的大部分书面文件可以被电子文件取代,从而提高了企业的工作效率,使企业行政手续简化,节省人力物力。
    现有的硬件和软件在功能上是可以满足系统开发的需求,开发所需要的软件工具也都是简单易操作的,开发人员的技术水平完全可以胜任系统的开发。所以该系统在技术上是可行的。
    2.2.1.6 EL技术EL全名为Expression Language,它原本是JSTL 1.0为方便存取数据所自定义的语言。
    表达式这种语言的灵感来自于ECMAScript和XPath表达式语言,它的格式为${express},它提供了在 JSP 中简化表达式的方法。它是一种比较简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。
    EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0 将 EL 表达式添加为一种脚本编制元素。
    2.2.2 操作可行性该系统具有易用性,B/S结构使得客户端不必安装任何软件,只要有浏览器并连接到Internet或企业内部的Intranet上即可使用,免除了非专业人员操作技术上的困难。服务器操作系统采用Windows 7,Web服务器为Apache-Tomcat7.0版本,数据库为MySQL。
    该系统具有友好亲切的使用界面,功能丰富并且使用简单,一般用户无需培训即可使用,对运行的平台和机器配置要求不高,便于配置和应用。
    2.2.3 社会可行性随着社会的发展和计算机技术的进步,人类越来越依赖于信息化的管理系统,这种系统能更加方便的获得信息以及处理信息。人们都改变了过去的思维,开始走向了互联网的时代,在社会中成为了一种新的潮流。
    2.2.4 可行性小结本章在技术可行性上、操作可行性上以及社会可行性上进行了详细的介绍,在技术方面通过介绍JSP技术和EL技术等常见技术,说明了开发本系统的可行性,而在操作方面,也是利用了简单易于操作的平台和数据库,所以开发本系统是简单而快速的。经以上分析,说明该系统在开发上是可行的,在技术、操作和社会上都有可行性,可以进行开发。
    2.3 功能模块需求分析本系统最大的特点是使用操作简单、友好的提示信息。
    会员制健身中心管理系统的设计与实现,主要是以提高健身会所形象、便捷客户服务与增强健身中心管理为主旨,主要有以下七大功能:

    修改登录密码
    工作人员管理
    会员卡类型管理
    会员资料管理
    健身器材管理
    教练执教管理
    安全退出

    2.4 界面需求界面设计目前已经成为评价软件质量的一条重要指标,一个好的用户界面可以增加用户使用系统的信心和兴趣,提高工作效率,JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。 创建动态页面非常方便。用户界面是指软件系统与用户交互的接口,通常包括输出、输入、人-机对话的界面格式等。
    2.4.1 输出设计输出是由计算机对输入的原始信息进行加工处理,形成高质量的有效信息,并使之具有一定的格式,提供管理者使用,这是输出设计的主要职责和目标。
    系统设计的过程正好和实施过程相反,并不是从输入设计到输出设计,而是从输出设计到输入设计,这是因为输出表格直接与使用者相联系,设计的出发点应当是保证输出表格方便地为使用者服务,正确及时反映和组成用于各部门的有用信息。输出设计的原则是考虑既要全面反映不同管理层的各项需要,又要言简意赅,不要将用户需要和不需要的都提供给用户。
    2.4.2 输入设计输入数据的收集和录入是比较费事的,需要大量的人力和一定设备,并且容易出错。如果输入系统的数据有错误,则处理后的输出将扩大这些错误,因此输入数据的正确性对于整个系统质量的好坏是具有决定性意义的。
    输入设计的原则如下:输入量应保持在能满足处理要求的最低限度。设计中可采用设置字段初值,下拉式数据窗口等方式尽量减少用户键盘输入量。输入量越少,错误率就越少,数据准备时间也减少。

    第三章 系统分析与设计3.1 数据库的分析与设计计算机信息系 统以数据库为核心,在数据库管理系统的支持下,进行信息的收集、整理、存储、检索、更新、加工、统计和传播等操作。数据库已经成为现在信息系统等计算机系统的基础与核心部分。数据库设计的好坏直接影响到整个系统的质量和效率。
    数据库的设计一般经过规划。需求分析、概念设计、逻辑设计、物理设计5个步骤。
    3.1.1 数据库的概念结构设计概念设计是指在数据分析的基础上自底向上的建立整个系统的数据库概念结构,从用户的角度进行视图设计,然后将视图集成,最后对集成的结构分析优化得到最后结果。
    数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示用户工作环境中所涉及的事物,属性则是对实体特性的描述。
    概念设计的目标是产生反映企业组织信息要求的数据库概念结构,即概念模式。概念模式是独立于数据库逻辑结构,独立于支持数据库的DBMS,不依赖于计算机系统的,根据以上对数据库的需求分析,并结合系统概念模型的特点及建立方法,建立E-R模型图。










    实体
    属性
    实体间关系



    系统模块E-R图,如图3-2所示:

    会员资料实体E-R图,如图3-3所示:

    3.1.2 数据库的逻辑结构设计我们知道,数据库概念模型独立于任何特定的数据库管理系统,因此,需要根据具体使用的数据库管理系统的特点进行转换。即转化为按计算机观点处理的逻辑关系模型,E-R模型向关系数据库模型转换应遵循下列原则:

    每一个实体要转换成一个关系
    所有的主键必须定义非空(NOT NULL)
    对于二元联系应按照一对多、弱对实、一对一、多对多等联系来定义外键

    根据E-R模型,会员制健身中心管理系统建立了以下逻辑数据结构,下面是各数据表的详细说明。本系统的数据库名:db_jianshen2017_g,一共有四个表,分别如下:
    会员卡信息表



    序号
    列名
    数据类型
    长度
    主键
    允许空




    1
    card_id
    int
    11




    2
    card_leixiong
    varchar
    50




    3
    card_guize
    text





    4
    card_youhuizhengce
    text





    5
    card_one1
    varchar
    50




    6
    card_one2
    varchar
    50




    7
    card_one3
    varchar
    50




    8
    card_one4
    varchar
    50




    9
    card_one5
    int
    11




    10
    card_one6
    int
    11




    11
    card_one7
    datetime





    12
    card_one8
    datetime






    健身器材表



    序号
    列名
    数据类型
    长度
    主键
    允许空




    1
    qicai_id
    int
    11




    2
    qicai_name
    varchar
    50




    3
    qicai_goumairiqi
    varchar
    50




    4
    qicai_beizhu
    text





    5
    qicai_one1
    varchar
    50




    6
    qicai_one2
    varchar
    50




    7
    qicai_one3
    varchar
    50




    8
    qicai_one4
    varchar
    50




    9
    qicai_one5
    int
    11




    10
    qicai_one6
    int
    11




    11
    qicai_one7
    datetime





    12
    qicai_one8
    datetime






    工作人员表



    序号
    列名
    数据类型
    长度
    主键
    允许空




    1
    user_id
    int
    11




    2
    user_name
    varchar
    50




    3
    user_pw
    varchar
    50




    4
    user_type
    int
    11




    5
    user_realname
    varchar
    50




    6
    user_address
    varchar
    50




    7
    user_sex
    varchar
    50




    8
    user_tel
    varchar
    50




    9
    user_email
    varchar
    50




    10
    user_qq
    varchar
    50




    11
    user_man
    varchar
    50




    12
    user_age
    varchar
    50




    13
    user_birthday
    varchar
    50




    14
    user_xueli
    varchar
    50




    15
    user_one1
    varchar
    50




    16
    user_one2
    varchar
    50




    17
    user_one3
    varchar
    50




    18
    user_one4
    varchar
    50




    19
    user_one5
    varchar
    50




    20
    user_one6
    int
    11




    21
    user_one7
    int
    11




    22
    user_one8
    int
    11




    23
    user_one9
    datetime





    24
    user_one10
    datetime





    25
    user_one11
    bigint
    20




    26
    user_one12
    bigint
    20





    教练执教表



    序号
    列名
    数据类型
    长度
    主键
    允许空




    1
    zhijiao_id
    int
    11




    2
    zhijiao_jiaolian_id
    int
    11




    3
    zhijiao_jiaolian_name
    varchar
    50




    4
    zhijiao_kecheng
    varchar
    50




    5
    zhijiao_huiyuan
    varchar
    50




    6
    zhijiao_one1
    varchar
    50




    7
    zhijiao_one2
    varchar
    50




    8
    zhijiao_one3
    varchar
    50




    9
    zhijiao_one4
    varchar
    50




    10
    zhijiao_one5
    int
    11




    11
    zhijiao_one6
    int
    11




    12
    zhijiao_one7
    datetime





    13
    zhijiao_one8
    datetime






    3.1.3 数据库的连接原理本系统采用Hibernate对数据库进行管理。Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了轻量级的对象封装,使 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。它不仅提供了从 Java 类到数据表之间的映射,也提供了数据查询和恢复机制。相对于使用 JDBC 和 SQL 来手工操作数据库,Hibernate 可以大大减少操作数据库的工作量。 另外 Hibernate 可以利用代理模式来简化载入类的过程,这将大大减少利用 Hibernate QL 从数据库提取数据的代码的编写量,从而节约开发时间和开发成本。 Hibernate 可以和多种Web 服务器或者应用服务器良好集成,如今已经支持几乎所有的流行的数据库服务器。
    Hibernate 技术本质上是一个提供数据库服务的中间件。它的架构如图3-5所示:

    图3-3显示了 Hibernate 的工作原理,它是利用数据库以及其他一些配置文件如 Hibernate .properties ,XML Mapping 等来为应用程序提供数据持久化服务的。
    Hibernate 具有很大的灵活性,但同时它的体系结构比较复杂,提供了好几种不同的运行方式。在轻型体系中,应用程序提供 JDBC 连接,并且自行管理事务,这种方式使用了 Hibernate 的一个最小子集;在全面解决体系中,对于应用程序来说,所有底层的 JDBC/JTA API 都被抽象了,Hibernate 会替你照管所有的细节。
    3.2 中文乱码问题处理在程序中经常会遇到中文乱码的情况,如果手动的在servlet和jsp页面进行设置,相当麻烦。因此,在程序的开始就写了一个过滤器SetCharacterEncodingFilter。
    在web.xml中配置:
    <filter> <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class>myweb.util.filter.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>gb2312</param-value> </init-param></filter> <filter-mapping> <filter-name>SetCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern>//*表示工程下所有的页面都会有此过滤器的处理 </filter-mapping>
    对应的SetCharacterEncodingFilter.java文件中的重要代码,在初始化init()方法中定义:
    public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore");}
    在工具包util包中同样定义了DataFormate类来处理字符转换:
    public static String toUni(String gbStr){ String uniStr = ""; /*把字符串转换成uincode编码*/ if(gbStr == null){ gbStr = ""; } try{ byte[] tempByte = gbStr.getBytes("GB2312"); uniStr = new String(tempByte,"ISO8859_1"); }catch(Exception ex){ } return uniStr;}/* 把字符串转换成Utf8编码*/public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = Character.toString(c).getBytes("utf-8"); }catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) { k += 256; } sb.append("%" + Integer.toHexString(k).toUpperCase()); } } return sb.toString(); }
    第四章 系统功能实现在管理信息系统的生命周期中,经过了需求分析、系统设计等阶段之后,便开始了系统实施阶段。在系统分析和设计阶段,系统开发工作主要是集中在逻辑、功能和技术设计上,系统实施阶段要继承此前面各个阶段的工作成果,将技术设计转化为物理实现,因此系统实施的成果是系统分析和设计阶段的结晶。
    4.1 系统登陆页面实现描述:为了保证系统的安全性,要先使用本系统必须先登陆到系统中,用户需要正确的账号和密码登录本系统。
    会员登录的流程图,如图4-1所示:

    程序运行效果图,如图4-2所示:

    在登陆页面输入用户名和密码以,点击提交按钮,跳转到登陆的service中,在该service中会对用户名,密码,验证码进行判断,验证通过进入对应的页面,loginservice关键代码:
    public String login(String userName,String userPw,int userType){ String result="no"; String sql="from TAdmin where userName=? and userPw=?"; Object[] con={userName,userPw}; List adminList=adminDAO.getHibernateTemplate().find(sql,con); if(adminList.size()==0) { result="no"; } else { WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)adminList.get(0); session.setAttribute("userType", 0); session.setAttribute("admin", admin); result="yes"; } return result;}
    4.2 管理员功能模块描述:系统主页面:左方页面展示了管理员可操作的七大功能,进入相关的管理页面可以链接到子菜单,并且高亮显示,每个管理模块下面都有相应的子菜单。
    程序运行效果图,如图4-3所示:

    在每个jsp页面将会对相关用户进行拦截操作,这样可以提高安全性,防止用户不经过登陆页面而进入任何子菜单页面:
    if(session.getAttribute("user")==null){ out.print("<script>alert('请先登录!');window.open('../index.jsp','_self')</script>"); }
    4.2.1 工作人员管理4.2.1.1 查询工作人员信息描述:管理员点击左侧的菜单“工作人员管理”,页面跳转到工作人员界面,调用后台的action类查询出所有的工作人员信息,并把这些信息封装到数据集合List中,绑定到request对象,然后页面跳转到相应的jsp,显示出工作人员信息。
    程序效果图,如图4-4所示:

    4.2.1.2 添加工作人员添加描述:输入要添加工作人员的信息以后,点击添加按钮添加工作人员。
    程序效果图,如图4-5所示:

    4.2.2 会员资料管理4.2.2.1 会员资料管理描述:管理员点击左侧的菜单“会员资料管理”,页面跳转到会员资料管理界面,调用后台的action类查询出所有的会员资料,并把这些信息封装到数据集合List中,绑定到request对象,然后页面跳转到相应的jsp,显示出会员资料。
    程序效果图,如图4-6所示:

    4.2.2.2 会员资料删除描述:先是点击会员管理,页面跳转到会员管理界面,浏览所有的会员资料,点击要删除的会员资料,弹出的确定对话框,即可删除该会员资料。
    程序效果图,如图4-7所示:

    4.2.3 健身器材管理4.2.3.1 健身器材信息描述:管理员点击左侧的菜单“健身器材管理”,页面跳转到健身器材信息管理界面,调用后台的action类查询出所有的健身器材信息,并把这些信息封装到数据集合List中,绑定到request对象,然后页面跳转到相应的jsp,显示出健身器材信息。
    程序效果图,如图4-8所示:

    4.2.3.2 添加健身器材信息描述:管理员输入健身器材相关正确信息后点击录入按钮,如果是没有输入完整的健身器材信息,都会给出相应的错误提示,不能录入成功。输入数据都通过form表单中定义的方法onsubmit=”return checkForm()”来检查,checkForm()函数中是各种的校验输入数据的方式。
    程序效果图,如图4-9所示:

    4.2.3.3 删除健身器材信息描述:先是点击健身器材信息管理,页面跳转到健身器材信息管理界面,浏览所有的健身器材信息,点击要删除的健身器材信息,弹出的确定对话框,即可删除该健身器材信息。
    程序效果图,如图4-10所示:

    4.2.4 教练执教管理4.2.4.1 教练执教管理描述:管理员点击左侧的菜单“教练执教管理”,页面跳转到教练执教管理界面,调用后台的action类查询出所有的教练执教,并把这些信息封装到数据集合List中,绑定到request对象,然后页面跳转到相应的jsp,显示出教练执教情况。
    程序效果图,如图4-11所示:

    4.2.5.2 教练执教录入描述:管理员输入教练相关正确信息后点击录入按钮,如果是没有输入完整的教练执教,都会给出相应的错误提示,不能录入成功。输入数据都通过form表单中定义的方法onsubmit=”return checkForm()”来检查,checkForm()函数中是各种的校验输入数据的方式。
    程序效果图,如图4-12所示:

    4.2.6 修改密码描述:输入用户名和用户的原有密码,输入新密码以后点击修改按钮即可修改密码成功。
    程序效果图,如图4-13所示:

    4.2.7 退出系统描述:点此按钮回到系统的主页面。
    关键代码:主要是通过javascript语句来实现:
    item_word[8][4]="退出系统";item_link[8][4]="javascript:window.open('../index.jsp','_self')";
    第五章 系统测试软件测试指的是一种用来鉴定软件是否正确、完整的过程。我们通过测试已经写好的程序来发现其中可能隐藏的问题,从而提高软件的质量,一般而言我们的做法是,在规定的条件下对程序进行操作,发现程序的错误,来衡量软件的质量。
    5.1 测试的任务及目标软件测试不仅是软件开发的一个组成部分,更是非常重要的一部分,在开发过程中,测试应该贯穿我们的整个开发,测试在软件开发中的地位是不言而喻的,它和软件开发缺一不可,所以我们要更加重视测试。
    5.1.1 测试的任务在软件开发中,我们不可避免的产生许多错误,这使得软件中隐藏着许多的问题,而这些问题在一定的条件下被触发,便会让你更软件的运行出现差错,导致或多或少的经济损失,所以测试是非常必要的。因此在软件投入生产性运行之前,尽可能多地发现软件中的错误。
    5.1.2 测试的目标
    测试的目的是为了发现程序中的错误而执行程序的过程
    好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案
    成功的测试是发现了到今为止尚未发现的的错误的测试

    5.2 测试方案测试有两种方法:黑盒测试和白盒测试。
    黑盒测试是一种看不到程序内部结构的测试方法,它又被称为功能测试,在程序的借口进行测试,检查功能是否能够按照说明书进行正确的反应,程序员要做的就是输入数据,然后验证得到的结果是否正确,这样能够保持外部新的完整性。
    白盒测试又叫结构测试,完全了解程序的结构和处理过程,这种方法按照程序内部的逻辑测试程序,检验程序中每条通路是否都能按照预定要求正确工作。
    5.3 测试过程在测试之初,由于将数据库中的数据是随便输入,没有实用性,为了使系统更加完善,在系统测试的过程中,本系统将一开始编程随便输入的数据全部清理后,输入了一些有效的测试数据,这样可以更真实的反映系统的功能实现情况。
    这样不断发现问题,经过反复的测试、调试,把问题一个个的解决,最终系统可以正常运行。
    5.4 测试用例测试是软件开发时期的最后一个阶段,也是软件质量保证中至关重要的一个环节,它的目的是发现程序的错误和不足之处。
    本系统采用黑盒测试中的等价类法,对系统进行测试。检测失物招领系统有问题需要大量的输入数据,下面只列出一部分测试用例:
    5.4.1 主页面的登录模块测试测试流程:

    打开系统首页,输入错误的登录信息
    登录
    输入正确的登录信息
    登录
    测试结果




    模块名称
    测试用例
    预期结果
    实际结果
    是否通过




    登录模块
    用户名:null 密码:null
    弹出错误提示,请输入用户名
    登陆失败,提示请输入用户名
    通过


    登录模块
    用户名:m1 密码:null
    弹出错误提示,请输入密码
    失败,提示输入密码
    通过


    登录模块
    用户名:m1 密码:1
    弹出错误提示,用户名或者密码错误
    登陆失败,提示用户名或者密码错误
    通过



    5.4.2 游客注册测试建立有效等价类是游客输入的各个信息都正确,期望结果:注册成功!无效等价类如表5-2所示:



    无效等价类
    期望结果




    用户名空缺
    请输入用户名!


    用户密码空缺 确认密码空缺
    请输入用户密码! 请输入确认密码!


    联系电话空缺
    请输入联系电话!


    QQ空缺
    请输入QQ!


    邮箱空缺
    请输入邮箱地址!


    来自空缺
    请输入来自哪里!


    名称空缺
    用户名已存在!


    密码错误
    两次输入的密码不一致!


    联系电话格式不正确
    输入的联系电话格式不正确!


    QQ格式不正确
    输入的QQ格式不正确!


    邮箱格式不正确
    输入的邮箱格式不正确!



    测试用例:第1组:用户名:bb 用户密码:aa 确认密码:aa 联系电话:18234086882 QQ:1104014730 E-mail:1104014730@qq.com 来自:山西测试结果:提示注册成功!第2组:用户名: 用户密码:aa 确认密码:aa 联系电话:18234086882 QQ:1104014730 E-mail:1104014730@qq.com 来自:山西测试结果:请输入用户名!第3组:用户名:bb 用户密码: 确认密码:aa 联系电话:18234086882 QQ:1104014730 E-mail:1104014730@qq.com 来自:山西测试结果:请输入用户密码!第4组:用户名:bb 用户密码:aa 确认密码: 联系电话:18234086882 QQ:1104014730 E-mail:1104014730@qq.com 来自:山西测试结果:请输入确认密码!第5组:用户名:bb 用户密码:aa 确认密码:aa 联系电话:18234086882 QQ: E-mail:1104014730@qq.com 来自:山西测试结果:请输入QQ!第6组:用户名:bb 用户密码:aa 确认密码:aa 联系电话:18234086882 QQ:1104014730 E-mail: 来自:山西测试结果:请输入邮箱地址!第7组:用户名:bb 用户密码:aa 确认密码:aa 联系电话:18234086882 QQ:1104014730 E-mail:1104014730@qq.com 来自:测试结果:请输入来自哪里!第8组:用户名:admin 用户密码:aa 确认密码:aa 联系电话:18234086882 QQ:1104014730 E-mail:1104014730@qq.com 来自:山西测试结果:用户名已存在!第9组:用户名:admin 用户密码:aa 确认密码:aaa 联系电话:18234086882 QQ:1104014730 E-mail:1104014730@qq.com 来自:山西测试结果:两次输入的密码不一致!第10组:用户名:admin 用户密码:aa 确认密码:aaa 联系电话:1 QQ:1104014730 E-mail:1104014730@qq.com 来自:山西测试结果:输入的联系电话格式不正确!第11组:用户名:admin 用户密码:aa 确认密码:aaa 联系电话:18234086882 QQ:aa E-mail:1104014730@qq.com 来自:山西测试结果:输入的QQ格式不正确!第12组:用户名:admin 用户密码:aa 确认密码:aaa 联系电话:18234086882 QQ:aa E-mail:1104014730 来自:山西测试结果:输入的邮箱格式不正确!5.5 其他错误在程序设计实现的过程中不可避免的会产生各种难以预料的错误,如书写错误、传值类型不一致、参数传递问题等等。这些都需要通过细心的检测与不断的调试才能够排除。比如在servlet路径配置时因粗心错误导致运行导致所报错误,如图5-1所示:

    5.6 小结在本章中,通过对软件的测试验证了软件程序的质量,分别对登录部分进行了等价类测试,等价类测试不考虑内部的结构,将程序的输入分为若干个有代表性的部分,从每个部分选取数据进行测试,通过对这些模块的测试可以基本证明程序具有一定的健壮性和质量性。
    参考文献[1] BruceEckel. JAVA编程思想[M]. 机械工业出版社, 2003.1~78
    [2] 孙一林,彭波等. JSP数据库编程实例[M]. 清华大学出版社, 2002.1~465
    [3] Brown等. JSP编程指南(第二版)[M]. 电子工业出版社, 2003,1~268
    [4] 孙涌. 现代软件工程[M]. 北京希望电子出版社,2003,1~246
    [5] 姜翠霞. 数据库系统基础[M]. 航空航天大学出版社, 2009.51~208
    [6] Flangan. JAVA技术手册[M]. 中国电力出版社, 2002.23~294
    [7] LeeAnnePhilips. 巧学活用JSP[M]. 电子工业出版社, 2004.1~319
    [8] 萨师煊, 王珊. 数据库系统概论[M]. 高等教育出版社, 2002.3~460
    [9] 李曙光. JSP开发实例完全剖析[M]. 电子工业出版社, 2006.23~400
    [10] [美]Walter Savitch. Absolute Java[M]. 电子工业出版社. 2005
    [11] Kong Michael. An environment for secure SQL/Server computing [M].Oxford University Press Inc., 1993: 149 
    [12] W.Clay,Richardson, Donald,Avondolio. The Java high class weaves a distance:JDK 5[J]. Scientific & Technology Book Review,No.3, 2006:17-18
    [13] Sanden, Bo. SYSTEMS PROGRAMMING WITH JSP:EXAMPLE - A VDUCONTROLLER[C]. Communications of the ACM,Vol28,No10,1985:1059-1067
    [14] Tsui,Frank F. JSP EM DASH A RESEARCH SIGNAL PROCESSOR IN JOSEPHSON TECHNOLOGY[C]. IBM Journal of Research and Development,Vol24, No2,1980:243-252
    1  留言 2020-08-02 13:20:10
  • 基于JSP和MySQL的私人牙科诊所管理系统

    摘 要随着科技的飞速发展,计算机已经广泛的应用于各个领域之中。在医学领域中,计算机主要应用于两个方面:一是医疗设备智能化,以硬件为主。另一种是病例信息管理系统(HIS)以软件建设为主,以提高私人牙科诊所病例的现代化管理水平。本次毕业设计的主要任务是基于B/S模式开发设计一个私人牙科诊所病例管理系统以提高私人牙科诊所病例的现代化管理形象。该系统包括药品管理、挂号管理、开药管理和药房管理四个部分,可以实现药品、患者的录入、删除、修改和查询等功能,特别适应各大中小型私人牙科诊所病例,提高私人牙科诊所病例管理水平,系统设计合理操作简便。
    本文采用面向对象分析的方法,详细阐述了一个功能比较强大的牙科诊所管理系统的前后台开发,操作流程和涉及的一些关键技术。首先进行了可行性分析,然后是面向对象分析,通过实际的业务流程需要,抽取和整理用户需求,建立了问题域精确模型;然后是面向对象设计阶段,主要是把分析阶段得到的对目标系统的需求转变成符合成本和质量要求的,抽象的系统实现方案,阐述了系统设计的思想,数据库的设计和系统设计的工具及技术。该阶段对本系统各个对象的属性和方法进行了详细设计,建立了本系统的对象模型,形成了本系统的类图;数据库设计时先进行了概念结构设计,然后进行了逻辑结构设计,最后完成了数据表的设计。
    根据前几个阶段的分析和设计,本系统在设计方面采用B/S模式,同时使用JSP技术进行基本页面的设计与功能实现,后台数据库选用MySQL数据库。本系统的设计实施为牙科诊所管理系统的运行做基础,为牙科诊所管理系统工作提供良好的条件。
    关键词:牙科诊所病例门诊管理;JSP;B/S模式
    ABSTRACTWith the rapid development of science and technology, computers have been widely used in various fields. In the field of medicine, computers are mainly applied to two aspects: one is the intelligence of medical equipment and the hardware. The other is the case information management system (HIS), which focuses on software development to improve the level of modern management of cases in private dental clinics. The main task of this graduation design is based on B/S pattern development and design a private dental clinics case management system in order to improve the modern management image of the private dental clinic cases. The system includes drug management, register management, prescribe medicine and pharmacy management four parts, of drugs, patients can be accomplished by the input, delete, modify, and query, and other functions, especially for the small and medium-sized private dental clinic cases, improve the level of private dental clinics case management, reasonable system design is simple.
    This article adopts the method of object-oriented analysis, elaborated the function of a more powerful Taiwan before and after the development of the dental clinic management system, operation process and some of the key technologies involved. First has carried on the feasibility analysis, then the object-oriented analysis, through the actual business process needs, extract and user needs, set up the precise model the problem domain; Then the object-oriented design phase, mainly with the analysis phase of the demand for the target system into conformity with the requirements of the cost and quality of abstract system implementation plan, expounds the ideas of system design, database design and system design tools and techniques. In this phase, the object model of the system is set up, and the class diagram of the system is formed. The design of the conceptual structure was carried out first, then the logical structure design was carried out, and the design of the data table was completed.
    According to former several stages of the analysis and design, this system adopts B/S mode in terms of design, and using JSP technology of basic pages design and function implementation of background database choose MySQL database. The design of this system is implemented as the basis for the operation of the dental clinic management system, and provides good conditions for the operation of the dental clinic management system.
    Key words: the patient outpatient clinic administration; JSP; B/S pattern
    1.引言私人牙科诊所病例信息系统(HOSPITAL INFORMATION SYSTEM)简称HIS,是私人牙科诊所病例实现现代化建设的重要基础工程,是提高私人牙科诊所病例管理水平、医疗水平、业务运转效率和服务质量的必要手段,是指应用电子计算机和网络通信设备,对私人牙科诊所病例的病人医疗信息、财务核算分析信息、预约信息进行收集、存储、处理、提取和数据通讯,满足所有授权用户对信息使用需求的计算机应用软件系统。
    1.1 项目开发的背景随着计算机产业的迅速发展,电子计算机已广泛的应用于信息管理,文字处理,辅助设计,辅助教学及人们的日常生活中。牙科诊所管理系统主要针对各医院门诊管理的一系列相关工作的管理,本系统的建立使得牙科诊所的管理更加规范化,系统化,查询手段更加便捷化。同时,本系统采用面向对象的开发方法,进一步解决了结构化范性存在的软件重用程度低,软件产品难以维护的问题。
    近年来,随着就诊的病人的数量的逐渐增加,人工书写数据已经不能够处理如此庞大的数据。为了更好的适应信息时代的高效性,一个利用计算机来实现牙科诊所管理系统工作的系统必然诞生。基于这一点,所设计的牙科诊所管理系统用来就诊所进行管理,以便在最短时间内,高效准确的完成整个管理过程。
    基于上述认识,收集相关资料和数据,查阅有关文献及技术参数,对用户需求进行调研,发现目前所采用的手工记录的方法进行管理存在对象范围广,数据存储不易,不易存档,成千上万的信息和堆积如山的单据对管理人员来说是个负担,需要大量的文档资料。而已经存在的一些面向过程设计的诊所管理系统软件重用程度低,软件产品不易维护。鉴于上述种种原因,牙科诊所管理急需一种面向对象的设计的软件来管理数据资料。
    计算机技术在现代管理中的应用,使计算机成为领导者和管理人员应用现代技术的重要工具。计算机辅助门诊管理活动,可以极大地增强管理者采集,处理信息的能力,从而有利于管理者及时决策。计算机系统能根据管理过程的变化情况,将原始数据,资料等进行加工,保存,管理人员可以在解决具体问题需要信息资料时,随时进行检索查询,了解整个牙科门诊管理系统的动态情况,进行动态管理,从而有效的处理牙科门诊的管理工作,实现牙科诊所管理的自动化,提高效率。
    1.2 项目开发的目的牙科诊所管理系统的开发目的是使得牙科诊所管理系统模式从手工记录转变成信息管理,从面向过程开发的软件转变成面向对象开发的软件,为门诊管理人员提供方便,为软件维护工作人员提供方便。对用户的实际情况进行调研,进行详细的需求分析,对现有的管理模式进行改进,开发出一套新型的面向对象的管理系统,从中领悟系统开发的思想,掌握系统开发的流程和方法。随着门诊信息系统的不断完善,医院的管理将越来越依赖于信息化的管理。所以系统开发将围绕牙科门诊工作的实际情况,使之能迅速适应各牙科诊所的需要。
    牙科诊所管理系统的实现的现实意义:减少管理诊所的工作人员;管理人员可以随时浏览查看,而且更加直观;改变了以前工资手工记录的方式,电脑录入更加快捷方便;实现了门诊管理系统的计算机化。
    随着私人牙科诊所病例数字化建设的蓬勃发展,数字化私人牙科诊所病例的理念已经被广大私人牙科诊所病例所接受,目前面临的主要问题是如何去建设数字化私人牙科诊所病例。
    因此,目前我国数字化私人牙科诊所病例的建设重点必须以医疗数字化为主,即着重发展私人牙科诊所病例内与医疗活动相关的各类信息的数字化管理和综合利用,实现诊疗工作的数字化以及医疗流程的自动化,并保证系统的开放性,为将来扩展到区域医疗打下基础。相应地,医疗信息系统作为数字化私人牙科诊所病例建设的系统基础,它的研究重点也将转为面向纯粹医疗活动的各类医疗信息系统及其集成研究。以医疗数字化为建设重点的数字化私人牙科诊所病例的总体规划,它通过各类医疗信息系统的有机集成而实现。可以说,新一代医疗信息系统将在“数字化私人牙科诊所病例”的建设中发挥举足轻重的作用。
    1.3 结构概述和技术介绍1.3.1 JSP概述JSP是服务器端脚本环境可以用来创建交互式Web应用程序。当服务器收到对JSP文件的请求时,它处理包含在用于构建发送给浏览器的Web页文件中的服务器端脚本。除服务器端脚本外,JSP文件也可以包含HTML(包括相关的客户端脚本)和COM组件调用,这些组件可执行不同任务,如连接到数据库或处理商业逻辑。

    对于HTML创作者:HTML创作者,将会发现用JSP编写服务器端脚本可使创建更为复杂、使用的Web应用程序变得十分简单。JSP对于将HTML表单信息存储在数据库中、根据访问者的自选项自定义Web站点或对不同的浏览器使用不同的HTML功能,提供了优异的解决方案。例如,从前要在Web服务器上处理用户输入,必须首先用Perl或C等语言建立传统的公共网关接口(CGI)应用程序。而使用JSP后,仅通过在HTML文档中直接嵌入的简单服务器端脚本,便可以收集HTML表单信息,并传递到数据库。如果已熟悉Microsoft JSPScript或Microsoft(r)Jscript,那么学习JSP将不会感觉到困难
    对于高级Web脚本语言编写者:由于JSP使用了中性语言,因此只要熟悉JSPScript、Jscript或PERL等脚本语言,就了解了JSP的使用方法。在JSP页中,可以使用已经装有COM脚本兼容编辑引擎的任何脚本编辑语言。JSP使用java和Jscript脚本引擎,但仍可安装用于PERL、REXX和Python的脚本引擎,他们可从第三方供应商处获得
    对于Web开发和编程人员:如果使用Visual Basic、C++或Java等编程语言开发过后端Web应用程序,将会发现JSP是创建Web应用程序灵活而快速的方法。除了添加脚本为应用程序创建HTML界面之外,还可以建立自己的COM组件。可以将应用程序的商业逻辑封装在可重复使用的模块中,以便在脚本、其他组件或其他程序中调用
    Active Server Pages模型:当浏览器向Web服务器请求.JSP文件时,服务器断脚本便开始运行。于是Web服务器调用JSP,用它从头至尾处理所请求的文件、执行脚本命令,并将Web页发送到浏览器。因为脚本运行于服务器而不是客户端,所以Web服务器负责生成发送到浏览器的HTML页等工作。服务器端脚本无法被预先复制,因为返回到浏览器的只是脚本的运行结果,用户无法得知当前页面的脚本命令

    1.3.2 JSP的新特性JSP新增了许多特性,有助于轻松编写脚本和开发Web应用程序。

    新的流控制能力:JSP的Server对象具有两种可用来控制程序流的新方法:Server .Transfer 和Server .Execute。与重定向请求(需要往返于客户端)不同,使用这些方法可将请求直接传送到.JSP文件,而不需要离开服务器
    错误处理:JSP具有新的错误处理能力,可以使用自定义的错误信息.JSP文件来捕捉错误,也可以使用新的Server.GetlastError方法来显示有用信息,如错误描述或发生错误的行号
    无脚本:通常JSP静态内容的处理速度快于服务器端内容的处理速度,因此以前只将.JSP文件扩展名指派给包含JSP功能性的文件。无论何时,如果需要在静态.html文件中添加JSP,只能手工添加.JSP文件扩展名并修正相关超级链接。不过,在JSP的最新版本中,不包含服务器端功能性的.JSP文件的处理速度比以前快了许多。因此,如果正在创建展开的Web应用程序并且其中的文件最终可能需要JSP功能性,现在就可以很方便地为这些文件指派.JSP文件扩展名,而不必考虑他们是否包含静态或服务器端内容
    性能增强的对象:JSP提供流行的可安装组件的性能怎增强版本。这些对象能够可靠的使用与各种Web发布环境
    XML集成:XML(扩展表及语言)允许描述复杂的数据结构或文档,可以在各种应用程序、客户端和服务器之间共享此信息。使用Microsoft Internet Explorer 4.0或根高版本附带的Microsoft XML Parser,可以创建服务器端应用程序,该应用程序允许Web服务器与Internet Explorer4.0(或更高版本)或任何包含XML结息能力的服务器交换XML格式的数据
    Windows脚本组件:JSP支持Microsoft强大的脚本新技术——Windows脚本组件。现在可以将商业逻辑脚本过程转换为可以重复使用的COM组件,该组件可用于Web应用程序和其他组件对象模型(COM)适用的程序
    确定浏览器能力的新方法:JSP具有可确定浏览器准确能力的新特性。当浏览器发送能描述其能力的Cookie(可通过使用简单的客户端脚本来安装这样的Cookie)时,可以创建一个“浏览器能力组件”实例,以便检索随Cookie返回的浏览器属性。可以使用此特性来确定浏览器能力并对应用程序做相应调整
    JSP自动调整:JSP现在可以检测执行请求何时被外外部资源阻断,并自动提供更多县城以便同时执行附加请求和继续正常处理。如果CPU负担过重,JSP将减少线程数量,以便减少因太多费阻断请求同时执行而产生的持续不断的交换
    服务器端包含(使用SRC属性):现在可以使用HTML(SCRIPT)…(/SCRIPT)标签的SRC属性来完成服务器端包含。当使用SRC属性制定虚拟或相对路径并使用RUNAT=SERVER属性表示服务器端执行时,可以完成与“#Include”命令一样的功能
    编码的JSP脚本:以前Web开发人员禁止他人查看隐藏在脚本后面的逻辑。JSP现在支持Microsoft Visual Basic Scripting Edition(JSPScript)和Microsoft Jscript5.0 附带的新的脚本编码实用程序。Web开发人员可以对客户端和服务器端脚本应用编码方案,以便使程序逻辑(使用非标准ASCCII字符)不可读。已编码的脚本在运行时由脚本引擎解码,因此不需要单独的实用程序。虽然此特性不是专门的安全加密解决方案,但可防止大多数用户无意中查看或复制脚本

    1.3.3 JSP的基本概念
    URL:URL(Uniform Resource Location,统一资源定位器)有协议名、web服务器地址、路径名和文件名四部分组成,它只是了文件在Internet中的位置
    HTML:HTML(Hypertext Markup Language,超文本标记语言)是一种用于编写超文本文档的标记语言,它不是一种程序设计语言而是一种结构语言。它具有凭他无关性,无论是何种操作系统,只要有相应的浏览器程序,就可以运行HTML文档
    Web站点:Web站点是计算机网络上的一个位置,它以网页或文档形式提供信息,访问者只需通过Web浏览器链接到站点
    主页:主页是Web站点上一组网页或其他文件的起始页。它是HTML格式的文档,可用来说明站点内容、作者所在公司或部门的新闻、指向其他相关文档的链接或站点作者的个人信息等

    2.系统分析2.1 需求分析根据调研情况进行分析,认识到完整的管理系统非常复杂 ,其功能随医院病例规模等条件的变化而不同。目前各种医院病例管理系统的不断涌现,但是大多都是针对大型医院来设计的,而很少考虑到众多私人牙科诊所病例的实际情况,其功能在私人牙科诊所病例并不适用,从而增加了院方不必要的投资。此外,系统一般也不支持远程访问,信息的共享性差。为适应医疗信息管理发展的需要,开发基于B/S结构的私人牙科诊所病例管理系统。该系统应具有以下功能:

    登陆模块,可分为管理员登陆和普通用户医生登录三个模块
    用户注册模块,对用户注册的用户名的要求,不同的用户要求要有不同的用户名
    系统管理模块,包括添加管理员,管理员密码的修改
    挂号管理模块,包括患者的名字、性别、年龄、现住地址和患者简介
    患者管理模块,对患者进行增加、患者删除、患者信息的修改
    开药管理模块,对药品的增加、删除、修改、查询,患者病历查
    科室管理模块,管理员可以新建,修改,删除,科室信息
    留言管理,管理员可以新建,修改,删除留言信息
    预约挂号模块,用户可以在线进行预约挂号,用户可以选择普通号和专家号

    2.2 系统设计原则2.1.1 技术可行性本系统是采用基于Web的程序设计思想进行编制的,利用JSP语句结合Microsoft SQL Server 2000后台数据库开发“私人牙科诊所病例信息管理系统”,可应用于各大中小型私人牙科诊所病例。整个系统由若干个表、窗口、菜单构成的。用户可通过菜单来调用系统的各项功能。
    基于Web的程序设计语言JSP,之所以成为功能强大的服务器端程序是因为它为Web编程人员提供了一组功能强大的内置对象,通过这些内置对象,编程人员可以控制Web页面的各个方面。
    2.1.2 经济可行性鉴于次系统是毕业设计,所以本系统不需要多余的格外开发成本,硬件配置和软件配置环境家用机可完全胜任,所以在经济上是可行的。
    2.1.3 操作可行性本设计力求界面简单明了,操作简单,便于上手,使用户可以在最短的时间内熟练掌握各功能。所以在操作上是可行的。
    2.1.4 时间可行性从时间上看,在两个月的时间里学习相关知识,并开发网站,时间上是有点紧,但是不是不可能实现,通过两个多月的努力功能基本实现。
    3.概要设计功能模块的设计是整个系统设计的重要部分,它决定怎么实现系统的功能,不仅要求功能完善,而且还要界面友好,因此,对于一个成功的系统设计,功能模块的设计是关键。

    3.1 数据库设计目前流行的数据库管理系统有Oracle、Mysql DB2、Sybase、MS Access和Microsoft SQL Server等。Oracle和Mysql是性能卓越、稳定可靠的大型数据库管理系统,目前拥有较多的用户。 MS Access 是一种性能可靠、使用方便的小型数据库系统。一般而言,数据库是由特定的操作系统环境上的一个或者一组文件组成的,而数据库管理系统一般是由运行于用户计算机或网络上的远程计算机上面的一整套程序组成的。
    根据对数据组织方式的不同,数据库系统分成关系数据库、层次数据库和网状数据库。目前常见的数据库系统上基本上都是关系型数据库系统。在关系型数据库系统中,数据被组织成为二维表格形式,表格中的每个数据行称为一条记录或直接称为行,每一个列有时被称为字段或直接称为列,通过指定行和列定位一个指定的数据项。
    一个优秀的数据库系统应具备如下特征:

    最大限度的减少数据的重复存储(称为“冗余”),以减少存储空间的占用
    尽可能地提高数据的查询(搜索)速度
    提供灵活的数据组织和统计手段
    保章数据的安全

    本系统采用的数据库是MySQL是一个关系型数据库管理系统 瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。所有对数据库访问操作的管理信息系统都是根据用户的需求设计的,如果对数据库概念理解不深,那么设计出的数据库,不但访问速度慢,让用户不满意,而且还存在很多的重复数据,大量的浪费计算机资源。所以如何符合逻辑的有组织的设计好数据库,使数据库不仅容易维护,而且还让用户方便快捷的访问操作,这将是一个重点。因此,要设计好数据库,先了解一下关于数据库的基本概念是必要的。
    3.2 建立数据库现在管理数据库的工具是越来越多了 有了他们我们可是很方便的创建数据库删除数据库 还可以通过工具查看数据库的表的结构表中的字段数据进行数据库以及表的设计 极大地方便了我们 。不用再为创建数据库只有使用sql语句提供了方便.。
    3.3 建立数据库的任务数据库设计实际上主要是所要处理的数据的表示方法和存储结构的设计。在采用数据库技术之前,这些工作分散在应用程序中进行;在采用数据库技术之后,这些工作可以通过数据库设计集中起来系统地进行。
    上图可以看出,进行数据库设计的首要任务是考虑信息需求,也就是数据库要存入什么样的数据。创建数据库并不是仅仅为了存储数据,更主要的目的是从中提取有用的信息。除了考虑数据存储什么数据外,还应考虑存取方式,也就是处理需求。即要根据用户提出的存取要求来设计数据模式和应用程序。
    3.4 建立数据库的方法数据库设计方案应该是将用户需求充分融入其中的,所以同用户进行充分的接触和交流是比不可少的。就设计方法来说,应遵循以下几个步骤:

    确定该数据库中需要的表
    确定表中需要的字段
    明确有唯一值的字段
    确定表之间的关系
    优化设计
    输入数据并新建其他数据库对象

    建立私人牙科诊所病例信息管理系统的数据库的操作步骤:

    打开企业管理器,在“数据库”上单击鼠标左键,之后在弹出的快捷菜单中选择“新建数据库”命令。保存并命名为“demo”
    在企业管理器,选择“安全性”的“登录”选项单击右键选择“新建登录”创建用户
    选择“demo”中的“表”单击右键弹出快捷菜单选择“新建表”命令,在显示的窗口中设置表中各个字段的名称、数据类型、长度和允许空等信息,并保存
    选择用户信息表,单击鼠标右键。在弹出的快捷菜单中选择“打开表”然后选择“返回所有行”命令,在显示的窗口中输入表的信息,然后关闭窗口,完成在表中输入信息的工作

    这样名为demo的数据库就建成了,系统建立的数据库文件扩展名为.sql,文件主名是在database name编辑框中键入的数据库名称。
    3.5 数据项和数据结构用户身份,包括的数据项:用户身份ID号、用户身份名称,其E-R图如图3-1所示:

    用户登录信息,包括的数据项有:用户名称、用户密码、用户身份、用户登录次数,其E-R图如图3-2所示:

    用户登录日志信息,包括的数据项有:日志记录编号、用户编号、登录时间、离开时间,其E-R图如图3-3所示:

    3.6 建立数据表在系统数据库设计中,数据表的设计是关键,如何根据系统要实现的功能合理地设计数据表,将关系到整个系统数据表的运行效率甚至整个系统的成败,在表设计中要注意遵循数据库计数的原则。
    规范化逻辑数据库设计包括使用正规的方法来讲数据分为多个相关的表。拥有大量窄表(列较少的表)是规范化数据库的特征。而拥有少量宽表(列较多的表)是非规范化的特征。数据库表设计理论的基本原理是:每个表都应有一个惟一的行标识符,可以使用列或列集将任何单个记录同表中的所有其他记录去区别开来。每个表都应有一个ID列,任何两个记录都不可以共享同一ID值。作为表的唯一行标识符的一列或多列是表的主键。同是,表应只能存储单一类型实体的数据并且应避免可为空的列,更重要的是表不应有重复的值或列。
    因为私人牙科诊所病例信息管理系统包括挂号信息管理、药品管理等模块,还有其他子模块构成,包括的数据比较多,每一个表都要确定主关键字。这样本系统所有的表结构都建成了。
    sysuser表



    字段
    字段名
    数据类型
    长度
    说明




    1
    id
    Int
    4
    编号


    2
    uname
    varchar
    50



    3
    upass
    varchar
    50



    4
    tname
    varchar
    50



    5
    sex
    varchar
    50



    6
    birth
    varchar
    50



    7
    tel
    varchar
    50



    8
    ismarage
    varchar
    50



    9
    addr
    varchar
    50



    10
    email
    varchar
    50



    11
    idcard
    varchar
    50



    12
    byschool
    varchar
    50



    13
    utype
    varchar
    50



    14
    dept
    varchar
    50



    notice信息表



    字段
    字段名
    数据类型
    长度
    说明




    1
    id
    Int
    4
    编号


    2
    title
    varchar
    50



    3
    note
    varchar
    50



    4
    savetime
    varchar
    50



    zd信息表



    字段
    字段名
    数据类型
    长度
    说明




    1
    ghno
    Int
    4
    编号


    2
    bg
    varchar
    50



    3
    zd
    varchar
    50



    4
    info
    varchar
    50



    5
    numinfo
    varchar
    50



    6
    oper
    varchar
    50



    7
    savetime
    varchar
    50



    8
    qystatus
    varchar
    50



    9
    fkstatus
    varchar
    50



    10
    totalprice
    varchar
    50



    11
    sfoper
    varchar
    50



    12
    sfsavetime
    varchar
    50



    13
    fyoper
    varchar
    50



    14
    fysavetime
    varchar
    50



    4.详细设计4.1 模块的设计4.1.1 登录模块管理员登录:包括用户名、密码 ,注册用户 界面图如图4-1所示:

    实现管理员登陆界面的部分代码如下:
    <title>私人牙科诊所病例管理系统 </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <LINK href="admin/css/admin.css" type="text/css" rel="stylesheet"> </head> <%String message = (String)request.getAttribute("message"); if(message == null){ message = ""; } if (!message.trim().equals("")){ out.println("<script language='javascript'>"); out.println("alert('"+message+"');"); out.println("</script>"); } request.removeAttribute("message"); String code=yzm.getCheckCode();%> <body onload=document.f1.uname.focus();> <form action="/srykzsblmis/studysite?ac=login" method="post" name="f1" onsubmit="return ck()"> <TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" bgColor=#002779 border=0> <TR> <TD align=middle> <TABLE cellSpacing=0 cellPadding=0 width=468 border=0> <TR> <TD align="center"><font size="4" color="white"><b>私人牙科诊所病例管理系统 </b></font></TR> <TR> <TD><IMG height=147 src="admin/images/login_2.jpg" width=468></TD></TR></TABLE> <TABLE cellSpacing=0 cellPadding=0 width=468 bgColor=#ffffff border=0> <TR> <TD width=16><IMG height=122 src="admin/images/login_3.jpg" width=16></TD> <TD align=middle> <TABLE cellSpacing=0 cellPadding=0 width=230 border=0> <TR height=5> <TD width=5></TD> <TD width=56></TD> <TD></TD></TR> <TR height=36> <TD></TD> <TD>用户名</TD> <TD><INPUT style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid" maxLength=30 size=24 name=uname></TD></TR> <TR height=36> <TD>  </TD> <TD>口 令</TD> <TD><INPUT style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid" type=password maxLength=30 size=24 name=upass></TD></TR> <TR > <TD>  </TD> <TD>验证码</TD> <TD><input type="text" style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid" size="5" id="yzm" name="yzm" class=input onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" onkeyup="value=value.replace(/[\W]/g,'')"><%=code %></TD></TR> <TR height=5> <TD colSpan=3></TD></TR> <TR> <TD> </TD> <TD> </TD> <TD><INPUT type=image height=18 width=70 src="admin/images/bt_login.gif"></TD></TR></TABLE></TD>
    普通用户登录:只有合法的用户在输入正确的密码后方可进入系统,否则将提示密码或用户名输入错误,并询问用户是否重新输入,界面图如图4-2所示:

    实现普通用户登录的部分代码如下:
    <jsp:include page="top.jsp"></jsp:include> <%HashMap user = (HashMap)session.getAttribute("user"); CommDAO dao = new CommDAO(); HashMap map = dao.select("select * from patient where id='"+user.get("id")+"' ").get(0);%> <div style="margin-top:10px;text-align:center;"> <table width=800 border="0" cellpadding="0" cellspacing="0"> <tr height=320 bgcolor="#1FA9FE" style="color:white;font-weight:bold;"> <td align="center" width=110 bgcolor="#ECECED" valign="top" style=""> <jsp:include page="menu.jsp"></jsp:include> </td> <td align="center" bgcolor="white" style="padding-left:20px;padding-top:15px;color:Black;font-weight:normal;" valign="top"> <form action="/srykzsblmis/studysite?ac=userinfo&id=<%=map.get("id") %>" name="f1" method="post" onsubmit="return ck()"> <table border=0 style="font-size:12px"> <tr bgcolor="#ffffff"> <td width=130 > 登录名称: </td> <td width=570 align="left"> <input name="uname" type="text" id="uname" style="width:150px;" />  </td> </tr> <tr bgcolor="#ffffff"> <td > 登录密码: </td> <td align="left"> <input name="upass" type="password" id="upass" style="width:150px;" />  </td> </tr> <tr bgcolor="#ffffff"> <td > 重复密码: </td> <td align="left"> <input name="upass1" type="password" id="upass1" style="width:150px;" />  </td> </tr> <tr bgcolor="#ffffff"> <td>病人姓名</td> <td><input type="text" id="tname" name="tname" size="5"/>*</td> </tr> <tr bgcolor="#ffffff"> <td>性别</td> <td> <select id="sex" name="sex"> <option value="男">男</option> <option value="女">女</option> </select> </td> </tr> <tr bgcolor="#ffffff"> <td>年龄</td> <td><input type="text" id="age" name="age" size="2"/>*</td> </tr> <tr bgcolor="#ffffff"> <td>身份证</td> <td><input type="text" id="idcard" name="idcard" />*</td> </tr> <tr bgcolor="#ffffff"> <td>电话</td> <td><input type="text" id="tel" name="tel" />*</td> </tr> <tr bgcolor="#ffffff"> <td>住址</td> <td><input type="text" id="addr" name="addr" />*</td> </tr> <tr height=60> <td align="center" colspan="2"> <input type="submit" value="提交"> </td> </tr> </table> </form> </td> </tr> </table> <div style="margin-top:10px;height:1px;background-color:#1FA9FE;text-align:center;width:800px;"> </div> </div> <jsp:include page="foot.jsp"></jsp:include> </center> <script type="text/javascript"> function ck(){ if(f1.upass.value==""){ alert("密码不能为空"); return false; }if(f1.upass1.value==""){ alert("再次输入密码"); return false; }if(f1.upass1.value!=f1.upass.value){ alert("两次密码不一致"); return false; }if(f1.tname.value==""){ alert("姓名不能为空"); return false; }if(f1.sex.value==""){ alert("性别不能为空"); return false; }if(f1.idcard.value==""){ alert("身份证不能为空"); return false; } } <%String suc = (String)request.getAttribute("suc");String no = (String)request.getAttribute("no");if(no!=null){ %> alert("已存在的用户名"); <%}if(suc!=null){ %> alert("修改成功");location.replace("/srykzsblmis/userinfo.jsp"); <%}%></script> </body></html><%=Info.tform(map)%>
    4.1.2 用户注册模块用户注册包括用户名、登录密码、密码确认,界面图如4-3图所示:

    实现用户注册的部分代码如下:
    <title>私人牙科诊所病例管理系统</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --><STYLE type=text/css>BODY{ padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; font-size: 12px;}.STYLE2 { FONT-SIZE: 12px}.STYLE3 { FONT-WEIGHT: bold}.style7 { FONT-FAMILY: "黑体", "方正美黑简体", "华文细黑"; COLOR: #646464; FONT-SIZE: 18px}BODY { BACKGROUND-IMAGE: url(img/lbg.gif); PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 12px; PADDING-TOP: 0px}.tb { WIDTH: 926px}.td2 { TEXT-ALIGN: left; PADDING-LEFT: 80px; BACKGROUND-REPEAT: no-repeat; HEIGHT: 100%}.txtBox { BORDER-BOTTOM: #e7ad01 1px solid; BORDER-LEFT: #e7ad01 1px solid; WIDTH: 130px; HEIGHT: 20px; COLOR: #000000; FONT-SIZE: 13px; BORDER-TOP: #e7ad01 1px solid; BORDER-RIGHT: #e7ad01 1px solid}#div1 {}#diqu { TEXT-ALIGN: center; WIDTH: 588px; BACKGROUND: url(images/2009_index_04.gif) no-repeat; COLOR: #2e466f}#diqu A { COLOR: #2e466f}.pageWidth { TEXT-ALIGN: left; MARGIN: 0px auto; WIDTH: 850px; BACKGROUND: #ffffff}#nav { PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 16px; FONT-WEIGHT: 200; LIST-STYLE-IMAGE: none; PADDING-TOP: 0px}#nav LI { FONT-FAMILY: "宋体"; FLOAT: left; FONT-SIZE: 14px; MARGIN-RIGHT: 1px}#nav LI A { TEXT-ALIGN: center; LINE-HEIGHT: 35px; MARGIN: 0em 0px 0px; WIDTH: 120.5px; DISPLAY: block; BACKGROUND: #f6ad79; COLOR: #000000; FONT-SIZE: 14px; TEXT-DECORATION: none; PADDING-TOP: 5px}.bi:hover SPAN { TEXT-ALIGN: center; LINE-HEIGHT: 35px; MARGIN: 0em 0px 0px; WIDTH: 120.5px; DISPLAY: block; BACKGROUND: #f6ad79; COLOR: #000000; FONT-SIZE: 14px; TEXT-DECORATION: none; PADDING-TOP: 5px}#nav LI A:hover { BACKGROUND: #dc3e0b; COLOR: #ffffff; FONT-SIZE: 14px; CURSOR: hand; PADDING-TOP: 0px}.bi:hover SPAN { BACKGROUND: #dc3e0b; COLOR: #ffffff; FONT-SIZE: 14px; CURSOR: hand; PADDING-TOP: 0px}.bi:hover SPAN { PADDING-TOP: 5px}.la { COLOR: #044a8e; TEXT-DECORATION: none}.la:hover { TEXT-DECORATION: underline}</STYLE><LINK rel=stylesheet type=text/css href="/frontfile/css.css"> </head> <body> <jsp:include page="top.jsp"></jsp:include> <div style="margin-top:10px;text-align:center;"> <table width=800 border="0" cellpadding="0" cellspacing="0"> <tr height=320 bgcolor="#1FA9FE" style="color:white;font-weight:bold;"> <td align="center" width=800 bgcolor="#ECECED" valign="top" style=""> <div style="margin-left:20px;font-size:16px;font-weight:bold;color:#044A8E;margin-top:20px;text-align:center;"> 用户注册 </div> <hr> <div style="font-size:12px;color:#044A8E;margin-top:20px;text-align:center;font-weight:normal;"> <form action="/srykzsblmis/studysite?ac=regedit" name="f1" method="post"> <table border=0 width=700 style="font-size:12px"> <tr bgcolor="#ffffff"> <td width=130 > 登录名称: </td> <td width=570 align="left"> <input name="uname" type="text" id="uname" style="width:150px;" />  </td> </tr> <tr bgcolor="#ffffff"> <td > 登录密码: </td> <td align="left"> <input name="upass" type="password" id="upass" style="width:150px;" />  </td> </tr> <tr bgcolor="#ffffff"> <td > 重复密码: </td> <td align="left"> <input name="upass1" type="password" id="upass1" style="width:150px;" />  </td> </tr> <tr bgcolor="#ffffff"> <td>病人姓名</td> <td><input type="text" id="tname" name="tname" size="5"/>*</td> </tr> <tr bgcolor="#ffffff"> <td>性别</td> <td> <select id="sex" name="sex"> <option value="男">男</option> <option value="女">女</option> </select> </td> </tr> <tr bgcolor="#ffffff"> <td>年龄</td> <td><input type="text" id="age" name="age" size="2"/>*</td> </tr> <tr bgcolor="#ffffff"> <td>身份证</td> <td><input type="text" id="idcard" name="idcard" />*</td> </tr> <tr bgcolor="#ffffff"> <td>电话</td> <td><input type="text" id="tel" name="tel" />*</td> </tr> <tr bgcolor="#ffffff"> <td>住址</td> <td><input type="text" id="addr" name="addr" />*</td> </tr> <tr height=60> <td align="center" colspan="2"> <img src="images/reg.png" border="0" onclick="ck()"/> </td> </tr> </table> </form> </div> </td> </tr> </table> <div style="margin-top:10px;height:1px;background-color:#1FA9FE;text-align:center;width:800px;"> </div> </div> <jsp:include page="foot.jsp"></jsp:include><script type="text/javascript"> function ck(){ if(f1.uname.value==""){ alert("用户名不能为空"); return false; }if(f1.upass.value==""){ alert("密码不能为空"); return false; }if(f1.upass1.value==""){ alert("再次输入密码"); return false; }if(f1.upass1.value!=f1.upass.value){ alert("两次密码不一致"); return false; }if(f1.tname.value==""){ alert("姓名不能为空"); return false; }if(f1.sex.value==""){ alert("性别不能为空"); return false; }if(f1.idcard.value==""){ alert("身份证不能为空"); return false; }else{ f1.submit(); }
    4.1.3 系统管理模块系统管理模块是私人牙科诊所病例信息管理系统中一个基础的部分,在本模块中包括管理员对自身密码的重新设置,可以定时更换密码,确保资料的安全;同时还有登陆日志模块,记录每一次登陆信息,如果出现特殊情况,可以查询登陆日志查询,增加了系统的安全性和保密性,便于控制和管理,界面图如图4-4所示:

    实现系统界面的部分代码如下:
    //添加科室 if(ac.equals("deptadd")){ String deptname = request.getParameter("deptname"); String tel = request.getParameter("tel"); String addr = request.getParameter("addr"); String delstatus = "0"; String sql = "insert into dept (deptname,tel,addr,delstatus) values('"+deptname+"','"+tel+"','"+addr+"','"+delstatus+"')"; dao.commOper(sql); request.setAttribute("suc", ""); go("/admin/deptadd.jsp", request, response); } //修改科室 if(ac.equals("deptedit")){ String id = request.getParameter("id"); String tel = request.getParameter("tel"); String addr = request.getParameter("addr"); String deptname = request.getParameter("deptname"); String sql = "update dept set deptname='"+deptname+"',tel='"+tel+"',addr='"+addr+"' where id= "+id; dao.commOper(sql); request.setAttribute("suc", ""); go("/admin/deptadd.jsp", request, response); } //添加药品、处置 if(ac.equals("ypcfadd")){ String yno = request.getParameter("yno"); String cksql = "select * from ypcf where yno='"+yno+"'"; ArrayList cklist = (ArrayList)dao.select(cksql); if(cklist.size()!=0){ request.getParameter("no"); go("/admin/ypcfadd.jsp", request, response); }else{ String yname = request.getParameter("yname"); String price = request.getParameter("price"); String type = request.getParameter("type"); String gg = request.getParameter("gg"); String company = request.getParameter("company"); if(!type.equals("药品")){ gg = ""; company = ""; } String delstatus = "0"; String sql = "insert into ypcf (yno,yname,gg,price,company,delstatus,type)values('"+yno+"','"+yname+"','"+gg+"','"+price+"','"+company+"','"+delstatus+"','"+type+"')"; dao.commOper(sql); request.setAttribute("suc", ""); go("/admin/ypcfadd.jsp", request, response);
    4.1.4 挂号管理模块挂号管理模块是私人牙科诊所病例信息管理系统中一个部分,本模块主要实现后台管理,包括添加、删除、修改,患者挂号添加功能如图4-5所示:

    4.1.5病例管理模块医生可以对病人病例信息进行管理,在本模块中包括所有患者的信息的添加、删除、修改,增加患者图如图4-6所示:

    4.1.6 用户模块用户可以预约就诊,可以对个人信息进行管理,可以查询病例信息,同时可以与医生进行在线交流留言,在本模块中包括所有添加、删除、修改、查询如图4-7所示:

    5.系统调试与测试5.1 程序调试在设计系统的过程中,存在一些错误是必然的。对于语句的语法错误,在程序运行时自动提示,并请求立即纠正,因此,这类错误比较容易发现和纠正。但另一类错误是在程序执行时由于不正确的操作或对某些数据的计算公式的逻辑错误导致的错误结果。这类错误隐蔽性强,有时会出现,有时又不出现,因此,对这一类动态发生的错误的排查是耗时费力的。
    5.2 软件的测试5.2.1 测试的重要性及目的测试的重要性软件的测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试学仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。近来,软件工程界趋向于一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。
    事实上,对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。
    在实践中,软件测试的困难常常使人望而却步或敷衍了事,这是由于对测试仍然存在一些不正确的看法和错误的态度,这包括:

    认为测试工作不如设计和编码那样容易取得进展难以给测试人员某种成就感
    以发现软件错误为目标的测试是非建设性的,甚至是破坏性的,测试中发现错位是对责任者工作的一种否定
    测试工作枯燥无味,不能引起人们的兴趣
    测试工作是艰苦而细致的工作
    对自己编写的程序盲目自信,在发现错误后,顾虑别人对自己的开发能力的看法

    这些观点对软件测试工作是极为不利的,必须澄清认识、端正态度,才可能提高软件产品的质量。
    测试的目的如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。
    在谈到软件测试时,许多人都引用Grenford J. Myers在《The Art of Software Testing》一书中的观点:

    软件测试是为了发现错误而执行程序的过程
    测试是为了证明程序有错,而不是证明程序无错误
    一个好的测试用例是在于它能发现至今未发现的错误
    一个成功的测试是发现了至今未发现的错误的测试

    这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。
    首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。
    5.2.2 测试的步骤与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由若干个模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成:

    模块测试:在这个测试步骤中所发现的往往是编码和详细设计的错误
    系统测试:在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误
    验收测试:在这个测试步骤中发现的往往是系统需求说明书中的错误

    5.2.3 测试的主要内容为了保证测试的质量,将测试过程分成几个阶段,即:代码审查、单元测试、集成测试、确认测试和系统测试。
    单元测试
    单元测试集中在检查软件设计的最小单位—模块上,通过测试发现实现该模块的实际功能与定义该模块的功能说明不符合的情况,以及编码的错误。
    身份认证时候要保证在以下输入情况时候系统能够健康运行:

    输入用户ID时候键入非法字符,如:•#¥%……等
    在操作员编码框输入非数字字符,如abc,!•#¥《》
    输入的用户ID,或者操作员编码不存在
    输入的用户ID,或者操作员编码与密码不相符合
    输入的用户ID,操作员编码不能登陆本模块
    输入的信息超过规定字符长度
    输入的信息有一项为空

    查询信息时候:

    查询条件键入时有非法字符,如:#$%^等
    输入不存在的查询条件
    入查询条件超过规定字符长度
    输入查询条件一项为空

    集成测试
    集成测试是将模块按照设计要求组装起来同时进行测试,主要目标是发现与接口有关的问题。如一个模块与另一个模块可能有由于疏忽的问题而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。
    确认测试
    确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。
    系统测试
    软件开发完成以后,最终还要与系统中其他部分配套运行,进行系统测试。包括恢复测试、安全测试、强度测试和性能测试等。
    单独对系统的测试主要从以下几方面入手:

    功能测试:测试是否满足开发要求,是否提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准
    强度测试及性能测试:测试系统能力最高实际限度,即软件在一些超负荷情况下功能实现的情况
    安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。针对本系统主要是对权限系统的测试和对无效数据、错数据、和非法数据干扰的能力的测试

    经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试宣告结束。
    6.结论6.1 系统评价本文通过私人牙科诊所病例信息管理的设计与开发,从而得出下列结论:

    学习一门新技术,最重要的是实践,只有多动手才能尽快掌握它
    一个系统的开发,经验是最重要的,经验不足,就难免会有许多考虑不周之处
    要想吸引更多的用户,网站的界面必须要美观、有特色、友好,功能要健全。不过由于经验不足,我设计的图形界面比较简单。只是对基本功能进行了开发
    本次开发,我参考了很多私人牙科诊所病例信息管理系统的例子,吸取了一些别的私人牙科诊所病例信息管理系统的长处,对自己的毕业设计进行了完善,但是还有很多的不足之处,有待以后进一步学习

    由于时间仓促,本次设计由我完成私人牙科诊所病例信息管理系统的制作,对我这样一个JSP新手而言所制作的模块还有不完善的地方。数据库的设计也比较简单。还有很多毕业设计中用到JSP语言的知识也不够全面,还有很多地方不能够作到完全的理解和掌握。通过这次毕业论文的设计制作使本人受益匪浅。首先,由于毕业设计所用的JSP技术和其中用到JSP语言的其他部分是在课堂上没有接触过的,要用它来做设计必须通过大量自学来掌握,在这个过程中,不仅大大提高了我的自学能力而且让我对JSP的学习有了进一步的认识 。由于是独立完成在毕业设计的过程遇到了很多的困难,我求教了不少老师和同学,在这个过程中让我体会到了,一个团队的重要性。
    6.2 安全性问题Web开发中安全性是必须考虑的一个很重要的方面,特别是在诸如毕业设计成绩信息等敏感数据的模块中更是关键,所以这也是后期开发需要引起重视的。下面就这方面的技术和解决方案加以讨论。

    安装防火墙:安装防火墙并且屏蔽数据库端口能有效地阻止了来自Internet 上对数据的攻击
    输入检查和输出过滤:客户在请求中嵌入恶意HTML标记来进行攻击破坏,防止出现这种问题要靠输入检查和输出过滤,而这类检查必须在服务器端进行,一旦校验代码发现有可疑的请求信息,就将这些可疑代码替换并将其过滤掉
    用户授权认证:对于关键用户必须进行系统授权,只有授权的用户才能访问系统。为了防止用户绕过登陆页面,系统在重要的页面检查用户是否登陆过并检验用户的操作权限,如果没有登陆或没有操作权限,将用户重定向到登陆页面。系统的后台数据库日志记录了所有登陆用户的用户名、IP 地址、登陆时间等

    参考文献[1] 王龙、黄峰,JSP管理信息系统项目开发实践,北京:科学出版社,2015.9
    [2] 高怡新,JSP网络应用程序设计,北京:人民邮电出版社,2015.1
    [3] 杨世锡、赵辉,JSP+SQL Server动态网站开发 从基础到实践,北京:电子工业出版社,2015.7
    [4] 陈建伟、李美军、施建强。JSP动态网站开发教程(第二版).北京:清华大学出版社,2015.9
    [5] 吴豪。 SQL Server 2000基础[M]. 红旗出版社/北京:希望电子出版社,2015.4
    [6] (英)福塔 著 刘晓霞,钟鸣 译《mysql必知必会》 人民邮电出版社 2009.1
    [7] 王虎, 张俊. 管理信息系统[M]. 武汉:武汉理工大学出版社,2014.7.
    [8] Budi kurniawan.struts 2design and programming:a tutorial brainysoftware,second edition edition,2008.1.25
    [9] Roger s-pressman,software engineering[m].new delhi:tata mcgraw-hill publishingcompary ltd,2006
    [10] On the integration of smalltalk and java:Marcel hlopko,Jan kurs,jan vrany,claus gittinger science of computer programming,2013-爱思唯尔期刊
    2  留言 2020-07-31 16:55:31
  • 基于JSP和MySQL的企业快信系统的设计与实现

    摘 要计算机网络的出现到现在已经经历了翻天覆地的重大改变。因特网也从最早的供科学家交流心得的简单的文本浏览器发展成为了商务和信息的中心。到了今天,互联网已经成为了大量应用的首选平台,人们已经渐渐习惯了网络交易,渐渐对网络产生了依赖。公司会议、机票预定、酒店预定、公司之间货物订单的下达等等工作都可以通过网络快速的完成。网络已经渗透到了人们生活中的方方面面,甚至已经延伸至人们日常的衣食住行各个领域。本项目就是在此背景下设计的企业快信系统。
    本系统在开发中,采用了 MYSQL 数据库,同时使用到了 Java Swing、短信猫组件、Java MailAPI 等相关技术。在进行详细设计之前,根据总体设计的结构,确定每部分功能的解决方案,并完成相关技术的可行性分析以及技术原型的实现。在该系统中,采用数据服务器,和客户机相结合形成 B/S 结构,由相关人员或系统管理员执行如系统的备份、恢复、修改等重要操作,从而用来提高系统的安全性,并且降低了了黑客通过 Web 入侵来获取以及改变系统中重要数据信息的可能性。同时,采用 Web 客户机架构 B/S 三层结构,Web 客户机可通过 Internet 或专线连接应用服务器,向其发送指令,从而获取服务。这样做的优点是用浏览器便可进行,使用起来方便快捷,为客户提供了很大的便利。而对于记录管理,系统维护功能而言,主要是对记录信息进行处理,即对数据库信息进行添加,查询,导入和导出操作,这部分功能涉及的主要技术为通过 java连接 MYSQL 数据库,并通过 Java 代码完成对表内信息的查询和添加操作。
    本文首先对企业快信的开发进行了较深入的研究,然后对短信发送与邮件发送原理进行了介绍,接下来对系统的概要设计、功能模块、数据库设计,以及名片夹管理功能与邮件发送功能的具体实现作了细致阐述,最后是系统效果的展示。企业快信系统是一个集短信与邮件为一体的移动商务应用系统。是针对企业内部II及外部不同需求和应用方面,而专门定制开发的系统软件。它完全集成了企业的业务推广、客情沟通、内部管理等应用功能。企业快信的作用是帮助企业解决企业内部、企业与外部沟通难、信息不能及时传播等问题。为此,系统提供邮件群发、短信群发、人员档案、信息的管理等功能。系统是短信猫与邮件在企业商务应用中的典型实例,因此必然受到众多企业的青睐,成为企业通信的最佳选择。
    关键词:短信发送;邮件发送;企业快信
    AbstractComputer network has undergone a great change.The internet has also developed intoa business and information center from the earliest.The company eeting,airlinereservation,hotel reservation, release the order of goods between the companies and so on,these all can becompleted through the network quikly.Internet has penetrated into every aspect of people’s life, even extending to the basic necessities of life in all areas of people’s daily life, The enterprise’s express letter system is designed in this context.
    The system development uses MYSQL database, uses Java Swing, GSM Modem, Java mail API and other Technology. Before the detailed design of the structure of the overall design to determine the solution of some of the features, and complete the feasibility analysis and prototype implementation of the related technologies. In this system, data server and client combine to form the C/S structure, performed by the financial staff or system managers, such as system backup, restore, and modify the amount of important operating to improve the security of the system, reduce hacker by Web Intrusion to access and change the possibility of important information. The same time, the use of the Web client organizations into the B / S three-tier Web client can be connected through the Internet or green application server, send commands, and thus access to services. The advantage is you can operate from a browser, easy to use, fast and efficient, convenient to the customer with the greatest convenience. For records management, system maintenance functions, record information that the database information to add, query, import and export operations, some of the features involved in technology to through VC6 connect the MYSQL database, and Java code to query and add operations on the information in the table.
    In this paper, we research the development of enterprise’s express letter system at first,and then introduce the principles of sending SMS and mails, After that, we made a elaboration of the summary of the system design, function modules, database design,business card folder management capabilities, as well as of the e-mail function’s concreterealization.Finally, we show the system’s effect.The enterprise’s express letter system is a mobile business of application systemwhich sets SMS and E-mail as a whole .The system software is specificallycustom-developed for internal and external needs and applications. It is fully integrated enterprise business promotion, customer intelligence, communication, internal management applications. The enterprise’s express letter system of the role is to help businesses solve internal, corporate and external communication difficult, not timely issemination of information and other issues. To this end, the system provides functions as java mail, BSwing , personnel files, information management and so on. The system is a typical example of the GSM Modem and e-mail in the enterprise business applications, so it will be subject to the favor of many enterprises, the best choice for business communications.
    Key words: Java Mail; BSwing; Express Letter
    1 绪论1.1 开发背景在企业信息化的今天,效率决定成败,企业内、外部沟通的及时性将直接影响企业的运作效率。现在多数企业的办公自动化系统(即OA)的信息传递仅限于计算机内部网络,如果用户不在线,将无法知道是否有新的工作或紧急通知,为了确认是否有待办工作,不得不经常去访问OA,检索是否有新任务,而事实上这种检索的结果经常是徒劳。这样一来,不仅造成了机器资源的浪费,也造成了人力资源的浪费。因此急需一套成型的企业快信系统解决上述问题。
    1.2 国内外发展概况短消息服务市场近来如此火爆,让许多人始料未及,预示着短消息的巨大市场空间。短消息(Short Message Service)是手机通过移动网进行个人简易数据通信的一种方式,具有覆盖范围广、双向寻呼、使用经济、可缓存处理等优点,满足了人们爆炸性增长的信息需求,使人们可以以低廉的价格、便捷的方式,随时随地得到充满个性化的信息,是无线通信在 20 世纪末所做的一次重要飞跃。这使得移动网络不仅可以传送音频,也可以传送数据,而数据传输是互联网技术的根本。
    在国外,短消息业务占移动运营商收入的很大比例。国内移动通信在保持较高增长速度的同时,数据业务正在成为运营商的重要收入来源,几大电信公司不约而同地把目光盯住了手机短信。据统计,从 2000 年第四季度开始,全国短消息业务量以每月几千万条的数量突然激增,已经成为一个不容忽视的巨大的市场!
    而随着中国移动通信用户的不断增长,如何最大程度地利用现有网络,挖掘网络潜力,方便灵活地开展增值服务,拓展网络应用服务领域,满足用户日益增长的服务需求成为网络运营商所要考虑的重点,因此,短消息增值服务已成为吸引用户和增加收入的有效手段。开展增值服务不仅可以直接增加业务收入,而且通过提供不同种类的服务,可以吸引更多的顾客群体,对于拓展用户、提高市场应用效率具有非常重要的意义,潜在的收益更为巨大。
    1.3 研究目的和意义本课题通过对企业快信系统的开发主要达到以下两个目的:

    企业快信系统面对成千上万用户的连接以及同时的数据库请求,对数据库访问的效率和安全成了必须解决的问题。通过对JAVA 平台下数据库存取机制的深入研究,找出一条效率,性能与安全平衡的道路
    Web 开发的实例,对如何把 B/S 与 C/S 相结合进行了研究,并对面向对象对多层结构的支持进行了详细的分析

    企业快信主要是高效和安全的对企业提供企业级快信和服务,基于JAVA的多层结构来进行 web 开发必然是今后的主流,并且由于同时面对多用户及多连接,对数据库存取效率及性能,安全都有很高要求,因此,文中对数据库的高效安全的存取进行了深入研究并且获得了有效的进展。通过对其具体应用进行研究对相关开发人员和以后的软件开发及应用都有十分重要的意义。
    1.4 研究主要内容在一个提供企业级短信的系统的设计与实现中,把 C/S 和 B/S 架构根据实际情况进行结合,着重对数据库存取中的各种机制进行了深入地研究并且根据系统自身特点进行了选择和加强,采用了MySQL 数据供应器池化,并使用 Windows7 自带的性能监视器来监视链接池,最后讨论了设置链接池大小的各种问题,选择合适的大小,实现高效与安全有效的结合。并且结合 web 开发的实例,对面向对象对多层结构的支持进行了详细的分析。
    基于JAVA的 B/S 架构来进行 web 开发必然是今后的主流,并且由于同时面对多用户及多连接,对数据库存取效率及性能,安全都有很高要求,因此,通过对其具体应用进行研究对相关开发人员和以后的软件开发及应用都有十分重要的意义。
    2 系统分析2.1 需求分析企业快信的作用是帮助企业解决企业内部、企业与外部沟通难、信息不能及时传播等问题。为此,企业快信系统需要提供邮件群发、短信群发等功能。通过对多数企业日常业务的考察、分析,并结合短信及邮件自身的特点,得出本系统要求具有以下功能。

    用于管理客户和员工信息的名片夹管理功能
    用于对常用短语及其类别进行管理的信息库管理功能
    短信群发功能
    邮件群发功能
    发送邮件附件的功能

    2.2 可行性研究开发任何一个基于计算机的系统,都会受到时间和资源上的限制。因此,在接受任何一个项目开发任务之前,必须根据客户可能提供的时间和资源条件进行可行性分析,以减少项目开发风险,避免人力、物力和财力的浪费。可行性分析与风险分析在很多方面是相互关联的,项目风险越大,开发高质量的软件的可行性就越小。
    2.2.1 经济可行性采用短信作为企业的移动通信手段,将给企业对内、对外进行信息传递与沟通带来革命性的变化,从而使得移动办公、客户服务、员工沟通等运作效率显著提升,而成本则显著下降。值得说明的是,虽然短信有以上诸多优点,但它还是有一定的不足,例如信息内容单一和受到字数限制等。为解决这一问题,在企业快信中提供了邮件群发功能。通过邮件进行沟通也是目前比较流行的方式,它也具备实用、方便和廉价等优点。
    2.2.2 技术可行性开发一个企业快信系统,涉及到的技术问题不会太多,主要用到的技术就是使用短信猫和Java Mail组件来实现收发短信和群发邮件等功能。Java Mail 组件是Sun 公司发布的一种用于读取、编写和发送电子邮件的包,利用它可以方便地实现邮件群发。
    2.3 开发环境在开发企业快信时,需要具备下面的软件环境。

    服务器端

    操作系统:Windows 7Java 开发包:JDK 1.5 以上Web服务器:Tomcat6.0Java Mail 开发包:Java Mail 1.4数据库:MYSQL浏览器:IE 10.0分辨率:最佳效果为1024×768 像素
    客户端

    浏览器:IE 10.0分辨率:最佳效果为1024×768 像素

    由于本系统中需要使用Java Mail 组件,下面将详细介绍如何配置及Java Mail 的开发环境。
    由于目前Java Mail 还没有被加在标准的Java 开发工具中,所以在使用前必须另外下载Java MailAPI,以及Sun 公司的JAF(JavaBeans Activation Framework),Java Mail 的运行必须信赖于JAF 的支持。
    下载并构建Java Mail API
    Java Mail API 是发送和接收E-mail 的核心API。需自行下载后解压缩到硬盘上,并在系统的环境变量CLASSPATH 中指定activation.jar 文件的放置路径。
    下载并构建JAF
    目前Java Mail API 的所有版本都需要JAF(JavaBeans Activation Framework)的支持。JAF 为输入的任意数据块提供了支持,并能相应地对其进行处理。下载后解压缩到硬盘上,并在系统的环境变量CLASSPATH 中指定activation.jar 文件的放置路径。
    如果不想更改环境变量,也可以把activation.jar 添加到工程的构建路径中。
    3 系统总体设计3.1 系统目标根据前面所作的需求分析及用户的需求可知,企业快信属于小型的企业通信软件,在系统实施后,应达到以下目标。

    界面设计友好、美观
    操作灵活、方便
    提供功能强大的信息库管理,方便用户进行短信息的编写
    提供邮件群发功能,提高工作效率
    在发送短信时,可以直接从现有信息库中获取信息内容
    对用户输入的数据,进行严格的数据检验,尽可能地避免人为错误
    数据存储安全、可靠

    3.2 系统功能结构根据企业快信的特点,可以将其分为名片夹管理、信息库管理、短信群发、邮件群发、系统参数设置、系统设置6个部分,其中各个部分及其包括的具体功能模块如图3-1 所示。

    3.3 业务流程图企业快信的系统流程如图3-2 所示。

    3.4 系统预览企业快信由多个程序页面组成,下面仅列出几个典型界面。
    系统登录页面如图3-3所示,该页面用于实现管理员登录功能;主页如图3-4所示,该页面用于实现显示系统导航、操作业务流程和版权信息等功能。
    系统登录页面

    主页

    发送短信页面如图3-5所示,该页面用于实现将短信息同时发给多个接受者的功能;同时,为方便用户还提供了从客户及员工列表中选择接收者及从信息库中选择指定信息的功能。

    邮件群发页面如图3-6所示,该页面用于实现将邮件同时发给多个接受者的功能;同时,为方便用户还提供了从客户及员工列表中选择接收者的功能。

    3.5 文件夹组织结构在编写代码之前,需要把系统中可能用到的文件夹先创建出来(例如创建一个名为img 的文件夹,用来保存程序中使用的效果图片),这样不但方便以后的开发工作,也可以规范软件的整体架构。本人在开发企业快信时,设计了如图3-7 所示的文件夹架构。在开发时,只需要将所创建的文件保存在相应的文件夹中就可以了。

    4 系统详细设计4.1 数据库设计4.1.1 数据库分析由于本系统是一个小型实用的信息群发系统,提供了名片夹和信息库的功能,用户可以将常用的人员保存到名片夹中,将常用的短语保存到信息库中,以方便使用。基于这个特点以及语言特点,本系统将采用MySQL 数据库作为底层数据库,以方便用户使用本系统。
    4.1.2 数据库概念设计根据以上对系统所作的需求分析和系统设计,规划出本系统中使用的数据库实体分别为类型实体、档案实体、常用短语实体、管理员实体。下面将给出几个关键实体的E-R 图。
    档案实体
    档案实体包括编号、客户名称、地址、邮政编码、所属区域、手机号码、邮件地址、银行账户、开户银行和联系人属性,档案实体的E-R 图如图4-1 所示。

    短信实体
    短信实体包括编号、收信人的手机号码、短信内容、发信人和发送时间属性,短信实体的E-R 图如图4-2 所示。

    常用短语
    常用短语实体包括编号、类型和内容,常用短语实体的E-R 图如图4-3 所示。

    4.1.3 数据库逻辑结构设计在数据库概念设计中已经分析了档案实体、常用短语实体和类型实体,这些实体对象是数据表结的基本模型,最终的数据模型都要实施到数据库中,形成整体的数据结构。图4-4 为通过PowerDesigner创建完成的数据库模。

    表tb_customer 的表结构



    字 段 名
    数 据 类 型
    是 否 为 空
    是 否 主 键
    默 认 值
    描 述




    ID
    int
    No
    Yes

    ID(自动编号)


    name
    varchar(50)
    No

    NULL
    客户名称


    address
    varchar(100)
    No

    NULL
    地址


    postcode
    varchar(6)
    No

    NULL
    邮政编码


    area
    varchar(20)
    Yes

    NULL
    所属区域


    mobileTel
    avarchar(15)
    No

    NULL
    手机号码


    email
    varchar(100)
    No

    NULL
    邮件地址


    bankNo
    varchar(30)
    Yes

    NULL
    银行帐号


    bankName
    varchar(20)
    Yes

    NULL
    开户银行


    linkName
    varchar(10)
    No

    NULL
    联系人



    表tb_shortLetter 的表结构



    字 段 名
    数 据 类 型
    是 否 为 空
    是 否 主 键
    默 认 值
    描 述




    ID
    int
    No
    Yes

    ID(自动编号)


    toMan
    varchar(200)
    No

    NULL
    发信人手机号码


    content
    varchar(500)
    No

    NULL
    短信内容


    fromMan
    varchar(30)
    No

    NULL
    发信人


    sendTime
    datetime
    No

    getdate()
    发送时间



    4.2 公共模块设计在开发过程中,经常会用到一些公共模块,如数据库连接及操作的类、字符串处理的类及Struts配置等,因此,在开发系统前首先需要设计这些公共模块。下面将具体介绍企业快信系统中所需要的公共模块的设计过程。
    4.2.1 数据库连接及操作类的编写数据库连接及操作类通常包括连接数据库的方法getConnection()、执行查询语句的方法executeQuery()、执行更新操作的方法executeUpdate()、关闭数据库连接的方法close().下面将详细介绍如何编写企业快信系统中的数据库连接及操作的类ConnDB。
    定义ConnDB类
    定义用于进行数据库连接及操作的类ConnDB,并将其保存到com.wgh.core包中,同时定义该类中所需的全局变量及构造方法。代码如下:
    public class ConnDB { public Connection conn = null; // 声明Connection对象的实例 public Statement stmt = null; // 声明Statement对象的实例 public ResultSet rs = null; // 声明ResultSet对象的实例 private static String propFileName = "/com/connDB.properties"; // 指定资源文件保存的位置 private static Properties prop = new Properties(); // 创建并实例化Properties对象实例 private static String dbClassName = " ";//定义保存数据库驱动的变量 private static String dbUrl = " "; private static String dbUser = "sa"; private static String dbPwd = ""; public ConnDB() { //定义构造方法 try { //捕捉异常 //将Properties文件读取到InputStream对象中 InputStream in = getClass().getResourceAsStream(propFileName); prop.load(in); // 通过输入流对象加载Properties文件 dbClassName = prop.getProperty("DB_CLASS_NAME");//获取数据库驱动 dbUrl = prop.getProperty("DB_URL", dbUrl); //获取URL dbUser = prop.getProperty("DB_USER", dbUser); //获取登录用户 dbPwd = prop.getProperty("DB_PWD", dbPwd); //获取密码 } catch (Exception e) { e.printStackTrace(); // 输出异常信息 } }}
    将数据保存到资源文件中
    为了方便程序移植,将数据库连接所需信息保存到properties文件中,并将该文件保存在com包中。connDB.properties文件的内容如下:
    DB_CLASS_NAME=com.mysql.jdbc.DriverDB_URL=jdbc:mysql://127.0.0.1:3306/db_expressLetterDB_USER=saDB_PWD=
    创建数据库连接
    创建连接数据库的方法getConnection(),该方法返回connection对象的一个实例。getConnection()方法的实现代码如下:
    public static Connection getConnection() { Connection conn = null; try { Class.forName(dbClassName).newInstance(); conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); } catch (Exception ee) { ee.printStackTrace(); } if (conn == null) { System.err.println("警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:"+ dbClassName+ "\r\n链接位置:" + dbUrl+ "\r\n用户/密码"+ dbUser + "/" + dbPwd); } return conn;}
    创建查询方法
    创建执行查询语句的方法exccuteQuery(),返回值为Resultset结果集。executeQuery()方法的代码如下:
    public ResultSet executeQuery(String sql) { try { // 捕捉异常 conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs = stmt.executeQuery(sql); } catch (SQLException ex) { System.err.println(ex.getMessage()); // 输出异常信息 } return rs; // 返回结果集对象}
    创建更新操作方法
    创建执行更新操作的方法executeUpdate(),返回值为int型的整数,代表更新的行数。executeUpdate()方法的代码如下:
    public int executeUpdate(String sql) { int result = 0; // 定义保存返回值的变量 try { // 捕捉异常 conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); result = stmt.executeUpdate(sql); // 执行更新操作 } catch (SQLException ex) { result = 0; // 将保存返回值的变量赋值为0 } return result; // 返回保存返回值的变量}
    关闭数据库连接
    创建关闭数据库连接的方法close()。close()方法的代码如下:
    public void close() { try { // 捕捉异常 if (rs != null) { // 当ResultSet对象的实例rs不为空时 rs.close(); // 关闭ResultSet对象 } if (stmt != null) { // 当Statement对象的实例stmt不为空时 stmt.close(); // 关闭Statement对象 } if (conn != null) { // 当Connection对象的实例conn不为空时 conn.close(); // 关闭Connection对象 } } catch (Exception e) { e.printStackTrace(System.err); // 输出异常信息 }}
    4.2.2 字符串处理类的编写字符串处理类主要用于解决程序中经常出现的有关字符串处理的问题,包括将数据库中及页面中有中文问题的字符串进行正确地显示和对字符串中的空值进行处理的方法。其代码如下:
    public class ChStr { public static String toChinese(String strvalue) { try { if (strvalue == null) { return ""; } else { strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK").trim(); return strvalue; } } catch (Exception e) { return ""; }}//处理字符串中的空值 public static final String nullToString(String v, String toV) { if (v == null || "".equals(v)) { v = toV; } return v;}
    4.2.3 配置StrutsStruts框架需要通过一个专门的配置文件来控制,就是struts-config.xml。那么网站是怎么找到这个Struts的配置文件的呢?只要在web.xml中配置一下就可以了。具体实现代码如下:
    <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> </servlet> <servlet> <servlet-name>action_tmp</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 设置默认文件名称 --> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>
    在web.xml中配置Struts的配置文件,实际就是一个servlet的配置,即在配置serylet的config参数中定义struts的配置文件(包括相对路径)及在servlet的URL访问里使用后缀名。接下来的工作就是如何配置struts-config.xml文件。Struts-config.xml文件的关键代码如下:
    <?xml version="1.0" encoding="UTF-8"?><struts-config> <data-sources /> <form-beans > <form-bean name="managerForm" type="com.wgh.actionForm.ManagerForm" /> … //此处省略其他<form-bean>代码 </form-beans> <action-mappings > <!-- 管理员 --> <action name="managerForm" path="/manager" scope="request" type="com.wgh.action.Manager" validate="true"> <forward name="managerLoginok" path="/main.jsp" /> <forward name="managerQuery" path="/manager.jsp" /> <forward name="managerAdd" path="/manager_ok.jsp?para=1" /> <forward name="pwdQueryModify" path="/pwd_Modify.jsp" /> <forward name="managerDel" path="/manager_ok.jsp?para=3" /> <forward name="modifypwd" path="/main.jsp" /> <forward name="error" path="/error.jsp" /> </action> … //此处省略其他<action >代码 </action-mappings></struts-config>
    4.3 主页设计4.3.1 主页概述管理员通过系统登录模块的验证后,可以登录到企业快信的系统主页。系统主页主要包括系统导航栏、显示区和版权信息3部分。其中,导航栏中的功能菜单将根据登录管理员的权限进行显示。例如,系统管理员tsoft登录后,将拥有整个系统的全部功能,因为他是超级管理员。系统主页的运行效果如图4-5 所示。

    4.3.2 主页技术分析在实现系统主页时,最关键的就是如何实现导航菜单.本系统中采用的方法是通过Javascript+CSS样式控制<div>标记来实现。其具体实现方法如下:
    在要显示导航菜单的位置添加相应的主菜单项。具体代码如下:
    <a href="main.jsp">首页</a> |<a onmouseover=showmenu(event,cardClip) onmouseout=delayhidemenu() class='navlink' style="CURSOR:hand" >名片夹管理</a> |<a onmouseover=showmenu(event,infoLibrary) onmouseout=delayhidemenu() class='navlink' style="CURSOR:hand" >信息库管理</a> |<a onmouseover=showmenu(event,shortLetter) onmouseout=delayhidemenu() class='navlink' style="CURSOR:hand" >发送短信</a> |<a href="sendMail.do?action=addMail">邮件群发</a> | <%if(purview.equals("1")){%><a href="sysParameterSet.do?action=parameterQuery" >系统参数设定</a> |<%}%><a onmouseover=showmenu(event,sysSet) onmouseout=delayhidemenu() class='navlink' style="CURSOR:hand">系统设置</a>| <a href="#" onClick="quit()">退出系统</a>
    在Javascript中指定各个子菜单的内容,并根据登录管理员的权限控制要显示的菜单项.关键代码如下:
    <script language="javascript">var cardClip='<table width=56><tr><td id=customer onMouseOver=overbg(customer) onMouseOut=outbg(customer)><a href=customer.do?action=customerQuery>客户管理</a></td></tr>\<tr><td id=personnel onMouseOver=overbg(personnel) onMouseOut=outbg(personnel)><a href=personnel.do?action=personnelQuery>员工管理</a></td></tr>\</table>'var infoLibrary='<table width=86><tr><td id=infoType onMouseOver=overbg(infoType) onMouseOut=outbg(infoType)><a href=infoType.do?action=infoTypeQuery>信息类别管理</a></td></tr>\<tr><td id=shortInfo onMouseOver=overbg(shortInfo) onMouseOut=outbg(shortInfo)><a href=shortInfo.do?action=shortInfoQuery>常用短语管理</a></td></tr>\</table>'<%if(purview.equals("1")){%> var shortLetter='<table width=86><tr><td id=sendLetter onMouseOver=overbg(sendLetter) onMouseOut=outbg(sendLetter)><a href=sendLetter.do?action=addLetter>发送短信</a></td></tr>\<tr><td id=historyQ onMouseOver=overbg(historyQ) onMouseOut=outbg(historyQ)><a href=sendLetter.do?action=historyQuery>查看发送日志</a></td></tr>\</table>'<%}else{%> var shortLetter='<table width=56><tr><td id=sendLetter onMouseOver=overbg(sendLetter) onMouseOut=outbg(sendLetter)><a href=sendLetter.do?action=addLetter>发送短信</a></td></tr>\</table>'<%}if(purview.equals("1")){%> var sysSet='<table width=70><tr><td id=manager onMouseOver=overbg(manager) onMouseOut=outbg(manager)><a href=manager.do?action=managerQuery>操作员管理</a></td></tr>\<tr><td id=changePWD onMouseOver=overbg(changePWD) onMouseOut=outbg(changePWD)><a href="manager.do?action=queryPWD">更改口令</a></td></tr>\</table>'<%}else{%> var sysSet='<table width=70><tr><td id=changePWD onMouseOver=overbg(changePWD) onMouseOut=outbg(changePWD)><a href="manager.do?action=queryPWD">更改口令</a></td></tr></table>'<%}%></script>
    4.4 名片夹管理模块设计4.4.1 名片夹管理模块概述名片夹管理模块主要包括客户信息管理和员工信息管理,其中,客户信息管理包括查看客户列表、添加客户信息、修改客户信息和删除客户信息4个功能:员工信息管理包括查看员工列表、添加员工信息、修改员工信息和删除员工信息4个功能。
    4.4.2 名片夹管理模块技术分析名片夹管理模块主要包括客户管理和员工管理两部分,由于这两部分的买现方法大致相同,所以本节将以客户管理为例介绍名片夹管理模块。在实现客户管理时,需要编写客户管理对应的ActionForm类和Action实现类。下面将详细介绍如何编写客户管理的ActionForm类和创建客户管理的Action实现类。
    编写客户管理的ActionForm类
    在客户管理中,只涉及到一个数据表,即tb_customer(客户信息表),根据这个数据表可以得出客户管理的ActionForm类。客户管理的ActionForm类的名称为CustomerForm,具体代码如下:
    public class CustomerForm extends ActionForm { private String bankNo; //银行账号 private String area; //所属区域 private String email; //邮箱 private String address; //地址 private String mobileTel; //手机号码 private String name; //客户全称 private int ID; //编号 private String bankName; //开户银行 private String postcode; //邮政编码 private String linkName; //联系人 public String getBankNo() { return bankNo; } public void setBankNo(String bankNo) { this.bankNo = bankNo; }… //此处省略其他控制客户信息的get()和set()方法}
    创建客户管理的Action实现类
    客户管理的Action实现类Customer继承了Action类.在该类中,首先需要在该类的构造方法中实例化客户管理的CustomerDAO类(该类用于实现与数据库的交互)。Action实现类的主要方法是execute(),该方法会被自动执行其本身没有具体的事务,是根据通过HttpservletRequest的getParamer()方法获取的action参数值执行相应方法的。客户管理的Action实现类的关键代码如下:
    public class Customer extends Action{ private CustomerDAO customerDAO = null; private ChStr chStr=new ChStr(); public Customer() { this.customerDAO = new CustomerDAO(); } public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){ String action = request.getParameter("action"); System.out.println("获取的查询字符串:" + action); if (action == null || "".equals(action)) { request.setAttribute("error","您的操作有误!"); return mapping.findForward("error"); }else if ("customerQuery".equals(action)) { return customerQuery(mapping, form, request,response); }else if("customerAdd".equals(action)){ return customerAdd(mapping, form, request,response); } else if("customerModify".equals(action)){ return customerModify(mapping, form, request,response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); }…… //此处省略了该类中其他方法,这些方法将在后面的具体过程中给出。}
    4.4.3 查看客户信息列表的实现过程查看客户信息列表使用的数据表:tb_customer
    管理员登录后,选择“名片夹管理/客户管理”命令,进入到查看客户列表页面,在该页面中将以列表形式显示全部客户信息,同时提供添加客户信息、修改客户信息、删除客户信息的超链接。查看客户信息列表页面的运行效果如图4-6 所示。

    在查看客户信息列表的方法customerQuery()中,首先调用CustomerDAO类中的query()方法查询全部客户信息,再将返回的查询结果保存到HttpServletRequest对象的CustomerQuery参数中.查看客户信息列表的方法CustomerQuery()的具体代码如下:
    private ActionForward customerQuery(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) { request.setAttribute("customerQuery", customerDAO.query(0)); return mapping.findForward("customerQuery");}
    查看客户信息列表使用的CustomerDAO类的方法是query()。该方法只有一个用于指定客户ID的参数id(如果记的值为null,则查询全部客户信息),然后将查询结果保存到List集合中并返回该集合的实例。Query()方法的具体代码如下:
    public List query(int id) { List customerList = new ArrayList(); CustomerForm cF = null; String sql=""; if(id==0){ sql = "SELECT * FROM tb_customer"; }else{ sql = "SELECT * FROM tb_customer WHERE ID=" +id+ ""; } ResultSet rs = conn.executeQuery(sql); try { while (rs.next()) { cF = new CustomerForm(); cF.setID(rs.getInt(1)); cF.setName(rs.getString(2)); ……//此处省略获取并设置其他属性的代码 cF.setLinkName(rs.getString(10)); customerList.add(cF); } } catch (SQLException ex) {} finally{ conn.close();//关闭数据库连接 } return customerList;}
    4.4.4 添加客户信息的实现过程添加客户信息使用的数据表:tb_customer。
    管理员登录后,选择“名片夹管理/客户管理”命令,进入到查看客户列表页面。在该页面中,单击“添加客户信息”超链接,进入到添加客户信息页面。添加客户信息页面的运行效果如图4-7 所示。

    设计添加客户信息页面
    添加客户信息页面主要用于收集输入的客户信息及通过自定义的Javascript函数验证输入信息是否合法,该页面中所涉及的表单元素如表4-3 所示。
    表tb_customer的表结构



    名 称
    元 素 类 型
    重 要 属 性
    含义




    title
    form
    action=”customer.do?action=customerAdd” method=”post” onSubmit=”return checkform(form1)
    表单


    name
    text
    size=”50”
    客户全称


    area
    text
    size=”30”
    所在区域


    address
    text
    size=”60”
    地址


    postcode
    text
    size=”6”
    邮政编码


    linkName
    text
    size=”20”
    联系人


    mobileTel
    text
    size=”30”
    手机号码


    Email
    text
    size=”50”
    邮箱


    bankName
    text
    size=”20”
    开户银行


    bankNo
    text
    size=”30”
    银行帐号


    Submit
    submit
    value=”提交”
    “提交”按钮


    Submit2
    reset
    value=”重置”
    “重置”按钮


    Submit3
    button
    onClick=”window.location.href=’customer.do?action=customerQuery’” value=”返回”
    “返回”按钮



    修改客户的Action实现类
    在添加客户信息页面中输入合法的客户信息后,单击“提交”按钮,网页会访问一个URL,即customer.do?action=customerAdd从该URL地址中可以知道添加客户信息模块涉及到的action的参数值为customerAdd,也就是当action=customerAdd时,会调用添加客户信息的方法customerAdd()。具体实现代码如下:
    if("customerAdd".equals(action)){ return customerAdd(mapping, form, request,response);}
    在添加客户信息的方法customerAdd()首先需要将接收到的表单信息强制转换成ActionForm类型,并用获得指定属性的getXXX()重新设置该属性的setXXX()方法,然后调用customerDAO类中的insert()方法,将添加的客户信息保存到数据表中,并将返回值保存到变量ret中.如果返回值为l,表示信息添加成功,将页面重定向到添加信息成功页面:如果返回值为2,表示该客户信息己经添加,将错误提示信息“该客户信息己经添加!”保存到HttpServletRequest对象的error参数中,然后将页面重定向到错误提示信息页面;否则将错误提示信息“客户信息添加失败里”保存到HttpServletRequest对象的error参数中,并将页面重定向到错误提示页面.添加客户信息的方法customerAdd()的具体代码如下:
    private ActionForward customerAdd(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) { CustomerForm customerForm = (CustomerForm) form; //此处需要进行中文转码 customerForm.setName(chStr.toChinese(customerForm.getName())); customerForm.setAddress(chStr.toChinese(customerForm.getAddress())); customerForm.setArea(chStr.toChinese(customerForm.getArea())); customerForm.setBankName(chStr.toChinese(customerForm.getBankName())); customerForm.setLinkName(chStr.toChinese(customerForm.getLinkName())); int ret = customerDAO.insert(customerForm); System.out.println("返回值ret:"+ret); if (ret == 1) { return mapping.findForward("customerAdd"); } else if(ret==2){ request.setAttribute("error","该客户信息已经添加!"); return mapping.findForward("error"); }else { request.setAttribute("error","添加客户信息失败!"); return mapping.findForward("error"); }}
    编写添加客户信息的CustomerDAO类的方法
    添加客户信息使用的customerDAO类的方法是insert()。在insert()方法中,首先从数据表tb_customer中查询输入的客户全称是否存在,如果存在,将标志变最设置为2,否则将输入的信息保存到客户信息表中,并将返回值赋给标志变量,最后返回标志变量。Insert()方法的具体代码如下:
    public int insert(CustomerForm cF) { String sql1="SELECT * FROM tb_customer WHERE name='"+cF.getName()+"'"; ResultSet rs = conn.executeQuery(sql1); String sql = ""; int falg = 0; try { if (rs.next()) { falg=2;} else { sql = "INSERT INTO tb_customer (id,name,address,area,postcode,mobileTel,email,bankName,bankNo,linkName) values(null,'" + cF.getName() + "','" +cF.getAddress() +"','"+cF.getArea()+"','"+cF.getPostcode()+"','"+cF.getMobileTel()+"','"+ cF.getEmail()+"','"+cF.getBankName()+"','"+cF.getBankNo()+"','"+cF.getLinkName()+"')"; falg = conn.executeUpdate(sql); System.out.println("添加客户信息的SQL:" + sql); conn.close(); } } catch (SQLException ex) { falg=0;} return falg;}
    Struts-config.xml文件配置
    在struts-config.xml文件中配置添加客户信息所涉及的<forward>元素。代码如下:
    <forward name="managerAdd" path="/manager_ok.jsp?para=1" />
    4.4.5 删除客户信息的实现过程在删除客户信息的方法customerDel()中,首先需要将接收到的表单信息强制转换成ActionForm类型,并用获得的记参数的值重新设置该ActionForm的setId()方法,再调用customerDAO类中的delete()方法,删除指定的客户信息,并根据执行结果将页面转到相应页面.删除客户信息的方法customerDel()的具体代码如下:
    private ActionForward customerDel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { CustomerForm customerForm = (CustomerForm) form; customerForm.setID(Integer.parseInt(request.getParameter("id"))); int ret = customerDAO.delete(customerForm); if (ret != 0) { request.setAttribute("error","删除客户信息失败!!"); return mapping.findForward("error"); } else { return mapping.findForward("customerDel"); }}
    删除客户信息使用的CustomerDAO类的方法是delete()。在delete()方法中,将从客户信息表tb_customer中删除符合条件的数据,并返回执行结果。delete()方法的具体代码如下:
    public int delete(CustomerForm customerForm) { int flag=0; try{ String sql = "DELETE FROM tb_customer where id=" + customerForm.getID() +""; flag = conn.executeUpdate(sql); }catch(Exception e){ System.out.println("删除客户信息时产生的错误:"+e.getMessage()); }finally{ conn.close(); //关闭数据库连 } return flag;}
    在struts-config.xml文件中配置添加客户信息所涉及的<forward>元素。代码如下:
    <forward name="managerDel" path="/manager_ok.jsp?para=3" />
    4.5 发送短信模块设计4.5.1 发送短信模块功能概述发送短信模块主要包括发送短信、查看发送日志两个功能。这两个功能之间的业务流程如图4-8 所示。

    发送短信模块是企业快信系统的核心模块之一,操作员可以通过该模块对企业内部的所有或者部分员工,以短信的形式发送企业通知、工资条、具体技术、开会等信息,并且这个信息是群体发送的。
    4.5.2 发送短信的实现过程发送短信使用的数据表:tb_shortLetter、tb_shortIfo、tb_info、tb_infoType、tb_customer和tb_personnel。
    管理员登录后,选择“发送短信”命令,进入到发送短信页面。在该页面中展开“名片夹”中的客户列表或员工列表,将显示相应的客户名称或员工姓名,单击指定的客户名称或员工姓名,系统会自动将该客户或员工的手机号码添加到右侧的“接收方手机号码”文本框中。如果用户想从信息库中选择常用短语直接添加到“短信内容”文本框中,可以先在“添加常用短语”下拉列表框中选择相应的类别,然后单击“确定”按钮,在打开的网页对话框中单击要添加的信息,即可将该信息添加到“短信内容”文本框中。短信内容填写完毕,单击“发送”按钮即可发送。发送短信页面的运行效果如图图4-9 所示。

    4.5.3 发送短信模块技术分析在实现发送短信模块时,需要编写发送短信模块对应的ActionForm类和Action实现类。下面将详细介绍如何编写发送短信模块的ActionForm类和创建发送短信的Action实现类。
    编写收发短信的ActionForm类
    在发送短信模块中,涉及到tb_shortLetter(短信表)、tb_customer(客户信息表)、tb_personnel(员工信息表)、tb_shortInfo(常用短语表)、tb_infoType(信息类型表)和tb_Parameter(系统参数表)6个数据表,与这6个数据表相对应的ActionForm类分别为ShortLetterForm、CustomerForm、PerrsonnelForm、shortInfoForm、InfoTypyForm、ParameterForm,这些类都是由属性及对应的getXXX()和setXX()方法组成,不再详细介绍。
    创建发送短信的Action类
    收发短信模块的Action实现类SendLetter维承了Action类.在该类中.首先需要在该类的构造方法中分别实例化收发短信模块的SendLetterDAO类、员工管理摸块的PersonnelDAO类、客户管理模块的CustomerDAO类和信息类别管理模块的InfoTypeDAO类。Action实现类的主要方法是execute(),该方法会被自动执行其本身没有具体的事务,是根据HttpServletRequest的getParameter()方法获取的Action参数值执行相应方法的。发送短信模块Action实现类的关健代码如下:
    public class SendLetter extends Action{ private SendLetterDAO sendLetterDAO = null; private PersonnelDAO personnelDAO=null; private CustomerDAO customerDAO=null; private InfoTypeDAO infoTypeDAO=null; private ChStr chStr=new ChStr(); public SendLetter() { this.sendLetterDAO = new SendLetterDAO(); this.personnelDAO=new PersonnelDAO(); this.customerDAO=new CustomerDAO(); this.infoTypeDAO=new InfoTypeDAO(); } public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){ String action = request.getParameter("action"); System.out.println("获取的查询字符串:" + action); if (action == null || "".equals(action)) { request.setAttribute("error","您的操作有误!"); return mapping.findForward("error"); }else if ("addLetter".equals(action)) { return addLetter(mapping, form, request,response); }else if("sendLetter".equals(action)){ return sendLetter(mapping, form, request,response); }else if("historyQuery".equals(action)){ return queryHistory(mapping, form, request,response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); } //编写短信页面应用的查询方法,用于查询收信人列表信息类别 private ActionForward addLetter(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) { request.setAttribute("personnelQuery",personnelDAO.query(0)); request.setAttribute("customerQuery",customerDAO.query(0)); request.setAttribute("shortInfo",infoTypeDAO.query(0)); return mapping.findForward("addLetter"); } //群发短信 private ActionForward sendLetter(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){ SendLetterForm sendLetterForm=(SendLetterForm) form; sendLetterForm.setContent(chStr.toChinese(sendLetterForm.getContent())); sendLetterForm.setFromMan(chStr.toChinese(sendLetterForm.getFromMan())); String ret=sendLetterDAO.sendLetter(sendLetterForm); if(ret.equals("ok")){ return mapping.findForward("sendLetter"); }else{ request.setAttribute("error",ret); return mapping.findForward("error"); } } //查看历史记录 private ActionForward queryHistory(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { request.setAttribute("history",sendLetterDAO.query()); return mapping.findForward("queryHistory"); }}
    编写发送短信的SendLetterDAO类的方法
    发送短信使用的sendLetterDAO类的方法是sendLetter()。在sendLettr()方法中,首先从数据表tb_parameter中查询出系统参数(即使用飞信接口发送短信所使用的端口、帐号、密码等参数),然后调用发送短信的方法mySend(),最后将发送短信的日志信息保存到数据表tbshortLetter中。sendLetter()方法的具体代码如下:
    public class SendLetterDAO { private ConnDB conn=new ConnDB(); List parameter = ParameterDAO.query(); ParameterForm parameterForm = (ParameterForm) parameter.get(0); private smssend smssendinformation = null; // 发送短信 public String sendLetter(SendLetterForm s) { String ret = ""; String info=""; String sendnum=""; String flag=""; try { String sql_p="SELECT * FROM tb_parameter"; ResultSet rs=conn.executeQuery(sql_p); if(rs.next()){ String phone=parameterForm.getDevice(); String pwd=parameterForm.getBaud(); info=s.getContent(); sendnum=s.getToMan(); flag=mySend(phone,pwd,sendnum,info);//发送短信 if(flag.equals("ok")){ String sql = "INSERT INTO tb_shortLetter values(null,'" +s.getToMan() +"','"+s.getContent()+"','"+s.getFromMan()+"',now())"; int r= conn.executeUpdate(sql); System.out.println("添加短信发送历史记录的SQL:" + sql); if(r==0){ ret="添加短信发送历史记录失败!"; }else{ ret="ok"; } }else{ ret=flag; } }else{ ret="发送短信失败!"; } } catch (Exception e) { System.out.println("发送短信产生的错误:" + e.getMessage()); ret = "发送短信失败!"; }finally{ conn.close(); } return ret; } public static String mySend(String phone,String pwd,String to,String msg) throws HttpException, IOException{ String ret=""; HttpClient client = new HttpClient(); PostMethod post = new PostMethod("http://quanapi.sinaapp.com/fetion.php");post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");//在头文件中设置转码 NameValuePair[] data ={ new NameValuePair("u", phone), new NameValuePair("p", pwd), new NameValuePair("to",to), new NameValuePair("m",msg), }; post.setRequestBody(data); client.executeMethod(post); Header[] headers = post.getResponseHeaders(); int statusCode = post.getStatusCode(); System.out.println("statusCode:"+statusCode); for(Header h : headers){ System.out.println(h.toString()); } post.releaseConnection(); ret = "ok"; return ret;} //中间省略查询日志的代码}
    struts-config.xml文件配置
    在struts-config.xml文件中配置发送短信所设计的<forward>元素。代码如下:
    <forward name=”sendLetter” path=”/sendLetter_ok.jsp”/>
    4.5.4 单元测试在开发完收发短信模块后,为了保证程序正常运行,要对模块进行单元测试.单元测试在程序开发中非常重要,只有通过单元测试才能发现模块中的不足之处,才能及时地纠正程序中出现的错误。进入到发送短信页面,在“接收方手机号码”文本框中输入相应的手机号码(多个手机号码间用逗号分隔),在“短信内容”文本框中输入短信内容后,单击“发送”按钮,正常情况下,会弹出“短信发送成功”的提示对话框,如果发送失败,则会弹出“短信发送失败”的提示对话框。
    4.6 发送邮件模块设计4.6.1 发送邮件模块功能概述发送邮件模块也是企业快信系统的核心模块之一,操作员可以通过该模块对企业内部的所有或者部分员工,以E-mail 电子邮件的形式发送企业通知、工资条等。另外,由于E-mail 有信息容量大、包含附件的两大优点,使它支持更多的信息内容,可以携带更丰富的资料,比较适合发送技术信息、会议主题、工作内容等信息,并且这个信息是群体发送的。该模块的运行效果如图4-10 所示。

    4.6.2 发送邮件模块技术分析在实现邮件发送模块时,需要编写邮件发送模块对应的ActionForm类和Action实现类。下面将详细介绍如何编写邮件发送模块的ActionForm类和创建邮件发送的Action实现类。
    编写邮件群发的ActionForm类
    虽然在邮件发送模块中,只涉及到tb_customer(客户信息表)和tb_personnel(员工信息表)两个数据表,但是邮件群发并不是只涉及到与这两个数据表相对应的ActionForm类—CustomerForm和PcrsonnelForm,本模块中还涉及到用于获取发送邮件所需的表单信息的ActionForm类―sendMailForm。
    创建邮件发送的Action实现类
    邮件发送模块的Action实现类SendMail继承了Action类。在该类中,首先需要在该类的构造方法中分别实例化邮件发送模块的SendMailDAO类、员工管理模块的PersonnelDAO类和客户管理模块的customerDAO类.Action实现类的主要方法是execute(),该方法会被自动执行.这个方法本身没有具体的事务,它是根据HttpServletRequest的getParameter()方法获取的action参数值执行相应方法的。邮件发送模块Action实现类的关键代码如下:
    public class SendMail extends Action{ private SendMailDAO sendMailDAO = null; private PersonnelDAO personnelDAO=null; private CustomerDAO customerDAO=null; private ChStr chStr=new ChStr(); public SendMail() { this.sendMailDAO = new SendMailDAO(); this.personnelDAO=new PersonnelDAO(); this.customerDAO=new CustomerDAO(); } public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){ String action = request.getParameter("action"); System.out.println("获取的查询字符串:" + action); if (action == null || "".equals(action)) { request.setAttribute("error","您的操作有误!"); //将错误信息保存到error中 return mapping.findForward("error"); //转到显示错误信息的页面 }else if ("addMail".equals(action)) { return addMail(mapping, form, request,response); }else if("sendMail".equals(action)){ return sendMail(mapping, form, request,response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); }}
    4.6.3 发送邮件模块实现过程发送邮件的Action实现类
    在邮件群发页面中填写相应的邮件信息后,单击“发送”按钮,网页会访问一个URL,即sendMail.do?action=sendMail。从该URL地址中可以知道发送邮件时涉及到的action的参数值为sendMail,也就是当action=sendMail时,会调用群发邮件的方法sendMail()。具体代码如下:
    if("sendMail".equals(action)){ return sendMail(mapping, form, request,response);}
    在发送邮件的方法sendMail()中,首先需要将接收到的表单信息强制转换成ActionForm类型,并用获得指定属性的getXXX()方法获取主题、附件、内容属性并进行转码后,再使用setXXX()方法重新设置该属性,然后调用SendMailDAO类中的sendMail()方法发送邮件,并将返回值保存到变量ret中。如果返回值为ok,则表示邮件发送成功,将页面重定向到邮件发送成功页面:否则,将错误提示信息保存到HttpservletRequest对象的errror参数中,并且将页面重定向到错误提示信息页面.群发邮件的方法sendMail()的具体代码如下:
    private ActionForward sendMail(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response){ SendMailForm sendMailForm=(SendMailForm) form; sendMailForm.setTitle(chStr.toChinese(sendMailForm.getTitle())); sendMailForm.setAdjunct(chStr.toChinese(sendMailForm.getAdjunct())); sendMailForm.setContent(chStr.toChinese(sendMailForm.getContent())); int ret=sendMailDAO.sendMail(sendMailForm); if(ret==0){ request.setAttribute("error","邮件发送失败!"); return mapping.findForward("error"); }else{ return mapping.findForward("sendMail"); }}
    编写发送邮件的SendMailDAO类的方法
    发送邮件使用的SendMailDA0类的方法是sendMail()。具体代码如下:
    public int sendMail(SendMailForm s) { int ret = 0; String from = s.getAddresser(); String to = s.getAddressee(); String subject = s.getTitle(); String content = s.getContent(); String password = s.getPwd(); String path = s.getAdjunct(); try { String mailserver ="smtp."+from.substring(from.indexOf('@')+1,from.length()); //在Internet上发送邮件时的代码 Properties prop = new Properties(); prop.put("mail.smtp.host", mailserver); prop.put("mail.smtp.auth", "true"); Session sess = Session.getDefaultInstance(prop); sess.setDebug(true); MimeMessage message = new MimeMessage(sess); message.setFrom(new InternetAddress(from)); // 给消息对象设置发件人 //设置收件人 String toArr[]=to.split(","); InternetAddress[] to_mail=new InternetAddress[toArr.length]; for(int i=0;i<toArr.length;i++){ to_mail[i]=new InternetAddress(toArr[i]); } message.setRecipients(Message.RecipientType.BCC,to_mail); //设置主题 message.setSubject(subject); Multipart mul = new MimeMultipart(); // 新建一个MimeMultipart对象来存放多个BodyPart对象 BodyPart mdp = new MimeBodyPart(); // 新建一个存放内容的BodyPart对象 mdp.setContent(content, "text/html;charset=gb2312"); mul.addBodyPart(mdp); // 将含有信件内容的BodyPart加入到MimeMulitipart对象中 if(!path.equals("") && path!=null){ //当存在附件时 // 设置信件的附件(用本机上的文件作为附件) mdp = new MimeBodyPart(); // 新建一个存放附件的BodyPart String adjunctname = new String(path.getBytes("GBK"), "ISO-8859-1"); // 此处需要转码,否则附件中包括中文时,将产生乱码 path = (System.getProperty("java.io.tmpdir") + "/" + path).replace("\\", "/"); System.out.println("路径:" + path); FileDataSource fds = new FileDataSource(path); DataHandler handler = new DataHandler(fds); mdp.setFileName(adjunctname); mdp.setDataHandler(handler); mul.addBodyPart(mdp); } message.setContent(mul); // 把mul作为消息对象的内容 message.saveChanges(); Transport transport = sess.getTransport("smtp"); // 以smtp方式登录邮箱,第1个参数是发送邮件用的邮件服务器SMTP地址,第2个参数为用户名,第3个参数为密码 transport.connect(mailserver, from, password); transport.sendMessage(message, message.getAllRecipients()); transport.close(); ret = 1; } catch (Exception e) { e.printStackTrace(); System.out.println("发送邮件产生的错误:" + e.getMessage()); ret = 0; } return ret;}
    4.6.4 单元测试在开发完邮件群发模块后,为了保证程序正常运行,一定要对模块进行单元测试,下面是原始的实现邮件发送的代码:
    if(!path.equals("") && path!=null){ //当存在附件时 // 设置信件的附件(用本机上的文件作为附件) mdp = new MimeBodyPart(); // 新建一个存放附件的BodyPart String adjunctname=path; path = (System.getProperty("java.io.tmpdir") + "/" + path).replace("\\", "/"); System.out.println("路径:" + path); FileDataSource fds = new FileDataSource(path); DataHandler handler = new DataHandler(fds); mdp.setFileName(adjunctname); mdp.setDataHandler(handler); mul.addBodyPart(mdp);}
    通过上面的代码实现的邮件群发会存在以下问题:当发送带有中文名称的邮件后.使用Outlook软件接收邮件时,附件的名称将产生乱码。这是因为在邮件群发的Action类中,己经将接收到的附件名称转换为GBK编码格式,而在OutLook接收附件时,采用的编码格式为ISO-8859-1,所以此处还需要将其转换为巧IOS-8859-1编码格式。那为什么还要在Action类中进行转码呢?这是因为如果不进行转换,在类中通过文件名获取文件路径时,将不能正常获取。修改后的完成邮件群发的代码如下:
    if(!path.equals("") && path!=null){ //当存在附件时 // 设置信件的附件(用本机上的文件作为附件) mdp = new MimeBodyPart(); // 新建一个存放附件的BodyPart String adjunctname = new String(path.getBytes("GBK"), "ISO-8859-1"); // 此处需要转码,否则附件中包括中文时,将产生乱码 path = (System.getProperty("java.io.tmpdir") + "/" + path).replace("\\", "/"); System.out.println("路径:" + path); FileDataSource fds = new FileDataSource(path); DataHandler handler = new DataHandler(fds); mdp.setFileName(adjunctname); mdp.setDataHandler(handler); mul.addBodyPart(mdp);
    5 技术分析5.1 开发技巧与难点分析5.1.1 添加收信人为了方便用户,系统中需要提供通过单击客户列表(或员工列表)中的客户全称(或员工姓名),即可将该客户(或员工)的联系手机号码添加到“接收方手机号码”文本框中的功能。实现该功能时.需要编写自定义的JavaScript函教add(),在该函数中需要对手机号码进行验证并实现累加手机号码到“接收方手机号码”文本框中的功能。Add()函数的具体代码如下:
    function add(mobileTel){ if(checkTel(mobileTel)){ s=form1.toMan.value; if(s.length>=11){ arrS=s.split(","); flag=false; //标记是否已经添加 for(i=0;i<arrS.length;i++){ if(arrS[i]==mobileTel){ //判断该手机号码是否已经添加 flag=true; break; } } if(!flag){ form1.toMan.value=s+","+mobileTel; } }else{form1.toMan.value=mobileTel;} }}
    5.1.2 插入短信为了方便用户,系统中需要提供将信息库中保存的常用短语添加到“短信内容”文本框中的功能。实现该功能的具体步骤如下:
    在发送短信页面的“添加常用短语”下拉列表框的右侧添加一个“确定”按钮,在该按钮的onClick事件中调用自定义的Javascript函数deal()。关键代码如下:
    function deal(infoType,text){ var someValue; var str="window.showModalDialog('shortInfo.do?action=selectShortInfo&id="+infoType+"','','dialogWidth=520px; dialogHeight=430px;status=no;help=no;scrollbars=no')"; someValue=eval(str); if(someValue!=undefined){text.value=text.value+someValue;}
    创建选择指定类别的常用短语的页面selectShortInfo.jsp,并且在该页面中添加用于将选择的常用短语返回到打开该窗口的交量,并且关闭当前窗口的自定义JavaScript函数selectInfo().selectInfo()函数的具体代码如下:
    <script language="javascript"> function selectInfo(info){ window.returnValue=info; window.close();}</script>
    在selectShortInfo.jsp中显示常用短语的代码上添加一个空的超链接,并且在其onClick事件中调用selectInfo()函数。具体代码如下:
    <a href="#" onClick="selectInfo('<%=s.getContent()%>')"><%=s.getContent()%></a>
    5.2 使用Java Mail 组件Java Mail 是Sun 公司发布用来处理E-mail 的API,是一种可选的、用于读取、编写和发送电子消息的包(标准扩展)。使用Java Mail 可以创建MUA(Mail User Agent,邮件用户代理的简称)类型的程序,它类似于Eudora、Pine 及Microsoft Outlook 等邮件程序。其主要目的不是像发送邮件或提供MTA(Mail Transfer Agent,邮件传输代理)类型程序那样用于传输、发送和转发消息,而是可以与MUA 类型的程序交互,以阅读和撰写电子邮件。MUA 依靠MTA 处理实际的发送任务。Java Mail API 中提供很多用于处理E-mail 的类,其中比较常用的有Session(会话)类、Message(消息)类、Address(地址)类、 Authenticator(认证方式)类、Transport(传输)类、Store(存储)类和Folder(文件夹)类7 个类。这7 个类都可以在Java Mail API 的核心包mail.jar 中找到,下面进行详细介绍。
    5.2.1 Session 类Java Mail API 中提供了Session 类,用于定义保存诸如SMTP 主机和认证的信息的基本邮件会话。通过Session 会话可以阻止恶意代码窃取其他用户在会话中的信息(包括用户名和密码等认证信息),从而让其他工作顺利执行。
    每个基于Java Mail 的程序都需要创建一个Session 或多个Session 对象。由于Session 对象利用java.util.Properties 对象获取诸如邮件服务器、用户名、密码等信息,以及其他可在整个应用程序中共享的信息, 所以在创建Session 对象前, 需要先创建java.util.Properties 对象的实例。创建java.util.Properties 对象的实例的代码如下:
    Properties props=new Properties();
    创建Session 对象可以通过以下两种方法,不过通常情况下会使用第二种方法创建共享会话。
    使用静态方法创建Session 的语句如下:
    Session session = Session.getInstance(props, authenticator);
    创建默认的共享Session 的语句如下:
    Session defaultSession = Session.getDefaultInstance(props, authenticator);
    如果在进行邮件发送时,不需要指定认证方式,可以使用空值(null)作为参数authenticator 的值。例如创建一个不需要指定认证方式的Session 对象的代码如下:
    Session mailSession=Session.getDefaultInstance(props,null);
    5.2.2 Address 类Address 类用于设置电子邮件的响应地址。Address 类是一个抽象类,要使用该抽象类可以使用其子类InternetAddress,该类保存在javax.mail.internet 包中,可以按照指定的内容设置电子邮件的地址。如果想对InternetAddress 类进行操作,首先要实例化该类的一个对象。在实例化该类的对象时,有以下两种方法。
    创建带有电子邮件地址并显示其他标识信息的地址,可以将电子邮件地址和附加信息同时传递给InternetAddress 类的构造方法。代码如下:
    InternetAddress address = new InternetAddress("wgh717@sohu.com","WangGuoHui");
    5.2.3 Authenticator 类Authenticator 类通过用户名和密码来访问受保护的资源。Authenticator 类是一个抽象类,要使用该抽象类首先需要创建一个Authenticator 的子类,并重载getPasswordAuthentication()方法。具体代码如下:
    class WghAuthenticator extends Authenticator { public PasswordAuthentication getPasswordAuthentication() { String username = "wgh"; //邮箱登录账号 String pwd = "111"; //登录密码 return new PasswordAuthentication(username, pwd); }}
    然后再通过以下代码实例化新创建的Authenticator 的子类,并将其与Session 对象绑定。
    Authenticator auth = new WghAuthenticator ();Session session = Session.getDefaultInstance(props, auth);
    5.2.4 Transport 类Transport 类用于使用指定的协议(通常是SMTP)发送电子邮件。Transport 类提供了以下两种发送电子邮件的方法:

    只调用其静态方法send(),按照默认协议发送电子邮件。代码如下:
    Transport.send(message);
    首先从指定协议的会话中获取一个特定的实例,然后传递用户名和密码,再发送信息,最后关闭连接。代码如下:
    Transport transport =sess.getTransport("smtp");transport.connect(servername,from,password);transport.sendMessage(message,message.getAllRecipients());transport.close();

    在发送多个消息时,建议采用第二种方法,因为它将保持消息间活动服务器的连接,而使用第一种方法时,系统将为每一个方法的调用建立一条独立的连接。
    结论通过一个典型实用的企业快信应用系统,系统地介绍了如何利用JSP应用程序,实现群发手机短信和群发电子邮件的方法。在实现该企业快信系统时,还添加了几个方便用户使用的功能,例如利用名片夹管理名片信息,以及利用信息库管理信息模板,这样用户就不用反复地填写收信人列表以及编写重复的信息了。
    该系统从问题定义到可行性研究、需求分析、总体设计、详细设计直到最后的系统测试,基本上实现了设计要求的各项功能。实现了名片夹管理、信息库管理、短信发送、邮件群发、系统设置等功能。每个模块都提供了相关的数据库操作,如增、删、查、改。在开发中,采用了 MySQL 数据库、JAVA MAIL 组件技术。短信群发,邮件群发能做到为企业提供实际的应用服务。
    本系统的特点是利用飞信API的原理及方法,实现对单人或多人进行发送短信并利用 JAVA MAIL API 组件的一些类方法实现了邮件群发功能,方便了企业内部之间沟通交流更加方便快捷。但由于时间有限,系统还有很多不足之处。比如系统界面设计不够美观,我会在以后的学习和工作之余不断完善。
    参考文献[1] 刘春.企业级JavaMail在Oracle系统中部署[J]. 指挥信息系统与技术,2013,(01)
    [2] 邱宏茂,许朝阳,盖磊. 基于JavaMail的Web Mail系统的实现 [J].计算机应用与软件, 2005,(06)
    [3] 王文帅,张红梅.基于JavaMail的点对点邮件批量发送系统 [D]. 第14届全国计算机、网络在现代科学技术领域的应用学术会议,2009
    [4] 刘芳. 基于短信猫的短信发送平台的设计与实现 [J]. 电脑知识与技术,2013,(31)
    [5] 原泉,蔡晶.针对短信猫接收短信的安全风险分析 [J]. 计算机安全, 2013,(06)
    [6] 徐宇斐.企业快信系统的设计与实现 [D].吉林大学,(2013)
    [7] 路高鹏.短信群发软件的设计与实现 [J].计算机与网络,2013,(05)
    [8] Ratecki, Krzysztof; Sakowicz, Bartosz.Configurable client email application working as web page [R] .MODERN PROBLEMS OF RADIO ENGINEERING, TELECOMMUNICATIONS AND COMPUTER SCIENCE, PROCEEDINGS,2006,(06)
    [9] Kuantama, Endrowednes; Mardjoko, Pono.Design and Construction of Early Flood Warning System Through SMS based on SIM300C GSMModem [R]. (ICICI-BME) ,2013,(03)
    [10] Lv, Fangxing; Xie, Xiaoyao; Zhang, Cuicui. Research and Development of E-mail Program Based on Java [J]. PROCEEDINGS OF THE 3RD INTERNATIONAL CONFERENCE ON ANTI-COUNTERFEITING, SECURITY, AND IDENTIFICATION IN COMMUNICATION,2009
    0  留言 2020-07-31 11:33:36
  • 基于JSP和SQL Server的电子书下载系统的设计与实现

    第1章 绪论电子书代表人们所阅读的数字化出版物, 从而区别于以纸张为载体的传统出版物, 电子书是利用计算机技术将一定的文字、图片、声音、影像等信息, 通过数码方式记录在以光、电、磁为介质的设备中, 借助于特定的设备来读取、复制、传输,已经为人们所熟悉。
    众所周知,自20世纪80年代以来,电子图书的出现和迅速发展已经引起社会各界的普遍关注。在信息社会化和社会信息化的今天,电子图书极大地刺激了传统图书出版、发行市场,改变了读者阅读习惯,给人类社会文化和社会生活带来了深刻的变革。一般情况下,阅读电子图书主要有两种形式,一种是在线或在PC机上阅读,即通过台式电脑或笔记本电脑直接阅读网站提供的免费或付费的电子图书,也可以下载到本地计算机上阅读;另一种是离线或脱机阅读,即通过使用专用的手持阅读器阅读。手持阅读器具有体积小,分量轻,容易携带的特点,不受时间、地点、环境的限制。而且,随着阅读器材技术、内容、格式的日臻完善,电子图书必将展示其更为广阔的发展空间。
    对比传统的图书出租的书店,电子书租借平台有许多的优越性。对租借者来说,方便了大家租借图书的途径,不必走出家门,只需有一台电脑,一根网线,连上网就可以访问因特网上大量的电子书网站。随着因特网发展和上网用户的增加,农村也已开始有越来越多的网络连接,上网早已不是难事,所以,一个网络的电子书租借平台可以适应大众的需求。对于管理者来说,便于管理,运营成本低,没有地域限制。总之,电子书租借平台有着很高的灵活性和方便性,随着社会的发展,会为越来越多的人所接受,有着极高的应用前景。
    在国外,电子图书的发展体现在阅读软件和阅读硬件两个方面。阅读软件主要指在线阅读器,阅读硬件一般是手持式阅读器,也包括手机。各软硬件生产厂商为了更好的吸引消费者,在这上面都下了不小的精力来完善自己产品的功能,保证产品质量和提高其可用性,竞争也比较激烈。
    在国内,最为普遍的电子书阅读终端是PC,手机阅读电子书的方式也在逐渐增加,而专用的手持阅读器还有待推广。国内已经出现了很多的电子书网站,比较出名的有晋江文学、潇湘书院、小说阅读网等,内容包括一些原创,各类小说和国内外名著。为了自身发展,网站往往和一些网络作家签约,网络作家在签约网站发表自己的原创并获得不低的著作费,这样也丰富了网站的内容,更好地吸引读者,达到双赢的目的。网站盈利的方式主要是向读者收取阅读费,收费方式不尽相同,一般分为按字数收取,按本数收取和按时间收取费用,所以,拥有一个广大的用户群是保证网站持续良好发展的基础。网站也可以靠出租广告位置获得额外的利益,但是过多的广告,会影响网页的美观简洁,一些弹窗广告甚至会影响读者的操作,给用户造成不必要的麻烦,所以广告的投放一般不会过多。
    第2章 主要技术概述2.1 B/S结构B/S 是 Brower/Server 就是用浏览器(如IE)为应用程序客户端操作服务器。这样用浏览器来操作简单易用,但是对输入没有很好的验证。逻辑实现不多。本地只是用于获取数据然后大部分验证需要提交服务器来完成。
    B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构[4]。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
    以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
    B/S架构软件的优势与劣势:

    维护和升级方式简单:目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器
    成本降低,选择更多:大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位。现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使的最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行
    应用服务器运行数据负荷较重:由于B/S架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。但是,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。因此,许多单位都备有数据库存储服务器,以防万一

    2.2 JSP技术JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
    Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
    JSP与Java Servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览[5]。
    JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
    自JSP推出后,众多大公司都支持JSP技术的服务器,如IBM、Oracle、Bea公司等,所以JSP迅速成为商业应用的服务器端语言。
    2.2.1 JSP技术的强势
    一次编写,到处运行。除了系统之外,代码不用做任何更改
    系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的
    强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力
    多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下
    支持服务器端组件。web应用需要强大的服务器端组件来支持,开发人员需要利用其他工具设计实现复杂功能的组件供web页面调用,以增强系统性能。JSP可以使用成熟的JAVA BEANS 组件来实现复杂商务功能

    2.2.2 JSP技术的弱势
    与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性
    Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的.java文件和.class文件,以及对应的版本文件

    2.3 SQL Server 2000数据库SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统的一个版本。该版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能,具有使用方便,可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。
    SQL Server 2000 系统之间之所以成为目前流行的大型商用数据库系统,有着其深刻的内在因素,这与它鲜明的特点是分不开的:

    与Internet 的高度集成:SQL Server 2000与其它Microsoft Back Office产品紧密集成,在安全、事件浏览、Windows NT服务程序、性能监视器、多处理器支持、索引服务器等方面充分利用了它们的长处,形成了自己独特的优势
    高伸缩性和适应性:同一SQL Server 2000数据库引擎运行在Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、Windows 98和Windows Millennium Edition上。还运行在Windows NT 4.0版的所有版本上。此数据库引擎是一个功能强健的服务器,可管理供上千用户访问的TB数据库。同时,当以默认设置运行时,SQL Server 2000还具有动态自调整等功能,这使得它可以有效地运行在便携式电脑和台式机中,用户无需承担管理任务。SQL Server 2000 Windows CE版将SQL Server 2000程序设计模型扩展到移动的Windows CE设备上,并且可以很容易地集成到SQL Server 2000环境中
    企业级数据库功能强:SQL Server 2000关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护资料完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。SQL Server 2000分布式查询使您得以引用来自不同资料源的资料,就好象这些资料是SQL Server 2000数据库的一部分,同时分布式事务支持充分保护任何分布式资料更新的完整性。复制同样使您得以维护多个资料复本,同时确保单独的资料复本保持同步。可将一组资料复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器
    易于安装和使用:SQL Server 2000中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用SQL Server的过程。SQL Server 2000还支持基于标准的、与Windows DNA集成的程序设计模型,使SQL Server 2000数据库和资料仓库的使用成为生成强大的可伸缩系统的无缝部分
    具有决策支持的资料仓库:SQL Server 2000提供了数据转换服务、联机分析处理(OLAP)、数据挖掘支持、English Query、Meta Data Services等等工具,以便对数进行析取、分析汇总资料并对数据库的设计提供帮助

    2.4 JDBC数据库连接JDBC(Java DataBase Connectivity)称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序。
    JDBC定义了Java语言同SQL数据之间的程序设计接口。JDBC有一个非常独特的动态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:Java的应用程序、JDBC驱动器管理器、驱动器和数据源。简单地说,JDBC可做三件事:与数据库建立连接、发送SQL语句,处理结果。
    2.4.1 JDBC接口一般来说,JDBC API中有两层接口:应用程序层,开发人员用API通过SQL调用数据库和取得结果;驱动程序层,处理与具体驱动程序版本的所有通讯。
    JDBC API是一系列抽象的接口,应用程序开发人员通过它可以编写访问数据库的Java应用程序。JDBC API中,抽象类的实现是由驱动程序开发商提供的。驱动程序实现了应用程序和某个数据库产品之间的接口,它的管理器则对应用程序和驱动程序之间的交互进行控制。JDBC API主要用来连接数据库和直接调用SQL命令,执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句,以及带IN和OUT参数的存储过程。
    JDBC API是一个标准统一的SQL数据存取接口,它为Java程序提供了一个统一无缝地操作各种数据库的接口,程序员编程时,可以不关心它所要操作的数据库是哪个厂家的产品,从而提高了软件的通用性。而且在Internet上确实无法预料你的用户想访问什么类型的数据库,只要系统上安装了正确的驱动器组,JDBC应用程序就可以访问其相关的数据库。您只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL语句。而且,使用Java编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。将Java和JDBC结合起来将使程序员只需写一遍程序就可让它在任何平台上运行。
    2.4.2 JDBC的驱动程序JDBC的数据库访问要通过JDBC驱动程序来完成,JDBC驱动程序是Java应用程序与物理数据库之间桥梁。JDBC驱动程序可以分为下面四种类型,分别适用于不同的场合[6]。

    JDBC-ODBC桥驱动程序:这类驱动程序负责将JDBC转换为ODBC,然后通过JDBC-ODBC的方法调用ODBC驱动程序来存取数据库
    本机应用编程接口的JDBC驱动程序:这类驱动程序部分采用Java语言编写,部分采用本地代码编写。这种JDBC驱动会将客户机的JDBC调用转换为对特定数据库驱动程序的调用,进而存取数据库,因此必须先在客户机上安装好特定的数据库的数据访问驱动库才能使用
    数据库中间件的纯JDBC驱动程序:这种类型的驱动程序把客户端的JDBC调用转换为一种独立于特定数据库的协议,然后将数据库访问请求传输给服务器组件,最后该服务器组件将访问请求转换为特定数据库的协议
    直接连接数据库的纯JDBC驱动程序:这种类型的驱动程序可以将客户端的JDBC请求直接转换成特定数据库的协议,所有存取数据库的操作,都直接由驱动程序来完成

    2.5 TOMCAT应用服务器Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
    Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
    Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
    在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapps目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。另外Tomcat也提供了一个应用:manager,访问这个应用需要用户名和密码,用户名和密码存储在一个xml文件中。通过这个应用,辅助于Ftp,你可以在远程通过Web部署和撤销应用,当然本地也可以。Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。这种集成只需要修改一下Apache和Tomcat的配置文件即可。
    第3章 需求分析3.1 系统功能描述该系统是用于用户对电子书的租借和相互交流,运营者可以管理此平台盈利,是一个基于在线阅读的平台,怎样可以方便管理者的管理并实现盈利,方便用户的使用,提供搜索和租借功能并且提供一个给用户的交流平台是研究的主要内容。重点在于对访问该系统的身份进行基于角色的识别,使系统可以允许三种不同的角色进行访问,即游客、会员、管理员,并赋予他们不同的访问权限。
    3.1.1 用户及主要操作功能游客可以浏览网站的主页,但是需要注册为会员后才能对电子书进免费行阅读或租借。会员登录需要输入帐号和密码信息,每个会员的帐号下都会对应有相关的个人信息,如个人邮箱,地址等,不同的会员等级在租借图书时会有不同的待遇。以管理员身份登录也需要输入账号和密码,可以管理会员信息,添加公告,管理留言板等,管理员的角色在该系统中拥有最高的权限。
    3.1.2 系统角色管理模块
    在会员模块,作为会员,可以查看个人的信息,修改自己的密码;作为管理员可以查看,管理,删除会员信息
    在管理员模块,可以添加、删除管理员,管理员可以修改自己的密码

    3.1.3 电子书管理模块电子书管理模块包括不同电子书类别的添加,删除以及电子书的上传,删除管理。

    电子书类别的添加是由管理员进行的,可以包括武侠小书,都市言情,穿越小书等各个类别。按照付费与否可以添加免费和付费两种类别,当然这和前一种分类方式并不冲突
    各类电子书由管理员上传,上传时如果是付费电子书,可以设置下载此电子书是所需费用
    对于一些过时,或人气不高的电子书,系统管理员可以进行删除操作

    3.1.4 公告模块公告模块主要包括了公告的发布、编辑、删除和浏览;公告的发布、编辑和删除只能由管理员来进行。
    3.2 系统性能需求分析电子书租赁下载系统是对广大读书爱好者设计的一个系统,提供给读者一个寻找读物的平台,因此必须方便用户的注册,搜索和下载等功能,并提供一个交流平台。系统应该具有开放性和可靠性,同时又要方便进行操作和维护。
    3.3 开发环境及开发工具
    操作系统:Windows XP SP3
    语言选择:JSP 、JavaScript
    数据库选择:SQL Server 2000
    主要开发工具:Dreamweaver CS3、Eclipse 3.4
    Web应用服务器:Tomcat 5.5

    第4章 概要设计本章详细的介绍了本系统的设计实现,包括系统功能模块的设计和数据库的设计,系统功能模块设计主要介绍了系统的功能和各功能实现的流程,数据库设计主要介绍了数据库表的设计和各字段的意义。
    4.1 系统的体系结构结构设计是系统设计的关键,结构是整个系统的骨架,将对系统的性能起决定性的作用,采用如图4-1所示的结构模式。图中客户端可分别为:管理员、游客、和会员三种角色。

    4.2 系统功能结构设计电子书租赁下载系统包括了用户登录模块和匿名模块,在用户登录模块中角色分为管理员和会员三种角色。管理员可以对用户进行管理,可以建立数目类别,上传电子书,公告的编辑和发布;会员可以浏览系统公告、电子书信息,可以同其他会员进行交流。

    4.2.1 管理员模块本模块包括会员管理、公告管理和书籍管理三部分。具体功能结构分析如图4-3所示。

    4.2.2 会员模块本模块包括信息管理,点券充值,书籍搜索三部分,具体的功能结构如图4-4所示。

    4.3 系统流程图4.3.1 会员管理会员管理包括对公司新近员的信息进行查看和删除等操作。还有对点券充值的确认。
    删除会员
    首先查看会员的信息,查看的会员的信息必须在库里存在,如果有即可找到,如果没有就不能看到。当找到相应的记录后就会显示出来,然后对会员信息进行删除,删除完成该会员的信息就不存在数据库中。

    4.3.2 公告管理系统公告的管理由管理员来进行管理,系统公告发布后所有人都可以看见,系统公告的数据表(newsinfo),所有公司公告的相关操作均在本表了进行操作。
    4.4 数据库设计数据库设计是系统设计中非常重要的环节。数据库设计是整个系统的根基,如果设计不好,在后来的系统维护、变更和功能扩充时,甚至在系统开发过程中,将会引起比较大的问题,有时将会重新进行大量的工作。
    数据库名:manage(软件项目团队管理系统)
    本系统中一共用到了以下几个数据表:
    电子书类别表(t_catelog):存储电子书类别信息,具体为表4-1所示:




    名称
    别名
    类型
    长度(字符)




    1
    id
    编号
    Int
    4


    2
    name
    类别名称
    Varchar
    50


    3
    jieshao
    类别介绍
    Varchar
    5000



    电子书表(t_book):用于存放电子书信息,具体如表4-2所示:




    名称
    别名
    类型
    长度(字符)




    1
    id
    编号
    Int
    4


    2
    catalog_id
    类别编号
    Int
    50


    3
    name
    名称
    Varchar
    50


    4
    zuozhe
    作者
    Varchar
    50


    5
    shifoumianfei
    是否免费
    Varchar
    50


    6
    dianquan
    下载所需点券
    Varchar
    50


    7
    daxiao
    大小
    Varchar
    50


    8
    jieshao
    介绍
    Varchar
    50


    9
    mianfeizhangjie
    免费试读
    Varchar
    50


    10
    fujian
    附件
    Varchar
    50



    会员信息表 (t_user):记录会员信息,具体如表4-3所示:




    名称
    别名
    类型
    长度(字符)




    1
    id
    编号
    Int
    4


    2
    loginname
    登录帐号
    Varchar
    50


    3
    loginpw
    登录密码
    Varchar
    50


    4
    name
    姓名
    Varchar
    50


    5
    sex
    性别
    Varchar
    50


    6
    age
    年龄
    Varchar
    50


    7
    address
    住址
    Varchar
    50


    8
    tel
    联系方式
    Varchar
    50


    9
    email
    邮箱
    Varchar
    50


    10
    dianquan
    拥有点券值
    Int
    4



    充值表(t_chongzhi):用来存放会员充值信息,具体设计如表4-4所示:




    名称
    别名
    类型
    长度(字符)




    1
    id
    编号
    Int
    4


    2
    user_id
    会员编号
    Int
    4


    3
    jine
    充值金额
    Int
    4


    4
    fukuanfangshi
    付款方式
    Varchar
    50


    5
    shijian
    充值时间
    Varchar
    50


    6
    zhuangtai
    审核状态
    Varchar
    50



    留言表(t_liuyan):用来存放所有的留言信息,具体设计如表4-5所示:




    名称
    别名
    类型
    长度(字符)




    1
    id
    编号
    Int
    4


    2
    title
    标题
    Varchar
    50


    3
    content
    内容
    Varchar
    50


    4
    shijian
    留言时间
    Varchar
    50


    5
    user_id
    会员编号
    Int
    4



    公告表(t-gonggao):用来存放公告信息,具体设计如表4-6所示:




    名称
    别名
    类型
    长度(字符)




    1
    id
    编号
    Int
    4


    2
    title
    标题
    Varchar
    50


    3
    content
    内容
    Varchar
    50


    4
    shijian
    留言时间
    Varchar
    50



    系统管理员表(t_admin):用来存放管理员信息,具体设计如表4-7所示:




    名称
    别名
    类型
    长度(字符)




    1
    userId
    编号
    Int
    4


    2
    userName
    帐号
    Varchar
    50


    3
    userPw
    密码
    Varchar
    50



    第5章 详细设计本章介绍的是软件项目团队管理系统的详细功能,包括了页面的设计以及程序的设计。
    5.1 公告管理模块公告管理包括了公告的发布、管理和浏览,下面介绍这些功能。
    5.1.1 浏览公告浏览公告是前台页面的功能,只要登录网站主页即可进行公告的浏览,在主页上显示最新的几条公告。

    公告模板的核心代码:
    List gonggaoList=new ArrayList();String sql="select * from t_gonggao order by id desc";Object[] params={};DB mydb=new DB();try{ mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { Tgonggao gonggao=new Tgonggao(); gonggao.setId(rs.getString("id")); gonggao.setTitle(rs.getString("title")); gonggao.setContent(rs.getString("content")); gonggao.setShijian(rs.getString("shijian")); gonggaoList.add(gonggao); } rs.close();}catch(Exception e){ e.printStackTrace();}mydb.closed();
    某条公告的显示页面:

    5.1.2 发布公告发布公告是由管理员来进行的操作,只有管理员有权限进行公告的发布及修改、删除,其他人只能够进行浏览,而管理员进行公告发布之前需要进行登录,登录界面如图5-5所示:

    在登陆进入管理页面之后,就可以进行公告的发布,管理员进入管理页面之后可以进行很多操作,而公告的发布与管理只是管理员众多工作之一,图5-6为管理员登陆后的界面:

    5.1.3 管理公告公告发布后要及时对公告进行管理,管理界面如图5-7所示:

    以下公告管理的核心代码:
    public void gonggaoAdd(HttpServletRequest req,HttpServletResponse res){ String id=String.valueOf(new Date().getTime()); String title=req.getParameter("title"); String content=req.getParameter("content"); String shijian=new Date().toLocaleString(); String sql="insert into t_gonggao values(?,?,?,?)"; Object[] params={id,title,content,shijian}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "gonggao?type=gonggaoMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res);}public void gonggaoDel(HttpServletRequest req,HttpServletResponse res){ String id=req.getParameter("id"); String sql="delete from t_gonggao where id=?"; Object[] params={id}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "gonggao?type=gonggaoMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res);}public void gonggaoMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ List gonggaoList=new ArrayList(); String sql="select * from t_gonggao"; Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { Tgonggao gonggao=new Tgonggao(); gonggao.setId(rs.getString("id")); gonggao.setTitle(rs.getString("title")); gonggao.setContent(rs.getString("content")); gonggao.setShijian(rs.getString("shijian")); gonggaoList.add(gonggao); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); req.setAttribute("gonggaoList", gonggaoList); req.getRequestDispatcher("admin/gonggao/gonggaoMana.jsp").forward(req, res);}
    5.2 会员模块会员模块包括会员注册,搜索租借和点券的充值。
    5.2.1 会员注册首先介绍会员信息的注册,具体界面如图5-9所示:

    会员信息的注册有一定的限制条件,用户名必填项,年龄必须为数字,密码输入两次必须一致,否则会提示出错。
    会员注册的核心代码如下:
    public void userReg(HttpServletRequest req,HttpServletResponse res){ String id=String.valueOf(new Date().getTime()); String loginname=req.getParameter("loginname"); String loginpw=req.getParameter("loginpw"); String name=req.getParameter("name"); String sex=req.getParameter("sex"); String age=req.getParameter("age"); String address=req.getParameter("address"); String tel=req.getParameter("tel"); String email=req.getParameter("email"); String qq=req.getParameter("qq"); int dianquan=0; String del="no"; String sql="insert into t_user values(?,?,?,?,?,?,?,?,?,?,?,?)"; Object[] params={id,loginname,loginpw,name,sex,age,address,tel,email,qq,dianquan,del}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); String targetURL = "/common/add_success.jsp"; dispatch(targetURL, req, res);}
    5.2.2 点券充值点券充值应为条件限制,不能做到与付费接口的连接,再此只做模拟,点券充值后需由管理员来确认。具体界面如图5-10所示:

    点券充值的核心代码如下:
    public void chongzhiAdd(HttpServletRequest req,HttpServletResponse res){ String user_id=req.getParameter("user_id"); int jine=Integer.parseInt(req.getParameter("jine")); String fukuanfangshi=req.getParameter("fukuanfangshi"); String shijian=new Date().toLocaleString(); String zhuangtai="a"; String sql="insert into t_chongzhi values(?,?,?,?,?)"; Object[] params={user_id,jine,fukuanfangshi,shijian,zhuangtai}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("msg", "申请成功。等待管理员审核"); String targetURL = "/common/msg.jsp"; dispatch(targetURL, req, res);}public void chongzhiMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ List chongzhiList=new ArrayList(); String sql="select * from t_chongzhi order by zhuangtai"; Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { Tchongzhi chongzhi=new Tchongzhi(); chongzhi.setId(rs.getInt("id")); chongzhi.setUser_id(rs.getString("user_id")); chongzhi.setJine(rs.getInt("jine")); chongzhi.setFukuanfangshi(rs.getString("fukuanfangshi")); chongzhi.setShijian(rs.getString("shijian")); chongzhi.setZhuangtai(rs.getString("zhuangtai")); chongzhiList.add(chongzhi); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); req.setAttribute("chongzhiList", chongzhiList); req.getRequestDispatcher("admin/chongzhi/chongzhiMana.jsp").forward(req, res);}
    5.2.3 搜索和下载书籍登录到系统的会员,可以搜索自己喜爱的书籍, 可以按照书名搜索,也可以按照作者搜索, 如果有符合搜索条件的书籍,则会显示在主页面。
    搜索书籍的界面:

    核心代码如下:
    public void bookSearch(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ List bookList=new ArrayList(); String sql="select * from t_book where del='no' and name like '%"+req.getParameter("name").trim()+"%'"+" and zuozhe like '%"+req.getParameter("zuozhe").trim()+"%'"; System.out.println(sql+"^^^^^"); Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { Tbook book=new Tbook(); book.setId(rs.getInt("id")); book.setCatelog_id(rs.getInt("catelog_id")); book.setName(rs.getString("name")); book.setShifoumianfei(rs.getString("shifoumianfei")); book.setDianquan(rs.getInt("dianquan")); book.setDaxiao(rs.getString("daxiao")); book.setJieshao(rs.getString("jieshao")); book.setMianfeizhangjie(rs.getString("mianfeizhangjie")); book.setFujian(rs.getString("fujian")); book.setFujianYuanshiming(rs.getString("fujianYuanshiming")); book.setFabushijian(rs.getString("fabushijian")); book.setDel(rs.getString("del")); book.setCatelog(liuService.getCatelog(rs.getInt("catelog_id"))); bookList.add(book); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); req.setAttribute("bookList", bookList); req.getRequestDispatcher("qiantai/book/bookSearch.jsp").forward(req, res);}
    下载书籍界面:

    下载核心代码:
    try{ String fujianPath=request.getParameter("fujianPath"); String fujianYuashiMing=request.getParameter("fujianYuashiMing"); fujianYuashiMing=java.net.URLDecoder.decode(fujianYuashiMing,"UTF-8"); System.out.println(fujianYuashiMing+fujianPath); SmartUpload su = new SmartUpload(); // 新建一个SmartUpload对象 su.initialize(pageContext); // 初始化 su.setContentDisposition(null); // 设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 //doc时,浏览器将自动用word打开它。扩展名为pdf时,将用acrobat打开 //response.sendRedirect(path+"/updown/updown_err.jsp"); //su.downloadFile("/uploadPath/file/liu.doc"); // 下载英文文件 su.downloadFile(fujianPath, null, new String(fujianYuashiMing.getBytes(), "ISO8859-1")); // 下载中文文件 //downloadFile(String sourceFilePathName, String contentType, String destFileName) out.clear(); out=pageContext.pushBody(); }catch(Exception e){ %> <script type="text/javascript"> alert("文件不存在。请联系管理人员"); window.history.back(); </script> <%}
    5.3 书籍管理模块书籍管理模块包括电子书类别管理模块和电子书的管理,由管理员来管理操作,可以添加和删除相应的电子书类别,电子书,下面详细介绍各个功能。
    5.3.1 电子书类别的管理电子书类别的管理包括添加和删除电子书,界面如下图所示。类别建立时,需要要确定好类别的名称:

    核心代码如下:
    public void catelogAdd(HttpServletRequest req,HttpServletResponse res){ String name=req.getParameter("name"); String jieshao=req.getParameter("jieshao"); String del="no"; String sql="insert into t_catelog values(?,?,?)"; Object[] params={name,jieshao,del}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "catelog?type=catelogMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res);}public void catelogDel(HttpServletRequest req,HttpServletResponse res){ String sql="update t_catelog set del='yes' where id="+Integer.parseInt(req.getParameter("id")); Object[] params={}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "catelog?type=catelogMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res);}public void catelogMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ List catelogList=new ArrayList(); String sql="select * from t_catelog where del='no'"; Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { Tcatelog catelog=new Tcatelog(); catelog.setId(rs.getInt("id")); catelog.setName(rs.getString("name")); catelog.setJieshao(rs.getString("jieshao")); catelogList.add(catelog); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); req.setAttribute("catelogList", catelogList); req.getRequestDispatcher("admin/catelog/catelogMana.jsp").forward(req, res);}
    5.3.2 电子书管理电子书的管理包括各个类别中,电子书的上传和已有电子书的删除,上传时,有上传类别,付费和免费的选择。

    5.3 留言版模块下面介绍的是会员之间的交流,每个会员可以在系统的留言版上进行留言,而其他会员看到留言后可以与之进行交流。

    留言版代码如下所示:
    public void liuyanAdd(HttpServletRequest req,HttpServletResponse res){ String id=String.valueOf(new Date().getTime()); String title=req.getParameter("title"); String content=req.getParameter("content"); String shijian=new Date().toLocaleString(); String user_id="0"; if(req.getSession().getAttribute("user")!=null) { Tuser user=(Tuser)req.getSession().getAttribute("user"); user_id=user.getId(); } String sql="insert into t_liuyan values(?,?,?,?,?)"; Object[] params={id,title,content,shijian,user_id}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "操作成功"); req.setAttribute("path", "liuyan?type=liuyanAll"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res);}public void liuyanAll(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ List liuyanList=new ArrayList(); String sql="select * from t_liuyan"; Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { Tliuyan liuyan=new Tliuyan(); liuyan.setId(rs.getString("id")); liuyan.setTitle(rs.getString("title")); liuyan.setContent(rs.getString("content")); liuyan.setShijian(rs.getString("shijian")); liuyan.setUser_id(rs.getString("user_id")); liuyan.setUser_name(liuService.getUserName(rs.getString("user_id"))); liuyanList.add(liuyan); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); req.setAttribute("liuyanList", liuyanList); req.getRequestDispatcher("qiantai/liuyan/liuyanAll.jsp").forward(req, res);}
    5.4 通用模块5.4.1 登录、修改个人信息及注销退出登录是系统的每个角色都会进行的,但是由于权限的不同所以登录后的功能不同,但是每个人都有修改个人信息、修改密码和注销退出的功能。
    由于此处的修改个人信息与管理员进行修改没有太大的区别,在此就不做详细介绍,而修改密码和注销退出也是比较简单的功能,在此也就不再详细介绍。
    5.4.2 数据库的连接接本系统采用数据库的连接是用了一个java包来进行连接的,这样方便了数据库的管理。
    在实现某一个功能时,首先要连接数据库。那么,如果我们在每一次进行数据库操作前都需要加载驱动、创建连接,则这些操作可以封装在一个数据库操作类中。这样做有很大的优点,一旦系统移植、数据库参数改变,则不需要重新修改所有的连接代码并重新编译,只要在这个封装类中改变其中的参数即可。我采用了如下代码的一个类来统一管理数据库的连接:
    //数据库连接封装public class DB{ private Connection con; private PreparedStatement pstm; private String user = "sa"; private String password = "sa"; private String className = "net.sourceforge.jtds.jdbc.Driver"; private String url = "jdbc:jtds:sqlserver://localhost:1433;DatabaseName=db_ebook"; public DB() { try { Class.forName(className); } catch (ClassNotFoundException e) { System.out.println("加载数据库驱动失败!"); e.printStackTrace(); } } /** 创建数据库连接 */ public Connection getCon() { try { con = DriverManager.getConnection(url, user, password); } catch (SQLException e) { System.out.println("创建数据库连接失败!"); con = null; e.printStackTrace(); } return con; } public void doPstm(String sql, Object[] params) { if (sql != null && !sql.equals("")) { if (params == null) params = new Object[0]; getCon(); if (con != null) { try { System.out.println(sql); pstm = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); for (int i = 0; i < params.length; i++) { pstm.setObject(i + 1, params[i]); } pstm.execute(); } catch (SQLException e) { System.out.println("doPstm()方法出错!"); e.printStackTrace(); } } } } public ResultSet getRs() throws SQLException { return pstm.getResultSet(); } public int getCount() throws SQLException { return pstm.getUpdateCount(); } public void closed() { try { if (pstm != null) pstm.close(); } catch (SQLException e) { System.out.println("关闭pstm对象失败!"); e.printStackTrace(); } try { if (con != null) { con.close(); } } catch (SQLException e) { System.out.println("关闭con对象失败!"); e.printStackTrace(); } }}
    以上就是数据库的连接函数,在jsp页面中只需要引入这个包就可以,就不需要在每个页面写数据库的链接,大大的提高了工作的效率以及方便了编程。
    5.5 小结以上是对本系统做的详细介绍,里面对各个模块的功能和界面都做了比较详细的介绍。虽然基本功能可以实现,但是系统还是不够完善,在以后的学习和生活中需要继续对此系统进行完善。
    第6章 系统测试所谓系统测试就是为了发现程序中的错误而执行程序的过程。具体地说,系统测试时根据系统开发各阶段的规格说明和程序的内部结构而精心设计出一批测试用例,并利用测试来运行程序,以发现程序错误的过程。
    系统测试是系统开发周期中一个十分重要的活动。尽管在系统开发的各个阶段均采用了严格的技术审查,但依然难免遗留下差错,如果在投入运行前的测试阶段没有被发现并纠正,问题迟早会暴露出来,到时再纠正错误将要付出更大的代价[7]。
    在经过几个月的开发与设计,软件项目团队管理系统已经实现了基本功能,具体的测试结果如下。
    6.1 公告管理模块6.1.1 公告的浏览经过系统测试公告的浏览已能够成功进行,只要登录网站的主页就可以进行公告的浏览,用户可以看到公告的题目和发布时间。
    6.1.2 公告的添加公告的添加只能由管理员来进行,经过系统测试可以顺利的进行公告的添加,通过id号来确定公告不会重复出现。
    6.1.3 公告的编辑、删除经过系统测试,会员可以进行对公告的浏览,管理员可以进行公告的添加与删除,管理员登录后可以点击公告管理来进行公告的操作,在添加公告时点击添加按钮就可以进行对公告的添加才操作了,每条公告后都有删除按钮,可以进行删除操作。
    6.2 会员管理模块6.2.1 成员注册经过测试,会员可以进行注册操作,用注册的帐号可以成功登录系统。
    6.2.2 点券充值会员登录后,需要用点券来下载书籍,经过测试,点券充值可以把点券充值在自己的帐号之下,成功的用来下载付费书籍。
    6.2.3 搜索书籍会员登录后,可以顺利地搜索出系统拥有的电子书信息,能够按照书名或作者搜索,并且可以进行下载。
    6.3 书籍管理模块6.3.1 电子书类别的管理经测试,电子书类别只可以由系统管理员进行操作,管理员根据需要添加和删除电子书类别,可以成功进行电子书类别的添加和删除操作。
    6.3.2 电子书管理经测试,电子书的管理只可以。由系统管理员进行操作,管理员根据需要添加和删除电子书,可以成功地进行电子书的添加和删除操作。
    6.3.3 留言版经过系统测试可以进行会员间的交流,每个人都可以在系统查看别人的留言,留下自己的留言,管理员可以对留言进行删除。
    参考文献[1] 杨崑,王二平. 软件开发管理中的沟通与协调问题研究[J]. 中国管理科学,2004,12(3):141-148.
    [2] 张珞玲,李师贤. 软件项目风险管理方法比较和研究[J]. 计算机工程,2003,29(3):91-94.
    [3] 李丽. 项目管理与项目经理的技能及策略选择[J]. 公路,2001,11:39-42.
    [4] 孙鑫编著. Java Web开发详解[M].北京: 电子工业出版社,2006
    [5] 贾更新,赵立超编著. JSP完全实力教程[M].电子工业出版社,2001.
    [6] 龙马工作室.典型网站建设[M].北京:人民邮电出版社,2004(8):20-54.
    [7] 薛华成主编.管理信息系统[M].北京:清华大学出版社,1999.
    [8] 成典勤. 基于JSP技术的Web应用[J]. 安康师专学报,2005年6期.
    [9] 邓松良.软件工程[M] .西安:西安电子科技大学出版社,2004.
    [10] David B. L. Client Needs and The Design Process in Web Projects[J]. Sydney: University of Technology,2002,1.
    [11] Thomas R. Peltier.Information Security Risk Analysis[J].Rothstein Associates Inc,2001
    3  留言 2020-07-30 11:30:03
显示 0 到 25 ,共 25 条
eject