心得感悟
“多练习”真的是学编程的捷径,最初编写时,我总会忍不住一个劲地往下写,写多了才发现不该将两个模块写在一个函数里,当我写第三次时,我已经不会再犯这样的错误了。最后完成时,感觉整个程序明显上升一个档次,耦合性降低使得错误更容易修改,十分方便我这样容易出错的小白,而且能使主程序更加简洁。在编写过程中,最重要的是弄清楚框架的结构,再逐个完成框架内容。
1. 目的
- 掌握函数的声明、定义、调用
- 使用函数编写改进银行ATM机程序
- 锻炼程序逻辑思维
2. 技术
- 函数的声明
- 函数的定义
- 函数的调用
- 用函数编写银行ATM机程序
3. 技术的使用
- 函数的声明
【返回类型】 函数名(含类型说明的形式参数表);
int add(int a,int b);
- 函数的定义
【返回类型】 函数名(含类型说明的形式参数表)
{
语句序列
}
int add(int a,int b){
int result;
result = a + b;
return result;
}
- 函数的调用
函数名 (含类型说明的形式参数表);
int _tmain(int argc, _TCHAR* argv[])
{
int i = 10;
int j = 3;
add(i,j);
}
- 用函数编写银行ATM机程序
1. 梳理程序框架
- 欢迎界面
- 登录界面
- 菜单界面
- 接收并判断用户输入
- 取款
- 存款
- 设置密码
- 退出系统
- 是否继续
2. 编写各个框架
- 欢迎界面
无需输入或输出参数
void welcome(void){
printf("*********************************\n\n");
printf(" 欢迎使用ATM\n\n");
printf("*********************************\n\n");
}
- 登录界面
需要判断是否登录成功,故需要输出参数。
bool loginATM(void){
int inputpwd = 0;
int wrongtime = 0;
while(1){
printf("请输入密码:");
scanf_s("%d",&inputpwd);
if(inputpwd == orgPassword){
return true;
}else{
wrongtime++;
if(wrongtime == 4){
return false;
}else{
printf("密码错误!");
}
}
}
}
- 菜单界面
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("%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 withdrawl(void){
int outmoney = 0;
while(1){
printf("请输入取款金额:");
scanf_s("%d",&outmoney);
if(outmoney >0 && outmoney <= totalmoney){
totalmoney -=outmoney;
printf("取款成功,余额为:%d\n",totalmoney);
bool ch = iscontinue(); //提示是否继续
if(ch == false){
return;//break
}
}else{
printf("余额不足!");
}
}
}
- 存款
因为不知道用户要存款几次,故使用while
循环
void deposit(void){
int inputmoney = 0;
while(1){
printf("请输入存款金额:");
scanf_s("%d",&inputmoney);
totalmoney += inputmoney;
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_s("%d",&newpwd1);
printf("请确认新密码:");
scanf_s("%d",&newpwd2);
if(newpwd1 == newpwd2){
printf("修改密码成功!\n");
return;
}else{
printf("两次密码不一致");
}
}
}
}
}
- 退出系统
需要向系统说明退出情况——错误退出
void exitATM(int status){
printf("****************************\n");
printf(" 感谢使用,再见!\n");
printf("*****************************\n");
exit(status);
}
- 是否继续
需要返回用户选择
bool iscontinue(void){
printf("是否继续?(y/n):");
getchar();
char ch = getchar();
if(ch == 'n'){
return false;
}else{
return true;
}
}
3. 将各个框架的函数在主函数组合起来
- 头文件
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string>
void welcome(void); //欢迎界面
bool loginATM(void); //登录
void exitATM(int status); //退出系统
void showmenu(void); //菜单
char getchoice(void); //读取输入字符,并判断操作
void withdrawl(void); //取款
bool iscontinue(void); //是否继续
void deposit(void); //存款
void setpassword(void); //设置密码
//定义一个全局变量
int orgPassword = 123;
int totalmoney = 1000;
- 主函数
int _tmain(int argc, _TCHAR* argv[])
{
welcome(); //欢迎界面
bool result = loginATM(); //登录
if(result == false){
exitATM(EXIT_FAILURE);
}
while(1){
showmenu(); //显示菜单
char choice = getchoice(); //接收用户输入
switch(choice){
case '1':
withdrawl(); //取款
break;
case '2':
deposit(); //存款
break;
case '3':
setpassword(); //设置密码
break;
default:
exitATM(EXIT_FAILURE); //退出系统
break;
}
}
system("pause");
return 0;
}