资源描述
网上购物管理系统
软 件 学 院
课程设计报告书
课程名称 软件工程
设计题目 网上购物管理系统
专业班级
学 号
姓 名
指导教师
年 12 月
目 录
1.设计时间............................................................. 3
2.设计目的................ .............................................3
3.设计任务............................................................. 3
4.设计内容............................................................. 3
4.1系统的数据流程图及数据库字典................. .....................3
4.1.1数据流图...................................................... 3
4.1.2数据字典.......................................................6
4.1.3 E-R图.............. .........................................11
4.2概要设计......................................................... 12
4.2.1主要功能..................................................... 12
4.2.2模块定义..................................................... 13
4.2.3体系结构设计................................................. 13
4.3详细设计......................................................... 13
4.3.1详细设计说明书................................................14
4.3.2数据库设计................................................... 14
4.3.3程序流程图................................................... 15
4.3.4输入项目..................................................... 16
4.4程序源码..........................................................16
4.5程序运行与调试................................................... 23
4.5.1模块测试............................. ........................23
4.5.2总体测试........................ .............................25
5总结与展望.......... .................................................26
参考文献................................................................27
成绩评定................................................................27
1 设计时间
.12.30
2 设计目的
设计一个网上购物管理系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物系统具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。
3 设计任务
本系统使用HTML、JSP等技术来编辑网页,并运用Hibernate技术把数据库和动态网页相关联。传统的管理信息系统信息获取方法是由专业文字录入人员将信息输入到管理系统的数据库中,这种方法在数据量不大时有很多的应用场合。当数据量比较大,而且有较强的专业性时,录入的费用和出错的可能性都相应上升。本文在实际应用开发中解决方案是建立网站, 以及自己的数据库,使得所需商品信息能够及时的保存、更新。能够更好的及时了解商品买卖的情况。
4 设计内容
4.1系统的数据流程图及数据字典
4.1.1数据流图
矩形表示实体,椭圆表示处理,平行线表示存储,箭头表示数据流系统的数据流图如下所示:
商家会员
管理商品
商品信息
个体商家
网上购物系统
图1-1系统顶层数据流程图
定单信息列表F7
类别信息F6
用户信息F1
留言信息F2
订单信息F3
新闻信息列表F12
留言信息列表F10
商品信息列表F9
F9
定单信息列表F7
新闻信息F4
游戏类别信息F5
商品信息F5
用
户
管
理
员
顾
客
新闻信息列表F12
用户信息列表F11
留言信息列表F10
商品信息列表F9
类别信息列表F12
管
理
员
网上购物系统
网上购物系 统
图1-2系统顶层数据流程图详细说明
商家会员
F5
D2 商品信息
个人会员
F1
D1 个人信息
F9
F11
管理员
D1 用户信息
P2商品信息
P2商品管理
P2会员管理
P2用户管理
图1-3 一层数据流程图
具体操作
类型
对比
累计
P1商家管理
P2.1库存管理
P2.2订单管理
P5已经处理
P2.3已经处理
2.4未处理
图1-4 二层商家商品管理数据流程图
4.1.2数据字典
1.数据元素
名称:REGISTERED_TIME
别名:上架时间
描述:用来标示商品的录入时间
类型:TIMESTAMP
长度:15
名称:NAME
别名:用户名
描述:用来标示用户和管理员的用户名
数据类型:VRCHAR2
长度:15
名称:DESCRIPTION
别名:留言内容
描述:用来标示留言的具体内容
类型:TEXT
长度:1000
名称:TYPE
别名:类别
描述:用来标示类别的具体内容
类型:CHAR(1)
长度:15
名称:NUMBER
别名:订单数量
描述:用来标示订单的数量
类型:INTEGER
长度:15
名称:TITLE
别名:标题
描述:用来标示新闻的主题
类型:INTEGER
长度:50
2.数据存储
名字:用户信息
描述:纪录用户的个人信息
编号:D1
组成:用户ID,用户名,密码,用户级别,EMAIL,电话,地址,注册时间,备注
名字:商品信息
描述:纪录商品的属性信息
编号:D2
组成:商品ID,商品型号,商品类别,是否新品,查看级别,订货件数,订货次数,入库时间
名字:留言信息
描述:纪录留言的具体信息
编号:D3
组成:留言ID,留言主题,留言用户,留言时间,留言内容
名字:类别信息
描述:纪录类别的设置信息
编号:D4
组成:类别ID,类别名,所属大区域,该类别商品种类
名字:订单信息
描述:纪录订单的具体信息
编号:D5
组成:订单ID,订单号,下订单的客户,订货时间,订货具体内容
名字:新闻信息
描述:纪录新闻具体信息
编号:D6
组成:新闻ID,新闻主题,发布时间,具体内容
3.数据流
名字:用户信息
描述:纪录用户的个人信息
编号:F1
组成:用户ID,用户名,密码,用户级别,EMAIL,电话,地址,注册时间,备注
名字:留言信息
描述:纪录留言的具体信息
编号:F2
组成:留言ID,留言主题,留言用户,留言时间,留言内容
名字:订单信息
描述:纪录订单的具体信息
编号:F3
组成:订单ID,订单号,下订单的客户,订货时间,订货具体内容
名字:新闻信息
描述:纪录新闻具体信息
编号:F4
组成:新闻ID,新闻主题,发布时间,具体内容
名字:商品信息
描述:纪录商品的属性信息
编号:F5
组成:商品ID,商品型号,商品类别,是否新品,查看级别,订货件数,订货次数,入库时间
名字:类别信息
描述:纪录类别的设置信息
编号:F6
组成:类别ID,类别名,所属大区域,该类别商品种类
4.数据处理
名字:用户管理
描述:管理员对管理员和用户信息的添加,删改等
编号:P1
输入/输出数据流:用户或管理员基本信息
名字:商品管理
描述:管理员对商品信息的添加,删改等
编号:P2
输入/输出数据流:商品基本信息
名字:留言管理
描述:管理员对留言信息的添加,删改等
编号:P3
输入/输出数据流:留言信息
名字:类别管理
描述:管理员对类别信息的添加,删改等
编号:P4
输入/输出数据流:类别基本信息
名字:订单管理
描述:管理员对订单信息的删改等
编号:P5
输入/输出数据流:订单基本信息
名字:新闻管理
描述:管理员对新闻信息的添加,删改等
编号:P6
输入/输出数据流:新闻基本信息
4.1.3 E-R图
商品
留言
查看
发布
用户
填写
查看
订单
新闻
图1-5 前台用户局部E-R图
用户信息
留言
管理
管理
管理员
管理
管理
管理
商品信息
新闻
订单
图1-6 后台管理员局部E-R图
4.2概要设计
4.2.1主要功能
该系统的目标能够实现用户经过网络选购自己喜欢的商品,而且还能够为其进行邮寄。保证产品质量,信息安全,提供最好服务[1],系统的主要功能如下:
1.查看产品信息
用户能够根据自己的需求分类查看所有产品信息,选择自己喜欢的产品购买。
2.查看新闻
用户能够查看网站的所有新闻,新闻内容包括商品厂商的信息,以及新产品的发布信息等,以方便用户更直观的了解产品动向及信息。
3.填写订单
用户填写要购买商品的信息到订单中去,并能够删除已填写但最终不想购买的产品。
4.2.2模块定义
用户管理自然是每个网站必不可少的,在本系统中,要求这部分管理安全可靠,权限分明,且其在前台和后台的表现不同,下面将分别进行介绍。
1.前台表现
用户注册,此时要保证系统不受注册机的攻击,要采用验证码技术。要确保权限为普通用户,要有密码保护措施,对于用户的密码维修,保证用户密码的安全性。保证用户设定之后能够找回遗忘的密码。
2.后台表现
系统管理员能够添加用户。系统管理员能够动态的给用户赋予权限,保证系统信息不外泄。系统管理员能够修改和删除用户信息。系统管理员能够进行维护赛选信息,对客服进行动态服务。系统管理员能够给用户建立备注信息,其仅对具有权限的用户能够进行信息的检查与修改。
4.2.3体系结构设计
网上购物系统
登录模块
新闻发布模块
注册模块
购物车模块
订单模块
商品管理模块
用户管理模块
留言评价模块
4.3.详细设计
4.3.1详细设计说明书
网上购物系统
管理员登陆系统
客户注册系统
客户登陆系统
会员注销
查询选购记录
选购物品
会员修改资料
订单处理
会员管理
物品入库
管理员注销
4.3.2数据库设计
物品表(物品编号,物品名,价格),主键为物品编号,符合三范式。
客户表(客户编号,姓名,性别,购买记录,购买信誉),主键为客户编号,符合三范式。
表3-1 物品表book
列名
含义
长度
类型
NULL
DEFAULT
备注
Bno
物品编号
10
Char()
no
no
bname
物品名称
15
Char()
no
no
price
价格
8
Char()
no
no
表3-2 客户表Member
列名
含义
长度
类型
NULL
DEFAULT
备注
Mno
客户编号
15
Char()
no
no
Mname
客户姓名
15
Char()
no
no
sex
客户性别
5
Char()
no
no
record
购买记录
15
Char()
no
no
Credit
购买信誉
15
Char()
no
no
4.3.3 程序流程图
用户登录流程图
登录入口
否
查询用户是否存在
是
否
核对密码是否正确
是
取得用户名和密码
将UserID存在session中
登录成功
物品搜索流程图
开始搜索
输入条件
搜索结果
购物车
查看商品
否
是
下订单
继续搜
4.3.4输入项目
输入本系统中的数据如下所示:
1.用户信息需要有用户亲自注册,管理员帐号由系统自动生成。
2.产品信息需要有管理员手动进行添加。
3.留言标题、内容由用户输入,留言者、留言时间由系统自动检验生成。
4.新闻标题、英文标题、内容、英文内容由管理员添加,发布时间由系统自动检验生成。
5.订单信息需要由用户填写。
4.4.程序源码
import java.util.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
class 商品 extends Panel
{String 代号,名称;int 库存;float 单价;
商品(String 代号,String 名称,int 库存,float 单价)
{this.代号=代号;this.名称=名称;this.库存=库存;this.单价=单价;
}
}
class ShowWin extends JFrame implements ActionListener
{ Hashtable hashtable=null;
JTextField 代号文本框=new JTextField(),
名称文本框=new JTextField(),
库存文本框=new JTextField(),
单价文本框=new JTextField(),
查询文本框=new JTextField(),
查询信息文本框=new JTextField(),
删除文本框=new JTextField();
JButton b_add=new JButton("添加商品"),
b_del=new JButton("删除商品"),
b_xun=new JButton("查询商品"),
b_xiu=new JButton("修改商品"),
b_show=new JButton("显示商品清单");
JTextArea 显示区=new JTextArea(25,10);
ShowWin()
{super("仓库管理窗口");
hashtable=new Hashtable();
Container con=getContentPane();
JScrollPane pane=new JScrollPane(显示区);
显示区.setEditable(false);
JPanel save=new JPanel();
save.setLayout(new GridLayout(8,2));
save.add(new Label("输入代号:"));
save.add(代号文本框);
save.add(new Label("输入名称:"));
save.add(名称文本框);
save.add(new Label("输入库存:"));
save.add(库存文本框);
save.add(new Label("输入单价:"));
save.add(单价文本框);
save.add(new Label("单击添加:"));
save.add(b_add);
save.add(new Label("单击修改:"));
save.add(b_xiu);
save.add(new Label("输入查询代号:"));
save.add(查询文本框);
save.add(new Label("单击查询:"));
save.add(b_xun);
JPanel del=new JPanel();
del.setLayout(new GridLayout(2,2));
del.add(new Label("输入删除的代号:"));
del.add(删除文本框);
del.add(new Label("单击删除:"));
del.add(b_del);
JPanel show=new JPanel();
show.setLayout(new BorderLayout());
show.add(pane,BorderLayout.CENTER);
show.add(b_show,BorderLayout.SOUTH);
JSplitPane split_one,split_two;
split_one=new JSplitPane(JSplitPane.VERTICAL_SPLIT,save,del);
split_two=new
JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,split_one,show);
con.add(split_two,BorderLayout.CENTER);
JPanel xun=new JPanel();
xun.add(new Label("所得信息:"));
xun.add(查询信息文本框);
xun.setLayout(new GridLayout(2,1));
con.add(xun,BorderLayout.SOUTH);
b_add.addActionListener(this);
b_del.addActionListener(this);
b_xun.addActionListener(this);
b_xiu.addActionListener(this);
b_show.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{if(e.getSource()==b_add)
{String daihao=null,mingcheng=null;int kucun=0;float danjia=0.0f;
daihao=代号文本框.getText();mingcheng=名称文本框.getText();
kucun=Integer.parseInt(库存文本框.getText());
danjia=Float.valueOf(单价文本框.getText()).floatValue();
商品 goods=new 商品(daihao,mingcheng,kucun,danjia);
hashtable.put(daihao,goods);
try{FileOutputStream file=new FileOutputStream("goods.txt");
ObjectOutputStream out=new ObjectOutputStream(file);
out.writeObject(hashtable); out.close();
}
catch(IOException event){}
}
else if(e.getSource()==b_del)
{String daihao1=删除文本框.getText();
try{FileInputStream come_in=new FileInputStream("goods.txt");
ObjectInputStream in=new ObjectInputStream(come_in);
hashtable=(Hashtable)in.readObject(); //////
in.close();
}
catch(ClassNotFoundException event){}
catch(IOException event){}
商品 temp=(商品)hashtable.get(daihao1);
{hashtable.remove(daihao1);}
try{FileOutputStream file=new FileOutputStream("goods.txt");
ObjectOutputStream out =new ObjectOutputStream(file);
out.writeObject(hashtable);//
out.close();
}
catch(IOException event){}
}
//
else if(e.getSource()==b_xun)
{ String aa;
aa=查询文本框.getText();
查询信息文本框.setText(null);
try{FileInputStream come_in=new FileInputStream("goods.txt");
ObjectInputStream in =new ObjectInputStream(come_in);
hashtable=(Hashtable)in.readObject(); ////
in.close();
}
catch(ClassNotFoundException event){}
catch(IOException event){}
商品 a=(商品)hashtable.get(aa);
查询信息文本框.setText(" 代号:"+a.代号+" 名称:"+a.名称+" 库存:"+a.库存+" 单价:"+a.单价);
}
//
else if(e.getSource()==b_xiu)
{ String bb;
bb=代号文本框.getText();
try{FileInputStream come_in=new FileInputStream("goods.txt");
ObjectInputStream in=new ObjectInputStream(come_in);
hashtable=(Hashtable)in.readObject(); //////
in.close();
}
catch(ClassNotFoundException event){}
catch(IOException event){}
商品 temp=(商品)hashtable.get(bb);
{hashtable.remove(bb);}
try{FileOutputStream file=new FileOutputStream("goods.txt");
ObjectOutputStream out =new ObjectOutputStream(file);
out.writeObject(hashtable);//
out.close();
}
catch(IOException event){}
String daihao1=null,mingcheng1=null;int kucun1=0;float danjia1=0.0f;
daihao1=代号文本框.getText();mingcheng1=名称文本框.getText();
kucun1=Integer.parseInt(库存文本框.getText());
danjia1=Float.valueOf(单价文本框.getText()).floatValue();
商品 goods1=new 商品(daihao1,mingcheng1,kucun1,danjia1);
hashtable.put(daihao1,goods1);
try{FileOutputStream file=new FileOutputStream("goods.txt");
ObjectOutputStream out=new ObjectOutputStream(file);
out.writeObject(hashtable); out.close();
}
catch(IOException event){}
}
//
else if(e.getSource()==b_show)
{ 显示区.setText(null);
try{FileInputStream come_in=new FileInputStream("goods.txt");
ObjectInputStream in =new ObjectInputStream(come_in);
hashtable=(Hashtable)in.readObject(); ////
}
catch(ClassNotFoundException event){}
catch(IOException event){}
Enumeration Enumeration = hashtable.elements();
while(Enumeration.hasMoreElements())
{ 商品 te=(商品)Enumeration.nextElement();
显示区.append("商品代号:"+te.代号+" ");
显示区.append("商品名称:"+te.名称+" ");
显示区.append("商品库存:"+te.库存+" ");
显示区.append("商品单价:"+te.单价+" ");
显示区.append("\n ");
}
}
}
}
public class LinkListFour
{public static void main(String args[])
{ ShowWin win=new ShowWin();
win.setSize(400,350);
win.setVisible(true);
win.addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{ System.exit(0);}});
}
}
4.5程序运行与调试
4.5.1模块测试
在模块测试时我们主要从以下几个方面考虑:
1.模块接口;
2.局部数据结构;
3.重要执行通道;
4.出错处理通道;
5.影响上述方面的边界条件。
测试时进行代码审查,从数据类型,变量声明,数据结构进行审查,然后进行功能测试,从输入一些简单的数据开始执行一遍,观测运行期间变量的变化,运行中值的变化范围。改变测试方案来变换另一个角度进行测试,发现错误并记录,修改代码,测试条件使程序经过多层分支,判别运行结果从而完成模块测试。
部分测试结果如图
主界面
添加商品
查询商品
4.5.2总体测试
总体测试是组装软件的系统技术,本系统测试采用渐增集成测试,即测试单一模块,将测试完的模块加入系统中,进行一次系统测试,依次类推将所有模块加入系统中,在具体测试时,采用自顶向下的结合方式,从主控模块开始,沿各控制层向下移动,逐渐把所有模块结合了。
在测试过程中使用到调试技术:
1. 采用debug调试语句,跟踪数据;
2. 嵌入打印语句,输出中间结果;
3. 利用Delphi 7.0中调试工具,从调试窗口观测变量的变化;
4. 设置断点,观察程序在断点附近的状况。
5 总结与展望
这次课程设计让我认识到软件工程方法对项目开发的重要性和必要性,知道能够使得软件开发少走弯路,更容易开发出高质量的项目开发。按照软件工程的方法、软件的开发需要严格遵守其开发流程,作好软件设计的每一个流程。
由于以前没有系统的学习过软件工程的相关知识,只学过C/C++语言、数据结构等课程,因此在我的头脑里,做软件就是写代码,水平高的人写大型的、复杂的代码,水平低的人编的简单一些,因此总觉得软件工程没有什么太多实际的价值。然而,在逐步的学习过程中,特别是在结合本门课程和同学一起开发一个较为大型的软件中,我深深感受到了软件工程在开发过程中的指导作用。软件工程,重点在工程两字上,也就是把软件的开发当作一个工程项目运用工程的方法来实施,从可行性分析、需求分析直到最后的测试、交付以及以后的维护,每一个过程都有自己的一套方法。工程经常是和实践联系在一起的,软件工程只有在实际的软件开发中才能更深的体会到它的作用。
参考文献
[1] 屈辉立,陈可明,石武信.JSP网站编程教程[M].第1版, 北京:北京希望电子出版社,
[2] 白勇.用B/S模式构建在线考试系统[J],重庆电力高等专科学校学报, ,10(4): 100~130.
[3] Jiang Guo,Yuehong Liao,Behzad Parviz.A Survey of J2EE Application Performance Management Systems[J],Proceedings of the IEEE International Conference on Web Services (ICWS'04), .6(5):17~32.
[4] VB数据库管理范例:
成绩评定
成绩 教师签字
展开阅读全文