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

一、目的

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

二、技術(shù)

將主函數(shù)中的一些代碼打包成函數(shù)(最好能凸顯每個函數(shù)的目的和盡量一個函數(shù)實現(xiàn)一個重要功能),通過調(diào)用函數(shù)來優(yōu)化代碼。C語言中函數(shù)分為主函數(shù)、被調(diào)用函數(shù)、庫函數(shù)等等(不同分類的標準不同)。主函數(shù)(main函數(shù))程序運行的主體,一般一個C語言程序只有一個主函數(shù)。被調(diào)用函數(shù)是在主函數(shù)中調(diào)用的、又在主函數(shù)外聲明編寫的函數(shù)。庫函數(shù)是預先編好的一些函數(shù),使得在主函數(shù)中可以直接使用某些關(guān)鍵字而不用再另外編輯被調(diào)用函數(shù)。

三、每個技術(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;}完成對兩個整型a,b數(shù)值的交換

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

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

#include<stdlib.h>(<> 表示編譯器會首先從系統(tǒng)庫里面去查找這個頭文件 如果沒有,那么會從當前工程里面去查找)

#include<iostream>

上面三個使系統(tǒng)默認的三個庫函數(shù),也可以自己編寫一個庫函數(shù)來使用。

四、實際使用

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

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

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

* * *****

?歡迎光臨

?* * *****

?請輸入密碼:123

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

正確-> 1.取款 請輸入取款金額:200-> 取款成功 當前余額為20

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

2.存款 請輸入金額:2000 -> 存款成功 當前余額:3000!

3.更改密碼 請輸入原始密碼->請設(shè)置密碼->請確認密碼

4.退出 請選擇操作: 用函數(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);//對ATM菜單做出選擇選擇

void withdraw(void);//取款

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

void deposit(void);//存款

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

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

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

定義的兩個全局變量

int orgPassword = 123;//密碼

int totalMoney = 1000;//初始余額

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

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

主函數(shù)

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

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

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

? ? if (result == false)?

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

? ? }

? ? while (1) {

? ? ? ? showMenu();//密碼正確時顯示菜單

? 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("請輸入密碼:");

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

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

? ? ? ? ? ? return true;

? ? ? ? }else{

? ? ? ? ? ? wrongTime++;

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

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }else{

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

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

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

ATM歡迎界面

void welcome(void){

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

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

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

}

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

退出界面

void exitATM(int status){

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

? ? printf("? 感謝你的使用 再見?。?!\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");

}

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

對ATM菜單做出選擇選擇

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

? ? char temp[20] = {};

? ? while (1) {

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

? ? ? ? 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("請輸入取款金額:");

? ? ? ? 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("余額不足,");

? ? ? ? }

? ? }

}

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

余額不足時的兩個選擇

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("請輸入存款金額:");

? ? ? ? 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();//檢驗密碼

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

? ? ? ? ? ? while (1) {

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

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

? ? ? ? ? ? ? ? printf("請確認密碼:");

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

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

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

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

? ? ? ? ? ? ? ? } else{

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

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

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

五、感想

? 在之前只用一個函數(shù)(主函數(shù))時,程序之間的大括號{}很容易弄混亂。有時候一段程序中連著包著4、5個{},寫得時候思路和代碼是對的,但是{}位置的改動有時會時程序運行很混亂,導致無法完成調(diào)試。所以養(yǎng)成一個良好的敲代碼的習慣是很重要的。

在學習了調(diào)用函數(shù)完成程序后,應(yīng)盡量用函數(shù)編寫代碼,避免只有一個函數(shù)的混亂。要熟練掌握函數(shù),就要多用函數(shù)編一些代程序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容