资源描述
《数据库原理及应用》课设报告
数据库课程设计报告
系 (院): 计算机科学学院
专业班级: 软工*****
姓 名: ****
学 号: 20******
指导教师: *****
设计时间: 2015.12.*********
设计地点: 4教机房
目录
一、课程设计目的 3
二、设计任务及要求 3
三、需求分析 3
四、总体设计 5
五、详细设计与实现 9
六、课程设计小结 18
七、指导老师意见: 19
一、课程设计目的
通过对图书管理系统的系统分析、系统设计、编码和调试等工作的实践,熟悉管理信息系统的开发过程、设计方法及相关编程技术,熟练掌握数据库设计的基本理论及方法。
二、设计任务及要求
要求完成一个具有一定实用价值的图书管理系统,主要任务包括:
在Microsoft SQL Server 2000/2005/2008环境下建立图书管理系统所使用的数据库,利用企业管理器或查询分析器建立各种数据库对象,包括:数据表、视图、约束、存储过程和触发器等;
掌握ADO.NET编程技术,对MS SQL Server数据库进行连接和操纵;
掌握使用C#语言开发一个数据库应用系统的基本方法和步骤,熟悉一些基础功能的实现方法,如:数据维护(插删改等操作),数据查询、浏览和Excel导出,统计与报表,用户登录和权限管理等。
了解C/S或B/S应用程序的多层体系结构及三层架构方案设计思想,了解迭代式开发,熟悉面向对象设计方法及其分析与设计过程,了解UML文档及其开发过程中的作用。
指导书说明:
(1)开发环境与目标:微软 C#、SQL Server,基于C/S结构的Windows应用程序。
(2)仅给出了部分功能的设计与实现,以说明面向对象分析与设计的一般方法以及关键编程技术,其它功能部分需要自己完成。
(3)为减少篇幅和降低阅读门槛,没有追求使用标准的UML设计文档和术语。
三、需求分析
1.开发背景
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
2. 系统准备
操作系统:Windows xp/7/8
数据库系统:SQL Server 2005/2008/2012
客户端开发工具:Eclipse KEPLER
知识准备
熟悉SQL Server 2005/2008/2012的使用;
熟悉Java语言及其数据库编程技术。
了解:迭代式开发过程、UML设计文档、设计模式;以及图书馆相关业务知识。
3.迭代式开发
迭代式开发(统一过程UP) 系统开发被组织成一系列固定的短期(一段为2-6周)小项目,称为迭代;每次迭代都产生可执行的系统。每次迭代都包括计划、需求、分析、设计、编码、测试等过程以及文档编写工作;第一次迭代考虑系统的核心功能,随后的迭代逐步扩展系统功能;每次迭代的成果(含需求、分析、设计、代码和文档等)均为下一次迭代的工作基础,直至满足最终需求。这种开发过程是基于面向对象方法的。
4. 系统分析
系统边界与约定
(1) 系统限定在实体书库的借阅和管理等业务范围;
(2) 不考虑图书馆的电子书库、订购、情报、人事管理等业务;
(3) 不考虑图书馆的跨区分布情况,如长江大学图书馆包括多个校区图书馆;
(4) 不考虑图书的通借通还,如长江大学读者可在湖北省高校任何一家图书馆借还图书;
(5) 不考虑珍藏图书的借阅业务;
(6) 暂不考虑与校园一卡通系统的外部接口。一卡通系统为外部系统(外部参与者),卡内记录有身份及相关信息,该系统负责身份验证工作。
(7) 期刊库和论文库的借阅和管理等业务可作为二期项目目标,视本系统使用情况而定。
需求概要
(1) 图书管理系统的基本功能需求包括:读者管理、图书管理、借阅管理、用户登录与 用户管理等;其它功能需求包括:读者查询与预约借书*、统计与报表*、数据备份*、书架
管理*、期刊管理*、期刊借阅*、论文管理*、论文借阅*等。(* 表示留待以后的迭代周期完成,下同)
(2) 相关领域概念:借书证(读者)、图书、借还书记录。
(3) 系统外部参与者:读者、借书证管理员、图书管理员、借阅管理员、系统管理员。 将图书馆工作人员划分为借书证管理、图书管理、借阅管理等三类人员;系统管理员负责数据库和软件系统管理,包括各类管理员用户的创建和授权、数据库备份等工作
5.功能概述
图书管理系统的一般用户具有以下功能:
(1) 登录验证
(2) 个人借阅信息查询
图书管理系统的管理员具有以下功能:
(1) 登录验证
(2) 图书管理:删除,修改,查询,添加图书信息
(3) 读者管理:删除,修改,查询,添加读者信息
(4) 读者类型管理:删除,修改,查询,添加读者的读者类型
(5) 浏览学生的借阅图书的情况
6.领域模型
领域概念小结
读者=读者号(借书证号)、姓名、性别、所在单位、电话、邮箱地址、办证日期、照片、借书证状态、已借书数量、密码、管理角色。(借书证状态:有效、挂失、注销)
读者类别=读者类别号、读者类别名称、可借书数量、可借书天数、可续借次数,罚款率,证件有效期。
图书=书号、书名、作者、出版社、出版日期、ISBN、分类号、语言、页数、单价、内容简介、图书封面、图书状态。(图书状态包括:在馆、借出、遗失、销毁、卖出)
借阅信息=借书顺序号、读者号、书号、借书操作员、借书日期、应还日期、续借次数、
还书操作员、还书日期,超期天数、应罚款金额、实际罚款金额。
领域模型
图 1 图书管理系统概念模型(V1)
重要提示:在领域模型建立后、以及数据库设计完成后,均应检查所有的用例文档(检查重点:事件流、前置条件和后置条件),检查两者的一致性,发现缺漏点及矛盾之处,并进行修正。
四、总体设计
4.1 数据库设计与实现
1. 操作表(tb_operator)
序号
字段名
数据类型
说明
1
id
int
id(主键)
2
name
varchar(12)
姓名
3
sex
varchar(2)
性别
4
age
int
年龄
4
identityCard
varchar(30)
身份证号
5
workdate
datetime
工作时间
6
tel
varchar(25)
电话
7
admin
bit
管理员权限
8
password
varchar(10)
密码
2. 读者信息表(tb_reader)
序号
字段名
数据类型
说明
1
name
varchar(10)
读者姓名
2
sex
varchar(2)
性别,男/女
3
age
int
年龄
4
identityCard
varchar (30)
身份证
5
date
datetime
日期
6
maxNum
int
最大借书量
7
tel
varchar(50)
电话
8
keepMoney
money
押金
9
zj
int
证件类型
10
zy
Int
11
ISBN
varchar (13)
国际书号
12
bztime
datetime
办证日期
3. 图书信息表(tb_bookInfo)
序号
字段名
数据类型
说明
1
ISBN
Varchar(13)
国际标准书号号【标识列,主键】
2
typeId
Int
Id
3
bookName
varchar(40)
书名
4
writer
varchar(21)
作者
5
translator
varchar(30)
翻译者
6
publisher
varchar(50)
出版社
7
date
smalldatetime
出版日期
8
Price
money
价格
4. 借阅信息表(tb_borrow)
序号
字段名
数据类型
说明
1
id
int
id【主键】
2
bookISBN
varchar(13)
国际书号
3
operatorId
int
操作者编号
4
readerISBN
varchar(13)
读者编号
5
isback
int
是否归还
6
borrowDate
DateTime
借书日期
7
backDate
DateTime
还书日期
5. 订书表(tb_order)
序号
字段名
数据类型
说明
1
ISBN
Varchar
国际书号【主键】
2
date
datetime
日期
3
number
int
数量
4
operater
Varchar(6)
操作员
5
checkAndAceept
int
是否接收
6
zk
float
5. 库存表(tb_stockpile)
序号
字段名
数据类型
说明
1
ISBN
varchar(13)
国际书号【主键】
2
Amount
int
数量
4.2 三层架构简介
采用三层体系结构,即表示层、业务逻辑层和数据访问层,如Error! Reference source not found.所示,图中箭头表示调用和依赖关系。
图 2 三层架构示意图
表示层(USL):也称UI,提供交互式界面,形式:JFrame或HTML Web界面。
业务逻辑层(BLL):实现业务功能,为表示层提供服务,形式:类库。
数据访问层(DAL):实现数据访问功能(如数据库、文件等数据的读取、保存和更新),为业务逻辑层提供服务,形式:类。com.yan. dal.DAO类提供了对SQL Server数据库的一般访问方法。
实体类(model):描述一个业务实体的类,也即应用系统所涉及的业务对象。对数据库来讲,每个数据表对应于一个实体类,数据表的每个字段对应于类的一个属性。
表示层、业务逻辑层、数据访问层都依赖于业务实体。各层之间数据的传递主要是实体对象,业务信息封装在实体对象中。
4.3 搭建三层架构解决方案
在Eclipse中创建新的Java项目,命名为LibraryMIS,包括4个包:com.yan.gui(Java窗口应用程序)、com.yan.dal(数据访问层),com.yan.model(实体类集合)、com.yan.bll(业务功能集合)。
4.4 类总体设计(迭代1)
实体类、数据访问层类、业务逻辑层类、表示层窗口类的初步设计,实体类、数据访问层、业务逻辑层的类设计
其中,实体类、数据访问和业务逻辑模块分别设置了一个抽象类(业务逻辑层为通用类),供模块中其他类继承和扩展。这有利于统一方法接口,便于不同层次之间的调用。
4.5 Model层实体类设计
在com.yan.model包中添加4个实体类:reader、operater、bookInfo、order、borrow、stockpile,分别对应4个数据库表。实体类的属性与数据库表结构保持一致(名称、类型);实体类应尽量简单,除了实体对象的复制与比较等方法外,不宜添加过多方法。
例 reader类
在com.yan.model包中添加新Java类reader.java。
添加Java类文件reader.java
表字段映射为实体类属性的基本方法如下:
private String Name;
public String getName() {
return Name;
}
public void setName(String Name) {
this. Name = Name;
}
4.6BLL层类设计
BLL层类的成员函数设计,可在实现用例的过程中去发现和完成,用例实现主要包括UI层窗口类、BLL层类、DAL层类等方法的设计与实现。
4.7部分重要代码
五、详细设计与实现
5.1部分代码实现
1.连接数据库
protected static String dbClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
protected static String dbUrl = "jdbc:sqlserver://localhost:1433;"
+ "DatabaseName=Library;SelectMethod=Cursor";
protected static String dbUser = "sa";
protected static String dbPwd = "9109005439enter";
protected static String second = null;
private static Connection conn = null;
private Dao() {
try {
if (conn == null) {
Class.forName(dbClassName).newInstance();
conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
}
else
return;
} catch (Exception ee) {
ee.printStackTrace();
}
}
2.对数据库的操作
示例:public static Operater check(String name, String password) {
int i = 0;
Operater operater=new Operater();
String sql = "select * from tb_operator where name='" + name
+ "' and password='" + password + "'and admin=1";
ResultSet rs = Dao.executeQuery(sql);
try {
while (rs.next()) {
String names = rs.getString(1);
operater.setId(rs.getString("id"));
operater.setName(rs.getString("name"));
operater.setGrade(rs.getString("admin"));
operater.setPassword(rs.getString("password"));
if (names != null) {
i = 1;
}
}
} catch (Exception e) {
e.printStackTrace();
}
Dao.close();
return operater;
}
3.model层
示例:bookInfo.java
package com.yan.model;
import java.sql.Date;
public class BookInfo {
private String ISBN;
private String typeid;
private String writer;
private String translator;
private String publisher;
private Date date;
private Double price;
private String bookname;
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getISBN() {
return ISBN;
}
public void setISBN(String isbn) {
ISBN = isbn;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String getTranslator() {
return translator;
}
public void setTranslator(String translator) {
this.translator = translator;
}
public String getTypeid() {
return typeid;
}
public void setTypeid(String typeid) {
this.typeid = typeid;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
}
4.bll层
示例1:主界面Library.java
package com.yan.bll;
import java.awt.BorderLayout;
import java.awt.Dimension;
//import java.awt.Dialog.ModalExclusionType;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import .URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JToolBar;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import com.yan.gui.BookLoginIFrame;
import java.awt.Font;
/**
* 主窗体
*
*/
public class Library extends JFrame {
private static final JDesktopPane DESKTOP_PANE = new JDesktopPane();
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager
.getSystemLookAndFeelClassName());
new BookLoginIFrame();//登录窗口
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void addIFame(JInternalFrame iframe) { // 添加子窗体的方法
DESKTOP_PANE.add(iframe);
}
public Library() {
super();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
setLocationByPlatform(true);
setSize(800, 600);
setTitle("图书馆管理系统");
JMenuBar menuBar = createMenu(); // 调用创建菜单栏的方法
setJMenuBar(menuBar);
final JLabel label = new JLabel();
label.setBounds(0, 0, 0, 0);
label.setIcon(null); // 窗体背景
DESKTOP_PANE.addComponentListener(new ComponentAdapter() {
public void componentResized(final ComponentEvent e) {
Dimension size = e.getComponent().getSize();
label.setSize(e.getComponent().getSize());
label.setText("<html><img width=" + size.width + " height="
+ size.height + " src='"
+ this.getClass().getResource("/backImg.jpg")
+ "'></html>");
}
});
DESKTOP_PANE.add(label,new Integer(Integer.MIN_VALUE));
getContentPane().add(DESKTOP_PANE);
}
/**
* 创建工具栏
*
* @return JToolBar
*/
private JMenuBar createMenu() { // 创建菜单栏的方法
JMenuBar menuBar = new JMenuBar();
JMenu bookOrderMenu = new JMenu(); // 初始化新书订购管理菜单
bookOrderMenu.setFont(new Font("华文行楷", Font.PLAIN, 14));
bookOrderMenu.setIcon(CreatecdIcon.add("xsdgcd.jpg"));
bookOrderMenu.add(MenuActions.NEWBOOK_ORDER);
bookOrderMenu.add(MenuActions.NEWBOOK_CHECK_ACCEPT);
JMenu baseMenu = new JMenu();// 初始化基础数据维护菜单
baseMenu.setFont(new Font("华文行楷", Font.PLAIN, 14));
baseMenu.setIcon(CreatecdIcon.add("jcsjcd.jpg"));
{
JMenu readerManagerMItem = new JMenu("读者信息管理");
readerManagerMItem.add(MenuActions.READER_ADD);
readerManagerMItem.add(MenuActions.READER_MODIFY);
JMenu bookTypeManageMItem = new JMenu("图书类别管理");
bookTypeManageMItem.add(MenuActions.BOOKTYPE_ADD);
bookTypeManageMItem.add(MenuActions.BOOKTYPE_MODIFY);
JMenu menu = new JMenu("图书信息管理");
menu.add(MenuActions.BOOK_ADD);
menu.add(MenuActions.BOOK_MODIFY);
baseMenu.add(readerManagerMItem);
baseMenu.add(bookTypeManageMItem);
baseMenu.add(menu);
baseMenu.addSeparator();
baseMenu.add(MenuActions.EXIT);
}
JMenu borrowManageMenu = new JMenu();
borrowManageMenu.setFont(new Font("华文行楷", Font.PLAIN, 14));
borrowManageMenu.setIcon(CreatecdIcon.add("jyglcd.jpg"));
borrowManageMenu.add(MenuActions.BORROW); // 借阅
borrowManageMenu.add(MenuActions.GIVE_BACK); // 归还
borrowManageMenu.add(MenuActions.BOOK_SEARCH); // 搜索
JMenu sysManageMenu = new JMenu(); // 系统维护
sysManageMenu.setFont(new Font("华文行楷", Font.PLAIN, 14));
sysManageMenu.setIcon(CreatecdIcon.add("jcwhcd.jpg"));
JMenu userManageMItem = new JMenu("用户管理"); // 用户管理
userManageMItem.add(MenuActions.USER_ADD);
userManageMItem.add(MenuActions.USER_MODIFY);
sysManageMenu.add(MenuActions.MODIFY_PASSWORD);
sysManageMenu.add(userManageMItem);
menuBar.add(baseMenu); // 添加基础数据维护菜单到菜单栏
menuBar.add(bookOrderMenu); // 添加新书订购管理菜单到菜单栏
menuBar.add(borrowManageMenu); // 添加借阅管理菜单到菜单栏
menuBar.add(sysManageMenu); // 添加系统维护菜单到菜单栏
return menuBar;
}
}
示例2:图书添加界面BookAddIFrame.java
5.2 UI层窗体设计与实现
除主窗体要考虑整体功能结构外,其它功能都是按用例逐一进行设计和实现的。部分用例的事件流相似且相关,可集中在同一个窗体内实现,如:借书证挂失、解除、补办与注销。
1.登陆界面
2.主界面
3.读者添加界面
4.图书添加界面
5.借阅图书界面
6.图书归还界面
六、课程设计小结
通过本次课程设计,让我对数据库有了更深的了解,本次课设要求用MVC三层架构,开始做起来有点陌生,经过不断的失败与调试,让我对MVC有了深刻的理解,对以后的学习有很大的帮助,同时也熟悉了项目的大致流程:需求----分析----设计----实现-----调试-----维护。本次课设使用的是Java语言,有一些功能没有实现比如:网上续借,本次任务虽然完成了,还是有许多不足之处,希望后期的努力让自己的作品更加优秀。在整个课程设计中,老师对我们耐心的指导与帮助才使我们可以顺利完成此次课程设计,衷心感谢老师。
七、指导老师意见:
成绩: 教师签名:
年 月 日
19 / 19
展开阅读全文