资源描述
(完整word版)网上书店信息管理系统+代码+数据库表
书店信息管理系统的设计与实现
学生姓名:蒋 斌 指导老师:罗永红
摘 要 本课程设计主要是设计一个书店信息管理的系统,实现用户的注册、登录,书店书籍的添加、删除、修改、查询及图书的购买等功能。程序设计平台为Windows 7,程序设计语言采用JAVA,所连接的数据库是oracle 11g。在程序设计中,采用了结构化与面向对象两种解决问题的方法。程序通过调试运行,初步实现了目标。
关键词 数据库;oracle 11g;JAVA;书店信息管理系统
The Design and Implementation of Book Store Information Management System
Student Name:JiangBin Advisor:LuoYong-hong
Abstract This course design is mainly to make a information management system of a online bookstore, The function of the system include book’ adding ,deleting and querying and purchase books. Program design platform is Windows XP, programming language is JAVA, are the connected database is Oracle 10g. In the program process, I adopted two solution of the structured and object-oriented. Program run through the debugger, achieving the initial goal.
Keywords Database; oracle 10g; JAVA; Online Bookstore Information Management System
目 录
1引言 1
1.1 课题背景 1
1.2 课程设计目的 1
1.3课程设计任务 1
2 系统结构分析 2
2.1 需求分析 2
2.2 功能模块图 3
3 数据库设计 4
3.1 概念结构设计 4
3.2逻辑结构设计 6
3.3数据库表的建立 8
4功能实现 10
4.1注册界面 10
4.2 登录界面 11
4.3主界面 12
4.4书籍添加 12
4.5 书籍修改 13
4.6 图书删除 14
4.7 图书删除 14
4.8 订单查询修改 15
5 系统技术实现 16
5.1 JAVA 16
5.2 oracle 16
6 结束语 18
参考文献 19
1引言
1.1 课题背景
随着计算机技术的发展以及计算机网络的逐渐普及,英特网成为人们查找信息的重要场所。二十一世纪是信息的时代,所以信息的交换和信息流通显 的特别重要。因此网上书店的出现成为必然。
1.2 课程设计目的
随着计算机的广泛应用,其逐步成为现代化的标志。书店等,在正常运行过程中总是面对大量的客户信息,书籍信息以及两者相互作用产生的购书信息。因此需要对客户资源、书籍资源、购书信息及书籍信息进行管理,及时了解各个环节中信息的变更,要对因此而产生的单据进行及时的处理,为了书店自动化的管理,能够更快速的满足客户的要求,提高各种工作的效率,现对其设计相应的系统,以达到上述的目的。
网上书店信息管理系统的主要功能是实现书籍信息管理及购书的自动化。围绕这一主要功能,本系统涉及到以下核心功能:上传管理,修改管理,查询管理。除了这些核心功能外,还包括一些基本和辅助功能,如:商家和客户的注册、登录,客户的购书等。
1.3课程设计任务
本课程设计任务是通过开发一个书店信息管理系统,学习数据库系统的设计与开发,采用Eclipse和oracle 10g等软件为开发工具。通过对计算机硬件和软件解决方案的论证,对应用领域进行调查分析,参考各种资料和进行数据库系统开发实践。在指导老师的帮助下,已经基本上成功地实现了设计任务书的要求,使得设计的数据库系统能够实现一般数据库的管理。
2 系统结构分析
2.1 需求分析
网上书店信息管理系统是适应计算机时代发展的需要,提高管理的效率而开发设计的。通过对书籍信息管理,使客户能轻松购买书籍。
经过综合分析,确定了网上书店信息管理系统的主要包括以下功能:
(1)商家:
a、商家注册功能
此模块的主要功能是用于商家注册账号;
b、商家登录功能
此模块的主要功能是用于拥有商家账号的用户登陆系统对自己的书店进行管理;
c、上传书籍功能
此模块的主要功能是用于商家发布一些新书共客户查看及购买;
d、书籍修改功能
此模块的主要功能是用于商家修改自己书店书籍的信息;
e、书籍删除功能
此模块的主要功能是用于商家删除一些书籍信息;
f、书籍查询功能
此模块的主要功能是用于商家查询自己书店的书籍;
g、订单查询功能
此模块的主要功能是用于商家查询自己书店卖书的记录;
(2)客户:
a、商家注册功能
此模块的主要功能是用于商家注册账号;
b、商家登录功能
此模块的主要功能是对拥有客户账号的用户登录;
c、商品信息查询功能
此模块的主要功能是用于客户查看所有商家的书籍信息;
d、书籍购买功能
此模块的主要功能用于客户购买书籍
e、订单查询功能
此模块的主要功能是用于客户查询自己的购书记录;
2.2 功能模块图
根据上述的功能,可以设计出系统的总体功能模块,如图2.1所示,
网上书店信息管理系统
商家
书籍查询
客户
注册
登录
书籍上传
书籍修改
书籍删除
订单查询
注册
书籍查询
登录
购买书籍
订单查询
图2.1 系统功能模块示意图
3 数据库设计
3.1 概念结构设计
根据需求分析抽象出信息结构,可得该系统的E-R图,
(1)商家用户E-R图,如图3.1所示,
seller
pwd
address
Seller_id
Seller_nameme
图3.1 商家用户E-R图
(2)客户用户E-R图,如图3.2所示,
buyer
pwd
address
buyer_id
buyer_nameme
图3.2 客户用户E-R图
(3) 书籍信息E-R图,如图3.3所示,
goods
price
discount
num
Goods_id
Seller_id
Goods_name
图3.3 书籍信息E-R图
(4)订单E-R图,如图3.4所示,
order
Buyer_id
Goods_id
order_id
Seller_id
num
图3.4 商家用户E-R图
(5)根据分E-R图和需求分析,可得到总E-R图,如图3.5所示。
图3.5 总E-R图
3.2逻辑结构设计
根据上述的概念结构设计出逻辑结构,将E-R图转换为关系模型。
数据库ORCL包含以下4个表:商家信息表seller、客户信息表buyer、书籍信息表goods、订单信息表order。
(1) 商家信息表seller
商家信息表seller用来保存商家账号、密码等信息,表seller的结构如表3-1
所示,
表3-1 表seller的结构
字段名
说明
类型
长度及备注
seller_id
商家编号
varchar2(20)
主键
seller_name
书店名称
varchar2(20)
pwd
密码
varchar2(20)
address
书店地址
varchar2(200)
(2) 客户信息表buyer
客户信息表buyer用来保存客户账号、密码等信息,表buyer的结构如表3-2所示,
表3-2 表buyer的结构
字段名
说明
类型
长度及备注
buyer_id
客户编号
varchar2(20)
主键
buyer_name
客户名字
varchar2(20)
pwd
密码
varchar2(20)
address
客户住址
varchar2(200)
(3)图书信息表goods
书籍信息表goods用来保存书号、书名、作者等信息。表goods的结构如表3-3所示,
表3-3 表goods的结构
字段名
说明
类型
长度及备注
goods_id
书籍编号
int
主键
seller_id
商家编号
varchar(20)
外键
goods_name
书籍名称
varchar(50)
price
价格
int
discount
折扣
int
num
书籍数量
int
(4)订单信息表order
订单信息表order用来保存订单号、书籍编名等信息。表order的结构如表3-4所示,
表3-4 表order的结构
字段名
说明
类型
长度及备注
order_id
订单编号
int
主键
goods_id
书籍编号
varchar(20)
外键
seller_id
商家编号
varchar(50)
外键
buyer_id
客户编号
int
外键
num
购买数量
int
3.3数据库表的建立
在设计数据库表结构之前,首先要创建一个数据库实例。本系统使用的数据库为oracle 10g。数据库表的建立语句如下:
--商家
create table seller(
seller_id varchar2(20) primary key,
seller_name varchar2(20),
pwd varchar2(20),
address varchar2(200)
);
--客户
create table buyer(
buyer_id varchar(20) primary key,
buyer_name varchar(20),
pwd varchar2(20),
address varchar(200)
);
--书籍
create table goods(
goods_id int primary key,
seller_id varchar(20),
goods_name varchar(50),
price int,
discount int,
num int,
constraint fk_seller_id foreign key(seller_id) references seller(seller_id)
);
--订单
create table orders(
order_id int primary key,
goods_id int,
seller_id varchar(20),
buyer_id varchar(20),
num int,
constraint fk_goods_id foreign key(goods_id) references goods(goods_id),
constraint fk_sellers_id foreign key(seller_id) references seller(seller_id),
constraint fk_buyer_id foreign key(buyer_id) references buyer(buyer_id)
);
4功能实现
该程序实现了网上书店信息管理系统应有的功能,即账号注册、登录功能、书籍查询、书籍添加、书籍删除、书籍修改、书籍购买功能。
4.1注册界面
程序运行出现注册界面,要求用户输入相应信息,当信息符合要求时,注册成功,如图4.1所示,
图 4.1注册界面
实现注册功能的核心代码如下:
//构建客户对象
Buyer buyer = new Buyer();
//设置客户的信息
buyer.setId(fieldCus0.getText());
buyer.setName(fieldCus1.getText());
buyer.setPwd(fieldCus2.getText());
buyer.setAddress(fieldCus3.getText());
//构建BuyerDao对象
BuyerDao dao = new BuyerDao();
//把该客户插入到数据库中
int flag_1 = dao.insertBuyer(buyer);
4.2 登录界面
程序运行出现登陆界面,要求用户输入相应信息,当信息符合要求时,登录成功,如图4.2所示,
图 4.2 登录界面
当登录成功时,进入主界面,实现登录功能的核心代码如下:
//通过输入姓名和密码获取一个用户对象
Seller seller = SellerDao.getSeller(useNameText.getText(), pws.getText());
//判断队形是否为空
if(seller.getId()!=null){
//隐藏当前窗口
setVisible(false);
//构建用户主窗口,并显示出来
new SellerFrame().setVisible(true);
4.3主界面
登录成功后商家和客户分别进入两个不同的主界面,如图4.3所示,
图 4.3主界面
图 4.3主界面界面
主界面里面商家可以查看到自己的商品信息及商品出售后生成的订单信息,客户则可以浏览所有商家的商品信息和自己的购物记录。
4.4书籍添加
该模块主要用于商家添加书籍,如图4.4所示,
图 4.4书籍添加界面
添加成功后该商家及客户均能浏览到该书籍的信息,实现添加书籍功能的核心代码如下:
//构建GoodsDao对象
GoodsDao dao = new GoodsDao();
//设置goods的属性
goods.setDiscount(Integer.valueOf(fieldDiscount.getText()));
goods.setName(fieldName.getText());
goods.setNum(Integer.valueOf(fieldNum.getText()));
goods.setPrice(Integer.valueOf(fieldPrice.getText()));
//调用dao.insertGoods()方法,把商品插入到数据库中
dao.insertGoods(goods);
4.5 书籍修改
该模块主要用于商家修改自己的书籍的信息,如图4.5所示,
图 4.4书籍修改界面
该界面进来后首先会显示出商品的信息,修改好数据后,点击修改按钮则可以对商品进行修改,实现修改功能的核心代码如下:
//构建GoodsDao对象
GoodsDao dao = new GoodsDao();
//读取对应文本框的信息并设置到goods里面 goods.setDiscount(Integer.valueOf(fieldDiscount.getText()));
goods.setName(fieldName.getText());
goods.setNum(Integer.valueOf(fieldNum.getText()));
goods.setPrice(Integer.valueOf(fieldPrice.getText()));
//修改goods信息
dao.updateGoods(goods);
4.6 图书删除
该模块主要用于商家对书籍进行删除操作,如图4.6所示,
图 4.6书籍删除界面
当商家往文本框里输入书籍编号后,点击删除,则可以对书籍进行删除,当书籍编号输入错误,点击删除时系统会弹出提示信息,实现该模块功能代码如下:
//获取文本框中输入的书籍编号
int id = Integer.parseInt(field.getText());
//构建GoodsDao
GoodsDao dao = new GoodsDao();
//调用//调用deleteById方法,删除书籍
dao.deleteById(id)
4.7 图书删除
该模块主要用于客户购买书籍,如图4.7所示,
图 4.7 图书购买
当客户往文本框里面输入书籍标号,选择好商品数量后,点击购买就可以实现客户对书籍的购买。如果书籍编号错误或商品数量不够时,系统会弹出提示,实现购书功能的核心代码如下:
//构建GoodsDao对象
GoodsDao dao = new GoodsDao();
//构建goods对象
Goods goods = new Goods();
//减少库存数量
goods.setNum(goods.getNum()-num);
//修改商品信息
dao.updateGoods(goods);
//构建订单对象
OrderDao order = new OrderDao();
//插入一条订单数据
order.inserOerderByGoods(goods, num);
4.8 订单查询修改
该模块主要用于客户查看生成的订单,如图4.8所示,
图4.8 订单查询模块
5 系统技术实现
5.1 JAVA
Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行” 的跨平台特性[2]。
5.2 oracle
Oracle数据库包括Oracle数据库服务器和客户端。
Oracle数据库服务器:
Oracle Server是一个对象一关系数据库管理系统。它提供开放的、全面的、和集成的信息管理方法。
每个Server由一个 Oracle DB和一个 Oracle Server实例组成。它具有场地自治性(Site Autonomy)和提供数据存储透明机制,以此可实现数据存储透明性。每个 Oracle数据库对应唯一的一个实例名SID,Oracle数据库服务器启动后,一般至少有以下几个用户:Internal,它不是一个真实的用户名,而是具有SYSDBA优先级的Sys用户的别名,它由DBA用户使用来完成数据库的管理任务,包括启动和关闭数据库;Sys,它是一个 DBA用户名,具有最大的数据库操作权限;System,它也是一个 DBA用户名,权限仅次于 Sys用户。
客户端:
为数据库用户操作端,由应用、工具、SQL* NET组成,用户操作数据库时,必须连接到一服务器,该数据库称为本地数据库(Local DB)。在网络环境下其它服务器上的 DB称为远程数据库(Remote DB)。用户要存取远程 DB上的数据时,必须建立数据库链。
Oracle数据库的体系结构包括物理存储结构和逻辑存储结构。由于它们是相分离的,所以在管理数据的物理存储结构时并不会影响对逻辑存储结构的存取。
1.逻辑存储结构
它由至少一个表空间和数据库模式对象组成。这里,模式是对象的集合,而模式对象是直接引用数据库数据的逻辑结构。模式对象包括这样一些结构:表、视图、序列、存储过程、同一词、索引、簇和数据库链等。逻辑存储结构包括表空间、段和范围,用于描述怎样使用数据库的物理空间。而其中的模式对象和关系形成了数据库的关系设计。
数据块(Block):是数据库进行UO操作的最小单位,它与操作系统的块不是一个概念。oracle数据库不是以操作系统的块为单位来请求数据,而是以多个Oracle数据库块为单位。
段(Segment):是表空间中一个指定类型的逻辑存储结构,它由一个或多个范围组成,段将占用并增长存储空间。
其中包括:
数据段:用来存放表数据;
索引段:用来存放表索引;
临时段:用来存放中间结果;
回滚段:用于出现异常时,恢复事务。
范围(Extent):是数据库存储空间分配的逻辑单位,一个范围由许多连续的数据块组成,范围是由段依此分配的,分配的第一个范围称为初始范围,以后分配的范围称为增量范围[3]。
6 结束语
经过这两周的不断学习和设计开发加上老师同学的帮助,终于完成了本次课程设计。在完成过程中,我进一步学习了Java的基础语法以及熟悉了用Java编写图形用户界面,同时也规范了许多编写习惯,对数据库的一些基本操作也有了进一步的了解。在编程的过程中遇到许多的问题,但通过查资料,以及与同学讨论,大部分问题得到了解决。但由于时间问题以及一些其他的因素,本系统也扔存在许多问题,功能也不是很完善,比如一些输入数据的控制,正则表达式的匹配这方面做的还很不够。但我觉得通过这次课程设计我还是学到了很多,如果下次再去做类似的东西我觉得我一定会做的更好。
参考文献
[1] 萨师煊, 王珊.数据库系统概论(第三版)[M].北京:高等教育出版社. 2005.
[2] Y.Daniel Liang.Java语言程序设计基础篇[M].北京:机械工业出版社.2006.
[3] 夏帮贵,刘凡馨.JDBC AP数据库编程实材作教.北京:北京希望电子出版社.2001.
[4] 王立福. 软件工程(第二版)[M]. 北京:北京大学出版社.2002.
附录 全部源代码
package com.shoeShop.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Connect {
private static Connection con = null;
private static String url="jdbc:oracle:thin:@localhost:1521:ORCL";
private static String driver = "oracle.jdbc.driver.OracleDriver";
private static String user = "scott";
private static String pwd = "tiger";
public static Connection getConnection(){
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, pwd);
System.out.println("数据库连接成功!");
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败!");;
} catch (SQLException e) {
System.out.println("数据库连接失败!");
}
return con;
}
public static void main(String[] args) {
Connect.getConnection();
}
}
package com.shoeShop.action;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import com.shoeShop.view.RegisterFrame;
public class docMenuAction implements ActionListener {
RegisterFrame register = null;
JPanel cusPanel = null;
JPanel docPanel = null;
public docMenuAction(RegisterFrame register){
this.register = register;
this.cusPanel = register.cusPanel;
this.docPanel = register.docPanel;
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
register.flag = 1;
//System.out.println(register.flag);
register.remove(cusPanel);
register.add(docPanel);
docPanel.updateUI();
}
}
package com.shoeShop.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.shoeShop.db.Connect;
import com.shoeShop.entity.Buyer;
import com.shoeShop.entity.Seller;
public class BuyerDao {
private static Connection conn;
private static Statement statement;
private static ResultSet resultSet;
//插入数据,用于注册
public int insertBuyer(Buyer buyer){
int flag = 0;
conn = Connect.getConnection();
try {
statement = conn.createStatement();
String sql = "insert into buyer values('"+buyer.getId()+"','"+buyer.getName()+"','"+buyer.getPwd()+"','"+buyer.getAddress()+"')";
// System.out.println("buyer"+sql);
flag = statement.executeUpdate(sql);
statement.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(flag);
return flag;
}
//通过用户名和密码查询,用于登录
public static Buyer getBuyer(String name,String pwd){
conn = Connect.getConnection();
Buyer buyer = new Buyer();
try {
statement = conn.createStatement();
String sql = "select * from buyer where buyer_id='"+name+"' and pwd = '"+pwd+"'";
resultSet = statement.executeQuery(sql);
while(resultSet.next()){
buyer.setId(resultSet.getString("buyer_id"));
buyer.setName(resultSet.getString("buyer_name"));
buyer.setPwd(resultSet.getString("pwd"));
buyer.setAddress(resultSet.getString("address"));
}
resultSet.close();
statement.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return buyer;
}
public static void main(String[] args) {
BuyerDao dao = new BuyerDao();
System.out.println(dao.getBuyer("zxk", "654321"));
// Buyer buyer = new Buyer();
// buyer.setId("lily");
// buyer.setName("长理专卖");
// buyer.setPwd("123456");
// buyer.setAddress("湖南长沙");
// dao.insertBuyer(buyer);
}
}
package com.shoeShop.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.shoeShop.db.Connect;
import com.shoeShop.entity.Goods;
import com.shoeShop.entity.Seller;
import com.shoeShop.imp.User;
public class GoodsDao {
private static Connection conn;
private static Statement statement;
private static ResultSet resultSet;
//查询登录商家的所有商品,用于商家管理自己的商品
public ArrayList getAllGoods(){
ArrayList list = new ArrayList();
conn = Connect.getConnection();
try {
statement = conn.createStatement();
String sql = "select * from goods a,seller b where a.seller_id=b.seller_id and b.seller_id='"+User.getUserName()+"'";
resultSet = statement.executeQuery(sql);
while(resultSet.next()){
Seller seller = new Seller();
seller.setName(resultSet.getString("seller_name"));
seller.setAddress(resultSet.getString("address"));
Goods goods = new Goods();
goods.setSeller(seller);
goods.setId(resultSet.getInt("goods_id"));
goods.setName(resultSet.getString("goods_name"));
goods.setSeller_id(resultSet.getString("seller_id"));
goods.setDiscount(resultSet.getInt("discount"));
goods.setNum(resultSet.getInt("num"));
goods.setPrice(resultSet.getInt("price"));
// System.out.println(goods.toString());
list.add(goods);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
resultSet.close();
statement.close();
conn.close();
} catch (S
展开阅读全文