




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*************大学课程设计报告书课程名称:《数据库系统原理》课程设计题目:银行储蓄管理系统数据库设计系名:信息工程系专业班级:软件技术2101姓名:学号:指引教师:6课程设计任务书学生姓名:专业班级:软件技技术2101指引教师:工作单位:信息工程系设计题目:银行储蓄管理系统数据库设计初始条件:本课程设计目是通过实践使同窗们经历数据库设计开发全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学知识。结合详细开发案例,理解并初步掌握系统分析、系统设计、系统实行重要环节和环节以及软件文档制作能力。规定完毕重要任务:规定学生依照所学数据库原理与程序设计知识,可以针对一种小型银行储蓄管理系统,进行数据库系统需求分析,概念构造设计、逻辑构造设计、物理构造设计,数据录入及测试等,完毕题目规定功能。重要任务:顾客有如下需求:建立顾客;建立账户档案,建立账户索引;完毕寻常交易信息检索、进行存款、转账、取款等工作,对取款、转账等操作,必须进行身份验证。详细规定如下:1.存折信息数据涉及:存折基本信息涉及:户名、帐号、开户银行名称、开户日期、取款密码等。2.账户存取明细数据涉及:日期、摘要(现存、现支、转存、利息)、交易金额、余额、操作柜员编号。3.检索系统能依照户名、账号、交易日期、金额等进行查询。4.取款输入账号和密码后,能依照密码判断顾客与否合法,能判断取款金额与否超过了账户余额,如果取款金额合法,就对该账号余额信息进行更新。5、存款输入账号和存款金额后,能更新该账号余额。6、转账输入账号和密码后,能依照密码判断顾客与否合法,然后再输入对方转账账户,并判断对方转账账户与否合法,如果合法,再输入转账金额,并能判断转账金额与否超过了账户余额,如果转账金额合法,就对该账号余额信息以及对方账户余额信息进行更新。指导教师签字:凌伟6月25日系主任签字:6月25日目录需求分析项目概述产品描述产品功能顾客特点功能需求2.1需求2.2开户功能2.3取款功能2.4查询功能2.5修改功能2.6销户功能详细需求设计4.1概念构造设计数据库逻辑设计4.3数据表建立脚本设计概要总体设计1.1运营界面源代码心得体会参照文献需求分析1项目概述1.1产品描述本软件实现银行活期储蓄存款业务。整套软件由客户端程序和服务器端程序构成,客户端运营在面向个人业务银行柜台电脑上,银行职工输入有关信息并通过网络通讯向服务器发送祈求,并接受服务器端程序应答显示解决成果。服务器端解决客户端各种业务祈求。重要实现银行开户、销户、取款、存款、余额查询、转账、修改密码、等功能。1.2产品功能软件功能表模块功能阐明主菜单取款开户销户余额打印账户明细记录修改密码服务器端程序存款取款开户销户查询修改1.3.顾客特点本软件最后顾客重要面向银行柜台职工。这些操作人员教诲水平是高中及以上学历,通过计算机操作有关培训,可以纯熟使用和操作电脑2功能需求1.主菜单功能:输出主菜单(涉及开户、存款、取款、查询、转账、修改密码、销户、退出等功能)供操作顾客选取,然后依照顾客输入选取进入不同系统功能界面。2.开户功能:银行职工在客户端输入开户基本信息,通过网络传送数据,在服务器解决后显示服务器端解决成果。开户成功后打印存折有关信息。操作结束后返回主菜单界面。存折基本信息涉及:户名、帐号、开户人电话号码、开户日期等。3.存款功能:重要有存款金额与存款时间,存款账号等,供顾客来填写数据存款。5.取款功能:包括取款金额,取款时间等,供顾客操作。6.查询功能:提供查询功能,可以查询顾客余额,所得利息,与以往存取款记录。7.销户功能:能通过账号与身份等验证来销户,阐明销户日期,以便记录。8.修改功能:可以通过原密码来改新密码。银行存储系统银行存储系统开户存款取款查询销户修改总体构造图2.1开户功能引言:接受客户端传送数据,把数据保存到数据库中,通过服务器段解决后把解决成果传回给客户端。输入:接受客户端传送过来数据。解决:自动生成账户ID,长度5位,从1开始编号,局限性补0,例如00009、00103等。自动生成账户ID规定唯一。账户所有信息将保存数据库账户信息表中。依照开户金额生成一条账户存款记录。输出:把服务器端解决成果返回给客户端。解决成果涉及开户与否成功,如果开户成功解决成果中还包括生成存款记录。2.2存款功能引言:接受客户端传送数据,增长账户余额并修改有关数据库信息,把成果传回给客户端。输入解决输出1、客户端传送数据。1、验证账户ID与否存在。2、修改相应账户ID数据库信息。1、把服务器端解决成果返回给客户端。2.3取款功能引言:接受客户端传送数据,减少账户余额并修改有关数据库信息,把成果传回给客户端。输入解决输出1、客户端传送数据。1、验证账户ID与否存在。2、验证密码与否对的。3、验证余额与否足够。2、修改相应账户ID数据库信息。1、把服务器端解决成果返回给客户端。2.4查询功能引言:接受客户端传送数据,查找账户信息,把成果传回给客户端。输入解决输出1、客户端传送数据。1、验证账户ID与否存在。2、验证密码与否对的。3、查找相应账户信息。1、把服务器端解决成果返回给客户端。2.5修改功能引言:接受客户端传送数据,修改账户密码,把成果传回给客户端。输入解决输出1、客户端传送数据。1、验证账户ID与否存在。2、验证密码与否对的。3、查找相应账户并修改密码。1、把服务器端解决成果返回给客户端。2.6销户功能引言:接受客户端传送数据,通过公式计算客户账户利息,注销该客户账户。把成果传回给客户端。输入解决输出1、客户端传送数据。1、验证账户ID与否存在。2、验证密码与否对的。3、计算利息,详细公式如下:利息=存款额*存款天数*年利率/360需要注意是,账户中存款额在变化。4、修改相应账户ID数据库。5、删除顾客账户,不是做物理删除解决。1、把服务器端解决成果返回给客户端。3详细需求在进行向数据库文献提取数据时,规定数据记录对的,在往数据文献中添加数据时,规定输入数据对的,金额,身份证,账号等要需求设定字符数。依照软件和顾客组织特性等,某些需求放在下面各项中描述。4设计4.1概念构造设计4.1.1各个功能模块E-R图(1)开户E-R图开户开户姓名联系电话密码地址身份证号码(2)销户E-R图销户销户账号身份证电话(3)存款E-R图存款存款账号密码存款金额(4)取款E-R图取款取款账号密码取款金额(5)查询E-R图查询查询余额利息记录(6)修改E-R图修改修改账号原密码新密码身份证4.2数据库逻辑设计将数据库概念模型转换为关系模型开户(姓名、性别、密码、身份证号码、开户日期、联系电话)存款(账号、存款金额、存款时间)取款(账号、密码、群款金额、取款时间)修改密码(账号、身份证、原密码、新密码)查询(余额、利息、记录)销户(账号、身份证、开户时间、销户时间)4.3数据表建立脚本createtablekh( kh_name varchar(8), kh_ID int, kh_phone int, kh_adress varchar(20), kh_mm int);(开户表)createtablecunk( ck_kahao int, ck_mima int, ck_ckjin_e int);(存款表)createtablequkuan( qk_kahao int, qk_mima int, qk_qkjin_e int);(取款表)createtablechaxun( cx_yu_e int, cx_jilu varchar(50), cx_lixi int);(查询表)createtablexiugai( xg_name varchar(8), xg_ID int, xg_y_mima int, xg_x_mima int);(修改密码)createtablexiaohu( xh_name varchar(8), xh_ID int, xh_phone int);(销户表)概要设计1总体设计1.1运营界面1.主菜单界面1.1.2选取输入开户菜单界面图1.图存款界面图1.取款界面图1.1销户界面图1.1修改界面图1.1查询界面图2.源代码
#ifndef
_DB_STRUCT_H_
#define
_DB_STRUCT_H_
/typedef
struct
account_
{
char
acc_name[21];
//账户名
char
id_card[19];
//身份证号
char
pwd[7];
//账户密码
double
money;
//开账金额
char
date[20];
//开账时间
}T_ACCOUNT;
//存款数据
typedef
struct
saving_
{int
acc_id;
//账户ID
int
opter_id;
//操作员ID
double
money;
//存款金额
char
date[20];
//操作时间
}T_SAVING;
//取款数据
typedef
struct
withdraw_
{int
acc_id;
//账户ID
char
pwd[7];
//账户密码
int
opter_id;
//操作员ID
double
money;
//取款金额
char
date[20];
//操作时间
}T_WITHDRAW;
//查询数据
typedef
struct
query_
{int
acc_id;
//账户ID
char
pwd[7];
//账户密码
int
opter_id;
//操作员ID
char
date[20];
//操作时间
}T_QUERY;
//交易数据
typedef
struct
transfer_
{int
acc_id;
//账户ID
char
pwd[7];
//账户密码
int
acc_oid;
//对方账户ID
double
money;
//交易金额
int
opter_id;
//操作员ID
char
date[20];
//操作时间
}T_TRANSFER;
//更改密码数据
typedef
struct
changepwd_
{int
acc_id;
//账户ID
char
pwd[7];
//账户旧密码
char
newpwd[7];
//账户新密码
int
opter_id;
//操作员ID
char
date[20];
//操作时间
}T_CHANGEPWD;
//销户数据
typedef
struct
destroy_
{int
acc_id;
//账户ID
char
pwd[7];
//账户密码
int
opter_id;
//操作员ID
char
date[20];
//操作时间
}T_DESTROY;
//明细数据
typedef
struct
detail_
{int
acc_id;
//账户ID
char
s_date[11];
//起始日期
char
e_date[11];
//结束日期
}T_DETAIL;
//明细数据
typedef
struct
detailall_
{char
s_date[11];
//起始日期
char
e_date[11];
//结束日期
}T_DETAILALL;
//接受明细数据
typedef
struct
recv_detail_
{char
type_id[20];
//类型ID
char
opt_date[20];
//操作时间
char
d_money[20];
//解决金额
char
b_money[20];
//余额
char
staffer_id[20];
//操作员ID
char
oth_id[20];
//对方账户ID
}RECV_DETAIL;
//接受明细数据
typedef
struct
recv_detail_all_
{int
acc_id;
//账户ID
char
type_id[20];
//类型ID
char
opt_date[20];
//操作时间
double
d_money;
//解决金额
double
b_money;
//余额
int
staffer_id;
//操作员ID
int
oth_id;
//对方账户ID
}RECV_DETAIL_ALL;
//黑名单数据
typedef
struct
black__
{int
acc_id;
//账户ID
}T_BLACK;
#define
CLIENT_EXIT
0
#define
OP_ACC
1
#define
SAVING
2
#define
WITHDRAW
3
#define
QUBALANCE
4
#define
TRANSFER
5
#define
CHAPWD
6
#define
DESTROY
7
#define
DETAILNOTE
8
#define
DEDATA
9
#define
BLACKLIST
10
#define
NOTEALL
11
//包头
typedef
struct
pack_head
{int
len;
//数据长度
int
type;
//业务类型
}PACK_HEAD;
#endif
//_DB_STRUCT_H_
//
MySocket.cpp:
implementation
of
the
MySocket
class.
#include
"MySocket.h"
//
Construction/Destruction
MySocket::MySocket()
{InitSocket();
cout<<"init
constructor"<<endl;
}MySocket::~MySocket()
{}
int
MySocket::InitSocket(){
WORD
wVersionRequested;
WSADATA
wsaData;
int
err;
wVersionRequested
=
MAKEWORD(
2,
2
);
err
=
WSAStartup(
wVersionRequested,
&wsaData
);
if
(
err
!=
0
)
{
return
-1;
}
if
(
LOBYTE(
wsaData.wVersion
)
!=
2
||
HIBYTE(
wsaData.wVersion
)
!=
2
)
{
WSACleanup(
);
return
-1;
}
s
=
socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
return
s;
}
int
MySocket::ConnectSocket(const
char
*ip,int
port){
struct
sockaddr_in
addr_far;
addr_far.sin_family
=
AF_INET;
addr_far.sin_port
=
htons(port);
addr_far.sin_addr.s_addr
=
inet_addr(ip);
memset(addr_far.sin_zero,'\0',8);
cout<<"ip:"<<ip<<","<<"port:"<<port<<endl;
return
connect(s,(struct
sockaddr*)&addr_far,sizeof(struct
sockaddr_in));
}
void
MySocket::RecvTCPLoop(char*
n_data,
int
max_count)
{int
ret;
while
(max_count>0)
{ret=recv(s,n_data,max_count,0);
if
(ret==0)
{break;}
if
(ret>0)
{max_count-=ret;
if
(max_count
==
0)
break;
n_data+=
ret;
}}}
void
MySocket::SendTCPLoop(char*
n_data,
int
max_count)
{int
ret;
while
(max_count>0)
{ret=send(s,n_data,max_count,0);
if
(ret==0)
{break;
}
if
(ret>0)
{max_count-=ret;
if
(max_count
==
0)
break;
n_data+=
ret;
}}}
void
MySocket::Close(){
if(s!=NULL)closesocket(s);
}
#include
"Tools.h"
#pragma
comment(lib,"ws2_32.lib")
#include
<iostream>
using
namespace
std;
#include
"DBStruct.h"
#include
<conio.h>
int
main(){
MySocket
client
=
Tools::mys;
int
ret
=
client.ConnectSocket("127.0.0.1",7000);
if
(ret
==
SOCKET_ERROR)
//连接服务器
{cout
<<
"Can
not
connect
to
server!"
<<
endl;
return
-1;
}
cout<<"connect
to
server"<<endl;
//数据打包
T_ACCOUNT
t_acc;
strcpy(t_acc.acc_name,"wepull");
strcpy(t_acc.id_card,"19801012");
strcpy(t_acc.pwd,"600100");
t_acc.money=2030;
strcpy(t_acc.date,"-03-08");
PACK_HEAD
p_h;
p_h.len=sizeof(T_ACCOUNT);
p_h.type=OP_ACC;
const
int
max_count=sizeof(T_ACCOUNT)+sizeof(PACK_HEAD);
char
data[max_count];
memset(data,'\0',max_count);
Tools::Package((char*)&t_acc,p_h,data);
client.SendTCPLoop(data,max_count);//发送数据
int
ret_acc_id=0;
client.RecvTCPLoop((char*)&ret_acc_id,sizeof(int));//接受返回数据
cout<<"ret_acc_id:"<<ret_acc_id<<endl;
//client.Close();
//_getch();
//PACK_HEAD
p_h;
//exit
p_h.len=0;
p_h.type=CLIENT_EXIT;
client.SendTCPLoop((char
*)&p_h,sizeof(PACK_HEAD));
cout
<<
"Already
exit
the
system.Thank
you
for
using."
<<
endl;
exit(0);
return
0;
}
#include
<iostream>
using
namespace
std;
#include
"db.h"
#include
<Winsock2.h>
#pragma
comment(lib,"Ws2_32.lib")
//接受数据
int
RecvTCPLoop(SOCKET
s,
char*
n_data,
int
max_count)
{int
ret;
while
(max_count>0)
{ret=recv(s,n_data,max_count,0);
if
(ret==0)
{break;}
if
(ret>0)
{max_count-=ret;
if
(max_count
==
0)
break;
n_data+=
ret;
}}
return
ret;
}//发送数据
void
SendTCPLoop(SOCKET
s,
char*
n_data,
int
max_count)
{int
ret;
while
(max_count>0)
{ret=send(s,n_data,max_count,0);
if
(ret==0)
{break;}
if
(ret>0)
{max_count-=ret;
if
(max_count
==
0)
break;
n_data+=
ret;
}}}//线程解决函数
void
ThreadFun(LPVOID
param){
SOCKET
s_accept
=
*(SOCKET*)param;
//string
welcome("welcome
to
my
server!");
//send(c_s,welcome.c_str(),welcome.size(),0);
PACK_HEAD
p_h;
while
(1)
{int
ret
=
RecvTCPLoop(s_accept,(char*)&p_h,sizeof(PACK_HEAD));
//接受包头
if(ret==0)break;
cout<<ret<<'
'<<p_h.len<<'
'<<p_h.type<<endl;
//依照业务类型进行解决
if
(p_h.type==CLIENT_EXIT)
//客户端退出
{break;}
else
if
(p_h.type==OP_ACC)
//开账
{T_ACCOUNT
t_acc;
RecvTCPLoop(s_accept,(char*)&t_acc,p_h.len);
cout
<<
t_acc.acc_name
<<
'
'
<<
t_acc.id_card
<<'
'
<<
t_acc.pwd
<<
'
'
<<
t_acc.money
<<
'
'
<<
t_acc.date
<<
endl;
int
ret_val
=
1;
//ret_val=db_insert_account(t_acc.acc_name,t_acc.id_card,t_acc.pwd,t_acc.money,t_acc.date);
SendTCPLoop(s_accept,(char*)&ret_val,sizeof(int));
}}
cout<<"client
exit"<<endl;
closesocket(s_accept);
}
int
main(){
/**
*socket版本协商
*/
WORD
wVersionRequested;
WSADATA
wsaData;
int
err;
wVersionRequested
=
MAKEWORD(
2,
2
);
err
=
WSAStartup(
wVersionRequested,
&wsaData
);
if
(
err
!=
0
)
{
return
-1;
}
if
(
LOBYTE(
wsaData.wVersion
)
!=
2
||
HIBYTE(
wsaData.wVersion
)
!=
2
)
{
WSACleanup(
);
return
-1;
}/**
*socket初始化
*/
SOCKET
s
=
socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s==INVALID_SOCKET){
cout<<"sock
err!"<<endl;
return
-1;
}
struct
sockaddr_in
addr;
addr.sin_family
=
AF_INET;
addr.sin_addr.s_addr
=
INADDR_ANY;
addr.sin_port
=
htons(7000);
memset(addr.sin_zero,'\0',8);
//reuse
address
int
opt=1;
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(const
char*)opt,sizeof(opt));
int
ret
=
0;
ret
=
bind(s,(struct
sockaddr*)&addr,sizeof(sockaddr_in));
if(ret
==SOCKET_ERROR){
cout<<"bind
e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人保险理赔授权委托书
- 单次包车合同范本
- 口罩委托采购合同范本
- 兽药代理合同范本
- 世界水日活动策划方案
- 下学期幼儿教师的个人总结
- 推拿治疗学模拟题+答案
- 别墅建设合同范本
- 劳务合同补充合同范本
- 发光字安装合同范本
- 初中语文新人教部编版七年级下册第一单元核心素养教案(2025春详细版)
- 妇产科学(甲)知到智慧树章节测试课后答案2024年秋浙江大学
- 《小学数学“对分课堂”教学模式的实践探索》3900字(论文)
- 初中数学几何《旋转模型费马点》压轴题含答案解析
- 2025年中国中信集团招聘笔试参考题库含答案解析
- 江西省宜春市丰城市第九中学2024-2025学年九年级上学期第二次段考化学试卷(日新班)(无答案)
- 燃气公司安全生产实施方案
- 【MOOC】涂附磨具-河南工业大学 中国大学慕课MOOC答案
- 2024解析:第十四章内能的利用-基础练(解析版)
- 2024年湖南省初中学业水平考试·数学
- 机电设备安装与调试技术教案
评论
0/150
提交评论