当前课程知识点:程序设计基础 >  第九章 可配置的程序设计 >  9.3 指定界面语言 >  9.3.2 实现程序功能

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

9.3.2 实现程序功能在线视频

9.3.2 实现程序功能

下一节:程设论道

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

9.3.2 实现程序功能课程教案、知识点、字幕

王小二同学就决定用命令行参数来控制程序的界面语言了

那只要把不同语言的配置文件作为命令行参数给出就行了

那他设想是这样的

由于大部分人还是希望用中文界面

所以如果你这个命令行参数没有

那比如说我们这个字符串程序叫vending

然后如果你不输出任何的命令行参数

就默认就中文界面

当然如果你希望用不同的语言

你可以把这个语言的配置文件作为参数给它

比如你给中文的txt或者英文的txt都可以

如果是这样考虑 那我们main的代码要做这么一个修改

我们用argc和argv

然后我们有一个默认的语言是

比如说是中文的txt这么一个文本文件

如果我的argc>=2

那就是我确实是有这个命令行参数的

那么我们就认为说你的命令行参数中的第一个

也就是argv[1]

那是用户指定的语言的配置文件

那否则我就是默认的中文

与前面的水果的文件类似

保险起见我们在读语言文件如果发现错误了

也许是文件不存在 也许文件格式有问题

那么我们会输出一个说 这个语言文件错误的信息

后面就没法执行了 就return 0了

否则的话我就认为说所有的语言相关的

信息都读入到我的程序中间来了

那么这些不同的语言信息 我们知道肯定有很多

因为刚才我们的代码里面已经知道有好多地方都会有

那么这么多语言相关的信息

我显然可以用一个结构体的变量来统一的存储

而且因为好多函数都会设计到相关的信息的这种显示

所以为了方便起见

我把这个结构的变量定义为一个全局变量

那么这个结构到底应该是怎么样定义呢

那我们其实没有必要现在就把它想得特别清楚

我们可以根据我们代码的修改过程逐步去完善它

这也是一种逐步的求精

因此我们就先定义说我们要有一个结构

比如说LanguageMessages_t

它的内容我们待定 为了后面需要就直接声明

这是一个全局变量叫language

那后面我们就依次来处理不同语言的信息了

比如说我们先考虑这个主菜单

比较简单 假如说我设计中文菜单是这样的

我们原来是这样的

英文菜单我把其中的这些汉字都改成英文了

我感觉这样还不错

我自己编辑的很得意 对齐了很好看

那在在这两个菜单中间

显然其中的内容只要选定语言以后它就固定了

所以我就相应的在这个结构里面

我的语言信息的结构里面

我就先定义第一个变量menu主菜单

我数了一下有5行 每行50个字符反正够了

所以我就先放了这么一个变量

那么有了这个变量之后

我相应的去维护我的读语言信息的函数

以及我输出 打印这个主菜单的函数

那么首先来看我们是怎么来读这个信息的

当然我给出了文件名了

所以ifstream fin就可以打开这个文件

那如果不存在就返回false了

打开失败就返回false

如果成功我后面我认为说语言信息文件

的前面5行就是我的主菜单

我就这么定义的 所以一个for循环

i从0到小于5

然后我每个得到一行

相应的就是我菜单里面的这五行了

那我的显示菜单 原来我还写成五个cout

现在我简单了 我就一个for循环 一个cout

把每一个成员下标相应的字符串给输出出来就可以了

后面就是那些很多的提示语

我就对照原来的代码我一项一项的往后看

那后面我先看到的是水果的配置文件错误

这是一个错误信息

那么中文是水果配置文件错误

英文就写了

fruit configuration file error

那么现在有这条信息

所以我就在我的结构定义里面加了一条

加了一个变量fruit_file_error

然后呢我觉得50个字符也够了

所以我定义了一个数组是不超过50的

有了这个以后 我就可以去用了

比如说如果我的读水果配置文件真的是错误了

那么就把cout原来的这个写死的中文信息

就改成了language.fruit_file_error

这么一个成员变量了

那么有了这个信息

同样我就可以继续去完善读语言配置的函数

下一行就是fin.getline 把它读进来

那子菜单我们知道是比较复杂的

我们前面动态的根据水果去生成子菜单就比较麻烦

那么现在 我们也来继续的分析

子菜单的前两行比较简单 它是固定的信息

那么从第3行开始 它就涉及到我们说

由老板自己去配置的水果名称和价格了

那么我们仔细分析

首先就是类似的 两端分别我们这儿叫左和右

是有一个关于菜单编辑的一个符号的

比如说我们这儿叫submenu的left和right

那么再往中间看 这个两位的命令的序号

当然这个没问题

后面涉及到语言相关的是一个中文叫购买

我就翻译成英文叫buy了

然后这个变量相应我也就叫buy了

后面括号 本身问题不大

这个元 公斤 那么我把它相应的可以翻译成英文的话

那么这块地方是变化的元的这个元素

所以我分别起的名字 比如叫price_unit

就是这个价格的单位 还有重量的单位

那么就需要这么多变量去拼

所以大家看我们这个代码

我在前面两行固定的 很简单

我两个cout 从submenu的0和1就可以输出了

然后开始动态的去拼接的这样一个子菜单的地方

根据我们刚才分析

先是这个submenu_left 左边的符号

然后是固定的两位的这个命令的序号

然后是一个点

后面就是跟着我们中文的购买或者英文的购买

然后是水果名称 水果价格 元啊公斤这些最后拼起来了

那么后面不定向的空格 我们前面也已经分析过了

应该是整个子菜单的长度减去每一项的东西

原来我们因为很多信息是固定的

所以我们直接就算16减去多少

减去这个水果名称就行了

那现在我们都是从配置文件读过来的

很多结构体的成员变量了

这个大家看到这个式子比较长

这个不难吧 一项一项的去减

依次的减掉每一个串的长度就行了

那么所以最后 我们减出来有多少个空格

我就输出多少个空格 这个是比较简单

然后再把最右边的边界符号输出就可以了

但是这里面要注意的一小点是什么

我们的中文字和字中间是没有空格的

英文有空格 所以就意味着什么

如果我把两个串拼在一起

它们如果是中文的串 那么没问题 挺好

如果英文的串 这个空格到底怎么办呢 这个得有空格

所以我们可能需要很细心的去

调试我们这个英文的配置文件

就保证两个内容的中间是有空格的

这是一个细心的工作量的问题

相信大家也是有能力自己去完成的

所以后面的代码就请同学们自己去完善了

程序设计基础课程列表:

第一章 编程初步

-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.3.2 实现程序功能笔记与讨论

也许你还感兴趣的课程:

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