当前课程知识点:程序设计基础 > 第九章 可配置的程序设计 > 9.2 配制水果信息 > 9.2.2 实现订单处理功能
处理订单
由于我们现在水果名称和价格放在一个数组里头
所以我们需要相应的去改一些地方
那第一个就是显示子菜单
原来我们是固定的写死在代码里头的
实际上我们每个水果有一个编号
我们假设比如1是苹果2是香蕉3是橘子4是什么
另外这个子菜单里头我现在就要输出
这个真正的水果名称和价格
当然我希望说输出要美观什么叫美观
我应该对齐对吧我的这个菜单原来是一个
周围是一个有符号的框里头的内容希望不是乱七八糟的
这是我们关于子菜单的显示问题
下面就是我原来只是固定的处理买苹果还是买香蕉
现在我要处理每一种水果了
最后当然结账是我也要各种水果价格总价要一起算的
那请看我们这个代码
那原来的部分我们当然可以不变说看现在要变的部分
也就我们首先要先看这个显示菜单中间变化的部分
涉及到我们水果名称和价格的部分那怎么做
我们是这么来分析我们这个子菜单中间有变动这一行的
大家请看我把这个所有字符位置我先编上号
123456789往上编那么我现在先假定说
我这个子菜单最长一行可能40个字符
然后显然第一个字符我现在具体菜单的用+来表示
编辑的左右都是+
然后我们一开始是一个序号
这个跟我们的命令相对应的
反正基本上我们水果也不会特别特别多
所以我们觉得两位数就够了
所以我这写了nn来表示这个两位数
不超过两位数也可能一位数
然后·空格显示的是购买某某水果
所以购买这两个字是固定的
后面每公斤多少元这个也是固定的
所以我在这个图里面就用这个黄色的底来显示了说
这些内容有些是当然文字也固定比如购买
括号多少元或者这多少公斤
有些内容虽然它的内容不固定
但它的这个占的字符的个数是固定的
比如说刚才这个nn不超过两位数的数值
后面写上价格我认为我暂时可能
我每公斤水果不超过100块钱的
所以两位整数加两位小数就够了
所以这些不管是固定还是不固定的
那么它们所占的字符个数就是我们说叫宽度
这个是固定的 当然这里头可以再仔细的提一下
就是一般来讲在我们这个window环境下
这个汉字会占两个大概英文字符的一个位置
所以我需要知道购买元公斤字符的位置需要两个
所以这些黄底的不管是红字还是蓝字
宽度是固定的可是同样是图中的蓝底黑字内容
它不固定的宽度要占多少个字符也不固定
那这个水果名称肯定是会变
另外加一些空格这个因为我最后需要对齐
所以大家可以看到说如果水果名称比较长
那显然我空格比较少如果水果名称比较短
那我空格就比较多
那所以我能找到一个不变的量是什么找规律
就是水果名称和连续空格他们的它们的长度应该是固定值
现在我就可以来写我的这个子菜单的这一行代码了
大家看这个框的框住的部分
首先我输出最左边的这么一个边界的字符的一个+
然后刚才讲了对于那个数值这个命令的序号是个两位数
不超过两位数所以我setw设定宽度是2
然后我的这个数组下标从0开始
所以我现在显示命令从1开始的所以i+1
然后依次输出购买水果名称括号它的价格
价格我刚才也说了打算是不超过几十块钱几毛几分
所以加上中间那个点一共是5个字符的位置
所以我setw(5)
然后设置输出精度小数点后保留两位
价格后面元/公斤再后面应该就是变动的空格了
多少空格空格数加水果名称
长度应该是个固定值那么我算了一下
我真的算了一下因为我一共最长的
菜单那一行大概四个字符所以我减掉那些固定值说
水果名称加空格应该是16个字符
所以大家看到我有个for循环
16我减掉了水果名称的长度
我就需要多少个空格来填补上最后右边一个
这个边框的符号这样我就把动态这一行给输出了
那后面的这个结账放弃购买就比较简单
这肯定是我所有的水果数目再往后的依次的命令对应的值
所以是我们看到命令序号应该是
fruit_number+1/+2这个比较简单
那么关于怎么买每一种水果原来我们是 switch/case
现在我不知道有多少个水果
这时候switch/case不能用了我就只能用if了
那么这是第一个想法想要改变的
第二个想法改变就是说原来我固定的写苹果的总重量
那现在我显然水果都用数组来表示了
我重量也应该是一个数组
所以我还需要这么一个相应的数组
大家请看我们代码是这个样子的
我先准备好各种水果的总重量
然后进入我们的while的循环
然后当我通过getinteger得到了我选择哪种水果之后
这时候不能用switch/case了只能用if语句
就如果我输入的是有效的水果的相应的命令
所以if应该大于零
表示它至少是正常的大于一二三四可能这样的一个命令
另外你不是说后面的一个结账的命令
所以它还需要if小于等于fruit_number
然后提示输入重量进行计算
那相应的就应该是input-1这么一个水果
它增加了新的一次称重然后它相应的这个
这个总价和这种水果的总重量相应的我们维护更新
最后在我们结完账或者放弃
我们退回到最前面的主菜单的时候
当然我们得把这个new出来的weight给它清空
delete []weight这是我们买水果的处理
那结账也可以写了因为我们已经用数组来表示了
各种水果的名称价格另外有一个累记的买的重量称重
所以把原来代码相应的改变一下
原来还if苹果怎么样if香蕉怎么样
现在我们写for循环对应的每一种可能的水果
如果确实是买了一定的重量那么我们就输出
你买了这种水果是多少重量总价格多少元
-1.1 基础知识
-1.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测