Example #1
0
        public void ActivityPerfomances(Triathlon triathlon, double distance, double duration)
        {
            double maxDistance, totalDistance, totalDuration, averageSpeed;
            int    activityQuantity;

            if (distance != 0.00000001 && duration != 0.00000001)
            {
                using (var db = new ActivityDatabase())
                {
                    if (triathlon.Discriminator == "Running")
                    {
                        maxDistance      = db.TriathlonTrainings.Where(n => n.Discriminator == "Running").Max(p => p.Distance);
                        activityQuantity = db.TriathlonTrainings.Where(n => n.Discriminator == "Running").Count();
                        totalDistance    = db.TriathlonTrainings.Where(n => n.Discriminator == "Running").Sum(p => p.Distance);
                        totalDuration    = db.TriathlonTrainings.Where(n => n.Discriminator == "Running").Sum(p => p.Duration);
                        averageSpeed     = db.TriathlonTrainings.Where(n => n.Discriminator == "Running").Average(p => p.Speed);

                        Console.WriteLine($"Best running distance: {maxDistance} km");
                        Console.WriteLine($"Total distance per {activityQuantity} activity: {Math.Round(totalDistance, 2)} km");
                        Console.WriteLine($"Total duration per {activityQuantity} activity: {totalDuration} min ({GetTimeInHours()} hours {GetTimeInMinutes()} min)");
                        Console.WriteLine($"Average speed: {Math.Round(averageSpeed, 2)} km/hour");
                        TwoLastDaysRunningData();
                    }
                    else if (triathlon.Discriminator == "Bicycle")
                    {
                        maxDistance      = db.TriathlonTrainings.Where(n => n.Discriminator == "Bicycle").Max(p => p.Distance);
                        activityQuantity = db.TriathlonTrainings.Where(n => n.Discriminator == "Bicycle").Count();
                        totalDistance    = db.TriathlonTrainings.Where(n => n.Discriminator == "Bicycle").Sum(p => p.Distance);
                        totalDuration    = db.TriathlonTrainings.Where(n => n.Discriminator == "Bicycle").Sum(p => p.Duration);
                        averageSpeed     = db.TriathlonTrainings.Where(n => n.Discriminator == "Bicycle").Average(p => p.Speed);

                        Console.WriteLine($"Best bike distance: {maxDistance} km");
                        Console.WriteLine($"Total distance per {activityQuantity} activity: {Math.Round(totalDistance, 2)} km");
                        Console.WriteLine($"Total duration per {activityQuantity} activity: {totalDuration} min ({GetTimeInHours()} hours {GetTimeInMinutes()} min)");
                        Console.WriteLine($"Average speed: {Math.Round(averageSpeed, 2)} km/hour");
                        TwoLastDaysBikeData();
                    }
                    else
                    {
                        maxDistance      = db.TriathlonTrainings.Where(n => n.Discriminator == "Swimming").Max(p => p.Distance);
                        activityQuantity = db.TriathlonTrainings.Where(n => n.Discriminator == "Swimming").Count();
                        totalDistance    = db.TriathlonTrainings.Where(n => n.Discriminator == "Swimming").Sum(p => p.Distance);
                        totalDuration    = db.TriathlonTrainings.Where(n => n.Discriminator == "Swimming").Sum(p => p.Duration);
                        averageSpeed     = db.TriathlonTrainings.Where(n => n.Discriminator == "Swimming").Average(p => p.Speed);

                        Console.WriteLine($"Best swim distance: {maxDistance} km");
                        Console.WriteLine($"Total distance per {activityQuantity} activity: {Math.Round(totalDistance, 2)} km");
                        Console.WriteLine($"Total duration per {activityQuantity} activity: {totalDuration} min ({GetTimeInHours()} hours {GetTimeInMinutes()} min)");
                        Console.WriteLine($"Average speed: {Math.Round(averageSpeed, 2)} km/hour");
                        TwoLastDaysSwimmingData();
                    }
                }
            }
            double GetTimeInHours()
            {
                double hours = Math.Floor(totalDuration / 60);

                return(hours);
            }

            double GetTimeInMinutes()
            {
                double minutes = Math.Round(totalDuration % 60);

                return(minutes);
            }

            void TwoLastDaysSwimmingData()
            {
                using (var db = new ActivityDatabase())
                {
                    var lastTwoDays     = DateTime.Today.AddDays(-2);
                    var twoLastDaysData = (from training in db.TriathlonTrainings
                                           where training.Discriminator == "Swimming"
                                           where training.CurrentData > lastTwoDays
                                           select training).ToList();
                    foreach (var training in twoLastDaysData)
                    {
                        totalDistance = twoLastDaysData.Sum(p => p.Distance);
                    }
                    Console.WriteLine($"Total distance for 2 last days: {Math.Round(totalDistance, 2)} km");
                }
            }

            void TwoLastDaysRunningData()
            {
                using (var db = new ActivityDatabase())
                {
                    var lastTwoDays     = DateTime.Today.AddDays(-2);
                    var twoLastDaysData = (from training in db.TriathlonTrainings
                                           where training.Discriminator == "Running"
                                           where training.CurrentData > lastTwoDays
                                           select training).ToList();
                    foreach (var training in twoLastDaysData)
                    {
                        totalDistance = twoLastDaysData.Sum(p => p.Distance);
                    }
                    Console.WriteLine($"Total distance for 2 last days: {Math.Round(totalDistance, 2)} km");
                }
            }

            void TwoLastDaysBikeData()
            {
                using (var db = new ActivityDatabase())
                {
                    var lastTwoDays     = DateTime.Today.AddDays(-2);
                    var twoLastDaysData = (from training in db.TriathlonTrainings
                                           where training.Discriminator == "Bicycle"
                                           where training.CurrentData > lastTwoDays
                                           select training).ToList();
                    foreach (var training in twoLastDaysData)
                    {
                        totalDistance = twoLastDaysData.Sum(p => p.Distance);
                    }
                    Console.WriteLine($"Total distance for 2 last days: {Math.Round(totalDistance, 2)} km");
                }
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            while (true)
            {
                Sport kindOfSport;
                Console.WriteLine("Enter kind of activity: 1) running 2) bike 3) swimming");
                string enteredData = Console.ReadLine();
                if (!Enum.TryParse(enteredData, out kindOfSport))
                {
                    Console.WriteLine("It is not correct data. Try again");
                }
                else
                {
                    kindOfSport = (Sport)Enum.Parse(typeof(Sport), enteredData, ignoreCase: true);
                }

                double distance, duration;
                Console.WriteLine("Enter activity distance(in kilometers): (for example: 10,5)");
                enteredData = Console.ReadLine();
                if (!Double.TryParse(enteredData, out distance) || distance < 0 || distance > 1000)
                {
                    distance = 0.00000001;
                    Console.WriteLine("It is not correct data");
                }

                Console.WriteLine("Enter time (in minutes):");
                enteredData = Console.ReadLine();
                if (!Double.TryParse(enteredData, out duration) || duration < 0 || duration > 5000)
                {
                    duration = 0.00000001;
                    Console.WriteLine("It is not correct data");
                }

                switch (kindOfSport)
                {
                case Sport.running:
                    using (var db = new ActivityDatabase())
                    {
                        var running = new Running()
                        {
                            Distance = distance, Duration = duration, Speed = distance / (duration / 60), Pace = 60 / (distance / (duration / 60)), CurrentData = DateTime.Now
                        };
                        db.TriathlonTrainings.Add(running);

                        if (distance != 0.00000001 && duration != 0.00000001)
                        {
                            db.SaveChanges();
                        }
                        else
                        {
                            db.TriathlonTrainings.Remove(running);
                        }
                        ActivityResult(running);
                    }
                    break;

                case Sport.bike:
                    using (var db = new ActivityDatabase())
                    {
                        var bike = new Bicycle()
                        {
                            Distance = distance, Duration = duration, Speed = distance / (duration / 60), Pace = 60 / (distance / (duration / 60)), CurrentData = DateTime.Now
                        };
                        db.TriathlonTrainings.Add(bike);
                        if (distance != 0.00000001 && duration != 0.00000001)
                        {
                            db.SaveChanges();
                        }
                        else
                        {
                            db.TriathlonTrainings.Remove(bike);
                        }
                        ActivityResult(bike);
                    }
                    break;

                case Sport.swimming:
                    using (var db = new ActivityDatabase())
                    {
                        var swimming = new Swimming()
                        {
                            Distance = distance, Duration = duration, Speed = distance / (duration / 60), Pace = 60 / (distance / (duration / 60)), CurrentData = DateTime.Now
                        };
                        db.TriathlonTrainings.Add(swimming);
                        if (distance != 0.00000001 && duration != 0.00000001)
                        {
                            db.SaveChanges();
                        }
                        else
                        {
                            db.TriathlonTrainings.Remove(swimming);
                        }
                        ActivityResult(swimming);
                    }
                    break;

                default:
                    Console.WriteLine("It is not correct data");
                    break;
                }
                void ActivityResult(Triathlon triathlon)
                {
                    var activityEvent = new ActivityEvent();

                    activityEvent.ActivityEventHandler(triathlon, distance, duration);

                    var activityPerfomances = new ActivitiesPerfomances();

                    activityPerfomances.ActivityPerfomances(triathlon, distance, duration);
                }

                Console.WriteLine();
                ConsoleColor color = Console.ForegroundColor;
                Console.WriteLine("For exit press key \"E\" and \"Enter\"");
                Console.WriteLine("For continue press any other key");
                string exit = Console.ReadLine();
                if (exit == "E")
                {
                    break;
                }
                Console.Clear();
                Console.ForegroundColor = color;
            }
        }