搜索
您的当前位置:首页正文

重庆交通大学数据库结业报告

来源:爱够旅游网
重庆交通大学信息科学与工程学院 综合性设计性实验报告

班 级:姓名 学号:

实验项目名称:

实验项目性质:

实验所属课程:

实验室(中心):

指 导 教 师 :

实验完成时间: 物联网15xx班 gllh 银行数据库管理系统 综 合 性 《数据库技术》 语音楼801信息实验室 xx 20xx 年 xx 月 xx 日

教师评阅意见:

实验成绩: 签名: 年 月 日

一、 实验题目

银行数据库管理系统

二、实验要求

选取现实生活中需要使用数据库管理数据的应用场合,对具体需求进行分析,运用数据库设计理论,设计行之有效的数据库模式,并选用具体的DBMS进行实现。运用高级语言工具开发针对该数据库的简单应用系统,完成数据操作。

三、需求分析

本设计中银行数据库管理系统的设计用来管理银行中日常的运行和流程中主要涉及6个实体分别为银行,银行员工,客户,银行产品,存取款流水单,借贷流水单。

(1).数据库系统所能实现的功能

本数据库可实现对银行信息、客户信息、银行员工信息、银行产品信息、客户借贷款信息、客户存取款信息的输入、记录、管理、查看、修改、删除等功能。 3.数据库设计及数据库系统实现的工具

CodeBnameBnoBcityBareaBcount数据库设计具体如下:

Data TypeCharacters(10)Characters (5)Characters(10)Characters(10)IntegerLengthPrecisionM1051010XXXXXXXXXPDDomainName银行名银行号所在城市所属区域银行数量员工数量现金储备黄金储备XXXXXXXXBstaffcountIntegerBmoneyBgoldIntegerInteger

CodeSnameSnoSjob 表1银行信息属性表

Data TypeCharacters(10)Characters(10)Characters(10)DateIntegerCharacters (5)Characters (5)55LengthPrecision101010MXXXXXXXXPXDDomainName员工名员工号职位入职时间工作时间等级权限号权限名XXXXXXXXSentimeSrankBauthnoBauthoBwotimeInteger

表2员工信息属性表

Name客户号客户名年龄性别开户时间住址工作CodeCnoCnameCageCsexCaddCworkData TypeCharacters (10)Characters (10)IntegerCharacters (5)Characters (40)Characters (10)54010Length1010PrecisionMXXXXXXXPXDXXXXXXXDomainCopentimeDate

表3客户信息属性表

Name产品号产品名上市时间客户数量PnoPnamePpublictimeCodeData TypeCharacters (10)Characters (10)DateLength1010PrecisionMXXXXPXDXXXXDomain

PcustomernoInteger

表4银行产品信息表

Name日期贷款数还款数还款截止日期借贷流水号CodeDdataDinDpaybackDenddataDnoData TypeDateIntegerIntegerDateCharacters (10)10XXXLengthPrecisionMXPDXXXXXDomain

表5贷款信息属性表

Name日期入账金额出账金额余额存取流水号CodeWdataWcashinWcashWnoData TypeDateIntegerIntegerCharacters(10)LengthPrecisionMXPDXXXDomainWcashoutIntegerX10XXXX

表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)客户号char(10)银行信息银行名char(10)银行号char(5)所在城市char(10)所属区域char(10)银行数量int员工数量int现金储备int黄金储备intB have mena B got thingsbank have staffs员工信息员工名char(10)银行号char(5)员工号char(10)职位char(10)入职时间datetime工作时间int等级int权限号char(5)权限名char(5)

B have menman in banks客户信息客户号char(10)客户名char(10)年龄int性别char(5)开户时间datetime住址char(40)工作char(10)man got thingsR_CustomerAndProduct客户号char(10)产品号char(10)man got things银行产品产品号char(10)银行号char(5)产品名char(10)上市时间datetime客户数量int

贷款信息日期datetime贷款数int还款数int还款截止日期datetime借贷流水号char(10)客户号char(10)存取款信息日期datetime入账金额int出账金额int余额int存取流水号char(10)客户号char(10) 图2:pdm图

六、数据库实现

(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 getAllData(){

Connection conn=getConn();

String sql=\"select * from Bankinfo\"; PreparedStatement pst;

List bankinfos=new ArrayList(); 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 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 search(String key){

List bankinfos=new ArrayList(); Connection conn=getConn();

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 banks); /*

* 查询银行信息 */

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 i=students.iterator(); while(i.hasNext()){ }

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 students) {

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 students=dbOperate.getAllData(); dbOperate.delete(no); this.showAll();

List students=dbOperate.search(key); this.showInfo(students);

String id=Integer.toString(bno);

List student=dbOperate.search(id); this.showInfo(student); Bankinfo stu=new Bankinfo(); Scanner in=new Scanner(System.in); System.out.println(\"---更银行的名字---\"); String bname=in.next(); stu.setBname(bname);

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中连接数据库程序的编写也需要思考软件的需求问题,通过这次实验对数据库的认识更进一步,对以后的学习和职业生涯都有所帮助。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top