09-spaceship/SpaceShuttle/Program.cs

131 lines
3.6 KiB
C#

/*--------------------------------------------------------------
* HTBLA-Leonding / Class: 4CHIF
*--------------------------------------------------------------
* Hinterdorfer Jonas
*--------------------------------------------------------------
* Description: SpaceShuttle
*--------------------------------------------------------------
*/
using System;
using System.Linq;
using SpaceShuttle.Tools;
Console.WriteLine("Space-Shuttle");
Console.WriteLine("=====================");
string fileNameShuttle = "SpaceShuttle.csv";
string fileNameShuttleName = "SpaceShuttleName.csv";
string fileNameShuttleStart = "SpaceShuttleStart.csv";
var shuttle = new CsvImport<SpaceShuttle.SpaceShuttle>()
{
DateFormat = "dd.MM.yyyy",
TimeFormat = "H:m"
}.Read(fileNameShuttle);
var shuttleName = new CsvImport<SpaceShuttle.SpaceShuttleName>().Read(fileNameShuttleName);
var shuttleStart = new CsvImport<SpaceShuttle.SpaceShuttleStart>()
{
DateFormat = "dd.MM.yyyy",
TimeFormat = "H:m"
}.Read(fileNameShuttleStart);
#region Task1
Console.WriteLine("\nTask 1: All Space Shuttles");
Console.WriteLine("==========================");
var task1 = shuttle.Select(s => s);
foreach (var s in task1)
{
Console.WriteLine($"{s.Name,-15} {s.OVNo,-10} {s.Remark}");
}
#endregion
#region Task2
Console.WriteLine("\nTask 2: All Shuttle Starts ordered by Launch Date");
Console.WriteLine("==================================================");
var task2 = shuttleStart.OrderBy(s => s.LaunchDate);
foreach (var s in task2)
{
Console.WriteLine($"{s.No,3} {s.LaunchDate:dd.MM.yyyy} {s.Mission,-15} {s.Shuttle,-15} {s.LaunchPad,-10}");
}
#endregion
#region Task3 - join
Console.WriteLine("\nTask 3: Shuttle Starts with Name Origin (Join)");
Console.WriteLine("===============================================");
var task3 = shuttleStart.Join(
shuttleName,
start => start.Shuttle,
name => name.ShuttleName,
(start, name) => new { start.No, start.LaunchDate, start.Mission, start.Shuttle, name.ShipLiveNameFrom, name.NameFrom }
);
foreach (var s in task3)
{
Console.WriteLine($"{s.No,3} {s.LaunchDate:dd.MM.yyyy} {s.Mission,-15} {s.Shuttle,-15} {s.ShipLiveNameFrom,-20}");
}
#endregion
#region Task4 - join-join
Console.WriteLine("\nTask 4: Complete Shuttle Information (Double Join)");
Console.WriteLine("===================================================");
var task4 = shuttleStart.Join(
shuttleName,
start => start.Shuttle,
name => name.ShuttleName,
(start, name) => new { start, name }
).Join(
shuttle,
temp => temp.start.Shuttle,
sh => sh.Name,
(temp, sh) => new { temp.start.No, temp.start.LaunchDate, temp.start.Mission, temp.start.Shuttle, sh.OVNo, temp.name.NameFrom }
);
foreach (var s in task4.Take(10))
{
Console.WriteLine($"{s.No,3} {s.LaunchDate:dd.MM.yyyy} {s.Mission,-15} {s.Shuttle,-15} {s.OVNo,-10}");
}
#endregion
#region Task5 - join-group
Console.WriteLine("\nTask 5: Shuttle Starts Grouped by Shuttle (Join-Group)");
Console.WriteLine("=======================================================");
var task5 = shuttleStart
.Join(
shuttle,
start => start.Shuttle,
sh => sh.Name,
(start, sh) => new { start, sh }
).GroupBy(
x => new { x.start.Shuttle, x.sh.OVNo }
).Select(
g => new {
g.Key.Shuttle,
g.Key.OVNo,
Count = g.Count(),
FirstLaunch = g.Min(s => s.start.LaunchDate),
LastLaunch = g.Max(s => s.start.LaunchDate)
}
);
foreach (var s in task5)
{
Console.WriteLine($"{s.Shuttle,-15} {s.OVNo,-10} Missions: {s.Count,3} First: {s.FirstLaunch:dd.MM.yyyy} Last: {s.LastLaunch:dd.MM.yyyy}");
}
#endregion