C#平均值计算器具体实现

1. 题目及要求

 

2. Avg.cs

 

在直接编写窗口程序之前,我们需要创建一个Avg类,我们可以在类库中编辑,也可以像java一样直接在项目中新建类。

 

有关类库的创建与连接方法,我们在上一次的《C#四则运算器(多态方法实现)》中已经详细讲述过,这里就不再赘述,我这里是直接项目中新建类编写的

 

 

Avg.cs的具体代码如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace cs平均值计算器_20181024
  8 {
  9     public class Avg     //声明平均数的类
 10     {
 11         private double num1;    //声明操作数A
 12         private double num2;    //声明操作数B
 13         private double weight1; //声明权重A
 14         private double weight2; //声明权重B
 15 
 16         //声明四个变量的索引器
 17         public double Num1
 18         {
 19             get
 20             {
 21                 return num1;
 22             }
 23             set
 24             {
 25                 num1 = value;
 26             }
 27         }
 28         public double Num2
 29         {
 30             get
 31             {
 32                 return num2;
 33             }
 34             set
 35             {
 36                 num2 = value;
 37             }
 38         }
 39         public double Weight1
 40         {
 41             get
 42             {
 43                 return weight1;
 44             }
 45             set
 46             {
 47                 weight1 = value;
 48             }
 49         }
 50         public double Weight2
 51         {
 52             get
 53             {
 54                 return weight2;
 55             }
 56             set
 57             {
 58                 weight2 = value;
 59             }
 60         }
 61 
 62         //检查输入的字符串是否能够转换为数字
 63         public static bool CheckNum(string s1, string s2, string s3, string s4)
 64         {
 65             double num;
 66             bool flag = true;   //声明标志信号flag
 67 
 68             //四个字符串中若有任何一个无法转换为数字,flag都为假
 69             if (!double.TryParse(s1, out num))
 70                 flag = false;   
 71             else if (!double.TryParse(s2, out num))
 72                 flag = false;
 73             else if (!double.TryParse(s3, out num))
 74                 flag = false;
 75             else if (!double.TryParse(s4, out num))
 76                 flag = false;
 77 
 78             return flag;    //返回flag的值
 79         }
 80         //只检查两个数字的CheckNum
 81         public static bool CheckNum(string s1, string s2)
 82         {
 83             double num;
 84             bool flag = true;   //声明表示信号flag
 85 
 86             //两个数中的任意一个无法转换为数字,flag都为假
 87             if (!double.TryParse(s1, out num))
 88                 flag = false;
 89             else if (!double.TryParse(s2, out num))
 90                 flag = false;
 91 
 92             return flag;    //返回flag的值
 93         }
 94 
 95         //得到结果字符串
 96         public virtual string GetResult()
 97         {
 98             return "两数没有做任何操作";
 99         }
100     }
101 
102     public class CalAvg:Avg     //声明计算算术平均值的类
103     {
104         //CalAvg的构造函数
105         public CalAvg(double num1, double num2)
106         {
107             Num1 = num1;
108             Num2 = num2;
109         }
110 
111         //重载父方法中的GetResult()方法
112         public override string GetResult()
113         {
114             string result = "两数的算术平均值为:";
115             double num = (Num1 + Num2) / 2;
116             result += string.Format("{0:f}", num);  //将结果变为字符串并保留两位小数
117             return result;
118         }
119     }
120 
121     public class CalWAvg : Avg  //声明计算加权平均值的类
122     {
123         //CalWAvg的构造函数
124         public CalWAvg(double num1, double num2, double weight1, double weight2)
125         {
126             Num1 = num1;
127             Num2 = num2;
128             Weight1 = weight1;
129             Weight2 = weight2;
130         }
131 
132         //重载父方法中的GetResult()方法
133         public override string GetResult()
134         {
135             string result = "两数的加权平均值为:";
136             double num = (Num1 * Weight1 + Num2 * Weight2) / 2; //计算两数的加权平均值
137             result += string.Format("{0:f}", num);  //将结果变为字符串并保留两位小数
138             return result;
139         }
140     }
141 }

 

 

3. Form1.cs

接下来我们在可视化窗口上拖动控件并编程,关于可视化窗口控件的操作这里也不再详细讲解了,不懂的同学请自行翻阅《C#四则运算器(多态实现方法)》的文章。

页面布局及部分控件命名如下:

Form1.cs的代码如下:

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 
11 namespace cs平均值计算器_20181024
12 {
13     public partial class Form1 : Form
14     {
15         public Form1()
16         {
17             InitializeComponent();
18             this.Text = "平均数计算器";   //设置窗口标题
19         }
20 
21         private void ButtonAvg_Click(object sender, EventArgs e)
22         {
23             string n1 = TextBoxNum1.Text;   //得到第一个数的字符串
24             string n2 = TextBoxNum2.Text;   //得到第二个数的字符串
25             if(!Avg.CheckNum(n1,n2))    //若输入的数字不符合规范,发出警告并返回
26             {
27                 MessageBox.Show("请输入符合规范的数字!", "警告",
28                     MessageBoxButtons.OK, MessageBoxIcon.Warning);
29                 return;
30             }
31 
32             //创建CalAvg实例对象avg
33             Avg avg = new CalAvg(Convert.ToDouble(n1), Convert.ToDouble(n2));
34 
35             LabelResult.Text = avg.GetResult(); //将结果显示到窗口上
36         }
37 
38         private void ButtonWAvg_Click(object sender, EventArgs e)
39         {
40             string n1 = TextBoxNum1.Text;   //得到第一个数的字符串
41             string n2 = TextBoxNum1.Text;   //得到第二个数的字符串
42             string w1 = TextBoxWeight1.Text;//得到第一个权重的字符串
43             string w2 = TextBoxWeight2.Text;//得到第二个权重的字符串
44             if(!Avg.CheckNum(n1, n2, w1, w2))   //若输入的数字不符合规范,发出警告并返回
45             {
46                 MessageBox.Show("请输入符合规范的数字!", "警告",
47                     MessageBoxButtons.OK, MessageBoxIcon.Warning);
48                 return;
49             }
50 
51             //创建CalWAvg实例对象avg
52             Avg avg = new CalWAvg(Convert.ToDouble(n1), Convert.ToDouble(n2),
53                 Convert.ToDouble(w1), Convert.ToDouble(w2));
54 
55             LabelResult.Text = avg.GetResult(); //将结果显示到窗口上
56         }
57     }
58 }

 

 

4. 实际效果

 

 

posted @ 2018-11-09 19:32  Sunrise_1018  阅读(2476)  评论(0编辑  收藏  举报