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"); } } }
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; } }