1、三层架构是基于模块化程序设计的思想,为实现分解应用程序的需求,而逐渐形成的一种标准模式的模块划分方法。此模型将应用程序划分为:用户界面层、业务逻辑层、数据访问层三个层次。1、用户界面层:负责处理用户的输入和向用户输出,但并不负责解释其含义。有时候出于对效率的考虑,这一层可能会在向上传输用户输入之前进行合法性验证。2、业务逻辑层:这一层是用户界面层与数据访问层的纽带,它根据用户界面层传来的数据进行相应的业务逻辑操作并把结果返回给前端界面显示。3、数据访问层:负责实际的数据存储和检索,它建立实际的数据库连接,根据用户的请求执行检索或更新数据库操作。2.2 功能需求订单数据库系统共有5个页面,基本流
2、程为:1、 会员通过“会员登录页面”登录成功后进入“购物列表界面”。2、 会员在此可以选购;3、 选购完毕后进入“购物车清单页面”,查看购物信息。此处可修改信息。4、 确认购物车信息后进入“订单信息页面”,会员填写详细信息并提交订 单。5、 订单成功提交后进入“订单详情页面”,至此购物流程结束。2.3 系统功能清单前台模块功能后台模块功能商品信息展示 会员注册 会员登陆 会员信息修改 购物车管理 订单管理商品管理会员管理系统管理 表 2-1 系统功能清单2.4 数据流图 图 2-1 数据流图2.5 数据字典2.5.1 数据流的描述(1)会员编号数据项定义表2-2 会员编号数据项定义数据项定义数
3、据项编号:201101 有关编码的说明:数据项名称:会员编号 X XX XX 简 介:本商城会员编号 会员类别 编号类 型:电器实 例:A00012.5.2 处理逻辑的描述(1)判断是否已结算表2-4 判断是否已结算判断是否已结算处理逻辑编号:P003 处理逻辑名称:简 述:输入的数据流:会员名、商品条形码、总额处理描述:根据会员名和商品条形码、总额,将对应的书籍交易状态更改为已付款等待发货输出的数据流:D003处理频率:100次/天三、 概念模型设计3.1 系统模块划分1、连接数据库模块:使用JDBC访问ORACLE数据库,实现对数据库的操作2、购物车及后台处理模块:会员将购买的商品加入购物
4、车后,将数据插入数据库保存,以便后台管理员确定信息和发货以及会员查看记录3、验证登陆模块:根据输入的用户名和密码验证是否正确4、商品展示模块:通过访问数据库展示商品信息5、商品详细信息模块:显示商品的详细信息3.1.2后台模块详细功能描述:(1)管理员信息管理:登录;添加新管理员、删除管理员:修改密码;管理员日志(记录管理员的每个操作,由超级管理员进行查询)。(2)商品信息管理:添加、删除商品类别;添加、修改、删除商品信息。(3)用户信息管理:查询用户信息、修改账户金额。(4)订单管理:管理订单是否确认,是否发货,是否付款,是否归档。并且对相应信息进行查询(支持多参数查询)。3.2 系统功能模
5、块结构图 图 3-2 系统功能模块结构图3.3 会员实体图 图 3-3 会员实体图3.4 商品实体图 图 3-4 商品实体图3.5 系统E-R图3.5.1分E-R图3.5.2总E-R图图3-5 系统E-R图3.6 管理员后台处理流程图 图 3-6 管理员后台处理流程图四、逻辑模型设计4.1 E-R图向关系模型转化管理员(管理员编号、用户名、密码)会 员(ID、昵称、密码、姓名、地址、E-mail、QQ、联系方式)购物车(编号、用户名、商品名、数量、总价格、创建时间)订 单(订单号、创建时间、用户名、姓名、地址、联系方式、商品名、商品编号、数量、总价、单价)商 品(商品编号、商品名、单价、厂商、
6、生产日期、商品介绍)4.2 各个数据库表设计如下: 表1 用户信息表数据项编号数据项名称别名简述字段名类型取值范围I1用户编号用户ID用户代号UserChar4-20I2注册日期日期注册时间RtimeDateI3用户名用户昵称UnameI4用户密码密码用户登陆密码passwd6-18I5用户地址地址addressI6用户姓名真实姓名Rname4-10I7用户QQQQ联系方式5-15I8E-mail邮箱mail 表2 商品信息表商品编号条形码Isbn上传时间上架时间Upload_time商品名品名名称Shopname厂商From单价价格商品单价 PriceInt库存数量库存库存量Storecou
7、nt商品简介简介Content 表3 购物车信息表订单编号订单号订单代号OrderId订单日期下订单时间Stime用户编码购买者代号UserId昵称购买者用户名送货地址收货人姓名商品编码商品代码商品名称I9商品数量商品数购买数量count0-9999I10商品价格购买商品价格priceI11交易状态状态商品交易状态Condition 其中交易状态中设定:0 - 等待付款 1 - 已付款等待发货2 - 已发货等待签收3 - 交易完成4 - 交易关闭4.3 关系模式的优化对关系模式进行规范化处理,对关系模式进行评价与修正。五、物理设计5.1聚簇设计 该订单管理系统可建立以下聚簇:OderId(订单
8、编号)Isbn(商品编号)User(用户编号)Uname(用户名)这几个聚簇设计是因为这几张表都是实体表,且聚簇中的属性都是主键或是外键,被访问的概率很高,而其他表或者这些表上的其他属性被访问的概率就相对较低。5.2索引设计索引就是表中数据和相应存储位置的列表,使用索引可以大大减少数据的查询时间。对于一个确定的关系,通常在下列情况下可以考虑建立索引。(1) 在主键属性列和外键属性列上通常都可以分别建立索引,不仅有助于唯一性检查和完整性检查,而且可以加快连接查询的速度。(2) 以查询为主的关系可建立尽可能多的索引。(3) 对等值连接,但满足条件的元组较少的查询可以考虑建立索引。(4) 如果查询可
9、以从索引直接得到结果而不必访问关系,则对此种查询可以建立索引。该数据库管理系统可建立以下索引: Shopname(商品名) Rname(用户姓名)5.3分区设计与否涉及到数据库文件和日志文件的分区问题。磁盘分区设计的一般原则:(1) 减少访问冲突,提高I/O并发性。多个事物并发访问同一磁盘时,会产生磁盘访问冲突而导致效率低下,如果事务访问数据均能分布于不同磁盘上,则I/O可并发执行,从而提高数据库访问速度。(2) 分散热点数据,均衡I/O负担。在数据库中数据访问的频率是不均匀的,那些经常被访问的数据成为热点数据,此类数据宜分散存在于不同的磁盘上,以均衡各个磁盘的负荷,充分发挥多磁盘的并行操作的
10、优势。(3) 保证关键数据快速访问,缓解系统瓶颈。在数据库中有些数据如数据字典等的访问频率很高,为保证对它的访问不直接影响整个系统的效率,可以将其存放在某一固定磁盘上,以保证其快速访问。由以上原则可知,只有在管理程序较大且有大量用户同时访问时才需要进行分区设计,因此,本管理系统不需要进行分区设计。六、数据库实施6.1基本表的建立1、用户信息表create table yh( UserID char(20), Rtime date, Uname char(20), Rname char(10), passwd char(18), address char(50), QQ char(15), em
11、ail char(50), PRIMARY key (UserID) );2、商品信息表Create table sp Isbn char(50), Uploadtime date, Shopname char(30), Frome char(50), Price int, Storecount int, Content char(50), Primary key (Isbn);3、订单信息表Create table gw OrderId Char(50), Stime date, UserID Char(20), Uname Char(20), address Char(50), Rname
12、 Char(10), Isbn Char(50), Shopname Char(30), Count int, Condition int, Primary key (OrderId), Foreign key (UserID) references yh(UserID), Foreign key (Isbn) references sp(Isbn)6.2建立视图Create view gw_用户AsSelect gw.UserID,gw.Uname,gw.Rname,yh.email,gw.address,sp.Isbn,sp.Shopname,sp.PriceFrom gw,yh,spWh
13、ere gw.UserID=yh.UserID and gw.Uname=yh.Uname and gw.Rname=yh.Rname and gw.address=yh.address and gw.Isbn=sp.Isbn and gw.Shopname=sp.Shopname and gw.price=sp.price;6.3建立索引Create unique index yonghu on yh(UserID);Create unique index shangp on sp(Isbn);Create unique index gouwu on gw(OrderId);6.4建立触发器
14、当删除sp中的某一商品时,gw中的相应商品也应删除create trigger del_商品ON gwfor deleteas delete Isbn where sp.Isbn = (select Isbn from deleted) 6.5 建立java程序与数据库的关联Java源码:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.sql.*;class Loading private JFrame Loading_Frame; pri
15、vate JButton Loading_Button; private JTextField Loading_Name; private JButton Loading_Cancel; private JPasswordField Loading_Key; private JLabel Loading_lb1; private JLabel Loading_lb2; /private JDialog Loading_dia; /* public static Resultdosqlserch(String s) /*rs.next();/指向第一个数据 /可以操作,rs.getString(
16、字段名)来获得属性; 先关闭rs.close(); 依次是st.close(); 最后是conn.close();*/ /*public static void closeConnection() /看来不能这样风装啊 ; rs.close(); st.close(); con.close; */ Loading() int textWidth=16; int length; Loading_Frame = new JFrame(Loading! Loading_Frame.setResizable(false); Loading_Button = new JButton(sure Loadi
17、ng_Button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) int flag=0; String name = Loading_Name.getText(); String key1 = Loading_Key.getText(); /Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver/打开jdbc驱动 String url = jdbc:sqlserver:/localhost:1433;database
18、Name=dd; String user = la String key = 123 Connection con; Statement st; ResultSet rs; Boolean flag1; Boolean flag2; try con = DriverManager.getConnection(url,user,key);/获取连接对象 st = con.createStatement();/ rs = st.executeQuery(select * from yh /rs即sql查询后得到的结果;rs此时游标指向为空, System.out.println(在账户输入框中您输
19、入的是:+name);/输出TextField中输入的数 while(rs.next() String x = rs.getString(userid String y = rs.getString(passwd System.out.println(数据库账户表中已有的帐户+x);该帐户的密码是+y); catch (SQLException f)System.out.println(catch出错 ); Loading_Cancel = new JButton(Cancel /Loading_Cancel.addActionListener(); Loading_Name = new JT
20、extField( textWidth);/长度50的账户名输入框,添加文档监视器,可以实现判断输入文本的正确,与文本框是否改变内容 /Loading_Name.getDocument().addDocumentListener(); Loading_Name.setEditable(true); Loading_Key = new JPasswordField(textWidth);/密码输入框,与账户输入框同等长度; Loading_lb1 = new JLabel(账户 Loading_lb2 = new JLabel(密码 /Loading_dia = new JDialog(Fram
21、e x)/属于窗窗口的对话框; Container Loading_c = Loading_Frame.getContentPane(); Loading_Frame.setSize(250,135); Loading_Frame.setLayout(new FlowLayout(); /在登录窗口添加组件 Loading_c.add(Loading_lb1); Loading_c.add(Loading_Name); Loading_c.add(Loading_lb2); Loading_c.add(Loading_Key); Loading_c.add(Loading_Button); L
22、oading_c.add(Loading_Cancel); Loading_Frame.setVisible(true); public static void main(String args) new Loading();七、不足和心得体会7.1系统设计的不足1、在进行数据设计的时候,只考虑了几个最简单的数据输入,并不能很好地应用与实际应用当中2、在使用过程中依旧会产生一些错误,比如缺乏一些用户交互界面造成的一些约束的错误3、在整个系统的稳定性方面做的不足。我不能保证在我的系统上如果再加上其他功能会不会导致系统崩溃,所以还需要不断地完善。7.2我的心得经过本次的实习,我发现在操作的过程中依旧存在着诸多的不足,在做很多内容的时候依旧还是要看看书,查找一些资料,从而可以看出,在一些基本的知识上还是存在着一些缺陷和不足。此外,在逻辑结构上并没有考虑到与用户的交互问题,这也使得本系统的实用性大大折扣。因此,在以后的学习生活当中,我会更为注意基础知识的巩固和初期在概念和逻辑结构设计上的合理性问题,总之,这次实习对我的学习成果不得不说是一次很好的检验,同时,是我受益良多。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1