| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1260 人关注过本帖, 1 人收藏
标题:分享自己学习C#以来写的第一个程序--控制台计算器
取消只看楼主 加入收藏
ixcBoy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2013-4-5
结帖率:0
收藏(1)
已结贴  问题点数:1 回复次数:2 
分享自己学习C#以来写的第一个程序--控制台计算器
希望大家提提意见怎样简化这一块代码:
            switch (operactor)
            {
                case Operactor.add:
                    doCounting(numberArray,add);
                    break;
                case Operactor.minus:
                    doCounting(numberArray,minus);
                    break;
                case Operactor.multiply:
                    doCounting(numberArray,multiply);
                    break;
                case Operactor.dividedBy:
                    doCounting(numberArray,divideBy);
                    break;
                case Operactor.pow:
                    doCounting(numberArray,pow);
                    break;
                case Operactor.sqrt:
                    doCounting(numberArray,sqrt);
                    break;
                default:
                    break;
            }


以下是程序源码
程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleCount
{
    class Program
    {
        delegate void Count (params decimal[] num);
        static void doCounting(decimal[] num, Count count)
        {
            count(num);
        }
        static void Main(string[] args)
        {
            if (args.Length >= 1 && (args[0].ToLower().Equals("--help") | args[0].ToLower().Equals("help")))
                PrintHelp();

            if (args.Length < 2)
            {
                Console.WriteLine("没有收到系统传来的有效参数");
                Environment.Exit(1);
            }

            Operactor operactor = 0;

            try
            {
                operactor = (Operactor)Enum.Parse(typeof(Operactor), args[0], true);
            }
            catch (ArgumentException)
            {
                Console.WriteLine(args[0] + "为无效运算符");
                Environment.Exit(1);
            }

            decimal[] numberArray = new decimal[args.Length - 1];

            int i = 1;
            while (i < args.Length)
            {
                numberArray[i - 1] = convertToDecimal(args[i]);
                i++;
            }

            switch (operactor)
            {
                case Operactor.add:
                    doCounting(numberArray,add);
                    break;
                case Operactor.minus:
                    doCounting(numberArray,minus);
                    break;
                case Operactor.multiply:
                    doCounting(numberArray,multiply);
                    break;
                case Operactor.dividedBy:
                    doCounting(numberArray,divideBy);
                    break;
                case Operactor.pow:
                    doCounting(numberArray,pow);
                    break;
                case Operactor.sqrt:
                    doCounting(numberArray,sqrt);
                    break;
                default:
                    break;
            }
        }

        static decimal convertToDecimal(String val)
        {
            decimal num = 0m;
            try
            {
                num = Convert.ToDecimal(val);
            }
            catch (FormatException )
            {
                Console.WriteLine("尝试将字符串" + val + "转化为decimal类型时,抛出FormatException异常.");
                Environment.Exit(1);
            }

            return num;
        }

        enum Operactor
        {
            add,         //
            minus,       //
            multiply,    //
            dividedBy,   //除以
            pow,         //乘方
            sqrt         //开平方
        }

        static void add(params decimal[] num)
        {
            foreach (decimal d in num)
                Console.WriteLine(d);
            decimal result = 0;
            foreach (decimal d in num)
                result += d;
            Console.WriteLine("以上数字的相加结果为" + result);
        }

        static void minus(params decimal[] num)
        {
            foreach (decimal d in num)
                Console.WriteLine(d);
            decimal result = num[0] * 2;
            foreach (decimal d in num)
                result -= d;
            Console.WriteLine("以上数字的相减结果为" + result);
        }

        static void multiply(params decimal[] num)
        {
            foreach (decimal d in num)
                Console.WriteLine(d);
            decimal result = 1;
            foreach (decimal d in num)
                result *= d;
            Console.WriteLine("以上数字的相乘结果为" + result);
        }

        static void divideBy(params decimal[] num)
        {
            foreach (decimal d in num)
                Console.WriteLine(d);
            decimal result = 1;
            foreach (decimal d in num)
                result /= d;
            Console.WriteLine("以上数字的相除结果为" + result);
        }

        static void pow(params decimal[] num)
        {
            int i = 1;
            while (i < num.Length)
            {
                Console.WriteLine(num[i - 1] + "" + num[i] + "次幂为" + Math.Pow((double)num[i - 1],(double)num[i]));
                i += 2;
            }
            if (num.Length % 2 != 0)
                Console.WriteLine("将不对" + num[num.Length - 1] + "进行任何操作.");
        }

        static void sqrt(params decimal[] num)
        {
            foreach (decimal d in num)
                Console.WriteLine(d + "的算数平方根是" + Math.Sqrt((double)d));
        }

        static void PrintHelp()
        {
            string[] array = new string[8];
            array[0] = "获得一串数字的计算结果。\n";
            array[1] = "ConsoleCount [add | minus | multiply | dividedBy | pow | sqrt] [...]\n";
            array[2] = "add       返回后面一串数字的和。";
            array[3] = "minus     返回后面一串数字的差。";
            array[4] = "multiply  返回后面一串数字的积。";
            array[5] = "dividedBy 返回后面一串数字的商。";
            array[6] = "pow       返回n的n+1次幂。";
            array[7] = "sqrt      返回后面一串数字的正平方根。";

            foreach (string str in array)
                Console.WriteLine(str);

            Environment.Exit(0);
        }
    }
}


binary:https://cspractice.
谢谢~~
搜索更多相关主题的帖子: 控制台 计算器 
2013-04-21 13:06
ixcBoy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2013-4-5
收藏
得分:0 
回复 6楼 shangsharon
谢谢了,我会改进的
2013-04-30 22:09
ixcBoy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2013-4-5
收藏
得分:0 
回复 4楼 panchunfengy
不好意思很久没有回复。使用的是操作系统传来的参数,就是命令行下的,如ConsoleCount.exe add 12 18 50这种,.exe可以不加的,大小写不区分.
2013-04-30 22:10
快速回复:分享自己学习C#以来写的第一个程序--控制台计算器
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037254 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved