班 级:姓名 学号:
实验项目名称:
实验项目性质:
实验所属课程:
实验室(中心):
指 导 教 师 :
实验完成时间: 物联网15xx班 gllh 银行数据库管理系统 综 合 性 《数据库技术》 语音楼801信息实验室 xx 20xx 年 xx 月 xx 日
教师评阅意见:
实验成绩: 签名: 年 月 日
一、 实验题目
银行数据库管理系统
二、实验要求
选取现实生活中需要使用数据库管理数据的应用场合,对具体需求进行分析,运用数据库设计理论,设计行之有效的数据库模式,并选用具体的DBMS进行实现。运用高级语言工具开发针对该数据库的简单应用系统,完成数据操作。
三、需求分析
本设计中银行数据库管理系统的设计用来管理银行中日常的运行和流程中主要涉及6个实体分别为银行,银行员工,客户,银行产品,存取款流水单,借贷流水单。
(1).数据库系统所能实现的功能
本数据库可实现对银行信息、客户信息、银行员工信息、银行产品信息、客户借贷款信息、客户存取款信息的输入、记录、管理、查看、修改、删除等功能。 3.数据库设计及数据库系统实现的工具
CodeBnameBnoBcityBareaBcount数据库设计具体如下:
Data TypeCharacters(10)Characters (5)Characters(10)Characters(10)IntegerLengthPrecisionM1051010XXXXXXXXXPDDomainName银行名银行号所在城市所属区域银行数量员工数量现金储备黄金储备X CodeSnameSnoSjob 表1银行信息属性表 Data TypeCharacters(10)Characters(10)Characters(10)DateIntegerCharacters (5)Characters (5)55LengthPrecision101010MXXXXXXXXPXDDomainName员工名员工号职位入职时间工作时间等级权限号权限名X 表2员工信息属性表 Name客户号客户名年龄性别开户时间住址工作CodeCnoCnameCageCsexCaddCworkData TypeCharacters (10)Characters (10)IntegerCharacters (5)Characters (40)Characters (10)54010Length1010PrecisionMXXXXXXXPXDXXXXXXXDomain 表3客户信息属性表 Name产品号产品名上市时间客户数量PnoPnamePpublictimeCodeData TypeCharacters (10)Characters (10)DateLength1010PrecisionMXXXXPXDXXXXDomain PcustomernoInteger 表4银行产品信息表 Name日期贷款数还款数还款截止日期借贷流水号CodeDdataDinDpaybackDenddataDnoData TypeDateIntegerIntegerDateCharacters (10)10XXXLengthPrecisionMXPDXXXXXDomain 表5贷款信息属性表 Name日期入账金额出账金额余额存取流水号CodeWdataWcashinWcashWnoData TypeDateIntegerIntegerCharacters(10)LengthPrecisionMXPDXXXDomain 表6借贷款信息属性表 (2).实现本数据库所用的工具: Eclipse KEPLER、PowerDesigner16、SQL SERVER 2012、ODBC、jre1.6等 四、概念模型 图1:cdm图 (1).通过Power Designer绘制相关的概念模型图,并说明本数据库系统中用到的所有抽象实体和关系的定义。 实体有:银行,银行员工,客户,银行产品,存取款流水单,借贷流水单,其中关系1:银行—客户关系为多对多,一个银行有多个客户,一个客户可以办理多银行业务;关系2:银行—银行员工关系为一对多,一个银行有多个员工,一个员工只对应一个银行;关系3:银行—银行产品为一对多关系,一个银行有 多个产品,一个产品只对应一个银行;关系4:客户—银行产品是多对多,一个客户可办理多个产品,一个银行产品可以被很多用户办理;关系5:客户—存款单关系为一对多,一个客户可以有多个存款单,一张存款单只对应一个客户;关系6:客户—借贷单关系为一对多,一个客户可以有多个借贷单,一张借贷单只对应一个客户; 五、物理模型 man in banksR_BankAndCustomer银行号char(5) B have menman in banks客户信息客户号char(10) 贷款信息日期datetime贷款数int还款数int还款截止日期datetime借贷流水号char(10) 六、数据库实现 (1).选用具体的DBMS,实现设计的物理模型。 本设计选用SQL SERVER2012,通过Power Designer导入数据库后为: 图3:数据库表结构 七、数据库系统实现 用Eclipse Kepler软件Java语言制作简单数据库应用程序。 (1).构造一个银行信息类 package edu.text; public class Bankinfo { private String Bname; private String Bno; private String Bcity; private String Barea; private int Bcount; private int Bstaffcount; private int Bmoney; private int Bgold; public String getBname() { } public void setBname(String bname) { } public String getBno() { } public void setBno(String bno) { } public String getBcity() { } return Bcity; Bno = bno; return Bno; Bname = bname; return Bname; } public void setBcity(String bcity) { } public String getBarea() { } public void setBarea(String barea) { } public int getBcount() { } public void setBcount(int bcount) { } public int getBstaffcount() { } public void setBstaffcount(int bstaffcount) { } public int getBmoney() { } public void setBmoney(int bmoney) { } public int getBgold() { } public void setBgold(int bgold) { } public String print(){ } String +\"\\"+this.Bcount+\"\\"+this.Bstaffcount+\"\\"+this.Bmoney+ \"\\"+this.Bgold; Bgold = bgold; return Bgold; Bmoney = bmoney; return Bmoney; Bstaffcount = bstaffcount; return Bstaffcount; Bcount = bcount; return Bcount; Barea = barea; return Barea; Bcity = bcity; Bankinfo=\"\\"+this.Bname+\"\\"+this.Bno+\"\\"+this.Bcity+\"\\"+this.Barea return Bankinfo; (2).在对银行信息表进行操作的Dboperate.java代码如下: package edu.text; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import edu.text.Bankinfo; public class Dboperate {/* * 数据库的连接 */ public Connection getConn() { } /* * 数据库的关闭 */ /* * 数据库插入记录 */ public int insert(Bankinfo ban) { Connection conn = getConn(); int i = 0; String sql = \"insert into String driverName = \"com.microsoft.sqlserver.jdbc.SQLServerDriver\"; String dbURL = \"jdbc:sqlserver://localhost:1433;DatabaseName=BANK\"; String userName = \"sa\"; String userPwd = \"631507030101\"; Connection conn = null; try { Class.forName(driverName); conn = (Connection) DriverManager.getConnection(dbURL, userName, userPwd);// 获取连接 } catch (ClassNotFoundException e) { e.printStackTrace(); e.printStackTrace(); } catch (SQLException e) { }// 指定连接类型 return conn; Bankinfo(Bname,Bno,Bcity,Barea,Bcount,Bstaffcount,Bmoney,Bgold) values(?,?,?,?,?,?,?,?)\"; PreparedStatement pst; try { pst = conn.prepareStatement(sql); } /* } pst.setString(1, ban.getBname()); pst.setString(2, ban.getBno()); pst.setString(3, ban.getBcity()); pst.setString(4, ban.getBarea()); pst.setInt(5, ban.getBcount()); pst.setInt(6, ban.getBstaffcount()); pst.setInt(7, ban.getBmoney()); pst.setInt(8, ban.getBgold()); i = pst.executeUpdate(); pst.close(); conn.close(); // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { return i; * 数据库得到所有记录 */ public List Connection conn=getConn(); String sql=\"select * from Bankinfo\"; PreparedStatement pst; List pst=(PreparedStatement)conn.prepareStatement(sql); ResultSet result=pst.executeQuery(); while(result.next()){ Bankinfo ban=new Bankinfo(); String bname=result.getString(1); ban.setBname(bname); String bno=result.getString(2); ban.setBno(bno); String bcity=result.getString(3); ban.setBcity(bcity); String barea=result.getString(4); ban.setBarea(barea); int bcount=result.getInt(5); ban.setBcount(bcount); int bstaffcount=result.getInt(6); ban.setBstaffcount(bstaffcount); int bmoney=result.getInt(7); ban.setBmoney(bmoney); } /* } int bgold=result.getInt(8); ban.setBgold(bgold); bankinfos.add(ban); } // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { return bankinfos; * 删除记录 */ public int delete(int Bno){ } /* * 更新数据库记录 */ Connection conn=getConn(); int i=0; String sql=\"delete from Bankinfo where Bno=\"+Bno; PreparedStatement pst; try { } return i; pst=conn.prepareStatement(sql); i=pst.executeUpdate(); pst.close(); conn.close(); // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { public void update(int Bno,Bankinfo ban){ Connection conn=getConn(); int i; String sql=\"update Bankinfo set Bname='\"+ban.getBname()+\"', Bno=\"+ban.getBno() +\+ban.getBcity() +\+ban.getBarea() +\+ban.getBcount() +\+ban.getBstaffcount() +\+ban.getBmoney() +\+ban.getBgold() +\" where Bno=\"+Bno; PreparedStatement pst; try { } pst=conn.prepareStatement(sql); i=pst.executeUpdate(); pst.close(); conn.close(); // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { } /* * 数据库的查询 */ public List List String sql=\"select * from Bankinfo where Bname like '%\"+key+\"%' or Bno like '%\"+key+\"%'\"; PreparedStatement pst; try { pst=(PreparedStatement)conn.prepareStatement(sql); ResultSet result=pst.executeQuery(); while(result.next()){ Bankinfo ban=new Bankinfo(); String bname=result.getString(1); ban.setBname(bname); String bno=result.getString(2); ban.setBno(bno); String bcity=result.getString(3); ban.setBcity(bcity); String barea=result.getString(4); ban.setBarea(barea); int bcount=result.getInt(5); ban.setBcount(bcount); int bstaffcount=result.getInt(6); ban.setBstaffcount(bstaffcount); int bmoney=result.getInt(7); ban.setBmoney(bmoney); int bgold=result.getInt(8); ban.setBgold(bgold); bankinfos.add(ban); } // TODO Auto-generated catch block } catch (SQLException e) { } } e.printStackTrace(); return bankinfos; } (3).对数据库操作接口Option.java package edu.text; import java.util.List; import edu.text.Bankinfo; /* * 系统的操作类 */ public interface Option { /* * 添加银行信息 */ public abstract void addStudent(String name,String name2,String name3,String name4,int kk1,int kk2,int kk3,int kk4); /* * 显示所有的银行信息 */ public abstract void showAll(); /* * 显示银行信息 */ public abstract void showInfo(List * 查询银行信息 */ public abstract void search(String key); /* * 更新银行信息 */ public abstract void update(int bno); /* * 删除银行信息 */ public abstract void delete(int bno); } (4).对接口的实现 package edu.text; import java.util.Iterator; import java.util.List; import java.util.Scanner; import edu.text.Bankinfo; import edu.text.Dboperate; public class Optionimp implements Option { System.out.println(\"\=========================================================} @Override ============\"); System.out.println(\"\========================================================= String msg=\"\银行名 \银行号\所在城市\所属区域\银行数量\员工数量\现金储备System.out.println(msg); Iterator Bankinfo stu=i.next(); if(stu!=null){ } String \"\\"+stu.getBgold(); ============\"); \黄金储备\"; Dboperate dbOperate=new Dboperate(); @Override public void addStudent(String bname,String bno,String bcity,String barea,int Bankinfo student=new Bankinfo(); student.setBname(bname); student.setBno(bno); student.setBarea(barea); student.setBstaffcount(bstaffcount); bcount,int bstaffcount,int bmoney,int bgold) { student.setBcity(bcity); student.setBcount(bcount); student.setBmoney(bmoney); dbOperate.insert(student); this.showAll(); } @Override public void showInfo(List student.setBgold(bgold); inf=\"\\"+stu.getBname()+\"\\"+stu.getBno()+\"\\"+stu.getBcity()+\"\\"+stu.getBarea() +stu.getBcount()+\"\\"+stu.getBstaffcount()+\"\\"+stu.getBmoney()+ System.out.println(inf); public void update(int bno) { } @Override public void search(String key) { } @Override public void delete(int no) { } @Override public void showAll() { // TODO Auto-generated method stub List List String id=Integer.toString(bno); List System.out.println(\"---更新银行的城市---\"); String bcity=in.next(); stu.setBcity(bcity); System.out.println(\"---更新银行的地区---\"); String barea=in.next(); stu.setBarea(barea); System.out.println(\"---更新银行的数量---\"); int bcount=in.nextInt(); stu.setBcount(bcount); System.out.println(\"---更新银行的银行员工---\"); int bstaffcount=in.nextInt(); stu.setBstaffcount(bstaffcount); System.out.println(\"---更新银行的cash---\"); int bmoney=in.nextInt(); stu.setBmoney(bmoney); System.out.println(\"---更新银行的金---\"); int bgold=in.nextInt(); stu.setBgold(bgold); dbOperate.update(bno, stu); this.showAll(); } } this.showInfo(students); (5).主操作程序Mainpage.java package edu.text; import java.util.Scanner; import edu.text.Optionimp; public class Mainpage { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); Optionimp adminOpt=new Optionimp(); while(true){ adminOpt.addStudent(bname,bno,bcity,barea,bcount,bstaffcount,bmoney,bgold); } else if(optionNum==2){ System.out.println(\"--执行银行信息查询操作--\"); System.out.println(\"模糊查询银行名的关键字:\"); System.out.println(\"--你要执行的功能--\"); System.out.println(\"1添加一个银行\"); System.out.println(\"2查询一个银行\"); System.out.println(\"3根据银行号更新银行基本信息\"); System.out.println(\"4根据银行号删除银行信息\"); System.out.println(\"00退出\"); int optionNum=in.nextInt(); if(optionNum==1){ System.out.println(\"--执行添加银行信息操作--\"); System.out.println(\"输入银行名\"); String bname=in.next(); System.out.println(\"输入银行号\"); String bno=in.next(); System.out.println(\"输入所在城市\"); String bcity=in.next(); System.out.println(\"输入所在区域\"); String barea=in.next(); System.out.println(\"输入银行数\"); int bcount=in.nextInt(); System.out.println(\"输入银行员工数\"); int bstaffcount=in.nextInt(); System.out.println(\"输入现金储备\"); int bmoney=in.nextInt(); System.out.println(\"输入黄金储备\"); int bgold=in.nextInt(); } } } } String key=in.next(); adminOpt.search(key); else if(optionNum==3){ } else if(optionNum==4){ } else if(optionNum==00){ System.out.println(\"-系统已退出-\"); System.exit(0); System.out.println(\"--执行删除银行信息操作--\"); System.out.println(\"输入银行号\"); int no=in.nextInt(); adminOpt.delete(no); System.out.println(\"--执行银行更新信息操作--\"); System.out.println(\"输入银行号\"); int no=in.nextInt(); adminOpt.update(no); }else { } System.out.println(\"--输入有误,请重新输入操作代码--\"); if(optionNum!=1&&optionNum!=2&&optionNum!=3&&optionNum!=4&&optionNum!=00) 八、测试结果及说明 (1).根据实验提供的测试数据,列出你所编写的程序的测试结果。 本测试只以本数作 据库中银行信息表进行操 图4:添加一个银行 图5:添加成功 图6:数据库端添加成功 九、实验体会 本实验通过题目设计,数据库逻辑功能设计,概念模型的建立到物理模型的建立到通过ODBC连接数据库DBMS SQL SERVER之后通过Java高级语言对数据库进行操作,具体可以实现增、删、改、查、排序等操作,在其中遇到的问题如下:首先在建立所选模型时遇到了依赖关系和实体之间的联系问题,其次在通过ODBC将PDM图 导出到SQLSERVER时的配置问题也需要花时间解决,之后在通过Eclipse中连接数据库程序的编写也需要思考软件的需求问题,通过这次实验对数据库的认识更进一步,对以后的学习和职业生涯都有所帮助。 因篇幅问题不能全部显示,请点此查看更多更全内容