| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1260 人关注过本帖, 1 人收藏
标题:分享自己学习C#以来写的第一个程序--控制台计算器
只看楼主 加入收藏
ixcBoy
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2013-4-5
结帖率:0
收藏(1)
已结贴  问题点数:1 回复次数:7 
分享自己学习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
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:1 
Count c = Delegate.CreateDelegate(typeof(Count), typeof(Program), operactor.ToString()) as Count;
doCounting(numberArray, c);
/*
switch()
{
....
}
*/
符合你的需要.
2013-04-21 16:12
panchunfengy
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2013-4-21
收藏
得分:1 
你能给每句话后面注解吗?看不懂
2013-04-22 14:04
panchunfengy
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2013-4-21
收藏
得分:0 
而且你这个程序怎么运行起来?我们没法传值啊?
2013-04-22 14:12
ming_cl
Rank: 2
等 级:论坛游民
威 望:1
帖 子:6
专家分:11
注 册:2013-4-21
收藏
得分:1 
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;
            }
这个为什么不能直接:doCounting(numberArray,operactor);
2013-04-22 15:48
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:0 
回复 5楼 ming_cl
doCounting(numberArray,operactor);

operactor 是枚举类型啊,
这里需要的是一个Count的委托.
因为枚举的名字和方法的名字一样所以你误会了吧.
2013-04-22 19:35
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.031458 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved