针对“自动出题分类计算展示结果系统”的分析,改进建议与阅读心得
软件工程综合实践专题 第二次作业
这是来自我的合作对象庞胜(1759229)的一段代码,该系统的作用是随机给出指定数量的四则运算的题目并且答案在0-100的范围中的系统,包括了分为三个类别给出答案,设计了一系列的操作和项,来实现一组完整的基础操作和整个出题给出答案的流程。
源代码:
#include<iostream>
#include<time.h>
#include<string>
using namespace std;
int main()
{
int num;
int div;
int x, y, m, i, j, t,s;
cout << "请输入要定制的题数:" ;
cin >> num;
cout << "除数显示:1.显示整数;2.显示余数;3.显示分数"<<endl<<"请选择:";
cin >> div;
string *res1 = new string[num];
string *res2 = new string[num];
string *res3 = new string[num];
string *a = new string[num];
string *b = new string[num];
srand(time(0));
for (i = 0; i<num;)
{
x = rand() % 100; //0~99
y = rand() % 100;
m = rand() % 4;
b[i] = to_string(x) + to_string(m) + to_string(y);
for (j = 0; j < i; j++)
if (a[j] == b[i])
break;
if (j == i) {
switch (m)
{
case 0:
s = x + y;
if (s > 0 && s < 100) {
cout << x << "+" << y << "=" << "\t";
res1[i] = to_string(s);
res2[i] = to_string(s);
res3[i] = to_string(s);
i++;
}
break;
case 1:
if (x < y)
{
t = x;
x = y;
y = t;
}
cout << x << "-" << y << "=" << "\t";
res1[i] = to_string(x - y);
res2[i] = to_string(x - y);
res3[i] = to_string(x - y);
i++;
break;
case 2:
s = x * y;
if (s > 0 && s < 100) {
cout << x << "*" << y << "=" << "\t";
res1[i] = to_string(s);
res2[i] = to_string(s);
res3[i] = to_string(s);
i++;
}
break;
case 3:
if (y != 0) {
cout << x << "/" << y << "=" << "\t";
res1[i] = to_string(x / y);
res2[i] = to_string(x / y) + "..." + to_string(x % y);
res3[i] = to_string(x) + '/' + to_string(y);
i++;
}
}
}
}
cout << endl;
cout << "题目答案为:" << endl;
switch (div)
{
case 1:
for (i = 0; i < num; i++)
cout << res1[i] << "\t";
break;
case 2:
for (i = 0; i < num; i++)
cout << res2[i] << "\t";
break;
case 3:
for (i = 0; i < num; i++)
cout << res3[i] << "\t";
default:
break;
}
cout << endl;
return 0;
}
程序测试运行截图:
一、编程风格
首先对于代码提供出的代码规则来看,对于此代码的编程者有着一定的编程风格,在程序的前面我们可以看到这是一个c++的程序代码,但是在int main()中我们很容易看到,在对变量定义的时候,编程者习惯使用c语言的定义风格,所有变量放在最前面一次全部定义初始化,而不是在使用时在开始定义,在定义风格上来看,除了特殊的几个变量采用了英文的定义方式,其他的单变量全局变量在定义时候并没有规则而是随机的单词用来定义,在后期的使用中可能对于代码阅读者来说就有一点的前后文联系困难不太利于代码的阅读,当变量达到一定的长度和数量时候,这种命名方式就是的编程者出现记忆混乱的风险很容易出现代码错误。
在另外一个方面我们看到,编程者在编写需要阅读分享的程序代码时,整个代码段只出现了一个程序注释,在我们的程序编写中无论是为了自己的阅读以及他人的使用我们建议是做到4-5行代码一注释,在面对重要部分或者重要功能时也要添加注释。
二、功能实现
首先在我们运行代码的时候,弹出了CMD框并且出现文字内容“请输入要定制的题数:”然后我们随机输入一个100又弹出一个提示内容,“除数的显示:1.显示整数,2.显示余数,3.显示分数” 我们选择输入1后出现了100道四则运算,并且在下面的随即显示了对应题目的答案,面对除法运算的的答案以我们选择的整数形式显示。随后我们分别测试了三组数子以及分别对应的三个选项,在规则提示中基本实现了我们需要的功能。
三、系统不足
1.异常处理
在使用该系统的过程中发现。改系统少了对异常操作的处理提示机制,只有简单的错误输入的判断但是并没有给出合适的处理方式或者提示。例如在我们打开软件后输入数字为负数时,第二部的选择依然可以进行,没有第一步的选择,在完成第二部的选择后程序弹出,并未有任何提示,如果对于没有使用意识或者错误操作的用户来说就是一种误解和不足的地方。
2.提示输入语言
在使用的操作中,我们发现提示语句过于简单,例如“输入要定制的题数”“除数显示” 等字眼,对于用户来说或者不熟悉的使用者来说很难理解需要输入的内容,所以在人机交互方面出现了不必要的困难,使得程序变得繁杂费时,不能够做到高效快速的解决问题的目的。
3.输入输出
输入时候没有结束符号不适合多项的输入,也没有循环的输入机制代码,使得程序单次运行,需要充分开关,在输出的时候,排版不够美观,当题目过多的时候答案和题目对应就出现了困难
4.功能缺陷
首先,在创建一个新的系统或产品时,进行详细的需求分析以确定顾客的需要是十分必要的。这能让我们分析和寻求新系统的解决方法来确定新系统的目的、范围、定义和功能。
其次,在编程过程中我们应该遵守编程规范以方便他人的阅读及日后对软件的维护等。
最重要的就是我们的程序需要不同的测试并且有用户来测试使用并且改进才能完善程序,对于程序员和使用者有一个不可避免的专业认同的问题,所以在程序的创建之前一定要对使用用户的日常使用进行交流和定义,只有这样才能够使得系统功能更简洁高效的完成用户的目的。
小组成员:庞胜(1759229)
- 学完Python基础知识后,你真的会python吗?
- 一个人的武林:内网渗透测试思路(二)
- Python数据分析之股票实战
- 这货不是电源:硬件渗透测试平台 – Power Pwn
- Python进阶学习之阅读代码
- 代码安全审计:当file_exists遇上eval
- Python 异常处理完整指南
- 有趣的安全实验:利用多线程资源竞争技术上传shell
- NotSerializableException解决方法NotSerializableException
- 谁蹭了我的WiFi?浅谈家用无线路由器攻防
- 当输入流和输出流同时作用一个文件
- 揭秘:充电宝是如何盗取你的个人隐私的?
- 微软:暴力破解面前,增强密码复杂性基本没用
- 创建被图像填充的组件解释几处做法解释几点
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- K近邻算法:以"同类相吸"解决分类问题!
- ROS与PCL中点云数据之间的转换
- 啊,http2还没搞明白,http3又来了?
- 掌握Linux文件权限,看这篇就够了
- 【shell脚本入门到精通】基本规范及良好的编写习惯
- shell脚本的函数介绍使用和常用案例
- 详解shell脚本case条件语句,开发各种服务启动脚本跳板机
- 详解自动交互命令expect,免去手动输入!
- 快速掌握shell脚本的各种循环语句
- 详解shell脚本的4种表达式
- Linux shell中这7种运算命令值得掌握!
- 快速掌握shell脚本数组,看这篇
- 详解shell脚本的环境、普通、特殊变量
- 玩转zabbix之超详细的二进制安装
- 玩转zabbix之源码编译安装,添加主机监控