目 录
一、需求分析 ............................................................................................................ 2
二、程序的主要功能 ................................................................................................ 2
三、系统总框架图 .................................................................................................... 2
四、程序类的说明 .................................................................. 错误!未定义书签。
五、模块分析 ............................................................................................................ 2
六、存在的不足与对策 ............................................................................................ 4
七、程序源代码 ........................................................................................................ 4
一、需求分析
在现代化的经济发展中,银行管理系统有着十分重要的作用。不论是什么阶层的群众都会有对银行有所需求,将积蓄存进银行是最安全有效的手法。所以这就需要银行有一个缜密的银行管理系统。
二、程序的主要功能
1、添加功能:
办理一个新卡,得到卡号,就能进行下一步操作。
2、存款功能:
能够存入金额,并选择是否显示余额。
3、取款功能:
能够取出你想要的金额,并选择是否显示余额。
4、显示功能:
显示存取款金额,并选择是否显示余额。
5、查找功能:
根据你办理的卡号,可以查询余额。
三、系统总框架图
图1 系统总框架图 四、1.Save
void Save()
{
FILE *fp;
if((fp = fopen("data","wb")) == NULL)
{
cout<<endl<<"无法打开文件"<<endl;
return;
2
}
for(int i = 0;i<1000;i++)
{
for(int j = 0;j<10;j++)
{
fwrite(&CardS[i][j],sizeof(CardS[i][j]),4,fp);
}
}
fclose(fp);
}
2.办理新卡
void NewCard()
{
int i = 0;
if(Card[i][0] == 0)
{
Card[i][0] = (i+1)*8+(i+1)*74+(i+1)*213+(i+1)*2432+(i+1)*35446+(i+1)*409432+123456789; cout<<endl<<"您的卡号为"<<Card[i][0]<<"。"<<endl<<endl;
cout<<"请选择您要办理的业务:"<<endl<<endl<<"输入1:存款; 输入2:取款; 输入3:返回; 输入4:退出:"<<endl;
Service2(0);
}
else
{
for(i = 0;Card[i][0] != 0;i++)
{}
if(i == M)
{
cout<<"对不起,无空储蓄卡。"<<endl;
Start();
}
else
{
Card[i][0] = (i+1)*8+(i+1)*74+(i+1)*213+(i+1)*2432+(i+1)*35446+(i+1)*409432+123456789; cout<<endl<<"您的卡号为"<<Card[i][0]<<"。"<<endl<<endl;
cout<<"请选择您要办理的业务:"<<endl<<endl<<"输入1:存款; 输入2:取款; 输入3:返回; 输入4:退出:"<<endl;
Service2(i);
}
}
}
3
五、模块分析
1. 添加模块
办理一个新的卡,得到卡号。
2. 存取模块
输入存入的金额,并选择是否显示余额。取款时输入所取金额,并选择是否显示余额。
3.保存模块
将存取信息保存,方便查询余额。
六、存在的不足与对策
由于设计者水平有限及时间等方面的原因,该系统的功能比较简单,还只能实现一些简单的存款,取款与查询余额功能。这些不足请老师多多谅解。今后设计者会更多的学习编程技巧,不断的提高程序设计水平。
七、程序源代码
详见附件
源代码可以免费加Q473479100获取。
4
第二篇:银行账户管理系统实验报告-打印版
课 程 设 计
课程名称: JAVA课程设计
设计题目: 银行账户管理系统
学 院: 信息工程与自动化
专 业: 计算机科学与技术
年 级: 20##级
学生姓名: ***
指导教师: ****
日 期: 20##.09
教 务 处 制
课 程 设 计 任 务 书
信息工程与自动化 学院 计算机科学与技术 专业 20## 年级
学生姓名: 陈明华
课程设计题目: 银行账户管理系统
课程设计主要内容:
本例是模拟银行账户的管理,开发一个银行个人账户管理系统银行账户管理系统。设计的指导思想是一切为使用者着想,界面要美观大方,操作尽量简单明了,而且作为一个实用的管理系统要有良好的容错性,在出现误操作时能尽量及时地给出警告,以便用户及时地改正。计算机的资源是受到限制的,设计出功能强大的软件,同时要尽可能地减少对系统资源的占用。鉴于本系统的特殊性,还需要本程序有良好的保密性。
设 计 指 导 教 师 (签字):
教学基层组织负责人(签字):
年 月 日
摘要
本例是模拟银行账户的管理,开发一个银行个人账户管理系统银行账户管理系统。设计的指导思想是一切为使用者着想,界面要美观大方,操作尽量简单明了,而且作为一个实用的管理系统要有良好的容错性,在出现误操作时能尽量及时地给出警告,以便用户及时地改正。计算机的资源是受到限制的,设计出功能强大的软件,同时要尽可能地减少对系统资源的占用。鉴于本系统的特殊性,还需要本程序有良好的保密性。
银行账户管理是银行业务流程中十分重要的且必备的环节,由于银行有大量数据需要处理,全部采用人工方式明显不现实:这不仅需要花费很高的成本,而且处理事务的效率和质量都存在很大的问题,出于这些问题的考虑,使用计算机来处理这类问题就成为一个相当理想的方案。利用计算机可以极大地降低成本,更重要的是可以几乎没有错误地高效地处理所有的事务,所以做一款基于银行账户管理方面的系统是十分必要的。
本次课程设计通过对《银行账户管理系统》中银行业务流程的基本实现以及用户环节的事务处理,旨在体验数据库设计和实现的基本过程中掌握数据库模式的设计、分析和实现方法,了解数据库应用系统软件开发的一般过程。
目录
一. 设计目的... 4
二. 设计内容... 4
三.概要设计... 5
1.功能模块图;... 5
2.各个模块详细的功能描述。... 5
四.详细设计... 7
1.功能函数的调用关系图... 7
2.重点设计及编码... 8
五.测试数据及运行结果... 14
1.正常测试数据和运行结果... 14
2.异常测试数据及运行结果... 17
六.调试情况,设计技巧及体会... 18
1.改进方案... 18
2.体会... 18
七.参考文献... 18
八.附录:... 18
一. 设计目的
银行账户管理是银行业务流程中十分重要的且必备的环节,由于银行有大量数据需要处理,全部采用人工方式明显不现实:这不仅需要花费很高的成本,而且处理事务的效率和质量都存在很大的问题,出于这些问题的考虑,使用计算机来处理这类问题就成为一个相当理想的方案。利用计算机可以极大地降低成本,更重要的是可以几乎没有错误地高效地处理所有的事务,所以做一款基于银行账户管理方面的系统是十分必要的。
本次课程设计通过对《银行账户管理系统》中银行业务流程的基本实现以及用户环节的事务处理,旨在体验数据库设计和实现的基本过程中掌握数据库模式的设计、分析和实现方法,了解数据库应用系统软件开发的一般过程。
二. 设计内容
分别完成银行业务功能、ATM功能和用户管理功能,并设计数据库以支持这些功能的实现,最后通过代码进行具体实现以及数据库链接。
所用数据库:SQL Server 2008
开发语言:Java
数据库设计:使用了六张表,分别为:管理员表(admin)、ATM机表(ATM)、ATM机出纳
表(ATMOutIn)、银行柜台出纳表(BankOutIn)、银行卡表(card)、用户
表(users)。
三个触发器,分别为:冻结用户账号操作(userstatus_update)、
ATM机存取款操作(ATMOutIn_insert)和
银行存取款操作(BankOutIn_insert)。
一个视图、一个虚表:用户操作查询
(allInfo(userId,cunquTime,cunquAddress,cunquMoney,cunq
uSummary,balanceMoney))。
银行业务功能:设置管理员账号,赋予管理员权限以实现开户、销户、存款、取款、查询、办卡和挂失功能。
ATM功能:ATM机连接系统数据库,实现用户登录、存(取)款以及用户查询功能。
用户管理:通过登录功能获得系统数据库中自己的用户信息,并有权限修改系统允许用
户修改的信息。
三.概要设计
1.功能模块图;
2.各个模块详细的功能描述。
银行业务功能:
Ø 管理员登录
在数据库中添加管理员数据,管理员可登录系统并有权限完成与用户相关所有操作。
Ø 开户
收集用户信息,为用户分配账号并通过程序在系统数据库中添加用户信息。
Ø 销户
根据账号在数据库中查找用户,确认用户身份信息后,管理员通过程序删除数据库中用户信息。
Ø 存款
根据卡号在数据库中查找用户,依据存入金额,管理员通过程序修改数据库中用户的金额信息。
Ø 取款
根据卡号在数据库中查找用户,通过密码确认用户,依据取出金额,经判断取出金额合法后(不大于余额),管理员通过程序修改数据库中用户的金额信息。
Ø 查询
以用户卡号、账号或身份证号之一为关键字,在数据库中查找用户,依据业务需求显示用户信息(开户人信息、用户近期操作记录)。
Ø 办卡
为用户账号绑定卡号,由管理员通过程序将卡号以及用户设置的密码存入系统数据库相应用户信息中。
Ø 挂失
根据账号在数据库中查找用户,用户提供登录密码确认用户身份信息后,管理员通过程序将数据库中用户卡状态信息由“使用”改为“冻结”。
ATM功能:
Ø 登录
ATM机依据用户卡号和密码在系统数据库中查询用户信息,在信息匹配的情况下进入用户操作界面。
Ø 存款
ATM机依据用户存入金额,通过程序修改数据库中用户的金额信息。
Ø 取款
ATM机依据取出金额, 通过对比本机余额和数据库中用户余额,若金额合法则通过程序修改数据库中用户的金额信息,否则弹出错误信息。
用户管理:
Ø 登录
依据用户账号和密码由管理员或ATM机在系统数据库中查询用户信息,在信息匹配的情况下用户获得用户管理权限。
Ø 查询个人信息
打印数据库中记录的用户个人信息。
Ø 修改个人信息
收集用户新信息,由管理员操作,修改数据库中用户拥有修改权限的相应数据。
Ø 查询近期操作
依据用户提供所要查询时间范围,由管理员或ATM机通过程序查询系统数据库中用户的操作记录。
四.详细设计
1.功能函数的调用关系图
2.重点设计及编码
数据库设计:
create database account
use account
create table users
(
userId varchar(10) not null, /*用户账号,主键*/
userName varchar(10) not null, /*用户名*/
userPassword varchar(10) not null, /*密码*/
idNo varchar(20) not null, /*身份证号码,唯一*/
userMoney numeric(10,2) default 0, /*总金额,不能小于零*/
userStatus varchar(4) check (userStatus='使用' or userStatus='冻结') default '使用', /*用户状态(使用,冻结),默认是使用中*/
userAddress varchar(30) not null, /*用户地址*/
startTime DateTime, /*开户时间,应该是开户时的系统时间,不应该人为输入*/
primary key(userId), /*设置主键*/
)
--用户的状态一旦变成冻结状态,那么卡也应该不能使用
create trigger userstatus_update
on users
after update
as
if update(userStatus)
begin
if (select userStatus from inserted) = '冻结'
update card set cardStatus = '冻结' where userId = (select userId from deleted)
if (select userStatus from inserted) = '使用'
update card set cardStatus = '使用' where userId = (select userId from deleted)
end
create table card
(
cardId varchar(20) primary key, /*卡号,主键*/
userId varchar(10) not null, /*用户账号,外键,参照users表的userId*/
cardPassword varchar(10) not null, /*卡密码*/
cardStatus varchar(5) check (cardStatus in ('使用','冻结','挂失')) default '使用', /*卡状态(使用,冻结,挂失),默认是使用*/
--cardMoney numeric(10,2) check(cardMoney >=0),
foreign key (userId) references users(userId)
on delete cascade /*当删除用户帐号时,他的卡号会及联删除*/
)
--管理员表
create table admin
(
adminId varchar(10) not null primary key, /*操作员号码,主键*/
adminName varchar(10) not null, /*操作员名字*/
adminPassword varchar(20) not null, /*操作员密码*/
BankAddress varchar(20) not null /*操作员所在银行地址*/
)
insert into admin values('001','沈万三','123','工商银行长安分行')
--创建一个ATM表,至少应该含有编号以及ATM机里的总金额
create table ATM
(ATMId varchar(10) primary key, /*ATM机ID*/
ATMMoney numeric(20,2) check (ATMMoney >=0), /*ATM机里的总钱数,不允许用户的取款数大于它的总钱数,所以它的总钱数不能小于*/
ATMAddress varchar(20) /*ATM机的地点*/
)
insert into ATM values('000', 10000, '长安区')
insert into ATM values('111', 50000, '长安区')
--用户ATM机存取款信息表
create table ATMOutIn
(
ATMId varchar(10), /*取款机号,外键,参照ATM表的ATMId*/
cardId varchar(20) not null, /*用户卡号,外键,参照card表的cardId*/
ATMTime DateTime, /*在ATM机存取款时间(应该是进行存取款时的系统时间*/
ATMCunQu numeric(10,2), /*ATM机存款金额*/
ATMSummary varchar(30), /*存取款摘要*/
balanceMoney numeric(10,2) default 0, /*经过操作后账号中的金额*/
foreign key(ATMId) references ATM(ATMId) on delete cascade,
foreign key(cardId) references card(cardId) on delete cascade
)
--创建一个触发器,当产生这一信息时,账号上的钱也会随之改动
create trigger ATMOutIn_insert
on ATMOutIn
after insert
as
declare @num_rows int
select @num_rows = @@rowcount
if @num_rows = 0 /*未插入成功*/
return
if @num_rows>0 /*数据插入成功*/
begin
update users set userMoney = userMoney + (select ATMCunQu from Inserted) where userId in (select userId from card c,inserted i where c.cardId = i.cardId)
update ATM set ATMMoney = ATMMoney + (select ATMCunQu from Inserted) where ATMId in (select ATMId from inserted) /*对应的atm机的总金额也会随之改变*/
declare @balanceMoney numeric(10,2) /*账号余额*/
select @balanceMoney = (select userMoney from users where userId in (select userId from card c,inserted i where c.cardId = i.cardId))
update ATMOutIn set balanceMoney = (@balanceMoney) where cardId in (select cardId from inserted) and atmtime in (select atmtime from inserted) /*完成了账号金额的修改,再将新的金额插入到信息表中,就是剩余的总余额了(注意修改的只是一个账号此次的操作*/
end
--用户银行存取款信息信息表
create table BankOutIn
(
adminId varchar(10) not null, /*操作员号码,外键,参照操作员表的adminId*/
cardId varchar(20) not null, /*用户卡号,外键,参照用户信息表*/
BankTime DateTime, /*银行存款时间*/
BankCunQu numeric(10,2), /*银行存款*/
BankSummary varchar(30),
balanceMoney numeric(10,2) default 0, /*经过操作后账号中的金额*/
foreign key (adminId) references admin(adminId) on delete cascade,
foreign key (cardId) references card(cardId) on delete cascade
)
--创建一个触发器,当插入这条数据时会自动修改users表里的金额信息
create trigger BankOutIn_insert
on BankOutIn
for insert
as
declare @num_rows int
select @num_rows = @@rowcount
if @num_rows = 0 /*未插入成功*/
return
if @num_rows>0 /*数据插入成功*/
begin
update users set userMoney = userMoney + (select BankCunQu from Inserted) where users.userId = (select userId from card c,inserted i where c.cardId = i.cardId)
declare @balanceMoney numeric(10,2)
select @balanceMoney = (select userMoney from users where userId = (select userId from card c,inserted i where c.cardId = i.cardId ))
update BankOutIn set balanceMoney = (@balanceMoney) where cardId = (select cardId from inserted) and banktime = (select banktime from inserted) /*完成了账号金额的修改,再将新的金额插入到信息表中,就是剩余的总余额了(要注意这个信息总额的唯一性)*/
end
--总信息可以用其它的表推出,建一个视图,一个虚表,来综合他们的信息
create view allInfo(userId,cunquTime,cunquAddress,cunquMoney,cunquSummary,balanceMoney)
as
select userId,bankTime,BankAddress,bankCunqu,bankSummary,balanceMoney
from bankoutin b,admin a,card c
where b.adminId = a.adminId and c.cardId = b.cardId
union
select userId,ATMTime, ATMAddress,ATMCunqu,ATMSummary,balanceMoney
from atmoutin a,card c,ATM atm
where c.cardId = a.cardId and a.atmid = atm.atmid
数据库链接:
package com.connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 定义一个数据库的连接及关闭资源的类
* @author Administrator
*
*/
publicclass DBConnection {
/**
* 创建数据库的链接
* @return 返回一个数据库的链接
*/
publicstatic Connection getConnection(){
Connection conn = null;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //加载数据库驱动
String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=account";
String username = "sa"; //数据库用户名
String password = "1126"; //数据库密码
conn = DriverManager.getConnection(url,username,password); //获得数据库的链接
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 关闭数据库资源
* @param obj 数据库打开的资源对象(在此处用Object,因为链接数据库是会打开多个资源)
*/
publicstaticvoid closeObject(Object obj){
if(obj != null){
if(obj instanceof ResultSet){
try {
((ResultSet) obj).close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(obj instanceof PreparedStatement){
try {
((PreparedStatement) obj).close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
-
if(obj instanceof Connection){
try {
((Connection) obj).close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
程序入口函数:
package com.main;
import com.frame.MainFrame;
publicclass Begin {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
newMainFrame();
}
}
五.测试数据及运行结果
1.正常测试数据和运行结果
管理员登录:
登录名:沈万三 登录密码:123
管理员操作:
1. 查询用户信息
2. 开户
ATM机操作
1. 登录
2. 查询
2.异常测试数据及运行结果
1.查询失败
3. ATM机存款失败
六.调试情况,设计技巧及体会
1.改进方案
本系统基本实现了银行账户管理的基本功能,不过在细节方面处理的不够完善,细化功能也做的不够好,此外,交互界面美工基本没做。对于此,在接下来的时间里我将对系统不断完善,尽力做到尽善尽美。
2.体会
在课程设计的两周中,我在数据库设计以及代码编写方面都遇到了不少问题,所幸在同学们的帮助下以及借助网络查找相应问题,总算按时完成了课程设计关于上机的任务。
在此过程中我通过数据库设计和实现的基本过程中掌握数据库模式的设计、分析和实现方法,了解数据库应用系统软件开发的一般过程,获益匪浅。
七.参考文献
《数据库系统原理与应用》 ——孟彩霞、乔平安、张荣 编著
八.附录:
源码见电子版