1、 目 录一、概述31.1 课程设计的目的31.2 课程设计的内容31.3 课程设计的要求4二、需求分析52.1 系统需求52.2 数据字典7三、系统总体设计93.1系统总体设计思路93.2 概念模型设计103.2.1 局部E-R图103.2.2 全局E-R图143.3 逻辑结构设计143.4 数据库建立实施193.4.1 建立数据库193.4.2 建立关系表19四、系统实现25五、系统评价27六、课程设计心得、总结28参考文献:29一概述1.1课程设计的目的通过课程设计,使学生具备将数据库系统与现实世界密切、协调一致结合起来的能力,掌握数据库设计中的需求分析、概念设计、逻辑设计、物理设计的方法
2、,并能够用具体的数据库和编程语言来解决实际的问题。此外还要求学生具备实验结果分析、总结及撰写技术报告的能力。1.2课程设计的内容 客户订购登记系统 现有一个公司希望为其客户订购行为建立一个数据库。 如果一个客户可以有一份或多份订单,每份订单可以订购一种或多种商品。每份订单有一个发票,可以通过多种方式来支付,例如支票,信用卡或者现金。处理这个客户订购登记的职工的名字要被记录下来。 部门工作人员负责整理订单并根据库存情况处理订单。如果订单上的产品在库存中有,就可以直接发货,发货方式也有多种;如果订单上的产品在库存中没有,就不需要登记或者订购其它产品。1.3课程设计的要求1、根据题目查找资料及调研,
3、写出数据库系统的需求分析报告;2、根据需求分析,设计系统的功能结构,画出系统的功能结构图,设计的功能要全面、正确,能解决现实世界各类用户的实际需要;3、根据需求分析,确定所设计的系统涉及到的实体、各实体的属性以及各实体之间的联系,用E-R图完成系统的概念模型设计,设计的概念模型要能全面、真实的反应现实世界,能满足系统功能的需要;4、根据E-R图转换为DBMS支持的关系模型;5、根据逻辑模型、系统环境和用户需求,设计数据库的物理结构。6、采用B/S模式,使用Java、ASP、JSP、PHP或ASP.NET程序设计语言之一进行相应前台主要模块和菜单的设计,选择Mysql、Oracle或者SQL S
4、erver数据库作为后台服务器。7、设计一组数据库表的测试实例,对各项功能进行简单的测试并写出测试结果。二需求分析2.1系统需求客户订购登记数据流图 客户实体的描述属性有:客户编号,客户名,邮编,电话号,传真号,银行帐号。产品实体的描述属性有:产品编号,产品名,型号,规格,单价,重量。订单实体的描述属性有:订单编号,客户编号,订货日期,交货日期,发货方式编号,职工编号,执行状态。订单细节实体的描述属性有:订单编号,产品编号,订货数量。发票实体的描述属性有:发票编号,开票日期,付款日期,订单编号,客户编号,付款方式编号。发货实体的描述属性有:发货编号,订单编号,产品编号,数量,发货日期,发货方式
5、编号,完成状态,职工编号。职工实体的描述属性有:职工编号,姓名,性别,出生年月,地址,办公电话,住宅电话,EMAIL,职务,职称。付款方式实体的描述属性有:付款方式编号,付款方式。 发货方式实体的描述属性有:发货方式编号,发货方式。2.2数据字典(一)客户表(二)产品表(三)订单表(四)订单细节表(五)发票表(六)发货表(七)职工信息表(八)付款方式表(九)发货方式表三系统总体设计3.1.系统总体设计思路3.2概念模型设计3.2.1局部E-R图 客户实体和订单实体通过提交订单发生联系。每个客户可以提交多份订单,而每份订单只对应一个客户。因此,客户实体和订单实体之间是一对多联系,如图所示。 产品
6、实体和订单细节实体通过订购产品发生联系。每个订单细节可以订购一种产品,而每种产品可以被不同的订单订购。因此,产品实体和订单细节实体之间是一对多联系,如图所示。 订单细节实体是订单实体的组成部分,故必存在联系。一份订单可以订购多种产品,也就是可以有多个订单细节,而每个订单细节只对应一份订单。因此,订单实体和订单细节实体之间是一对多联系,如图所示。 职工实体通过处理订单和订单实体发生联系。每个职工可以处理多份订单,而每份订单只能由一个职工处理。因此,职工实体和订单实体之间是一对多联系,如图所示。 付款方式是发票的组成部分,故必存在联系。每张发票对应一种付款方式,而每种付款方式可以用于不同的发票中。
7、因此,付款方式实体和发票实体之间是一对多联系,如图所示。 发货实体与订单细节实体通过发货打包发生联系。每个订单细节对应多次发货,而每次发货只对应一个订单细节。因此,发货实体和订单细节实体之间是一对多联系,如图所示。 发货方式是发货的组成部分,故必存在联系。每个发货对应一种发货方式,而每种发货方式可以用于不同的发货中。因此,发货方式实体和发货实体之间是一对多联系,如图所示订单实体和发票实体通过开具发票发生联系。每份订单开具一张发票,而每张发票也只对应一份订单。因此,订单实体和发票实体之间是一对一联系,如图所示。3.2.2全局E-R图3.3 逻辑结构设计客户(客户编号,客户名,邮编,电话号,传真号
8、,银行帐号)主键:客户编号。候补键:电话号,传真号,银行帐号。函数依赖集F:客户编号客户名,邮编,电话号,传真号,银行帐号,电话号客户编号,邮编,传真号,银行帐号,传真号客户编号,客户名,邮编,电话号,银行帐号,银行帐号客户编号,客户名,邮编,电话号,传真号虽然,客户编号电话号,电话号传真号,但由于电话号客户编号也成立,所以,客户编号传真号不是传递函数依赖。 客户关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以客户关系满足第3范式。 产品(产品编号,产品名,型号,规格,单价,重量)主键:产品编号。函数依赖集F:产品编号产品名,型号,规格,单价,重量。 产品关系不存在非主属性与候选键之
9、间的部分与传递函数依赖,所以产品关系满足第3范式。 订单(订单编号,客户编号,订货日期,交货日期,发货方式编号,职工编号,执行状态)主键:订单编号。外键:客户编号,引用了客户关系中的客户编号; 发货方式编号,引用了发货方式关系中的发货方式编号; 职工编号,引用了职工关系中的职工编号。函数依赖集F:订单编号客户编号,订货日期,交货日期,发货方式编号,职工编号,执行状态。 订单关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以订单关系满足第3范式。 订单细节(订单编号,产品编号,订货数量)主键:订单编号产品编号。函数依赖集F:订单编号,产品编号订货数量。 订单细节关系中不存在非主属性与候选
10、键之间的部分与传递函数依赖,所以订单细节关系满足第3范式。发票(发票编号,开票日期,付款日期,订单编号,客户编号,付款方式编号)主键:发票编号。候选键:订单编号。外键:订单编号,引用了订单关系中的订单编号; 客户编号,引用了客户关系中的客户编号; 付款方式编号,引用了付款方式关系中的付款方式编号。函数依赖集F:发票编号开票日期,付款日期,订单编号,客户编号,付款方式编号,订单编号发票编号,开票日期,付款日期,客户编号,付款方式编号。 发票关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以发票关系满足第3范式。发货(发货编号,数量,发货日期,订单编号,产品编号,发货方式编号,完成状态,职
11、工编号)主键:发货编号。外键:订单编号,引用了订单关系中的订单编号; 产品编号,引用了产品关系中的产品编号; 发货方式编号,引用了发货方式关系中的发货方式编号。函数依赖集F:发货编号数量,发货日期,订单编号,产品编号,发货方式编号,完成状态,职工编号。 发货关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以发货关系满足第3范式。 职工(职工编号,姓名,性别,出生年月,地址,办公电话,住宅电话,EMAIL,职务,职称)主键:职工编号。候选键:EMAIL。函数依赖集F:职工编号姓名,性别,出生年月,地址,办公电话,住宅电话,EMAIL,职务,职称,EMAIL职工编号,姓名,性别,出生年月,
12、地址,办公电话,住宅电话,职务,职称。 职工关系中不存在非主属性与候选键之间的部分与传递函数依赖,所以职工关系满足第3范式。 付款方式(付款方式编号,付款方式)主键:付款方式编号。函数依赖集F:付款方式编号付款方式。 付款方式关系满足第3范式。发货方式(发货方式编号,发货方式)主键:发货方式编号。函数依赖集F:发货方式编号发货方式。 发货方式关系满足第3范式。 所有关系都满足较高的范式要求,故客户订购登记管理的数据库设计是合理的。3.4 数据库建立实施3.4.1 建立数据库CREATE DATABASE customer_db;USE customer_db;3.4.2 建立关系表建立账单表:
13、CREATE TABLE t_bill ( bill_id int(11) NOT NULL AUTO_INCREMENT COMMENT 发票编号, raiseddate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 开票日期, paydate timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 付款日期, o_id int(11) NOT NULL COMMENT 订单编号, c_id int(11) NOT NULL
14、 COMMENT 客户编号, pay_id int(11) NOT NULL COMMENT 付款方式编号, PRIMARY KEY (bill_id), KEY fk_bill_order (o_id), KEY fk_bill_customer (c_id), KEY fk_bill_pay (pay_id), CONSTRAINT fk_bill_customer FOREIGN KEY (c_id) REFERENCES t_customer (id), CONSTRAINT fk_bill_order FOREIGN KEY (o_id) REFERENCES t_order (id
15、), CONSTRAINT fk_bill_pay FOREIGN KEY (pay_id) REFERENCES t_pay (id) ENGINE=InnoDB DEFAULT CHARSET=utf8;建立客户表:CREATE TABLE t_customer ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 客户编号, name varchar(20) NOT NULL COMMENT 姓名, zip varchar(50) NOT NULL COMMENT 邮编, tel varchar(20) NOT NULL COMMENT 电话, fax
16、 varchar(20) NOT NULL COMMENT 传真, bankno varchar(20) NOT NULL COMMENT 银行帐号, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET=utf8;建立职工表:CREATE TABLE t_employee ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 职工编号, name varchar(20) NOT NULL COMMENT 姓名, sex varchar(20) NOT NULL COMMENT 性别, dob date NOT NUL
17、L COMMENT 出生日期, address varchar(50) NOT NULL COMMENT 地址, worktel varchar(20) NOT NULL COMMENT 办公电话, hometel varchar(20) NOT NULL COMMENT 住宅电话, email varchar(20) NOT NULL COMMENT 邮箱, position varchar(20) NOT NULL COMMENT 职位, title varchar(20) NOT NULL COMMENT 职称, PRIMARY KEY (id) ENGINE=InnoDB DEFAUL
18、T CHARSET=utf8;建立订单表:CREATE TABLE t_order ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 订单编号, p_id int(11) NOT NULL COMMENT 客户编号哦, order_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 订货日期, jiao_date timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 交货日期, s
19、m_id int(11) NOT NULL COMMENT 发货方式编号, e_id int(11) NOT NULL COMMENT 职工编号, state varchar(50) NOT NULL COMMENT 执行状态, PRIMARY KEY (id), KEY fk_order_customer (p_id), KEY fk_order_shipmentmethod (sm_id), KEY fk_order_employee (e_id), CONSTRAINT fk_order_customer FOREIGN KEY (p_id) REFERENCES t_product (
20、id), CONSTRAINT fk_order_employee FOREIGN KEY (e_id) REFERENCES t_employee (id), CONSTRAINT fk_order_shipmentmethod FOREIGN KEY (sm_id) REFERENCES t_shipmentmethod (id) ENGINE=InnoDB DEFAULT CHARSET=utf8;建立订单细节表:CREATE TABLE t_order_details ( o_id int(11) NOT NULL COMMENT 订单号, p_id int(11) NOT NULL
21、COMMENT 产品号, numer int(11) NOT NULL COMMENT 订货数量, PRIMARY KEY (o_id,p_id) ENGINE=InnoDB DEFAULT CHARSET=utf8;建立付款表:REATE TABLE t_pay ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 付款方式编号, method varchar(20) NOT NULL COMMENT 付款方式, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET=utf8;建立产品表:CREATE TABLE t
22、_product ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 产品编号, name varchar(20) NOT NULL COMMENT 产品名, moder varchar(20) NOT NULL COMMENT 型号, norm varchar(20) NOT NULL COMMENT 规格, price float NOT NULL COMMENT 单价, weight float NOT NULL COMMENT 重量, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET=utf8;建立发货表
23、:CREATE TABLE t_shipment ( shipment_id int(11) NOT NULL AUTO_INCREMENT COMMENT 发货编号, o_id int(11) NOT NULL COMMENT 订单号, p_id int(11) NOT NULL COMMENT 产品号, number int(11) NOT NULL COMMENT 数量, date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 发货日期, sm_id int(11) NOT
24、 NULL COMMENT 发货方式编号, state varchar(20) NOT NULL COMMENT 完成状态, e_id int(11) NOT NULL COMMENT 职工编号, PRIMARY KEY (shipment_id), KEY fk_shipment_order (o_id), KEY fk_shipment_product (p_id), KEY fk_shipment_shipmentmethod (sm_id), KEY fk_shipment_employee (e_id), CONSTRAINT fk_shipment_employee FOREIGN
25、 KEY (e_id) REFERENCES t_employee (id), CONSTRAINT fk_shipment_order FOREIGN KEY (o_id) REFERENCES t_order (id), CONSTRAINT fk_shipment_product FOREIGN KEY (p_id) REFERENCES t_product (id), CONSTRAINT fk_shipment_shipmentmethod FOREIGN KEY (sm_id) REFERENCES t_shipmentmethod (id) ENGINE=InnoDB DEFAU
26、LT CHARSET=utf8;建立发货方式表:CREATE TABLE t_shipmentmethod ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 发货方式编号, method varchar(20) NOT NULL COMMENT 发货方式, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET=utf8;四 系统实现1. 数据库实现:在使用mysql创建好数据库后,对数据库进行连接,在设置好数据源与JDBC的连接,就能使用数据库了。在此程序中,数据源设置为customer_db。数据库的连接:Cla
27、ss.forName(com.mysql.jdbc.Driver);Connection conn = DriverManager.getConnection(jdbc:mysql:/customer_db);2. 登陆界面:登陆时的验证:String name = request.getParameter(admin);String pwd = request.getParameter(pwd)AdminDao dao = new AdminDao();Admin admin = dao.findByNameAndPassword(name, pwd);if(admin!=null)if(a
28、dmin.getName().equals(name)&admin.getPassword().equals(pwd)request.setAttribute(admin, admin);request.getRequestDispatcher(show.jsp).forward(request, response);elseresponse.sendRedirect(index.jsp);3. 主界面:五 系统评价此次设计的网站完成了本次课程设计的任务要求,实现了客户、订单等相关信息的管理,并实现了各种信息的查询,能够正确的提示各类错误,例如修改密码时两次密码输入不正确,创建新客户时没有输入
29、姓名等。登录界面的设置为数据的安全提供了一定的保障。网站的使用比较简单,能使使用者方便的使用。软件的不足之处也很多,例如数据操作还不是很完善,窗口界面太过单调,界面不够美观,有些功能还没有实现等等。六 课程设计心得、总结通过设计客户订购登记系统,从需求分析开始,逐步的进行概念设计、逻辑设计、物理设计以及实现等,掌握了数据库系统设计的整个流程。在设计过程中,首先将系统中的实体找出来,然后再建立系统的E-R图,这是概念结构设计的内容。在逻辑设计中,将E-R图转换成关系模式,这里涉及到对联系的处理。我们可以按照习惯将联系作为一个单独的关系模式,也可以将联系与n端对应的关系模式合并。该设计中,就采用了
30、这两种不同的方式。物理设计主要是完成数据库在实际物理设备上的存储结构和存取方法的选取。我选用了聚簇方法应用到订单和商品关系,这样,进行商品查询或订单查询时,就比较方便、也省去了对结果的再排序等麻烦。而对系统中其他关系的存取方法的选取还有待研究。由于对物理设计掌握的不够好,这里设计的也并不全面。最后的实现中,用jsp和SQL 实现了用户注册这个模块。通过与数据库连接,可以在程序中对数据库中的表直接操作。从而实现了将用户的注册信息插入数据库。当然,由于是第一次进行数据库的设计,这次课程设计中也存在一些不足,。这些都是需要改进的地方。总的来说,通过对系统的设计,我对数据库设计的处理过程、对数据的分析、对SQL语言的运用等都有了进一步的掌握和提高。参考文献:1.HeadFist Java中国电力出版社2.HeadFirst Servlet & JSP中国电力出版社3. JavaScript高级程序设计(第2版).(美)泽卡斯. 4.精通CSS 高级web标准解决方案(第二版)5.HeadFirst Html中国电力出版社课程设计评价课程设计教师评语及成绩 指导教师: 彭维平 日期: 2012年 月 日 30 / 30