商品订单管理系统(重构前)

项目链接、图片及源码在文末
一、需求分析
1需求分析

1.1系统环境

Windows版本:Windows 10 家庭中文版
处理器:Intel® Core™ i7-7700HQ CPU @ 2.80GHz 2.80GHz
已安装的内存(RAM):16.00GB(15.9GB可用)
系统类型:64位操作系统,基于x64的处理器
计算机名:LAPTOP-GGD15LLB
开发工具:Eclipse IDE
网页元素设计软件:Photoshop CC2019、Dreamweaver、Premiere Pro CC2019
数据库:MySQL

1.2商品销售管理系统简介

商品销售管理系统是一个由人和计算机等组成的能够提供信息以支持一个组织机构内部的作业、管理、分析和决策职能的系统。商品销售管理系统利用计算机的硬件和软件,手工规程、分析、计划、控制和决策用的模型,以及数据库对信息进行收集、传输、加工、保存、维护和使用。因此信息管理系统是一个信息处理系统。商品销售管理系统作为各项业务、技术、工作自动化及高水平管理的方法和模式,正在得到越来越广泛的应用。早期的商品销售管理系统通常是以各单位为主体,独自进行开发和应用。从技术上看,大体是以局域网或客户机/服务器模式组成应用系统平台,在操作系统和数据库管理系统的平台上开发应用软件系统。但是,由于技术的发展和进步以及应用、管理和数据共享的需要等诸多原因,把分散开发且分布在各个地域的独立的管理信息系统互相连接起来,实现系统硬件、系统软件、应用软件及数据的共享,已经成为越来越迫切的任务。

1.3本课题研究的意义

当今社会是一个信息社会,信息已成为继劳动力、土地、资本之后的又一大资源。谁控制的信息越多,谁利用信息资源的效率越高,谁就会在各方面的竞争中占有一席之地,谁就会有更多的优势。商品管理信息系统是一个销售单位不可缺少的部分,它的内容对于公司的决策者和管理者来说都至关重要,所以商品信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但目前还有一些小型企业仍使用传统人工的方式管理,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间长了,将产生大量的文件和数据,这对于查找、更新和维护都带来了很多困难。
随着科学技术的不断提高,计算机科学日渐成熟,他强大的功能早已为人们所知晓,它已进入人类社会的各个领域并发挥着越来越重要的作用。计算机业飞速发展,技术淘汰指标高得惊人,价格下降以及软件应用的快速扩展引发了以信息处理计算机化为标志的“微机革命”。 微型计算机的出现和普及,为信息处理提供了物美价廉的手段,对于推动信息管理系统的使用起到了重要作用。
使用计算机对商品信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、使用时间长、成本低等。这些优点能够极大地提高商品信息管理的效率,也是企业的科学化、正规化管理及与世界接轨的重要条件。

1.4系统研究设计的目标

现在商品销售单位需要处理大量的供应商信息,还要时刻更新单位所销售的产品信息,不断地添加、修改销售信息。面对各种不同的信息,需要合理的数据库结构来保存数据信息,还需要有效的程序结构支持各种数据操作的执行。

1.5现行业务介绍

该企业是从事商品的销售的单位,采购科进行商品采购,采购完成后,将所采购来的货物及采购清单一并交给库管员,库管员进行审核入库并将信息写入商品信息册中。商品销售时,销售员开出顾客需要的货物清单,将该清单交给库管员,库管员根据该清单上写明的货物从仓库中取出交给销售人员,同时将销售的记录写入记录册中。采购科将供应商信息交给管理员,管理员将供应商的基本信息记录在供应商记录册中。划价员根据经理的指示对商品进行定价并商品的定价写入商品价格表中。
这些都是手工操作,十分烦琐,而且容易出错,出错后不便查找纠正。由于信息量巨大,因此具体信息很难进行查询。时间长了会形成大量的书面文档,不易保存。

1.6可行性分析

1.6.1技术可行性
a.开发软件可行性
结合本项目实际,本企业的业务量很大,但是其操作流程并不是很复杂,各种结构及流程十分清晰,可以设计出符合实际需求的信息管理系统。我们的系统非常擅长对数据表和其间关系进行简单的操作,无论是查询,统计还是用报表进行数据输出,都能顺利完成。
b.开发硬件可行性
开发本系统所使用的软件对于计算机的要求比较低,80486或更高的处理器即可。这样的要求市场上的计算机配置都能够达到,所以硬件的可行性也可达到。

1.6.2经济可行性
由于销售企业目前完全采用手工方式完成业务,进行报表制作,对数据进行综合分析等。管理系统建成后由于不是直接用于生产,因此直接经济效益较小,但是一定会间接的创造出十分可观的经济效益。由此可见,开发此系统在经济上是完全可行的。而且,由于系统在未来较长的时间内稳定发挥作用,这对于提高公司的综合管理水平、简化日常业务操作都将会起到很大的帮助。

1.6.3操作可行性
销售企业的大多数员工从未使用过类似的管理系统,但是WINDOWS友好的界面和本系统简易的操作设置,可以使企业的内部员工很快掌握其各种操作。不仅如此,系统还附有详细的使用帮助文件,为本系统的正确使用给以图文并茂的形式加以说明。同时,在开发过程中,我们还可以尽量给用户以方便,充分考虑到用户需求的实际情况,在输入界面,查询界面、报表打印等部分添加注释或提示,并尽可能的采用相关联的数据自动输入的功能,帮助用户尽快掌握系统的使用和减少数据的输入,以提高本系统的使用效率。

1.7数据流图
1.顶层

2.第一层

3.第二层

1.8数据字典

数据名称:库存信息
简述:记录仓库商品的库存信息
数据流来源:商品销售管理系统
包含信息:商品名称,商品id,库存id,库存数量,备注

数据名称:商品入库信息表
简述:入库记录
数据流来源:商品销售管理系统
数据流去向:管理系统进行库存变更
包含信息:商品入库id,商品数量,进价,商品id,入库时间,备注

数据名称:商品出库信息表
简述:出口记录
数据流来源:商品销售管理系统
数据流去向:管理系统进行库存变更
包含信息:商品出库id,商品数量,售价,商品id,出库时间,备注,季度

数据名称:管理员登录信息
简述:后台管理员的登录信息
数据流来源:管理员
数据流去向:管理系统
包含信息:管理员id,密码,姓名

数据名称:商品入库信息表
简述:入库记录
数据流来源:商品销售管理系统
数据流去向:管理系统进行库存变更
包含信息:商品入库id,商品数量,进价,商品id,入库时间,备注

二、概要设计
2.1实体集和实体集的属性
通过分析,我们确定的“商品销售管理系统”数据库中的实体集有:
具体的实体:t_good(商品)、t_user(商品管理员)、t_supplier(商品供应商)。
抽象的实体:t_goodcategories(商品类别)、t_stock(库存信息表)、t_outstock(出库记录)、t_storage(入库记录)。
实体集的属性有,其中主键用下划线标出(为了更清晰地表示出每一实体集中的每一条记录,我们给每一个实体集都设置独立的id):
t_good(id, goodnumber, goodname, supplierid, goodcategoriesid, note, photo)
t_user(id, username, password)
t_supplier(id, number, name, linkman, linkphone, note)
t_goodcategories(id, goodname, description)
t_stock(stockid, goodid, goodnumber, stocknote)
t_outstock(outstockid, goodid, saleprice, outstockdate, outstocknumber, outstocknote, quarter,userid)
t_storage(id, good_id, inprice, storagedate, storagenumber, storagenote,userid)
实体集的属性均定义为简单属性。

2.2删除实体集中的冗余属性
如实体集t_good中含有supplierid, 但是由于它是t_supplier的主码,因此从t_good的属性集中删除supplierid。我们把t_good和t_supplier的关联统一看成联系,而不是t_good的一个属性,这样使得逻辑关系更加明确,避免过早地假设一个t_good只与一个t_supplier关联。
同样的道理,我们删除其他实体集中冗余的属性,避免实体集之间过早地发生关联,删除冗余属性之后的实体集和属性如下:
t_good(id, goodnumber, goodname, note, photo)
t_user(id, username, password, sex, phone)
t_supplier(id, number, name, linkman, linkphone, note)
t_goodcategories(id, description)
t_stock(stockid, goodnumber, stocknote)
t_outstock(outstockid, saleprice, outstockdate, outstocknumber, outstocknote, quarter)
t_storage(id, inprice, storagedate, storagenumber, storagenote)

2.3联系集
good_cate:联系t_good和t_goodcategories
good_out:联系t_good和t_outstock
good_in:联系t_good和t_storage
good_sup:联系t_good和t_supplier
user_out: 联系t_good和t_outstock
user_in: 联系t_user和t_storage
good_sto:联系t_good和t_stock

2.4联系集的映射基数与参与约束
good_cate:多对一的联系。对应到电脑销售的数据库实例中,即每个电脑至多属于一种品牌,每一个品牌可以有多个品牌的电脑。电脑t_good是全参与的,而电脑的品牌t_goodcategories是部分参与的,也就是说,可能有的品牌下没有电脑。
good_out:一对多的联系。即每一条出库信息都必须对应一个商品,而一个商品可能包含了多次出库操作。其中,t_outstock是全参与的,而t_good是部分参与的。
good_in:一对多的联系。即每一条入库信息都必须对应一个商品,而一个商品可能包含了多次入库操作。其中,t_storage是全参与的,而t_good是部分参与的。
good_sup:多对多的联系。即每一个商品可能有多家供应商,而每一个供应商可能供应多个商品。其中,t_good是全参与的,即所有的商品都必须有供应商,不能凭空出现,而供应商是部分参与的,即存在供应商不供应货物。
user_in:一对多的联系,t_user是部分参与的,而t_storage是全参与的。即每一个管理员可能操作了多条入库操作,也可能没有操作一条入库操作,但是每一个入库操作仅对应且必须对应一个管理员。
user_out: 一对多的联系,t_user是部分参与的,而t_outstock是全参与的。即每一个管理员可能操作了多条出库操作,也可能没有操作一条出库操作,但是每一个出库操作仅对应且必须对应一个管理员。
good_sto:一对一的联系,即库存表中每一件库存一定对应商品信息表中的一种商品,商品信息表中的一种商品最多对应库存表中的一件商品。
2.5联系集的属性和主码构成
联系集的主码结构依赖于联系集的映射基数,比如实体集t_good和实体集t_goodcategories的联系集good_cate, 如果说t_good和t_goodcategories的联系是多对多的,则t_good和t_goodcategories的主码的并集共同构成了good_cate的主码。
综上,联系集的属性和主码构成如下:
good_cate(id, goodcategoriesid)
good_out(outstockid, goodid)
good_in(id, good_id)
good_sup(id, supplierid)
user_out(outstockid, user_id)
user_in(id,user_id)
good_sto(id,stock_id)

2.6 E-R图

三、详细设计
3.1模式的合并
考虑从实体集A到实体集B的一个一对多的联系集AB, 用前面所讲的关系模式构建算法,得到三个模式A, B, AB, 进一步假设A在该联系的参与是全部的,那么我们可以将A和AB模式合并成单个包含两个模式所有属性的并集的模式。合并模式的主码是其模式中融入了联系集模式的那个实体集的主码。
比如, t_outstock、t_good、good_out可以分别对应上述的A, B, AB其中,t_ouustock是全参与的,那么我们就可以把t_outstock和good_out和并为一个包含两个模式所有属性的并集的模式,假设合并后的模式仍为t_stock,则此时t_outstock的属性已经变为:t_outstock(outstockid, goodid, saleprice, outstockdate, outstocknumber, outstocknote, quarter)。
同样的道理,我们对所有一对多、多对一以及一对一的诸如A,B,AB的三个模式进行合并,把他们变为两个模式,得到的结果如下:
①t_outstock、t_good、good_out合并后为:
t_outstock(outstockid, goodid, saleprice, outstockdate, outstocknumber, outstocknote, quarter)
t_good(id, goodnumber, goodname, note, photo)
②t_storge、t_good、good_in合并后为:
t_storage(id, good_id, inprice, storagedate, storagenumber, storagenote)
t_good(id, goodnumber, goodname, note, photo)
③t_outstockd、t_user、user_out合并之后:
t_outstock(outstockid, userid, saleprice, outstockdate, outstocknumber, outstocknote, quarter)
t_user(id, username, password, sex, phone)
④t_storage、t_user、user_in合并之后:
t_storage (id, userid, saleprice, storagedate, outstocknumber, outstocknote, quarter)
t_user(id, username, password, sex, phone)
⑤t_stock、t_good、good_sto 合并之后
t_stock(stockid, goodid, goodnumber, stocknote)
t_good(id, goodnumber, goodname , note, photo)
⑥t_good、t_goodcategories、good_cate合并之后:
t_good(id, goodnumber, goodname, goodcategoriesid, note, photo)
t_goodcategories(id, goodname, description)
⑦t_good、t_supplier、good_sup合并之后
t_good(id, goodnumber, goodname, supplierid, note, photo)
t_supplier(id, number, name, linkman, linkphone, note)
3.2 模式的冗余
比较下列两个模式:
t_outstock(outstockid, goodid, saleprice, outstockdate, outstocknumber, outstocknote, quarter)
t_outstock(outstockid, userid, saleprice, outstockdate, outstocknumber, outstocknote, quarter)
由上述合并规则可知,这两个模式分别是t_outstock、t_good、good_out和t_outstock、t_user、good_out合并的结果,在这两个模式中,由于t_outstock均对应一对多中“多”的一方,所以outstockid均是两个模式的主码,但实际上,t_outstock既可以唯一确定goodid,也可以唯一确定userid,因此这两个模式中存在冗余的模式,可以删掉其中一个,简化为一个模式,如下:
t_outstock(outstockid, goodid, saleprice, outstockdate, outstocknumber, outstocknote, quarter,userid)
同样的道理:
t_storage(id, good_id, inprice, storagedate, storagenumber, storagenote)
t_storage (id, userid, saleprice, storagedate, outstocknumber, outstocknote, quarter)
简化为
t_storage(id, good_id, userid, inprice, storagedate, storagenumber, storagenote)
t_good(id, goodnumber, goodname, goodcategoriesid, note, photo)
t_good(id, goodnumber, goodname, supplierid, note, photo)
简化为:
t_good(id, goodnumber, goodname, goodcategoriesid ,supplierid, note, photo)

这样我们就得到最终的模式:
①t_good(id, goodnumber, goodname, goodcategoriesid ,supplierid, note, photo)
②t_goodcategories(id, goodname, description)
③t_outstock(outstockid, userid, saleprice, outstockdate, outstocknumber, outstocknote, quarter)
④t_storage(id, good_id, userid, inprice, storagedate, storagenumber, storagenote)
⑤t_user(id, username, password, sex, phone)
⑥t_supplier(id, number, name, linkman, linkphone, note)
⑦t_stock(stockid, goodid, goodnumber, stocknote)
易知,以上所有模式的属性都不包含其他模式中已包含的非主关键字信息,因此满足第三范式(3NF)

3.3 E-R 模式图

3.4数据库E-R模式
①t_good(id, goodnumber, goodname, supplierid, goodcategoriesid, note, photo)
外码约束:
supplierid参照t_supplier(id, number, name, linkman, linkphone, note)中的id。
goodcategoriesid参照t_goodcategories(id, goodname, description)中的id
②t_user(id, username, password)
③t_supplier(id, number, name, linkman, linkphone, note)
④t_storage(id, good_id, inprice, storagedate, storagenumber, storagenote,userid)
外码约束:
goodid参照t_good(id, goodnumber, goodname, supplierid, goodcategoriesid, note, photo)中的id。
userid参照t_user(id, username, password)中的id。
⑤t_outstock(outstockid, goodid, saleprice, outstockdate, outstocknumber, outstocknote, quarter,userid)
外码约束:
goodid参照t_good(id, goodnumber, goodname, supplierid, goodcategoriesid, note, photo)中的id。
userid参照t_user(id, username, password)中的id。
⑥t_goodcategories(id, goodname, description)
⑦t_stock(stockid, goodid, goodnumber, stocknote)
外码约束:
goodid参照t_good(id, goodnumber, goodname, supplierid, goodcategoriesid, note, photo)中的id。

3.4 触发器设计

考虑到数据库的数据来源的可靠性,我设定库存信息t_stock不能直接人为修改,必须通过某个管理员入库操作或者出库操作之后才跟着自动改变,因此设置如下两个触发器。

3.4.1入库操作后自动修改库存信息

CREATE DEFINER=root@localhost trigger modifying1
after insert on t_storage
for each row
begin

    update t_good  set goodnumber=goodnumber+new.storagenumber where  t_good.id=new.goodid;  
     update t_stock set goodnumber=goodnumber+new.storagenumber where  t_stock.goodid=new.goodid;

end;

3.4.2出库操作后自动修改库存信息

CREATE DEFINER=root@localhost trigger modifying
after insert on t_outstock
for each row
begin
update t_good set goodnumber=goodnumber+new.outstocknumber where t_good.id=new.goodid;
update t_stock set goodnumber=goodnumber+new.outstocknumber where t_stock.goodid=new.goodid;
end;
四、用户手册及调试分析
4.1数据库使用说明
4.1.1 数据库建立

4.1.2 表结构设计

①t_good

DROP TABLE IF EXISTS t_good;
CREATE TABLE t_good (
id int(11) NOT NULL AUTO_INCREMENT,
goodnumber int(20) DEFAULT NULL,
goodname char(20) DEFAULT NULL,
supplierid int(11) DEFAULT NULL,
goodcategoriesid int(11) DEFAULT NULL,
note char(50) DEFAULT NULL,
photo char(50) DEFAULT NULL,
PRIMARY KEY (id),
KEY FK_t_good (supplierid),
KEY F_t_good (goodcategoriesid),
CONSTRAINT FK_t_good FOREIGN KEY (supplierid) REFERENCES t_supplier (id),
CONSTRAINT F_t_good FOREIGN KEY (goodcategoriesid) REFERENCES t_goodcategories (id)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
②t_user

DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user (
id int(11) NOT NULL AUTO_INCREMENT,
userName char(20) DEFAULT NULL,
password char(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

③t_supplier

DROP TABLE IF EXISTS t_supplier;
CREATE TABLE t_supplier (
id int(11) NOT NULL AUTO_INCREMENT,
number char(10) DEFAULT NULL,
name char(20) DEFAULT NULL,
linkman char(20) DEFAULT NULL,
linkphone char(20) DEFAULT NULL,
note char(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

④t_storage

DROP TABLE IF EXISTS t_storage;
CREATE TABLE t_storage (
id int(11) NOT NULL AUTO_INCREMENT,
goodid int(11) DEFAULT NULL,
inprice double DEFAULT NULL,
storagedate date DEFAULT NULL,
storagenumber int(11) DEFAULT NULL,
storagenote char(20) DEFAULT NULL,
PRIMARY KEY (id),
KEY FK_t_storage (goodid),
CONSTRAINT FK_t_storage FOREIGN KEY (goodid) REFERENCES t_good (id)
) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8;

⑤t_outstock

DROP TABLE IF EXISTS t_stock;
CREATE TABLE t_stock (
stockid int(11) NOT NULL AUTO_INCREMENT,
goodid int(11) DEFAULT NULL,
goodnumber int(11) DEFAULT NULL,
stocknote char(30) DEFAULT NULL,
outstockid int(11) DEFAULT NULL,
storageid int(11) DEFAULT NULL,
PRIMARY KEY (stockid),
KEY FK_t_stock (storageid),
KEY F_t_stock (outstockid),
KEY FKq_t_stock (goodid),
CONSTRAINT FKq_t_stock FOREIGN KEY (goodid) REFERENCES t_good (id),
CONSTRAINT FK_t_stock FOREIGN KEY (storageid) REFERENCES t_storage (id),
CONSTRAINT F_t_stock FOREIGN KEY (outstockid) REFERENCES t_outstock (outstockid)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8;

⑥t_goodcategories

DROP TABLE IF EXISTS t_goodcategories;
CREATE TABLE t_goodcategories (
id int(11) NOT NULL AUTO_INCREMENT,
goodname char(10) DEFAULT NULL,
description char(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

⑦t_stock

DROP TABLE IF EXISTS t_stock;
CREATE TABLE t_stock (
stockid int(11) NOT NULL AUTO_INCREMENT,
goodid int(11) DEFAULT NULL,
goodnumber int(11) DEFAULT NULL,
stocknote char(30) DEFAULT NULL,
outstockid int(11) DEFAULT NULL,
storageid int(11) DEFAULT NULL,
PRIMARY KEY (stockid),
KEY FK_t_stock (storageid),
KEY F_t_stock (outstockid),
KEY FKq_t_stock (goodid),
CONSTRAINT FKq_t_stock FOREIGN KEY (goodid) REFERENCES t_good (id),
CONSTRAINT FK_t_stock FOREIGN KEY (storageid) REFERENCES t_storage (id),
CONSTRAINT F_t_stock FOREIGN KEY (outstockid) REFERENCES t_outstock (outstockid)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSE

4.2展示界面功能实现

4.2.1 Jsp页面

1.打开Index.jsp页面,会自动跳转到goindex.jsp页面,实现首页展示功能,介绍网站的功能以及开发者的信息

2.production.jsp页面是产品展示页面,点击首页导航栏中的“产品介绍”就会跳转到此页面,展示我们的产品
3.contracts.jsp页面可以填写用户的信息并通过表单提交给我们,此页面同样通过点击导航栏中的“联系我们”进入
4.admin.jsp页面是管理员登录页面,点击导航栏中“进入后台”即可进入。填写登录信息并通过数据库进行检验,实现后台登录功能
4.2.2 Css样式

css样式应用于所有的页面中,提供了丰富的文档样式外观,以及设置文本和背景属性的能力;允许为任何元素创建边框,以及元素边框与其他元素间的距离,以及元素边框与元素内容间的距离;允许随意改变文本的大小写方式、修饰方式以及其他页面效果。

1.使用了grid布局,网格布局(Grid)是最强大的 CSS 布局方案。
它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。
本系统中用到了grid布局,针对于Web布局而言,Grid布局将是Web布局的神器,它改变了以往任何一种布局方式或者方法。不管以前的采用什么布局方法都可以说是一维的布局方式,而Grid最大的特色,是一个基于网格的二维布局系统,目的是用来优化用户界面设计。

2.使用了reset.css 重置浏览器标签的样式表
在HTML标签在浏览器里有默认的样式,在切换页面的时候,浏览器的默认样式往往会给我们带来麻烦,影响开发效率。所以解决的方法就是一开始就将浏览器的默认样式全部去掉,更准确说就是通过重新定义标签样式。“覆盖”浏览器的CSS默认属性。最最简单的说法就是把浏览器提供的默认样式覆盖掉!于是用到了reset.css。

4.2.3 JavaScript

1.本系统中使用了滚动轮番插件jcarousellite_1.0.1,它是一款基于Jquery的无缝“滚动”图片插件,可以水平轮播,也可以纵向轮播,本系统中,应用于首页实现图片的“滚动”播放。实现效果如下所示:

2.使用了jquery-1.10.2.min.js,jQuery是一个JavaScript函数库。jQuery是一个轻量级的"写的少,做的多"的JavaScript库,它提供了很多扩展。
3.本系统中,使用了jQuery.adaptive-slider插件,带有自适应彩色figcaption和导航功能。这个插件会列出一个图元素包含图像和的元素,并自动插入导航,并根据当前图像中的主颜色自动插入导航和颜色,以及 slider/carousel 中的颜色。首先,要在js中添加jQuery.js和rgbaster.min.js,效果如图所示:

当鼠标滑动到下方文字处时,导航会自动上浮,并根据当前图像的主颜色自动插入导航和颜色。

4.此外,用到了jquery.easing.js 1.3,它是一个配合jquery实现完美动画效果的扩展插件,比如我们在使用jquery制作一幅图片滚动或图片渐变,使用本插件可扩展或增强jquery性能,生成完美无缺兼容性更好的jquery动画来,它不仅可以用于图像特效,像一些基础的层操作也可以使用。

5.Galleriffic是一个用于创建快速展示相册中照片的jQuery插件。图片既可以以幻灯片的方式查看,也可以手动点击缩略图查看。Galleriffic还支持分页,从而使得它能够展示更多的图片。
本系统中,如下图所示,使用Galleriffic实现照片快速展示,点击向
左或向右实现图片的幻灯片播放,与上述adaptive-slider插件相结合,实现“图片+文字介绍”展示。

6.使用jquery.opacityrollover.js,当鼠标移到图片上的瞬间,图片被蒙上一层白色的半透明层,并且这时白色的半透明层开始以一定时间的倒计时自行消失。本系统中,在“进入后台”页面时会有此效果,是前端与后台不同效果的分界。

4.3 后台系统功能实现

4.3.1 jsp页面

1.main.jsp为登录成功后的界面,通过左侧的导航栏查询相应的信息
2.Good.jsp为商品信息界面,通过后台数据库查询显示商品的相关信息,同时有添加、删除、修改、导出等功能
3.Goodcategories.jsp为商品类别的界面,通过查询数据库中的商品类别信息表,将相关信息展示出来
4.Supplier.jsp为供应商信息界面,与之对应的数据库表是供应商信息表,展示相应的信息
5.Storage.jsp显示入库信息
6.Stock.jsp显示商品库存信息
7.OutStock.jsp显示商品出库信息

4.3.2 界面组件(EasyUI)

关于后台的相关界面采用了比较简单的EasyUI框架,选择该框架的原因:jQuery EasyUI 框架提供了创建网页所需的一切,它是一个基于 jQuery 的框架,集成了各种用户界面插件。
该框架提供建立现代化的具有交互性的 javascript 应用的必要的功能,另外,easyui 节省了开发产品的时间和规模,虽然简单,但是功能非常强大。

1.主界面效果application

功能有新建、删除、修改、导出、搜索,以及下面的设置显示个数,刷新等,全部由Easyui.js实现。

2.导航栏效果combo tree

使用Easyui.js中的combo tree实现。
代码如下:

Basic ComboTree - jQuery EasyUI Demo

Basic ComboTree

Click the right arrow button to show the tree panel.

3.时间选择效果databox

时间选择效果用在“入库”、“出库”的时间选择上,使用了easyui.js中的databox。代码如下:

Basic DateBox - jQuery EasyUI Demo

Basic DateBox

Click the calendar image on the right side.

4.搜索效果SearchBox

点击“搜索”,将对应的商品信息挑选出来。代码如下:

Basic SearchBox - jQuery EasyUI Demo

4.3.3 structs2框架
Struts2轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。
Struts2框架默认的配置文件是struts.xml,该文件配置所有的Action与用户请求之间的关系,并配置逻辑视图与物理视图之间的映射关系。另外,struts2.xml还可以配置常量、拦截器,以及引用其他配置文件等。

1.首先将该框架需要的一些jar包导入

2.接下来配置struts.xml文件,该文件是整个Struts应用程序运转的核心,它是一个XML格式的文件,该文件以作为根元素,其他的元素需要直接或间接地嵌套在元素内。
在配置之前首先将Action所需要的一些类和方法先命名完成,确定各个类所可能用到的作用,再确定其他属性。

<?xml version="1.0" encoding="UTF-8" ?> /goindex.jsp /admin.jsp chart png 700 500 chart png 700 500 chart png 700 500 chart png 700 500 chart png 700 500 chart png 700 500 3.添加util工具包

util是一个工具包,里面封装了一些常用的工具类,极大地方便了java编程.
例如,DateUtil.java是实现日期转化的类;ExcelUtil.java是导出Excel表的类;DbUtil.java是连接数据库的类;FormatStringUtil.java用于连接多个字符串对象等。

4.添加model包
即对逻辑处理层进行建立。分别是对应着数据库所建立的七张表格和一些JavaBean操作进行封装。

在数据库的基础上,将每张表都对应为一个javabean。

5.DAO模式的封装
DAO是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。
DAO 模式提供了访问关系型数据库系统所需操作的接口,将数据访问和业务逻辑分离对上层提供面向对象的数据访问接口。
DAO 模式的优势就在于它实现了两次隔离。首先,隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。DAO模式还隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQ 实现不用修改。这符合 “开-闭” 原则。该原则降低了代码的藕合性,提高了代码扩展性和系统的可移植性。

如图所示的DAO类,分别封装了后台6个信息展示界面的sql查询操作。

6.添加Action类
struts2框架中有一种java类叫做Action,这种说法就像J2EE项目中有一种java类加Servlet.(人们的生活中有一种人的职业叫警察)struts2框架底层还是封装了Servlet的相关内容而实现出来的.只不过struts2框架除了servlet的功能以外还扩展出了很多其他的功能,同时还大大简化了以前在servlet中繁琐的操作。
在struts2框架中有一种类就是用代替以前我们在web项目中所使用到的servlet,那么这种类,在struts2框架中被称为Action.所以Action其实也是一种java类,比servlet功能更加强大的java类,同时还比servlet中的操作简单。
因为我们在web.xml文件中配置了struts2框架中专门的过滤器,用作拦截访问action的请求,拦截住之后,struts2框架就可以给Action添加很多丰富的功能了。

五、测试结果
5.1展示界面

5.1.1首页运行界面

5.1.2产品介绍界面

5.1.3“联系我们”运行界面

5.2后台登录

5.2.1后台登录界面

5.2.2输入密码或用户名错误

5.2.3验证码输入错误

5.3后台界面

5.3.1登录成功界面

5.3.2供应商信息界面

5.3.3商品类别信息界面

5.3.4商品信息界面

5.3.5商品入库信息

5.3.6商品出库信息

5.3.7商品库存信息

5.4操作界面

5.4.1添加供应商信息

5.4.2添加供应商信息

5.4.3添加商品信息

5.4.4添加入库消息

5.4.5添加出库信息

5.4.6导入数据

在这啦!
链接:https://pan.baidu.com/s/1sjcQIK64hoH4hQA-i-uvKw
提取码:pb0a

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 超市订单管理系统是一个复杂的系统,它需要涉及到用户管理、商品管理、订单管理等多个方面。狂神使用SSM框架来重构这个系统,使系统更加稳定、可靠、易于维护。 首先,他使用Spring框架进行依赖注入和AOP编程,实现各个模块之间的解耦,在改动一处的同时不会影响到其他模块,使得整个系统更加稳健。 其次,他使用MyBatis作为ORM框架,实现了数据库操作的易用性和高效性。MyBatis的插件机制和动态SQL功能可以让程序员更加轻松地实现对数据库的操作,提高了软件开发的效率。 最后,他使用Spring MVC框架来实现端页面的交互,使得用户可以轻松地操作系统,增加了用户体验度。并且,通过Spring的IOC容器和AOP编程,狂神实现了系统的集中式异常处理,用户在使用系统过程中,不会因为出现异常而影响使用。 狂神的超市订单管理系统重构,让系统更加稳定、易维护,提高了开发效率和用户体验度。这个案例也证明了SSM框架的强大功能和应用价值,对于企业级系统开发来说,是一个十分优秀的选择。 ### 回答2: 狂神在自己的视频教程中提到了用SSM框架对一个超市订单管理系统进行重构的例子。 首先,SSM框架是由Spring、Spring MVC和MyBatis三种技术整合而成。这三种技术分别负责控制反转、Web框架和数据访问层。使用SSM框架可以减少大量的重复代码和配置,提高代码的可重用性和可维护性。 在重构超市订单管理系统时,狂神先是将原有的代码进行细致的分析和改进,采用了更加规范的MVC(Model-View-Controller)架构,将原本混乱的代码分离成不同的层级:表示层、业务逻辑层、数据持久层。这样的分层模式可以让项目更加易于维护、扩展和调试。 接下来,狂神按照MVC的模式,使用Spring MVC作为控制层框架,依托Spring IOC容器创建各个对象,并通过IOC容器进行管理和调用。在视图层上,采用JSP进行页面的渲染和展示,提高了页面的效率和性能。 在业务逻辑层上,狂神使用了Spring的声明式事务管理来处理数据的一致性和安全。 最后,在数据持久层上,狂神使用MyBatis框架处理数据的增删改查,通过XML文件映射Java对象和数据库中的表格,将数据访问层与业务逻辑层进行解耦。 总的来说,通过使用SSM框架,狂神成功地将超市订单管理系统进行了重构,大大提高了代码的可读性与可维护性。同时,他也用此实例向学生们传授了如何面对既有代码进行重构的知识技能。 ### 回答3: 狂神所提及的超市订单管理系统是使用SSM(Spring+Spring MVC+MyBatis)框架进行重构的一个项目。该系统主要是针对超市中的订单进行管理和处理,包括订单的添加、修改、查询、删除等操作。 在使用SSM框架对该系统进行重构时,主要是通过Spring框架进行项目的IOC(控制反转)和AOP(面向切面编程),Spring MVC框架进行端控制,MyBatis框架进行数据访问和持久化操作。这种设计极大地提高了系统的性能、可维护性和扩展性,并且减少了重复代码和程序员的开发时间。 在该超市订单管理系统中,主要包括了订单管理、商品管理、用户管理和数据统计等模块,这些模块的整合使用提高了系统的功能性和用户的体验。此外,还可以在这些模块之间进行数据的传递和共享,从而避免了数据冗余和重复操作的问题。 总之,该超市订单管理系统重构使用SSM框架进行,极大地提高了系统的整体性能和可靠性。它可以更好地满足现代企业对信息化管理的需求,通过技术手段更好地为企业创造价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值