第二次作业——熟悉使用工具

Posted on 2019-09-20 21:02  于丁  阅读(194)  评论(0编辑  收藏  举报

 

 第二次作业——熟悉使用工具


1. 工作环境的配置

GIT地址 https://github.com/zhibihuayue
GIT用户名 执笔画月
学号后五位 01227
博客地址 https://home.cnblogs.com/zhibihuayue/
作业链接 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/homework/7582


1.1 登录github箱已被占用。打开邮箱翻找邮件发现之前注册过github,然后找回密码顺利登录√

登录github

1.2 卸载并安装git

 出于便利性的考虑,我将电脑上原来安装的Git for Windows卸载,下载安装了图形化的GitHub for Windows。

1.3 打开Vs2019新建项目

打开Vs2019,确认激活还没有过期并更新软件后,按作业要求顺利创建C#环境的Calculator项目。

顺便体验了一下Vs更新的仓库克隆功能。

 

2. 代码设计

2.1 题目背景

  阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:程序接收一个命令行参数 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

2.2 代码设计

设计思路,我将整个程序分为三个大模块:主函数,题目生成,文件生成 

  • 主函数部分创建生成器页面,接收生成需求数量n,按n值进行循环调用函数创建题目、计算题目、输出题目、录入文件
  • 题目生成模块分成两个板块,一、用随机数定义数字单元和符号单元  二、将符号单元和数字单元串联组合列式,并进行计算
  • 文件生成模块分为两个板块,一、文件标题概况生成 二、题目录入衔接

主体函数模块

 1  1 public static void Main(string[] args)
 2  2 {
 3  3 string Run;
 4  4 Console.Write("阿超的四则运算题目生成器\n生成练习题数量:");
 5  5 int n = int.Parse(Console.ReadLine());
 6  6 Writetitle(n);
 7  7 for (int i = 0; i < n; i++)
 8  8 {
 9  9 string Star = Define();
10 10 Run = Count(Star);
11 11 Console.WriteLine("\n第{0,1}题", (i + 1));
12 12 Console.WriteLine(Run);
13 13 System.Threading.Thread.Sleep(100);
14 14 Write(Run, i);
15 15 }
16 16 Console.Write("\n\n阿超的四则运算练习题生成完毕,共{0,1}道\n生成题目文件:D:\\于丁软件工程实践\\第二次作业\\阿超的四则运算\\AchaoCalculator\\subject.txt", n);
17 17 Console.Read();
18 18 }
主函数

 

 题目生成模块

 1  1 public static string Define()
 2  2 {
 3  3 Random Problem = new Random();
 4  4 string Start = "";
 5  5 int Sign;
 6  6 int Do = 0;
 7  7 int Number = Problem.Next(2, 4);
 8  8 for (int i = 0; i < (2 * Number) + 1; i++)
 9  9 {
10 10 if (i % 2 == 0)
11 11 {
12 12 Sign = Problem.Next(0, 101);
13 13 Start += Sign;
14 14 }
15 15 else
16 16 {
17 17 Do = Problem.Next(0, 4);
18 18 Start += Makesign(Do);
19 19 }
20 20 }
21 21 return Start;
22 22 }
23 23 
24 24 
25 25 public static string Makesign(int number)
26 26 {
27 27 string sign = "";
28 28 switch (number)
29 29 {
30 30 case 0:
31 31 sign = "+";
32 32 break;
33 33 case 1:
34 34 sign = "-";
35 35 break;
36 36 case 2:
37 37 sign = "*";
38 38 break;
39 39 case 3:
40 40 sign = "/";
41 41 break;
42 42 }
43 43 return sign;
44 44 }
45 45 
46 46 
47 47 public static string Count(string String)
48 48 {
49 49 
50 50 DataTable dt = new DataTable();
51 51 object obj = dt.Compute(String, "");
52 52 while (obj.ToString().Contains("-") || obj.ToString().Contains(".") || String.Contains("/0"))
53 53 {
54 54 String = Define();
55 55 obj = dt.Compute(String, "");
56 56 }
57 57 String = String + "=" + obj.ToString();
58 58 return String;
59 59 
60 60 }
题目生成

 

文件生成模块

 1  1 public static void Writetitle(int n)
 2  2 {
 3  3 StreamWriter sw = File.AppendText(@"D:\于丁软件工程实践\第二次作业\阿超的四则运算\AchaoCalculator\subject.txt");
 4  4 sw.WriteLine("阿超的四则运算练习题\n(共{0,1}道题)", n);
 5  5 sw.Flush();
 6  6 sw.Close();
 7  7 }
 8  8 
 9  9 
10 10 public static void Write(string result, int i)
11 11 {
12 12 StreamWriter sw = File.AppendText(@"D:\于丁软件工程实践\第二次作业\阿超的四则运算\AchaoCalculator\subject.txt");
13 13 sw.WriteLine("\n第{0,1}题", (i + 1));
14 14 sw.WriteLine(result);
15 15 sw.Flush();
16 16 sw.Close();
17 17 }
18 18 
19 19 }
文件生成

 

项目整体代码

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.IO;
  5 using System.Linq;
  6 using System.Text;
  7 using System.Threading.Tasks;
  8 
  9 namespace ACC
 10 {
 11 class Program
 12 {
 13 public static void Main(string[] args)
 14 {
 15 string Run;
 16 Console.Write("阿超的四则运算题目生成器\n生成练习题数量:");
 17 int n = int.Parse(Console.ReadLine());
 18 Writetitle(n);
 19 for (int i = 0; i < n; i++)
 20 {
 21 string Star = Define();
 22 Run = Count(Star);
 23 Console.WriteLine("\n第{0,1}题", (i + 1));
 24 Console.WriteLine(Run);
 25 System.Threading.Thread.Sleep(100);
 26 Write(Run, i);
 27 }
 28 Console.Write("\n\n阿超的四则运算练习题生成完毕,共{0,1}道\n生成题目文件:D:\\于丁软件工程实践\\第二次作业\\阿超的四则运算\\AchaoCalculator\\subject.txt", n);
 29 Console.Read();
 30 }
 31 
 32 
 33 public static string Define()
 34 {
 35 Random Problem = new Random();
 36 string Start = "";
 37 int Sign;
 38 int Do = 0;
 39 int Number = Problem.Next(2, 4);
 40 for (int i = 0; i < (2 * Number) + 1; i++)
 41 {
 42 if (i % 2 == 0)
 43 {
 44 Sign = Problem.Next(0, 101);
 45 Start += Sign;
 46 }
 47 else
 48 {
 49 Do = Problem.Next(0, 4);
 50 Start += Makesign(Do);
 51 }
 52 }
 53 return Start;
 54 }
 55 
 56 
 57 public static string Makesign(int number)
 58 {
 59 string sign = "";
 60 switch (number)
 61 {
 62 case 0:
 63 sign = "+";
 64 break;
 65 case 1:
 66 sign = "-";
 67 break;
 68 case 2:
 69 sign = "*";
 70 break;
 71 case 3:
 72 sign = "/";
 73 break;
 74 }
 75 return sign;
 76 }
 77 
 78 
 79 public static string Count(string String)
 80 {
 81 
 82 DataTable dt = new DataTable();
 83 object obj = dt.Compute(String, "");
 84 while (obj.ToString().Contains("-") || obj.ToString().Contains(".") || String.Contains("/0"))
 85 {
 86 String = Define();
 87 obj = dt.Compute(String, "");
 88 }
 89 String = String + "=" + obj.ToString();
 90 return String;
 91 
 92 }
 93 
 94 
 95 public static void Writetitle(int n)
 96 {
 97 StreamWriter sw = File.AppendText(@"D:\于丁软件工程实践\第二次作业\阿超的四则运算\AchaoCalculator\subject.txt");
 98 sw.WriteLine("阿超的四则运算练习题\n(共{0,1}道题)", n);
 99 sw.Flush();
100 sw.Close();
101 }
102 
103 
104 public static void Write(string result, int i)
105 {
106 StreamWriter sw = File.AppendText(@"D:\于丁软件工程实践\第二次作业\阿超的四则运算\AchaoCalculator\subject.txt");
107 sw.WriteLine("\n第{0,1}题", (i + 1));
108 sw.WriteLine(result);
109 sw.Flush();
110 sw.Close();
111 }
112 
113 }
114 }
项目整体代码

 

最终结果

 

 

 

 

3. 克隆项目以及提交代码

3.1克隆项目到自己的仓库中

   到仓库https://github.com/Cherish599/AchaoCalculator后,点击右上角的“Fork”即可。

 

 

 

 

3.2 使用git将项目保存到本地 

使用git桌面版克隆仓库到本地。

 

3.3 代码的提交

  项目完成并测试保存后,检查仓库状态,在git桌面端进行同步。然后点击自己仓库界面的“New Pull Request”,进行pr。

最后在Cherish599的仓库中查看自己提交的状态。

4. 单元测试

4.1 单元测试创建

在项目解决方案中,新建一个测试单元项目

对测试项目进行引用

 引用失败

 研究了一会发现是测试单元类型创建错误,重新创建。

 

再次添加引用,成功√

 

4.2 关键局部单元测试

使用Vs2019,尝试各种引用,各种设置依赖项均失败。

最后只能采用对关键函数进行单元测试的办法进行。

我对我程序中的Count的计算部分进行单元测试。

 测试结果1(正确性)

    

 测试结果2(错误性测试)

    

5. 基本操作及效能工具

5.1 设置断点

5.2 单步运行

 

5.3 条件断点

 

5.4 回归测试

 

5.5 效能工具

 1         public static void Main(string[] args)
 2         {
 3             string Run;
 4             Console.Write("阿超的四则运算题目生成器\n生成练习题数量:");
 5             int n = 100000;
 6             Writetitle(n);
 7             for (int i = 0; i < n; i++)
 8             {
 9                 string Star = Define();
10                 Run = Count(Star);
11                 Console.WriteLine("\n第{0,1}题", (i + 1));
12                 Console.WriteLine(Run);
13                 System.Threading.Thread.Sleep(100);
14                 Write(Run, i);
15             }
16             Console.Write("\n\n阿超的四则运算练习题生成完毕,共{0,1}道\n生成题目文件:D:\\于丁软件工程实践\\第二次作业\\阿超的四则运算\\AchaoCalculator\\subject.txt", n);
17             Console.Read();
18         }

 CPU使用率测试

6. 感想

环境配置上因为计算机上有过去的软件基础,没有造成太大的困难。

软件的整体架构和和代码设计上,因成果需求明确简单,且逻辑不复杂,所以弹性空间很大,设计和编写上十分自由,而且篇幅不大,也没有造成太大的问题。

单元测试上,因为整个程序逻辑简单,核心构架很少(就一个),所以测试过程也为造成太大难度。

总体而言,整个项目作业操作不复杂,内容较简单,数量也不大,但软件版本更迭和软件教程的落后造成了比较大的影响。

比如我使用的是Vs2019,作业教程为Vs2015的指导,软件版本不同带来的,界面和功能的删改集合等原因,致使在Vs2019的操作上与作业指导中其实六、七成极不相同(Vs2019中删除了附加依赖项、属性配置等模块,如若按作业手册上操作无法进行);

比如我是用的是github桌面版。与作业指导中github控制台版操作同样完全不同,显而易见的桌面版实际操作只有三到四步,而作业指导中的控制台版需要数十步,着实烦琐同时对不上号。

总时间有10分的话,需求明确和软件设计占到2分,博客编辑与撰写占到2分,软件版本带来的磨合占到6分。

综上所述,感觉整个作业流程对软件和操作的熟悉很有帮助,但是作业指导中软件的版本有些过老。(比如使用Vs中的团队资源管理器和git源代码管理器,就可以做到github仓库的克隆、上传同步和版本控制,而且是中文环境,可以减少作业指导中70%左右的非代码部分的操作量)