銀行帳戶系統(tǒng)設(shè)計(jì)研究論文
時(shí)間:2022-12-16 10:10:00
導(dǎo)語(yǔ):銀行帳戶系統(tǒng)設(shè)計(jì)研究論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要本文通過設(shè)計(jì)一個(gè)簡(jiǎn)單的銀行帳戶系統(tǒng)軟件來(lái)分析銀行帳戶系統(tǒng)的設(shè)計(jì)思想。該軟件實(shí)現(xiàn)了帳戶管理的最基本功能,其中包括開戶、銷戶、辦卡、換卡、掛失卡、存款、取款、交易記錄查詢及打印、客戶信息修改及打印、客戶密碼修改、管理員密碼修改、利率設(shè)置等。
關(guān)鍵詞銀行帳戶系統(tǒng);VC;ODBC;SQLServer2000
1小型銀行帳戶系統(tǒng)概述
隨著銀行行業(yè)的發(fā)展,銀行的業(yè)務(wù)發(fā)展也逐漸地走向了多樣化,業(yè)務(wù)類型逐漸增多,使銀行的服務(wù)范圍逐漸地變廣,隨著經(jīng)濟(jì)全球化的發(fā)展很多銀行已走向了國(guó)際化,不僅為國(guó)內(nèi)的眾多客戶提供了更優(yōu)質(zhì)服務(wù),還使外國(guó)公民從中獲得更多益處。
本系統(tǒng)主要實(shí)現(xiàn)了開戶、銷戶、用戶信息修改、存款、取款、辦卡、掛失卡、數(shù)據(jù)查詢(用戶信息查詢,及交易記錄查詢)。根據(jù)這些功能及系統(tǒng)設(shè)計(jì)方面的考慮,系統(tǒng)采用模塊化設(shè)計(jì),各模塊分別實(shí)現(xiàn)為:
“管理用戶模塊”包括:
開戶:由客戶提供姓名、身份證號(hào)、聯(lián)系地址、聯(lián)系電話、存入金額、初始密碼等。開戶時(shí)間有系統(tǒng)自動(dòng)生成。
銷戶:提供帳號(hào)用于銷戶,系統(tǒng)顯示客戶姓名及余額以便確認(rèn)。
數(shù)據(jù)查詢:查詢客戶存取款記錄。
用戶信息查詢及修改:通過帳號(hào)、卡號(hào)、證件號(hào)進(jìn)行查詢。系統(tǒng)顯示客戶信息并可修改。
“管理員模塊”包括:
業(yè)務(wù)設(shè)置:利率等相關(guān)業(yè)務(wù)設(shè)置。
管理員密碼修改:修改登錄的管理員密碼。
“卡管理模塊”包括:
辦卡:輸入帳號(hào)信息,生成卡號(hào),并由客戶提供密碼。
換卡:輸入帳號(hào)信息,生成新卡號(hào),并由客戶提供密碼。
掛失卡:由客戶提供卡號(hào)及身份證號(hào)(此為真實(shí)用戶掛失依據(jù))。
“存取操作模塊”包括:
存款:提供帳號(hào)或卡號(hào)以及存款金額,操作完成后顯示余額。
取款:提供帳號(hào)或卡號(hào)以及取款金額,操作完成后顯示余額。
同時(shí),系統(tǒng)還實(shí)現(xiàn)了客戶信息及客戶交易記錄的打印功能。
2數(shù)據(jù)庫(kù)設(shè)計(jì)
根據(jù)本系統(tǒng)實(shí)現(xiàn)的功能,我們需要建立5個(gè)表,分別是用戶數(shù)據(jù)表user_data,用戶密碼表user_password,交易記錄表user_exchange,用戶余額表user_balance,管理員密碼表admin_password。user_data表用于開戶時(shí),前臺(tái)應(yīng)用將用戶開戶時(shí)所需要的客戶信息寫入此表。
其中包括的數(shù)據(jù)有用戶名、證件號(hào)、聯(lián)系地址、聯(lián)系電話、業(yè)務(wù)類型、存入金額、開戶時(shí)間、帳號(hào)、卡號(hào),共9個(gè)數(shù)據(jù)。為了便于簡(jiǎn)化前臺(tái)應(yīng)用與數(shù)據(jù)庫(kù)的存取,其數(shù)據(jù)類型都設(shè)為字符型(char),但不影響正常的程序功能與精度。如user_data建立如表1所示。
表1user_data表
列名數(shù)據(jù)類型長(zhǎng)度允許空
用戶名char15
證件號(hào)char20
聯(lián)系地址char80
聯(lián)系電話char15
業(yè)務(wù)類型char15
存入金額char15
開戶時(shí)間char20
帳號(hào)char15
卡號(hào)char15允許
創(chuàng)建user_data表的SQL語(yǔ)句為:
USEBankManager
CREATETABLEuser_data
(
用戶名char(15)NOTNULL,
證件號(hào)char(20)NOTNULL,
聯(lián)系地址char(80)NOTNULL,
聯(lián)系電話char(15)NOTNULL,
業(yè)務(wù)類型char(15)NOTNULL,
存入金額char(15)NOTNULL,
開戶時(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類,所以在這里只給出具有代表性的代碼實(shí)現(xiàn)的分析,其它模塊的代碼不再講述。
先來(lái)分析登錄代碼:
登錄代碼的第一個(gè)語(yǔ)句為:
UpdateData(true);
這條語(yǔ)句是將登錄對(duì)話框中的數(shù)據(jù)傳遞給Login類中對(duì)應(yīng)綁定的String變量。這樣可以對(duì)用戶輸入的用戶名、密碼、數(shù)據(jù)源等信息進(jìn)行分析處理。
然后我們需要判斷用戶是否輸入了用戶名、密碼和數(shù)據(jù)源,如果沒有輸入提示用戶輸入。代碼如下:
if(m_UserName==_T(""))
{
MessageBox("請(qǐng)輸入用戶名!");
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;
}
如果用戶輸入了用戶名、密碼、數(shù)據(jù)源信息,我們還需要根據(jù)管理員靜態(tài)變量Admin,判斷用戶是作為管理員登錄還是用戶登錄。
如果是管理員登錄,就查找admin_password表,要訪問Admin_password表,我們需要先建立個(gè)CRecordset類:
CRecordsetm_PasswordSet(&m_Database);
用前面打開的數(shù)據(jù)庫(kù)連接構(gòu)造CRecordset類。
然后必須打開此記錄集,打開時(shí),第一個(gè)參數(shù)指定記錄集以向前只讀方式打開,第二項(xiàng)用SQL語(yǔ)句指定返回給記錄集的列,代碼如下:
CStringstrSQL;
strSQL.Format("select*fromadmin_passwordwhere[管理員]=''''%s''''",m_UserName);
m_PasswordSet.Open(CRecordset::forwardOnly,strSQL);
在此,我們忽略了對(duì)Admin變量的判斷。
下一步判斷是否存在此管理員,通過記錄集類的IsEOF()可以知道返回的記錄集是否有記錄,沒有說(shuō)明不存在此管理員,那就return。
if(m_PasswordSet.IsEOF())
{
MessageBox("沒有此管理員!");
m_PasswordSet.Close();
m_Database.Close();
return;如果有記錄我們需要判斷管理員密碼是否正確,首先要先把密碼取出,然后跟用戶的輸入進(jìn)行比較。
CStringtempPWD;
m_PasswordSet.GetFieldValue("密碼",tempPWD);
if(pare(m_Password))
{
MessageBox("密碼錯(cuò)誤,請(qǐng)正確輸入管理員名和密碼!");
m_PasswordSet.Close();
m_Database.Close();
return;
}
如果是作為用戶登錄,就查詢user_password表中的卡號(hào)和卡密碼,這是先建立記錄集類,這次我們建立的是我們自己定義的派生自CRecordset類的CuserPasswordSet類,此類中的數(shù)據(jù)與user_data表中的數(shù)據(jù)對(duì)應(yīng),已經(jīng)綁定好。打開方式我們選CRecordset::snapshot,即快照方式,因?yàn)槲覀冊(cè)诤竺嬉獙?duì)數(shù)據(jù)庫(kù)中綁定的數(shù)據(jù)進(jìn)行查詢(使用Requery()函數(shù)),其實(shí)我們也是可以用前面查詢admin_password表的方法的。
strSQL.Format("select*fromuser_passwordwhere[卡號(hào)]=''''%s''''",m_UserName);
CUserPasswordSetm_PasswordSet(&m_Database);
m_PasswordSet.Open(CRecordset::snapshot,strSQL);
然后我們看看是否存在此卡號(hào),與前面的方法相同。
下一步我們查詢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)。
如果用戶輸入的各項(xiàng)數(shù)據(jù)都正確,就銷毀登錄框,進(jìn)入主界面。
CDialog::OnOK();
如果用戶按了“取消”,退出整個(gè)程序,實(shí)現(xiàn)是在BankManager.cpp中的InitInstance()中完成的。如下:
Login*m_pLogin=newLogin();
if(IDCANCEL==m_pLogin->DoModal())
{
returnfalse;
}
接下來(lái)我們分析開戶模塊:
開戶時(shí)我們需要在user_data表中添加數(shù)據(jù),所以要用記錄集類中的AddNew()和Update()函數(shù)。一些代碼實(shí)現(xiàn)與登錄框的很相近,我們就主要說(shuō)差別的地方。
首先我們檢測(cè)用戶是否輸入了所有數(shù)據(jù),并且檢測(cè)存入金額是否合法:
if(m_CunRuJinE<COleCurrency(0,0))
{
MessageBox("輸入的“存入金額”小于零!");
return;
}
然后查看“證件號(hào)”是否使用過,若使用過就提示并返回,方法和查看前面的卡號(hào)是否掛失等同。
下一步取得用戶的帳號(hào)密碼給全局變量transfer:
CPasswordm_Password;
if(IDOK!=m_Password.DoModal())
return;
然后整理要存入數(shù)據(jù)庫(kù)的各變量值,大部分是由用戶輸入的,而卡號(hào)和開戶時(shí)間是由系統(tǒng)生成的。
根據(jù)用戶的輸入,將業(yè)務(wù)類型記錄到m_Item變量中。
開戶時(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ù)寫入各個(gè)表先打開對(duì)應(yīng)的記錄集,然后AddNew(),添加新值,下一步Update(),最后對(duì)所有表進(jìn)行更新。
比如說(shuō)向user_data表寫數(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();
密碼表需要寫入帳號(hào)、密碼和掛失狀態(tài),余額表寫入帳號(hào)和余額,寫入方法同寫入user_data一樣。更新如下:
if(m_BalanceSet.Update()&&m_DataSet.Update()&&m_UserPassword.Update())
MessageBox("開戶成功!");
else
MessageBox("開戶失敗!");
在我們的應(yīng)用程序中,一用到密碼,基本上都要調(diào)用密碼框,相應(yīng)的類是CPassword,它的作用是將用戶輸入的密碼傳遞給全局變量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ì)的銀行帳戶系統(tǒng)主要用VC和SQLServer2000,對(duì)于VC我們要掌握MFC的編程框架,以及一些類的使用,這些類主要是CDatabase類、CRecordset類、COleDateTime類、COleCurrency類、CString類、CcomboBox類,而這里主要應(yīng)用的就是CRecordset類。因?yàn)檫@個(gè)系統(tǒng)可以說(shuō)就是一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序,而文中使用的是ODBC編程,所以程序的編寫也就應(yīng)用MFC提供的ODBC類。在整個(gè)的設(shè)計(jì)過程中應(yīng)用的類成員函數(shù)有:CRecordset類中Open(),AddNew(),Edit(),Delete(),Update(),Close()Requery(),GetFieldValue(),IsEOF();Cdatabase類中的Open(),Close();ColeDateTime類中GetCurrentTime(),F(xiàn)ormat(),GetYear(),GetMonth(),GetDay(),GetHour(),GetMinute(),GetSecond();COleCurrency類中的Format();CString類中的Format();CcomboBox類中的GetCurSel();這些函數(shù)有的需要帶一些復(fù)雜的參數(shù),而且還是多態(tài)的,設(shè)計(jì)過程中要多加留意。
參考文獻(xiàn)
[1]劉勝華.個(gè)性化銀行帳戶的設(shè)想.《金融電子化》2004年12月7日.第12期,總第111期
[2]陳愛云.銀行帳戶管理有待電子化.《金融電子化》2004年11月7日.第11期,總第110期
[3]黃明,梁旭,周紹斌.VisualC++信息系統(tǒng)設(shè)計(jì)與開發(fā)實(shí)例.北京:機(jī)械工業(yè)出版社,2005