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


2. Arithmetic类的实现
在实现Arithmetic类之前,我们需要一个类库,类库的创建方法如下:
打开VisualStidio,新建--项目--在c#一栏中选中类库

我们将我们的类库命名为MyClassLibrary1,当然你也可以根据自己的喜好命名
进入类库后,将c#文件重命名为Airthmetic,并开始编写代码

Aeithmetic.cs具体代码如下:
using System; namespace MyClassLibrary1
{
public class Arithmetic //声明算术运算类
{
private double num1;
private double num2; //设置两个操作数
//声明两个操作数的索引
public double Num1
{
get
{
return num1;
}
set
{
num1 = value;
}
}
public double Num2
{
get
{
return num2;
}
set
{
num2 = value;
}
}
//声明Airthmetic类的计算值方法
public virtual string GetResult()
{
return "两数没有做任何算术运算";
}
//检查输入的数据是否符合规范
public static bool CheckNum(string s1, string s2)
{
double num;
bool flag; //声明标志变量flag
if (!double.TryParse(s1, out num))
flag = false; //当第一个数字不合规范时,flag为假
else if (!double.TryParse(s2, out num))
flag = false; //第二个数字不合规范时,flag为假
else flag = true; //当两个数字都符合规范时,flag为真
return flag;
}
} public class NumAdd:Arithmetic //声明加法运算类
{
//重载父类中的计算值方法
public override string GetResult()
{
string result = "两数相加的结果为:";
double num = Num1 + Num2; //计算两个数的和
result += Convert.ToString(num); //将计算结果转换为字符串
return result;
}
} public class NumSub : Arithmetic //声明减法运算类
{
//重载父类中的计算值方法
public override string GetResult()
{
string result = "两数相减的结果为:";
double num = Num1 - Num2; // 计算两个数的差
result += Convert.ToString(num); // 将计算结果转换为字符串
return result;
}
} public class NumMul : Arithmetic //声明乘法运算类
{
//重载父类中的计算值方法
public override string GetResult()
{
string result = "两数相乘的结果为:";
double num = Num1 * Num2; //计算两个数的积
result += Convert.ToString(num); //将计算结果转换为字符串
return result;
}
} public class NumDiv : Arithmetic //声明除法运算类
{
//重载父类中的计算值方法
public override string GetResult()
{
string result = "两个数相除的结果为:";
double num = Num1 / Num2; //计算两个数的商
result += Convert.ToString(num); //将计算结果转换为字符串
return result;
}
}
}
在编写完代码之后,我们在菜单栏上点击 生成--生成解决方案即可保存类库

生成后的结果如下:

请记住生成的路径名,我们在等下引用此类库时要用到
1. 连接到类库
首先,我们创建一个c#窗口程序

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

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

之后我们再在代码里加入using MyClassLibrary1;便可以正常使用类库了
当然,如果你嫌创建和引用类库过于麻烦,你也可以像java一样直接在项目里新建类,这里只是提供一下类库的创建和连接!
1. 窗体应用程序的具体实现
接下来,让我们回到窗体应用程序的实现中来,在创建了窗体应用程序后,右手边会出现一个可视化界面,将要用的控件拖到合适位置并右键--属性对他们的名字和文本进行改变



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

然后我们双击确定按钮进入编程界面。
Form1.cs具体代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MyClassLibrary1; namespace cs四则运算器2018_1023
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Text = "四则运算工具"; //声明标题文字
} private void ButtonSubmit_Click(object sender, EventArgs e)
{
string a = textBoxNum1.Text; //获取操作数A的字符串
string b = textBoxNum2.Text; //获取操作数B的字符串
if (!Arithmetic.CheckNum(a, b)) //当数字不符合规范时,打印警告信息并退出
{
MessageBox.Show("请输入符合规范的数字!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
} Arithmetic ari = new Arithmetic(); //声明一个Arithmetic类实例。 //根据单选控件选中的值来决定使用哪一个子类来初始化
if (RadioAdd.Checked)
ari = new NumAdd();
if (RadioSub.Checked)
ari = new NumSub();
if (RadioMul.Checked)
ari = new NumMul();
if (RadioDiv.Checked)
ari = new NumDiv(); ari.Num1 = Convert.ToDouble(a);
ari.Num2 = Convert.ToDouble(b); //将两个操作数赋值给实例ari
LabelResult.Text = ari.GetResult(); //将结果转换为字符串
}
}
}
运行结果如下:

C#四则运算器(多态方法实现)的更多相关文章
- 高级四则运算器—结对项目反思(193 & 105)
高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格 PSP2.1 P ...
- 高级四则运算器—结对项目总结(193 &105)
高级四则运算器—结对项目总结 为了将感想与项目经验体会分割一下,特在此新开一篇博文. 界面设计 啥都不说,先上图震慑一下... 上面的三个界面是我们本次结对项目的主界面,恩,我也觉得挺漂亮的!你问我界 ...
- 结对编程——四则运算器(UI第十组)
博客目录: 一.问题描述 二.设计思路 三.UI开发过程 四.对接过程 ...
- 第四次作业 四则运算器在C++层面上的进一步思考
OOA(Object Oriented Analysis,面向对象分析) 从客观存在的事务和事务之间的关系,归纳出有关对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个 ...
- Java中的多态方法
public class Main { public void test(Object o) { System.out.println("Object"); } public vo ...
- 基于MVP模式实现四则运算器
基于MVP模式四则运算器 来到新东家,项目的框架采用的是MVP模式,刚来公司的时候,项目经理给予分配小任务,首先熟悉MVP模式,而后普通的四则运算器的实现使用MVP分层.这里主要回顾当时做任务时候的对 ...
- java 构造函数内部的多态方法 完全剖析
我们先来看一个例子,如果你读过<java编程思想>的话 应该会有印象 package com.test.zj; public class PolyConstructors { public ...
- Java 多态方法构造器执行方法
我们参考下面这个例子: 读者可以提前考虑一下,这段程序的输出会是什么. public class Polymorphism { /** * 创建一个类A * 该类中有一个方法draw,以及一个构造方法 ...
- java构造器内部多态方法
public class TestC { public static void main(String []args) { new Graph(5); }}class Grp{ void draw() ...
随机推荐
- jQuery获取radio选中项checked的几种方法
如何知道radio哪个选项被选中了,也就是获取checked的radio项.这是个很简单的任务,这里我总结了几个常用的方法,体验一下jQuery的灵活. 具体的 HTML 和 jQuery 代码可以右 ...
- 用php代码统计数据库中符合条件的行数
$sql1 = "select count(*) from t_user where age<17"; $data1 = mysql_query($sql1); $rows1 ...
- 【bzoj 3252】攻略
题意 我们想到一个贪心,就是每次找到根路径前缀和最大的一个点,取走这条路径,同时把这条路径上的点权变成\(0\) 正确性显然 进一步发现我们需要从树上选择\(m\)条链使得链的总和最大 于是我们考虑换 ...
- PHP microtime() 函数
定义和用法 microtime() 函数返回当前 Unix 时间戳和微秒数. 语法 microtime(get_as_float) 参数 描述 get_as_float 如果给出了 get_as_fl ...
- Hive学习之路 (十六)Hive分析窗口函数(四) LAG、LEAD、FIRST_VALUE和LAST_VALUE
数据准备 数据格式 cookie4.txt cookie1, ::,url2 cookie1, ::,url1 cookie1, ::,1url3 cookie1, ::,url6 cookie1, ...
- Codeforces 1130 E.Wrong Answer 构造
题目要求构造一组数据使得题目给出代码的anwser和正确答案恰好相差k,我们记题目给出代码的输出为ans1,正确答案为ans2. 我们假设已经有总和为s的p个正数,使得此时的ans1=ans2=s*p ...
- 10分钟安装OpenStack
1 OpenStack初学者的苦恼 2 OpenStack最低配置要求 3 配置UOS环境 3.1 设置网络 3.1.1 创建路由器 3.1.2 创建网络 3.1.3 创建两个子网 3.2 创建UOS ...
- virtualbox+vagrant学习-2(command cli)-7-vagrant login命令
Login ⚠️该命令已经弃用了,别名为vagrant cloud auth login.看本博客的 格式: vagrant cloud auth login [options] 登录命令用于使用Ha ...
- 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM
题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...
- iptables基础配置
启动指令:service iptables start 重启指令:service iptables restart 关闭指令:service iptables stop 规则相关配置:/e ...