码迷,mamicode.com
首页 > 其他好文 > 详细

多功能计算器

时间:2015-11-29 14:53:39      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

  1 using System.Windows.Forms;
  2 
  3 namespace 计算器__
  4 {
  5     public partial class Form1 : Form
  6     {
  7         private int t = 100;
  8         double a, b, c;
  9        double pi = Math.PI;
 10         int j = 0;
 11         int k = 0;
 12         int i = 0;
 13         string[] pre = new string[100];
 14         string[] later = new string[100];
 15         public void Ci(ref int i)
 16         {
 17             i++;
 18         }
 19         public void Ji(ref int i)
 20         {
 21             i--;
 22         }
 23         public void Oi(ref int i)
 24         {
 25             i = 0;
 26         }
 27         public void Ok(ref int k)
 28         {
 29             k = 0;
 30         }
 31         public void Exchange(string[] pre, string[] later, ref int k)
 32         {
 33             try
 34             {
 35                 Stack<string> stack = new Stack<string>();
 36                 stack.Clear();
 37                 int i = 0;
 38                 int j = 0;
 39                 stack.Push("#");
 40                 while (pre[i] != "#")
 41                 {
 42 
 43                     if (pre[i] == "(")
 44                     {
 45                         stack.Push(pre[i]);
 46                     }
 47                     else if (pre[i] == ")")
 48                     {
 49                         while (stack.Peek() != "(")
 50                         {
 51                             later[j++] = stack.Pop();
 52                             k++;
 53                         }
 54                         stack.Pop();
 55                     }
 56                     else if (Isoperator(pre[i]) > 0)
 57                     {
 58                         while (Isoperator(stack.Peek()) >= Isoperator(pre[i]))
 59                         {
 60                             later[j++] = stack.Pop();
 61                             k++;
 62 
 63                         }
 64                         stack.Push(pre[i]);
 65                     }
 66                     else
 67                     {
 68                         later[j++] = pre[i];
 69                         k++;
 70                     }
 71 
 72                     i++;
 73                 }
 74                 while (stack.Peek() != "#")
 75                 {
 76                     later[j++] = stack.Pop();
 77                     k++;
 78                 }
 79             }
 80             catch
 81             {
 82                 MessageBox.Show("有错误,请重新输入!", "错误信息");
 83             }
 84 
 85         }
 86         public int Isoperator(string op)
 87         {
 88             switch (op)
 89             {
 90                 case "+": return 1;
 91                 case "-": return 1;
 92                 case "*": return 2;
 93                 case "/": return 2;
 94                 case "(": return 0;
 95                 case "#": return -1;
 96                 default: return -1;
 97             }
 98         }
 99         public double Calculate(string[] later)
100         {
101             try
102             {
103                 Stack<double> stack = new Stack<double>();
104                 stack.Clear();
105                 stack.Push(0);
106                 int i = 0;
107                 double x1;
108                 double x2;
109                 while (i < k)
110                 {
111                     if (later[i] == "+")
112                     {
113                         x2 = stack.Pop();
114                         x1 = stack.Pop();
115                         stack.Push(x1 + x2);
116                         i++;
117                     }
118                     else if (later[i] == "-")
119                     {
120                         x2 = stack.Pop();
121                         x1 = stack.Pop();
122                         stack.Push(x1 - x2);
123                         i++;
124                     }
125                     else if (later[i] == "*")
126                     {
127                         x2 = stack.Pop();
128                         x1 = stack.Pop();
129                         stack.Push(x1 * x2);
130                         i++;
131                     }
132                     else if (later[i] == "/")
133                     {
134                         x2 = stack.Pop();
135                         x1 = stack.Pop();
136                         stack.Push(x1 / x2);
137                         i++;
138                     }
139                     else
140                     {
141                         stack.Push(double.Parse(later[i]));
142                         i++;
143                     }
144 
145                 }
146                 return stack.Peek();
147             }
148             catch
149             {
150                 MessageBox.Show("有错误,请重新输入!", "错误信息");
151                 return 0;
152             }
153 
154         }
155         public double kxfh() //特殊符号
156         {
157             switch (j)
158             {
159                 case 1: c = Math.Cos(a * pi / 180);
160                     break;
161                 case 2:
162                     if (((a / 90) == (int)(a / 90)))
163                     {
164                         if (((a / 90) % 2) != 0)
165                         {
166                             MessageBox.Show("输入的角度不正确", "错误信息");
167                         }
168                         else
169                         { c = Math.Tan(a * pi / 180); }
170 
171                     }
172                     else
173                     {
174                         c = Math.Tan(a * pi / 180);
175                     }
176                     break;
177                 case 3: c = Math.Sin(a * pi / 180);
178                     break;
179                 case 4: c = 1 / a;
180                     break;
181                 case 5: c = Math.Log(a);
182                     break;
183                 case 6: c = System.Math.Sqrt(a);
184                     break;
185                 case 7:
186                     double i = 1;
187                     if (a == 0)
188                     {
189                         c = 1;
190                     }
191                     else if ((int)a != a)
192                     {
193                         MessageBox.Show("输入的数不能是小数或者负数", "错误信息");
194                     }
195                     else
196                     {
197                         for (; a != 1; a--)
198                         {
199                             i = i * a;
200                         }
201 
202                         c = i;
203                     }
204                     break;
205                 case 8: c = a * a;
206                     break;
207                 case 9: c = Math.Log10(a);
208                     break;
209                 case 10: c = Math.Pow(b, a);
210                     break;
211             }
212             return c;
213         }
214         private void jcfh(string f)//基础符号
215         {
216             if (textBox2.Text == "")
217             {
218                 pre[i] = f;
219                 Ci(ref i);
220                 textBox1.Text += f;
221             }
222             else
223             {
224                 if (j > 0)
225                 {
226                     a = Convert.ToDouble(textBox2.Text);
227                     kxfh();
228                     pre[i] = Convert.ToString(c);
229                     Ci(ref i);
230                     j = 0;
231                     pre[i] = f;
232                     Ci(ref i);
233                     textBox2.Text = "";
234                     textBox1.Text += textBox2.Text;
235                     textBox1.Text += f;
236                 }
237                 else
238                 {
239                     pre[i] = textBox2.Text;
240                     Ci(ref i);
241                     pre[i] = f;
242                     Ci(ref i);
243                     textBox2.Text = "";
244                     textBox1.Text += textBox2.Text;
245                     textBox1.Text += f;
246 
247                 }
248             }
249         }
250         public void clear()
251         {
252             if (textBox3.Text != "")
253             {
254                 a = 0;
255                 b = 0;
256                 c = 0;
257                 j = 0;
258                 textBox2.Text = "";
259                 textBox1.Text = "";
260                 textBox3.Text = "";
261                 Array.Clear(pre, 0, pre.Length);
262                 Array.Clear(later, 0, later.Length);
263                 Oi(ref i);
264                 Ok(ref k);
265             }
266         }
267         public Form1()
268         {
269             InitializeComponent();
270         }
271 
272         private void timer1_Tick(object sender, EventArgs e)
273         {
274             if (t <= 0)
275             {
276                 timer1.Enabled = false;
277                 textBox4.Enabled = false;
278                 MessageBox.Show("时间到!!!");
279                 textBox4.Enabled = false;
280                 //  txtTime.Enblaed = false;
281                 //Form2 frm2 = new Form2();
282                 //frm2.ShowDialog();
283             }
284             t = t - 1;
285             label7.Text = t.ToString();
286            //this.label1.Text = "当前时间是: " + DateTime.Now.Hour.ToString() + ":"
287            //     + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString();
288         }
289 
290         private void button3_Click(object sender, EventArgs e)
291         {
292               clear();
293             textBox2.Text += "3";
294             textBox1.Text += "3";
295         }
296 
297         private void Form1_Load(object sender, EventArgs e)
298         {
299            
300             for (double d = 0.01; d < 1; d += 0.04)
301             {
302                 System.Threading.Thread.Sleep(1);
303                 Application.DoEvents();
304                 this.Opacity = d;
305                 this.Refresh();
306             }
307         }
308 
309         private void button2_Click(object sender, EventArgs e)
310         {
311              clear();
312             textBox2.Text += "2";
313             textBox1.Text += "2";
314         }
315 
316         private void button4_Click(object sender, EventArgs e)
317         {
318               clear();
319             textBox2.Text += "4";
320             textBox1.Text += "4";
321         }
322 
323         private void button5_Click(object sender, EventArgs e)
324         {
325               clear();
326             textBox2.Text += "5";
327             textBox1.Text += "5";
328         }
329 
330         private void button6_Click(object sender, EventArgs e)
331         {
332               clear();
333             textBox2.Text += "6";
334             textBox1.Text += "6";
335         }
336 
337         private void button7_Click(object sender, EventArgs e)
338         {
339               clear();
340             textBox2.Text += "7";
341             textBox1.Text += "7";
342         }
343 
344         private void button8_Click(object sender, EventArgs e)
345         {
346               clear();
347             textBox2.Text += "8";
348             textBox1.Text += "8";
349         }
350 
351         private void button9_Click(object sender, EventArgs e)
352         {
353               clear();
354             textBox2.Text += "9";
355             textBox1.Text += "9";
356         }
357 
358         private void button10_Click(object sender, EventArgs e)
359         {
360               clear();
361             textBox2.Text += "0";
362             textBox1.Text += "0";
363         }
364 
365         private void button11_Click(object sender, EventArgs e)//.
366         {
367             if (textBox2.Text.IndexOf(".") < 0)
368             {
369                 textBox2.Text += ".";
370                 textBox1.Text += ".";
371             }
372         }
373 
374         private void button1_Click(object sender, EventArgs e)
375         {
376               clear();
377             textBox2.Text += "1";
378             textBox1.Text += "1";
379         }
380 
381         private void button12_Click(object sender, EventArgs e)//=
382         {
383           
384             
385            
386             int o = 0, p = 0;
387             foreach (string g in pre)
388             {
389                 if (g == "(")
390                 {
391                     o++;
392                 }
393                 if (g == ")")
394                 {
395                     p++;
396                 }
397 
398             }
399             if (o != p)
400             {
401                 MessageBox.Show("输1入的括号不匹配", "错误信息");
402             }
403             else
404             {
405                 if (textBox2.Text == "")
406                 {
407                     pre[i] = "#";
408                     Exchange(pre, later, ref k);
409                     textBox3.Text = Convert.ToString(Calculate(later));
410                 }
411                 else
412                 {
413                     if (j > 0)
414                     {
415                         a = Convert.ToDouble(textBox2.Text);
416                         pre[i] = Convert.ToString(kxfh());
417                         Ci(ref i);
418                         j = 0;
419                     }
420                     else
421                     {
422                         pre[i] = textBox2.Text;
423                         Ci(ref i);
424                     }
425                     pre[i] = "#";
426                     Exchange(pre, later, ref k);
427                     textBox3.Text = Convert.ToString(Calculate(later));
428 
429                 }
430             }
431            
432             textBox5.Text += textBox1.Text + "=" + Environment.NewLine;
433             textBox6.Text += textBox3.Text + Environment.NewLine;
434         }
435         private void RandomNum()
436         {
437             Random ran = new Random();
438            
439         }
440 
441         private void button13_Click(object sender, EventArgs e)
442         {
443            
444             jcfh("+");
445           
446         }
447 
448         private void button14_Click(object sender, EventArgs e)
449         {
450           
451             jcfh("-");
452            
453         }
454 
455         private void button15_Click(object sender, EventArgs e)
456         {
457           
458             jcfh("*");
459           
460         }
461 
462         private void button16_Click(object sender, EventArgs e)
463         {
464             
465             jcfh("/");
466            
467         }
468 
469         private void button18_Click(object sender, EventArgs e)
470         {
471             
472             pre[i] = "(";
473             Ci(ref i);
474             textBox1.Text += "(";
475            
476         }
477 
478         private void button19_Click(object sender, EventArgs e)
479         {
480          
481             pre[i] = textBox2.Text;
482             Ci(ref i);
483             pre[i] = ")";
484             Ci(ref i);
485             textBox2.Text = "";
486             textBox1.Text += textBox2.Text;
487             textBox1.Text += ")";
488             
489         }
490 
491         private void button30_Click(object sender, EventArgs e)
492         {
493           Application.Exit();
494             //Form2 frm2 = new Form2();
495             //frm2.ShowDialog();
496         }
497 
498         private void button32_Click(object sender, EventArgs e)
499         {
500             if (textBox1.Text == "")
501             {
502 
503                 MessageBox.Show("算式为空,不能退格", "错误信息");
504             }
505             else if (textBox3.Text != "")
506             {
507                 MessageBox.Show("已经算出结果,不能退格", "错误信息");
508 
509             }
510             else
511             {
512                 textBox1.Text = "";
513                 if (textBox2.Text == "")
514                 {
515                     int l = 0;
516                     foreach (string h in pre)
517                     {
518                         if (l < i - 1)
519                             textBox1.Text += h;
520                         l++;
521                     }
522                     pre[i - 1] = "";
523                     Ji(ref i);
524                 }
525                 else
526                 {
527                     foreach (string h in pre)
528                         textBox1.Text += h;
529                     textBox2.Text = "";
530 
531                 }
532             }
533         }
534 
535         private void textBox2_TextChanged(object sender, EventArgs e)
536         {
537 
538         }
539 
540         private void label3_Click(object sender, EventArgs e)
541         {
542 
543         }
544 
545         private void button21_Click(object sender, EventArgs e)
546         {
547 
548             textBox1.Text  = "";
549             textBox2.Text = "";
550             textBox3.Text = ""; 
551             textBox5.Text = "";
552             textBox6.Text = "";
553            
554         }
555 
556         private void textBox6_TextChanged(object sender, EventArgs e)
557         {
558 
559         }
560 
561         private void button20_Click(object sender, EventArgs e)
562         {
563             try
564             {
565                 t = int.Parse(textBox4.Text);
566                 if (t <= 0)
567                 {
568                     MessageBox.Show("时间不能为负数");
569                     return;
570                 }
571 
572                 textBox4.Enabled = false;
573             }
574             catch (Exception)
575             {
576                 MessageBox.Show("请输入正确的时间");
577                 return;
578 
579             }
580 
581 
582             timer1.Enabled = true;
583             timer1.Interval = 1000;
584             timer1.Start();
585             RandomNum();
586         }

技术分享

技术分享

技术分享

计应142 王斌

多功能计算器

标签:

原文地址:http://www.cnblogs.com/wb-bsxq/p/5004666.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!