/* *Copyright(c) 2015/6/3 CSDN博客 *All rights reserved. *文件名:main.c *做 者:金葉 *完畢日期:2015/6/3 *版本:V1.0 *問題描寫敘述:小型銀行應用程序 *程序輸出: */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <conio.h> #define upNum 2000 int ipass(); //銀行員工password確認 void downdate(); //載入數據 int iChoose(); //銀行員工選擇功能 int search(int id); //用於查找帳戶相應的下標 int inputpass(); //用於輸入password void work(); //主菜單 void open_account(); //1開戶 void cancellation(); //2註銷 void deposit(); //3存款 void withdraw_money(); //4取款 void query(); //5查詢 void transfer_accounts(); //6轉帳 void loss(); //7掛失 void unloss(); //8解掛 void change(); //9該密 void update(); //保存數據,退出 int user[upNum][3]; //帳號、password、狀態 char name[upNum][10]; //username double balance[upNum]; //帳戶剩餘金額 int N; //銀行用戶實際人數 int main() { if (ipass()==1) { downdate(); work(); update(); } return 0; } int ipass() { int i,j=3; int right=0; char ch; char worker[20]; char ipass[20]; char worker1[20]; char ipass1[20]; FILE *fp; printf("+-------------------+\n"); printf("+ 歡迎光臨CSDN銀行 +\n"); printf("+-------------------+\n"); if ((fp=fopen("worker.txt","r"))==NULL) { printf("worker file cannot open!"); exit(0); } fscanf(fp,"%s %s",worker,ipass); //讀入工做人員username fclose(fp); do { printf("請輸入業務員的username:"); scanf("%s",worker1); printf("請輸入password:"); i=0; while((ch=getch())!='\r') { ipass1[i++]=ch; putchar('*'); } ipass1[i]='\0'; fflush(stdin); printf("\n"); if (strcmp(worker1,worker)==0&&strcmp(ipass1,ipass)==0) { right = 1; break; } else { j--; if (j>0) { printf("超過3次將退出,你還可以嘗試%d次!\n", j); } else { printf("對不起,你不能進入系統\n"); } } } while (j); return right; } void downdate() { int i=0; FILE *fp; if ((fp=fopen("bank.txt","r"))==NULL) { printf("bank file cannot open!"); exit(0); } while(fscanf(fp,"%d %s %d %lf %d",&user[i][0], name[i], &user[i][1], &balance[i],&user[i][2] ) != EOF) { i++; } N=i; fclose(fp); return; } void work() { int ichose; do { ichose=iChoose(); switch (ichose) { case 1: open_account(); //開戶 break; case 2: cancellation(); //2註銷 break; case 3: deposit(); //3存款 break; case 4: withdraw_money(); //4取款 break; case 5: query(); //5查詢 break; case 6: transfer_accounts(); //6轉帳 break; case 7: loss(); //7掛失 break; case 8: unloss(); //8解掛 break; case 9: change(); //9該密 break; case 0: printf("歡迎再來\n"); update(); //保存退出 } } while (ichose); } int iChoose() { int ichose; while (1) { printf("\n"); printf("+----------------------------+\n"); printf("+ 1 開戶 2 銷戶 3 存款 +\n"); printf("+ 4 取款 5 查詢 6 轉帳 +\n"); printf("+ 7 掛失 8 解掛 9 改密 +\n"); printf("+ 0 退出 +\n"); printf("+----------------------------+\n"); printf("請輸入操做指令:"); scanf("%d",&ichose); if (ichose>=0 && ichose<=9) { break; } else printf("輸入錯誤。請又一次選擇\n\n"); } return ichose; } void open_account() { int ipass1,ipass2; if (N==upNum) { printf("銀行用戶達到上限,不能開戶\n"); } printf("正在進行開戶\n"); printf("請輸入用戶帳號:"); scanf("%d",&user[N][0]); printf("請輸入用戶姓名:"); scanf("%s",name[N]); printf("請輸入password:"); ipass1=inputpass(); printf("請再次確認password:"); ipass2=inputpass(); if (ipass1==ipass2) { user[N][1]=ipass1; user[N][2]=0; printf("存款金額:"); scanf("%lf",&balance[N]); printf("開戶成功。\n"); N++; } else { printf("password錯誤,開戶失敗!git
\n"); } } int search(int id) { int index; index=-1; int i; for (i=0; i<N; i++) { if (user[i][0]==id) { index=i; break; } } return index; } int inputpass() { char ch; //接收字符形式password int iPass=0; //要轉換爲數字 int i; while(1) { for(i=0; i<6; i++) { ch=getch(); //輸入但不顯示 putchar('*'); //輸出* if(isdigit(ch)) iPass=iPass*10+(ch-'0'); else { iPass=0; break; //退出for循環後。再次接受 } } fflush(stdin); //清除鍵盤緩存區中已經有的輸入 printf("\n"); if(iPass==0) //此條件成立可能由兩種狀況引發:輸入了非數字字符被直接重置爲0,或6位全0後正常退出for循環 { printf("password要求全爲數字。且不能全0。\n"); printf("請又一次輸入password: "); } else break; } return iPass; } void cancellation() { int i; int cancel; int pass; printf("輸入待銷戶帳號:"); scanf("%d",&cancel); i=search(cancel); printf("姓名:%s\n",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]) { printf("剩餘金額:%.2lf",balance[i]); printf("確認銷戶Y/N:"); if(tolower(getchar())=='y') { balance[i]=0; //取款後剩餘金額變0 user[i][2]=2; //狀態變爲註銷 printf("取款 %.2f 元,銷戶成功!緩存
\n", balance[i]); } else { printf("你取消了操做。銷戶失敗!\n"); } } else { printf("password錯誤,銷戶失敗!\n"); } } void deposit() { int i; int id; int pass; double money; printf("請輸入帳號:"); scanf("%d",&id); i=search(id); if (i<0) { printf("username不存在。\n"); } else { printf("姓名:%s",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]&&user[i][2]==0) { printf("輸入存款金額:"); scanf("%lf",&money); printf("剩餘金額總計%.2lf,存款成功",money+balance[i]); } else if (pass==user[i][1]&&user[i][2]==1) { printf("卡已掛失,存款失敗!post
\n"); } else if (pass==user[i][1]&&user[i][2]==2) { printf("卡已註銷,存款失敗!code
\n"); } else { printf("password錯誤,存款失敗!\n"); } } } void withdraw_money() { int i; int id; int pass; double money; printf("請輸入帳號:"); scanf("%d",&id); i=search(id); if(i<0) { printf("username不存在。\n"); } else { printf("姓名:%s",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]&&user[i][2]==0) { printf("剩餘金額 :%.2lf\n",balance[i]); printf("取款金額:"); scanf("%lf",&money); if (money>balance[i]) { printf("剩餘金額不足,取款失敗"); } else { balance[i]-=money; printf("剩餘金額:%.2lf",balance[i]); } } else if (pass==user[i][1]&&user[i][2]==1) { printf("卡已掛失,取款失敗!blog
\n"); } else if (pass==user[i][1]&&user[i][2]==2) { printf("卡已註銷,取款失敗!\n"); } else { printf("password錯誤。取款失敗!\n"); } } } void query() { int i; int id; int pass; printf("請輸入帳號:"); scanf("%d",&id); i=search(id); printf("姓名:%s",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]) { printf("剩餘金額:%.2lf\n",balance[i]); if (user[i][2]==0) { printf("當前狀態:正常\n"); } else if (user[i][2]==1) { printf("當前狀態:掛失\n"); } else printf("當前狀態:註銷\n"); printf("查詢完畢!\n"); } else { printf("password錯誤,查詢失敗\n"); } } void transfer_accounts() { int id,id2; int i,i2; double money; int pass; printf("請輸入轉出帳號:"); scanf("%d",&id); i=search(id); printf("姓名:%s",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]&&user[i][2]==0) { printf("請輸入轉入帳號:"); scanf("%d",&id2); i2=search(id2); printf("轉帳金額:"); scanf("%lf",&money); if (money>balance[i]) { printf("金額不足,轉帳失敗!ip
\n"); } else { printf("轉帳成功。剩餘金額 %.2lf\n",balance[i]-money); balance[i2]+=money; } } } void loss() { int id; int i; int pass; printf("請輸入帳號:"); scanf("%d",&id); i=search(id); printf("姓名:%s",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]) { printf("剩餘金額:%.2lf\n",balance[i]); if (user[i][2]==0) { printf("當前狀態:正常\n"); user[i][2]=1; printf("掛失成功!get
\n"); } else if (user[i][2]==1) { printf("當前狀態:掛失\n"); } else printf("當前狀態:註銷\n"); } else { printf("password錯誤,掛失失敗\n"); } } void unloss() { int id; int i; int pass; printf("請輸入帳號:"); scanf("%d",&id); i=search(id); printf("姓名:%s",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]) { printf("剩餘金額:%.2lf\n",balance[i]); if (user[i][2]==0) { printf("當前狀態:正常\n"); } else if (user[i][2]==1) { printf("當前狀態:掛失\n"); user[i][2]=0; printf("解掛成功!input
\n"); } else printf("當前狀態:註銷\n"); } else { printf("password錯誤。解掛失敗\n"); } } void change() { int id; int i; int pass,pass1,pass2; printf("請輸入帳號:"); scanf("%d",&id); i=search(id); printf("姓名:%s",name[i]); printf("password:"); pass=inputpass(); if (pass==user[i][1]&&user[i][2]!=2) { printf("新password:"); pass1=inputpass(); printf("再次輸入:"); pass2=inputpass(); if (pass1==pass2) { user[i][1]=pass1; } else { printf("2次輸入不對,改password失敗\n"); } } else { printf("password不對!\n"); } } void update() { FILE *p; int i=0; if ((p=fopen("bank.txt", "w"))==NULL) { printf("bank.txt file cannot open!"); exit(0); } for(i=0; i<N; i++) fprintf(p,"%d %s %d %lf %d\n",user[i][0], name[i], user[i][1], balance[i],user[i][2]); fclose(p); exit(0); } 博客
用了一下午才作好這個實踐string
真的是好累啊
只是最後測試完之後是十分的知足啊
後面還得改進些。得等歇息的時候弄了。