学习javascript,实现一个简易售卖机的功能

server/2024/10/21 20:37:15/

有同学提问,说想实现一个JS售卖机的功能,我觉得这个挺有意思的,正是初学者学习JS,锻炼软件开发思维的一个好题目,所以就实现了一下,希望可以有帮助。

目录

1 需求分析

2  开发实现

2.1 商家端录入

2.2 用户端实现

3 建议改进 


1 需求分析

需求是这样子的:完成一个自动售货机,至少有3个商品,每个商品都有价格和数量,每购买一次商品,数量会减1,余额也会减少。当余额小于商品的价格时,会提示“余额不足,无法购买商品”;当数量为0如果用户继续购买时,会提示“商品已售完,无法购买”。

通过需求,我们可以分析出以下实现步骤:

商家端实现步骤

  1. 可以自主录入,录入商品名称、商品单价、商品初始数量;
  2. 录入完成后,有按钮,点击按钮保存商品;
  3. 保存商品后,需要展示自己已经录入过商品信息;
  4. 录入结束,就可以跳转到用户界面去售卖了;

用户端实现步骤 

  1. 展示商家页面录入的商品,展示为列表
  2. 列表元素,展示信息包括商品名称、商品单价、剩余数量以及购买按钮
  3. 用户默认初始余额为0,;
  4. 做简单点,这个页面可以为用户充值,并展示充值金额;
  5. 当用户购买商品时,需要判断余额大于购买商品的单价并且商品数量大于0,则用户余额减去商品单价,并且商品剩余数量减1;
  6. 当用户余额小于购买商品单价时,提示“余额不足,无法购买该商品”;
  7. 当用户购买商品数量等于0时,提示“该商品已售完,无法购买”

2  开发实现

2.1 商家端录入

因为商家端录入的数据,要和用户端跨页面通信数据,所以我们把录入的信息存入localStorage中,源码实现如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>商家录入</title>
<style></style>
</head>
<body><p><b>商品录入</b></p><div><label>商品名称:</label><input type="text" id="name" /></div><div><label>商品金额:</label><input type="number" id="money" /></div><div><label>商品数量:</label><input type="number" id="number" /></div><button onclick="enterProduct()">录入</button><br/><p><b>已录入商品展示:</b></p><div id="productList"></div><button onclick="go2Sell()">开始售卖</button><script>var productList = [];function enterProduct() {var name = document.getElementById('name').value;var money = document.getElementById('money').value;var number = document.getElementById('number').value;var productShowDom = document.getElementById('productList');productList.push({name,money,number});localStorage.setItem('product', JSON.stringify(productList));// 展示已录入商品var proShowArr = [], proShowStr = '';for (var i=0;i<productList.length;i++) {proShowArr.push('<div>');proShowArr.push(`${i+1} ${productList[i]['name']} ¥${productList[i]['money']} ${productList[i]['number']}`);proShowArr.push('</div>');}proShowStr = proShowArr.join('');productShowDom.innerHTML = proShowStr;}function go2Sell() {if (productList.length === 0) {alert('请录入商品后再进行售卖');return;}}</script>
</body>
</html>

2.2 用户端实现

首先从localStorage获取数据,展示为列表,初始化展示用户余额为0;然后按钮操作逐个进行判断,源代码如下:

javascript"><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>用户购买</title>
<style>#productListBox {margin: 100px;margin-bottom: 20px;display: flex;width: 800px;}#productListBox div {margin-left: 50px;width: 200px;border: 1px solid #CCC;}.recharge {margin-left: 150px;}
</style>
</head>
<body><div id="productListBox"></div><p class="recharge"><input type="number" id="balanceInput" /><button onclick="rechMoney()">充值</button></p><p class="recharge">余额:¥<span id="balance"></span></p><script>var balanceDom = document.getElementById('balance');balanceDom.innerText = 0;function showProductList() {var productDom = document.getElementById('productListBox');var proData = localStorage.getItem('product');proData = JSON.parse(proData);var proShowArr = [], proShowStr = '';for (var i=0;i<proData.length;i++) {proShowArr.push('<div>');proShowArr.push(`<p>${proData[i]['name']}</p>`);proShowArr.push(`<p>售价:${proData[i]['money']}</p>`);proShowArr.push(`<p>剩余:${proData[i]['number']}</p>`);proShowArr.push(`<button onclick=buy(${i})>购买</button>`);proShowArr.push('</div>');}proShowStr = proShowArr.join('');productDom.innerHTML = proShowStr;}showProductList();function rechMoney() {var rechMoneyVal = document.getElementById('balanceInput').value;var balanceDom = document.getElementById('balance');balanceDom.innerText = rechMoneyVal;document.getElementById('balanceInput').value = '';}function buy(index) {var proData = localStorage.getItem('product');proData = JSON.parse(proData);if (Number(proData[index]['number']) <= 0) {alert('该商品已售完,无法购买');return;}var balanceDom = document.getElementById('balance');if (Number(balanceDom.innerText) < Number(proData[index]['money'])) {alert('余额不足,无法购买该商品');return;}var newBalance = Number(balanceDom.innerText) - Number(proData[index]['money']);balanceDom.innerText = newBalance;var productItemNum = Number(proData[index]['number']);productItemNum--;proData[index]['number'] = productItemNum;localStorage.setItem('product', JSON.stringify(proData));showProductList();}</script>
</body>
</html>

3 建议改进 

这事比较简易的实现,首先来说样式需要做的漂亮一些,要不这就真的只是一个小demo;录入的时候,录入完成一个就应该把输入框内的信息清除掉;我们这里存入了localStorage,到了真实项目开发,或者往后做,肯定是要通过接口存入数据库的,到时候就可以录入更多更多的商品了。

如果你是一名在校学生,赶紧抓紧时间学习起来吧,希望等你出来的时候,可以跑赢更多的人。


http://www.ppmy.cn/server/39272.html

相关文章

全面了解俄罗斯的VK开户和Yandex投放及内容运营

俄罗斯的VKontakte&#xff08;简称VK&#xff09;和Yandex是两个重要的在线平台&#xff0c;对于希望在俄罗斯市场进行推广的企业来说&#xff0c;了解如何在这些平台上开户和投放广告以及内容运营是非常关键的。 俄罗斯vk广告如何开户&#xff1f; 通过上海上弦进行俄罗斯V…

智能量化交易系统开发自动炒币机器人系统开发原理解析

Q&#xff1a;什么是量化交易&#xff1f;数字资产量化交易第三方辅助软件。其具备以下三个特点:1、资产安全资产在用户自己的交易所账户&#xff0c;软件只能通过API帮用户下单。2、操作简单用户只需要选择自己喜欢的操作风格&#xff0c;即可启动量化&#xff0c;通过API接口…

如何更好地导入Scrum?

前面写了一系列极限编程的分享&#xff0c;目前这系列先告一段落&#xff0c;后面等我们禅道20系列版本重构完再和大家分享TDD方面的经验体会。极限编程聊完了&#xff0c;接下来和大家聊聊Scrum。Scrum市面上相关的书籍、视频和分享比极限编程要多很多&#xff0c;我不做赘述。…

这是一关于DSC相关的文档

这是一关于DSC相关的文档 上面这幅图清晰的展示了somewhat flat的像素图示

校友录系统的设计与开发

**中文摘要&#xff1a;**随着互联网技术的不断发展和普及&#xff0c;人们对于信息化、数字化的需求也越来越高。在此背景下&#xff0c;校友录系统的设计与开发显得尤为重要。本文旨在设计和开发一款方便实用的校友录系统&#xff0c;为学校提供一个联系和管理校友的平台&…

如何用爬虫解决问题

一、介绍 爬虫指的是一种自动访问互联网上网页的程序,通过自动化的方式获取网页上的数据并进行处理。它可以从互联网的各个网站上抓取信息,如新闻、商品信息、图片等,并将这些数据存储或用于其他用途,如数据分析、搜索引擎索引等。爬虫可以模拟人的行为,通过访问网页上的…

太速科技-FMC377_双AD9361 射频收发模块

FMC377_双AD9361 射频收发模块 FEATURES&#xff1a; ◆ Coverage from 70M ~ 6GHz RF ◆ Flexible rate 12 bit ADC/DAC ◆ Fully-coherent 4x4 MIMO capability, TDD/FDD ◆ RF ports: 50Ω Matched ◆ support both internal reference and exter…

ESLint: Unexpected ‘debugger‘ statement.(no-debugger)(debugger报红)

ESLint: Unexpected debugger statement.(no-debugger) 解决办法&#xff1a; 找到.eslintrc.js文件中rules的no-debugger更改为0即可