数据库银行管理系统报告书

合集下载

银行管理系统设计报告样板

银行管理系统设计报告样板

银行管理系统设计报告样板一、引言银行作为金融机构,在现代经济社会中扮演着重要的角色。

为了提高银行的运营效率和服务质量,开发一个高效、安全的银行管理系统具有重要意义。

本设计报告旨在对银行管理系统进行设计,并提供详细的功能需求和系统设计方案。

二、功能需求1.客户管理:包括客户信息的录入、修改、查询和删除,客户分类管理,以及客户关系管理等功能。

2.账户管理:包括账户的开户、销户、查询、修改、冻结和解冻等功能。

3.存款管理:支持定期存款、活期存款和整存整取等多种存款方式,并提供存款、取款、存款利息计算等功能。

4.贷款管理:支持个人贷款和企业贷款,包括贷款申请、审批、放款和还款等功能。

5.资金调拨:支持资金的转移、划账和转账功能,确保账户之间的资金流转安全可靠。

6.对账管理:对账系统能够自动对账,及时发现错误和异常交易,并提供异常交易处理功能。

7.报表生成与分析:能够根据需求生成各类报表,并提供数据分析功能,为银行决策提供参考。

8.安全管理:包括用户权限管理、数据备份和恢复、系统日志管理等功能,确保系统的安全性和稳定性。

三、系统设计方案为了满足上述功能需求,我们将采用分层架构进行系统设计,主要分为以下几个层次:1.用户界面层:提供给用户直观友好的界面,包括图形化界面和命令行界面。

用户界面层将与业务逻辑层进行交互,接收用户输入,并将结果展示给用户。

2.业务逻辑层:负责处理用户请求,调用相应的服务层进行业务处理。

该层将实现客户管理、账户管理、存款管理、贷款管理等各部分的业务逻辑,并对请求进行相应的验证和处理。

3.服务层:封装底层的数据存取和业务逻辑,暴露接口供业务逻辑层调用。

服务层将提供客户管理服务、账户管理服务、存款管理服务、贷款管理服务等。

4.数据访问层:负责与数据库进行交互,实现数据的读写。

将提供客户数据、账户数据、存款数据、贷款数据等访问接口。

四、系统流程1.用户通过用户界面层发送请求,请求被业务逻辑层接收。

数据库课程设计报告-银行储蓄管理系统数据库设计[2018年整理]

数据库课程设计报告-银行储蓄管理系统数据库设计[2018年整理]

数据库原理及应用课程设计报告组号:小组成员:学院:专业班级:指导老师:2017/1/10目录第1章概述 (1)1.1设计题目: (1)1.2要求完成的主要任务: (1)第2章需求分析 (6)2.1定义 (6)2.2需求规格说明概览 (6)2.3产品的一般性描述 (7)2.4产品功能 (7)2.5用户特征 (7)2.6功能划分 (7)2.7用户界面 (8)2.8可维护性 (9)2.9可理解性 (9)2.10可移植性 (9)第3章数据库表结构图 (9)3.1实体联系图 (10)3.2程序流程图 (10)第4章功能与实现 (11)4.1客户端登录功能 (11)4.2客户端主界面功能 (12)4.3客户端开户功能 (12)4.4客户端存款功能 (13)4.5客户端取款功能 (13)4.6客户端转账功能 (14)4.7客户端余额查询功能 (14)4.8客户端修改密码功能 (14)4.9客户端销户功能 (15)4.10服务器端用户注册功能 (15)4.11服务器端修改用户登密码功能 (15)第5章实现及测试 (16)5.1系统开发环境 (16)5.2主要功能模块的实现及测试 (16)5.2.1数据表的建立 (16)5.2.2数据库连接与数据提供 (16)第6章总结 (17)第7章参考文献 (17)第1章概述本软件实现银行的活期储蓄存款业务。

整套软件由客户端程序和服务器端程序构成,客户端运行在面向个人业务的银行柜台的电脑上,银行职员输入相关信息并通过网络通讯向服务器发送请求,并接受服务器端程序的应答显示处理的结果。

服务器端处理客户端的各种业务请求。

主要实现银行开户、销户、取款、存款、余额查询、转账、修改密码、打印账户明细记录等功能。

1.1 设计题目:题目:银行储蓄管理系统数据库设计本课程的设计的目的是通过实践使同学们经历数据库设计开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。

结合具体的开发案例,理解并初步掌握系统分析、系统设计、系统实施的主要环节和步骤以及软件文档的制作能力。

银行信贷管理系统数据库设计说明书v

银行信贷管理系统数据库设计说明书v

银行信贷管理系统数据库设计说明书vThe pony was revised in January 2021编写:武刘强日期:2013-12-08银行信贷管理系统数据库设计说明书变更记录目录目录 (4)1 引言 (6)预期的读者 (6)数据库 (6)目的和作用 (6)2 数据字典设计 (6)3 数据库设计 (7)系统物理结构设计 (7)表设计 (9)客户信息表 dk_kh (9)贷款申请表 dk_sq (11)用户信息表 t_person (13)单位信息表 t_dw (14)资产管理表 t_zcgl (15)贷款分户表 t_dkfh (16)部门信息表 t_depart (18)系统角色表 t_role (19)贷款还款表 t_dkhk (19)贷款利息表 t_dklx (20)表之间的关联设计 (22)存储过程设计 (22)触发器设计 (23)Job设计 (23)1引言1.1预期的读者1.项目经理2.客户项目经理3.系统开发人员4.系统测试人员1.2数据库所采用的数据库管理系统是Oracle v10中文简体版1.3目的和作用将数据分析的结果进一步整理,形成最终的计算机模型,以便开发人员建立物理数据库。

2数据字典设计数据字典的主要目的是提供查阅对不了解的条目的解释。

在数据字典中记录数据元素的下列信息:一般信息(名字,别名,描述等),定义(数据类型,长度,结构等),使用特点(值的范围,使用频率,使用方式—输入/输出/本地,条件值等),控制信息(来源,用户,使用它的程序,改变权等),分组信息(父结构,从属结构,物理位置—记录、文件和数据库等)。

下面的例子是通过卡片来描述数据字典:式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。

本节主要将前一阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构,完成逻辑结构设计。

[14-19](1)部门实体拥有部门编号、名称、电话、地址、职能和负责人等属性。

XXXX银行业务系统数据库安全建设方案

XXXX银行业务系统数据库安全建设方案

3
建立快速有效的恢复机制,确保在发生故障时能 够及时恢复数据库。
数据库安全实施步骤
3
制定详细实施计划
确定实施目标
明确数据库安全建设的具体目标和期望效果。
评估现有环境
对银行现有业务系统的数据库进行全面评估,了解数据库的类型 、版本、配置等信息。
制定实施计划
根据评估结果,制定详细的数据库安全实施计划,包括实施时间 、人员分工、资源准备等。
审计策略
配置数据库审计策略,记录对数 据库的所有操作,以便事后追踪 和分析。
加密策略
对敏感数据进行加密存储和传输 ,确保数据在传输和存储过程中 的安全性。
测试与验证数据库安全性
功能测试
测试数据库安全设备的各项功能是否 正常工作。
性能测试
测试数据库安全设备对业务系统的性 能影响,确保不会因部署安全设备而 导致业务性能下降。
对数据库的操作进行严格的 审计和监控,确保操作的合 规性和安全性。
数据库安全事件应急响应
建立完善的数据库安全事件应急 响应机制,包括应急响应流程、 应急响应团队、应急响应资源等 。
定期进行应急响应演练,提高应 急响应能力和效率。
对数据库安全事件进行分类和定 级,明确不同事件的应急响应措 施。
及时总结和分享应急响应经验和 教训,不断完善应急响应机制。
采用先进的数据库安 全防护技术,包括数 据库防火墙、数据加 密、数据脱敏等,提 高数据库系统的安全 防护能力。
建立数据库安全监控 平台,实时监控数据 库系统的安全状态, 及时发现和处理安全 事件,提高应急响应 能力。
加强数据库管理人员 的安全培训和技能提 升,提高管理人员的 安全意识和操作技能 水平,降低人为操作 风险。

银行管理系统数据库设计需求分析

银行管理系统数据库设计需求分析

银行管理系统数据库设计需求分析1. 引言银行作为社会经济中极为重要的金融机构,其管理系统的设计和实施至关重要。

数据库作为支撑银行管理系统的核心技术之一,承担着存储、管理和处理海量数据的重任。

因此,本文将对银行管理系统数据库设计的需求进行深入分析,以保障系统的高效性、安全性和可扩展性。

2. 需求分析2.1 数据存储需求银行管理系统面向众多客户,包括个人和企业用户。

因此,数据库需能够存储大量的客户信息、账户信息、交易记录等数据。

同时,数据存储应具备高度的可靠性和稳定性,以确保数据不丢失并能随时访问。

2.2 数据安全需求银行管理系统涉及客户的财务信息,数据安全至关重要。

数据库应具备强大的安全性能,采用加密技术保护数据的机密性,设立权限控制机制限制用户访问权限,确保数据在传输和存储过程中不被非法窃取或篡改。

2.3 数据处理需求银行管理系统的核心功能包括账户管理、交易处理、风险评估等,数据库需能够支持这些功能的高效执行。

数据处理应具备高性能和高并发处理能力,能够快速响应用户的请求并保障系统的稳定运行。

2.4 数据可扩展性需求随着银行业务的不断发展壮大,管理系统的数据量和功能需求也会不断增加。

因此,数据库需具备良好的可扩展性,能够方便地进行扩展和升级,以适应未来业务发展的需求变化。

3. 总结银行管理系统数据库设计需求分析是确保系统正常运行和发展的重要一环。

通过对数据存储、安全、处理和可扩展性等方面的分析,可以为系统设计和实施提供有力的指导,保障银行业务的顺利进行和客户信息的安全保障。

在未来的系统开发过程中,需将这些设计需求充分考虑,确保系统的高效性和稳定性。

数据库课程设计 银行储蓄管理系统

数据库课程设计 银行储蓄管理系统

《数据库系统概论》课程设计报告设计题目:银行储蓄管理系统姓名:学号:班级:设计起止时间:需求分析:在对软件工程相关知识学习之后,我们对设计软件有了基本的认识和一些应用技能。

在数据库的课程设计中,我们计划做一个小型的银行储蓄管理系统,包括了基本的存取转,和管理员对日常工作的管理功能。

功能设计:(1).客户:包括存款,取款,转账,查询余额,查看流水,密码修改功能(2).管理员:新增用户,删除用户,查看用户,员工绩效,VIP用户判别,储备金预警分析。

3.功能流程图:银行管理系统登陆管理员客户销户查看员工绩效VIP判别资金储备金判别开户存款取款转账余额显示查看流水修改密码详细设计:1.E-R图模型operatecustombankstaffCphoneCtimeCpassCRmoneyCnameCidBidSphoneSnameSidSpassSItimeBname BmoneyBid1112.根据E-R 图设计关系表 (1).银行信息表(bank )字段名 字段类型及长度 允许空 主键说明 Bid nchar (9) no PK 银行号 Bname nchar (20) no银行名 Bmoney numeric (20,3) no 银行余额(2).客户信息表(custom )字段名 字段类型及长度 允许空主键说明 Cid nchar (9) noPK 客户ID Cname nchar (10) no 客户姓名 Cpass nchar (10) no 密码 Ctime nchar (20) no注册时间Bid nchar (9) no 所在银行行号 外码(Bank (Bid )) Crmoney numeric (10,3) no账户余额 Cphone nchar (11) no 客户电话 (3).员工(管理员)表(staff ) 字段名 字段类型及长度 允许空主键 说明 Sid nchar (9) noPK 员工ID Sname nchar (10) no 员工姓名 Spass nchar (10) no 登陆密码 SItime nchar (20) no入行时间Sphone nchar(11) no 联系电话(4).流水信息表字段名字段类型及长度允许空主键说明Oid nchar(9) no PK 流水号Cid nchar(9) no 客户ID 外码(Custom(Cid))Bid nchar(9) no 银行ID 外码(Bank(Bid))Sid nchar(9) no 员工ID 外码(Staff(Sid))Otype smallint no 操作类型Otime nchar(20) no 操作时间Omoney numeric(10,3) yes 交易金额OBmoney numeric(10,3) yes 上次余额OAmoney numeric(10,3) yes 账户余额三个实体:bank,staff,custom一个联系:operate关系图:SQL语句:/*建表*/create table Bank(Bid nchar(9) primary key,Bname nchar(20) not null,Bmoney numeric(20,3) not null)create table Custom( Cid nchar(9) not null,Cname nchar(10) not null,Cpass nchar(10) not null,Ctype smallint not null,Ctime nchar(20) not null,Ccode nchar(18) not null,Bid nchar(9) not null,Crmoney numeric(10,3) not null,Cphone nchar(11) not null,primary key(Cid),foreign key(Bid) references Bank(Bid) /*在客户表中以Bank表的主码作为一个外键,并对他进行级联更新*/on update cascade,)create table Staff(Sid nchar(9) primary key, /*在列级定义主码*/Sname nchar(10) not null,Spass nchar(10) not null,SItime nchar(20) not null,Sphone nchar(11) not null)create table Operate(Oid nchar(9) not null,Cid nchar(9) not null,Bid nchar(9) not null,Sid nchar(9) not null,Otype nchar(10) not null,Otime nchar(20) not null,Oflag smallint not null,Omoney numeric(10,3),OBmoney numeric(10,3),OAmoney numeric(10,3),primary key(Oid,Cid,Sid),foreign key (Cid) references Custom(Cid) /*以用户表主码为一个外键,进行级联删除*/on delete cascade,foreign key(Sid) references Staff(Sid) /*以员工表的主码作为外键,当删除引起冲突的时候,拒绝删除*/on delete no action,foreign key (Bid) references Bank(Bid)on update cascade)insert into Bank values('00001','中国银行小寨分行',10000)update Bank set Bname='中国银行经开分行' where Bid='00002'select * from Bank;delete from Bank where Bid='1' or Bid='2';insert into Custom values('6505001','花花','111',0,'2012/12/10/08:26:00','610424************','00001','1500','14345678912')insert into Staff values('7985000','自助服务','111','2002/01/07','12331654613')delete from Custom where Bid='2';insert into Operate values('2406002','6505001','00001','7985001','哈哈','2012年12月18日14时12分',0,0,2900,2900)insert into Operate values('2406005','6505007','00001','7985001','嘿嘿','2012年12月18日14时12分',0,0,2900,2900)select * from Custom;select * from Operate;select * from Staff;select * from Bank;delete from Operatedrop table Customdrop table Bankdrop table Staff;drop table Operate;select * from Bank;delete from Operate where Oid='6505001'drop view BMoney;create view BMoneyasselect Omoneyfrom Operatewhere Oflag = 0 and Omoney>2000 and Otype = '取款';create view BInMoneyasfrom Operatewhere Oflag = 0 and Omoney>2000 and Otype='存款';create view VIPasselect Ctypefrom Customwhere Ctype=1;select count(*) from BMoney;select count(*) from BInMoney;select count(*) from VIP;update Bank set Bmoney='10000' where Bid='00001';update Bank set Bmoney='+bmoney' where Bid='"+Bid+"'";update Bank set Bmoney='10200.000000' where Bid='00001'程序代码:客户部分:a.void CClientDlg::OnButtonIn() //存款函数{// TODO: Add your control notification handler code hereCInDlg InDlg;if (InDlg.DoModal()==IDOK){double temp,temp1;ADOConn ado;CString sql = "select * from Custom where Cname='"+Cname+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);CString str = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");CString bid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");CString str4 = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString str2= str; //将交易前钱数暂存temp=atof(str);temp1=(double)InDlg.m_InNum;temp+=temp1;str.Format("%f",temp);CString str3 = str; //暂存交易后金额sql = "update Custom set Crmoney='"+str+"' "+"where Cname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql);sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);int num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));str = "240600";CString Oid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;Oid.Format("%d",++num); Oid=str+Oid;Sid="7985001";Bid = bid; double temp2;sql = "select * from Bank where Bid='"+Bid+"'";ResultSet = ado.GetRecordSet((_bstr_t)sql);CString bmoney = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");temp2 = atof(bmoney); temp2+=temp1; bmoney.Format("%f",temp2);sql = "update Bank set Bmoney='"+bmoney+"' where Bid='"+Bid+"'";ado.ExecuteSQL((_bstr_t)sql);CString Otype = "存款";CString m_time; CTime time;time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");Otime = m_time; int flag = 0;Omoney.Format("%f",temp1); OAmoney = str2;OBmoney = str3;sql.Format("insert into Operate values('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_ time,flag,Omoney,OAmoney,OBmoney);ado.ExecuteSQL((_bstr_t)sql);ado.E xitConnect(); }}b.v oid CClientDlg::OnButtonGet() //取款函数{// TODO: Add your control notification handler code hereCGetDlg GetDlg;;if (GetDlg.DoModal()==IDOK){double temp,temp1;ADOConn ado;CString sql = "select * from Custom where Cname='"+Cname+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);CString str = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");CString bid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");CString str4 = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString str2= str;//将交易前钱数暂存temp=atof(str);temp1=(double)GetDlg.m_GetNum;if (temp>temp1){temp-=temp1; str.Format("%f",temp); CString str3 = str;//暂存交易后金额sql = "update Custom set Crmoney='"+str+"' "+"whereCname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql);sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql) int num= atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));str = "240600";CString Oid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;Oid.Format("%d",++num);Oid=str+Oid; Sid="7985001"Bid = bid; double temp2;sql = "select * from Bank where Bid='"+Bid+"'";ResultSet = ado.GetRecordSet((_bstr_t)sql);CString bmoney = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");temp2 = atof(bmoney); temp2-=temp1;bmoney.Format("%f",temp2);sql = "update Bank set Bmoney='"+bmoney+"' whereBid='"+Bid+"'";ado.ExecuteSQL((_bstr_t)sql);CString Otype = "取款";CString m_time; CTime time;time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");Otime = m_time; int flag = 0;Omoney.Format("%f",temp1);OAmoney = str2;OBmoney = str3; sql.Format("insert into Operate values('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_time,flag,Omoney,OAmoney,OBmoney); ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();}else{AfxMessageBox("账户余额不足!"); }}}c.void CClientDlg::OnButtonTurn(){/ TODO: Add your control notification handler code hereCTurnDlg TurnDlg;if (TurnDlg.DoModal()==IDOK){ADOConn ado;CString sql = "select * from Custom";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int flag = 0;while (!ResultSet->adoEOF)CString TCusId = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString TCusMon = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney"); //收钱客户在操作前的余额CString str5 = TCusMon; TCusId.Remove(' ');if (TCusId==TurnDlg.m_TurnId){double temp,temp1;sql = "select * from Custom where Cname='"+Cname+"'";ResultSet = ado.GetRecordSet((_bstr_t)sql);CString str = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");CString bid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");CString str4 = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString str2= str; //将交易前钱数暂存temp=atof(str);temp1=(double)TurnDlg.m_TurnNum; if (temp>temp1){flag = 1;temp-=temp1; //住客户钱数减少str.Format("%f",temp);CString str3 = str; //暂存交易后金额sql = "update Custom set Crmoney='"+str+"' "+"where Cname='"+Cname+"'";do.ExecuteSQL((_bstr_t)sql); temp=atof(TCusMon);//收钱客户钱数增加temp+=temp1;TCusMon.Format("%f",temp); sql = "update Custom set Crmoney='"+TCusMon+"' "+"where Cid='"+TCusId+"'";ado.ExecuteSQL((_bstr_t)sql); sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);int num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));str = "240600";CString Oid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;int Otype; Oid.Format("%d",++num); Oid=str+Oid;Sid="7985001";Bid = bid; Otype = 2; CString m_time; CTime time;time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d 日%X");Otime = m_time; Omoney.Format("%f",temp1);OAmoney = str2; OBmoney = str3;sql.Format("insert into Operate values('%s','%s','%s','%s',%d,'%s',%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_time ,Omoney,OAmoney,OBmoney); ado.ExecuteSQL((_bstr_t)sql);sql.Format("insert into Operate values('%s','%s','%s','%s',%d,'%s',%s,%s,%s)",TCusId,str4,Bid,Sid,Otype,m_t ime,Omoney,str5,TCusMon); ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();break; }else{AfxMessageBox("账户余额不足!");break; }}ResultSet->MoveNext();}if(flag==0){AfxMessageBox("该账户不存在!"); }}}d.v oid CClientDlg::OnButtonHistoy() //历史记录查询{// TODO: Add your control notification handler code hereCShowHistory showDlg;ame = Cname;showDlg.DoModal();}e.v oid CClientDlg::OnButtonAlter(){// TODO: Add your control notification handler code hereCAlterDlg alteDlg;if(alteDlg.DoModal()==IDOK){ if (alteDlg.m_AItem==0){if (alteDlg.m_Alter1==alteDlg.m_Alter2) {ADOConn ado; CString sql = "update Custom set Cname='"+alteDlg.m_Alter1+"' where Cname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("姓名修改成功!"); }else {AfxMessageBox("两次姓名输入不一致,请重新输入!"); }}else if(alteDlg.m_AItem==1){if (alteDlg.m_Alter1==alteDlg.m_Alter2) { ADOConn ado;CString sql = "update Custom set Cpass='"+alteDlg.m_Alter1+"' whereCname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql); AfxMessageBox("密码修改成功!"); }else{AfxMessageBox("两次密码输入不一致,请重新输入!"); }elseif (alteDlg.m_Alter1==alteDlg.m_Alter2){if (alteDlg.m_Alter1.GetAt(0)=='1'&&alteDlg.m_Alter1.GetLength()==11)ADOConn ado; CString sql = "update Custom setCphone='"+alteDlg.m_Alter1+"' where Cname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql); AfxMessageBox("电话号码修改成功!"); }else {AfxMessageBox("电话号码格式不对!");} } else{AfxMessageBox("两次电话输入不一致,请重新输入!"); } }}}管理员部分:a.void CStaffDlg::OnButtonInsert() //添加新成员{// TODO: Add your control notification handler code hereCInsertDlg insertDlg;if (insertDlg.DoModal()==IDOK){if (insertDlg.m_Phone.GetAt(0)=='1'&&insertDlg.m_Phone.GetLength()==11){ADOConn ado;CString sql = "select count(*) Num from Custom whereCcode='"+insertDlg.m_Code+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));if (Num==0){CString str = "650500";sql = "select count(*) num from Custom";ResultSet = ado.GetRecordSet((_bstr_t)sql);Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));CString Cid,Cpass,Bid,Pmoney; double dou;Cid.Format("%d",++Num); Cid = str+Cid;Cpass = "000000";CString m_time; Bid= "00001";CTime time; time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");dou = (double)insertDlg.m_Pmoney;Pmoney.Format("%f",dou);// Otime = m_time; sql.Format("insert into Custom values('%s','%s','%s','%s',%s,'%s',%s,%s)",Cid,insertDlg.m_Name,Cpass,m_time,insertDlg.m_Code,Bid,Pmoney,insertDlg.m_Phone);ado.ExecuteSQL((_bstr_t)sql);sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));CString Oid,OAmoney,Otype; Otype = "新注册";Oid.Format("%d",++Num);str = "240600";Oid = str+Oid; Bid= "00001";int flag = 0; OAmoney = "0";sql.Format("insert into Operatevalues('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,Cid,Bid,Sid,Otype,m_time,flag,Pmoney,OAmoney,Pmoney); ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("新增客户成功!"); }else{AfxMessageBox("该证件号已经注册!"); }}}b.void CStaffDlg::OnButtonDelete() //注销客户{// TODO: Add your control notification handler code hereCDelDlg delDlg;if (delDlg.DoModal()==IDOK){if (delDlg.m_DelId1==delDlg.m_DelId2){ADOConn ado;count(*) Num from Custom where Cid='"+delDlg.m_DelId1+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));if (Num!=0){CString str = "650500";sql = "delete from Custom whereCid='"+delDlg.m_DelId1+"'";ado.ExecuteSQL((_bstr_t)sql); CString Bid,Cid;Cid = "6505000";CString m_time;CTime time; time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");sql = "select count(*) numfrom Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));CString Oid,OAmoney,Otype; Otype = "注销用户";Oid.Format("%d",++Num);tr = "240600";Oid = str+Oid; Bid= "00001";int flag = 2; OAmoney = "0";sql.Format("insert into Operatevalues('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,Cid,Bid,Sid,Otype,m_time,flag,OAmoney,OAmoney,OAmoney); ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("注销客户成功!"); }else{AfxMessageBox("不存在该用户!"); }}else {AfxMessageBox("两次输入用户ID不一致,请重新输入!"); }}}c.void CStaffDlg::OnButtonResher() 查询客户{// TODO: Add your control notification handler code hereCAlterDlg altDlg; if (altDlg.DoModal()==IDOK){if (altDlg.m_AItem==0) {if (altDlg.m_Alter1==altDlg.m_Alter2) {ADOConn ado;CString sql = "update Staff set Sname='"+altDlg.m_Alter1+"' whereSname='"+Sname+"'";ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("姓名修改成功!");}else{AfxMessageBox("两次姓名输入不一致,请重新输入!"); }} else if(altDlg.m_AItem==1){if (altDlg.m_Alter1==altDlg.m_Alter2){ADOConn ado;CString sql = "update Custom set Spass='"+altDlg.m_Alter1+"' where Sname='"+Sname+"'";ado.ExecuteSQL((_bstr_t)sql); AfxMessageBox("密码修改成功!"); }else{AfxMessageBox("两次密码输入不一致,请重新输入!"); }}else{if (altDlg.m_Alter1==altDlg.m_Alter2){if (altDlg.m_Alter1.GetAt(0)=='1'&&altDlg.m_Alter1.GetLength()==11){ADOConn ado;CString sql = "update Custom set Sphone='"+altDlg.m_Alter1+"' where Sname='"+Sname+"'";ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("电话号码修改成功!"); }else{AfxMessageBox("电话号码格式不对!");} }else{AfxMessageBox("两次电话输入不一致,请重新输入!"); } } }d.void CStaffDlg::OnButtonMoneyctrl() //资金管理{// TODO: Add your control notification handler code hereCSerchDlg serDlg;if (serDlg.DoModal()==IDOK){ADOConn ado;CString sql = "select count(*) Num from Custom where Cid='"+serDlg.m_Cid+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));if (Num!=0){CCusInfoDlg cusDlg;cusDlg.Cid = serDlg.m_Cid ADOConn ado;CString sql = "select * from Custom where Cid='"+cusDlg.Cid+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);cusDlg.m_Cname = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cname");cusDlg.m_Cid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");cusDlg.m_Code = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Ccode");cusDlg.m_Phone = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cphone");cusDlg.m_Rmoney = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");cusDlg.DoModal();ado.ExitConnect();}else{AfxMessageBox("不存在该客户!"); }}}e.void CStaffDlg::OnButtonAlter() //信息修改{CMoneyDlg monDlg; ADOConn ado;CString sql = "select count(*) Num from BMoney ";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_GetNum = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));sql = "select count(*) Num from BInMoney";ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_InNum = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));sql = "select count(*) Num from VIP";ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_VIPNum= atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));sql = "select * from Bank where Bid='00001'";ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_Cash = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");ado.ExitConnect();monDlg.DoModal();}f.void CStaffDlg::OnButtonAnyse() //员工业绩分析{// TODO: Add your control notification handler code hereCStaffIDlg staDlg;staDlg.DoModal();}心得体会:这次课程设计体会非常深刻,首先在团队合作方面,我觉得自己作为队长没有两道好我的小队,这是我的失职。

数据库原理课程设计银行储蓄管理系统

数据库原理课程设计银行储蓄管理系统

目录一、需求与功能分析 1二、系统总体框架 2三、逻辑设计 2四、类的设计与分析 4五、数据库表结构设计 8六、特色算法分析 8七、功能测试 9八、存在的不足与对策 12九、程序源代码 12银行储蓄管理系统一银行储蓄系统需求分析系统功能简介:信息系统:主要是在里面输入用户信息(户名,帐号,开户日期)主要功能:记录用户所要进行的各种存取操作(存钱,取钱),并对操作数据做好记录记录时间:主要是记录每个用户开户,存取,取钱的日期相关金额:该用户的存款金额,取款金额,执行操作后账户余额保存系统:可以以连接数据库模式保存查询过的内容,对于刚刚查询过的内容不必重复登陆工作环境:该程序可用在各种银行性质的单位,能有效管理用户信息。

方便,快捷,容易上手,安全保密,资料齐整构造该程序,主要是使用C++ & SQL系统。

在MS-DOS以及WINDOWS95以上的操作系统上可以正常运行。

现今的社会,资金流动十分频繁。

不单单是企业、厂商,连个人也不例外。

银行作为一个金融机构,在现代人们的生活中扮演着及其重要的角色。

为生活节奏飞快的现代人提供快速、便捷、高效理财服务,是每一个银行机构的共同职责。

伴随着电脑技术的发展,各大银行储蓄管理软件也随之出现在这一舞台之上。

银行储蓄管理程序的主要功能就是记录用户的账户信息,已经对用户的存取款操作作好记录及数据更新。

银行储蓄管理的特点是数据量大。

数据更新频繁。

因此便捷的操作,数据更新准确度,成了这一系统的主要指标。

二系统总框图三逻辑设计任何建模语言都以静态建模机制为基础,标准建模语言UML也不例外。

所谓静态建模是指对象之间通过属性互相联系,而这些关系不随时间而转移。

类和对象的建模,是UML建模的基础。

面向对象的开发方法的基本任务是建立对象模型,是软件系统开发的基础。

UML中的对象类图表达了对象模型的静态结构,能够有效地建立专业领域的计算机系统对象模型。

图1 系统类图动态模型主要描述系统的动态行为和控制结构。

银行管理系统数据库设计

银行管理系统数据库设计

银行管理系统数据库设计引言银行管理系统是一种用于存储与管理银行数据的计算机系统,通常由一个后端数据库和一个前端用户界面组成。

数据库连接了所有的用户信息、交易、账户余额和其他相关信息,尤其是在现代银行业中具有极其重要的作用。

因此,设计一个高效的、安全的银行管理系统数据库至关重要。

数据库架构设计银行管理系统数据库的架构设计应该围绕着确保数据安全和数据访问性能进行。

我们设计的数据库架构应该保证:- 可靠性:即使在系统遇到故障时也可以确保银行数据不会丢失。

可靠性:即使在系统遇到故障时也可以确保银行数据不会丢失。

- 高性能:数据库与银行的业务应该相互匹配,以确保较快的响应时间。

高性能:数据库与银行的业务应该相互匹配,以确保较快的响应时间。

- 数据安全:银行管理系统中有很多敏感信息,这些信息必须得到保护。

数据安全:银行管理系统中有很多敏感信息,这些信息必须得到保护。

我们建议采用以下3个数据库组件:1. 用户管理数据库用户管理数据库用于存储所有银行用户的个人信息,包括姓名、地址、电子邮件地址、电话号码等。

这个数据库应该是一个关系型数据库,可以方便地添加、更新、删除用户信息。

用户也可以通过银行的网站或应用程序访问他们的个人信息。

我们建议使用MySQL数据库来实现这个组件,因为它是一种健壮、开放源代码的关系型数据库管理系统。

2. 交易管理数据库交易管理数据库应该用于存储所有银行账户上的交易信息。

每次交易都应该包括转账方、收账方、金额和日期等信息。

这个数据库应该是一个高性能的非关系型数据库。

我们建议使用NoSQL数据库来实现这个组件,因为它可以处理大量的非结构化数据。

3. 账户管理数据库账户管理数据库用于存储所有银行账户的余额和其他相关信息。

这个数据库应该是一个关系型数据库,可以方便地添加、更新、删除账户信息。

我们建议使用Oracle数据库来实现这个组件,因为它是一种能够处理大量事务和复杂查询的关系型数据库管理系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*************大学课程设计报告书课程名称:《数据库系统原理》课程设计题目:银行储蓄管理系统数据库设计系名:信息工程系专业班级:软件技术2101姓名:学号:指导教师:2012年6 月29日课程设计任务书学生姓名:专业班级:软件技技术2101指导教师:工作单位:信息工程系设计题目:银行储蓄管理系统数据库设计初始条件:本课程的设计的目的是通过实践使同学们经历数据库设计开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。

结合具体的开发案例,理解并初步掌握系统分析、系统设计、系统实施的主要环节和步骤以及软件文档的制作能力。

要求完成的主要任务:要求学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的银行储蓄管理系统,进行数据库系统的需求分析,概念结构设计、逻辑结构设计、物理结构设计,数据录入及测试等,完成题目要求的功能。

主要任务:用户有以下需求:建立用户;建立账户档案,建立账户索引;完成日常交易信息检索、进行存款、转账、取款等工作,对取款、转账等操作,必需进行身份验证。

具体要求如下:1.存折信息数据包括:存折的基本信息包括:户名、帐号、开户银行名称、开户日期、取款密码等。

2.账户存取明细数据包括:日期、摘要(现存、现支、转存、利息)、交易金额、余额、操作柜员编号。

3.检索系统能根据户名、账号、交易日期、金额等进行查询。

4.取款输入账号和密码后,能根据密码判断用户是否合法,能判断取款金额是否超过了账户余额,如果取款金额合法,就对该账号的余额信息进行更新。

5、存款输入账号和存款金额后,能更新该账号的余额。

6、转账输入账号和密码后,能根据密码判断用户是否合法,然后再输入对方的转账账户,并判断对方的转账账户是否合法,如果合法,再输入转账的金额,并能判断转账金额是否超过了账户余额,如果转账金额合法,就对该账号的余额信息以及对方的账户余额信息进行更新。

指导教师签字:凌伟2012年6月25日系主任签字:2012年6月25 日目录第一章需求分析1.项目概述1.1产品描述1.2产品功能1.3用户特点2.功能需求2.1 需求2.2 开户功能2.3 取款功能2.4 查询功能2.5 修改功能2.6 销户功能3.具体需求4.设计4.1 概念结构设计4.2数据库逻辑设计4.3 数据表建立的脚本第二章设计概要1.总体设计1.1 运行界面2.源代码3.心得体会4.参考文献第一章需求分析1项目概述1.1产品描述本软件实现银行的活期储蓄存款业务。

整套软件由客户端程序和服务器端程序构成,客户端运行在面向个人业务的银行柜台的电脑上,银行职员输入相关信息并通过网络通讯向服务器发送请求,并接受服务器端程序的应答显示处理的结果。

服务器端处理客户端的各种业务请求。

主要实现银行开户、销户、取款、存款、余额查询、转账、修改密码、等功能。

1.2产品功能1.3.用户特点本软件的最终用户主要面向银行柜台职员。

这些操作人员的教育水平是高中及以上学历,经过计算机操作的相关培训,能够熟练使用和操作电脑2功能需求1.主菜单功能:输出主菜单(包括开户、存款、取款、查询、转账、修改密码、销户、退出等功能)供操作用户选择,然后根据用户的输入选择进入不同的系统功能界面。

2.开户功能:银行职员在客户端输入开户的基本信息,通过网络传送数据,在服务器处理后显示服务器端的处理结果。

开户成功后打印存折相关信息。

操作结束后返回主菜单界面。

存折的基本信息包括:户名、帐号、开户人电话号码、开户日期等。

3.存款功能:主要有存款金额与存款时间,存款的账号等,供用户来填写数据存款。

5.取款功能:包含取款金额,取款时间等,供用户操作。

6.查询功能:提供查询功能,能够查询用户余额,所得利息,与以往的存取款记录。

7.销户功能:能通过账号与身份等验证来销户,说明销户的日期,方便记录。

8.修改功能:可以通过原密码来改新密码。

总体结构图2.1开户功能引言:接收客户端传送的数据,把数据保存到数据库中,经过服务器段的处理后把处理的结果传回给客户端。

输入:1、接收客户端传送过来的数据。

处理:1、自动生成账户ID,长度5位,从1开始编号,不足补0,例如00009、00103等。

自动生成账户ID要求唯一。

2、账户所有信息将保存数据库的账户信息表中。

3、根据开户金额生成一条账户的存款记录。

输出:1、把服务器端处理的结果返回给客户端。

处理的结果包括开户是否成功,如果开户成功处理的结果中还包含生成的存款记录。

2.2存款功能引言:接收客户端传送的数据,增加账户余额并修改相关的数据库信息,把结果传回给客户端。

2.3取款功能引言:接收客户端传送的数据,减少账户余额并修改相关的数据库信息,把结果传回给客户端。

2.4查询功能引言:接收客户端传送的数据,查找账户信息,把结果传回给客户端。

2.5修改功能引言:接收客户端传送的数据,修改账户密码,把结果传回给客户端。

2.6销户功能引言:接收客户端传送的数据,通过公式计算客户账户的利息,注销该客户账户。

把结果传回给客户端。

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数据表建立的脚本create table kh(kh_name varchar(8),kh_ID int,kh_phone int,kh_adress varchar(20),kh_mm int);(开户表)create table cunk(ck_kahao int,ck_mima int,ck_ckjin_e int); (存款表)create table qukuan(qk_kahao int,qk_mima int,qk_qkjin_e int); (取款表)create table chaxun(cx_yu_e int,cx_jilu varchar(50),cx_lixi int); (查询表)create table xiugai(xg_name varchar(8),xg_ID int,xg_y_mima int,xg_x_mima int); (修改密码)create table xiaohu(xh_name varchar(8),xh_ID int,xh_phone int); (销户表)第二章概要设计1总体设计1.1运行界面1.1.1进入主菜单界面图主菜单界面1.1.2选择输入的编号,1 开户开户菜单界面图1.1.3 存款界面图图存款界面图1.1.4取款界面图取款界面图1.1.5销户界面图销户界面图1.1.6修改界面图修改界面图1.1.7 查询界面图查询界面图#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; //账户IDint 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; //账户IDchar pwd[7]; //账户密码int acc_oid; //对方账户ID double money; //交易金额int opter_id; //操作员ID char date[20]; //操作时间}T_TRANSFER;//更改密码数据typedef struct changepwd_ {int acc_id; //账户IDchar pwd[7]; //账户旧密码char newpwd[7]; //账户新密码int opter_id; //操作员ID char date[20]; //操作时间}T_CHANGEPWD;//销户数据typedef struct destroy_{int acc_id; //账户IDchar pwd[7]; //账户密码int opter_id; //操作员ID char date[20]; //操作时间}T_DESTROY;//明细数据typedef struct detail_{int acc_id; //账户IDchar 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; //账户IDchar type_id[20]; //类型ID char opt_date[20]; //操作时间double d_money; //处理金额double b_money; //余额int staffer_id; //操作员IDint 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/DestructionMySocket::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,"2010-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;//exitp_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 addressint 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 err!"<<endl;return -1;}ret = listen(s,10);if(ret ==SOCKET_ERROR){cout<<"listen err!"<<endl;return -1;}cout<<"server is ready!"<<endl;/***数据处理*/while (1){struct sockaddr_in c_addr;int len = sizeof(c_addr);SOCKET c_s = accept(s,(struct sockaddr*)&c_addr,&len);// SOCKET c_s = accept(s,NULL,NULL);// cout<<"client connected!"<<(c_addr.sin_addr)<<":"<<len<<endl;HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFun, &c_s,0,NULL);}return 0;}3.心得体会通过此次系统的设计及论文的写作,使我对软件工程的学习方法了有了进一步的理解。

相关文档
最新文档