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 1、系统描述 银行 ATM 自动
2、取 款机 系统的描述: 当用户插入有效的银行卡时,可以对用户的银行卡种类做出判断(借记卡还是信用卡)。提示用户输入密码,如果用户连续密码输入错误次数达到 3 次,则吞卡,并给用户一个友好的提示信息。如果用户可以进入系统,则用户可以实现取款、查询、存款、转账等业务。待用户的每次交易结束时,系统提示是否打印详单。用户交易结束,系统提示退卡操作,让用户可以退出银行卡。如果用户忘记退出银行卡,则系统在交易结束后 120 秒以后,自动吞卡。用户交易过程中,每操作时间不能超过 90 秒,否则系统吞卡。操作时间,可以显示在界面上。 所有交易 中,用户存款,或者取款,转账等交易数据需要存储在数据库中。以方便用
3、户未来的查询和系统的管理与维护。 2、 参与者分析 用户: 取款、查询、存款、转账 。 银行卡:配对账户信息 账户:提供账户信息(如:余额,操作记录等) ATM 取款机:显示交易信息、账户信息 3、用例模型 3.1、用例图 图 1-系统用例图 2 3.2、用例详述 表 1-1 用户取款用例详述表 用例名称 取款 参与者 用户 简要说明 用户从银行卡中取钱,银行卡余额减少 前置条件 银行卡插卡后验证成功,用户进入系统 基本事件流 1.用户插 卡,输入密码并进入系统 2.系统显示取款等操作界面 3.点击取款 4.输入金额并点击确定 5.ATM 完成取款(用例结束) 扩展事件流 1a.密码输入错误时
4、点击“确定” 提示:密码输入不正确 4a.输入金额大于余额点击“确定” 提示:您的余额不足 表 1-2 用户存款用例详述表 用例名称 存款 参与者 用户 简要说明 用户往银行卡中存钱,银行卡余额增加 前置条件 银行卡插卡后验证成功,用户进入系统 基本事件流 1.用户插卡,输入密码并进入系统 2.系统显示存款等操作界面 3.点击存款 4.将存款放入存鈔口待系统显 示存款金额并点击确定 5.ATM 完成取款(用例结束) 扩展事件流 1a.密码输入错误时点击“确定” 提示:密码输入不正确 4a.若纸币有污损或者折叠时点击“确认” 弹出纸币并提示:存款总额 表 1-3 用户转账用例详述表 用例名称 转
5、账 参与者 用户 简要说明 用户从自己银行卡转账到其他用户的银行卡中,用户的银行卡余额减少 前置条件 银行卡插卡后验证成功,用户进入系统 基本事件流 1.用户插卡,输入密码并进入系统 2.系统显示转账等操作界面 3 3.点击转账 4.输入转账卡号和金额待系统显示转账信息 并点击确“确认”5.ATM 完成转账(用例结束) 扩展事件流 1a.密码输入错误时点击“确定” 提示:密码输入不正确 4a.若显示的转账信息不正确点击“返回” 进行修改点击“确认”重新转账 表 1-4 用户查询用例详述表 用例名称 查询 参与者 用户 简要说明 用户进入系统进行实时余额的查询 前置条件 银行卡插卡后验证成功,用
6、户进入系统 基本事件流 1.用户插卡,输入密码并进入系统 2.系统显示查询等操作界面 3.点击查询 4.系统显示账户实时余额 5.ATM 完成查询(用例结束) 扩展事件流 1a.密码输入错误时点击“确定” 提示:密码输入不正确 表 1-5 用户打印清单用例详述表 用例名称 打印清单 参与者 用户 简要说明 用户进行操作后,对账户资金往来进行打印查看 前置条件 银行卡插卡后验证成功,用户进入系统 基本事件流 1.用户插卡,输入密码并进入系统 2.系统显示转账等操作界面 3.点击并完成上述操作 4.点击打印清单并点击确“确认” 5.完成清单打印(用例结束) 扩展事件流 1a.密码输入错误时点击“确
7、定” 提示:密码输入不正确 4a.当 ATM 纸张消耗完毕时点击“确认” 提示 :纸张不足,暂时无法打印 4 4、 概念模型设计 图 2-ER 图 5、 逻辑模型设计和优化 账户( 账户 ID,用户名,卡号,密码,余额) 银行卡( 卡号 ,类型,账户 ID,密码,余额) 操作日志( 卡号 ,信息,操作类型,时间) 存款(存款金额,时 间,卡号) 取款(取款金额,时间,卡号) 转账(转账金额,时间,卡号) 6、物理设计和实施 6.1、创建表(字段、主键、索引、外键) /创建用户表 CREATE TABLE USERS ( CID char(11) NOT NULL , PASSWORD char
8、(6) NOT NULL , UNAME varchar(255) NOT NULL , SALARY decimal(12,2) NOT NULL DEFAULT 0 , 5 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)
9、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(TIM
10、E,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.Result
11、Set; import java.util.Scanner; 6 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 = “
12、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
13、(); String url = “jdbc:mysql:/localhost:3306/“+database; try Class.forName(“com.mysql.jdbc.Driver“); con = DriverManager.getConnection(url, “root“, “Ampson1995“); 7 catch (Exception e) e.printStackTrace(); this.ps=null; this.sql=null; /* * 获得查询结果 * return */ public ResultSet getRs() return rs; /* *
14、用于传入 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(); c
15、atch (SQLException e) e.printStackTrace(); return num; 8 /* * 用于上载查询 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);