网络数据库课程设计提交报告模板(面向对象)

网络数据库课程设计提交报告模板(面向对象)本文简介:通信与信息工程学院网络数据库课程设计班级:物联网工程姓名:学号:指导教师:设计时间:成绩:评语:通信与信息工程学院二〇一七年目录1、系统描述12、参与者分析13、用例模型13.1、用例图13.2、用例详述24、概念模型设计45、逻辑模型设计和优化46、物理设计和实施46.1、创建表(字段、主键、索引
网络数据库课程设计提交报告模板(面向对象)本文内容:
通信与信息工程学院
网络数据库课程设计
班
级:
物联网工程
姓
名:
学
号:
指导教师:
设计时间:
成
绩:
评
语:
通信与信息工程学院
二〇一七年
目
录
1、系统描述1
2、
参与者分析1
3、用例模型1
3.1、用例图1
3.2、用例详述2
4、
概念模型设计4
5、
逻辑模型设计和优化4
6、物理设计和实施4
6.1、创建表(字段、主键、索引、外键)4
6.2、创建视图5
7、
JDBC访问数据库5
7.1、访问表10
7.2、访问视图11
8、课程设计心得体会12
1、系统描述
银行ATM自动取款机系统的描述:当用户插入有效的银行卡时,可以对用户的银行卡种类做出判断(借记卡还是信用卡)。提示用户输入密码,如果用户连续密码输入错误次数达到3次,则吞卡,并给用户一个友好的提示信息。如果用户可以进入系统,则用户可以实现取款、查询、存款、转账等业务。待用户的每次交易结束时,系统提示是否打印详单。用户交易结束,系统提示退卡操作,让用户可以退出银行卡。如果用户忘记退出银行卡,则系统在交易结束后120秒以后,自动吞卡。用户交易过程中,每操作时间不能超过90秒,否则系统吞卡。操作时间,可以显示在界面上。
所有交易中,用户存款,或者取款,转账等交易数据需要存储在数据库中。以方便用户未来的查询和系统的管理与维护。
2、
参与者分析
用户:取款、查询、存款、转账。
银行卡:配对账户信息
账户:提供账户信息(如:余额,操作记录等)
ATM取款机:显示交易信息、账户信息
3、用例模型
3.1、用例图
图1-系统用例图
3.2、用例详述
表1-1用户取款用例详述表
用例名称
取款
参与者
用户
简要说明
用户从银行卡中取钱,银行卡余额减少
前置条件
银行卡插卡后验证成功,用户进入系统
基本事件流
1.
用户插卡,输入密码并进入系统
2.
系统显示取款等操作界面
3.
点击取款
4.
输入金额并点击确定
5.
ATM完成取款(用例结束)
扩展事件流
1a.密码输入错误时点击“确定”
提示:密码输入不正确
4a.输入金额大于余额点击“确定”
提示:您的余额不足
表1-2用户存款用例详述表
用例名称
存款
参与者
用户
简要说明
用户往银行卡中存钱,银行卡余额增加
前置条件
银行卡插卡后验证成功,用户进入系统
基本事件流
1.用户插卡,输入密码并进入系统
2.系统显示存款等操作界面
3.点击存款
4.将存款放入存鈔口待系统显示存款金额并点击确定
5.ATM完成取款(用例结束)
扩展事件流
1a.密码输入错误时点击“确定”
提示:密码输入不正确
4a.若纸币有污损或者折叠时点击“确认”
弹出纸币并提示:存款总额
表1-3用户转账用例详述表
用例名称
转账
参与者
用户
简要说明
用户从自己银行卡转账到其他用户的银行卡中,用户的银行卡余额减少
前置条件
银行卡插卡后验证成功,用户进入系统
基本事件流
1.用户插卡,输入密码并进入系统
2.系统显示转账等操作界面
3.点击转账
4.输入转账卡号和金额待系统显示转账信息并点击确“确认”5.ATM完成转账(用例结束)
扩展事件流
1a.密码输入错误时点击“确定”
提示:密码输入不正确
4a.若显示的转账信息不正确点击“返回”
进行修改点击“确认”重新转账
表1-4用户查询用例详述表
用例名称
查询
参与者
用户
简要说明
用户进入系统进行实时余额的查询
前置条件
银行卡插卡后验证成功,用户进入系统
基本事件流
1.用户插卡,输入密码并进入系统
2.系统显示查询等操作界面
3.点击查询
4.系统显示账户实时余额
5.ATM完成查询(用例结束)
扩展事件流
1a.密码输入错误时点击“确定”
提示:密码输入不正确
表1-5用户打印清单用例详述表
用例名称
打印清单
参与者
用户
简要说明
用户进行操作后,对账户资金往来进行打印查看
前置条件
银行卡插卡后验证成功,用户进入系统
基本事件流
1.用户插卡,输入密码并进入系统
2.系统显示转账等操作界面
3.点击并完成上述操作
4.点击打印清单并点击确“确认”
5.完成清单打印(用例结束)
扩展事件流
1a.密码输入错误时点击“确定”
提示:密码输入不正确
4a.当ATM纸张消耗完毕时点击“确认”
提示:纸张不足,暂时无法打印
4、
概念模型设计
图2-ER图
5、
逻辑模型设计和优化
账户(账户ID,用户名,卡号,密码,余额)
银行卡(卡号,类型,账户ID,密码,余额)
操作日志(卡号,信息,操作类型,时间)
存款(存款金额,时间,卡号)
取款(取款金额,时间,卡号)
转账(转账金额,时间,卡号)
6、物理设计和实施
6.1、创建表(字段、主键、索引、外键)
//创建用户表
CREATE
TABLE
`USERS`
(
`CID`
char(11)
NOT
NULL,`PASSWORD`
char(6)
NOT
NULL,`UNAME`
varchar(255)
NOT
NULL,`SALARY`
decimal(12,2)
NOT
NULL
DEFAULT
0,`TYPE`
enum(
credit,debit
)
NOT
NULL
DEFAULT
debit,PRIMARY
KEY
(`CID`)
)
;
//创建日志表
CREATE
TABLE
`LOGS`
(
`TIME`
datetime
NOT
NULL,`TYPE`
enum(
MONEYAC,CHECKAC,TRANSAC,LOGIN,LOGOUT,SWALLOW
)
NOT
NULL,`MESSAGE`
varchar(255)
NOT
NULL,`CID`
char(11)
NOT
NULL,FOREIGN
KEY
(`CID`)
REFERENCES
`users`
(`CID`)
6.2、创建视图
Create
view
all_legal_cards(CID,PASSWORD,TYPE)
as
select
CID,PASSWORD,TYPE
from
users;//创建合法银行卡视图
create
view
all_accounts(CID,UNAME,SALARY)
as
select
CID,UNAME,SALARY
from
users;
//创建账户查询视图
create
view
all_logs(TIME,USERNAME,CID,MESSAGE)
as
select
TIME,UNAME,logs.CID,MESSAGE
from
users,logs
where
users.CID=logs.CID
group
by
TIME;
//创建日志视图
7、
JDBC访问数据库
package
jdbc;
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.PreparedStatement;
import
java.sql.SQLException;
import
java.sql.ResultSet;
import
java.util.Scanner;
public
class
MyJDBC
{
private
Connection
con;
private
String
sql;
private
PreparedStatement
ps;
private
ResultSet
rs;
/**
database选择使用的数据库
user选择用户
passWord为密码
@param
database/
public
MyJDBC(String
database,String
user,String
passWord)
{
super();
String
url
=
“jdbc:mysql://localhost:3306/“+database;
try
{
Class.forName(“com.mysql.jdbc.Driver“);
con
=
DriverManager.getConnection(url,user,passWord);
}
catch
(Exception
e)
{
e.printStackTrace();
}
this.ps=null;
this.sql=null;
}
/**
database选择使用的数据库
以root用户登录
@param
database/
public
MyJDBC(String
database)
{
super();
String
url
=
“jdbc:mysql://localhost:3306/“+database;
try
{
Class.forName(“com.mysql.jdbc.Driver“);
con
=
DriverManager.getConnection(url,“root“,“Ampson1995“);
}
catch
(Exception
e)
{
e.printStackTrace();
}
this.ps=null;
this.sql=null;
}
/**
获得查询结果
@return/
public
ResultSet
getRs()
{
return
rs;
}
/**
用于传入SQL语句并在
setSql()中完善查询条件项目
在update(),check()上载执行
@param
sql/
public
void
modifySQL(String
sql){
this.sql=sql;
try
{
this.ps=con.prepareStatement(sql);
}
catch
(SQLException
e)
{
e.printStackTrace();
}
}
/**
用于上载非查询SQL语句
@return/
public
int
update(){
int
num=0;
try
{
num=this.ps.executeUpdate();
}
catch
(SQLException
e)
{
e.printStackTrace();
}
return
num;
}
/**
用于上载查询SQL语句/
public
void
check(){
try
{
this.rs=this.ps.executeQuery();
}
catch
(SQLException
e)
{
e.printStackTrace();
}
}
/**
直接打印查询结果/
public
void
showResult(){
boolean
tag=true;
try
{
while(rs.next()){
tag=false;
for(int
i=1;;i++){
try{
System.out.print(rs.getObject(i)+““);
}catch(SQLException
ex){
System.out.println(““);
break;
}
}
}
}catch
(SQLException
e)
{
e.printStackTrace();
}
if(tag)
System.out.println(“Empty“);
}
/**
完善SQL语句
@param
index
@param
o/
public
void
setSQL(int
index,Object
o){
try
{
ps.setObject(index,o);
}
catch
(SQLException
e)
{
e.printStackTrace();
}
}
/**
查询一个表
@param
table/
public
void
visitALL(String
table){
Scanner
scanner
=
new
Scanner(table);
String
str
=
scanner.next();
modifySQL(“select
from
“+str);
check();
}
/**
查询一个表结构
@param
table/
public
void
desc(String
table){
Scanner
scanner
=
new
Scanner(table);
String
str
=
scanner.next();
modifySQL(“desc
“+str);
check();
scanner.close();
}
public
void
close(){
try
{
if
(rs
==
null
}
}
catch
(SQLException
e)
{
e.printStackTrace();
}
try
{
if
(ps
==
null
}
}
catch
(SQLException
e)
{
e.printStackTrace();
}
try
{
if
(con
==
null
}
}
catch
(SQLException
e)
{
e.printStackTrace();
}
}
7.1、访问表
public
static
void
main(String[]
args)
{
MyJDBC
db
=
new
MyJDBC(“atm“);
db.desc(“users“);
ResultSet
rs
=
db.getRs();
try
{
while(rs.next()){
System.out.print(rs.getObject(1)+““);
}
}
catch
(SQLException
e)
{
e.printStackTrace();
}finally{
System.out.println(““);
}
db.visitALL(“users“);
db.showResult();
}
}
7.2、访问视图
public
static
void
main(String[]
args)
{
MyJDBC
db
=
new
MyJDBC(“atm“);
db.desc(“all_logs“);
ResultSet
rs
=
db.getRs();
try
{
while(rs.next()){
System.out.print(rs.getObject(1)+““);
}
}
catch
(SQLException
e)
{
e.printStackTrace();
}finally{
System.out.println(““);
}
db.visitALL(“all_logs“);
db.showResult();
}
}
8、课程设计心得体会
通过为期近一周的课程设计,我们对数据库系统概论这门课程有了更深一步的认识。这门课与我们的专业的学习息息相关。我们也更加明白,要学好这门课程,仅仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。在这次课程设计中,我们对JAVA也进行再一次的回顾,对基础知识有了一定的温习,同时也知道了自己在知识方面的许多细节错误和漏洞。在请教老师和同学时,获益匪浅。
在刚开始选课题的时候,我们对题目的进行讨论分析,综合难易性和手头上已拥有的资源决定选择银行ATM自动取款机系统。在调试程序中我们遇到了不少困难,甚至于程序崩溃,在一次次克服困难的过程中我们不断进步着,收获着。
另外,我觉得值得一提的是我们每一个人的团队精神,如果没有我们的齐心协力,单靠一个人的力量,可能我们根本不可能在如此短的时间之内完成这次的课程设计,这一周的合作让我们之间更加默契,也更让我深刻体会了团结就是力量这句话。只有互相之间默契融洽的配合才能换来最终完美的结果。
虽然课程设计结束了,但是通过此次设计我们获得的知识却是永远存在的。通过本次课程设计我们明白了书本上的理论性的东西与在实际应用中的还是有一定的出入,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决问题的过程中你会发现自己在飞速的提升。有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。通过这次课程设计我们也发现了自身以及彼此存在的不足之处,在不断的摸索中进行学习,更具挑战性,这也激发了我们今后努力学习的兴趣,我想这将对我们以后的学习产生积极的影响。
12
