2019-07-30Day3 C语言demo1银行ATM part2.

目的

在昨天,我们编写这个DEMO的时候主要使用的是循环和条件语句在主函数里面进行编写,这样使得主函数看起来臃肿,今天我们学习了另一种更加常用的编写方式,通过编写多个函数,来实现程序所要达到的效果,

在C语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现C语言程序。利用函数,不仅可以实现程序的模块化,程序设计得简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样可以大大地减轻程序员的代码工作量。

在今天的学习中,我们运用今天接触到的自定义函数的方法,对昨天的demo银行ATM进行了重新的编写,让我们更了解函数的运用和实际效果。

技术

while嵌套循环 自定义函数

函数的定义和调用

1.函数的定义:
返回类型 函数名(参数列表){
函数体; }

2.函数的分类
有返回值的函数

    char choice;
        //判断输入是否合法
        char ch[20] = {};
        while (1) {
            //去掉上一次输入的回车符 \n
            printf("请选择操作:");
            int count = scanf_s("%s", ch, sizeof(ch));

            if (count != 1) {
                printf("输入不合法 ");
            }
            else {
                //获取第一个字符
                choice = ch[0];
                return choice;
            }
        }

无返回值的函数

void welcome(void) {
    printf("***************\n");
    printf("   欢迎使用ATM\n");
    printf("***************\n");
}

void exitATM(int status) {
    printf("*************************\n");
    printf("   感谢你的使用 再见!!!\n");
    printf("*************************\n");
    exit(status);
}

void showMenu(void) {
    printf("**************\n");
    printf("1.取款\n");
    printf("2.存款\n");
    printf("3.设置密码\n");
    printf("4.退出\n");
    printf("**************\n");
}

全局定义展示

bool loginATM(void);
void welcome(void);
void exitATM(int status);
void showMenu(void);
char getChoice(void);
void withdraw(void);//取款
bool isContinue(void);
void deposit(void);//存款
void setPassword(void);

//定义一个全局变量
int orgPassword = 123;
int totalMoney = 1000;

主程序示范

int main(int argc, const char * argv[]) {
    //欢迎界面
    welcome();

    //登录
    bool result = loginATM();
    if (result == false) {
        //密码错误次数过多
        exitATM(EXIT_FAILURE);
    }

    //主要操作
    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;
}

与昨天的程序之间的区别

在昨天的程序中,我为了达到程序能够不断重复某些命令,使用了goto语句,但其实goto语句是极其不推荐在当前的结构化编程语言中使用的,在程序复杂时容易出错,且不利于别人的阅读,并且难以调试。通过今天课上东哥示范的程序,我们可以通过包裹用真循环配合跳出语句的方式,来到达我们所需要的效果。如下所示

while (1) {
        scanf_s("%d", &inputPwd);
        if (inputPwd == password) {
            //密码正确
            break;
        }
        else {
            totalTime--;
            if (totalTime == 0) {
                printf("此卡已冻结 请联系客服!\n");
                //退出
                exit(EXIT_FAILURE);
            }
            else {
                printf("密码不正确 请重新输入:");
            }
        }
    }

能够在输入密码错误的时候,重复的提示重新输入密码,达到了我们想要的效果。
密码错误时.png

小结

通过今天的学习,我昨天独自编写demo时的疑惑和一些无法着手的难处都得到了解答,同时我也开始思考,如何使用函数来编写程序,如何使流程更加清晰。在日后更加复杂的代码编写中,函数的使用是必不可少的,只有通过更多的练习,才能尽快的掌握函数的运用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。