当前位置:首页 > 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实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…