JavaScript账单生成程序开发:含10%折扣规则实现需求
完善后的JavaScript实现方案
原代码存在的问题
- 不符合需求逻辑:直接要求输入账单金额,而非购买数量(需求规定单价固定100元,总价需由数量计算得出)
- 数据类型处理不当:手机号转换为
Number会丢失开头的0,应保留字符串类型 - 缺少输入验证:未对姓名、手机号、购买数量的合法性做校验
- 输出信息不完整:未展示顾客姓名、手机号、购买数量等关键信息,格式不够清晰
修正后的代码
const billMaker = () => { // 获取用户输入并做基础验证 let customerName = prompt("请输入顾客姓名"); while (!customerName || customerName.trim() === "") { customerName = prompt("姓名不能为空,请重新输入顾客姓名"); } let phoneNumber = prompt("请输入顾客手机号"); // 简单的手机号格式验证(11位数字) const phoneRegex = /^1[3-9]\d{9}$/; while (!phoneRegex.test(phoneNumber)) { phoneNumber = prompt("手机号格式不正确,请输入11位有效手机号"); } let purchaseQuantity = prompt("请输入购买数量"); purchaseQuantity = parseInt(purchaseQuantity); while (isNaN(purchaseQuantity) || purchaseQuantity <= 0) { purchaseQuantity = parseInt(prompt("数量必须是正整数,请重新输入购买数量")); } // 计算原价和最终应付金额 const unitPrice = 100; const originalTotal = purchaseQuantity * unitPrice; let finalAmount = originalTotal; let discountInfo = ""; if (originalTotal > 1000) { finalAmount = originalTotal * 0.9; discountInfo = "(享受10%折扣)"; } // 整理输出信息 return ` 顾客姓名:${customerName} 手机号:${phoneNumber} 购买数量:${purchaseQuantity}件 原价:${originalTotal}元 最终应付金额:${finalAmount.toFixed(2)}元 ${discountInfo} ${customerName},欢迎再次光临! `.trim(); }; console.log(billMaker());
关键修改说明
- 贴合需求逻辑:改为询问购买数量,通过
数量×100元计算原价,完全匹配需求设定 - 输入验证:
- 确保姓名非空
- 用正则验证手机号为11位有效格式
- 确保购买数量是正整数
- 数据类型优化:手机号保留字符串类型,避免开头0丢失
- 输出信息优化:清晰展示所有关键信息,用
toFixed(2)保证金额保留两位小数,折扣信息明确 - 代码可读性:变量名采用驼峰命名法,拆分逻辑步骤,添加必要注释
内容的提问来源于stack exchange,提问作者Pradyot Sinha
相关产品推荐
相关产品推荐

