コード例 #1
0
 private static Employee GivePromotion(Employee employee, double rate)
 {
     return(employee.With(
                salary: employee.Salary *(1 + rate),
                role: EmployeeAppHelpers.NextRole(employee.Role)
                ));
 }
コード例 #2
0
ファイル: Program.cs プロジェクト: DanialK/fp-in-csharp
        private static Either <Error, Unit> Loop()
        {
            EmployeeAppHelpers.PrintWelcomeMessage();

            return(ReadAction()
                   .Bind(action =>
                         EmployeeApp.Run(action)
                         )
                   .Match(
                       Right: _ => RetryPrompt(),
                       Left: error =>
            {
                Console.WriteLine("Error: " + error.Message);
                return RetryPrompt();
            }
                       ));

            //return (
            //    from action in ReadAction()
            //    from result in EmployeeApp.Run(action)
            //    select result
            //).Match(
            //    Right: _ => RetryPrompt(),
            //    Left: error =>
            //    {
            //        Console.WriteLine("Error: " + error.Message);
            //        return RetryPrompt();
            //    }
            //);
        }
コード例 #3
0
        private static void Loop()
        {
            EmployeeAppHelpers.PrintWelcomeMessage();

            var action = Enum.Parse <UserAction>(Console.ReadLine());

            EmployeeApp.Run(action);

            RetryPrompt();
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: DanialK/fp-in-csharp
        private static Option <Unit> Loop()
        {
            EmployeeAppHelpers.PrintWelcomeMessage();

            return(ReadAction()
                   .Bind((action) => EmployeeApp.Run(action))
                   .Match(
                       Some: _ => RetryPrompt(),
                       None: () =>
            {
                Console.WriteLine("Error occured!");
                return RetryPrompt();
            }
                       ));
        }
コード例 #5
0
        public void Run(UserAction action)
        {
            switch (action)
            {
            case UserAction.Show:
            {
                var id       = ReadEmployeeId();
                var employee = DbHelper.GetEmployee(id);
                Console.WriteLine(employee.ToString());
                break;
            }

            case UserAction.Raise:
            {
                var id            = ReadEmployeeId();
                var employee      = DbHelper.GetEmployee(id);
                var happyEmployee = GiveRaise(employee, RAISE_RATE);
                Console.WriteLine("Employee " + employee);
                Console.WriteLine("Happy Employee " + happyEmployee);
                break;
            }

            case UserAction.Promote:
            {
                var id            = ReadEmployeeId();
                var employee      = DbHelper.GetEmployee(id);
                var happyEmployee = GivePromotion(employee, RAISE_RATE);
                Console.WriteLine("Employee " + employee);
                Console.WriteLine("Happy Employee " + happyEmployee);
                break;
            }

            case UserAction.ReportAll:
            {
                var employees = DbHelper.GetEmployees();

                var report = employees
                             .GroupBy(x => x.Role)
                             .ToDictionary(
                    xs => xs.Key,
                    xs => xs.Select(x => x.Salary / 52).Sum()
                    );

                EmployeeAppHelpers.PrintReport(report);
                break;
            }

            case UserAction.ReportByRole:
            {
                var employees = DbHelper.GetEmployees();
                var role      = ReadRole();
                // NOTE: there many ways to do this
                var report = employees
                             .GroupBy(x => x.Role)
                             .Where(x => x.Key == role)
                             .ToDictionary(
                    xs => xs.Key,
                    xs => xs.Select(x => x.Salary / 52).Sum()
                    );

                EmployeeAppHelpers.PrintReport(report);
                break;
            }

            default:
                throw new Exception($"Something really bad has happened, Action of {action} is invalid");
            }
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: DanialK/fp-in-csharp
 private static Unit PrintReport(IDictionary <Role, double> report)
 {
     EmployeeAppHelpers.PrintReport(report);
     return(unit);
 }
コード例 #7
0
        public void Run(string action)
        {
            if (action == "Show")
            {
                var id       = ReadEmployeeId();
                var employee = DbHelper.GetEmployee(id);
                Console.WriteLine(employee.ToString());
            }
            else if (action == "Raise")
            {
                var id            = ReadEmployeeId();
                var employee      = DbHelper.GetEmployee(id);
                var happyEmployee = GiveRaise(employee);
                Console.WriteLine("Employee " + employee);
                Console.WriteLine("Happy Employee " + happyEmployee);
            }
            else if (action == "Promote")
            {
                var id            = ReadEmployeeId();
                var employee      = DbHelper.GetEmployee(id);
                var happyEmployee = GivePromotion(employee);
                Console.WriteLine("Employee " + employee);
                Console.WriteLine("Happy Employee " + happyEmployee);
            }
            else if (action == "ReportAll")
            {
                var employees = DbHelper.GetEmployees();
                var report    = new Dictionary <Role, double>();

                foreach (var employee in employees)
                {
                    if (!report.ContainsKey(employee.Role))
                    {
                        report[employee.Role] = 0d;
                    }

                    report[employee.Role] = report[employee.Role] + (employee.Salary / 52);
                }

                EmployeeAppHelpers.PrintReport(report);
            }
            else if (action == "ReportByRole")
            {
                var role      = ReadRole();
                var employees = DbHelper.GetEmployees();
                var report    = new Dictionary <Role, double>();

                foreach (var employee in employees)
                {
                    if (employee.Role != role)
                    {
                        continue;
                    }

                    if (!report.ContainsKey(employee.Role))
                    {
                        report[employee.Role] = 0d;
                    }

                    report[employee.Role] = report[employee.Role] + (employee.Salary / 52);
                }

                EmployeeAppHelpers.PrintReport(report);
            }
            else
            {
                throw new Exception($"Action of {action} is invalid");
            }
        }
コード例 #8
0
 private static Employee GivePromotion(Employee employee)
 {
     employee.Salary *= (1 + RAISE_RATE);
     employee.Role    = EmployeeAppHelpers.NextRole(employee.Role);
     return(employee);
 }