#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

//提示用户操作

void alert(char *content);

/*

检查输入是否合法

maxNum: 最大的范围  5 (1-5)

*/

int getValidOperation(int maxNum);

//查询余额

void query();

//退出程序

void quit(int status);

//是否继续操作

void isContinue();

//输入密码

bool inputPassword();

//取款

void takeMoney();

//定义全局变量

int totalMoney = 1000;//总金额

int password = 12345;//密码

bool isLogined = false; //记录登陆的状态

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

int operation = 0; //记录最终选择

while (1) {

//提示用户操作

alert("1.输入密码\n2.取款\n3.查询\n4.退出\n");

//判断是否合法

operation = getValidOperation(4);

bool result ;

//对用户的操作进行处理

switch (operation) {

case 1:

//输入密码

result =  inputPassword();

if (result == false) {

//密码错误 退出

quit(EXIT_SUCCESS);

} else {

//记录状态

isLogined = true;

}

//询问是否继续操作

isContinue();

break;

case 2:

//取款

takeMoney();

isContinue();

break;

case 3:

//查询

query();

isContinue();

break;

case 4:

//退出

quit(EXIT_SUCCESS);

break;

default:

break;

}

}

return 0;

}

void alert(char *content){

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

printf("%s", content);

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

}

int getValidOperation(int maxNum){

int operation ;//记录用户输入的操作

//提示用户选择操作

printf("请选择操作:");

scanf("%d", &operation);

//判断是否合法

while (operation < 1 || operation > maxNum) {

printf("输入错误,请重新输入:");

scanf("%d", &operation);

}

//已经得到一个合法的了

return operation;

}

void quit(int status){

//显示一点内容给用户

alert("欢迎下次使用\n");

exit(status);

}

void query(){

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

printf("余额为$%d\n", totalMoney);

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

}

void isContinue(){

char choice;

printf("是否继续?(y/n):");

//抛掉上一次输入的'\n'

getchar();

//获取这一次的输入

scanf("%c", &choice);

while (choice != 'y' && choice != 'n') {

printf("输入错误(y/n):");

getchar();

scanf("%c", &choice);

}

if (choice == 'n') {

quit(EXIT_SUCCESS);

}

}

bool inputPassword(){

int inputedPassword = INT32_MAX;

int totalWrongTime = 3;

do {

printf("%s:", inputedPassword == INT32_MAX ? "请输入密码" : "密码错误 请重新输入");

scanf("%d", &inputedPassword);

//消耗一次机会

totalWrongTime--;

} while ((inputedPassword != password) && totalWrongTime > 0);

//判断密码是否输入正确

if (inputedPassword != password){

return false;

} else{

return true;

}

}

void takeMoney(){

//判断是否输入过密码了

if (isLogined == false) {

//没有登陆

bool result =  inputPassword();

if (result == false) {

//密码错误 退出

quit(EXIT_SUCCESS);

} else {

//记录状态

isLogined = true;

}

} else {

//1.提示额度

alert("1.$100\n2.$200\n3.$500\n4.返回\n");

//判断输入

int operation = getValidOperation(4);

int outMoney = 0;

switch (operation) {

case 1:

//100

outMoney = 100;

break;

case 2:

//200;

outMoney = 200;

break;

case 3:

//500

outMoney = 500;

break;

case 4:

//返回

break;

default:

break;

}

//显示取款金额

if (totalMoney < outMoney){

alert("余额不足\n");

} else{

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

printf("取款%d 余额%d\n", outMoney, totalMoney -= outMoney);

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

}

}

}

1207--ATM自动取款机的实现的更多相关文章

  1. 语言模拟ATM自动取款机系统

    C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...

  2. C#实现ATM自动取款机

    本篇用C#实现ATM自动取款机的一些功能.面临的第一个问题是:如何把与自动取款机相关的有形的.无形的方面抽象出来.大致如下: (1)关于用户帐号的类:Account(2)关于银行数据库的类:BankD ...

  3. ATM自动取款机程序感想

    上周四的Java考试,老师并没有我们考暑假给我们布置的样卷的java程序,而是让我们做一个设计ATM的程序,然而这个对于我们来说好难,因为暑假没有学好java,首先基础知识还没有掌握,输入数据一开始都 ...

  4. linux 下用C实现 ATM 自动取款机功能 (进程间通信)

    直接先上图: 项目需求: 主要分为两人大模块: 客户端 .进入时的功能开户.销户.登录.解锁 开户:输入姓名.身份证号.设置密码,如果开户成功,则服务器上保存一个账号信号(一个账号存一个文件,文件名建 ...

  5. 5、原生jdbc链接数据库实例-自动取款机

    ATM自动取款机需求 一.登陆 1.界面要求:服务选择 1.老用户登陆:进入后输入卡号密码登陆 2.新用户开户:开户需要输入身份证号,记录姓名,开户时间.然后机器给出卡号,原始密码:111111. 卡 ...

  6. [CareerCup] 12.6 Test an ATM 测试一个自动取款机

    12.6 How would you test an ATM in a distributed banking system? 这道题问我们如何来测试一个自动取款机,我们首先要询问下列问题: - 谁来 ...

  7. NEYC 2017 自动取款机 atm Day6 T1

                                                                                          自动取款机 [问题描述] 小 ...

  8. 洗礼灵魂,修炼python(77)--全栈项目实战篇(5)—— ATM自动存取机系统

    要求: 1.完成常识中的ATM存取款机功能 2.把ATM机故障考虑进去 3.不能直接输入账户名和卡号等等信息,模拟出插银行卡让ATM机自动读取卡信息 4.密码验证超过三次错误即锁定账户 5.操作类型有 ...

  9. 你怎么改造和重新设计一个ATM银行自动取款机

  10. MySQL银行ATM存取款机系统(需求分析)

    银行ATM需求文档 一.E-R图形文 二.开发步骤 1.明确需求--数据库设计--编码实现功能--测试 2.绘制e-r图--绘制数据库模型图--使用三大方式规范数据库结构 三.开发思路 1. 模型图综 ...

随机推荐

  1. vi 快捷键【转】【weber整理必出精品】

    光标的移动 命令 光标移动 h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开头 ...

  2. linux删除ORACLE【weber出品必属精品】

    关闭数据库 sqlplus / as sysdba shutdown abort 清除oracle软件 su - oracle cd $ORACLE_BASE rm -rf * rm -rf /etc ...

  3. OD调试学习笔记7—去除未注册版软件的使用次数限制

    OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需 ...

  4. URI和URL

    URI(uniform resource identifier),统一资源标识符,用来唯一的标识一个资源. URL(uniform resource locator),统一资源定位器,它是一种具体的U ...

  5. Qt Creator的配置

    说明:一直想入手QT,看了相关的教程也有一段时间了,但苦于安装QT编辑器一直没有成功,今天手痒痒,于是又来捣鼓一阵子,成功了,特记录下来,方便日后查阅: 环境:win7 x64  + QT Creat ...

  6. [转]hibernate主键生成策略

    1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识使用SQL Server 和 MySQL 的 ...

  7. 永久存储:腌制一缸美味的泡菜 - 零基础入门学习Python031

    永久存储:腌制一缸美味的泡菜 让编程改变世界 Change the world by program 从一个文件里读取字符串非常简单,但如果想要读取出数值,那就需要多费点儿周折.因为无论是read() ...

  8. AngularJS 父子控制器

    <!doctype html> <html ng-app="myApp"> <head> <script src="C:\\Us ...

  9. meta 属性

    几乎所有的网页里,我们可以看到类似下面这段的html代码:<head><meta http-equiv="content-Type" content=" ...

  10. OC和C语言的混编注意点和好处

    苹果的Objective-C编译器批准用户在统一个源文件里自由地混杂利用C++和Objective-C,混编后的语言叫Objective-C++.有了它,你就能够在Objective-C利用过程中利用 ...