当前课程知识点:程序设计基础 >  第九章 可配置的程序设计 >  9.2 配制水果信息 >  9.2.2 实现订单处理功能

返回《程序设计基础》慕课在线视频课程列表

9.2.2 实现订单处理功能在线视频

9.2.2 实现订单处理功能

下一节:9.3.1 提出问题与命令行参数

返回《程序设计基础》慕课在线视频列表

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.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

9.2.2 实现订单处理功能笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。