Bank.h:
main.cpp
Bank.cpp
"<<endl; } } while(iChoice); } /* 功能:開戶 說明:在進入系統時,在讀入資料過程中,已經記錄了使用者數為N,在數組中相應下标為0~N-1 開戶時要添加一個使用者。僅僅要為下标為N的數組元素置值,并在成功之後令N++就可以。 賬号由系統自己主動生成(10001+序号),保證其連續,這樣在順序添加的時候,就保證了其有序。
*/ void Bank::openAccount() { if(N==upNum) { cout<<"銀行使用者數已經達到上限,不能再開戶"; return; } int acc; string nam; int pw; double bal; int sta; string id; string h; cout<<"正在開戶"<<endl; acc=10001+N; cout<<"賬号:"<<acc<<endl; cout<<"戶主姓名:"; cin>>nam; int iPass1, iPass2; cout<<"password:"; iPass1=inputPassword(); cout<<"确認password:"; iPass2=inputPassword(); if(iPass1==iPass2) { pw=iPass1; sta=0; cout<<"存入金額:"; cin>>bal; cout<<"身份證号:"; cin>>id; cout<<"家庭住址:"; cin>>h; users[N].setUser(acc, nam, pw, bal, sta,id,h); N++; SaveUserLog(1,N); cout<<"成功開戶!"<<endl; } else { cout<<"兩次password不一緻。未成功開戶。"<<endl; } } /* 功能:登出賬戶 說明:找到賬戶,并将其狀态改為2-登出就可以。
登出前應該檢查剩餘金額,應該先取款再登出 */ void Bank::cancelAccount() { int who; who = getUser();//查找到該賬号在數組中相應的下标 if(who>=0) //說明id賬戶存在 { users[who].showName(); if(users[who].passwordIsRight()) { users[who].showBalance("剩餘金額"); cout<<"确認銷戶(y/n)?"; if(tolower(getchar())=='y') { users[who].showBalance("銷戶成功。本次取款金額為"); users[who].balance=0; users[who].status=2; //狀态變為登出 } else { cout<<"你取消了操作,銷戶失敗。"<<endl; } fflush(stdin);//清除了getchar()時在鍵盤緩存中的遺留。以免影響興許操作 } } } /* 功能:存款 說明:須要保證賬戶存在,且處于正常狀态 */ void Bank::save() { int who; double money; who = getUser();//依據賬号查詢使用者,傳回使用者的下标 if(who>=0)//說明id賬戶存在 { if(users[who].status==0) { users[who].showName(); cout<<"輸入存款額:"; cin>>money; users[who].balance+=money; users[who].showBalance("存款後,您有"); } else if(users[who].status==1) { cout<<"該使用者處于挂失狀态,存款失敗。"<<endl; } else { cout<<"該使用者已經銷戶,存款失敗。"<<endl; } } return; } /* 功能:取款 說明:須要保證賬戶存在,且處于正常狀态,另外。剩餘金額要足夠取 */ void Bank::withdraw() { int who; double money; who = getUser(); if(who>=0) { if(users[who].isNormalUser()) { users[who].showName(); if(users[who].passwordIsRight()) { cout<<"輸入取款額:"; cin>>money; if(money>users[who].balance) { cout<<"剩餘金額不足,取款失敗!
"<<endl; } else { users[who].balance-=money; users[who].showBalance("取款後,還有"); } } } } return; } /* 功能:查詢賬戶 說明:顯示賬戶資訊 */ void Bank::showAccount() { int who; string sta[3]= {"正常","挂失","已經銷戶"}; who = getUser(); if(who>=0) { users[who].showName(); if(users[who].passwordIsRight()) { users[who].showBalance("剩餘金額"); cout<<"狀态:"<<sta[users[who].status]<<endl; } } return; } /* 功能:轉賬 說明:須要保證兩個賬戶都存在,且處于正常狀态,另外,轉出賬戶的剩餘金額要足夠 */ void Bank::transferAccounts() { int whoout, whoin; double money; cout<<"轉出自"; whoout = getUser(); if(whoout>=0) { if(users[whoout].isNormalUser()) { users[whoout].showName(); if(users[whoout].passwordIsRight()) { cout<<"輸入轉賬金額:"; cin>>money; if(money>users[whoout].balance) { cout<<"剩餘金額不足,轉賬失敗。"<<endl; } else { cout<<"轉出到"; whoin = getUser(); if(whoin>=0) { if(users[whoin].isNormalUser()) { users[whoout].balance-=money; users[whoin].balance+=money; users[whoout].showBalance("轉賬後,您還有"); } } } } } } return; } /* 功能:挂失賬戶 */ void Bank::reportLoss() { int who; who = getUser(); //依據賬号查詢使用者,傳回使用者的下标 if(who>=0) //說明id賬戶存在 { users[who].showName(); if(users[who].passwordIsRight()) { if(users[who].status==0) { users[who].status=1; cout<<"挂失成功"<<endl; } else if(users[who].status==1) { cout<<"該賬戶已經處于挂失狀态"<<endl; } else { cout<<"該賬戶已銷戶,不能挂失"<<endl; } } } return ; } /* 功能:解除挂失 */ void Bank::cancelLoss() { int who; who = getUser(); if(who>=0) { users[who].showName(); if(users[who].passwordIsRight()) { if(users[who].status==0) { cout<<"該賬戶處于正常狀态,不須要解除挂失"<<endl; } else if(users[who].status==1) { users[who].status=0; cout<<"解除挂失成功"<<endl; } else { cout<<"該賬戶已銷戶,操作無效"<<endl; } } } return; } /* 功能:改動password */ void Bank::updatePassword() { int who; int iPass1, iPass2; who = getUser(); if(who>=0) { users[who].showName(); if(users[who].passwordIsRight()) { cout<<"新password:"; iPass1=inputPassword(); cout<<"确認password:"; iPass2=inputPassword(); if(iPass1==iPass2) { users[who].password=iPass1; cout<<"改動成功!"<<endl; } else { cout<<"兩次輸入不同,改動失敗。"<<endl; } } } return; } /* 功能:輸入賬号查詢使用者,傳回使用者在數組中的下标 入口參數:要查詢使用者的賬号 傳回值:假設該使用者存在。傳回該使用者在數組中的下标,否則,傳回一個負數(-1) 說明: 由賬号自己主動産生,使按賬号有序,本子產品採用二分查找 */ int Bank::getUser() { int id; cout<<"賬号:"; cin>>id; int index=-1; int low=0, high=N-1, mid; while(low<=high) { mid = (low+high)/2; if(users[mid].account==id) { index=mid; break; } else if (users[mid].account>id) high=mid-1; else low=mid+1; } if (index<0) cout<<"該使用者不存在。本次操作失敗!"<<endl; return index; } /* 功能:下面兩個函數為在使用日志生成時的驗證資訊調用` */ bool Bank::passwordIsRight() { int iPass; bool right = true; cout<<"輸入password:"; iPass=inputPassword(); if(iPass!=password) { right = false; cout<<"輸入password錯誤。不能繼續操作!"<<endl; } return right; } bool Bank::isNormalUser() { bool normal = true; if(status!=0) { normal = false; cout<<"該賬戶處于"<<(status==1?"挂失":"銷戶")<<"狀态。不能繼續操作..."<<endl; } return normal; }
User.cpp
work.cpp
magazine.cpp
"; exit(1); } outfile<<users[acc].get_accName()<<" "<<time<<" "<<state<<endl; outfile.close(); delete typen; }
初始界面:

操作開戶界面:
操作存款界面:
操作轉賬界面:
剩餘功能不一而列。。
。
。未完待續!
使用者記錄檔記錄:
管理者資料庫:
使用者資料庫: