銀行帳戶(hù)系統(tǒng)設(shè)計(jì)研究論文

時(shí)間:2022-10-11 10:25:00

導(dǎo)語(yǔ):銀行帳戶(hù)系統(tǒng)設(shè)計(jì)研究論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢(xún)客服老師,歡迎參考。

銀行帳戶(hù)系統(tǒng)設(shè)計(jì)研究論文

摘要本文通過(guò)設(shè)計(jì)一個(gè)簡(jiǎn)單的銀行帳戶(hù)系統(tǒng)軟件來(lái)分析銀行帳戶(hù)系統(tǒng)的設(shè)計(jì)思想。該軟件實(shí)現(xiàn)了帳戶(hù)管理的最基本功能,其中包括開(kāi)戶(hù)、銷(xiāo)戶(hù)、辦卡、換卡、掛失卡、存款、取款、交易記錄查詢(xún)及打印、客戶(hù)信息修改及打印、客戶(hù)密碼修改、管理員密碼修改、利率設(shè)置等。

關(guān)鍵詞銀行帳戶(hù)系統(tǒng);VC;ODBC;SQLServer2000

1小型銀行帳戶(hù)系統(tǒng)概述

隨著銀行行業(yè)的發(fā)展,銀行的業(yè)務(wù)發(fā)展也逐漸地走向了多樣化,業(yè)務(wù)類(lèi)型逐漸增多,使銀行的服務(wù)范圍逐漸地變廣,隨著經(jīng)濟(jì)全球化的發(fā)展很多銀行已走向了國(guó)際化,不僅為國(guó)內(nèi)的眾多客戶(hù)提供了更優(yōu)質(zhì)服務(wù),還使外國(guó)公民從中獲得更多益處。

本系統(tǒng)主要實(shí)現(xiàn)了開(kāi)戶(hù)、銷(xiāo)戶(hù)、用戶(hù)信息修改、存款、取款、辦卡、掛失卡、數(shù)據(jù)查詢(xún)(用戶(hù)信息查詢(xún),及交易記錄查詢(xún))。根據(jù)這些功能及系統(tǒng)設(shè)計(jì)方面的考慮,系統(tǒng)采用模塊化設(shè)計(jì),各模塊分別實(shí)現(xiàn)為:

“管理用戶(hù)模塊”包括:

開(kāi)戶(hù):由客戶(hù)提供姓名、身份證號(hào)、聯(lián)系地址、聯(lián)系電話(huà)、存入金額、初始密碼等。開(kāi)戶(hù)時(shí)間有系統(tǒng)自動(dòng)生成。

銷(xiāo)戶(hù):提供帳號(hào)用于銷(xiāo)戶(hù),系統(tǒng)顯示客戶(hù)姓名及余額以便確認(rèn)。

數(shù)據(jù)查詢(xún):查詢(xún)客戶(hù)存取款記錄。

用戶(hù)信息查詢(xún)及修改:通過(guò)帳號(hào)、卡號(hào)、證件號(hào)進(jìn)行查詢(xún)。系統(tǒng)顯示客戶(hù)信息并可修改。

“管理員模塊”包括:

業(yè)務(wù)設(shè)置:利率等相關(guān)業(yè)務(wù)設(shè)置。

管理員密碼修改:修改登錄的管理員密碼。

“卡管理模塊”包括:

辦卡:輸入帳號(hào)信息,生成卡號(hào),并由客戶(hù)提供密碼。

換卡:輸入帳號(hào)信息,生成新卡號(hào),并由客戶(hù)提供密碼。

掛失卡:由客戶(hù)提供卡號(hào)及身份證號(hào)(此為真實(shí)用戶(hù)掛失依據(jù))。

“存取操作模塊”包括:

存款:提供帳號(hào)或卡號(hào)以及存款金額,操作完成后顯示余額。

取款:提供帳號(hào)或卡號(hào)以及取款金額,操作完成后顯示余額。

同時(shí),系統(tǒng)還實(shí)現(xiàn)了客戶(hù)信息及客戶(hù)交易記錄的打印功能。

2數(shù)據(jù)庫(kù)設(shè)計(jì)

根據(jù)本系統(tǒng)實(shí)現(xiàn)的功能,我們需要建立5個(gè)表,分別是用戶(hù)數(shù)據(jù)表user_data,用戶(hù)密碼表user_password,交易記錄表user_exchange,用戶(hù)余額表user_balance,管理員密碼表admin_password。user_data表用于開(kāi)戶(hù)時(shí),前臺(tái)應(yīng)用將用戶(hù)開(kāi)戶(hù)時(shí)所需要的客戶(hù)信息寫(xiě)入此表。

其中包括的數(shù)據(jù)有用戶(hù)名、證件號(hào)、聯(lián)系地址、聯(lián)系電話(huà)、業(yè)務(wù)類(lèi)型、存入金額、開(kāi)戶(hù)時(shí)間、帳號(hào)、卡號(hào),共9個(gè)數(shù)據(jù)。為了便于簡(jiǎn)化前臺(tái)應(yīng)用與數(shù)據(jù)庫(kù)的存取,其數(shù)據(jù)類(lèi)型都設(shè)為字符型(char),但不影響正常的程序功能與精度。如user_data建立如表1所示。

表1user_data表

列名數(shù)據(jù)類(lèi)型長(zhǎng)度允許空

用戶(hù)名char15

證件號(hào)char20

聯(lián)系地址char80

聯(lián)系電話(huà)char15

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

存入金額char15

開(kāi)戶(hù)時(shí)間char20

帳號(hào)char15

卡號(hào)char15允許

創(chuàng)建user_data表的SQL語(yǔ)句為:

USEBankManager

CREATETABLEuser_data

(

用戶(hù)名char(15)NOTNULL,

證件號(hào)char(20)NOTNULL,

聯(lián)系地址char(80)NOTNULL,

聯(lián)系電話(huà)char(15)NOTNULL,

業(yè)務(wù)類(lèi)型char(15)NOTNULL,

存入金額char(15)NOTNULL,

開(kāi)戶(hù)時(shí)間char(20)NOTNULL,

帳號(hào)char(15)NOTNULL,

卡號(hào)char(15)NULL

)

GO

3各模塊代碼實(shí)現(xiàn)

因?yàn)楦髂K的代碼實(shí)現(xiàn)基本上都是在用CRecordset類(lèi),所以在這里只給出具有代表性的代碼實(shí)現(xiàn)的分析,其它模塊的代碼不再講述。

先來(lái)分析登錄代碼:

登錄代碼的第一個(gè)語(yǔ)句為:

UpdateData(true);

這條語(yǔ)句是將登錄對(duì)話(huà)框中的數(shù)據(jù)傳遞給Login類(lèi)中對(duì)應(yīng)綁定的String變量。這樣可以對(duì)用戶(hù)輸入的用戶(hù)名、密碼、數(shù)據(jù)源等信息進(jìn)行分析處理。

然后我們需要判斷用戶(hù)是否輸入了用戶(hù)名、密碼和數(shù)據(jù)源,如果沒(méi)有輸入提示用戶(hù)輸入。代碼如下:

if(m_UserName==_T(""))

{

MessageBox("請(qǐng)輸入用戶(hù)名!");

return;

}

if(m_Password==_T(""))

{

MessageBox("請(qǐng)輸入密碼!");

return;

}

DataSource="ODBC;DSN=";

DataSource+=m_DataSource;

if(m_Database.Open(NULL,false,false,DataSource)==false)

{

MessageBox("請(qǐng)正確輸入數(shù)據(jù)源!");

return;

}

如果用戶(hù)輸入了用戶(hù)名、密碼、數(shù)據(jù)源信息,我們還需要根據(jù)管理員靜態(tài)變量Admin,判斷用戶(hù)是作為管理員登錄還是用戶(hù)登錄。

如果是管理員登錄,就查找admin_password表,要訪問(wèn)Admin_password表,我們需要先建立個(gè)CRecordset類(lèi):

CRecordsetm_PasswordSet(&m_Database);

用前面打開(kāi)的數(shù)據(jù)庫(kù)連接構(gòu)造CRecordset類(lèi)。

然后必須打開(kāi)此記錄集,打開(kāi)時(shí),第一個(gè)參數(shù)指定記錄集以向前只讀方式打開(kāi),第二項(xiàng)用SQL語(yǔ)句指定返回給記錄集的列,代碼如下:

CStringstrSQL;

strSQL.Format("select*fromadmin_passwordwhere[管理員]=''''%s''''",m_UserName);

m_PasswordSet.Open(CRecordset::forwardOnly,strSQL);

在此,我們忽略了對(duì)Admin變量的判斷。

下一步判斷是否存在此管理員,通過(guò)記錄集類(lèi)的IsEOF()可以知道返回的記錄集是否有記錄,沒(méi)有說(shuō)明不存在此管理員,那就return。

if(m_PasswordSet.IsEOF())

{

MessageBox("沒(méi)有此管理員!");

m_PasswordSet.Close();

m_Database.Close();

return;

}

如果有記錄我們需要判斷管理員密碼是否正確,首先要先把密碼取出,然后跟用戶(hù)的輸入進(jìn)行比較。

CStringtempPWD;

m_PasswordSet.GetFieldValue("密碼",tempPWD);

if(pare(m_Password))

{

MessageBox("密碼錯(cuò)誤,請(qǐng)正確輸入管理員名和密碼!");

m_PasswordSet.Close();

m_Database.Close();

return;

}

如果是作為用戶(hù)登錄,就查詢(xún)user_password表中的卡號(hào)和卡密碼,這是先建立記錄集類(lèi),這次我們建立的是我們自己定義的派生自CRecordset類(lèi)的CuserPasswordSet類(lèi),此類(lèi)中的數(shù)據(jù)與user_data表中的數(shù)據(jù)對(duì)應(yīng),已經(jīng)綁定好。打開(kāi)方式我們選CRecordset::snapshot,即快照方式,因?yàn)槲覀冊(cè)诤竺嬉獙?duì)數(shù)據(jù)庫(kù)中綁定的數(shù)據(jù)進(jìn)行查詢(xún)(使用Requery()函數(shù)),其實(shí)我們也是可以用前面查詢(xún)admin_password表的方法的。

strSQL.Format("select*fromuser_passwordwhere[卡號(hào)]=''''%s''''",m_UserName);

CUserPasswordSetm_PasswordSet(&m_Database);

m_PasswordSet.Open(CRecordset::snapshot,strSQL);

然后我們看看是否存在此卡號(hào),與前面的方法相同。

下一步我們查詢(xún)user_data表中的掛失狀態(tài),看看是否此卡已經(jīng)掛失,若掛失就return。

m_PasswordSet.Requery();

if(m_PasswordSet.status==TRUE)

{

MessageBox("此卡已經(jīng)掛失,暫不能用!");

m_PasswordSet.Close();

m_Database.Close();

return;

}

然后就是確認(rèn)密碼是否正確了,與前面不同的是用m_PasswordSet.m_CardPassword!=m_Password進(jìn)行判斷,m_CardPassword與數(shù)據(jù)庫(kù)中的卡密碼對(duì)應(yīng)。

如果用戶(hù)輸入的各項(xiàng)數(shù)據(jù)都正確,就銷(xiāo)毀登錄框,進(jìn)入主界面。

CDialog::OnOK();

如果用戶(hù)按了“取消”,退出整個(gè)程序,實(shí)現(xiàn)是在BankManager.cpp中的InitInstance()中完成的。如下:

Login*m_pLogin=newLogin();

if(IDCANCEL==m_pLogin->DoModal())

{

returnfalse;

}

接下來(lái)我們分析開(kāi)戶(hù)模塊:

開(kāi)戶(hù)時(shí)我們需要在user_data表中添加數(shù)據(jù),所以要用記錄集類(lèi)中的AddNew()和Update()函數(shù)。一些代碼實(shí)現(xiàn)與登錄框的很相近,我們就主要說(shuō)差別的地方。

首先我們檢測(cè)用戶(hù)是否輸入了所有數(shù)據(jù),并且檢測(cè)存入金額是否合法:

if(m_CunRuJinE<COleCurrency(0,0))

{

MessageBox("輸入的“存入金額”小于零!");

return;

}

然后查看“證件號(hào)”是否使用過(guò),若使用過(guò)就提示并返回,方法和查看前面的卡號(hào)是否掛失等同。

下一步取得用戶(hù)的帳號(hào)密碼給全局變量transfer:

CPasswordm_Password;

if(IDOK!=m_Password.DoModal())

return;

然后整理要存入數(shù)據(jù)庫(kù)的各變量值,大部分是由用戶(hù)輸入的,而卡號(hào)和開(kāi)戶(hù)時(shí)間是由系統(tǒng)生成的。

根據(jù)用戶(hù)的輸入,將業(yè)務(wù)類(lèi)型記錄到m_Item變量中。

開(kāi)戶(hù)時(shí)間的生成比較簡(jiǎn)單,建立了ColeDateTime后,獲得當(dāng)前時(shí)間并格式化成字符串后即可:

COleDateTimenow;

now=COleDateTime::GetCurrentTime();

m_KaiHuShiJian=now.Format();

帳號(hào)利用時(shí)間生成(后來(lái)的卡號(hào)也是),前面加個(gè)A,是Accounts的第一個(gè)字母,共15位。

最后我們要把數(shù)據(jù)寫(xiě)入各個(gè)表先打開(kāi)對(duì)應(yīng)的記錄集,然后AddNew(),添加新值,下一步Update(),最后對(duì)所有表進(jìn)行更新。

比如說(shuō)向user_data表寫(xiě)數(shù)據(jù):

m_DataSet.Open();//CRecordset::snapshot,strSQL1

if(!m_DataSet.IsEOF())

m_DataSet.MoveLast();

m_DataSet.AddNew();

m_DataSet.m_UserName=m_XingMing;

m_DataSet.m_Type=m_Item;

m_DataSet.m_Certificate=m_ZhengJianHao;

m_DataSet.m_Accounts=m_ZhangHao;

m_DataSet.m_Address=m_LianXiDiZhi;

m_DataSet.m_Telephone=m_LianXiDianHua;

m_DataSet.m_Time=m_KaiHuShiJian;

m_DataSet.m_Currency=m_CunRuJinE.Format();

密碼表需要寫(xiě)入帳號(hào)、密碼和掛失狀態(tài),余額表寫(xiě)入帳號(hào)和余額,寫(xiě)入方法同寫(xiě)入user_data一樣。更新如下:

if(m_BalanceSet.Update()&&m_DataSet.Update()&&m_UserPassword.Update())

MessageBox("開(kāi)戶(hù)成功!");

else

MessageBox("開(kāi)戶(hù)失敗!");

在我們的應(yīng)用程序中,一用到密碼,基本上都要調(diào)用密碼框,相應(yīng)的類(lèi)是CPassword,它的作用是將用戶(hù)輸入的密碼傳遞給全局變量transfer。代碼如下:

UpdateData(true);

if(m_Password1.GetLength()!=6||m_Password2.GetLength()!=6)

MessageBox("你確認(rèn)輸入6位密碼!");

elseif(m_Password1!=m_Password2)

MessageBox("請(qǐng)確認(rèn)兩次輸入的密碼一致!");

else

{

transfer=m_Password1;

CDialog::OnOK();

}

4總結(jié)

文中設(shè)計(jì)的銀行帳戶(hù)系統(tǒng)主要用VC和SQLServer2000,對(duì)于VC我們要掌握MFC的編程框架,以及一些類(lèi)的使用,這些類(lèi)主要是CDatabase類(lèi)、CRecordset類(lèi)、COleDateTime類(lèi)、COleCurrency類(lèi)、CString類(lèi)、CcomboBox類(lèi),而這里主要應(yīng)用的就是CRecordset類(lèi)。因?yàn)檫@個(gè)系統(tǒng)可以說(shuō)就是一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序,而文中使用的是ODBC編程,所以程序的編寫(xiě)也就應(yīng)用MFC提供的ODBC類(lèi)。在整個(gè)的設(shè)計(jì)過(guò)程中應(yīng)用的類(lèi)成員函數(shù)有:CRecordset類(lèi)中Open(),AddNew(),Edit(),Delete(),Update(),Close()Requery(),GetFieldValue(),IsEOF();Cdatabase類(lèi)中的Open(),Close();ColeDateTime類(lèi)中GetCurrentTime(),F(xiàn)ormat(),GetYear(),GetMonth(),GetDay(),GetHour(),GetMinute(),GetSecond();COleCurrency類(lèi)中的Format();CString類(lèi)中的Format();CcomboBox類(lèi)中的GetCurSel();這些函數(shù)有的需要帶一些復(fù)雜的參數(shù),而且還是多態(tài)的,設(shè)計(jì)過(guò)程中要多加留意。

參考文獻(xiàn)

[1]劉勝華.個(gè)性化銀行帳戶(hù)的設(shè)想.《金融電子化》2004年12月7日.第12期,總第111期

[2]陳愛(ài)云.銀行帳戶(hù)管理有待電子化.《金融電子化》2004年11月7日.第11期,總第110期

[3]黃明,梁旭,周紹斌.VisualC++信息系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)實(shí)例.北京:機(jī)械工業(yè)出版社,2005