ATM模拟项目:
1.目的 : 熟练掌握while语句、if else语句、函数调用等知识,培养自己的逻辑思维,养成良好的逻辑思维。
2.技术知识:
(1)主函数代码的结构:只搭框架,不做具体的事情,具体的事情交由每一个函数去实现(降低耦合性)
(2)exit(...)的用法
(3)代码块:代码块就是{} {}
(4)函数返回值;可以有,可以没有,可以
(5)函数的应用:解决代码结构复杂,不利于阅读,不利于移植的问题
怎么用
返回值函数名称(参数,参数){
}
3.
exit(EXIT_SUCCESS); //正常退出
exit(EXIT_FAILURE); //错误退出
也可自行编写exit函数:
void exitATM(int status){
exit(status);
}
关于函数返回值的知识:
int add(int a,int b){
int result =a+b;
//返回相应数据
//break for while
//return返回值 提前终止某个函数
return result;
}
//没有返回值
void test(void){
If(2>3){
return; //提前终止
}
}
实战项目:ATM模拟:
不用函数实现:
#include <stdlib.h>
#include "stdafx.h"
#include"iostream"
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("密码不正确 请重新输入:");
}
}
}
//密码正确
int choice;
while(1){
printf("**************\n");
printf("1.取款\n");
printf("2.存款\n");
printf("3.设置密码\n");
printf("4.退出\n");
printf("**************\n");
//判断输入是否合法
int temp;
while (1) {
//去掉上一次输入的回车符 \n
printf("请选择操作:");
scanf("%d", &temp);
printf("%d\n",temp);
if(temp<1||temp>4){
printf("输入不合法\n");
}else {
choice=temp;
break;
}
}
//检测到底选择的是什么操作
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;
}
用函数实现:
#include
#include
#include
bool loginATM();
void welcome();
void exitATM(int status);
void showMenu();
int getChoice();
void withdraw();//取款
bool isContinue();
void deposit();//存款
void setPassword();
//定义一个全局变量
int orgPassword = 123;
int totalMoney = 1000;
int main() {
//欢迎界面
welcome();
//登录
bool result = loginATM();
if (result == false) {
//密码错误次数过多
exitATM(EXIT_FAILURE);
}
//主要操作
while (1) {
//提示操作
showMenu();
//接收用户的选择
int 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(){
printf("******************\n");
printf(" 欢迎使用ATM\n");
printf("******************\n");
}
void exitATM(int status){
printf("****************************\n");
printf(" 感谢你的使用 再见!!!\n");
printf("****************************\n");
exit(status);
}
void showMenu(){
printf("*****************\n");
printf(" 1.取款\n");
printf(" 2.存款\n");
printf(" 3.设置密码\n");
printf(" 4.退出\n");
printf("*****************\n");
}
int getChoice( )
{
//将输入的所有字符串全部从缓存里面读取出来
int temp;
int ch;
while (1) {
printf(" 请选择操作:");
scanf("%d", &temp);
//确保值输入一个字符
if (temp<1||temp>4) {
printf(" 输入不合法,");
} else{
//获取输入的字符
ch=temp;
//虽然输入一个字符 也可能不正确
return ch;
}
}
}
//取款
void withdraw(){
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(){
printf(" 是否继续?(y/n):");
getchar();
char ch = getchar();
if (ch == 'n') {
return false;
}else{
return true;
}
}
void deposit(){
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(){
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(" 两次密码不一致,");
}
}
}
}
}
可见 运用函数实现后主程序轻松易读,结构清晰,还可以自己创建一个 头文件.h
.h文件用于函数的声明
.c 实现文件 封装操作( .c文件用于实现某个头文件里面的函数)
使结构更加清晰明了。
一天的学习感悟:
今天理会了函数的定义,用法,功能,并通过ATM项目实例学习并练习了while、if、等语句,锻炼了写代码的逻辑思维,发现了之前写代码的很多不良习惯,如不喜欢用函数,没有做到使一个代码块只写一个功能,使代码繁杂紊乱,可移植性差,写代码很多时候思考过少,有些时候甚至照搬照抄,没有培养自己的逻辑思维能力,今后会多加注意,多学习老师、同学写代码的好习惯,主要还是要大量的练习,敲代码!敲代码!敲代码!今天虽然进度不太明显,但经过一天的学习和练习 ,故余虽愚,终有所获。