#include <stdio.h>
#include <stdlib.h>
//C語言及程序設計初步,綜合練習,CSDN銀行2.0,功能說明
/* 1.輸入密碼進行登錄(錯誤三次後退出程序),輸入0-4選擇不同功能,1-查詢、2-取款,3-存款,4-改密碼,0-退出.
2.只支持單個用戶,密碼和存款餘額分別保存在本地兩個文件中
3.取款功能支持超出額度提示.
4.修改密碼需要輸入兩次新密碼,先要輸入原密碼
5.取款和存款操作需要加入確認提示,點擊確認後纔會繼續操作,取消的話回退會上一級
*/
//第二版,代碼優化,模塊化思路
int passwd();//函數功能:判斷密碼是否正確
void work();//函數功能:主業務模塊,被main函數調用
void Out();//取款模塊,被主業務模塊調用
void In();//存款模塊,被主業務模塊帶哦用
void change_passwd();//修改密碼模塊,被主業務模塊調用
long getsalary();//獲得餘額模塊,被多個其他模塊調用
void show_menu();//展示業務菜單模塊,被主業務模塊調用
void change_money(long);//修改餘額模塊,被存取款模塊調用
int main()
{
printf("歡迎使用CSDN銀行\n");
if(passwd()==0)
{
printf("密碼錯誤三次,賬號鎖定!\n");
exit(0);
}
work();
printf("謝謝您的使用,歡迎下次光臨!\n");
return 0;
}
int passwd()
{
long iPass_file,iPass;
int iErr_count=1,r;
FILE *fp;
fp=fopen("passwd.dat","r");
fscanf(fp,"%ld",&iPass_file);
fclose(fp);
while(iErr_count<=3)
{
if(iErr_count==1)
printf("請輸入密碼:");
else
printf("密碼錯誤,請再次輸入密碼: ");
scanf("%ld",&iPass);
if(iPass==iPass_file)
break;
else
iErr_count++;
}
if(iErr_count>3)
r=0;
else
r=1;
return r;
}
void work()
{
int iErr_count;
int flag=0,choice;
while(flag==0)
{
show_menu();
scanf("%d",&choice);
switch(choice)
{
case 1:
{
printf("當前的存款餘額爲:%ld\n",getsalary());
break;
}
case 2:
{
Out();
break;
}
case 3:
{
In();
break;
}
case 4:
{
iErr_count=1;
printf("修改密碼需要校驗原密碼\n");
if(passwd()==1)
{
change_passwd();
}
else
{
printf("錯誤三次,請重新選擇\n");
}
break;
}
case 0:
{
flag=1;
break;
}
default:
{
printf("輸入錯誤,請重新輸入!\n");
}
}
}
}
void show_menu()
{
printf("本行提供以下業務:\n");
printf("1. 查詢.\n");
printf("2. 取款.\n");
printf("3. 存款.\n");
printf("4. 改密碼.\n");
printf("0. 退出.\n");
printf("請選擇需要辦理的業務(1-4),按0退出:");
}
long getsalary()
{
long money;
FILE *fp;
fp=fopen("money.dat","r");
fscanf(fp,"%ld",&money);
fclose(fp);
return money;
}
void change_money(long iMoney)
{
FILE *fp;
fp=fopen("money.dat","w");
fprintf(fp,"%ld",iMoney);
fclose(fp);
}
void Out()
{
long iOut,iMoney;
char choice_temp;
iMoney=getsalary();
printf("請輸入需要取出的金額:");
scanf("%ld",&iOut);
printf("確認取出%ld元(輸入n取消,任意鍵確認)\n",iOut);
choice_temp=getchar();//接收前一個字符串的\n
choice_temp=getchar();
if(choice_temp!='n'&&choice_temp!='N')
{
if(iOut<=iMoney)
{
iMoney-=iOut;
change_money(iMoney);
printf("成功取出%ld元!\n",iOut);
}
else
{
printf("餘額不足!\n");
}
}
}
void In()
{
long iPut,iMoney;
char choice_temp;
iMoney=getsalary();
printf("請輸入需要存入的金額:");
scanf("%ld",&iPut);
printf("確認存入%ld元(輸入n取消,任意鍵確認)\n",iPut);
choice_temp=getchar();//接收前一個字符串的\n
choice_temp=getchar();
if(choice_temp!='n'&&choice_temp!='N')
{
iMoney+=iPut;
change_money(iMoney);
printf("成功存入%ld元!\n",iPut);
}
}
void change_passwd()
{
long iPass_change_new1,iPass_change_new2;
long iPass;
FILE *fp;
fp=fopen("passwd.dat","w");
printf("校驗通過,請輸入新密碼:");
scanf("%ld",&iPass_change_new1);
printf("請再次輸入新密碼:");
scanf("%ld",&iPass_change_new2);
while(iPass_change_new1!=iPass_change_new2)
{
printf("兩次結果不一致,請重新輸入!\n");
printf("校驗通過,請輸入新密碼:");
scanf("%ld",&iPass_change_new1);
printf("請再次輸入新密碼:");
scanf("%ld",&iPass_change_new2);
}
iPass=iPass_change_new1;
fprintf(fp,"%ld",iPass);
fclose(fp);
printf("修改密碼成功!\n");
}
C語言程序設計提高篇應用程序設計-CSDN銀行2.0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.