如何使用Unity制作一个简易的计算器
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章给大家分享的是有关如何使用Unity制作一个简易的计算器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言Hello,又见面了,今天分享如何使用Unity制作计
千家信息网最后更新 2025年01月18日如何使用Unity制作一个简易的计算器
这篇文章给大家分享的是有关如何使用Unity制作一个简易的计算器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、前言
Hello,又见面了,今天分享如何使用Unity制作计算器,难度中等,可以用来学习,或者当成其他项目的小组件导入。
当然,也可以导出来,发布到网页端,来做一个嵌入式工具也可以。
二、效果图及源工程
效果图:
源工程
三、实现
1.界面搭建
所有的按钮摆放到Background下面。
2.代码实现
首先找到所有的按钮,添加到事件:
//结果显示 TextComputeProcess = GameObject.Find("Canvas/Background/Image/TextComputeProcess").GetComponent(); TextComputeResult = GameObject.Find("Canvas/Background/Image/TextComputeResult").GetComponent (); TextComputeResult.text = "0"; RUNSTATE = 0; //操作 BtnReset = GameObject.Find("Canvas/Background/重置").GetComponent
按钮操作:
//操作点击处理 private void OperationDispose(string operation) { switch (operation) { case "+": if (RUNSTATE == 0) TextComputeProcess.text = "0 + "; else { TextComputeProcess.text = TextComputeResult.text + " + "; m_operation = "+"; RUNSTATE = 2; } break; case "-": if (RUNSTATE == 0) TextComputeProcess.text = "0 - "; else { TextComputeProcess.text = TextComputeResult.text + " - "; m_operation = "-"; RUNSTATE = 2; } break; case "*": if (RUNSTATE == 0) TextComputeProcess.text = "0 * "; else { TextComputeProcess.text = TextComputeResult.text + " * "; m_operation = "*"; RUNSTATE = 2; } break; case "/": if (RUNSTATE == 0) TextComputeProcess.text = "0 / "; else { TextComputeProcess.text = TextComputeResult.text + " / "; m_operation = "/"; RUNSTATE = 2; } break; case "=": if (RUNSTATE == 0) TextComputeProcess.text = "0 = "; else { if (RUNSTATE == 3) { double result; switch (m_operation) { case "+": result = double.Parse(calculateString) + double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " + " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; case "-": result = double.Parse(calculateString) - double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " - " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; case "*": result = double.Parse(calculateString) * double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " * " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; case "/": result = double.Parse(calculateString) / double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " / " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; default: break; } } else { TextComputeProcess.text = TextComputeResult.text + " = "; } } break; case "CE": TextComputeProcess.text = ""; TextComputeResult.text = "0"; RUNSTATE = 0; break; case "Del": if (RUNSTATE == 0) return; else { if (TextComputeResult.text.Length == 1) { TextComputeResult.text = "0"; } else { TextComputeResult.text = TextComputeResult.text.Remove(TextComputeResult.text.Length - 1, 1); } } break; default: break; } }
数字点击处理:
//数字点击处理 private void NumDispose(string num) { switch (num) { case ".": if (RUNSTATE == 0) TextComputeResult.text = "0"; else TextComputeResult.text += num; break; case "-": if (RUNSTATE == 0) TextComputeResult.text = "0"; else { if (RUNSTATE == 1) { if (pmState) { TextComputeResult.text = TextComputeResult.text.Remove(0, 1); pmState = false; } else { TextComputeResult.text = num + TextComputeResult.text; pmState = true; } } else if (RUNSTATE == 2) { pmState = false; } else if (RUNSTATE == 3) { if (pmState) { TextComputeResult.text = TextComputeResult.text.Remove(0, 1); pmState = false; } else { TextComputeResult.text = num + TextComputeResult.text; pmState = true; } } else if (RUNSTATE == 4) { pmState = false; OperationDispose("CE"); } } break; default: if (RUNSTATE == 0) { TextComputeResult.text = num; RUNSTATE = 1; } else if (RUNSTATE == 1) { pmState = false; TextComputeResult.text += num; } else if (RUNSTATE == 2) { calculateString = TextComputeResult.text; TextComputeResult.text = ""; TextComputeResult.text += num; RUNSTATE = 3; } else if (RUNSTATE == 3) { TextComputeResult.text += num; } else if (RUNSTATE == 4) { OperationDispose("CE"); TextComputeResult.text = num; RUNSTATE = 1; } break; } }
完整代码:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class CalculatorControl : MonoBehaviour{ private Text TextComputeProcess;//计算过程 private Text TextComputeResult;//计算结果 private Button BtnReset; private Button BtnDelete; private Button BtnAdd; private Button BtnSub; private Button BtnMul; private Button BtnDiv; private Button BtnEqual; private Button Btn0, Btn1, Btn2, Btn3, Btn4, Btn5, Btn6, Btn7, Btn8, Btn9; private Button BtnPoint, BtnPm; private string calculateString = "";//计算数 private string m_operation = "";//操作数 private bool pmState = false;//正负状态 private int RUNSTATE = 0;//0 默认 1 输入数字 2 输入操作符 3 输入操作符再输入数字 4 计算结果后 void Start() { //结果显示 TextComputeProcess = GameObject.Find("Canvas/Background/Image/TextComputeProcess").GetComponent(); TextComputeResult = GameObject.Find("Canvas/Background/Image/TextComputeResult").GetComponent (); TextComputeResult.text = "0"; RUNSTATE = 0; //操作 BtnReset = GameObject.Find("Canvas/Background/重置").GetComponent (); BtnReset.onClick.AddListener(() => OperationDispose("CE")); BtnDelete = GameObject.Find("Canvas/Background/删除").GetComponent (); BtnDelete.onClick.AddListener(() => OperationDispose("Del")); //加减乘除 BtnAdd = GameObject.Find("Canvas/Background/加").GetComponent (); BtnAdd.onClick.AddListener(() => OperationDispose("+")); BtnSub = GameObject.Find("Canvas/Background/减").GetComponent (); BtnSub.onClick.AddListener(() => OperationDispose("-")); BtnMul = GameObject.Find("Canvas/Background/乘").GetComponent (); BtnMul.onClick.AddListener(() => OperationDispose("*")); BtnDiv = GameObject.Find("Canvas/Background/除").GetComponent (); BtnDiv.onClick.AddListener(() => OperationDispose("/")); BtnEqual = GameObject.Find("Canvas/Background/等于").GetComponent (); BtnEqual.onClick.AddListener(() => OperationDispose("=")); //数字 Btn0 = GameObject.Find("Canvas/Background/0").GetComponent (); Btn0.onClick.AddListener(() => NumDispose("0")); Btn1 = GameObject.Find("Canvas/Background/1").GetComponent (); Btn1.onClick.AddListener(() => NumDispose("1")); Btn2 = GameObject.Find("Canvas/Background/2").GetComponent (); Btn2.onClick.AddListener(() => NumDispose("2")); Btn3 = GameObject.Find("Canvas/Background/3").GetComponent (); Btn3.onClick.AddListener(() => NumDispose("3")); Btn4 = GameObject.Find("Canvas/Background/4").GetComponent (); Btn4.onClick.AddListener(() => NumDispose("4")); Btn5 = GameObject.Find("Canvas/Background/5").GetComponent (); Btn5.onClick.AddListener(() => NumDispose("5")); Btn6 = GameObject.Find("Canvas/Background/6").GetComponent (); Btn6.onClick.AddListener(() => NumDispose("6")); Btn7 = GameObject.Find("Canvas/Background/7").GetComponent (); Btn7.onClick.AddListener(() => NumDispose("7")); Btn8 = GameObject.Find("Canvas/Background/8").GetComponent (); Btn8.onClick.AddListener(() => NumDispose("8")); Btn9 = GameObject.Find("Canvas/Background/9").GetComponent (); Btn9.onClick.AddListener(() => NumDispose("9")); BtnPoint = GameObject.Find("Canvas/Background/点").GetComponent (); BtnPoint.onClick.AddListener(() => NumDispose(".")); BtnPm = GameObject.Find("Canvas/Background/正负").GetComponent (); BtnPm.onClick.AddListener(() => NumDispose("-")); } //操作点击处理 private void OperationDispose(string operation) { switch (operation) { case "+": if (RUNSTATE == 0) TextComputeProcess.text = "0 + "; else { TextComputeProcess.text = TextComputeResult.text + " + "; m_operation = "+"; RUNSTATE = 2; } break; case "-": if (RUNSTATE == 0) TextComputeProcess.text = "0 - "; else { TextComputeProcess.text = TextComputeResult.text + " - "; m_operation = "-"; RUNSTATE = 2; } break; case "*": if (RUNSTATE == 0) TextComputeProcess.text = "0 * "; else { TextComputeProcess.text = TextComputeResult.text + " * "; m_operation = "*"; RUNSTATE = 2; } break; case "/": if (RUNSTATE == 0) TextComputeProcess.text = "0 / "; else { TextComputeProcess.text = TextComputeResult.text + " / "; m_operation = "/"; RUNSTATE = 2; } break; case "=": if (RUNSTATE == 0) TextComputeProcess.text = "0 = "; else { if (RUNSTATE == 3) { double result; switch (m_operation) { case "+": result = double.Parse(calculateString) + double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " + " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; case "-": result = double.Parse(calculateString) - double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " - " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; case "*": result = double.Parse(calculateString) * double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " * " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; case "/": result = double.Parse(calculateString) / double.Parse(TextComputeResult.text); TextComputeProcess.text = calculateString + " / " + TextComputeResult.text + " = "; TextComputeResult.text = result.ToString(); RUNSTATE = 4; break; default: break; } } else { TextComputeProcess.text = TextComputeResult.text + " = "; } } break; case "CE": TextComputeProcess.text = ""; TextComputeResult.text = "0"; RUNSTATE = 0; break; case "Del": if (RUNSTATE == 0) return; else { if (TextComputeResult.text.Length == 1) { TextComputeResult.text = "0"; } else { TextComputeResult.text = TextComputeResult.text.Remove(TextComputeResult.text.Length - 1, 1); } } break; default: break; } } //数字点击处理 private void NumDispose(string num) { switch (num) { case ".": if (RUNSTATE == 0) TextComputeResult.text = "0"; else TextComputeResult.text += num; break; case "-": if (RUNSTATE == 0) TextComputeResult.text = "0"; else { if (RUNSTATE == 1) { if (pmState) { TextComputeResult.text = TextComputeResult.text.Remove(0, 1); pmState = false; } else { TextComputeResult.text = num + TextComputeResult.text; pmState = true; } } else if (RUNSTATE == 2) { pmState = false; } else if (RUNSTATE == 3) { if (pmState) { TextComputeResult.text = TextComputeResult.text.Remove(0, 1); pmState = false; } else { TextComputeResult.text = num + TextComputeResult.text; pmState = true; } } else if (RUNSTATE == 4) { pmState = false; OperationDispose("CE"); } } break; default: if (RUNSTATE == 0) { TextComputeResult.text = num; RUNSTATE = 1; } else if (RUNSTATE == 1) { pmState = false; TextComputeResult.text += num; } else if (RUNSTATE == 2) { calculateString = TextComputeResult.text; TextComputeResult.text = ""; TextComputeResult.text += num; RUNSTATE = 3; } else if (RUNSTATE == 3) { TextComputeResult.text += num; } else if (RUNSTATE == 4) { OperationDispose("CE"); TextComputeResult.text = num; RUNSTATE = 1; } break; } }}
效果图如下:
四、后记
完整代码278行,还是依旧那么简练,整体代码难度不大,主要是状态之间的切换:
1、输入数字的状态
2、输入操作符状态
3、输入操作符后再输入数字状态
4、计算结果后状态
理解这些状态后,代码就容易理解了。
最后,拓展一下,将其他大佬写的代码给大家看一下,大家如果觉得上面的代码太简单,可以看一下:
代码使用OnGUI搭建界面,直接拖到任意对象上就可以看到效果了:
using UnityEngine;using System.Text.RegularExpressions;using System;public class Calculator2 : MonoBehaviour{ public static bool IsNumeric(string value) { return Regex.IsMatch(value, @"^[+-]?\d*[.]?\d*$"); } public string result = "";//用来显示结果 public static string str1 = "";//第一个操作数 public static bool haveDot = false;//第二个操作数 public static bool isCaclutate = false; void OnGUI() { //对数字进行处理 if (GUI.Button(new Rect(100, 100, 100, 60), "CE")) { result = ""; str1 = ""; haveDot = false; } if (GUI.Button(new Rect(210, 100, 100, 60), "×") && str1.Substring(str1.Length - 1, 1) != "-" && str1.Substring(str1.Length - 1, 1) != "+" && str1.Substring(str1.Length - 1, 1) != ".") { if (IsNumeric(str1.Substring(str1.Length - 1, 1))) { Debug.Log(str1.Substring(str1.Length - 1, 1)); str1 += "*"; haveDot = false; isCaclutate = false; } result = str1; } if (GUI.Button(new Rect(320, 100, 100, 60), "÷") && str1.Substring(str1.Length - 1, 1) != "-" && str1.Substring(str1.Length - 1, 1) != "+" && str1.Substring(str1.Length - 1, 1) != ".") { if (IsNumeric(str1.Substring(str1.Length - 1, 1))) { str1 += "/"; haveDot = false; isCaclutate = false; } result = str1; } if (GUI.Button(new Rect(430, 100, 100, 60), "←")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; } else if (result.Length != 0) { str1 = str1.Substring(0, str1.Length - 1); } result = str1; } if (GUI.Button(new Rect(100, 170, 100, 60), "1")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "1"; result = str1; } if (GUI.Button(new Rect(210, 170, 100, 60), "2")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "2"; result = str1; } if (GUI.Button(new Rect(320, 170, 100, 60), "3")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "3"; result = str1; } if (GUI.Button(new Rect(430, 170, 100, 60), "-")) { if (IsNumeric(str1.Substring(str1.Length - 1, 1)) && str1.Substring(str1.Length - 1, 1) != "-" && str1.Substring(str1.Length - 1, 1) != "+" && str1.Substring(str1.Length - 1, 1) != ".") { str1 += "-"; haveDot = false; isCaclutate = false; } result = str1; } if (GUI.Button(new Rect(100, 240, 100, 60), "4")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "4"; result = str1; } if (GUI.Button(new Rect(210, 240, 100, 60), "5")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "5"; result = str1; } if (GUI.Button(new Rect(320, 240, 100, 60), "6")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "6"; result = str1; } if (GUI.Button(new Rect(430, 240, 100, 60), "+") && str1.Substring(str1.Length - 1, 1) != "+" && str1.Substring(str1.Length - 1, 1) != "-" && str1.Substring(str1.Length - 1, 1) != ".") { if (IsNumeric(str1.Substring(str1.Length - 1, 1))) { str1 += "+"; haveDot = false; isCaclutate = false; } result = str1; } if (GUI.Button(new Rect(100, 310, 100, 60), "7")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "7"; result = str1; } if (GUI.Button(new Rect(210, 310, 100, 60), "8")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "8"; result = str1; } if (GUI.Button(new Rect(320, 310, 100, 60), "9")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "9"; result = str1; } if (GUI.Button(new Rect(430, 310, 100, 130), "=")) { var tmp = Evaluator.Eval(result); Debug.Log(tmp.ToString()); result = tmp.ToString(); str1 = result; isCaclutate = true; if (result.Contains(".")) { haveDot = true; } } if (GUI.Button(new Rect(100, 380, 210, 60), "0")) { if (isCaclutate == true) { str1 = ""; isCaclutate = false; haveDot = false; } str1 += "0"; result = str1; } if (GUI.Button(new Rect(320, 380, 100, 60), ".")) { if (isCaclutate == true) { str1 = "0."; isCaclutate = false; } if (IsNumeric(str1.Substring(str1.Length - 1, 1)) && str1.Substring(str1.Length - 1, 1) != "." && haveDot == false) { Debug.Log(str1.Substring(str1.Length - 1, 1)); str1 += "."; haveDot = true; isCaclutate = false; } result = str1; } GUI.TextArea(new Rect(100, 20, 430, 60), result); } /**/ ////// 动态求值 /// public class Evaluator { /**/ ////// 计算结果,如果表达式出错则抛出异常 /// /// 表达式,如"1+2+3+4" ///结果 public static object Eval(string statement) { if (statement.Trim() != string.Empty) { Evaluator evaluator = new Evaluator(); return evaluator.GetFormulaResult(statement); } else { return null; } } private object GetFormulaResult(string s) { if (s == "") { return null; } string S = BuildingRPN(s); string tmp = ""; System.Collections.Stack sk = new System.Collections.Stack(); char c = ' '; System.Text.StringBuilder Operand = new System.Text.StringBuilder(); double x, y; for (int i = 0; i < S.Length; i++) { c = S[i]; //added c==',' for germany culture if (char.IsDigit(c) || c == '.' || c == ',') { //数据值收集. Operand.Append(c); } else if (c == ' ' && Operand.Length > 0) { #region 运算数转换 try { tmp = Operand.ToString(); if (tmp.StartsWith("-"))//负数的转换一定要小心...它不被直接支持. { //现在我的算法里这个分支可能永远不会被执行. sk.Push(-((double)Convert.ToDouble(tmp.Substring(1, tmp.Length - 1)))); } else { sk.Push(Convert.ToDouble(tmp)); } } catch { return null; // } Operand = new System.Text.StringBuilder(); #endregion } else if (c == '+'//运算符处理.双目运算处理. || c == '-' || c == '*' || c == '/' || c == '%' || c == '^') { #region 双目运算 if (sk.Count > 0)/*如果输入的表达式根本没有包含运算符.或是根本就是空串.这里的逻辑就有意义了.*/ { y = (double)sk.Pop(); } else { sk.Push(0); break; } if (sk.Count > 0) x = (double)sk.Pop(); else { sk.Push(y); break; } switch (c) { case '+': sk.Push(x + y); break; case '-': sk.Push(x - y); break; case '*': if (y == 0) { sk.Push(x * 1); } else { sk.Push(x * y); } break; case '/': if (y == 0) { sk.Push(x / 0); } else { sk.Push(x / y); } break; case '%': sk.Push(x % y); break; case '^':// if (x > 0)// { //我原本还想,如果被计算的数是负数,又要开真分数次方时如何处理的问题.后来我想还是算了吧. sk.Push(System.Math.Pow(x, y)); // } // else// { // double t = y; // string ts = ""; // t = 1 / (2 * t); // ts = t.ToString(); // if (ts.ToUpper().LastIndexOf('E') > 0)// { // ; // } // } break; } #endregion } else if (c == '!')//单目取反. ) { sk.Push(-((double)sk.Pop())); } } if (sk.Count > 1) { return null;//; } if (sk.Count == 0) { return null;//; } return sk.Pop(); } /**/ ////// /// private string BuildingRPN(string s) { System.Text.StringBuilder sb = new System.Text.StringBuilder(s); System.Collections.Stack sk = new System.Collections.Stack(); System.Text.StringBuilder re = new System.Text.StringBuilder(); char c = ' '; //sb.Replace( " ","" ); //一开始,我只去掉了空格.后来我不想不支持函数和常量能滤掉的全OUT掉. for (int i = 0; i < sb.Length; i++) { c = sb[i]; //added c==',' for german culture if (char.IsDigit(c) || c == ',')//数字当然要了. re.Append(c); //if( char.IsWhiteSpace( c )|| char.IsLetter(c);//如果是空白,那么不要.现在字母也不要. //continue; switch (c)//如果是其它字符...列出的要,没有列出的不要. { case '+': case '-': case '*': case '/': case '%': case '^': case '!': case '(': case ')': case '.': re.Append(c); break; default: continue; } } sb = new System.Text.StringBuilder(re.ToString()); #region 对负号进行预转义处理.负号变单目运算符求反. for (int i = 0; i < sb.Length - 1; i++) if (sb[i] == '-' && (i == 0 || sb[i - 1] == '(')) sb[i] = '!'; //字符转义. #endregion #region 将中缀表达式变为后缀表达式. re = new System.Text.StringBuilder(); for (int i = 0; i < sb.Length; i++) { if (char.IsDigit(sb[i]) || sb[i] == '.')//如果是数值. { re.Append(sb[i]); //加入后缀式 } else if (sb[i] == '+' || sb[i] == '-' || sb[i] == '*' || sb[i] == '/' || sb[i] == '%' || sb[i] == '^' || sb[i] == '!')//. { #region 运算符处理 while (sk.Count > 0) //栈不为空时 { c = (char)sk.Pop(); //将栈中的操作符弹出. if (c == '(') //如果发现左括号.停. { sk.Push(c); //将弹出的左括号压回.因为还有右括号要和它匹配. break; //中断. } else { if (Power(c) < Power(sb[i]))//如果优先级比上次的高,则压栈. { sk.Push(c); break; } else { re.Append(' '); re.Append(c); } //如果不是左括号,那么将操作符加入后缀式中. } } sk.Push(sb[i]); //把新操作符入栈. re.Append(' '); #endregion } else if (sb[i] == '(')//基本优先级提升 { sk.Push('('); re.Append(' '); } else if (sb[i] == ')')//基本优先级下调 { while (sk.Count > 0) //栈不为空时 { c = (char)sk.Pop(); //pop Operator if (c != '(') { re.Append(' '); re.Append(c); //加入空格主要是为了防止不相干的数据相临产生解析错误. re.Append(' '); } else break; } } else re.Append(sb[i]); } while (sk.Count > 0)//这是最后一个弹栈啦. { re.Append(' '); re.Append(sk.Pop()); } #endregion re.Append(' '); return FormatSpace(re.ToString()); //在这里进行一次表达式格式化.这里就是后缀式了. } ////// 优先级别测试函数. /// /// ///private static int Power(char opr) { switch (opr) { case '+': case '-': return 1; case '*': case '/': return 2; case '%': case '^': case '!': return 3; default: return 0; } } /// /// 规范化逆波兰表达式. /// /// ///private static string FormatSpace(string s) { System.Text.StringBuilder ret = new System.Text.StringBuilder(); for (int i = 0; i < s.Length; i++) { if (!(s.Length > i + 1 && s[i] == ' ' && s[i + 1] == ' ')) ret.Append(s[i]); else ret.Append(s[i]); } return ret.ToString(); //.Replace( '!','-' ); } }}
感谢各位的阅读!关于"如何使用Unity制作一个简易的计算器"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
数字
处理
输入
代码
结果
状态
表达式
运算
操作符
效果
计算器
制作
括号
按钮
操作数
效果图
正负
运算符
简易
加减乘除
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
休闲游戏下载软件开发
菏泽平台软件开发哪家好
杭州九旺网络技术有限公司图片
wmn网络技术是什么
信息网络安全和保密培训会议
谷歌服务器电脑可以用吗
网络技术工程师头像
软件定义网络技术
普陀区本地网络技术采购信息
学校网络安全方案设计
pkpm增加数据库
电站网络安全如何防护
数据库作业语句
软件开发分那几个阶段
数据库新建命令
思科网络技术哪里学
跟网络安全有关的小品
南京机电软件开发服务电话
ibm的数据库怎么使用
软件开发工资高还是建筑工程
weblogic服务器生命周期
软件开发逻辑会记录在哪里
数据库导入信息显示文本过长
延吉软件开发公司
数据库安全近期报道
赣州信捷网络技术有限公司
数据库技术在行业上的应用
产品软件开发计划
网络安全技术应用规范
杭州格爱网络技术有限公司