1. 程式人生 > >資料結構課程設計《銀行存取款系統》

資料結構課程設計《銀行存取款系統》

/*********標頭檔案**********/
#include <iostream.h>
#include <Cstring>
#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <iomanip.h>
#include <conio.h>
/************************/

#define rs 120 //總人數
/*********公共變數**********/
int n, z;
int a[3]; /*a[0]是選擇存款方式,a[1]是要存的總錢數,a[2]是存錢選的期限*/
float m;

/***************************/
/********結構體********/
struct xinxi
{
    char zhao[13]; //賬號
    char name[20]; //姓名
    char ID[14]; //身份證號碼
    float jine; //金額
    char code[6]; //密碼
} xin[rs];
/*********************/

/***********函式宣告區*************/
void account(); //賬戶開戶
void savemoney(); //存款
void drawmoney(); //取款
void query(); //查詢
void submenu(); //子選單
void mainmenu(); //主選單
void loading(); //檔案讀寫
void quit(); //退出
void save(); //儲存
void prompt(); //提示
void revise(); //修改資訊
void title(); //標題
void landing(); //登入
void code(char *code2); //密碼加密

/**********************************/

/*****主函式****/
void main()
{
    system("color e"); //改變字型顏色
    loading();
    mainmenu();
}

/*********賬戶登入*****/
void landing()
{
    int i = n, pag = 0;
    cout << "請輸入你的賬號:";

    for (int a = 1; a < 3; i++)
    {
        cin >> xin[i].zhao;
        for (int j = 0; j < i; j++)
        {
            if (strcmp(xin[j].zhao, xin[i].zhao) == 0)
            {
                system("cls");
                submenu();
                pag = 1;
                break;
            }


        }
        if (pag == 0)
            cout << "該使用者不存在!請重新輸入!" << "你還有" << 3-a <<
                "次機會!" << endl;


    }

}

/********提示檔案儲存與否**********/
void prompt()
{

    int i = MessageBox(NULL, "是否儲存?", "notice!", MB_OKCANCEL);
    if (i == 1)
    {
        save();
        cout << "儲存中........." << endl;
        Sleep(500);
        cout << "儲存成功,系統進入主選單!" << endl;
        Sleep(500);
        system("cls");
        submenu();

    }
    else
        quit();
}

/*********修改密碼部分********/

void revise()
{
    int i = n, ji = 0;
    char s2[6];
    char *a;
    a = new char[7];
    for (int c = 1; c < 4; c++)
    {

        code(a);
        for (int j = 0; j < i; j++)
        {
            if (strcmp(xin[j].code, a) == 0)
            {
                cout << endl;
				cout << "  ┌┄┄┄┄┄┄┐" << endl;
                cout << "  │密碼修改模組│" << endl;
				cout << "  └┄┄┄┄┄┄┘" << endl;
                cout << endl;
                ji = 1;
                cout << "請輸入新的密碼:" << endl;
                cout << endl;
                code(s2);
                strcpy(xin[j].code, s2);
                MessageBox(NULL, "請記住你的新密碼。", "NOTICE", 0); //提示框
                prompt();
                break;
            }
        }
        if (c == 3)
        {
            MessageBox(NULL, "您操作的次數過多!", "NOTICE", 0); //提示框
            quit();
        }

        if (ji == 0)

            cout << setw(10) << "你輸入的賬號或者密碼有誤!請重新輸入!" <<
                "還有" << 3-c << "次機會!" << endl;

    }
}

/*********主選單**********/
void mainmenu()
{
    title();
    int h;
	cout << setw(37) << "真誠為您服務" << endl;
	cout<<" ┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉"<<endl;
	cout<<"┋                                                          ┋" << endl;
    cout<<"┋                    (1)賬號開戶                         ┋" << endl;
	cout<<"┋                    (2)使用者登入                         ┋" << endl;
	cout<<"┋                                                          ┋" << endl;
	cout<<" ┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉"<<endl;
    printf("-->請選擇你的操作:");
    cin >> h;
    if (h == 1)
        account();
    else
        landing();
}

/*********子選單部分*****/
void submenu()
{
    title();
    cout << endl;
    cout<<" ┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉"<<endl;
	cout<<"┋                                                          ┋" << endl;
    cout<<"┋                    (1)帳戶查詢                         ┋" << endl;
	cout<<"┋                    (2)使用者存款                         ┋" << endl;
    cout<<"┋                    (3)使用者取款                         ┋" << endl;
	cout<<"┋                    (4)密碼修改                         ┋" << endl;
	cout<<"┋                    (5)系統退出                         ┋" << endl;
	cout<<"┋                                                          ┋" << endl;
	cout<<" ┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉"<<endl;

    cout << endl;
    printf("-->請選擇你的操作:");
    int b;
    cin >> b;
    switch (b)
    {
        case 1:
            query();
        case 2:
            savemoney();
        case 3:
            drawmoney();
        case 4:
            revise();
        case 5:
            quit();
        default:
            cout << "輸入錯誤!" << endl;

    }
}

/***********檔案讀寫部分***********/

void loading()
{

    char *p = "bankdate.txt";
    FILE *fp;
    int i = 0;

    if ((fp = fopen("bankdate.txt", "r+")) == NULL)
    //如果檔案不存在就退出
    {
        cout << "本地目錄下找不到" << p << "檔案!";
        system("pause");
        exit(0);
    }
    while (fscanf(fp, " %s %s %s  %f %s ", xin[i].zhao, xin[i].name, xin[i].ID,
        &xin[i].jine, xin[i].code) == 5)

    {
        i++;
        i = i;
    }
    fclose(fp); //關閉檔案
    n = i;

}

/************檔案儲存部分********/

void save()
{
    int i;
    FILE *fp;
    fp = fopen("bankdate.txt", "w");
    for (i = 0; i < n + 1; i++)
    {
        fprintf(fp, " %s %s %s  %f %s \n", xin[i].zhao, xin[i].name, xin[i].ID,
            xin[i].jine, xin[i].code);

    }
    fclose(fp);
    n = n + 1;
}


/***************賬戶開戶**********/
void account()
{

    char k;
    int i = n;
    system("cls");
    title();
    cout << endl;
    cout << "請輸入賬號(11位):";
    cin >> xin[i].zhao;
    code(xin[i].code);
    k = strlen(xin[i].zhao); //求字串的長度
    if (k == 11)
    //確保賬號為11位
    {
        for (int j = 0; j < i; j++)
        {
            if (strcmp(xin[j].zhao, xin[i].zhao) == 0)
            {
                MessageBox(NULL, "該使用者已存在!", "error", 0); //提示框
                system("cls");
                mainmenu();
                break;
            }
        }
        cout << "請輸入你的姓名:";
        cin >> xin[i].name;
        cout << "請輸入你的身份證號碼:";
        cin >> xin[i].ID;
        xin[i].jine = 0.000000;
		cout<<endl;
        cout << "你的賬戶金額為:" << "0.00" << "元" << endl;
        cout << "你的賬號是:" << xin[i].zhao << endl;
        MessageBox(NULL, "請記住你的賬號和密碼!", "NOTICE!", 0); //提示框
        prompt();
    }
    else
    {
        MessageBox(NULL, "你輸入的賬號或密碼有誤!", "提示框", 0);
            //

    }
}

/**********存款*********/
void savemoney()
{

    int i = n, ji = 0, b, e, p = 0;
    float d;
    char *h;
    h = new char[7];
    system("cls");
    title();
    cout << endl;
    for (int c = 1; c < 4; c++)
    {
        code(h);
        for (int j = 0; j < i; j++)
        {
            if (strcmp(xin[j].code, h) == 0)
            {
                system("cls"); //重新整理視窗,dos命令
				title();
				cout<<"--------------------------------------------------------------"<<endl;
                cout<<"  "<< xin[j].zhao <<"  "<< xin[j].name <<"  "
                    << xin[j].ID << "****" <<"   "<< "賬戶金額:" <<
                    xin[j].jine << "元" << endl; //輸出賬戶資訊
				cout<<"--------------------------------------------------------------"<<endl;
                m = xin[j].jine; //保留賬號上餘額
                e = j; //保留j的值,以便儲存資訊
                ji = 1;
                goto cun;
                break;
            }
        }
        if (c == 3)
        {
            quit();
        }

        if (ji == 0)

            cout << "該使用者不存在!請重新輸入!" << "還有" << 3-c << "次機會!"
                << endl;

    }
    
    system("cls"); //重新整理視窗,dos命令
cun:cout << endl;
	cout << "存款方式如下所示:" << endl;
    cout << endl;
    cout <<"    "<< "(1)活定期存款"<<endl;
	cout <<"    "<< "(2)協定存款 " <<endl;
    cout << endl;
    cout << setw(20) << "請選擇你要進行的操作:";
    cout << endl;
    cun2: cin >> a[0];
    p++;
    if (p > 3)
    {
        cout << "操作次數過多..." << endl;
        Sleep(1000);
        system("cls"); //重新整理視窗,dos命令
        mainmenu();

    }
    else
    switch (a[0])
    {
        case 1:
            {
                cout << endl;
                cout << "你選擇了活定期存款" << endl;
                cout << "   "<< "(1)活期存款   (2)定期存款" << endl;
                cout << "請選擇你要進行的操作:" << endl;

                cin >> b;
                if (b == 1)
                {              
                    cout << endl;
                    cout << "你選擇了活期存款年利率為:" << "0.72%" << endl;
                    cout << "請輸入你要存入的金額和期限(年):";

                    cin >> a[1] >> a[2];
                    d = a[1] + m;
                    cout << "你要存的總現金為:" << a[1] << "元" <<endl;
					cout << "期限為:" << a[2] << "年"<<endl;
                    cout << "到期後本金加利息為:" << a[1] + a[1] *0.0072 * a[2] << endl;
                    cout << "賬號上的總餘額為:" << d << endl; //賬戶總金額
                    xin[e].jine = d;
                    prompt();
                }
                else
                {
                    {
                        cout << endl;
                        cout <<"(1)整存整取   (2)零存整取,整存零取,存本取息   (3)定活兩便" << endl;
						cout<<endl;
                        cout << "請選擇你要進行的操作:";
                    }
                    cin >> b;
                    switch (b)
                    {
                    case 1:
                        {
                            cout << endl;
                            cout << "您選擇了整存整取方式" << endl;
                            cout << "請輸入你要存入的金額和期限(年):";
                        }
                        cin >> a[1] >> a[2];
                        d = a[1] + m;
                        if (a[2] < 1)
                        {
                            if (a[2] == 0.25)
                            {
                                cout << "年利率為:" << "1.71%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]*(1.71/ 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d << endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();

                            }

                            else
                                cout << "年利率為:" << "1.89%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]*(1.89 / 100) *a[2] << endl;
								cout << "賬號上的總餘額為:" << d <<endl; //賬戶總金額
                            xin[e].jine = d;
                            prompt();

                        }
                        else
                        {

                            switch (a[2])
                            {

                            case 1:
                                cout << "年利率為:" << "1.98%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]* (1.98 / 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d<< endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();
                                break;
                            case 2:
                                cout << "年利率為:" << "2.25%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]*(2.25 / 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d<< endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();
                                break;
                            case 3:
                                cout << "利率為:" << "2.52%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]* (2.52 / 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d << endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();
                                break;
                            default:
                                cout<<endl;
								cout << "年利率為:" << "2.79%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]*(2.79 / 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d<< endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();
                            }
                        }

                    case 2:
                        {
                            cout << endl;
                            cout <<"您選擇了零存整取,整存零取,存本取息方式" <<endl;
                            cout <<"請輸入你要存入的金額和期限(年):";

                            cin >> a[1] >> a[2];
                            d = a[1] + m;
                            switch (a[2])
                            {
                            case 1:
                                cout << "年利率為:" << "1.71%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]*(1.71 / 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d<< endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();
                                break;
                            case 3:
                                cout << "年利率為:" << "1.89%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]*(1.89 / 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d<< endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();
                                break;
                            default:
                                cout << "年利率為:" << "1.98%" <<endl;
                                cout << "到期後本金加利息為:" << a[1] + a[1]* (1.98 / 100) *a[2] << endl;
                                cout << "賬號上的總餘額為:" << d<< endl; //賬戶總金額
                                xin[e].jine = d;
                                prompt();
                            }

                        }
                        break;
                    case 3:
                        {
                            cout << endl;
                            cout << "您選擇了定活兩便方式" << endl;
                            cout << "請輸入你要存入的金額:" << endl;
                            cin >> a[1];
                            d = a[1] + m;
                            cout << "年利率為:" << "1.98*0.6%" <<endl;
							cout << "到期後本金加利息為:" << a[1] + a[1]*(1.98*0.6 / 100) *a[2] << endl;
                            cout << "賬號上的總餘額為:" << d <<endl; //賬戶總金額
                            xin[e].jine = d;
                            prompt();

                        }
                        break;

                    }
                }
            }


        case 2:
            cout << " 你選擇了協定存款" << endl;
            cout << "請輸入你要存入的金額和期限(年):";
            cin >> a[1] >> a[2];
            d = a[1] + m;
            cout << "年利率為:" << "1.44%" <<endl;
			cout << "到期後本金加利息為:" << a[1] + a[1]*(1.44 / 100) *a[2] << endl;
            cout << "賬號上的總餘額為:" << d << endl; //賬戶總金額
            xin[e].jine = d;
            prompt();
            break;

    }
}

/******取款********/

void drawmoney()
{
    system("cls");
    title();
    cout << endl;
    cout << "簡易銀行取款模組" << endl;
    cout << endl;
    int qin = 0, i = n, a, e;

    for (int c = 1; c < 4; c++)
    {
		code(xin[i].code);
		cout<<endl;
        for (int j = 0; j < i; j++)
		{
			if (strcmp(xin[j].code, xin[i].code) == 0)
			{
                cout<<"---------------------------------------------------------------"<<endl;
				cout <<setw(20)<< xin[j].zhao << '\t' << xin[j].name << '\t' <<"賬戶金額為:" << xin[j].jine << "元" << endl;                    //輸出賬號、客戶名字和賬戶餘額
				cout<<"---------------------------------------------------------------"<<endl;
				e = j; //保留j的值,以便儲存資訊
				m = xin[j].jine;
                qin = 1;
                goto qu;
                break;
			}
        }
        if (c == 3)
        {
            quit();
        }

        if (qin == 0)

            cout << "你輸入的賬號或密碼錯誤!請重新輸入!" << "還有" << 4-c <<
                "次機會!" << endl;

    }
    qu: cout << "請輸入取款金額!" << endl;
    cin >> a;
    if (a > m)
        cout << "餘額不足,本賬戶不支援透支!" << endl;
    else
    {
        cout << "取款金額為:" << a << '\t' << "賬戶餘額為:" << m - a << "元"
            << endl;
        xin[e].jine = m - a;
        prompt();
    }
}

/**************查詢**********/
void query()

{
    system("cls");
    title();
    cout << endl;
    int i = n, bqin = 0;
    printf("-->請輸入要查詢的賬號:");
    for (int c = 1; c < 4; c++)
    {
        cin >> xin[i].zhao;
        for (int j = 0; j < i; j++)
        {
            if (strcmp(xin[j].zhao, xin[i].zhao) == 0)
            {
				cout<<"---------------------------------------------------------------"<<endl;
                cout<<" "<< xin[j].zhao <<" "<< xin[j].name <<" "<< xin[j].ID
                    << "****" <<" "<< "賬號餘額為:" << xin[j].jine << "元"<< endl;
				cout<<"---------------------------------------------------------------"<<endl;
                bqin = 1;
                Sleep(500);
                int c = MessageBox(NULL, "是否進入子選單!", "NOTICE!",
                    MB_OKCANCEL);
                if (c == 1)
                {
                    system("cls");
                    submenu();
                    break;
                }
                else
                {
                    quit();
                }

            }
        }
        if (c == 3)
        {
            quit();
        }

        if (bqin == 0)

            cout << "該使用者不存在!請重新輸入!" << "還有" << 3-c << "次機會!"
                << endl;

    }
}

/******系統退出********/

void quit()
{
	system("cls");
	title();
	cout<<endl;
	cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
	cout<<"  ◇◇◇◇◇              謝謝使用                 ◇◇◇◇◇ "<<endl;
	cout<<endl;
	cout<<"                           再  見                             "<<endl;
	cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
    exit(0);
}

/***********密碼加密***********/
void code(char *code2)
{
    int m = 0;
    printf("請您輸入密碼(6位):");
    while (m <= 6)

    {

        char a;
        a = getch();
        if (a == 8)
        {
            if (m != 0)
                m--;
        }
        else if (a == 13)
        //回車鍵
        {
            code2[m] = '\0';
            cout << endl;
            break;
        }
        else
        {
            printf("*");
            code2[m++] = a;
        }
    }
}

/**********系統標題***********/

void title()
{
	cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout << setw(40) << "簡易銀行存取款系統" << endl;
	cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
}

程式截圖

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.