1207--ATM自动取款机的实现
#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自动取款机的实现的更多相关文章
- 语言模拟ATM自动取款机系统
C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...
- C#实现ATM自动取款机
本篇用C#实现ATM自动取款机的一些功能.面临的第一个问题是:如何把与自动取款机相关的有形的.无形的方面抽象出来.大致如下: (1)关于用户帐号的类:Account(2)关于银行数据库的类:BankD ...
- ATM自动取款机程序感想
上周四的Java考试,老师并没有我们考暑假给我们布置的样卷的java程序,而是让我们做一个设计ATM的程序,然而这个对于我们来说好难,因为暑假没有学好java,首先基础知识还没有掌握,输入数据一开始都 ...
- linux 下用C实现 ATM 自动取款机功能 (进程间通信)
直接先上图: 项目需求: 主要分为两人大模块: 客户端 .进入时的功能开户.销户.登录.解锁 开户:输入姓名.身份证号.设置密码,如果开户成功,则服务器上保存一个账号信号(一个账号存一个文件,文件名建 ...
- 5、原生jdbc链接数据库实例-自动取款机
ATM自动取款机需求 一.登陆 1.界面要求:服务选择 1.老用户登陆:进入后输入卡号密码登陆 2.新用户开户:开户需要输入身份证号,记录姓名,开户时间.然后机器给出卡号,原始密码:111111. 卡 ...
- [CareerCup] 12.6 Test an ATM 测试一个自动取款机
12.6 How would you test an ATM in a distributed banking system? 这道题问我们如何来测试一个自动取款机,我们首先要询问下列问题: - 谁来 ...
- NEYC 2017 自动取款机 atm Day6 T1
自动取款机 [问题描述] 小 ...
- 洗礼灵魂,修炼python(77)--全栈项目实战篇(5)—— ATM自动存取机系统
要求: 1.完成常识中的ATM存取款机功能 2.把ATM机故障考虑进去 3.不能直接输入账户名和卡号等等信息,模拟出插银行卡让ATM机自动读取卡信息 4.密码验证超过三次错误即锁定账户 5.操作类型有 ...
- 你怎么改造和重新设计一个ATM银行自动取款机
- MySQL银行ATM存取款机系统(需求分析)
银行ATM需求文档 一.E-R图形文 二.开发步骤 1.明确需求--数据库设计--编码实现功能--测试 2.绘制e-r图--绘制数据库模型图--使用三大方式规范数据库结构 三.开发思路 1. 模型图综 ...
随机推荐
- C#类型基础——学习笔记一
1.C#中的类型一共分两类,一类是值类型,一类是引用类型.2.结构类型变量本身就相当于一个实例.3.调用结构上的方法前,需要对其所有的字段进行赋值.4.所有元素使用前都必须初始化.5.(结构类型)ne ...
- C#计算当前日期为一年中的第几周
方法一: private int WeekOfYear(string date) { DateTime curDay = Convert.ToDateTime(date); i ...
- jquery的Post方法$.post()
$.post是jquery自带的一个方法,使用前需要引入jquery.js 语法:$.post(url,data,callback,type); url(必须):发送请求的地址,String类型 da ...
- jvm的client和server
最近研究c++代码调用java的jar,发现64位的下的jvm在server路径,而32位的jvm则存在client路径下面,于是十分好奇,查了下,这里做个记录 JVM Server模式与client ...
- mysql 超时 问题处理
当数据库出现10055和10048错误时,处理办法: 第一 链接超时设置(1)打开注册表:regedit 找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ ...
- 一个超级简单php的留言板
第一步:配置好测试环境:(详细略了) 第二部:新建一个数据库,命名为guestbook(名字可以随便改),可以直接在phpmyadmin里面操作,在数据库里面新建一张表‘content’,表里面有4个 ...
- Python操作 Memcache、Redis、RabbitMQ、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- [Google Code Jam (Qualification Round 2014) ] B. Cookie Clicker Alpha
Problem B. Cookie Clicker Alpha Introduction Cookie Clicker is a Javascript game by Orteil, where ...
- cf C. Quiz
http://codeforces.com/contest/337/problem/C 得到的分数为:(2^1+2^2+...+2^X)*k + m-X*k = (2^(X+1)-2)*k + m-X ...
- poj2505-A multplication game
题意:两个人轮流用2~9来乘n,使n不断扩大,n开始为1.当给一个固定值k,谁先使n超过k谁赢. 分析:能到达必败态的状态为必胜态,只能到达必胜态的状态为必败态.对于给定的k,n>=k时为必败态 ...