ASP.NET四则运算--策略模式
在ASP.NET中实现四则运算,同样使用了类的封装,以及策略模式。
只不过是把封装的类、前台代码以及后台的代码分离开来,但同样是要达到功能的实现。
Calculator.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> ///Calculator 的摘要说明 /// </summary> public abstract class Calculator { public abstract double Cal(double a, double b); } public class Add : Calculator //派生类Add继承抽象类Calculator { public override double Cal(double a, double b)//并重写了抽象方法Cal { ; result = a + b; return result; } } public class Sub : Calculator { public override double Cal(double a, double b) { ; result = a - b; return result; } } public class Mul : Calculator { public override double Cal(double a, double b) { ; result = a * b; return result; } } public class Div : Calculator { public override double Cal(double a, double b) { ; result = a / b; return result; } } public class Context //上下文 { private Calculator calculate = null;//实例化一个基类的引用对象 public Context(Calculator _cal)//_cal为派生类的一个对象 { this.calculate = _cal; //把派生类的对象赋给基类的引用对象 } public double Cal(double a, double b, String symbol) { return this.calculate.Cal(a, b);//返回计算结果 } }
index.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class index : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //界面加载 } protected void Cal_Click(object sender, EventArgs e) { string symbol = DropDownList1.SelectedItem.ToString(); double a = Convert.ToDouble(TextBox1.Text); double b = Convert.ToDouble(TextBox2.Text); Context contex = null; ) { contex = new Context(new Add()); //加法策略 } ) { contex = new Context(new Sub()); //减法策略 } ) //若为乘号 { contex = new Context(new Mul()); //乘法策略 } ) //若为乘号 { contex = new Context(new Div()); //除法策略 } string answer = contex.Cal(a, b, symbol).ToString(); //用answer来存计算出来的答案,此时已经计算出a,b两个数的运算结果。 string result = TextBox1.Text + DropDownList1.SelectedItem.ToString() + TextBox2.Text;//把运算式子存在result里面 if (TextBox3.Text == answer) //如果输入答案与计算出的answer相等 { Response.Write("<script>alert('回答正确!')</script>"); //弹出回答正确 ListBox1.Items.Add(result + "=" + TextBox3.Text.Trim() + "√");//并把运算式子存在listbox里 } else //如果答错 { Response.Write("<script>alert('答题错误!')</script>"); //弹出答题错误 ListBox1.Items.Add(result + "=" + TextBox3.Text.Trim() + "×");//同样把运算式子放在listbox } TextBox1.Text = "";//把文本框清空,进行下一次出题 TextBox2.Text = ""; TextBox3.Text = ""; } }
运行测试:
回答正确给出提示!
出题保存到listbox列表:
ASP.NET中,把Calculator.cs放到App_Code文件夹。
总的来说不算难,主要就是初步实现对类的封装,以及策略模式的使用!感受一下:经过老师给我们介绍的设计模式,先是让我们欣赏,发现代码原来可以写的这么漂亮!
ASP.NET四则运算--策略模式的更多相关文章
- ASP.NET四则运算--工厂模式
这次是在ASP.NET上实现四则运算,之前用策略模式实现了,所以这次想着用工厂模式实现一下. Calculator.cs using System; using System.Collections. ...
- ASP.net之策略模式
设计思路: 用ASP.net设计,调用策略模式.在第一个数和第二个数的文本框中输入数值,单击录题按钮,数值保存在n1,n2文档中,把要做的题都保存完后,单击开始按钮,开始做题,做完单击判断按钮,进行判 ...
- 封装,策略模式,Asp换脸
1.简单封装 1>计算类 using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- 计算器软件的代码实现 (策略模式+asp.net)
一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...
- 策略模式,ASP.NET实现
策略模式,ASP.NET实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; ...
- 计算器软件实现系列(五)策略模式+asp.net
一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...
- asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限
[前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- asp.net—策略模式
一.什么是策略模式 定义:定义一系列算法,把一个个算法封装成独立类并实现同一个接口,使得它们之间可以相互替换. 二.怎么使用策略模式 首先模拟一个场景:有一个用户想买车. 可以有多种方式买车: (1 ...
随机推荐
- 帮初学者改代码——playerc之“练习:求完数问题”(下)
前文链接:帮初学者改代码——playerc之“练习:求完数问题”(上) 再来看看be_ferfect()应该如何改. be_ferfect()函数的功能是判断number是否为完数,同时把因子对写入d ...
- HTTP请求流程(一)----流程简介
最近一直在研究如何让asp.net实现上传大文件的功能,所以都没怎么写技术类的文章了.可惜的是至今还没研究出来,惭愧~~~.不过因为这样,也了解了一下http消息请求的大致过程.我就先简单介绍下,然后 ...
- Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤
资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在 ...
- 【python cookbook】【字符串与文本】13.对齐文本字符串
问题:以某种对齐方式将文本做格式化处理 解决方案: 1.针对字符串:ljust().rjust().center()方法 2.针对任何值,更加通用的:format() 更多内容:https://do ...
- Linux终端乱码的解决办法
用SSH连接Linux时经常会遇到乱码的情况,痛苦了好久,在网上找到一个解决办法,编辑~/.bash_profile文件,加入下面两行: LANG="zh_CN.GB18030" ...
- $(document).ready vs $(window).load vs window.onload
原文地址: $(document).ready vs $(window).load vs window.onload $(document).ready We execute our code whe ...
- JavaEE基础(十)
1.面向对象(package关键字的概述及作用) A:为什么要有包 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改, ...
- HDU 5968:异或密码(暴力)
http://acm.hdu.edu.cn/showproblem.php?pid=5968 题意:中文题意. 思路:一开始不会做,后来发现数据范围很小,而且那个数要是连续的,所以可能把所有情况枚举出 ...
- HDU 5025:Saving Tang Monk(BFS + 状压)
http://acm.hdu.edu.cn/showproblem.php?pid=5025 Saving Tang Monk Problem Description <Journey to ...
- js中字符串转换为数字的方法
parseInt; parseFload; +; parseInt() 和 parseFloat() 函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符 ...