当前位置:首页 > VUE

vue实现atm

2026-01-11 21:34:32VUE

vue实现atm

Vue实现ATM机功能

使用Vue实现一个简单的ATM机功能需要模拟存款、取款、查询余额等操作。以下是一个基于Vue 3的实现方案:

核心功能设计

创建Vue组件模拟ATM机界面,包含以下功能:

  • 用户登录验证
  • 余额查询
  • 存款操作
  • 取款操作
  • 交易记录

组件代码实现

<template>
  <div class="atm-machine">
    <div v-if="!loggedIn" class="login-section">
      <h3>ATM登录</h3>
      <input v-model="cardNumber" placeholder="卡号" type="text">
      <input v-model="pin" placeholder="密码" type="password">
      <button @click="login">登录</button>
    </div>

    <div v-else class="atm-interface">
      <h3>欢迎,{{ currentUser.name }}</h3>
      <div class="balance">当前余额: {{ currentUser.balance }}元</div>

      <div class="actions">
        <button @click="showDeposit = true">存款</button>
        <button @click="showWithdraw = true">取款</button>
        <button @click="viewTransactions">查看交易记录</button>
        <button @click="logout">退出</button>
      </div>

      <div v-if="showDeposit" class="transaction-dialog">
        <h4>存款</h4>
        <input v-model.number="amount" type="number" placeholder="金额">
        <button @click="deposit">确认</button>
        <button @click="showDeposit = false">取消</button>
      </div>

      <div v-if="showWithdraw" class="transaction-dialog">
        <h4>取款</h4>
        <input v-model.number="amount" type="number" placeholder="金额">
        <button @click="withdraw">确认</button>
        <button @click="showWithdraw = false">取消</button>
      </div>

      <div v-if="showTransactions" class="transactions">
        <h4>交易记录</h4>
        <ul>
          <li v-for="(txn, index) in transactions" :key="index">
            {{ txn.type }}: {{ txn.amount }}元 - {{ txn.date }}
          </li>
        </ul>
        <button @click="showTransactions = false">关闭</button>
      </div>
    </div>
  </div>
</template>

JavaScript逻辑部分

<script>
import { ref } from 'vue';

export default {
  setup() {
    const cardNumber = ref('');
    const pin = ref('');
    const loggedIn = ref(false);
    const currentUser = ref(null);
    const showDeposit = ref(false);
    const showWithdraw = ref(false);
    const showTransactions = ref(false);
    const amount = ref(0);
    const transactions = ref([]);

    // 模拟用户数据
    const users = [
      { cardNumber: '123456', pin: '1234', name: '张三', balance: 1000 },
      { cardNumber: '654321', pin: '4321', name: '李四', balance: 2000 }
    ];

    const login = () => {
      const user = users.find(u => 
        u.cardNumber === cardNumber.value && u.pin === pin.value
      );

      if (user) {
        currentUser.value = { ...user };
        loggedIn.value = true;
        cardNumber.value = '';
        pin.value = '';
      } else {
        alert('卡号或密码错误');
      }
    };

    const logout = () => {
      loggedIn.value = false;
      currentUser.value = null;
      showDeposit.value = false;
      showWithdraw.value = false;
      showTransactions.value = false;
    };

    const deposit = () => {
      if (amount.value > 0) {
        currentUser.value.balance += amount.value;
        transactions.value.push({
          type: '存款',
          amount: amount.value,
          date: new Date().toLocaleString()
        });
        amount.value = 0;
        showDeposit.value = false;
      } else {
        alert('请输入有效金额');
      }
    };

    const withdraw = () => {
      if (amount.value > 0 && amount.value <= currentUser.value.balance) {
        currentUser.value.balance -= amount.value;
        transactions.value.push({
          type: '取款',
          amount: amount.value,
          date: new Date().toLocaleString()
        });
        amount.value = 0;
        showWithdraw.value = false;
      } else {
        alert('金额无效或余额不足');
      }
    };

    const viewTransactions = () => {
      showTransactions.value = true;
    };

    return {
      cardNumber,
      pin,
      loggedIn,
      currentUser,
      showDeposit,
      showWithdraw,
      showTransactions,
      amount,
      transactions,
      login,
      logout,
      deposit,
      withdraw,
      viewTransactions
    };
  }
};
</script>

样式设计

<style scoped>
.atm-machine {
  max-width: 400px;
  margin: 0 auto;
  padding: 20px;
  border: 1px solid #ccc;
  border-radius: 10px;
  background-color: #f5f5f5;
}

.login-section, .atm-interface {
  display: flex;
  flex-direction: column;
  gap: 15px;
}

input {
  padding: 8px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

button {
  padding: 10px;
  background-color: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

button:hover {
  background-color: #0056b3;
}

.transaction-dialog, .transactions {
  margin-top: 20px;
  padding: 15px;
  background-color: white;
  border-radius: 5px;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.transactions ul {
  list-style-type: none;
  padding: 0;
}
</style>

功能扩展建议

  1. 添加银行卡插入动画效果增强用户体验
  2. 实现交易收据打印功能
  3. 添加密码错误次数限制
  4. 集成后端API实现真实银行账户交互
  5. 增加多语言支持
  6. 添加触摸屏友好设计

这个实现提供了基本的ATM功能,可以根据实际需求进一步扩展和完善。组件化的设计使得各个功能模块清晰分离,便于维护和扩展。

vue实现atm

标签: vueatm
分享给朋友:

相关文章

vue实现增删改

vue实现增删改

Vue 实现增删改查功能 Vue.js 是一个流行的前端框架,用于构建用户界面。以下是使用 Vue.js 实现增删改查(CRUD)功能的方法。 数据初始化 在 Vue 实例的 data 中初始化一…

vue实现单选

vue实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选功能。单选按钮的…

vue实现滚动中断

vue实现滚动中断

Vue 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @whe…

vue的动画实现

vue的动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要通过内置组件和第三方库支持。 使用 Vue 内置过渡组件 Vue 的 transition 和 transition-group 组件可…

课程表vue实现

课程表vue实现

实现课程表的Vue组件 创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案: 数据结构设计 const timetableData = ref([ {…

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录…