銀行帳戶系統設計論文

時間:2022-09-17 06:01:00

導語:銀行帳戶系統設計論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

銀行帳戶系統設計論文

摘要本文通過設計一個簡單的銀行帳戶系統軟件來分析銀行帳戶系統的設計思想。該軟件實現了帳戶管理的最基本功能,其中包括開戶、銷戶、辦卡、換卡、掛失卡、存款、取款、交易記錄查詢及打印、客戶信息修改及打印、客戶密碼修改、管理員密碼修改、利率設置等。

關鍵詞銀行帳戶系統;VC;ODBC;SQLServer2000

1小型銀行帳戶系統概述

隨著銀行行業的發展,銀行的業務發展也逐漸地走向了多樣化,業務類型逐漸增多,使銀行的服務范圍逐漸地變廣,隨著經濟全球化的發展很多銀行已走向了國際化,不僅為國內的眾多客戶提供了更優質服務,還使外國公民從中獲得更多益處。

本系統主要實現了開戶、銷戶、用戶信息修改、存款、取款、辦卡、掛失卡、數據查詢(用戶信息查詢,及交易記錄查詢)。根據這些功能及系統設計方面的考慮,系統采用模塊化設計,各模塊分別實現為:

“管理用戶模塊”包括:

開戶:由客戶提供姓名、身份證號、聯系地址、聯系電話、存入金額、初始密碼等。開戶時間有系統自動生成。

銷戶:提供帳號用于銷戶,系統顯示客戶姓名及余額以便確認。

數據查詢:查詢客戶存取款記錄。

用戶信息查詢及修改:通過帳號、卡號、證件號進行查詢。系統顯示客戶信息并可修改。

“管理員模塊”包括:

業務設置:利率等相關業務設置。

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

“卡管理模塊”包括:

辦卡:輸入帳號信息,生成卡號,并由客戶提供密碼。

換卡:輸入帳號信息,生成新卡號,并由客戶提供密碼。

掛失卡:由客戶提供卡號及身份證號(此為真實用戶掛失依據)。

“存取操作模塊”包括:

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

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

同時,系統還實現了客戶信息及客戶交易記錄的打印功能。

2數據庫設計

根據本系統實現的功能,我們需要建立5個表,分別是用戶數據表user_data,用戶密碼表user_password,交易記錄表user_exchange,用戶余額表user_balance,管理員密碼表admin_password。user_data表用于開戶時,前臺應用將用戶開戶時所需要的客戶信息寫入此表。

其中包括的數據有用戶名、證件號、聯系地址、聯系電話、業務類型、存入金額、開戶時間、帳號、卡號,共9個數據。為了便于簡化前臺應用與數據庫的存取,其數據類型都設為字符型(char),但不影響正常的程序功能與精度。如user_data建立如表1所示。

表1user_data表

列名數據類型長度允許空

用戶名char15

證件號char20

聯系地址char80

聯系電話char15

業務類型char15

存入金額char15

開戶時間char20

帳號char15

卡號char15允許

創建user_data表的SQL語句為:

USEBankManager

CREATETABLEuser_data

(

用戶名char(15)NOTNULL,

證件號char(20)NOTNULL,

聯系地址char(80)NOTNULL,

聯系電話char(15)NOTNULL,

業務類型char(15)NOTNULL,

存入金額char(15)NOTNULL,

開戶時間char(20)NOTNULL,

帳號char(15)NOTNULL,

卡號char(15)NULL

)

GO

3各模塊代碼實現

因為各模塊的代碼實現基本上都是在用CRecordset類,所以在這里只給出具有代表性的代碼實現的分析,其它模塊的代碼不再講述。

先來分析登錄代碼:

登錄代碼的第一個語句為:

UpdateData(true);

這條語句是將登錄對話框中的數據傳遞給Login類中對應綁定的String變量。這樣可以對用戶輸入的用戶名、密碼、數據源等信息進行分析處理。

然后我們需要判斷用戶是否輸入了用戶名、密碼和數據源,如果沒有輸入提示用戶輸入。代碼如下:

if(m_UserName==_T(""))

{

MessageBox("請輸入用戶名!");

return;

}

if(m_Password==_T(""))

{

MessageBox("請輸入密碼!");

return;

}

DataSource="ODBC;DSN=";

DataSource+=m_DataSource;

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

{

MessageBox("請正確輸入數據源!");

return;

}

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

如果是管理員登錄,就查找admin_password表,要訪問Admin_password表,我們需要先建立個CRecordset類:

CRecordsetm_PasswordSet(&m_Database);

用前面打開的數據庫連接構造CRecordset類。

然后必須打開此記錄集,打開時,第一個參數指定記錄集以向前只讀方式打開,第二項用SQL語句指定返回給記錄集的列,代碼如下:

CStringstrSQL;

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

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

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

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

if(m_PasswordSet.IsEOF())

{

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

m_PasswordSet.Close();

m_Database.Close();

return;

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

CStringtempPWD;

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

if(pare(m_Password))

{

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

m_PasswordSet.Close();

m_Database.Close();

return;

}

如果是作為用戶登錄,就查詢user_password表中的卡號和卡密碼,這是先建立記錄集類,這次我們建立的是我們自己定義的派生自CRecordset類的CuserPasswordSet類,此類中的數據與user_data表中的數據對應,已經綁定好。打開方式我們選CRecordset::snapshot,即快照方式,因為我們在后面要對數據庫中綁定的數據進行查詢(使用Requery()函數),其實我們也是可以用前面查詢admin_password表的方法的。

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

CUserPasswordSetm_PasswordSet(&m_Database);

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

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

下一步我們查詢user_data表中的掛失狀態,看看是否此卡已經掛失,若掛失就return。

m_PasswordSet.Requery();

if(m_PasswordSet.status==TRUE)

{

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

m_PasswordSet.Close();

m_Database.Close();

return;

}

然后就是確認密碼是否正確了,與前面不同的是用m_PasswordSet.m_CardPassword!=m_Password進行判斷,m_CardPassword與數據庫中的卡密碼對應。

如果用戶輸入的各項數據都正確,就銷毀登錄框,進入主界面。

CDialog::OnOK();

如果用戶按了“取消”,退出整個程序,實現是在BankManager.cpp中的InitInstance()中完成的。如下:

Login*m_pLogin=newLogin();

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

{

returnfalse;

}

接下來我們分析開戶模塊:

開戶時我們需要在user_data表中添加數據,所以要用記錄集類中的AddNew()和Update()函數。一些代碼實現與登錄框的很相近,我們就主要說差別的地方。

首先我們檢測用戶是否輸入了所有數據,并且檢測存入金額是否合法:

if(m_CunRuJinE<COleCurrency(0,0))

{

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

return;

}

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

下一步取得用戶的帳號密碼給全局變量transfer:

CPasswordm_Password;

if(IDOK!=m_Password.DoModal())

return;

然后整理要存入數據庫的各變量值,大部分是由用戶輸入的,而卡號和開戶時間是由系統生成的。

根據用戶的輸入,將業務類型記錄到m_Item變量中。

開戶時間的生成比較簡單,建立了ColeDateTime后,獲得當前時間并格式化成字符串后即可:

COleDateTimenow;

now=COleDateTime::GetCurrentTime();

m_KaiHuShiJian=now.Format();

帳號利用時間生成(后來的卡號也是),前面加個A,是Accounts的第一個字母,共15位。

最后我們要把數據寫入各個表先打開對應的記錄集,然后AddNew(),添加新值,下一步Update(),最后對所有表進行更新。

比如說向user_data表寫數據:

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();

密碼表需要寫入帳號、密碼和掛失狀態,余額表寫入帳號和余額,寫入方法同寫入user_data一樣。更新如下:

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

MessageBox("開戶成功!");

else

MessageBox("開戶失敗!");

在我們的應用程序中,一用到密碼,基本上都要調用密碼框,相應的類是CPassword,它的作用是將用戶輸入的密碼傳遞給全局變量transfer。代碼如下:

UpdateData(true);

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

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

elseif(m_Password1!=m_Password2)

MessageBox("請確認兩次輸入的密碼一致!");

else

{

transfer=m_Password1;

CDialog::OnOK();

}

4總結

文中設計的銀行帳戶系統主要用VC和SQLServer2000,對于VC我們要掌握MFC的編程框架,以及一些類的使用,這些類主要是CDatabase類、CRecordset類、COleDateTime類、COleCurrency類、CString類、CcomboBox類,而這里主要應用的就是CRecordset類。因為這個系統可以說就是一個數據庫應用程序,而文中使用的是ODBC編程,所以程序的編寫也就應用MFC提供的ODBC類。在整個的設計過程中應用的類成員函數有:CRecordset類中Open(),AddNew(),Edit(),Delete(),Update(),Close()Requery(),GetFieldValue(),IsEOF();Cdatabase類中的Open(),Close();ColeDateTime類中GetCurrentTime(),Format(),GetYear(),GetMonth(),GetDay(),GetHour(),GetMinute(),GetSecond();COleCurrency類中的Format();CString類中的Format();CcomboBox類中的GetCurSel();這些函數有的需要帶一些復雜的參數,而且還是多態的,設計過程中要多加留意。

參考文獻

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

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

[3]黃明,梁旭,周紹斌.VisualC++信息系統設計與開發實例.北京:機械工業出版社,2005