• C#四则运算器(多态方法实现)


    在上一节C#课上,我们学习了用类的继承的方式来做一个四则运算器,然而老师的代码在课上演示的效果并不理想,而且没有使用多态的思想实现,今天我们就来用多态的方式实现四则运算器。

    1. 题目及要求

      

      

    2. Arithmetic类的实现

      在实现Arithmetic类之前,我们需要一个类库,类库的创建方法如下:

      打开VisualStidio,新建--项目--在c#一栏中选中类库

      

      我们将我们的类库命名为MyClassLibrary1,当然你也可以根据自己的喜好命名

      进入类库后,将c#文件重命名为Airthmetic,并开始编写代码

      

      Aeithmetic.cs具体代码如下:

     1 using System;
     2 
     3 namespace MyClassLibrary1
     4 {
     5     public class Arithmetic //声明算术运算类
     6     {
     7         private double num1;
     8         private double num2;    //设置两个操作数
     9         //声明两个操作数的索引
    10         public double Num1
    11         {
    12             get
    13             {
    14                 return num1;
    15             }
    16             set
    17             {
    18                 num1 = value;
    19             }
    20         }
    21         public double Num2
    22         {
    23             get
    24             {
    25                 return num2;
    26             }
    27             set
    28             {
    29                 num2 = value;
    30             }
    31         }
    32         //声明Airthmetic类的计算值方法
    33         public virtual string GetResult()
    34         {
    35             return "两数没有做任何算术运算";
    36         }
    37         //检查输入的数据是否符合规范
    38         public static bool CheckNum(string s1, string s2)
    39         {
    40             double num;
    41             bool flag;  //声明标志变量flag
    42             if (!double.TryParse(s1, out num))
    43                 flag = false;   //当第一个数字不合规范时,flag为假
    44             else if (!double.TryParse(s2, out num))
    45                 flag = false;   //第二个数字不合规范时,flag为假
    46             else flag = true;   //当两个数字都符合规范时,flag为真
    47             return flag;
    48         }
    49     }
    50 
    51     public class NumAdd:Arithmetic //声明加法运算类
    52     {
    53         //重载父类中的计算值方法
    54         public override string GetResult()
    55         {
    56             string result = "两数相加的结果为:";
    57             double num = Num1 + Num2;   //计算两个数的和
    58             result += Convert.ToString(num);   //将计算结果转换为字符串
    59             return result;
    60         }
    61     }
    62 
    63     public class NumSub : Arithmetic    //声明减法运算类
    64     {
    65         //重载父类中的计算值方法
    66         public override string GetResult()
    67         {
    68             string result = "两数相减的结果为:";
    69             double num = Num1 - Num2;   //  计算两个数的差
    70             result += Convert.ToString(num);    //  将计算结果转换为字符串
    71             return result;
    72         }
    73     }
    74 
    75     public class NumMul : Arithmetic    //声明乘法运算类
    76     {
    77         //重载父类中的计算值方法
    78         public override string GetResult()
    79         {
    80             string result = "两数相乘的结果为:";
    81             double num = Num1 * Num2;   //计算两个数的积
    82             result += Convert.ToString(num);    //将计算结果转换为字符串
    83             return result;
    84         }
    85     }
    86 
    87     public class NumDiv : Arithmetic    //声明除法运算类
    88     {
    89         //重载父类中的计算值方法
    90         public override string GetResult()
    91         {
    92             string result = "两个数相除的结果为:";
    93             double num = Num1 / Num2;   //计算两个数的商
    94             result += Convert.ToString(num);    //将计算结果转换为字符串
    95             return result;
    96         }
    97     }
    98 }

      在编写完代码之后,我们在菜单栏上点击  生成--生成解决方案即可保存类库

      

      生成后的结果如下:

      

      请记住生成的路径名,我们在等下引用此类库时要用到

    1. 连接到类库  

      首先,我们创建一个c#窗口程序

      

      然后,我们需要将刚才创建的类库引用到这个项目中去(直接在项目里面新建类的就不需要)

      对你的项目右键--添加--引用

      

      然后点击 浏览,在生成的路径里找到你的类库并添加

      

      之后我们再在代码里加入using MyClassLibrary1;便可以正常使用类库了

      当然,如果你嫌创建和引用类库过于麻烦,你也可以像java一样直接在项目里新建类,这里只是提供一下类库的创建和连接!

    1. 窗体应用程序的具体实现

    接下来,让我们回到窗体应用程序的实现中来,在创建了窗体应用程序后,右手边会出现一个可视化界面,将要用的控件拖到合适位置并右键--属性对他们的名字和文本进行改变

     

    这里提供我的界面布局和命名(命名用红字标出)

    然后我们双击确定按钮进入编程界面。

    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 using MyClassLibrary1;
    11 
    12 namespace cs四则运算器2018_1023
    13 {
    14     public partial class Form1 : Form
    15     {
    16         public Form1()
    17         {
    18             InitializeComponent();
    19             this.Text = "四则运算工具";   //声明标题文字
    20         }
    21 
    22         private void ButtonSubmit_Click(object sender, EventArgs e)
    23         {
    24             string a = textBoxNum1.Text;  //获取操作数A的字符串
    25             string b = textBoxNum2.Text;  //获取操作数B的字符串
    26             if (!Arithmetic.CheckNum(a, b)) //当数字不符合规范时,打印警告信息并退出
    27             {
    28                 MessageBox.Show("请输入符合规范的数字!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    29                 return;
    30             }
    31 
    32 
    33             Arithmetic ari = new Arithmetic(); //声明一个Arithmetic类实例。
    34 
    35             //根据单选控件选中的值来决定使用哪一个子类来初始化
    36             if (RadioAdd.Checked)
    37                 ari = new NumAdd();
    38             if (RadioSub.Checked)
    39                 ari = new NumSub();
    40             if (RadioMul.Checked)
    41                 ari = new NumMul();
    42             if (RadioDiv.Checked)
    43                 ari = new NumDiv();
    44 
    45             ari.Num1 = Convert.ToDouble(a); 
    46             ari.Num2 = Convert.ToDouble(b); //将两个操作数赋值给实例ari
    47             LabelResult.Text = ari.GetResult(); //将结果转换为字符串
    48         }
    49     }
    50 }

    运行结果如下:

  • 相关阅读:
    Docker实践之03-Dockerfile指令详解
    Docker实践之02-使用镜像及定制
    通过Hack方式实现SDC中Stage配置联动刷新
    多级部门查询性能问题解决方案
    Docker实践之01-入门介绍
    从阿里腾讯2朵云产品中学到的用户体验
    HttpClient在多线程环境下踩坑总结
    一次对JDK进行"减肥"的记录
    北京西站如何进站接人
    多实例集群部署下的图片上传和访问
  • 原文地址:https://www.cnblogs.com/sunriseblogs/p/9936791.html
Copyright © 2020-2023  润新知