相信大家都在銀行的ATM機上取過款扣墩,即使沒有栈妆,也看過別人取過,對于ATM自動取款服務(wù)的機制鹃觉,我們今天就用C語言來進行一次實戰(zhàn)來解密其“自動”的奧妙专酗。
一、歡迎界面
這個十分簡單盗扇,不必多廢話祷肯,直接上代碼。顯示歡迎用戶就可以了疗隶。
printf("**********************\n");
printf(" 歡迎使用建設(shè)銀行系統(tǒng)\n");
printf("**********************\n");
二佑笋、關(guān)于輸入密碼 進入操作系統(tǒng)
每個賬戶都有自己設(shè)定的密碼,輸入了正確的密碼才能夠進入自己的賬戶斑鼻。
這一步從C語言角度來說同樣十分簡單蒋纬,首先定義任意幾個整型變量,初始密碼坚弱,輸入的密碼蜀备,錯誤次數(shù),初始金額荒叶,使用for循環(huán)在三次(包括三次)以內(nèi)驗證輸入的密碼是否等于設(shè)定的密碼碾阁,若相等,則跳出循環(huán)繼續(xù)下一步些楣,若三次都錯誤瓷蛙,則顯示“錯誤過多”,
int main(){
int old = 123;//原始密碼
int input;//輸入密碼
int wrongTime = 3; //錯誤次數(shù)
int total=1000;//金額
printf("請輸入密碼:");
for(int i = 1;i <= wrongTime; i++){
scanf("%d", &input);
//判斷密碼
if(input == old){
//密碼正確
break;
}
if(i == wrongTime){
printf("錯誤次數(shù)過多戈毒!\n");
return 1;
}
//密碼不正確
printf("密碼不正確,請重新輸入密碼:");
}
三艰猬、進入界面 提示用戶操作
同樣定義整型變量使用戶的指令12345得到系統(tǒng)回應(yīng)
應(yīng)該注意兩個點
第一:界面應(yīng)該被其循環(huán)語句控制,因為用戶可能會有反復(fù)操作埋市,每一次獨立操作完成以后會返回主界面冠桃,繼續(xù)指令或者退出系統(tǒng),所以用到for循環(huán)道宅。
第二:每次獨立操作完成以后食听,系統(tǒng)應(yīng)當(dāng)出現(xiàn)提示,用戶應(yīng)該有選擇是否繼續(xù)操作的權(quán)限污茵,即(yes/no)樱报,所以還應(yīng)該定義一個字符型變量char。
//接收用戶選擇
int choice;//接收用戶選擇
char goon;//是否繼續(xù)
for(; 1 < 2;){
//主界面
printf("*****************************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.查詢\n");
printf("4.更改密碼\n");
printf("5.退出\n");
printf("*****************************\n");
//提示用戶選擇
printf("請選擇操作:");
scanf("%d", &choice);
四泞当、核心操作
這一步可以說是整個運行系統(tǒng)的核心所在迹蛤,包括存取款,查詢余額和更改密碼,當(dāng)然還有退出盗飒。因為有12345五個選項嚷量,此處的循環(huán)語句switch的操作性和可讀性就超越了for循環(huán),因此逆趣,我們用for循環(huán)來做整個操作蝶溶。
1.存款:
這倒是挺簡單,定義整型變量并提示用戶存入金額是多少宣渗,最后將存入的加上原來的抖所,一共等于多少就得到新的余額。
2.取款:
這一步相對復(fù)雜一點痕囱,但其實也就是if-else的應(yīng)用部蛇,簡單的思路就是如果取款額大于余額,就顯示余額不足咐蝇,否則的話就是取款成功涯鲁,并且新的余額等于原來的余額減去取款數(shù)。
3.查詢余額
這一步非常簡單(其實是簡單到爆)有序,就直接printf余額抹腿,比如這里是total,輸出就可以了旭寿。
4.設(shè)置新密碼
這里要注意定義兩個整型變量警绩,即是為了“第一次輸入新密碼”“再次確認新密碼”,如這里的n1=n2盅称,則有新密碼設(shè)置成功肩祥,當(dāng)然用到了if-else句型,這里也就不多贅述了缩膝。
5.根據(jù)switch語法格式混狠,當(dāng)上面所有的情況都不是的時候,則就 default疾层,“exit(EXIT_SUCCESS);”“break;”來退出整個程序将饺。
(注意:“exit(EXIT_SUCCESS);”是頭文件#include <stdlib.h>所擁有的函數(shù),注意加上這個頭文件)
//判斷操作
switch(choice){
case 1: //存款
int temp;
printf("請輸入存款金額:");
scanf("%d",&temp);
total=temp+total;
printf("存款成功!可用余額為:%d\n",total);
break;
case 2: //取款
int temp2;
for(;1<2;){
printf("請輸入金額:");
scanf("%d",&temp2);
if(temp2>total){
printf("余額不足");
} else{
total=total-temp2;
printf("取款成功 余額為%d\n",total);
}
break;
}
case 3: //查詢余額
printf("當(dāng)前余額為:%d\n",total);
break;
case 4: //更改密碼
int n1,n2;
printf("請輸入新密碼");
scanf("%d",&n1);
printf("請確認密碼");
scanf("%d",&n2);
if(n1==n2){
printf("密碼設(shè)置成功");
old=n1;
break;
}else{
printf("兩次輸入不一致!");
break;
}
default://退出
exit(EXIT_SUCCESS);
//exit(EXIT_FAILURE);
break;
}
接下來要討論最后一步痛黎,就是上面第三步提到的予弧,可能用戶會返回主界面繼續(xù)操作,這時湖饱,在完成一次獨立操作之后掖蛤,我們就要提示用戶是否要繼續(xù)操作。這是一個死循環(huán)井厌,可被反復(fù)利用蚓庭,所以用for(;1<2;)致讥,若yes,則跳出循環(huán)返回主界面(因為主界面用的for循環(huán)控制了后面所有的操作)彪置,若no拄踪,則退出整個程序蝇恶,若是其他字符拳魁,則顯示輸入無效。
//提示是否繼續(xù)
for(;1<2;){
printf("是否繼續(xù)(y/n):");
getchar();
scanf("%c", &goon);
if(goon == 'y'){
break;
}
if (goon == 'n'){
exit(EXIT_SUCCESS);
}
printf("輸入無效 ");
}
}
return 0;
}
一些說明:
最后的最后撮弧,那個getchar();的含義是:
getchar();從終端接收一個字符
注意:當(dāng)上一次有輸入的情況下 必須要將上一次緩沖區(qū)
里面的內(nèi)容清空
scanf("%d");
123\n;
\n(拿走了123潘懊,但剩下了\n)
方式一:
getchar(); //拿走\n 使其不影響下一次操作
方式二:
fflush(stdin);//刷新輸入流
return; 結(jié)束當(dāng)前這個函數(shù)/方法
exit()導(dǎo)入頭文件<stdlib.h> 直接退出程序