1、网上购物管理系统软 件 学 院课程设计报告书课程名称 软件工程 设计题目 网上购物管理系统 专业班级 学 号 姓 名 指导教师 年 12 月 目 录1.设计时间. 32.设计目的. .33.设计任务. 34.设计内容. 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输入项目.
2、16 4.4程序源码.16 4.5程序运行与调试. 23 4.5.1模块测试. .23 4.5.2总体测试. .255总结与展望. .26参考文献.27成绩评定.271 设计时间 .12.302 设计目的设计一个网上购物管理系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物系统具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。3 设计任务本系统使用HTML、JSP等技术来编辑
3、网页,并运用Hibernate技术把数据库和动态网页相关联。传统的管理信息系统信息获取方法是由专业文字录入人员将信息输入到管理系统的数据库中,这种方法在数据量不大时有很多的应用场合。当数据量比较大,而且有较强的专业性时,录入的费用和出错的可能性都相应上升。本文在实际应用开发中解决方案是建立网站, 以及自己的数据库,使得所需商品信息能够及时的保存、更新。能够更好的及时了解商品买卖的情况。4 设计内容 4.1系统的数据流程图及数据字典4.1.1数据流图 矩形表示实体,椭圆表示处理,平行线表示存储,箭头表示数据流系统的数据流图如下所示:商家会员管理商品商品信息个体商家网上购物系统 图1-1系统顶层数
4、据流程图定单信息列表F7类别信息F6用户信息F1留言信息F2订单信息F3新闻信息列表F12留言信息列表F10商品信息列表F9F9定单信息列表F7新闻信息F4游戏类别信息F5商品信息F5用户管理员顾客新闻信息列表F12用户信息列表F11留言信息列表F10商品信息列表F9类别信息列表F12管理员网上购物系统网上购物系 统 图1-2系统顶层数据流程图详细说明商家会员F5D2 商品信息个人会员F1D1 个人信息F9F11管理员D1 用户信息P2商品信息P2商品管理P2会员管理P2用户管理 图1-3 一层数据流程图具体操作类型对比累计P1商家管理P2.1库存管理P2.2订单管理P5已经处理P2.3已经处
5、理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名称:TIT
6、LE 别名:标题 描述:用来标示新闻的主题类型:INTEGER 长度:502.数据存储名字:用户信息描述:纪录用户的个人信息编号:D1组成:用户ID,用户名,密码,用户级别,EMAIL,电话,地址,注册时间,备注名字:商品信息描述:纪录商品的属性信息编号:D2组成:商品ID,商品型号,商品类别,是否新品,查看级别,订货件数,订货次数,入库时间名字:留言信息描述:纪录留言的具体信息编号:D3组成:留言ID,留言主题,留言用户,留言时间,留言内容名字:类别信息描述:纪录类别的设置信息编号:D4组成:类别ID,类别名,所属大区域,该类别商品种类名字:订单信息描述:纪录订单的具体信息编号:D5组成:订
7、单ID,订单号,下订单的客户,订货时间,订货具体内容名字:新闻信息描述:纪录新闻具体信息编号:D6组成:新闻ID,新闻主题,发布时间,具体内容3.数据流名字:用户信息描述:纪录用户的个人信息编号:F1组成:用户ID,用户名,密码,用户级别,EMAIL,电话,地址,注册时间,备注名字:留言信息描述:纪录留言的具体信息编号:F2组成:留言ID,留言主题,留言用户,留言时间,留言内容名字:订单信息描述:纪录订单的具体信息编号:F3组成:订单ID,订单号,下订单的客户,订货时间,订货具体内容名字:新闻信息描述:纪录新闻具体信息编号:F4组成:新闻ID,新闻主题,发布时间,具体内容名字:商品信息描述:纪
8、录商品的属性信息编号:F5组成:商品ID,商品型号,商品类别,是否新品,查看级别,订货件数,订货次数,入库时间名字:类别信息描述:纪录类别的设置信息编号:F6组成:类别ID,类别名,所属大区域,该类别商品种类4.数据处理名字:用户管理描述:管理员对管理员和用户信息的添加,删改等编号:P1输入/输出数据流:用户或管理员基本信息 名字:商品管理描述:管理员对商品信息的添加,删改等编号:P2输入/输出数据流:商品基本信息 名字:留言管理描述:管理员对留言信息的添加,删改等编号:P3输入/输出数据流:留言信息 名字:类别管理描述:管理员对类别信息的添加,删改等编号:P4输入/输出数据流:类别基本信息
9、名字:订单管理描述:管理员对订单信息的删改等编号:P5输入/输出数据流:订单基本信息 名字:新闻管理描述:管理员对新闻信息的添加,删改等编号:P6输入/输出数据流:新闻基本信息 4.1.3 E-R图商品留言 查看发布用户填写查看订单新闻图1-5 前台用户局部E-R图用户信息留言管理管理管理员管理管理管理商品信息新闻订单 图1-6 后台管理员局部E-R图4.2概要设计4.2.1主要功能该系统的目标能够实现用户经过网络选购自己喜欢的商品,而且还能够为其进行邮寄。保证产品质量,信息安全,提供最好服务1,系统的主要功能如下: 1.查看产品信息用户能够根据自己的需求分类查看所有产品信息,选择自己喜欢的产
10、品购买。 2.查看新闻用户能够查看网站的所有新闻,新闻内容包括商品厂商的信息,以及新产品的发布信息等,以方便用户更直观的了解产品动向及信息。 3.填写订单用户填写要购买商品的信息到订单中去,并能够删除已填写但最终不想购买的产品。4.2.2模块定义用户管理自然是每个网站必不可少的,在本系统中,要求这部分管理安全可靠,权限分明,且其在前台和后台的表现不同,下面将分别进行介绍。 1.前台表现用户注册,此时要保证系统不受注册机的攻击,要采用验证码技术。要确保权限为普通用户,要有密码保护措施,对于用户的密码维修,保证用户密码的安全性。保证用户设定之后能够找回遗忘的密码。 2.后台表现系统管理员能够添加用
11、户。系统管理员能够动态的给用户赋予权限,保证系统信息不外泄。系统管理员能够修改和删除用户信息。系统管理员能够进行维护赛选信息,对客服进行动态服务。系统管理员能够给用户建立备注信息,其仅对具有权限的用户能够进行信息的检查与修改。4.2.3体系结构设计网上购物系统登录模块新闻发布模块注册模块购物车模块订单模块商品管理模块用户管理模块留言评价模块4.3.详细设计4.3.1详细设计说明书网上购物系统 管理员登陆系统客户注册系统客户登陆系统会员注销查询选购记录选购物品会员修改资料订单处理会员管理物品入库管理员注销 4.3.2数据库设计 物品表(物品编号,物品名,价格),主键为物品编号,符合三范式。客户表
12、(客户编号,姓名,性别,购买记录,购买信誉),主键为客户编号,符合三范式。 表3-1 物品表book列名含义长度类型NULLDEFAULT备注Bno物品编号10Char()nonobname物品名称15Char()nonoprice价格8Char()nono 表3-2 客户表Member列名含义长度类型NULLDEFAULT 备注Mno客户编号15Char()nonoMname客户姓名15Char()nonosex客户性别5Char()nonorecord购买记录15Char()nonoCredit购买信誉15Char()nono4.3.3 程序流程图 用户登录流程图登录入口 否查询用户是否存
13、在 是否核对密码是否正确是取得用户名和密码 将UserID存在session中登录成功物品搜索流程图开始搜索输入条件搜索结果购物车查看商品否是下订单继续搜4.3.4输入项目输入本系统中的数据如下所示:1.用户信息需要有用户亲自注册,管理员帐号由系统自动生成。2.产品信息需要有管理员手动进行添加。3.留言标题、内容由用户输入,留言者、留言时间由系统自动检验生成。4.新闻标题、英文标题、内容、英文内容由管理员添加,发布时间由系统自动检验生成。5.订单信息需要由用户填写。4.4.程序源码import java.util.*;import java.awt.event.*;import java.aw
14、t.*;import javax.swing.*;import java.io.*;class 商品 extends PanelString 代号,名称;int 库存;float 单价;商品(String 代号,String 名称,int 库存,float 单价)this.代号=代号;this.名称=名称;this.库存=库存;this.单价=单价;class ShowWin extends JFrame implements ActionListener Hashtable hashtable=null;JTextField 代号文本框=new JTextField(),名称文本框=new
15、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);Show
16、Win()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(
17、输入库存:);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
18、(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);sp
19、lit_two=newJSplitPane(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
20、);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(库存文本框.
21、getText();danjia=Float.valueOf(单价文本框.getText().floatValue();商品 goods=new 商品(daihao,mingcheng,kucun,danjia);hashtable.put(daihao,goods);tryFileOutputStream file=new FileOutputStream(goods.txt);ObjectOutputStream out=new ObjectOutputStream(file);out.writeObject(hashtable); out.close();catch(IOExceptio
22、n event)else if(e.getSource()=b_del)String daihao1=删除文本框.getText();tryFileInputStream 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=(商品)ha
23、shtable.get(daihao1);hashtable.remove(daihao1);tryFileOutputStream 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
24、);tryFileInputStream 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.库存+ 单价:+
25、a.单价);/else if(e.getSource()=b_xiu) String bb;bb=代号文本框.getText();tryFileInputStream 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=(商品)hash
26、table.get(bb);hashtable.remove(bb);tryFileOutputStream 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()
27、;mingcheng1=名称文本框.getText();kucun1=Integer.parseInt(库存文本框.getText();danjia1=Float.valueOf(单价文本框.getText().floatValue();商品 goods1=new 商品(daihao1,mingcheng1,kucun1,danjia1);hashtable.put(daihao1,goods1);tryFileOutputStream file=new FileOutputStream(goods.txt);ObjectOutputStream out=new ObjectOutputStr
28、eam(file);out.writeObject(hashtable); out.close();catch(IOException event)/else if(e.getSource()=b_show) 显示区.setText(null);tryFileInputStream come_in=new FileInputStream(goods.txt);ObjectInputStream in =new ObjectInputStream(come_in);hashtable=(Hashtable)in.readObject(); /catch(ClassNotFoundExceptio
29、n 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 LinkListFourpubli
30、c 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.影响上述方面的边界条件。测试时进行代码审查,从数
31、据类型,变量声明,数据结构进行审查,然后进行功能测试,从输入一些简单的数据开始执行一遍,观测运行期间变量的变化,运行中值的变化范围。改变测试方案来变换另一个角度进行测试,发现错误并记录,修改代码,测试条件使程序经过多层分支,判别运行结果从而完成模块测试。 部分测试结果如图 主界面 添加商品 查询商品4.5.2总体测试总体测试是组装软件的系统技术,本系统测试采用渐增集成测试,即测试单一模块,将测试完的模块加入系统中,进行一次系统测试,依次类推将所有模块加入系统中,在具体测试时,采用自顶向下的结合方式,从主控模块开始,沿各控制层向下移动,逐渐把所有模块结合了。在测试过程中使用到调试技术:1. 采用
32、debug调试语句,跟踪数据;2. 嵌入打印语句,输出中间结果;3. 利用Delphi 7.0中调试工具,从调试窗口观测变量的变化;4. 设置断点,观察程序在断点附近的状况。 5 总结与展望 这次课程设计让我认识到软件工程方法对项目开发的重要性和必要性,知道能够使得软件开发少走弯路,更容易开发出高质量的项目开发。按照软件工程的方法、软件的开发需要严格遵守其开发流程,作好软件设计的每一个流程。 由于以前没有系统的学习过软件工程的相关知识,只学过C/C+语言、数据结构等课程,因此在我的头脑里,做软件就是写代码,水平高的人写大型的、复杂的代码,水平低的人编的简单一些,因此总觉得软件工程没有什么太多实
33、际的价值。然而,在逐步的学习过程中,特别是在结合本门课程和同学一起开发一个较为大型的软件中,我深深感受到了软件工程在开发过程中的指导作用。软件工程,重点在工程两字上,也就是把软件的开发当作一个工程项目运用工程的方法来实施,从可行性分析、需求分析直到最后的测试、交付以及以后的维护,每一个过程都有自己的一套方法。工程经常是和实践联系在一起的,软件工程只有在实际的软件开发中才能更深的体会到它的作用。 参考文献1 屈辉立,陈可明,石武信.JSP网站编程教程M.第1版, 北京:北京希望电子出版社, 2 白勇.用B/S模式构建在线考试系统J,重庆电力高等专科学校学报, ,10(4): 100130. 3 Jiang Guo,Yuehong Liao,Behzad Parviz.A Survey of J2EE Application Performance Management SystemsJ,Proceedings of the IEEE International Conference on Web Services (ICWS04), .6(5):1732.4 VB数据库管理范例: 成绩评定成绩 教师签字