精华内容
下载资源
问答
  • 基于VB设计计算器代码,比较简单,但是很实用,功能比较齐全
  • vb学习练习例子,帮助大家立即vb的使用!!!
  • VB简易计算器

    2013-05-31 23:35:02
    vb设计的一款简单计算器,内含代码,程序,全部详细文件
  • 南京理工大学 VB课程设计 计算器 程序功能全但代码不繁
  • 计算器VB源程序代码

    2008-11-14 09:12:33
    计算器源程序代码 VB源程序代码 VB课程设计
  • VB 简易 计算器 源码

    热门讨论 2010-08-26 03:46:49
    本程序使用VB语言编成,只使用了一个窗体模块,完成...我今天重新把真正的完整版(vb计算器代码附带安装包的)上传,以求坦然。 望有所帮助!还望大家都多动手练习、思考些其他小Demo,那样会比只听老师讲课好n倍……
  • vb课程设计下载有源程序,完整的计算器代码
  • VB开发的计算器程序,课程设计可用,功能实现完整,内附源代码,亲测可用 功能包括课程设计的要求,完成基本加减乘除运算外还可以完成科学计算,如sin cos 阶乘,积分,存储保留结果,调用结果等等
  • VB课程设计计算器

    2010-06-24 17:32:05
    VB课程设计计算器,百分百源代码!包括加减乘除,开放,取倒数,去百分数等功能。
  • 本程序使用VB语言编成,只使用了一个窗体模块,完成...我今天重新把真正的完整版(vb计算器代码附带安装包的)上传,以求坦然。 望有所帮助!还望大家都多动手练习、思考些其他小Demo,那样会比只听老师讲课好n倍……
  • VB课程设计代码

    2020-01-06 11:43:59
    本资源为VB课设的贪吃蛇。还有其他的课设资料: 1.10以内加法 2.RTF编辑器 3.vb程序设计1 4.VB编译器 ...13.加减乘除计算器 ...49.科学计算器 ...60.表达式计算器 ...备注:VB设计 ————————————————
  • 这只一个word文档 !里面包含了 !VB编程里最基本的几个小例子!对VB的练习有很大的帮助!包括:记事本、简易科学计算器、选择题!其中代码以及各功能键的代码都写得很详细!以及界面设计都很明了!!!
  • 某个学院的课程设计,选其中两个完成! 这个里面有个简单的设计文档和完整的源码,应付作业设计应该没什么问题,本人都已经整理好了!另外在附送一个vs下的打字练习demo!代码都经过本人测试均可运行!
  • VB入门基础。 清楚易懂,适合初学者 本课程主要从开发环境、窗体、命令按钮、文本框、标签、消息框和输入框、代码基础、选择结构、循环结构、数组、过程、控件等方面进行讲解 ...

    立即学习:https://edu.csdn.net/course/play/5958/111700?utm_source=blogtoedu

    单击命令按钮,把文本框1和2里面的积显示在文本框3里面

    Private Sub Command1_Click()
    Text3.Text = Text1.Text * Text2.Text
    End Sub

    如果觉得文本框里面有内容不美观的话,就:

    Private Sub Form_Load()
    Text1.Text = ""
    Text2 = ""
    Text3 = ""
    End Sub

    还可以这么写

    Private Sub Command1_Click()
    a = Text1.Text
    b = Text2
    Text3 = a * b
    End Sub

    如果是加号的话,就会直接连接不计算,因为这是文本,如果想变成值,就加上val()

    展开全文
  • VB作业 题目2 股市计算器 知识点:多窗体的使用、文本框等基本控件的使用、控件的键盘输入焦点。 2. 功能要求 程序的主界面如图2.1. “投资分析”窗体(如图2.2)主要对买卖股票的盈亏进行分析计算,其中所花费的...
  • 在Visual Basic中,单击“文件”>“打开文件”,然后打开Form1.Designer.vb,然后单击“编辑”>“打开代码设计器” 4.在那里你可以编码并帮助我 5.之后,如果要再次打开项目,只需从开始菜单中打开Visual Basic,...
  • VB计算机窗口设计

    2011-09-20 22:52:25
    VB计算器窗口设计代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • VB 开发实例一简单计算器代码设计 核 通 VB 开发实例一简单计算器代码设计 核 通 VB 开发实例一简单计算器代码设计 核 功能简介 当单击10个数字按钮和点号按 钮时直接将文本输入框原来的值 与按钮上的值拼接并用...
  • 几十个VB代码

    2015-04-22 16:37:23
    2009-09-23 21:49 <DIR> cad设计 2009-09-23 22:42 <DIR> gsp卫星定位 2009-09-30 19:46 <DIR> mp3播放器 2009-09-19 23:31 <DIR> Ok Clock 2009-09-19 17:23 <DIR> Ok eluosifangkuai 2009-09-20 02:02 <DIR> Ok ...
  • 代码如下 <%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> Class Ent Public Shared total, num1, ...
  • 完整的计算器

    2014-11-27 22:51:00
    这是一个最简单的程序,我是第一次接触的VB软件 有一位大哥哥叫我做的计算器 这个计算器用到了 两个labell标签 两个Text文本 四个Button按钮分别是加减乘除 代码几乎没有用到 加的话就用Text1加Text2 减乘除依次都是...
  • 前 言 电脑已经成为挂在我们嘴角的一句口头禅,它已经深入到日常工作和生活的方方面面,...因此,借这次毕业设计之机,我编写了一个可以在VB6下正常运行的日历、计算器多功能应用程序,欢迎各位老师提出批评改进意见。
  • 本节课程,我们一起来使用VB6.0制作一个简易计算器。关键技术本案例中采用了VBScript脚本中的eval方法,利用这个方法可以极大的简化计算流程,减少代码复杂度。在使用eval方法前,我们需要先定义一个对象。具体方法...
    本节课程,我们一起来使用VB6.0制作一个简易计算器。

    4c1aef1b4b13ab188acfd6974f943ed0.png

    关键技术

    本案例中采用了VBScript脚本中的eval方法,利用这个方法可以极大的简化计算流程,减少代码复杂度。

    在使用eval方法前,我们需要先定义一个对象。具体方法详见下方“=”按键的代码。

    使用效果见以下视频:

    设计过程

    1,建立程序界面,按照下图添加控件到窗体中。

    控件包含:一个文本控件,0-9数字键共10个按钮,+、-、×、÷、小数点、=、AC、退格键,共8个按钮。

    其中0-9数字键按钮,需要设置数组控件,将每个按钮的index属性设置为其对应的数字。

    并将按钮的caption属性全部按照下图设置好。

    7112640b386cc57a038071498ab62346.png

    2,编写数字键0-9的代码

    Private Sub Command1_Click(Index As Integer)    Text1 = Text1 & IndexEnd Sub

    3,编写小数点按键的代码

    Private Sub Command2_Click()    Text1 = Text1 & "."End Sub

    4,编写+-×÷四个按键的代码

    Private Sub Command4_Click()    Text1 = Text1 & "/"End SubPrivate Sub Command5_Click()    Text1 = Text1 & "*"End Sub'加号Private Sub Command6_Click()    Text1 = Text1 & "+"End Sub'减号Private Sub Command7_Click()    Text1 = Text1 & "-"End Sub

    5,编写=计算按键的代码

    Private Sub Command3_Click()    Dim s As Object    On Error GoTo err    Set s = CreateObject("MSScriptControl.ScriptControl")    s.Language = "VBScript"    Text1 = s.eval(Text1)    Exit Suberr:    Text1 = "Err"  '计算出错时显示ErrEnd Sub

    6,编写AC按(清文本框)的代码

    Private Sub Command8_Click()    Text1 = ""End Sub

    7,最后编写退格按键的代码

    Private Sub Command9_Click()     If Len(Text1) > 0 Then        Text1 = Left(Text1, Len(Text1) - 1)    End IfEnd Sub

    8,完成全部代码后,运行程序,进行测试

    b7ec62d2bd0f891ccc583a9d43ee06ad.png

    acf67aa31de15ed1b4be3745ae1ab950.png

    展开全文
  • 故事引入 小菜今年计算机专业大四...只是简单实现计算器功能,没有面向对象设计,维护和二次开发都不方便,要实现容易维护,容易扩展,又容易复用的代码! 栗子说明问题 三国时期,曹操诗性大发“喝酒唱歌,人生真

    故事引入

    小菜今年计算机专业大四毕业,在找工作面试的时候,遇到一道题目👇

    • “请用C++、JAV、C# 或 VB.NET 任意一种面向对象语言实现一个计算机控制台程序,要求输入两个数和运算符,得到结果”

    小菜做完题目交卷后,石沉大海,小菜实现计算器的代码:
    在这里插入图片描述在这里插入图片描述

    代码问题

    1. 代码规范问题:明明不规范、三次无效判断、没有考虑特殊情况
      在这里插入图片描述
    2. 只是简单实现计算器功能,没有面向对象设计,维护和二次开发都不方便,要实现容易维护,容易扩展,又容易复用的代码!

    栗子说明问题

    • 三国时期,曹操诗性大发“喝酒唱歌,人生真爽”,众文臣齐呼“丞相好诗!”于是一个臣子立马命印刷工匠刻板印刷这首诗!
      在这里插入图片描述

    • 样张出来后给曹操一看,觉得不妥,说把“喝”与“唱”太俗气,应改成“对酒当歌”较好!于是这个臣子又工匠重新印刷,工匠眼看连夜刻板之工,彻底白费,心中叫苦,但只能照办出第二版:
      在这里插入图片描述
      -样张再次出来后请曹操过目,曹操细细一品觉得还是不够好,说“人生真爽过于直接,应改成问语才够意境,因为这里应该改成 “对酒当歌,人生几何?” …”当臣子转告工匠时,工匠晕倒!!
      在这里插入图片描述

    • 其中原因:三国时期,活字印刷术还未发明,改字的时候要整个刻板全部重新雕刻!

    • 解决办法:有活字印刷后,只需要改四个字即可,不会白费其他工作,岂不妙哉!!
      在这里插入图片描述

    1. 要修改时只需要修改更改的字,此为可维护
    2. 这些字做出来之后并不是没用了,完全可以在后来的印刷中重复使用,此乃可复用
    3. 若要加字,只需要另刻新字加入即可,这是可扩展
    4. 字的排序其实可能是竖排或者横排,此时只需要将活字移动就可以满足需求,这叫灵活性好
    • 在活字印刷术出来之前,这四种特性都无法满足,修改、加字、排序、必须重刻,印完一本书后,整个版子就没有价值

    面向对象的好处

    客户要求改需求时,因为我们的程序不宜维护,灵活性差,不容易扩展,更谈不上复用,因此面对需求分析,只能加班处理!一般都要对程序大作修改!但如果用面向对象的分析设计编程思想,考虑通过封装、继承、多态把程序的耦合度降低,传统印刷术的问题就在于所有字都可在同一板面上造成耦合度太高导致,用设计模式使程序更加灵活、容易修改、并且易于复用!

    设计原则

    1. 复用代码封装业务

    用尽可能的办法去避免重复,业务逻辑与界面逻辑分开,降低耦合度,分离才能更容易维护扩展
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这样的代码如果要添加一个新的运算,需要修改Operation类,在switch新+一个分支!这样需要让加减乘除都参与编译,可能会修改错别的代码!

    举个栗子
    公司财务要求做运维软件,目前有技术人员(月薪),销售人员(底薪+提成),经理(年薪+股份)三种算法,现在要求加入兼职人员(时薪)算法,按照上面的算法,要修改全部计算工资算法的代码,如果除了增加一个类算法还在别处做了修改,每一处都会让公司财务发生不必要的麻烦!!整个风险太大!
    正确操作要把各个运算分离,修改新增删除一个不影响其他类型!

    3. 松耦合

    Operation 运算类
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    运算类有两个Number变量,用于计算输入,GetResult()在各个具体类重写的方法,这样修改任何一个算法,都会返回的是其运算的值,也不会影响到其他算法代码!但是需要告诉计算器使用的是哪一个算法!

    简单工厂模式

    实例化对象: 用一个单独的类来做创造实例的过程
    简单运算工厂类 OperationFactory.cs

    class OperationFactory
        {
            public static Operation CreateOperate(string operate)
            {
                Operation operation = null;
                switch (operate)
                {
                    case "+":
                        operation = new OperationAdd();
                        break;
                    case "-":
                        operation = new OperationSub();
                        break;
                    case "*":
                        operation = new OperationMul();
                        break;
                    case "/":
                        operation = new OperationDiv();
                        break;
                }
                return operation;
            }
        }
    

    运算基类Operation.cs

    class Operation
        {
            private double num1 = 0;
            private double num2 = 0;
    
            public double Num1 { get => num1; set => num1 = value; }
            public double Num2 { get => num2; set => num2 = value; }
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }
    

    加法类OperationAdd.cs

    class OperationAdd : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = Num1 + Num2;
                Console.Write("OperationAdd [简单工厂模式加法运算]:" + Num1 + " + " + Num2 + " = " + result + "\n");
                return result;
            }
        }
    

    减法类OperationSub .cs

    class OperationSub : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = Num1 + Num2;
                Console.Write("OperationSub [简单工厂模式减法运算]:" + Num1 + " + " + Num2 + " = " + result + "\n");
                return result;
            }
        }
    

    除法类OperationDiv .cs

    class OperationDiv : Operation
        {
            public override double GetResult()
            {
    
                if (Num2 == 0)
                {
                    throw new ArgumentException();
                }
                double result = Num1 / Num2;
                Console.Write("OperationDiv [简单工厂模式除法运算]:" + Num1 + " / " + Num2 + " = " + result + "\n");
    
                return result;
            }
        }
    

    乘法类OperationMul .cs

    class OperationMul : Operation
        {
            public override double GetResult()
            {
                double result;
                result = Num1 * Num2;
                Console.Write("OperationMul [简单工厂模式乘法运算]:" + Num1 + " × " + Num2 + " = " + result + "\n");
                return base.GetResult();
            }
        }
    

    客户端主程序Program.cs

    class Program
        {
            static void Main(string[] args)
            {
                int num1 = 10;
                int num2 = 20;
    			Operation addOperation = OperationFactory.CreateOperate("+");
                addOperation.Num1 = num1;
                addOperation.Num2 = num2;
                double addResult = addOperation.GetResult();
                Console.Write("OperationFactory 简单工厂加法  \n\n");
    
                // 简单工厂 - 
                Operation subOperation = OperationFactory.CreateOperate("-");
                subOperation.Num1 = num1;
                subOperation.Num2 = num2;
                double subResult = subOperation.GetResult();
                Console.Write("OperationFactory 简单工厂减法  \n\n");
    
                // 简单工厂 *
                Operation mulOperation = OperationFactory.CreateOperate("*");
                mulOperation.Num1 = num1;
                mulOperation.Num2 = num2;
                double mulResult = mulOperation.GetResult();
                Console.Write("OperationFactory 简单工厂乘法 \n\n");
    
                // 简单工厂 *
                Operation divOperation = OperationFactory.CreateOperate("/");
                divOperation.Num1 = num1;
                divOperation.Num2 = num2;
                double divResult = divOperation.GetResult();
                Console.Write("OperationFactory 简单工厂除法 \n\n");
    
                Console.ReadKey();
            }
        }
    

    运行结果:

    OperationAdd [简单工厂模式加法运算]:10 + 20 = 30
    OperationFactory 简单工厂加法
    
    OperationSub [简单工厂模式减法运算]:10 + 20 = 30
    OperationFactory 简单工厂减法
    
    OperationMul [简单工厂模式乘法运算]:10 × 20 = 200
    OperationFactory 简单工厂乘法
    
    OperationDiv [简单工厂模式除法运算]:10 / 20 = 0.5
    OperationFactory 简单工厂除法
    

    在这里插入图片描述

    不规范的类图:
    在这里插入图片描述

    • 要增加新运算比如开方,直接添加一个开方类,并且修改工厂类即可,若要修改加法运算,直接修改加法类中代码,不会影响其他运算!

    工厂方法模式

    • 简单工厂添加新类时需要修改工厂里面的Case 分支条件!修改原有的类说明不旦开放扩展,对修改也开放了,这样违背了开放-封闭原则

    工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
    在这里插入图片描述
    把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法,然后所有的要生产具体类的工厂就去实现这个接口,这样一个简单工厂模式的工厂类变成一个工厂抽象接口和多个具体生成对象的工厂!需要增加新的运算功能时,不需要改变原有的工厂类,只需要增加此功能的运算类和相应的工厂类就行!
    在这里插入图片描述

    • 这样一来整个工厂和产品体系其实没有发生什么修改,只是扩展的变化,这就完全符合开放-封闭的原则!!
    • 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到客户端代码来进行,如果说想要增加功能,本来是要改工厂类,现在变成在修改客户端!

    工厂方法模式应用

    • 栗子:薛磊风是一个大学生,以学习雷锋的名义去帮助老人做事,这里可以设计成一个了雷锋类,拥有扫地、洗米、买米等方法。
      LeiFeng.cs
    // 雷锋类
        class LeiFeng
        {
            public void Sweep()
            {
                Console.WriteLine("扫地");
            }
            public void Wash()
            {
                Console.WriteLine("洗衣");
            }
            public void BuyRice()
            {
                Console.WriteLine("买米");
            }
        }
    

    ‘学习雷锋的大学生’类要继承‘雷锋’ Undergraduate.cs

    		public Undergraduate()
    		{
    		    Name = "学习雷锋的大学生";
    		}
    

    客户端实现代码,大学生做雷锋:

    		LeiFeng student = new Undergraduate();
    		student.BuyRice();
    		student.Wash();
    		student.Sweep();
    

    如果说有三个大学生要去做事,就要实例化三个大学生,于是👇
    在这里插入图片描述
    由此可得创建一个社区志愿者类 Volunteer .cs

    	class Volunteer : LeiFeng
        {
            public Volunteer()
            {
                Name = "学习雷锋的社区志愿者";
            }
        }
    

    简单学雷锋工厂SimpleFactory.cs

    class SimpleFactory
        {
            public static LeiFeng CreateLeiFeng(string type)
            {
                LeiFeng result = null;
                switch (type)
                {
                    case "大学生":
                        result = new Undergraduate();
                        break;
                    case "志愿者":
                        result = new Volunteer();
                        break;
                }
                return result;
            }
        }
    

    客户端代码Program.cs

    	LeiFeng studentA = SimpleFactory.CreateLeiFeng("大学生");
    	studentA.BuyRice();
    	LeiFeng studentB = SimpleFactory.CreateLeiFeng("大学生");
    	studentB.Sweep();
    	LeiFeng studentC = SimpleFactory.CreateLeiFeng("大学生");
    	studentC.Wash();
    

    在实例化时都需要写出这个工厂的代码,这是重复的地方!!

    // 雷锋工厂
    interface IFactory
        {
            LeiFeng CreateLeiFeng();
        }
        
    // 学习雷锋的大学生工厂
    class UndergraduateFactory : IFactory
        {
            public LeiFeng CreateLeiFeng()
            {
                //throw new NotImplementedException();
                return new Undergraduate();
            }
        }
        
    // 志愿者工厂
    class VolunteerFactory : IFactory
        {
            LeiFeng IFactory.CreateLeiFeng()
            {
                //throw new NotImplementedException();
                return new Volunteer();
            }
        }
        
    

    客户端写法

    // 工厂方法
                IFactory studentFactory = new UndergraduateFactory();
                LeiFeng student = studentFactory.CreateLeiFeng();
                student.BuyRice();
                student.Sweep();
                student.Wash();
    
                IFactory volunteerFactory = new VolunteerFactory();
                LeiFeng volunteer = volunteerFactory.CreateLeiFeng();
                volunteer.BuyRice();
                volunteer.Sweep();
                volunteer.Wash();
    

    输出:

    学习雷锋的大学生 买米
    学习雷锋的大学生 扫地
    学习雷锋的大学生 洗衣
    学习雷锋的社区志愿者 买米
    学习雷锋的社区志愿者 扫地
    学习雷锋的社区志愿者 洗衣
    

    在这里插入图片描述

    工厂方法和简单工厂对比

    • 工厂方法客服了简单工厂违背 “ 开放-封闭原则 ” 的缺点,又保持了封装对象创建过程的优点。
    • 工厂方法模式是简单工厂模式的进一步抽象和推广,由于使用了多态性,工厂方法模式保持了简单工厂模式的优点并克服它的缺点。
    • 缺点:由于每增加一个产品都需要增加一个产品工厂类,增加了额外的开发量
    • 同:工厂模式都是集中封装了对象的创建,使要更换对象时,不需要做大的改动就可以实现,降低了客户程序与产品对象的耦合!

    工厂模式

    意图

    主要解决接口选择的问题。

    使用场景

    我们明确知道不同条件下要创建不同实例时

    如何实现

    让工厂子类实现工厂接口,创建具体类型产品返回,创建过程在子类执行完成

    应用实例

    1. 吃一个面包,不需要关心怎么做出来的,只要知道价格味道
    2. 买一辆车直接从店里提货,不用管车怎么制造的
    3. 使用API不需要关心底层创建逻辑,可以直接用这个类的方法

    优点

    1. 一个调用者想要创建一个对象,只需要知道其名字就可以
    2. 扩展性高,如果想增加一个产品,扩展一个工厂类+一个产品类即可
    3. 屏蔽产品的具体实现,调用者只关心产品的接口

    缺点

    每次增加一个产品就需要增加一个具体类和对象具体实现类,导致系统中类的数量成倍增长,增加系统代码复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

    应用场景

    1. 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
    2. 数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
    3. 设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。
    4. 在任何需要生成复杂对象的地方都可以使用工厂方法模式,但是简单对象只需要new 出来的就不需要用工厂,如果用了就会引入工厂类,只会增加系统复杂度。

    参考资料

    《大话数据结构》
    菜鸟教程 | 工厂模式

    展开全文
  • 请用C++、Java、C#或VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果; //version 1.1 #include #include using namespace std; int main() { double A,C,D; ch

    大话设计模式   第1章 代码无错就是优? ——简单工厂模式

    所有代码C++实现

    1.1问题描述:

    请用C++、Java、C#或VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果;
    //version 1.1
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
    	double A,C,D;
    	char B;
    	printf("请输入数字A:\n");
    	scanf("%lf",&A);
    	printf("请输入运算符号(+,-,*,/):\n");
    	scanf("%s",&B);
    	printf("请输入数字B\n");
    	scanf("%lf",&C);
    	
    	if(B=='+')
    		D=A+C;
    	if(B=='-')
    		D=A-C;
    	if(B=='*')
    		D=A*C;
    	if(B=='/')
    		D=A/C;
    	printf("结果是:%lf",D);	
    	return 0;
    } 

    1.2  初学者代码毛病
    大鸟说:“且先不说出题人的意思,单就你现在的代码,就有很多不足的地方需要改进。”
    1、这样的命名是不规范的
    2、判断分支,每个都要判断,做了许多无用功
    3、如果除数是0,怎么办?用户输入的不是数字怎么办? 


    1.3  代码规范
    //version 1.2
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
    	double numberA,numberB,result;
    	char strOperate;
    	try{
    		printf("请输入数字A:\n");
    		scanf("%lf",&numberA);
    		printf("请输入运算符号(+,-,*,/):\n");
    		scanf("%s",&strOperate);
    		printf("请输入数字B\n");
    		scanf("%lf",&numberB);
    		
    		switch(strOperate)
    		{
    			case '+':
    				result=numberA+numberB;
    				break;
    			case '-':
    				result=numberA-numberB;
    				break;
    			case '*':
    				result=numberA*numberB;
    				break;
    			case '/':
    				if(numberB!=0)
    					result=numberA/numberB;
    				else
    					result=-1;
    				break;
    		}
    		if(result==-1)
    			printf("结果是:除数不能为0\n");
    		else
    		 	printf("结果是:%lf",result);	
    	}
    	catch(char *str)
    	{
    		printf("您的输入有错:%s",str);
    	}
    	return 0;
    } 
    1.4  面向对象编程
               大鸟:“所有编程初学者都会有这样的问题,就是碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考,比如计算器这个程序,先要求输入两个数和运算符号,然后根据运算符号判断选择如何运算,得到结果,这本身没有错,但这样的思维却使得我们的程序只为满足实现当前的需求,程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。”
               小菜:“鸟哥呀,我有点糊涂了,如何才能容易维护,容易扩展,又容易复用呢,能不能具体点?”

    1.5  活字印刷,面向对象
    “第一,要改,只需更改要改之字,此为可维护
    第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用
    第三,此诗若要加字,只需另刻字加入即可,这是可扩展
    第四,字的排列其实可能是竖排可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好。”

    1.6  面向对象的好处
               之后当我学习了面向对象的分析设计编程思想,开始考虑通过封装、继承、多态把程序的耦合度降低
    传统印刷术的问题就在于所有的字都刻在同一版面上造成耦合度太高所致,开始用设计模式使得程序更加的灵活,
    容易修改,并且易于复用。

               “呀是呀,你说得没错,中国古代的四大发明,另三种应该都是科技的进步,伟大的创造或发现。而唯有活字印刷,实在是思想的成功,面向对象的胜利。”小菜也兴奋起来:
               “你的意思是,面试公司出题的目的是要我写出容易维护,容易扩展,又容易复用的计算器程序?那该如何做呀?”
    1.7  复制vs.复用
               大鸟:“小菜看来还是小菜呀,有人说初级程序员的工作就是Ctrl+C和Ctrl+V,这其实是非常不好的编码习惯,
    因为当你的代码中重复的代码多到一定程度,维护的时候,可能就是一场灾难。越大的系统,这种方式带来的问题越严重,编程有一原则,就是用尽可能的办法去避免重复。想想看,你写的这段代码,有哪些是和控制台无关的,而只是和计算器有关的?”

    1.8  业务的封装

           大鸟:“准确地说,就是让业务逻辑与界面逻辑分开,让它们之间的耦合度下降。只有分离开,才可以达到容易维护或扩展。”

           小菜:“让我来试试看。”

    //version 1.3
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    
    double GetResult(double numberA,double numberB,char operate)
    {
    	double result=0;
    	switch(operate)
    	{
    		case '+':
    			result=numberA+numberB;
    			break;
    		case '-':
    			result=numberA-numberB;
    			break;
    		case '*':
    			result=numberA*numberB;
    			break;
    		case '/':
    			if(numberB!=0)
    				result=numberA/numberB;
    			break;
    	}
    	return result;
    }
    
    int main()
    {
    	double numberA,numberB,result;
    	char strOperate;
    	try{
    		printf("请输入数字A:\n");
    		scanf("%lf",&numberA);
    		printf("请输入运算符号(+,-,*,/):\n");
    		scanf("%s",&strOperate);
    		printf("请输入数字B\n");
    		scanf("%lf",&numberB);
    		result=GetResult(numberA,numberB,strOperate);
    		if(result==-1)
    			printf("结果是:除数不能为0\n");
    		else
    		 	printf("结果是:%lf",result);	
    	}catch(char *str)
    	{
    		printf("您的输入有错:%s",str);
    	}
    	return 0;
    } 
           小菜:“面向对象三大特性不就是封装、继承和多态吗,这里我用到的应该是封装。这还不够吗?我实在看不出,这么小的程序如何用到继承。至于多态,其实我一直也不太了解它到底有什么好处,如何使用它。”
           大鸟:“慢慢来,要学的东西多着呢,你好好想想该如何应用面向对象的继承和多态。”

    1.9  紧耦合vs.松耦合
    小菜:“我已经把业务和界面分离了呀,这不是很灵活了吗?”
    大鸟:“那我问你,现在如果我希望增加一个开根(sqrt)运算,你如何改?”
    小菜:“那只需要改Operation类就行了,在switch中加一个分支就行了。”
    大鸟:“问题是你要加一个平方根运算,却需要让加减乘除的运算都得来参与编译,如果你一不小心,把加法运算改成了减法,这岂不是大大的糟糕。
    1.10  简单工厂模式
    //version 1.4
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    
    class Operation
    {
    	private:
    		double numberA=0,numberB=0;
    	public:
    //		Operation(){}//构造函数 
    //		Operation(double _numberA=0,double _numberB=0):numberA(_numberA),numberB(_numberB){};
    		double getNumberA(){return numberA;}
    		double getNumberB(){return numberB;}
    		void setNumberA(double _numberA)
    		{
    			this->numberA=_numberA;
    		}
    		void setNumberB(double _numberB)
    		{
    			this->numberB=_numberB;
    		}
    		virtual double getResult()
    		{
    			double result=0;
    			return result;
    		}
    };
    //加法类 
    class OperateAdd:public Operation
    {
    	double getResult()
    	{
    		double result=0;
    		result=getNumberA()+getNumberB();
    		return result;
    	}
    };
    
    //减法类 
    class OperateSub:public Operation
    {
    	double getResult()
    	{
    		double result=0;
    		result=getNumberA()-getNumberB();
    		return result;
    	}
    };
    //乘法类 
    class OperateMul:public Operation
    {
    	double getResult()
    	{
    		double result=0;
    		result=getNumberA()*getNumberB();
    		return result;
    	}
    };
    //除法类 
    class OperateDiv:public Operation
    {
    	double getResult()
    	{
    		double result=0;
    		if(getNumberB()==0)
    			throw ;
    		result=getNumberA()/getNumberB();
    		return result;
    	}
    };
    //简单工厂类
    class OperationFactory
    {
    	public :
    	Operation* createOperate(char operate)
    	{
    		Operation *oper=new Operation();
    		switch(operate)
    		{
    			case '+':
    				oper=new OperateAdd();
    				break;	
    			case '-':
    				oper=new OperateSub();
    				break;
    			case '*':
    				oper=new OperateMul();
    				break;
    			case '/':
    				oper=new OperateDiv();
    				break;
    		}
    		return oper;
    	}
    };
    
    //客户端 
    int main()
    {
    	double numberA,numberB,result;
    	char strOperate;
    	Operation *oper; 
    	OperationFactory *operFac;
    	try{
    		printf("请输入数字A:\n");
    		scanf("%lf",&numberA);
    		printf("请输入运算符号(+,-,*,/):\n");
    		scanf("%s",&strOperate);
    		printf("请输入数字B\n");
    		scanf("%lf",&numberB);
    		
    		oper =operFac->createOperate(strOperate);
    		oper->setNumberA(numberA);
    		oper->setNumberB(numberB);
    		result=oper->getResult();
    		if(result==-1)
    			printf("结果是:除数不能为0\n");
    		else
    		 	printf("结果是:%lf",result);	
    	}catch(char *str)
    	{
    		printf("您的输入有错:%s",str);
    	}
    	return 0;
    } 
    1.11  UML类图

    自己看书;

    主要包括类、接口,以及继承、实现、关联、聚合等;

           大鸟:“吼吼,记住哦,编程是一门技术,更加是一门艺术,不能只满足于写完代码运行结果正确就完事,时常考虑如何让代码更加简练,更加容易维护,容易扩展和复用,只有这样才可以真正得到提高。写出优雅的代码真的是一种很爽的事情。UML类图也不是一学就会的,需要有一个慢慢熟练的过程。所谓学无止境,其实这才是理解面向对象的开始呢。” 

    展开全文
  • 今天去图书馆借了本《大话设计模式》,看到第一个小故事"面试受挫",故事中的小菜在面试题目中"请用C++、Java、C#或VB.net任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果,"没有...
  • 大话设计模式——第1章 代码无错就是优?——简单工厂模式 1.1 面试受挫 小菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位。当投递了无数份...
  • 小菜编程成长记(一 面试受挫——代码无错就是好?)  小菜今年计算机专业大四了,... 到了人家单位,前台小姐给了他一份题目,上面写着,“请用C++、Java、C#或VB.NET任意一种面向对象语言实现一个计算器控制台程
  • 题目: 请用C++、Java、C#或VB.NET任意一种面向对象语言实现一个计算器控制程序,要求输入两个数和运算符号,得到结果。 答案: class Program { static void Main(string[] args) { Console.Write("请输入数字A...
  • 先考虑一下计算器设计,可以参考windows的计算器。最基本那种就可以了。 下面是一个计算器控件摆放和命名: txtValue的readonly属性设置为true;按钮的FlatStyle属性设置为Popup。 代码比较容易懂,我直接给出来:...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

vb设计计算器代码