第二次作业之——AchaoCalculator
AchaoCalculator(阿超计算器)
GIT地址 | 我的GitHub |
---|---|
GIT用户名 | Pastrain |
学号后五位 | 62213 |
博客地址 | 我的博客地址 |
作业链接 | 作业内容 |
Part.1 配置VS中的C#环境:
因为之前大一的暑期实训时,使用的就是C#语言,所以我的电脑上已经是配置好了的VS。
如图,已经可以创建项目:
创建的项目如图:
因为是之前已经配置好了的,所以我在配置环境的过程上没有什么多余的问题。
Part.2 克隆项目:
教程上说的是使用Git来克隆项目到本地。但是我直接在GitHub上选择使用“Open in Desktop”方式,如图:
然后在本地也可以找到克隆下来的项目:
到此时,环境的配置和GitHub项目的克隆就都已经完成了。接下来就是最重要的编写代码部分了。
Part.3 AchaoCalculator代码编写:
问题的背景:
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。
由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。
当程序接收的参数为4时,以下为一个输出文件示例。
13+17-1=29
11*15-5=160
3+10+4-16=1
15÷5+3-2=4
我的解决方案:
使用了Random的随机数功能和DataTable的字符串计算功能。
Calculator为主要的生成题目函数,MainCal为核心计算结果的函数。
我的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace AchaoCalculator
{
public class Program
{
private static string[] s = { "+", "-", "*", "/" };
static void Main(string[] args)
{
Console.WriteLine("输入题目数量:");
int n = int.Parse(Console.ReadLine());
Calculator(n);
Console.ReadLine();
}
public static void Calculator(int n)
{
Random r = new Random();
for (int j = 0; j < n; j++)
{
int c = r.Next(2, 4);
int[] num = new int[10];
for (int i = 0; i < c + 1; i++)
{
num[i] = r.Next(1, 101);
}
string[] x = new string[c * 2 + 1];
for (int k = 0; k < c * 2 + 1; k++)
{
if (k % 2 == 0)
{
x[k] = num[k / 2].ToString();
}
else
{
x[k] = s[r.Next(0, 4)];
}
}
string finals = x[0];
for (int z = 0; z < c * 2 + 1; z++)
{
if (z != 0)
{
finals += x[z];
}
}
if (MainCal(finals) < 0 || MainCal(finals) % 1 != 0)
{
j--;
continue;
}
finals += "=" + MainCal(finals).ToString();
Console.WriteLine(finals);
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"test.txt", true))
{
file.WriteLine(finals);
}
}
}
public static double MainCal(string finals)
{
DataTable d = new DataTable();
return double.Parse(d.Compute(finals, null).ToString());
}
}
}
运行效果图如下:
在文件中查看:
Part.4 项目的单元测试,回归测试:
首先建立项目的单元测试:
测试代码为:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using AchaoCalculator;
namespace AchaoCalculator测试单元
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
string s = "2*3+5-10";
Assert.AreEqual(Program.MainCal(s),1);
}
}
}
测试结果:
在做单元测试的时候我遇到了这么一个问题,就是刚开始写上面的计算器代码的时候,class是默认属性,应该是private,那么在单元测试这边的项目里写代码的时候,无法使用class。就算是写了using 命名空间,依然无法使用。就要把class的属性改为public,才能在单元测试中调用。
接下来是回归测试:
工具在这里:
性能分析报告如下:
Part.5 项目代码提交到GitHub:
我还是选择使用GitHub Desktop的方式来提交。
首先,在文件夹中找到我们克隆下来的仓库的位置,然后将我们的项目文件夹直接复制粘贴到这里:
然后在GitHub Desktop中会出现我们要提交的代码:
然后在左下角填一下基本的信息:
点击“Commit to master”。然后点击push:
等待一会儿便提交成功。
然后我们到GitHub网站,我们的仓库中去查看:
证明提交成功。
Part.6 心得:
怎么说呢,这次的作业任务是说要掌握工具的使用,但是对于这个问题的代码的设计其实花费了更多的时间。我的代码其实就还是有很大的问题的...自己看来还是有点不舒服。
之前就有接触过GitHub,但没有具体的使用过。这一次算是真正的学习了这个工具的具体使用方法,挺不错的。
再就是写代码用的是C#,很久不用了,用起来不是很舒服。不过感觉C#也挺骚的,封装了一堆工具,只要能想到用什么,就算不知道,去网上一搜就会有一大堆用法的介绍,很快就上手使用。傻子都会用。
第二次作业之——AchaoCalculator的更多相关文章
- Lobooi第二次作业:熟悉使用工具
第二次作业 GIT地址 https://github.com/Lobooi//AchaoCalculator GIT用户名 Lobooi 学号后五位 24235 博客地址 https://home.c ...
- 耿丹CS16-2班第二次作业汇总
-- Deadline: 2016-09-28 12:00 -- 作业内容:http://www.cnblogs.com/huangjunlian/p/5891726.html -- 第二次作业总结: ...
- JAVA第二次作业展示与学习心得
JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...
- 程序设计第二次作业<1>
面向对象程序设计第二次作业<1> Github 链接:https://github.com/Wasdns/object-oriented 题目: <1>第一次尝试 我立马认识到 ...
- homework-02,第二次作业——寻找矩阵最大子序列和
经过漫漫漫~~~~~~~~~~~~~~长的编译和调试,第二次作业终于告一段落了 先放出源码,思路后面慢慢道来 #include<stdio.h> #include<stdlib.h& ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- SQL 第二章 作业
/*第二章 作业*/ create table S ( sno char(2) NOT NULL UNIQUE, sname char(3), city char(2) ); alter table ...
随机推荐
- EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案使用过程中问题的自我排查-设备不在线问题自我排查检测
由于EasyNVR的受众越来越多,时常会遇到很多类似的问题咨询,之前虽然有写过很多的博文进行技术的或者使用问题的解答,随着客户询问的增多,我发现,要想让客户了解问题和解决问题,往往引导和给一个思路比直 ...
- python 科学计算基础库安装
1.numpyNumPy(Numeric Python)是用Python进行科学计算的基本软件包. NumPy是Python编程语言的扩展,增加了对大型多维数组和矩阵的支持,以及一个大型的高级数学函数 ...
- LODOP常见问题连接(含常见小问答博文)
问答大全 纸张打印机 注册 table表格 clodop测试地址 字体 超文本 行间距.字间距 clodop回调函数 条码 页眉页脚 SET……STYLEA 水平居中 简短排查 提示报错 慢进度条 套 ...
- 关于docker的scratch镜像与helloworld
关于docker的scratch镜像与helloworld 参考:https://hub.docker.com/_/scratch?tab=description 参考:https://segment ...
- sizeof(类名字)
析构函数,跟构造函数这些成员函数,是跟sizeof无关的,因为我们的sizeof是针对实例,而普通成员函数,是针对类体的,一个类的成员函数,多个实例也共用相同的函数指针,所以自然不能归为实例的大小. ...
- day48——css样式
day48 通过调试窗口还可以玩一个神奇的东西 document.body.contentEditable=true css样式 高度宽度 width宽度 height高度 块级标签能设置高度宽度,内 ...
- Python之路【第十五篇】开发FTP多线程程序
要求: 1.用户加密认证 2.允许同时多用户登录 3.每个用户有自己的家目录,且只能访问自己的家目录 4.对用户进行磁盘配额,每个用户的可用空间不同 5.允许用户在ftp server上随意切换目录 ...
- C语言conio.h部分解释
#include <conio.h> int getch(void);// 从控制台得到下一个字符,以ASCII值返回,并不在屏幕显示该字符 int getche(void);// 从控制 ...
- Ambari深入学习(III)-开源使用及其改进思考
Ambari采用的不是一个新的思想和架构,也不是完成了软件的新的革命,而是充分利用了一些已有的优秀开源软件,巧妙地把它们结合起来,使其在分布式环境中做到了集群式服务管理能力.监控能力.展示能力.这些优 ...
- C# vb .net实现透视图效果滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的透视图效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一 ...