数据库银行管理系统报告书样本_第1页
数据库银行管理系统报告书样本_第2页
数据库银行管理系统报告书样本_第3页
数据库银行管理系统报告书样本_第4页
数据库银行管理系统报告书样本_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*************大学课程设计报告书课程名称:《数据库系统原理》课程设计题目:银行储蓄管理系统数据库设计系名:信息工程系专业班级:软件技术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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论