当前位置:首页 > JavaScript

js实现旅游结算

2026-02-03 02:44:23JavaScript

实现旅游结算功能

使用JavaScript实现旅游结算功能需要结合前端交互与后端数据处理。以下是一个基于前端实现的简化方案,包含价格计算、优惠券应用和订单生成逻辑。

价格计算逻辑

定义旅游产品的基础价格和附加服务费用计算方式:

function calculateBasePrice(destination, duration) {
  const priceMap = {
    'beijing': 2000,
    'shanghai': 2500,
    'guangzhou': 1800
  };
  return priceMap[destination] * duration;
}

function calculateExtraServices(services) {
  return services.reduce((total, service) => {
    const fees = {
      'insurance': 100,
      'guide': 300,
      'meal': 150
    };
    return total + (fees[service] || 0);
  }, 0);
}

优惠券验证系统

实现优惠券折扣计算和验证逻辑:

function applyCoupon(total, couponCode) {
  const coupons = {
    'SUMMER10': 0.9,
    'WELCOME20': 0.8,
    'VIP15': 0.85
  };
  const discount = coupons[couponCode] || 1;
  return total * discount;
}

订单生成流程

整合所有计算步骤生成最终订单:

function generateOrder(orderDetails) {
  const { destination, duration, services, couponCode } = orderDetails;

  const basePrice = calculateBasePrice(destination, duration);
  const extraFees = calculateExtraServices(services);
  const subtotal = basePrice + extraFees;
  const total = applyCoupon(subtotal, couponCode);

  return {
    destination,
    duration,
    services,
    basePrice,
    extraFees,
    discount: subtotal - total,
    totalPrice: total
  };
}

前端交互示例

创建简单的HTML表单和事件处理:

<form id="bookingForm">
  <select id="destination" required>
    <option value="beijing">北京</option>
    <option value="shanghai">上海</option>
    <option value="guangzhou">广州</option>
  </select>

  <input type="number" id="duration" min="1" value="3" required>

  <div class="services">
    <label><input type="checkbox" name="service" value="insurance"> 保险</label>
    <label><input type="checkbox" name="service" value="guide"> 导游</label>
    <label><input type="checkbox" name="service" value="meal"> 餐饮</label>
  </div>

  <input type="text" id="coupon" placeholder="优惠码">
  <button type="submit">计算总价</button>
</form>

<div id="orderResult"></div>

<script>
document.getElementById('bookingForm').addEventListener('submit', function(e) {
  e.preventDefault();

  const destination = document.getElementById('destination').value;
  const duration = parseInt(document.getElementById('duration').value);
  const couponCode = document.getElementById('coupon').value.trim();

  const serviceCheckboxes = document.querySelectorAll('input[name="service"]:checked');
  const services = Array.from(serviceCheckboxes).map(cb => cb.value);

  const order = generateOrder({ destination, duration, services, couponCode });
  displayOrderResult(order);
});

function displayOrderResult(order) {
  const resultDiv = document.getElementById('orderResult');
  resultDiv.innerHTML = `
    <h3>订单明细</h3>
    <p>目的地: ${order.destination}</p>
    <p>天数: ${order.duration}</p>
    <p>基础费用: ¥${order.basePrice}</p>
    <p>附加服务: ¥${order.extraFees}</p>
    <p>优惠减免: ¥${order.discount}</p>
    <h4>总计: ¥${order.totalPrice.toFixed(2)}</h4>
  `;
}
</script>

数据验证增强

添加输入验证确保数据可靠性:

js实现旅游结算

function validateOrderInput(orderDetails) {
  if (!['beijing', 'shanghai', 'guangzhou'].includes(orderDetails.destination)) {
    throw new Error('无效的目的地');
  }
  if (orderDetails.duration < 1 || orderDetails.duration > 30) {
    throw new Error('天数必须在1-30之间');
  }
  // 其他验证规则...
}

完整实现建议

  1. 将价格配置数据存储在数据库或单独配置文件中
  2. 添加本地存储保存用户订单历史
  3. 实现与后端API的对接进行真实支付处理
  4. 增加多种支付方式选择逻辑
  5. 添加多语言支持适应不同地区用户

这个实现方案可根据实际需求扩展,例如添加日期选择、多人价格计算、税费计算等功能模块。对于生产环境,建议使用框架如React或Vue构建更复杂的交互界面。

标签: 旅游js
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…