數(shù)據(jù)庫(kù)銀行管理系統(tǒng)報(bào)告書(shū)樣本_第1頁(yè)
數(shù)據(jù)庫(kù)銀行管理系統(tǒng)報(bào)告書(shū)樣本_第2頁(yè)
數(shù)據(jù)庫(kù)銀行管理系統(tǒng)報(bào)告書(shū)樣本_第3頁(yè)
數(shù)據(jù)庫(kù)銀行管理系統(tǒng)報(bào)告書(shū)樣本_第4頁(yè)
數(shù)據(jù)庫(kù)銀行管理系統(tǒng)報(bào)告書(shū)樣本_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

*************大學(xué)課程設(shè)計(jì)報(bào)告書(shū)課程名稱(chēng):《數(shù)據(jù)庫(kù)系統(tǒng)原理》課程設(shè)計(jì)題目:銀行儲(chǔ)蓄管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)系名:信息工程系專(zhuān)業(yè)班級(jí):軟件技術(shù)2101姓名:學(xué)號(hào):指引教師:6課程設(shè)計(jì)任務(wù)書(shū)學(xué)生姓名:專(zhuān)業(yè)班級(jí):軟件技技術(shù)2101指引教師:工作單位:信息工程系設(shè)計(jì)題目:銀行儲(chǔ)蓄管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)初始條件:本課程設(shè)計(jì)目是通過(guò)實(shí)踐使同窗們經(jīng)歷數(shù)據(jù)庫(kù)設(shè)計(jì)開(kāi)發(fā)全過(guò)程和受到一次綜合訓(xùn)練,以便能較全面地理解、掌握和綜合運(yùn)用所學(xué)知識(shí)。結(jié)合詳細(xì)開(kāi)發(fā)案例,理解并初步掌握系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)行重要環(huán)節(jié)和環(huán)節(jié)以及軟件文檔制作能力。規(guī)定完畢重要任務(wù):規(guī)定學(xué)生依照所學(xué)數(shù)據(jù)庫(kù)原理與程序設(shè)計(jì)知識(shí),可以針對(duì)一種小型銀行儲(chǔ)蓄管理系統(tǒng),進(jìn)行數(shù)據(jù)庫(kù)系統(tǒng)需求分析,概念構(gòu)造設(shè)計(jì)、邏輯構(gòu)造設(shè)計(jì)、物理構(gòu)造設(shè)計(jì),數(shù)據(jù)錄入及測(cè)試等,完畢題目規(guī)定功能。重要任務(wù):顧客有如下需求:建立顧客;建立賬戶(hù)檔案,建立賬戶(hù)索引;完畢尋常交易信息檢索、進(jìn)行存款、轉(zhuǎn)賬、取款等工作,對(duì)取款、轉(zhuǎn)賬等操作,必須進(jìn)行身份驗(yàn)證。詳細(xì)規(guī)定如下:1.存折信息數(shù)據(jù)涉及:存折基本信息涉及:戶(hù)名、帳號(hào)、開(kāi)戶(hù)銀行名稱(chēng)、開(kāi)戶(hù)日期、取款密碼等。2.賬戶(hù)存取明細(xì)數(shù)據(jù)涉及:日期、摘要(現(xiàn)存、現(xiàn)支、轉(zhuǎn)存、利息)、交易金額、余額、操作柜員編號(hào)。3.檢索系統(tǒng)能依照戶(hù)名、賬號(hào)、交易日期、金額等進(jìn)行查詢(xún)。4.取款輸入賬號(hào)和密碼后,能依照密碼判斷顧客與否合法,能判斷取款金額與否超過(guò)了賬戶(hù)余額,如果取款金額合法,就對(duì)該賬號(hào)余額信息進(jìn)行更新。5、存款輸入賬號(hào)和存款金額后,能更新該賬號(hào)余額。6、轉(zhuǎn)賬輸入賬號(hào)和密碼后,能依照密碼判斷顧客與否合法,然后再輸入對(duì)方轉(zhuǎn)賬賬戶(hù),并判斷對(duì)方轉(zhuǎn)賬賬戶(hù)與否合法,如果合法,再輸入轉(zhuǎn)賬金額,并能判斷轉(zhuǎn)賬金額與否超過(guò)了賬戶(hù)余額,如果轉(zhuǎn)賬金額合法,就對(duì)該賬號(hào)余額信息以及對(duì)方賬戶(hù)余額信息進(jìn)行更新。指導(dǎo)教師簽字:凌偉6月25日系主任簽字:6月25日目錄需求分析項(xiàng)目概述產(chǎn)品描述產(chǎn)品功能顧客特點(diǎn)功能需求2.1需求2.2開(kāi)戶(hù)功能2.3取款功能2.4查詢(xún)功能2.5修改功能2.6銷(xiāo)戶(hù)功能詳細(xì)需求設(shè)計(jì)4.1概念構(gòu)造設(shè)計(jì)數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)4.3數(shù)據(jù)表建立腳本設(shè)計(jì)概要總體設(shè)計(jì)1.1運(yùn)營(yíng)界面源代碼心得體會(huì)參照文獻(xiàn)需求分析1項(xiàng)目概述1.1產(chǎn)品描述本軟件實(shí)現(xiàn)銀行活期儲(chǔ)蓄存款業(yè)務(wù)。整套軟件由客戶(hù)端程序和服務(wù)器端程序構(gòu)成,客戶(hù)端運(yùn)營(yíng)在面向個(gè)人業(yè)務(wù)銀行柜臺(tái)電腦上,銀行職工輸入有關(guān)信息并通過(guò)網(wǎng)絡(luò)通訊向服務(wù)器發(fā)送祈求,并接受服務(wù)器端程序應(yīng)答顯示解決成果。服務(wù)器端解決客戶(hù)端各種業(yè)務(wù)祈求。重要實(shí)現(xiàn)銀行開(kāi)戶(hù)、銷(xiāo)戶(hù)、取款、存款、余額查詢(xún)、轉(zhuǎn)賬、修改密碼、等功能。1.2產(chǎn)品功能軟件功能表模塊功能闡明主菜單取款開(kāi)戶(hù)銷(xiāo)戶(hù)余額打印賬戶(hù)明細(xì)記錄修改密碼服務(wù)器端程序存款取款開(kāi)戶(hù)銷(xiāo)戶(hù)查詢(xún)修改1.3.顧客特點(diǎn)本軟件最后顧客重要面向銀行柜臺(tái)職工。這些操作人員教誨水平是高中及以上學(xué)歷,通過(guò)計(jì)算機(jī)操作有關(guān)培訓(xùn),可以純熟使用和操作電腦2功能需求1.主菜單功能:輸出主菜單(涉及開(kāi)戶(hù)、存款、取款、查詢(xún)、轉(zhuǎn)賬、修改密碼、銷(xiāo)戶(hù)、退出等功能)供操作顧客選取,然后依照顧客輸入選取進(jìn)入不同系統(tǒng)功能界面。2.開(kāi)戶(hù)功能:銀行職工在客戶(hù)端輸入開(kāi)戶(hù)基本信息,通過(guò)網(wǎng)絡(luò)傳送數(shù)據(jù),在服務(wù)器解決后顯示服務(wù)器端解決成果。開(kāi)戶(hù)成功后打印存折有關(guān)信息。操作結(jié)束后返回主菜單界面。存折基本信息涉及:戶(hù)名、帳號(hào)、開(kāi)戶(hù)人電話(huà)號(hào)碼、開(kāi)戶(hù)日期等。3.存款功能:重要有存款金額與存款時(shí)間,存款賬號(hào)等,供顧客來(lái)填寫(xiě)數(shù)據(jù)存款。5.取款功能:包括取款金額,取款時(shí)間等,供顧客操作。6.查詢(xún)功能:提供查詢(xún)功能,可以查詢(xún)顧客余額,所得利息,與以往存取款記錄。7.銷(xiāo)戶(hù)功能:能通過(guò)賬號(hào)與身份等驗(yàn)證來(lái)銷(xiāo)戶(hù),闡明銷(xiāo)戶(hù)日期,以便記錄。8.修改功能:可以通過(guò)原密碼來(lái)改新密碼。銀行存儲(chǔ)系統(tǒng)銀行存儲(chǔ)系統(tǒng)開(kāi)戶(hù)存款取款查詢(xún)銷(xiāo)戶(hù)修改總體構(gòu)造圖2.1開(kāi)戶(hù)功能引言:接受客戶(hù)端傳送數(shù)據(jù),把數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,通過(guò)服務(wù)器段解決后把解決成果傳回給客戶(hù)端。輸入:接受客戶(hù)端傳送過(guò)來(lái)數(shù)據(jù)。解決:自動(dòng)生成賬戶(hù)ID,長(zhǎng)度5位,從1開(kāi)始編號(hào),局限性補(bǔ)0,例如00009、00103等。自動(dòng)生成賬戶(hù)ID規(guī)定唯一。賬戶(hù)所有信息將保存數(shù)據(jù)庫(kù)賬戶(hù)信息表中。依照開(kāi)戶(hù)金額生成一條賬戶(hù)存款記錄。輸出:把服務(wù)器端解決成果返回給客戶(hù)端。解決成果涉及開(kāi)戶(hù)與否成功,如果開(kāi)戶(hù)成功解決成果中還包括生成存款記錄。2.2存款功能引言:接受客戶(hù)端傳送數(shù)據(jù),增長(zhǎng)賬戶(hù)余額并修改有關(guān)數(shù)據(jù)庫(kù)信息,把成果傳回給客戶(hù)端。輸入解決輸出1、客戶(hù)端傳送數(shù)據(jù)。1、驗(yàn)證賬戶(hù)ID與否存在。2、修改相應(yīng)賬戶(hù)ID數(shù)據(jù)庫(kù)信息。1、把服務(wù)器端解決成果返回給客戶(hù)端。2.3取款功能引言:接受客戶(hù)端傳送數(shù)據(jù),減少賬戶(hù)余額并修改有關(guān)數(shù)據(jù)庫(kù)信息,把成果傳回給客戶(hù)端。輸入解決輸出1、客戶(hù)端傳送數(shù)據(jù)。1、驗(yàn)證賬戶(hù)ID與否存在。2、驗(yàn)證密碼與否對(duì)的。3、驗(yàn)證余額與否足夠。2、修改相應(yīng)賬戶(hù)ID數(shù)據(jù)庫(kù)信息。1、把服務(wù)器端解決成果返回給客戶(hù)端。2.4查詢(xún)功能引言:接受客戶(hù)端傳送數(shù)據(jù),查找賬戶(hù)信息,把成果傳回給客戶(hù)端。輸入解決輸出1、客戶(hù)端傳送數(shù)據(jù)。1、驗(yàn)證賬戶(hù)ID與否存在。2、驗(yàn)證密碼與否對(duì)的。3、查找相應(yīng)賬戶(hù)信息。1、把服務(wù)器端解決成果返回給客戶(hù)端。2.5修改功能引言:接受客戶(hù)端傳送數(shù)據(jù),修改賬戶(hù)密碼,把成果傳回給客戶(hù)端。輸入解決輸出1、客戶(hù)端傳送數(shù)據(jù)。1、驗(yàn)證賬戶(hù)ID與否存在。2、驗(yàn)證密碼與否對(duì)的。3、查找相應(yīng)賬戶(hù)并修改密碼。1、把服務(wù)器端解決成果返回給客戶(hù)端。2.6銷(xiāo)戶(hù)功能引言:接受客戶(hù)端傳送數(shù)據(jù),通過(guò)公式計(jì)算客戶(hù)賬戶(hù)利息,注銷(xiāo)該客戶(hù)賬戶(hù)。把成果傳回給客戶(hù)端。輸入解決輸出1、客戶(hù)端傳送數(shù)據(jù)。1、驗(yàn)證賬戶(hù)ID與否存在。2、驗(yàn)證密碼與否對(duì)的。3、計(jì)算利息,詳細(xì)公式如下:利息=存款額*存款天數(shù)*年利率/360需要注意是,賬戶(hù)中存款額在變化。4、修改相應(yīng)賬戶(hù)ID數(shù)據(jù)庫(kù)。5、刪除顧客賬戶(hù),不是做物理刪除解決。1、把服務(wù)器端解決成果返回給客戶(hù)端。3詳細(xì)需求在進(jìn)行向數(shù)據(jù)庫(kù)文獻(xiàn)提取數(shù)據(jù)時(shí),規(guī)定數(shù)據(jù)記錄對(duì)的,在往數(shù)據(jù)文獻(xiàn)中添加數(shù)據(jù)時(shí),規(guī)定輸入數(shù)據(jù)對(duì)的,金額,身份證,賬號(hào)等要需求設(shè)定字符數(shù)。依照軟件和顧客組織特性等,某些需求放在下面各項(xiàng)中描述。4設(shè)計(jì)4.1概念構(gòu)造設(shè)計(jì)4.1.1各個(gè)功能模塊E-R圖(1)開(kāi)戶(hù)E-R圖開(kāi)戶(hù)開(kāi)戶(hù)姓名聯(lián)系電話(huà)密碼地址身份證號(hào)碼(2)銷(xiāo)戶(hù)E-R圖銷(xiāo)戶(hù)銷(xiāo)戶(hù)賬號(hào)身份證電話(huà)(3)存款E-R圖存款存款賬號(hào)密碼存款金額(4)取款E-R圖取款取款賬號(hào)密碼取款金額(5)查詢(xún)E-R圖查詢(xún)查詢(xún)余額利息記錄(6)修改E-R圖修改修改賬號(hào)原密碼新密碼身份證4.2數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)將數(shù)據(jù)庫(kù)概念模型轉(zhuǎn)換為關(guān)系模型開(kāi)戶(hù)(姓名、性別、密碼、身份證號(hào)碼、開(kāi)戶(hù)日期、聯(lián)系電話(huà))存款(賬號(hào)、存款金額、存款時(shí)間)取款(賬號(hào)、密碼、群款金額、取款時(shí)間)修改密碼(賬號(hào)、身份證、原密碼、新密碼)查詢(xún)(余額、利息、記錄)銷(xiāo)戶(hù)(賬號(hào)、身份證、開(kāi)戶(hù)時(shí)間、銷(xiāo)戶(hù)時(shí)間)4.3數(shù)據(jù)表建立腳本createtablekh( kh_name varchar(8), kh_ID int, kh_phone int, kh_adress varchar(20), kh_mm int);(開(kāi)戶(hù)表)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);(查詢(xún)表)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);(銷(xiāo)戶(hù)表)概要設(shè)計(jì)1總體設(shè)計(jì)1.1運(yùn)營(yíng)界面1.主菜單界面1.1.2選取輸入開(kāi)戶(hù)菜單界面圖1.圖存款界面圖1.取款界面圖1.1銷(xiāo)戶(hù)界面圖1.1修改界面圖1.1查詢(xún)界面圖2.源代碼

#ifndef

_DB_STRUCT_H_

#define

_DB_STRUCT_H_

/typedef

struct

account_

{

char

acc_name[21];

//賬戶(hù)名

char

id_card[19];

//身份證號(hào)

char

pwd[7];

//賬戶(hù)密碼

double

money;

//開(kāi)賬金額

char

date[20];

//開(kāi)賬時(shí)間

}T_ACCOUNT;

//存款數(shù)據(jù)

typedef

struct

saving_

{int

acc_id;

//賬戶(hù)ID

int

opter_id;

//操作員ID

double

money;

//存款金額

char

date[20];

//操作時(shí)間

}T_SAVING;

//取款數(shù)據(jù)

typedef

struct

withdraw_

{int

acc_id;

//賬戶(hù)ID

char

pwd[7];

//賬戶(hù)密碼

int

opter_id;

//操作員ID

double

money;

//取款金額

char

date[20];

//操作時(shí)間

}T_WITHDRAW;

//查詢(xún)數(shù)據(jù)

typedef

struct

query_

{int

acc_id;

//賬戶(hù)ID

char

pwd[7];

//賬戶(hù)密碼

int

opter_id;

//操作員ID

char

date[20];

//操作時(shí)間

}T_QUERY;

//交易數(shù)據(jù)

typedef

struct

transfer_

{int

acc_id;

//賬戶(hù)ID

char

pwd[7];

//賬戶(hù)密碼

int

acc_oid;

//對(duì)方賬戶(hù)ID

double

money;

//交易金額

int

opter_id;

//操作員ID

char

date[20];

//操作時(shí)間

}T_TRANSFER;

//更改密碼數(shù)據(jù)

typedef

struct

changepwd_

{int

acc_id;

//賬戶(hù)ID

char

pwd[7];

//賬戶(hù)舊密碼

char

newpwd[7];

//賬戶(hù)新密碼

int

opter_id;

//操作員ID

char

date[20];

//操作時(shí)間

}T_CHANGEPWD;

//銷(xiāo)戶(hù)數(shù)據(jù)

typedef

struct

destroy_

{int

acc_id;

//賬戶(hù)ID

char

pwd[7];

//賬戶(hù)密碼

int

opter_id;

//操作員ID

char

date[20];

//操作時(shí)間

}T_DESTROY;

//明細(xì)數(shù)據(jù)

typedef

struct

detail_

{int

acc_id;

//賬戶(hù)ID

char

s_date[11];

//起始日期

char

e_date[11];

//結(jié)束日期

}T_DETAIL;

//明細(xì)數(shù)據(jù)

typedef

struct

detailall_

{char

s_date[11];

//起始日期

char

e_date[11];

//結(jié)束日期

}T_DETAILALL;

//接受明細(xì)數(shù)據(jù)

typedef

struct

recv_detail_

{char

type_id[20];

//類(lèi)型ID

char

opt_date[20];

//操作時(shí)間

char

d_money[20];

//解決金額

char

b_money[20];

//余額

char

staffer_id[20];

//操作員ID

char

oth_id[20];

//對(duì)方賬戶(hù)ID

}RECV_DETAIL;

//接受明細(xì)數(shù)據(jù)

typedef

struct

recv_detail_all_

{int

acc_id;

//賬戶(hù)ID

char

type_id[20];

//類(lèi)型ID

char

opt_date[20];

//操作時(shí)間

double

d_money;

//解決金額

double

b_money;

//余額

int

staffer_id;

//操作員ID

int

oth_id;

//對(duì)方賬戶(hù)ID

}RECV_DETAIL_ALL;

//黑名單數(shù)據(jù)

typedef

struct

black__

{int

acc_id;

//賬戶(hù)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;

//數(shù)據(jù)長(zhǎng)度

int

type;

//業(yè)務(wù)類(lèi)型

}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)

//連接服務(wù)器

{cout

<<

"Can

not

connect

to

server!"

<<

endl;

return

-1;

}

cout<<"connect

to

server"<<endl;

//數(shù)據(jù)打包

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);//發(fā)送數(shù)據(jù)

int

ret_acc_id=0;

client.RecvTCPLoop((char*)&ret_acc_id,sizeof(int));//接受返回?cái)?shù)據(jù)

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")

//接受數(shù)據(jù)

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;

}//發(fā)送數(shù)據(jù)

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;

}}}//線(xiàn)程解決函數(shù)

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;

//依照業(yè)務(wù)類(lèi)型進(jìn)行解決

if

(p_h.type==CLIENT_EXIT)

//客戶(hù)端退出

{break;}

else

if

(p_h.type==OP_ACC)

//開(kāi)賬

{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版本協(xié)商

*/

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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論