目的: 今天东哥主要带我们用C语言做了一个简易版的模拟ATM,在之前我们也自己尝试着用了自己的方法做了一个ATM模拟的demo。东哥在上午先是带我们不用函数 一步一步地做了一个demo,下午的时候再用函数的方法做了一个demo。通过两种方法,让我们体会到了其中的差异,让我们了解了函数了用法,加深了循环语句和选择语句的具体用法的理解,让我们体会到了函数的优势所在。
技术:1.为什么要用函数
2.函数的定义和使用
每个技术如何使用:1.为什么要用函数(函数就是一个代码块):
-代码结构太复杂 不利于阅读 不利于移植 copy
-代码块 一个代码块解决一个问题
-代码块就是{ } { }
2.(1)
(2)如果函数放在主函数的前面,可以不用声明;
如果放在主函数的后面的话, 主函数前面需要声明,即 :先声明,后实现
自己创建一个头文件.h
.h头文件
.h文件用于函数的声明
实现文件.c封装操作
.c文件用于实现某个头文件里面的函数
实际使用:1.ATM(不用函数的方法)模拟实现
#import <Foundation/Foundation.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
//保存原始密码
int password = 123;
int inputPwd = 0;
int totalTime = 4;
int totalMoney = 1000;
printf("**************\n");
printf(" 欢迎使用\n");
printf("**************\n");
//一个模块完成一个功能 耦合性降低
printf("请输入密码:");
while (1) {
scanf("%d", &inputPwd);
if (inputPwd == password) {
//密码正确
break;
}else{
totalTime--;
if (totalTime == 0) {
printf("此卡已冻结 请联系客服!\n");
//退出
exit(EXIT_FAILURE);
}else{
printf("密码不正确 请重新输入:");
}
}
}
//密码正确
char choice;
while(1){
printf("**************\n");
printf("1.取款\n");
printf("2.存款\n");
printf("3.设置密码\n");
printf("4.退出\n");
printf("**************\n");
//判断输入是否合法
char ch[20] = {};
while (1) {
//去掉上一次输入的回车符 \n
printf("请选择操作:");
int count = scanf("%s", ch);
if (count != 1) {
printf("输入不合法 ");
} else{
//获取第一个字符
choice = ch[0];
if (choice == '1' || choice == '2' || choice == '3' || choice == '4') {
break;
} else{
printf("输入不合法 ");
}
}
}
//检测到底选择的是什么操作
char choice2;
int newPassword1 = 0;
int newPassword2 = 0;
switch (choice) {
case '1':
//取款
while(1){
int outMoney = 0;
printf("请输入取款金额:");
scanf("%d", &outMoney);
if (outMoney > totalMoney) {
//金额不足
printf("余额不足是否继续(y/n):");
getchar();
choice2 = getchar();
if (choice2 == 'n') {
break;
}
}else{
totalMoney -= outMoney;
printf("取款成功 余额为:%d\n", totalMoney);
break;
}
}
break;
case '2':
printf("请输入存款金额:");
int inputMoney = 0;
scanf("%d", &inputMoney);
totalMoney += inputMoney;
printf("存款成功 余额为:%d\n", totalMoney);
break;
case '3':
while (1) {
printf("请输入新密码:");
scanf("%d", &newPassword1);
printf("请确认密码:");
scanf("%d", &newPassword2);
if (newPassword1 == newPassword2){
password = newPassword1;
printf("更改密码成功\n");
break;
}else{
printf("两次密码不一致 ");
}
}
break;
default:
printf("感谢你的使用 再见!!!\n");
exit(EXIT_SUCCESS);
break;
}
}
return 0;
}
2.ATM(函数法)实现
#import <Foundation/Foundation.h>
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;
}
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("密码错误,");
}
}
}
}
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");
}
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();
if (ch == false) {
return; //break;
}
}else{
printf("余额不足,");
}
}
}
bool isContinue(void){
printf("是否继续?(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("设置密码成功!\n");
return;
} else{
printf("两次密码不一致,");
}
}
}
}
}
心得:通过这一天的学习让我慢慢加深了对函数使用的理解,让我明白了在编写程序中使用函数的优势:如果没有函数,当遇到多个类似的功能,需要反复的去重复编写类似的代码,增加了工作量且不便于阅读,出程序看起来会变得非常的臃肿。而如果使用了函数,主程序会变得简易许多,工作量也会大大减少。因此我们在编写程序的使用需要合理使用好函数。