
第1章前言 (2)
1.1课题背景 (2)
1.2开发语言 (3)
1.3开发工具 (3)
第2章需求分析 (3)
2.1任务概述 (3)
2.2系统的功能需求 (3)
第3章系统总体设计 (5)
3.1E-R图 (7)
3.2系统总体模块图 (7)
第4章系统详细设计 (9)
4.1数据库设计 (9)
4.2建立数据库连接 (13)
第5章页面设计及代码实现 (14)
5.1整体效果图 (14)
5.2管理员与用户登录的效果图与代码实现 (15)
5.3购物车管理模块 (21)
5.4系统的测试 (23)
第6章总结与展望 (23)
第7章参考文献 (24)第1章前言
1.1课题背景
随着中国电子商务、互联网业务的迅猛发展,国内许多企业已跨入电脑网络
管理时代,并因此提高了管理效率和市场竞争力。但目前仍有部分企业还停留在原始计账管理阶段。而随着全球经济信息化的进程和WTO的成功实现,企业面临着前所未有的机遇和挑战,在如此激变的社会形势和激烈的市场竞争下,愈来愈多的企业管理者意识到效率管理和科学管理的重要性,以及增强市场竞争力的迫切性,因此建立科学、规范、高效的管理制度和秉承富有竞争力的经营理念是每一个企业管理者的渴望,企业采用电脑管理进货、库存、销售等诸多环节也已成
为趋势及必然。
许多从事商业活动的企业都需要采购商品、销售商品以及将商品暂时存储在仓库中,对这一工作流程进行有效地管理和控制,对这些企业来说是非常重要。在进货、库存、销售环节中,由于商品种类繁多、业务量大、库存管理复杂,使用手工操作的工作量很大,在操作过程中也很容易出现各种错误。而采用计算机管理则可以大大提高日常工作的效率,不仅将原来由手工操作的进货、出货及销售这一整套流程用计算机进行全程管理,而且消除了手工操作中可能存在的不确定因素,达到进销存管理流程清晰,从而能够比较彻底地贯彻经营者的管理模式。
由于科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量企业管理科学化和现代化的重要标志,而销售管理的全面自动化、信息化则是其中重要的组成部分。销售管理的好坏对于企业的决策者和管理者来说都至关重要,在很大程度上影响着企业的经济效益和社会效益。因此,本文所研究的销售管理系统具有一定的使用价值和现实意义。
一直以来人们使用传统人工的方式进行销售管理,这种管理方式存在着诸多缺点,如:工作量大、效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。鉴于此,本文研究了一种基于关系型数据库的销售管理方案。利用oracle数据库管理系统灵活性和开发效率高的特点,采用面向对象的java的方法,开发出销售管理系统。该系统具有手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、信息利用率高等。该系统能够极大地提高销售管理的效率,优化企业的人力、物力,降低企业的管理成本,为企业销售管理的信息化、正规化奠定了坚实的基础。
1.2开发语言
在课程所学JAV A的基础上,我们用到了搭建网站平台所必需的HTML(静态),javascript(动态),JSP CSS(美化)及SQL语言。
HTML
javascript
JAVA
JSP
CSS
SQL
1.3开发工具
Tomcat6.0
JDK1.6(包含mail.jar及activation.jar)
MyEclipse9.0
ORACLE10g
第2章需求分析
2.1任务概述
销售管理系统是为了提高销售管理效率而开发的。商品管理员进货后,整理归类,将商品信息发布到网上。网络用户登录该网站后,自行注册,购得商品,提交购物单给商品管理员,并同时将费用通过电汇或邮寄的方式交付到商品管理员处。管理员在收到付款后,发货给购物者,并同时将发货状态改为“已发”,完成一次交易。
2.2系统的功能需求
由任务概述可知,此系统的角色可以划分为两类:
(1)商品管理员:负责管理商品、订单、用户、留言等。
(2)注册用户:在线购物、管理购物车、查看订单等。
这两类分别拥有自己的操作功能。每一个操作模块都要实现自身的功能,并且在整个的操作流程中负责承上启下。根据这两方面的需求,来分别描述要实现的功能。
(1)管理员登录:系统初始化商品管理员用户(本系统管理员为乔丹,密码为jordan),这些管理员能够通过该入口进入后台进行管理操作。
(2)管理员管理商品:首先要求的就是能够添加商品。商品的分类在系统初始化时初始化好,在添加商品时包括商品id、商品名称、商品单价、商品折扣、商品数量、商品类别、商品介绍、商品图片。管理员可以由一个界面查看所有的商品,对已经添加的商品可以修改某一属性,也可以删除不想保留的商品。
(3)管理员管理订单:管理员可以查看注册用户下达的所有订单,订单的信息包括订单流水号、用户姓名、地址、邮编号码、联系电话、电子邮件、送货方式。利用订单流水号可以查看商品名称、发货部、市场价、会员价、数量、状态,并可以将订单的状态进行修改(已发货、未处理)。
(4)管理员管理用户:管理员可以查看所有注册用户,用户的信息包括用户编号、用户账号、用户身份、用户积分、用户余额。利用用户账号可以查看用户的基本信息,包括用户的真实姓名、电子邮件、联系电话等信息。管理员可以删除某一用户,也可以修改某一用户的基本信息。
(5)管理员管理留言信息:可以查看所有网友的留言信息。
(6)用户注册:网络用户均能够注册。注册的用户信息包括登录用户名、密码、确认密码、真实姓名、性别、联系地址、联系邮编、联系电话、电子邮件。用户名不能重复。
(7)用户在线购物:用户可以查看所有的上架商品,选择购买,填写购买的数量。也可以暂时不购买,放进收藏夹。
(8)用户管理购物车:用户可以查看自己已经选购的商品和数量、金额,修改某一商品的购买数量,不选择某一已选的商品,也可以继续购物,清空购物车,提交购物车下达订单。在下订单时,填写个人基本信息。
(9)用户可以查看订单:用户可以查看自己下达的所有订单,查看订单的发货状态,还可以查看订单的商品价格。
(10)用户可以查看自己的信息:用户可以看自己的积分、余款、自己的基本资料,并可以改自己的密码。
管理员进行操作的功能图
注册用户进行操作的功能图
第3章系统总体设计3.1E-R图
本系统设计的E-R图如下:
商品用户
购买商品id 名称价格简介管理
管理员添加删除
修改
用户名密码
日期数量
总价格用户号密码姓名
地址电话
邮箱
1
n m
n
3.2系统总体模块图
管理员模块图
注册用户模块图
第4章系统详细设计
4.1数据库设计
数据库管理系统中要建立9张数据表
1、用户表userbase_2611:用于初始化管理员用户的数据记录。
2、用户身份表userstate_2611:用于辨别是管理员还是注册用户的身份。
3、商品表ware_2611:用于存放商品的基本信息。
4、用户信息表userinfo_2611:用于存放注册用户的基本信息。
5、用户收藏表stow_2611:用于商品存放到收藏夹所显示的信息。
6、留言表leave_2611:用于对网站进行留言。
7、评论表critique_2611:用于用户对商品进行评论。
8、订单表orders_2611:用于用户存放用户下达的订单基本信息。
9、收货信息表consignee_2611:用于存放收货用户的基本信息。
表1用户表userbase_2611
10uiqq varchar2(50)腾讯QQ
11uihomepage varchar2(50)个人主页
12uinumberro varchar2(500)自我介绍
13uidphone varchar2(50)联系电话,非空14uitaxation varchar2(50)租售方式
15uidefray varchar2(50)支付方式
16uinumberegral number用户积分
17uinumber number预存款数
18uiage number年龄
4.2建立数据库连接
在实现某一功能时,首先要建立数据库。如果在每一次需要进行数据库操作前都来加载驱动、创建连接,那么在连接的入口参数处理上将是十分零散,不好管理和维护。一旦系统移植,数据库参数改变,将需要重新修改所有的连接代码,重新编译,这项工作复杂,是不必要的,也是可以省去的。可以采用如下代码的一个类来统一管理数据库的连接:
public static Connection getConnection(){
Connection con=null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1 521:oract
}catch(ClassNotFoundException e){
//TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库连接失败!");
}catch(SQLException e){
//TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库连接失败!");
}
return con;
}
在此类中,有四个参数,即数据库的驱动、连接地址、用户名和密码,这四个参数在整个系统中只有这样一个入口。这样,在数据库移植或系统环境改变时,只须修改这一个连接的地方就可以了,十分方便。
第5章页面设计及代码实现系统运行的情况如下图所示,截取其中主要的效果图
5.1整体效果图
Index.jsp效果图如下:
对于实现首页效果的jsp页面代码,参照项目的源代码,这里不在赘述。下面的部分关于jsp部分同样不在赘述。
5.2管理员与用户登录的效果图与代码实现
登录界面
通过用户输入的用户名及密码,获取数据库中此用户名的详细信息,如果不存在,提示用户不存在错误;若密码不匹配,提示输入密码不正确;数据库链接不正常,记录日志;系统获取用户信息后,若用户名密码匹配,根据角色进入不同页面。
下面是登录窗口:
//登录参数
private int userid;//登录用户id
private String username;//登录账号
private String userpwd;//登录密码
private int usersid;//用户身份id
管理界面
当输入管理员乔丹,密码jordan时,进入管理界面,可以通过界面的菜单连接到不同的功能界面,实现不同的功能,此菜单是跟管理模块图对应的。
取其中商品信息管理界面的效果图:
//增加商品
public static boolean addProduct(ProductBean pro){ boolean bool=false;
Connection conn=null;PreparedStatement pstm=null;
String sql="insert into ware_2611 values(?,?,?,?,?,?,?,?,?,?,?,?,sysdate)";
try{
conn=DatabaseConnection.getConnection();
pstm=conn.prepareStatement(sql);
pstm.setInt(1,pro.getWaid());
pstm.setString(2,pro.getWainvoice());
pstm.setString(3,pro.getWaname());
pstm.setDouble(4,pro.getWanumber());
pstm.setDouble(5,pro.getWaagio());
pstm.setInt(6,pro.getWanum());
pstm.setString(7,pro.getWasort());
pstm.setString(8,pro.getWanumberro());
pstm.setString(9,pro.getWaphot());
pstm.setInt(10,pro.getWadegree());
pstm.setInt(11,pro.getWahow());
pstm.setInt(12,pro.getWati());
int len=pstm.executeUpdate();
if(len>0){
bool=true;
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DatabaseConnection.free(conn,pstm,null);
}
return bool;
}
//修改商品信息
public static boolean updateProduct(ProductBean pro){ boolean bool=false;
Connection conn=null;
PreparedStatement pstm=null;
String sql="update ware_2611set wainvoice=?,waname=?, wanumber=?,waagio=?,wanum=?,wasort=?,wanumberro=?,waphot=?, wadegree=?,wahow=?,wati=?where waid=?";
try{
conn=DatabaseConnection.getConnection();
pstm=conn.prepareStatement(sql);pstm.setString(1,pro.getWainvoice());
pstm.setString(2,pro.getWaname());
pstm.setDouble(3,pro.getWanumber());
pstm.setDouble(4,pro.getWaagio());
pstm.setInt(5,pro.getWanum());
pstm.setString(6,pro.getWasort());
pstm.setString(7,pro.getWanumberro());
pstm.setString(8,pro.getWaphot());
pstm.setInt(9,pro.getWadegree());
pstm.setInt(10,pro.getWahow());
pstm.setInt(11,pro.getWati());
pstm.setInt(12,pro.getWaid());
int len=pstm.executeUpdate();
if(len>0){
bool=true;
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DatabaseConnection.free(conn,pstm,null);
}
return bool;
}
//删除单个商品信息
public static boolean deletePro(int waid){
boolean bool=false;
Connection conn=DatabaseConnection.getConnection();
PreparedStatement pstm=null;
String sql="delete from ware_2611where waid=?";
try{
pstm=conn.prepareStatement(sql);
pstm.setInt(1,waid);
int i=pstm.executeUpdate();
if(i>0){
bool=true;
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DatabaseConnection.free(conn,pstm,null);
}
return bool;
}
用户管理模块主要包括用户注册、登录、退出3个部分.
用户注册:
当用户第一次登录时首先要注册,成为会员后,才可以购买物品.用户可以通过单击首页的注册按键来打开注册页面进行会员注册操作,用户注册页面的运行结果用户注册界面:
用户注册成功后,在登录界面进行登录。
用户登录与管理员登录的代码实现:
public class LoginServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ doPost(request,response);
}
public void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String uname=req.getParameter("u_name");
String upwd=req.getParameter("u_password");
String checkword=req.getParameter("u_whereat");
String srand=(String)req.getSession().getAttribute("rand");
HttpSession session=req.getSession();if(!(checkword.equalsIgnoreCase(srand))){
session.setAttribute("msg
session.setAttribute("logined
req.getRequestDispatcher("index.jsp").forward(req, resp);
}else{
boolean isin=DatabaseDAO.search(uname,upwd);
if(isin){
session.setAttribute("msg
session.setAttribute("logined
int sid=DatabaseDAO.searchSid(uname);
if(sid==2){//管理员跳转
int userid=DatabaseDAO.getUserId(uname);
int usersid=DatabaseDAO.searchSid(uname);
session.setAttribute("usersid
req.getRequestDispatcher("admin_index.jsp").forward(req,resp);
}else{//会员跳转
List datas=DatabaseDAO.checkExist(uname);
session.setAttribute("jifen
session.setAttribute("yue
int userid=DatabaseDAO.getUserId(uname);
session.setAttribute("userid
session.setAttribute("proList
session.setAttribute("proNumList
session.setAttribute("totalAmount
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
}else{
session.setAttribute("msg
session.setAttribute("logined
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
}
用户购买商品的效果图:
用户填写订单的效果图:
购物车管理模块主要功能有如下几个部分:
1、创建购物车
当客户登录后,系统会给客户创建一个购物车放入服务器的Servlet会话中。使客户在整个会话中都拥有一个相同的购物车。这里主要运用了Http协议中的会话机制,将购物车保存在客户的会话中,这样在整个客户游览不同页面商品的过程中,都会使用同一个购物车对象。
具体执行步骤:
(1)从客户的请求对象中获取Servlet会话对象
(2)从会话对象中获取购物车对象
(3)判断是购物车对象是不是空的,如果是空是就创建一个
2、向购物车中添加一个商品项
客户在查看网页上的一个商品时,当向服务器发送一个“添加到购物车”的请求时,会执行这个功能。
功能执行过程:
(1)从客户请求对象中获取商品的ID
(2)调用业务层的方法根据商品ID去数据查询商品的信息,返回商品对象
(3)从商品对象中获取商品名,商品价格,来构建一个商品项对象
(4)从Servlet会话中获取购物车对象
(5)调用业务层的方法来根据购物车对象和商品项对象来执行添加操作
(6)将些商品项对象放入到购物车中
3、订单的实现
生成订单是网上购物商城的最终目的,前面的所有的功能的实现都是为最后生成一个用户满意的订单做基础,在此要生成一个可以供用户随时查询订单号,还要保存用户订单中所购买的商品信息。当用户确认对购物车不再改变后,就可以到收银台结帐并生成订单。结帐的流程是:从购物车中读取商品名称,商品数量,商品价格信息,生成唯一的一个订单号,同时也把用户注册的基本信息读取出来,形成一个完整的订单写入数据库中。
以商品管理为例,附上了如何对商品进行操作的部分代码,其他的功能实现都是下面的模式形成的,代码在工程中详细给出,实现过程也都类似,这里就不在赘述。
这个模式是用户通过请求与Controller组件(通常表现为Servlets)交互。接着Controller组件实例化Model组件(通常表现为JavaBeans),并且根据应用的逻辑操纵它们。Model被创建后,Controller就要确定为用户显示的View(常常表现为JSP),同时View与Model交互操作,获得并显示相关数据。在下一个请求被提交到Controller重复上述操作之前,view可以修改Model的状态。
本系统的控制器由servlet来担任,客户端的请求送给这个控制器,再由控制器根据具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。
5.4系统的测试
测试是软件开发必不可少的环节,每个开发者都应该养成良好的测试习惯,一个系统的完善就是通过不断地测试与维护来完成的。
测试的意义有以下几点[18]:
(1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;
(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;
(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
测试一般有两种方法:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;如果知道产品内部工作过程,可以通过测试来检验产品的内部动作是否按照说明书的规定正常运行。前一个方法称为黑盒测试,后一个称为白盒测试。
对于本系统,我采取第一个方法,即黑盒测试。做完一个模块,就进行测试,看所做的模块能不能实现所需要的功能。经过了先期的模块测试和后期的综合测试,本系统实现了规格说明书的所有功能,达到了预期的要求。
第6章总结与展望
现在越来越多的中小型企业已经成为未来经济增长的关键动力。企业的发展需要跟随现代科技的进步。建设一个具有电子商务功能的网站不仅能打破时空的界限,而且能有效的降低销售成本,提高企业的竞争能力。因此设计并开发一个具有电子商务功能的门户网站具有非常重要的意义。
通过这次本次课程设计,使我对网站开发有了更为深刻的理解,积累了一定的网站建设经验,也对数据库这一块的设计有了更深一步的理解。虽然在上数据库这一门课程时,有了基本的增删查改语句的训练,但是只是比较单一的语句的熟练,没有综合一个完整的应用项目的来综合利用。而在这次课程设计中,通过实际调查研究与编写程序,使自己理论与实践相结合,熟悉了编程环境,掌握了一些社会经验和编程经验,对自己今后的工作和学习有着良好的促进作用。在开发过程中遇到了许多不可预知的困难,但最终在老师和同学的帮助下一一解决了。在解决了各种难题的同时,我也学到了许多技术知识和开发技巧,相信这些知识和技巧将在我的以后工作和学习中发挥作用。
当然,由于时间有限,个人能力的不足以及开发经验的缺乏,本系统还有许多需要改进的地方,如界面不够美观,对商品的数量操作没有处理好,卖完一定的商品时,系统应该减少相应的库存量,这一点没有设计好,在数据库里面就不便维护了。此外,在以后系统运行的过程中,可能还会遇到些问题,将会在以后有可能的情况下进一步改进系统功能。
在这半个月时间里,在老师和同学的帮助下,我完成了本次毕业设计,但更重要的是对知识的积累,通过调研阶段的系统学习和在以后设计过程中对细枝末节的补充和对技巧的掌握,使我受益非浅。但另一方面,我也发现有很多知识需要学习,在IT行业里,技术日新月异,为了在这个行业里立足,必须领会最新的思想,学习最新的知识,掌握最新的技术,迎合最新的趋势。在今后的学习生活上,我将会努力学习、不断丰富自己。
第7章参考文献
[1]景玉建.电子商务的发展与前景[J].《职业时空》,2005年第13期,P10-11
[2]张孝祥.深入Java Web开发内幕——核心基础[M].北京:电子工业出版社.
北京.2006.10
[3]什么是JSP,http://www.wm23.com/resource/R01/Internet_1012.htm
[4]百度百科JavaBeans,http://baike.baidu.com/view/10095.htm
[5]百度百科J2EE,http://baike.baidu.com/view/1507.htm
[6]struts简介,http://baike.baidu.com/view/25603.htm
[7]张桂元,贾燕枫.Struts开发入门与项目实践:软件工程师Java技术[M].北京:人民邮电出版社.2005.08
[8]佩里.Java Servlet&JSP TM经典实例——O`Reilly Java系列[M],北京:中国电力出版社,2004,180-235.
[9]黄理,李积善,曹林有,张勇.用JSP轻松开发Web网站(第一版)[M].北京:北京希望电子出版社.2001.100~152。
[10]百度百科hibernate,http://baike.baidu.com/view/7291.htm
[11]百度百科mysql,http://baike.baidu.com/view/24816.htm
[13]Tomcat简介,http://blog.sina.com.cn/n/4836985010002yg
[14]Jason Brittain&Ian F.Darwin Tomcat:The Definitive Guide
O’Reilly Media,Inc.2003,P11-39
[15]百度百科B/S,http://baike.baidu.com/view/1477348.html
[16]百度百科3-tier,http://baike.baidu.com/view/687468.html
