//
// main.cpp
// 銀行管理系統
// Created by 丁小未 on 13-7-23.
// Copyright (c) 2013年 dingxiaowei. All rights reserved.
//項目:銀行管理系統
//系統實作的主要有管理,取款機管理,使用者查詢等功能:
//*管理子產品:存款、取款、開戶、銷戶、修改資訊、辦卡、挂失卡;
//*使用者查詢子產品;
//*取款機資訊管理子產品:管理者管理查詢和維護、客戶查詢和取款等功能;
//可以考慮利率
#include <iostream>
using namespace std;
#include <string>
#include <fstream>
#include <time.h>
#include <vector>
#define MAX 20
class Person
{
public:
string cardNum;//卡号
string cardName;//使用者名
double money;//餘額
string beginTime;//開戶日期
bool useState=false;//是否挂失
/*******使用者的功能***********/
//查詢我目前使用者的賬戶餘額
double SelectMoney()
{
return money;
}
//選擇挂失和解鎖卡
bool ChooseUseState(bool f)
useState = f;
return useState;
//取錢
double GetMoney(double m)
if (m>money) {
cout<<"您的餘額不足!"<<endl;
}
return money -= m;
//存錢
double AddMoney(double m)
return money += m;
//構造函數
Person(string cardnum,string cardname,double money,string begintime,bool usestate)
this->cardNum = cardnum;
this->cardName = cardname;
this->money = money;
this->beginTime = begintime;
this->useState = usestate;
//預設構造函數
Person(){};
//運算符重載
// Person&person = (const Person &other)
// {
//
// }
};
int total=0;//記錄總數
Person person[MAX];//定義一個person數組
double price=0.1;//預設匯率
/*******************函數申明******************************************/
void set_psw();//設定密碼
int psw_check();//密碼驗證
void Show_menu();//顯示菜單
int get_managermenu_choice();//接受管理者菜單選擇
void PrintPersonTitle();//列印頭資訊
char* GetTime();//擷取系統目前時間
void Show_Iden_menu();//身份選擇菜單
int get_Idemenu_choice();//接受身份菜單選擇
void inputInfile(Person person[],int n);//将類數組寫入檔案
void Show_PersonMenu();//顯示普通使用者功能菜單
void Show_Managermenu();//顯示管理者功能菜單
int get_personmenu_choice();//普通使用者接受功能菜單
int findPerson(Person *person,int n,string findName);//查找名字傳回序列号
bool ISManager(string &name,string &pwd);//驗證管理者身份
bool ISPerson(string &name,string &pwd);//驗證使用者資訊
/**********************************************************************/
//查找名字傳回序列号
int findPerson(Person *person,int n,string findName)
int i;
int m=-1;
for (i=0; i<n; i++) {
if (person[i].cardName == findName) {
m=i;
break;
return m;//傳回person的下标
}
//将類數組寫入檔案,數組本身就是位址傳遞
void inputInfile(Person person[],int &n)
ofstream onfile;//寫入檔案類
onfile.open("Person.txt");
for (int i=0; i<n; i++) {
onfile<<person[i].cardNum<<" "<<person[i].cardName<<" "<<person[i].money<<" "<<person[i].beginTime<<" "<<person[i].useState<<"\n"<<endl;
onfile.close();
//管理者共有繼承自普通人
class Manager:public Person
//開戶
void addPerson(Person person[],int &n)
char f='y';
string sTemp;
char *t=GetTime();
ofstream onfile;//寫入檔案
onfile.open("person.txt");
do {
cout<<"輸入卡号:";
cin>>sTemp;
onfile<<sTemp<<" ";
person[n].cardNum = sTemp;
cout<<"請輸入使用者名:";
onfile<<sTemp;
person[n].cardName = sTemp;
onfile<<0<<" ";//餘額預設是0
person[n].money = 0;
sTemp = t;
onfile<<sTemp<<" ";//開戶時間
person[n].beginTime = sTemp;
onfile<<0;//0代表沒有挂失,正常使用
person[n].useState = false;
onfile<<"\n";
++n;
cout<<"還要繼續開戶嗎?(y/n)";
cin>>f;
} while (f=='y');
//銷戶
void deletePerson(Person person[],int &n,string delname)
int i;
int j=0;
for (i = 0; i<n; i++) {
if (person[i].cardName == delname) {
for (j=i; j<n-1; j++) {
person[j].cardName = person[j+1].cardName;
person[j].cardNum = person[j+1].cardNum;
person[j].money = person[j+1].money;
person[j].beginTime = person[j+1].beginTime;
person[j].useState = person[j+1].useState;
}
n--;
i--;
}
//從寫入檔案
ofstream onfile;//寫入檔案類
onfile.open("Person.txt");
for (int i=0; i<n; i++) {
onfile<<person[i].cardNum<<" "<<person[i].cardName<<" "<<person[i].money<<" "<<person[i].beginTime<<" "<<person[i].useState<<"\n"<<endl;
onfile.close();
//修改卡的資訊
void alterPerson(string name,Person person[],int &n)
int i=findPerson(person,total, name);
if(i<0)
{
cout<<"對不起,沒有該賬戶!"<<endl;
else
double _money;
string sTemp;
int jj;
cout<<"從新修改賬戶資訊:"<<endl;
cout<<"修改賬戶号:";
person[i].cardNum = sTemp;
cout<<"修改賬戶名:";
person[i].cardName = sTemp;
cout<<"修改賬戶餘額:";
cin>>_money;
person[i].money = _money;
cout<<"修改挂失/解鎖(1.挂失 2.解鎖)";
cin>>jj;
if (jj==1) {
person[i].useState = true;
else
{
person[i].useState = false;
//将資訊重寫入文檔
//選擇某使用者卡的挂失和解鎖
void chooseUseFunction(string name,Person person[],int &n)
//使用者查詢(查詢所有的卡資訊)
void showAllCard(Person person[],int &n)
cout<<"目前有"<<n<<"條記錄:"<<endl;
PrintPersonTitle();
cout<<person[i].cardNum<<" "<<person[i].cardName<<" "<<person[i].money<<" "<<person[i].beginTime<<" "<<person[i].useState<<endl;
/*********************************************************************/
void IdMenu(Manager &manager);//身份菜單響應
void managermenu(Manager &manager);//管理者菜單相應
void personmenu();//使用者菜單
/********************函數定義*****************************************/
//擷取目前系統時間
char* GetTime()
time_t now;
struct tm *timenow;
time(&now);
timenow = localtime(&now);
char *p = asctime(timenow);
return p;
//身份菜單響應
void IdMenu(Manager &manager)
Show_Iden_menu();//菜單顯示
switch (get_Idemenu_choice())
case 1:
//進入管理者身份驗證
string n,s;
cout<<"請輸入管理者賬号:";
cin>>n;
cout<<"請輸入管理者密碼:";
cin>>s;
if (ISManager(n, s)) {
managermenu(manager);
cout<<"驗證錯誤"<<endl;
case 2:
//進入客戶身份驗證
cout<<"請輸入賬戶名:";
cout<<"請輸入賬戶密碼:";
// if (ISManager(n, s)) {
// managermenu(manager);
// }
if (ISPerson(n,s)) {
cout<<"驗證使用者成功"<<endl;
else{
cout<<"驗證使用者失敗";
default:
cout<<"選擇錯誤"<<endl;
//驗證客戶資訊
bool ISPerson(string &name,string &pwd)
int i=0;
string password="dingxiaowei";
for (i=0; i<total; i++) {
if(person[i].cardName == name&&password==pwd);
return true;
if (i==total) {
return false;
//驗證管理者身份
bool ISManager(string &name,string &pwd)
string n,p;
ifstream infile;//讀取檔案類
infile.open("manager.txt");
if(infile.is_open())
infile>>n>>p;
else
cout<<"打開失敗!";
if (n==name&&p==pwd)
return true;
//管理者菜單相應
void managermenu(Manager &manager)
bool flag = false;
do
Show_Managermenu();//顯示菜單
switch (get_managermenu_choice()) {
case 1://增加記錄
manager.addPerson(person,total);
break;
case 2://删除記錄
cout<<"請輸入您要銷戶的名字:";
string name;
cin>>name;
manager.deletePerson(person,total, name);
case 3://查詢記錄
cout<<"請輸入您要修改的賬戶名:";
manager.alterPerson(name, person, total);
case 4://修改記錄
cout<<"請輸入您修改挂失或解鎖的賬戶名:";
manager.chooseUseFunction(name,person,total);
case 5://查詢所有記錄
manager.showAllCard(person,total);
case 0:
flag = true;
IdMenu(manager);//傳回上一級
default:
printf("*************************\n");
printf(" 歡迎再次使用本系統,謝謝 \n");
}while (flag==false);
//列印個體使用者頭資訊
void PrintPersonTitle()
cout<<"--------------------------------------------------------\n";
cout<<" 卡号 使用者名 餘額 開戶日期 是否挂失 \n";
//設定密碼
void set_psw()
string psw_set ,psw_check;
cout<<"You must set password first!\n";
cin>>psw_set;
cout<<"conform password:";
cin>>psw_check;
if(psw_check == psw_check)
cout<<"set password success!\n";
cout<<"error!\n";
while(psw_check != psw_set);
onfile.open("password.txt",ios::out);
onfile<<psw_set;
//密碼驗證
int psw_check()
ofstream onfile;//檔案寫入類
unsigned int j=1;
string pword;
string password;
infile.open("password.txt",ios::in);
if (!infile.is_open())//如果打開失敗,則重新設定密碼
set_psw();//重新設定密碼
//取值
infile>>password;
//打開成功驗證密碼
do {
cout<<"輸入密碼,你将有三次機會:"<<j<<"/3次機會"<<endl;
cin>>pword;
j++;
} while (password != pword && j<=3);
if (j<=3) {
cout<<"恭喜登陸成功!"<<endl;
return 1;//打開成功
cout<<"你已經輸入了三次了,打開檔案失敗!"<<endl;
return 0;
//身份選擇菜單
void Show_Iden_menu()
cout<<">>>>>>>>>>>>>>>>>歡迎您使用銀行管理系統<<<<<<<<<<<<<<<<<<<<\n";
cout<<"*******************************************************\n";
cout<<" 1.銀行管理者 | 2.普通使用者 \n";
//顯示管理者菜單
void Show_Managermenu()
cout<<">>>>>>>>>>>>>>>歡迎您使用銀行管理者管理系統<<<<<<<<<<<<<<<<\n";
cout<<"******************************************************\n";
cout<<" 1.開戶 | 2.銷戶 \n";
cout<<" 3.修改卡号資訊 | 4.挂失/解鎖 \n";
cout<<" 5.查詢所有記錄 | 0.傳回上級 \n";
//顯示普通使用者功能菜單
void Show_PersonMenu()
cout<<">>>>>>>>>>>>>>歡迎您使用銀行客戶管理系統<<<<<<<<<<<<<<<<<<<<\n";
cout<<" 1.查詢餘額 | 2.挂失/解鎖 \n";
cout<<" 3.存款 | 4.取款 \n";
cout<<" 0.傳回上級 | \n";
//普通使用者接受菜單
int get_personmenu_choice()
int personmenu_ch;//菜單選項
cout<<"請選擇功能:";
cin>>personmenu_ch;
if (personmenu_ch<0||personmenu_ch>4) {
cout<<"輸入有誤!"<<endl;
} while (personmenu_ch<0||personmenu_ch>4);
return personmenu_ch;
//接受身份菜單選擇
int get_Idemenu_choice()
int idmenu_ch;//菜單選項
cout<<"請選擇身份:";
cin>>idmenu_ch;
if (idmenu_ch<1||idmenu_ch>2) {
} while (idmenu_ch<1||idmenu_ch>2);
return idmenu_ch;
//接受菜單選擇
int get_managermenu_choice()
int menu_ch;//菜單選項
cout<<"請選擇菜單:";
cin>>menu_ch;
if (menu_ch<0||menu_ch>5) {
cout<<"error";
} while (menu_ch<0||menu_ch>5);
return menu_ch;
int main(int argc, const char * argv[])
Manager manager;
if (psw_check()) {
IdMenu(manager);
return 0;
==================== 迂者 丁小未 CSDN部落格專欄=================
MyTel:13262983383
====================== 互相學習,共同進步 ===================