天天看點

銀行管理系統

//

//  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 

====================== 互相學習,共同進步 ===================

繼續閱讀