MikecIT

z2

Nov 20th, 2019
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.39 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Xml.Linq;
  7. using System.Linq;
  8.  
  9. namespace zadatak2
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             foreach(var temp in CombinedDataBase.SpisakVozilaVozaca())
  16.             {
  17.                 Console.WriteLine(temp.Item1.Name);
  18.                 foreach(var temp2 in temp.Item2)
  19.                     Console.WriteLine($"{temp2.Age} {temp2.Manufacturer}");
  20.             }
  21.  
  22.             Console.WriteLine();
  23.             foreach (var temp in CombinedDataBase.SpisakImenaVozacaVozila())
  24.             {
  25.                 Console.Write(temp.Item1);
  26.                 Console.WriteLine($" {temp.Item2.Age} {temp.Item2.Manufacturer}");
  27.             }
  28.  
  29.             Console.WriteLine();
  30.             foreach (var temp in CombinedDataBase.SpisakNeiskusnihVozaca())
  31.             {
  32.                 Console.Write($"{temp.Id} {temp.Name} {temp.YearsDriving}");
  33.             }
  34.             Console.WriteLine();
  35.         }
  36.  
  37.         public class Driver
  38.         {
  39.             public int Id { get; set; }
  40.             public string Name { get; set; }
  41.             public int YearsDriving { get; set; }
  42.         }
  43.  
  44.         public class Car
  45.         {
  46.             public int DriverId { get; set; }
  47.             public string Manufacturer { get; set; }
  48.             public int Age { get; set; }
  49.         }
  50.  
  51.         public class DriverDataBase
  52.         {
  53.             public List<Driver> Drivers { get; set; }
  54.         }
  55.  
  56.         public interface IDDBUpgrade
  57.         {
  58.             List<Driver> GetExperiencedDrivers();
  59.         }
  60.  
  61.         public class UpgradedDDB : DriverDataBase, IDDBUpgrade
  62.         {
  63.             public List<Driver> GetExperiencedDrivers()
  64.             {
  65.                 return Drivers.Where(driver => driver.YearsDriving > 10).ToList();
  66.             }
  67.         }
  68.  
  69.         public class CarDataBase
  70.         {
  71.             public List<Car> Cars { get; set; }
  72.         }
  73.  
  74.         public interface ICDBUpgrade
  75.         {
  76.             List<Car> GetOldtimers();
  77.         }
  78.  
  79.         public class UpgradedCDB : CarDataBase, ICDBUpgrade
  80.         {
  81.             public List<Car> GetOldtimers()
  82.             {
  83.                 var cars = Cars.Select(car => car);
  84.                 return (from car in cars
  85.                         let manufact = car.Manufacturer == "Jaguar" ||
  86.                         car.Manufacturer == "Rolls-Royce" || car.Manufacturer == "Aston Martin"
  87.                         where car.Age > 30 && manufact
  88.                         select car).ToList();
  89.             }
  90.         }
  91.  
  92.         public static class CombinedDataBase
  93.         {
  94.             public static UpgradedDDB DDB;
  95.             public static UpgradedCDB CDB;
  96.             static CombinedDataBase()
  97.             {
  98.                 DDB = new UpgradedDDB();
  99.                 CDB = new UpgradedCDB();
  100.  
  101.                 XElement xdom = XElement.Load("../../database.xml");
  102.                 CDB.Cars = (from car in xdom.Descendants("Car")
  103.                             select new Car()
  104.                             {
  105.                                 DriverId = (int)car.FirstAttribute,
  106.                                 Age = (int)car.LastAttribute,
  107.                                 Manufacturer = car.Value
  108.                             }).ToList();
  109.  
  110.                 DDB.Drivers = (from driver in xdom.Descendants("Driver")
  111.                             select new Driver()
  112.                             {
  113.                                 Id = (int)driver.FirstAttribute,
  114.                                 YearsDriving = (int)driver.LastAttribute,
  115.                                 Name = driver.Value
  116.                             }).ToList();
  117.  
  118.             }
  119.             //Izvestaji
  120.  
  121.             public static List<Tuple<Driver, List<Car>>> SpisakVozilaVozaca()
  122.             {
  123.                 var report = new List<Tuple<Driver, List<Car>>>();
  124.                 foreach (Driver d in DDB.Drivers)
  125.                 {
  126.                     var cars = CDB.Cars.Where(car => car.DriverId == d.Id).ToList();
  127.                     report.Add(Tuple.Create(d, cars));
  128.                 }
  129.  
  130.                 return report;
  131.             }
  132.  
  133.             public static List<Tuple<string, Car>> SpisakImenaVozacaVozila()
  134.             {
  135.                 var report = new List<Tuple<string, Car>>();
  136.                 foreach (Car c in CDB.Cars)
  137.                 {
  138.                     var drivers = DDB.Drivers.Select(driver => driver);
  139.                     string name = (from d in drivers
  140.                                   where d.Id == c.DriverId
  141.                                   select d.Name).ToList()[0];
  142.                     report.Add(Tuple.Create(name, c));
  143.                 }
  144.  
  145.                 return report;
  146.             }
  147.  
  148.             public static List<Driver> SpisakNeiskusnihVozaca()
  149.             {
  150.                 var report = new List<Driver>();
  151.                 var drivers = DDB.Drivers.Except(DDB.GetExperiencedDrivers()).Select(driver => driver);
  152.                 var cars = CDB.GetOldtimers().Select(car => car);
  153.  
  154.                 return (from d in drivers
  155.                         join c in cars on d.Id equals c.DriverId
  156.                         into carsOfDrivers
  157.                         where d.Name.StartsWith("P") && carsOfDrivers.Count() >= 2
  158.                         select d).ToList();
  159.             }
  160.         }
  161.     }
  162. }
Add Comment
Please, Sign In to add comment