JS实现简单ATM机流程

693 阅读4分钟
  • 欢迎界面
  • 开卡,输入8位卡号,6位密码,姓名,18位身份证号,开卡
  • 登录:卡号,密码,显示余额,
  • 存款:输入卡号,大于0的金额,存款,
  • 取款 输入卡号,大于0的金额,取款,检查余额不足
  • 转账 输入卡号,对方卡号,对方姓名,大于0的余额,两个账号余额做对应的相减,要检查余额不足
  • 修改密码 输入卡号,旧密码,新密码两次
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
		
			class Person{
				constructor(debitCard,password,userName,IDCard){
					this.debitCardNum=debitCard
					this.pwd=password
					this.userName=userName
					this.IDCard=IDCard
					this.balance = 100
				}
				balanceState(money){
					if(this.balance>0){
						this.balance +=money
						console.log("当前余额"+this.balance);
					}
				}
			}
			let atm = {
				// info:{},
				// receiver:{},
				personList:[new Person('11111111','111111','11','111111111111111111')],
				balance:0,
				welcome(){
					console.log('欢迎登录');
					let a = prompt('1开卡2登录3修改密码4退出')
					switch (a){
						case '1':
							this.openCard()
							break;
						case '2':
							this.login()
							break;
						case '3':
							this.changePassword()
							break;
						case '4':
							console.log('已退出');
							break;
						default:
							console.log('无此操作,请重新选择');
							arguments.callee.call(this)
							break;
					}
				},
				openCard(){
					let debitCardNum="",pwd="",userName="",IDCard="",isIDCardUsed=false
					do{
						debitCardNum =prompt("请输入8位卡号")
						if(debitCardNum.trim().length!==8 || isNaN(debitCardNum)){
							console.log("卡号输入格式不对请重新输入"+debitCardNum);
						}
					}while(debitCardNum.trim().length!==8||isNaN(debitCardNum))
					do{
						pwd = prompt("请输入6位密码")
						if(pwd.trim().length!==6 ){
							console.log("密码长度不对请重新输入");
						}
					}while(pwd.trim().length!==6 )
					do{
						userName=prompt('请输入姓名')
						if(!userName.trim()){
							console.log('用户名不能为空');
						}
					}while(!userName.trim())
					do{
						IDCard = prompt('请输入18位身份证号码')
						if(IDCard.trim().length!==18 || isNaN(IDCard)){
							console.log("身份证号码长度不对请重新输入");
						}
						isIDCardUsed = this.personList.some(function(item){
							return item.IDCard===IDCard
						})
						if(isIDCardUsed){
							console.log('身份证号已被注册,请重新输入');
						}
					}while(IDCard.trim().length!==18 || isNaN(IDCard)||isIDCardUsed)
					let person = new Person(debitCardNum,pwd,userName,IDCard)
					this.personList.push(person)
					console.log(this.personList);
					this.welcome()
				},
				login(){
					console.log("登录");
					let debitCardNum='',pwd='',isCorrect=false
					do{
						debitCardNum=prompt('请输入您的8位卡号')
						if(debitCardNum.trim().length!==8 || isNaN(debitCardNum)){
							console.log("卡号输入格式不对请重新输入"+debitCardNum);
						}
					}while(debitCardNum.trim().length!==8 || isNaN(debitCardNum))
					do{
						pwd = prompt("请输入您的6位密码")
						if(pwd.trim().length!==6 ){
							console.log("密码长度不对请重新输入");
						}
					}while(pwd.trim().length!==6 )
					isCorrect = this.personList.some(function(item){
						return item.debitCardNum===debitCardNum&&item.pwd===pwd
					})
					if (isCorrect) {
						console.log("登录成功");
						this.info = this.personList.find(function(item){
						return item.debitCardNum===debitCardNum
						})
						console.log("当前余额为:"+this.info.balance);
						this.mainPage()
					} else{
						console.log("卡号或密码不正确,请重新输入");
						arguments.callee.call(this)
					}
				},
				mainPage(){
					let a = prompt('1存款2取款3转账4修改密码5注销')
					switch (a){
						case '1':
							this.deposit()
							break;
						case '2':
							this.withdrawal()
							break;
						case '3':
							this.transfer()
							break;
						case '4':
							this.changePassword()
							break;
						case '5':
							this.welcome()
							break;
						default:
							console.log('无此操作,请重新选择');
							arguments.callee.call(this)
							break;
					}
				},
				deposit(){
					let debitCardNum='',money=0
					console.log(this.info.debitCardNum);
					do{
						debitCardNum=prompt('请输入您的8位卡号')
						if(debitCardNum.trim().length!==8 || isNaN(debitCardNum)){
							console.log("卡号输入格式不对请重新输入"+debitCardNum);
						}
						if(this.info.debitCardNum!==debitCardNum){
							console.log("您的卡号输入错误,请重新输入");
						}
					}while(debitCardNum.trim().length!==8 || isNaN(debitCardNum)||this.info.debitCardNum!==debitCardNum)
					console.log("您的余额为"+this.info.balance);
					do{
						money = parseInt(prompt("请输入您需要存款的金额"))
						if(money<=0){
							console.log("金额<=0无效存款金额");
						}
					}while(money<=0)
					for (var i in this.personList) {
						if(this.personList[i].debitCardNum===debitCardNum){
							this.personList[i].balanceState(money)
						}
					}
					this.mainPage()
				},
				withdrawal(){
					let debitCardNum='',money=0
					do{
						debitCardNum=prompt('请输入您的8位卡号')
						if(debitCardNum.trim().length!==8 || isNaN(debitCardNum)){
							console.log("卡号输入格式不对请重新输入"+debitCardNum);
						}
						if(this.info.debitCardNum!==debitCardNum){
								console.log("您的卡号输入错误,请重新输入");
							}
						}while(debitCardNum.trim().length!==8 || isNaN(debitCardNum)||this.info.debitCardNum!==debitCardNum)
					console.log("您的余额为"+this.info.balance);
					do{
						money = -parseInt(prompt("请输入您需要取款的金额"))
						if(money>=0){
							console.log("金额<=0无效存款金额");
						}
						if(this.info.balance+money<0){
							console.log("您的余额不足,只有"+this.info.balance+"存款,取款失败");
						}
					}while(money>=0||this.info.balance+money<0)
					for (var i in this.personList) {
						if(this.personList[i].debitCardNum===debitCardNum){
							this.personList[i].balanceState(money)
						}
					}
					this.mainPage()
				},
				 // 转账 输入卡号,对方卡号,对方姓名,大于0的余额,两个账号余额做对应的相减,要检查余额不足
				transfer(){
					let debitCardNum='',money=0,receiverNum='',receiverName=''
					do{
						debitCardNum=prompt('请输入您的8位卡号')
						if(debitCardNum.trim().length!==8 || isNaN(debitCardNum)){
							console.log("卡号输入格式不对请重新输入"+debitCardNum);
						}
						if(this.info.debitCardNum!==debitCardNum){
								console.log("您的卡号输入错误,请重新输入");
						}
					}while(debitCardNum.trim().length!==8 || isNaN(debitCardNum)||this.info.debitCardNum!==debitCardNum)
					do{
						receiverNum=prompt('请输入对方的8位卡号')
						if(receiverNum.trim().length!==8 || isNaN(receiverNum)){
							console.log("卡号输入格式不对请重新输入");
						}
						if(this.info.debitCardNum!==receiverNum){
								console.log("对方的卡号输入错误,请重新输入");
						}
					}while(receiverNum.trim().length!==8 || isNaN(receiverNum)||this.info.debitCardNum!==receiverNum)
					do{
						receiverName=prompt('请输入姓名')
						if(!receiverName.trim()){
							console.log('用户名不能为空');
						}
					}while(!receiverName.trim())
					console.log("您的余额为"+this.info.balance);
					do{
						money = -parseInt(prompt("请输入您需要转账的金额"))
						if(money>=0){
							console.log("金额<=0无效转账金额");
						}
						if(this.info.balance+money<0){
							console.log("您的余额不足,只有"+this.info.balance+"存款,转账失败");
						}
					}while(money>=0||this.info.balance+money<0)
					for (var i in this.personList) {
						if(this.personList[i].debitCardNum===debitCardNum){
							this.personList[i].balanceState(money)
						}
					}
					for (var i in this.personList) {
						if(this.personList[i].debitCardNum===receiverNum){
							this.personList[i].balanceState(-money)
						}
					}
					this.mainPage()
				},
				// 修改密码 输入卡号,旧密码,新密码两次
				changePassword(){
					console.log("登录");
					let debitCardNum="",pwd="",pwdNew="",pwdNew2='',isCorrect=false
					do{
						debitCardNum=prompt('请输入您的8位卡号')
						if(debitCardNum.trim().length!==8 || isNaN(debitCardNum)){
							console.log("卡号输入格式不对请重新输入");
						}
					}while(debitCardNum.trim().length!==8 || isNaN(debitCardNum))
					do{
						pwd = prompt("请输入您的6位旧密码")
						if(pwd.trim().length!==6 ){
							console.log("密码长度不对请重新输入");
						}
					}while(pwd.trim().length!==6 )
					isCorrect = this.personList.some(function(item){
						return item.debitCardNum===debitCardNum&&item.pwd===pwd
					})
					if (!isCorrect) {
						console.log("卡号或密码不正确,请重新输入");
						return arguments.callee.call(this)
					}
					do{
						pwdNew = prompt("请输入您的6位新密码")
						if(pwdNew.trim().length!==6 ){
							console.log("密码长度不对请重新输入");
						}
					}while(pwdNew.trim().length!==6 )
					do{
						pwdNew2 = prompt("请再次输入您的6位新密码")
						if(pwdNew2!==pwdNew ){
							console.log("两次密码输入不一致,请重新确认新密码");
						}
					}while(pwdNew2!==pwdNew)
					for (var i in this.personList) {
						if(this.personList[i].debitCardNum===debitCardNum){
							this.personList[i].pwd=pwdNew
						}
					}
					console.log(this.personList);
					this.welcome()
				}
			}
			atm.welcome()
		</script>
	</body>
</html>