找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
宇哥帮你零基础建设外贸独立站
宇哥淘宝虚拟类目-付费微信群
宇哥闲鱼3个月陪跑课
Access数据库-零基础入门课程
Access数据库-自用软件开发课程
Access数据库-即学即用课程
Access数据库-进销存课程
Access数据库-VBA入门课程
Access数据库-陪跑课程
查看: 111|回复: 0

C#编程入门第2课:一元二次方程计算窗体的制作(Version2.0)

[复制链接]

109

主题

15

回帖

553

积分

管理员

积分
553
发表于 2024-3-7 14:58:53 | 显示全部楼层 |阅读模式
本课是C#编程入门的第2讲,主要讲如何用Visual Studio下的C#语言,制作一个“一元二次方程”的计算窗体。
前言
(本课程是一个2.0的版本,之前讲过一次一元二次方程的制作,姑且称之为1.0的版本,讲的相对比较繁琐和粗糙,因此重新录制了2.0版本。)
和1.0的版本相比,本课程有2个知识点的升级:
1.增加了过程封装和调用
2.改进了窗体输入的方法
这两处改进能让这个一元二次方程的案例程序更加简洁健壮,比之前的“简陋”技术有很明显的进步。
本课程主要讲的就是这两处改进。
课成分四个部分:
1.课程目的
2.设计要求
3.窗体制作
4.代码编写

第1部分 课程目的
总体上,让学员熟练掌握用C#语言制作一个一元二次方程软件的方法。
具体来说,有两项技术需要掌握:
1.掌握文本框调用
熟悉从文本框textBox调取数据的正确步骤,在窗体中数据输入输出很常见,因此调用要熟练。
2.熟悉过程调用
理解过程调用的意义和作用,掌握调用的技巧。跟本课第1个版本相比,本案例的过程调用是本质性的变化。
第2部分 设计要求


总体要求在窗体里,自动化完成一元二次方程计算、而且不报错。
1.窗体要求
要求用Visual Studio做一个窗体,做5个文本框,其中前3个文本框输入一元二次方程的三个系数,后2个文本框输出两个根。
2.自动化要求
改动3个文本框的时候,自动显示计算结果。注意观察我的动图演示,你也可以采用别的自动化方式,比如加一个按钮,都可以。
第3部分 窗体制作
制作过程分成两步:制作窗体和控件、编写控制代码。
窗体制作的方法:直接从工具箱拉5个文本框进窗体,
textBox1、textBox2、textBox3、textBox4、textBox5(VS默认边拉边自动排号)
其余的控件没有了。这一步比较简单,很容易做。
第4部分 代码编写
本案例的窗体类里,分为四个部分:
1.计算代码
2.textBox1控制代码
3.textBox2控制代码
4.textBox3控制代码
整体计算过程单独放在计算代码里,作为一个子类。
更改三个文本框的时候,自动调用计算代码。
1.完整代码
  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. namespace WindowsFormsApp1
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.         }
  18.         /*
  19.         C#编程入门第2课(version2)课程要点:

  20.         本课主要有2个知识点
  21.         1.TryParse函数的应用:

  22.         TryParse函数这个函数返回类型为bool类型,
  23.         用以判断作为参数A[参数A必须为字符串]是否可以转换为前面的类型。
  24.         如果可以转换,那么则将转化结果以out类型参数的方式返回。

  25.         <>为什么要强调呢,因为直接在文本框里输入数字,再删除容易报错。
  26.         <>textBox文本框里输入数字要经常用这个方法,要死记硬背。

  27.         2.尝试调用函数

  28.         本案例要更改三个文本框,每次文本框都调用相同的函数Yiyuanercifangcheng(),
  29.         如果不把计算过程单独拿出来,就要把相同计算过程重复三次。
  30.         熟悉调用的方式。
  31.         */

  32.         public void Yiyuanercifangcheng()
  33.         {
  34.             double a = 0;//变量先设为0再从textBox里取值,非常使用,避免报错
  35.             double b = 0;
  36.             double c = 0;

  37.             double x1, x2;

  38.             double.TryParse(textBox1.Text, out a);
  39.             double.TryParse(textBox2.Text, out b);
  40.             double.TryParse(textBox3.Text, out c);

  41.             if (b * b - 4 * a * c >= 0)
  42.             {
  43.                 x1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
  44.                 x2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);

  45.                 string x11 = x1.ToString();
  46.                 string x22 = x2.ToString();

  47.                 textBox4.Text = x11;
  48.                 textBox5.Text = x22;
  49.             }
  50.             else
  51.             {
  52.                 textBox4.Text = "根不存在呦~老铁";
  53.                 textBox5.Text = "根不存在呦~老铁";
  54.             }
  55.         }

  56.         private void textBox1_TextChanged(object sender, EventArgs e)
  57.         {
  58.             Yiyuanercifangcheng();//直接调用,非常简洁
  59.             textBox1.SelectAll();
  60.         }

  61.         private void textBox2_TextChanged(object sender, EventArgs e)
  62.         {
  63.             Yiyuanercifangcheng();
  64.             textBox2.SelectAll();
  65.         }

  66.         private void textBox3_TextChanged(object sender, EventArgs e)
  67.         {
  68.             Yiyuanercifangcheng();
  69.             textBox3.SelectAll();
  70.         }

  71.         private void Form1_Load(object sender, EventArgs e)
  72.         {
  73.             textBox1.Text = "1";
  74.             textBox2.Text = "2";
  75.             textBox3.Text = "1";
  76.             Yiyuanercifangcheng();
  77.         }
  78.     }
  79. }
复制代码
2.代码解释
计算代码部分
这段代码“Yiyuanercifangcheng()”,是整个计算过程,相当于一个没有返回值的函数,所以加了Void,可以给别的过程调用,前面是Public(不加应该也行)。
这个功能把计算过程固化了,优点很多,非常值得小白深入理解。
听过我第一个版本课程的知道,那个版本的课程,我并没有单独做一个计算代码,因此3个文本输入框内,每个框都要写一模一样的计算代码。这样做的后果是,一旦要修改,3个文本框都要改,比较麻烦而且容易犯错。
把计算过程封装起来可以减少代码行数、降低维护成本、代码也更有层次更清晰。
  1. public void Yiyuanercifangcheng()
  2.         {
  3.             double a = 0;//变量先设为0再从textBox里取值,非常使用,避免报错
  4.             double b = 0;
  5.             double c = 0;

  6.             double x1, x2;

  7.             double.TryParse(textBox1.Text, out a);
  8.             double.TryParse(textBox2.Text, out b);
  9.             double.TryParse(textBox3.Text, out c);

  10.             if (b * b - 4 * a * c >= 0)
  11.             {
  12.                 x1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
  13.                 x2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);

  14.                 string x11 = x1.ToString();
  15.                 string x22 = x2.ToString();

  16.                 textBox4.Text = x11;
  17.                 textBox5.Text = x22;
  18.             }
  19.             else
  20.             {
  21.                 textBox4.Text = "根不存在呦~老铁";
  22.                 textBox5.Text = "根不存在呦~老铁";
  23.             }
  24.         }
  25. 下面这一段代码是输入代码,将三个文本框里的数字输入程序。

  26.     double a = 0;//变量先设为0再从textBox里取值,非常使用,避免报错
  27.     double b = 0;
  28.     double c = 0;

  29.     double x1, x2;

  30.             double.TryParse(textBox1.Text, out a);
  31.             double.TryParse(textBox2.Text, out b);
  32.             double.TryParse(textBox3.Text, out c);
复制代码
知识点:TryParse函数
这个函数返回类型为bool类型,用以判断作为参数A(参数A必须为字符串)是否可以转换为前面的类型。如果可以转换,那么则将转化结果以out类型参数的方式返回。
这段代码里用到的TryParse函数,是被微软官方文档推荐的文本输入转换函数,优点是不容易报错。
调用之前先把变量的初始值都设置为0,然后用tryParse函数将textBox里的数字转换为变量a、b、c。
接下来的一元二次方程计算代码,计算没有特殊的地方,就是根据一元二次方程的求值公式,先判断是否存在根,然后在进行计算。
如果根不存在,输出的两个文本框里显示根不存在。
需要注意的是在计算结束之后,计算结果x1和x2也要进行一次类型转换,以便于在窗体展示。
  1.    if (b * b - 4 * a * c >= 0)
  2.             {
  3.                 x1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
  4.                 x2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);

  5.                 string x11 = x1.ToString();
  6.                 string x22 = x2.ToString();

  7.                 textBox4.Text = x11;
  8.                 textBox5.Text = x22;
  9.             }
  10.             else
  11.             {
  12.                 textBox4.Text = "根不存在呦~老铁";
  13.                 textBox5.Text = "根不存在呦~老铁";
  14.             }
复制代码
调用代码部分
每更新1个文本框里的内容,程序就会自动进行计算,3个输入文本框只要有变动,就会自动进行程序计算,只要在每个文本框过程中直接输入Yiyuanercifangcheng()就能完成,非常简洁。
如果不用调用代码的方式编程,就需要在每个文本框的过程中都输入计算代码,不仅费时费力,还很容易出错。
  1. private void textBox1_TextChanged(object sender, EventArgs e)
  2.         {
  3.             Yiyuanercifangcheng();//直接调用,非常简洁
  4.             textBox1.SelectAll();
  5.         }

  6. private void textBox2_TextChanged(object sender, EventArgs e)
  7.         {
  8.             Yiyuanercifangcheng();
  9.             textBox2.SelectAll();
  10.         }

  11. private void textBox3_TextChanged(object sender, EventArgs e)
  12.         {
  13.             Yiyuanercifangcheng();
  14.             textBox3.SelectAll();
  15.         }
复制代码
最后一段代码,是窗体生成时,自动输入三个变量计算的结果。主要为了展示效果。
  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             textBox1.Text = "1";
  4.             textBox2.Text = "2";
  5.             textBox3.Text = "1";
  6.             Yiyuanercifangcheng();
  7.         }
复制代码

本节课程结束,谢谢大家!


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Access零基础
access开发
access陪跑
Access即学即用
Access进销存

QQ|小黑屋|宇哥编程论坛 ( 京ICP备2022024677号-2|京公网安备11011202100561号 )

GMT+8, 2024-5-19 13:32 , Processed in 0.048315 second(s), 22 queries .

Powered by 宇哥

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表