Day3調(diào)用函數(shù)實(shí)現(xiàn)ATM程序(不同于第二天的ATM程序)

一昌犹、目的

利用函數(shù)將程序分為多個(gè)模塊,使主函數(shù)看上去更簡(jiǎn)潔明了屉佳,而每個(gè)模塊行使自己的功能来破,方便以后寫(xiě)類似程序直接拿來(lái)調(diào)用。減少了只有一個(gè)(主)函數(shù)時(shí)代碼又較多的臃腫性忘古,方便檢查和修改。

二诅诱、技術(shù)

將主函數(shù)中的一些代碼打包成函數(shù)(最好能凸顯每個(gè)函數(shù)的目的和盡量一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)重要功能)髓堪,通過(guò)調(diào)用函數(shù)來(lái)優(yōu)化代碼。C語(yǔ)言中函數(shù)分為主函數(shù)、被調(diào)用函數(shù)干旁、庫(kù)函數(shù)等等(不同分類的標(biāo)準(zhǔn)不同)驶沼。主函數(shù)(main函數(shù))程序運(yùn)行的主體,一般一個(gè)C語(yǔ)言程序只有一個(gè)主函數(shù)争群。被調(diào)用函數(shù)是在主函數(shù)中調(diào)用的回怜、又在主函數(shù)外聲明編寫(xiě)的函數(shù)。庫(kù)函數(shù)是預(yù)先編好的一些函數(shù)换薄,使得在主函數(shù)中可以直接使用某些關(guān)鍵字而不用再另外編輯被調(diào)用函數(shù)玉雾。

三、每個(gè)技術(shù)如何使用

主函數(shù):例如int main(){} ?

?? ? ? ? ? ? ?void main(){} ? ? ? ? ? ??

?int main(int argc, const char * argv[]) {} ? ? ? ? ? ? ?

int main(int argc, const char ** argv[]) {}

被調(diào)用函數(shù):例如int swap(int a,int b){int a,b,c;c=a;a=b;b=c;}完成對(duì)兩個(gè)整型a,b數(shù)值的交換

void helloWorld(){printf("Hello World!");}輸出Hello World!

庫(kù)函數(shù):例如#include“stdio.h”(""表示編譯器會(huì)首先從自己的工程里面去查找這個(gè)頭文件 如果沒(méi)有轻要,那么會(huì)從系統(tǒng)庫(kù)里面去查找)

#include<stdlib.h>(<> 表示編譯器會(huì)首先從系統(tǒng)庫(kù)里面去查找這個(gè)頭文件 如果沒(méi)有复旬,那么會(huì)從當(dāng)前工程里面去查找)

#include<iostream>

上面三個(gè)使系統(tǒng)默認(rèn)的三個(gè)庫(kù)函數(shù),也可以自己編寫(xiě)一個(gè)庫(kù)函數(shù)來(lái)使用冲泥。

四驹碍、實(shí)際使用

用函數(shù)實(shí)現(xiàn)ATM程序

——————————————————————————————————————————————————————————

要實(shí)現(xiàn)的功能:

* * *****

?歡迎光臨

?* * *****

?請(qǐng)輸入密碼:123

錯(cuò)誤-> 密碼錯(cuò)誤請(qǐng)重新輸入: 最多輸入4 -> 此卡已凍結(jié) 請(qǐng)聯(lián)系客服 -> 退出

正確-> 1.取款 請(qǐng)輸入取款金額:200-> 取款成功 當(dāng)前余額為20

->余額不足 是否繼續(xù)Y/N

2.存款 請(qǐng)輸入金額:2000 -> 存款成功 當(dāng)前余額:3000!

3.更改密碼 請(qǐng)輸入原始密碼->請(qǐng)?jiān)O(shè)置密碼->請(qǐng)確認(rèn)密碼

4.退出 請(qǐng)選擇操作: 用函數(shù)實(shí)現(xiàn)

—————————————————————————————————————————————————————————

聲明的被調(diào)用函數(shù)

bool loginATM(void);//密碼登錄ATM

void welcome(void);//ATM歡迎界面

void exitATM(int status);//退出界面

void showMenu(void);//ATM菜單界面

char getChoice(void);//對(duì)ATM菜單做出選擇選擇

void withdraw(void);//取款

bool isContinue(void);//余額不足時(shí)的兩個(gè)選擇

void deposit(void);//存款

void setPassword(void);//修改密碼

—————————————————————————————————————————————————————————

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

定義的兩個(gè)全局變量

int orgPassword = 123;//密碼

int totalMoney = 1000;//初始余額

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

——————————————————————————————————————————————————————————

主函數(shù)

int main(int argc, const char * argv[]) {

? ? welcome();//歡迎界面

? ? bool result = loginATM();//bool類型判定密碼輸入的對(duì)錯(cuò)

? ? if (result == false)?

? ? ? ? exitATM(EXIT_FAILURE);//輸入錯(cuò)誤過(guò)多直接結(jié)束程序

? ? }

? ? while (1) {

? ? ? ? showMenu()凡恍;//密碼正確時(shí)顯示菜單

? char choice = getChoice();//用戶的選擇

? ? ? ? switch(choice){

? ? ? ? ? ? case '1':

? ? ? ? ? ? ? ? withdraw();//存款

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case‘2’:

? ? ? ? ? ? ? ? deposit();//取款

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case '3':

? ? ? ? ? ? ? ? setPassword();//修改密碼

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? default:

? ? ? ? ? ? ? ? exitATM(EXIT_SUCCESS);//退出程序

? ? ? ? ? ? ? ? break;

? ? ? ? }

? ? }

? ? return 0;

}

—————————————————————————————————————————————————————————

被調(diào)用函數(shù)

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

密碼登錄ATM

bool loginATM(void){

? ? int password = 0;

? ? int wrongTime = 0;

? ? while(1){

? ? ? ? printf("請(qǐng)輸入密碼:");

? ? ? ? scanf("%d", &password);

? ? ? ? if (password == orgPassword) {

? ? ? ? ? ? return true;

? ? ? ? }else{

? ? ? ? ? ? wrongTime++;

? ? ? ? ? ? if (wrongTime == 4) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? printf("密碼錯(cuò)誤,");

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

ATM歡迎界面

void welcome(void){

? ? printf("***************\n");

? ? printf("? 歡迎使用ATM\n");

? ? printf("***************\n");

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

退出界面

void exitATM(int status){

? ? printf("*************************\n");

? ? printf("? 感謝你的使用 再見(jiàn)V就骸!嚼酝!\n");

? ? printf("*************************\n");

? ? exit(status);

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

ATM菜單界面

void showMenu(void){

? ? printf("**************\n");

? ? printf("1.取款\n");

? ? printf("2.存款\n");

? ? printf("3.設(shè)置密碼\n");

? ? printf("4.退出\n");

? ? printf("**************\n");

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

對(duì)ATM菜單做出選擇選擇

char getChoice(void){?//將輸入的所有字符串全部從緩存里面讀取出來(lái)

? ? char temp[20] = {};

? ? while (1) {

? ? ? ? printf("請(qǐng)選擇操作:");

? ? ? ? int count = scanf("%s", temp);

? ? ? ? if (count != 1) {

? ? ? ? ? ? printf("輸入不合法,");

? ? ? ? } else{

? ? ? ? ? ? char ch = temp[0];

? ? ? ? ? ? if (ch == '1' || ch == '2' || ch == '3' || ch == '4') {

? ? ? ? ? ? ? ? return ch;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? printf("輸入不合法,");

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

取款

void withdraw(void){

? ? int outMoney = 0;

? ? while (1) {

? ? ? ? printf("請(qǐng)輸入取款金額:");

? ? ? ? scanf("%d", &outMoney);

? ? ? ? if(outMoney > 0 && outMoney <= totalMoney){

? ? ? ? ? ? totalMoney = totalMoney - outMoney;

? ? ? ? ? ? printf("取款成功 余額為:%d\n", totalMoney)浮还;

? ? ? ? ? ? bool ch = isContinue();?//提示是否繼續(xù)

? ? ? ? ? ? if (ch == false) {

? ? ? ? ? ? ? ? return; //break;

? ? ? ? ? ? }

? ? ? ? }else{

? ? ? ? ? ? printf("余額不足,");

? ? ? ? }

? ? }

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

余額不足時(shí)的兩個(gè)選擇

bool isContinue(void){

? ? printf("是否繼續(xù)?(y/n):");

? ? getchar();

? ? char ch = getchar();

? ? if (ch == 'n') {

? ? ? ? return false;

? ? }else{

? ? ? ? return true;

? ? }

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

存款

void deposit(void){

? ? int intputMoney = 0;

? ? while (1) {

? ? ? ? printf("請(qǐng)輸入存款金額:");

? ? ? ? scanf("%d", &intputMoney);

? ? ? ? totalMoney = totalMoney + intputMoney;

? ? ? ? printf("存款成功,余額為:%d\n", totalMoney);

? ? ? ? bool ch = isContinue();

? ? ? ? if (ch == false) {

? ? ? ? ? ? return; //break;

? ? ? ? }

? ? }

}

—— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? —— ? ? ——

修改密碼

void setPassword(void){

? ? int newPwd1 = 0;

? ? int newPwd2 = 0;

? ? while (1) {

? ? ? ? bool result = loginATM();//檢驗(yàn)密碼

? ? ? ? if (result == true) {

? ? ? ? ? ? while (1) {

? ? ? ? ? ? ? ? printf("請(qǐng)輸入新密碼:");

? ? ? ? ? ? ? ? scanf("%d", &newPwd1);

? ? ? ? ? ? ? ? printf("請(qǐng)確認(rèn)密碼:");

? ? ? ? ? ? ? ? scanf("%d", &newPwd2);

? ? ? ? ? ? ? ? if (newPwd1 == newPwd2) {

? ? ? ? ? ? ? ? ? ? printf("設(shè)置密碼成功!\n");

? ? ? ? ? ? ? ? ? ? return;

? ? ? ? ? ? ? ? } else{

? ? ? ? ? ? ? ? ? ? printf("兩次密碼不一致,");

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

—————————————————————————————————————————————————————————

五、感想

? 在之前只用一個(gè)函數(shù)(主函數(shù))時(shí)革半,程序之間的大括號(hào){}很容易弄混亂碑定。有時(shí)候一段程序中連著包著4、5個(gè){}又官,寫(xiě)得時(shí)候思路和代碼是對(duì)的延刘,但是{}位置的改動(dòng)有時(shí)會(huì)時(shí)程序運(yùn)行很混亂,導(dǎo)致無(wú)法完成調(diào)試六敬。所以養(yǎng)成一個(gè)良好的敲代碼的習(xí)慣是很重要的碘赖。

在學(xué)習(xí)了調(diào)用函數(shù)完成程序后,應(yīng)盡量用函數(shù)編寫(xiě)代碼外构,避免只有一個(gè)函數(shù)的混亂普泡。要熟練掌握函數(shù),就要多用函數(shù)編一些代程序审编。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撼班,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子垒酬,更是在濱河造成了極大的恐慌砰嘁,老刑警劉巖件炉,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異矮湘,居然都是意外死亡斟冕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)缅阳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磕蛇,“玉大人,你說(shuō)我怎么就攤上這事十办⌒闫玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵橘洞,是天一觀的道長(zhǎng)捌袜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)炸枣,這世上最難降的妖魔是什么虏等? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮适肠,結(jié)果婚禮上霍衫,老公的妹妹穿的比我還像新娘。我一直安慰自己侯养,他們只是感情好敦跌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著逛揩,像睡著了一般柠傍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辩稽,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天惧笛,我揣著相機(jī)與錄音,去河邊找鬼逞泄。 笑死患整,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喷众。 我是一名探鬼主播各谚,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼到千!你這毒婦竟也來(lái)了昌渤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤憔四,失蹤者是張志新(化名)和其女友劉穎愈涩,沒(méi)想到半個(gè)月后望抽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡履婉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斟览。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毁腿。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苛茂,靈堂內(nèi)的尸體忽然破棺而出已烤,到底是詐尸還是另有隱情,我是刑警寧澤妓羊,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布胯究,位于F島的核電站,受9級(jí)特大地震影響躁绸,放射性物質(zhì)發(fā)生泄漏裕循。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一净刮、第九天 我趴在偏房一處隱蔽的房頂上張望剥哑。 院中可真熱鬧,春花似錦淹父、人聲如沸株婴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)困介。三九已至,卻和暖如春蘸际,著一層夾襖步出監(jiān)牢的瞬間座哩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工捡鱼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留八回,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓驾诈,卻偏偏與公主長(zhǎng)得像缠诅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乍迄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容