static void Main(string[] args) { #region "Exercise 4.1" Console.WriteLine("----- Exercise 4.1 -----"); Console.WriteLine(); #region "Initializing objects" Console.WriteLine("----- Class pet -----"); Console.WriteLine(); Console.WriteLine("----- Initialize pets -----"); Console.WriteLine(); const int AMOUNT1 = 10; List <Pet> pets = new List <Pet>(); for (int i = 0; i < AMOUNT1; i++) { pets.Add(Cat.MakeRandomPet()); pets.Add(Dog.MakeRandomPet()); } foreach (Pet pet in pets) { Console.WriteLine(pet); } #endregion "Initializing objects" #region "Test methods" Console.WriteLine("----- Testing of pet methods -----"); Console.WriteLine(); Console.WriteLine("----- Make noise -----"); Console.WriteLine(); foreach (Pet pet in pets) { Console.WriteLine(pet.MakeNoise()); Console.WriteLine(); } #endregion "Test methods" #endregion "Exercise 4.1" #region "Exercise 4.2" Console.WriteLine("----- Exercise 4.2 -----"); Console.WriteLine(); #region "Initializing objects" Console.WriteLine("----- Class car -----"); Console.WriteLine(); Console.WriteLine("----- Initialize sportscars -----"); Console.WriteLine(); const int AMOUNT2 = 10; List <Car> cars = new List <Car>(); for (int i = 0; i < AMOUNT2; i++) { cars.Add(SportsCar.MakeRandomCar()); cars.Add(FamilyCar.MakeRandomCar()); } foreach (Car car in cars) { Console.WriteLine(car); } #endregion "Initializing objects" #region "Test methods" Console.WriteLine("----- Testing of car methods -----"); Console.WriteLine(); Console.WriteLine("----- Testing fuel consumption -----"); Console.WriteLine(); foreach (Car car in cars) { Console.WriteLine(car.CalculateFuelConsumption()); Console.WriteLine(); } Console.WriteLine("----- Testing kilometer count -----"); Console.WriteLine(); foreach (Car car in cars) { Console.WriteLine(car.CalculateKilometers()); Console.WriteLine(); } #endregion "Test methods" #endregion "Oef 4.2" #region "Exercise 4.3" Console.WriteLine("----- Exercise 4.3 -----"); Console.WriteLine(); #region "Initalizing objects" Console.WriteLine("----- Class Product -----"); Console.WriteLine(); Console.WriteLine("----- Initializing products -----"); Console.WriteLine(); const int AMOUNT3 = 10; List <Product> products = new List <Product>(); for (int i = 0; i < AMOUNT3; i++) { products.Add(FoodProduct.MakeRandomProduct()); products.Add(NonFoodProduct.MakeRandomProduct()); } foreach (Product product in products) { Console.WriteLine(product); } Console.WriteLine("----- Class Store -----"); Console.WriteLine(); Console.WriteLine("----- Initializing store -----"); Console.WriteLine(); Store store = new Store(); #endregion "Initalizing objects" #region "Testing methods" Console.WriteLine("----- Testing of store methods -----"); Console.WriteLine(); Console.WriteLine("----- Adding products -----"); Console.WriteLine(); foreach (Product product in products) { store.AddProduct(product); } Console.WriteLine(store); Console.WriteLine("----- Finding a product -----"); Console.WriteLine(); //List to contain the names of all the products List <string> names = new List <string>(); foreach (Product product in products) { names.Add(product.GetProductName()); } Product product1 = store.FindProduct(names[0]); Console.WriteLine($"Product 1: \n{product1}"); Console.WriteLine("----- Removing the product -----"); Console.WriteLine(); store.RemoveProduct(product1); Console.WriteLine(store); #endregion "Testing methods" #endregion "Exercise 4.3" #region "Exercise 4.4" Console.WriteLine("----- Exercise 4.4 -----"); Console.WriteLine(); #region "Initalizing objects" Console.WriteLine("----- Class Person -----"); Console.WriteLine(); Console.WriteLine("----- Initializing people -----"); Console.WriteLine(); const int AMOUNT4 = 10; List <Attendee> attendees = new List <Attendee>(); List <Artist> artists = new List <Artist>(); for (int i = 0; i < AMOUNT4; i++) { attendees.Add(Attendee.MakeRandomPerson()); artists.Add(Artist.MakeRandomPerson()); } foreach (Person artist in artists) { Console.WriteLine(artist); Console.WriteLine(); } foreach (Person attendee in attendees) { Console.WriteLine(attendee); Console.WriteLine(); } Console.WriteLine("----- Class Festival -----"); Console.WriteLine(); Console.WriteLine("----- Initializing festival -----"); Console.WriteLine(); Festival festival = new Festival(); #endregion "Initalizing objects" #region "Testing methods" Console.WriteLine("----- Testing of festival methods -----"); Console.WriteLine(); Console.WriteLine("----- Adding artists -----"); Console.WriteLine(); foreach (Artist artist in artists) { festival.AddArtist(artist); } Console.WriteLine(festival); Console.WriteLine("----- Finding an artist -----"); Console.WriteLine(); //List to contain the names of all the products Artist artist1 = festival.FindArtist(artists[0].FirstName, artists[0].LastName); Console.WriteLine($"Artist 1: \n{artist1}"); Console.WriteLine("----- Removing the artist -----"); Console.WriteLine(); festival.RemoveArtist(artist1); Console.WriteLine(festival); Console.WriteLine("----- Adding attendees -----"); Console.WriteLine(); foreach (Attendee attendee in attendees) { festival.AddAttendee(attendee); } Console.WriteLine(festival); Console.WriteLine("----- Calculating income prices -----"); Console.WriteLine(); decimal incomePrice = 50; Console.WriteLine($"Standard price: {incomePrice}"); foreach (Attendee attendee in attendees) { Console.WriteLine("-----"); Console.WriteLine(attendee); Console.WriteLine($"Income price: {festival.CalculateIncomePrice(incomePrice, attendee)}"); Console.WriteLine("-----"); Console.WriteLine(); } Console.WriteLine("----- Finding an attendee -----"); Console.WriteLine(); //List to contain the names of all the products Attendee attendee1 = festival.FindAttendee(attendees[0].FirstName, attendees[0].LastName); Console.WriteLine($"Attendee 1: \n{attendee1}"); Console.WriteLine("----- Removing the attendee -----"); Console.WriteLine(); festival.RemoveAttendee(attendee1); Console.WriteLine(festival); #endregion "Testing methods" #endregion "Exercise 4.4" #region "Exercise 4.5" Console.WriteLine("----- Exercise 4.5 -----"); Console.WriteLine(); #region "Initializing objects" Console.WriteLine("----- Class Customer -----"); Console.WriteLine(); Console.WriteLine("----- Initializing customers -----"); Console.WriteLine(); const int AMOUNT5 = 10; List <Customer> customers = new List <Customer>(); //Creating the customers for (int i = 0; i < AMOUNT5; i++) { customers.Add(Customer.MakeRandomCustomer()); } const int AMOUNTOFACCOUNTS = 4; int randomNumber = generator.Next(0, 2); //adding bankaccounts to the customers foreach (Customer customer in customers) { for (int j = 0; j < AMOUNTOFACCOUNTS; j++) { //to randomize what account is added //adds a savingsaccount if (randomNumber <= 0) { customer.AddBankAccount(SavingsAccount.MakeRandomAccount()); } //adds an investementaccount else if (randomNumber > 0) { customer.AddBankAccount(InvestmentAccount.MakeRandomAccount()); } } } const int AMOUNTOFTRANSACTIONS = 6; foreach (Customer customer in customers) { foreach (BankAccount bankAccount in customer.BankAccounts) { int randomYear = generator.Next(DateTime.Today.Year - 80, DateTime.Today.Year + 1); int randomMonth = generator.Next(1, 13); int randomDay = generator.Next(1, DateTime.DaysInMonth(randomYear, randomMonth) + 1); DateTime randomDate = new DateTime(randomYear, randomMonth, randomDay); decimal randomValue = (decimal)generator.Next(100, 100000) / 100; for (int k = 0; k < AMOUNTOFTRANSACTIONS; k++) { if (bankAccount.GetType() == typeof(SavingsAccount)) { bankAccount.DepositMoney(randomValue, randomDate); } else if (bankAccount.GetType() == typeof(InvestmentAccount)) { if (randomNumber <= 0) { bankAccount.DepositMoney(randomValue, randomDate); } else if (randomNumber > 0) { TimeSpan randomPeriod = new TimeSpan(generator.Next(30, 1826), 0, 0, 0); ((InvestmentAccount)bankAccount).InvestMoney(randomValue, randomPeriod, randomDate); } } } } } foreach (Customer customer in customers) { Console.WriteLine(customer); } Console.WriteLine("----- Class Bank -----"); Console.WriteLine(); Console.WriteLine("----- Initializing bank -----"); Console.WriteLine(); Bank bank = new Bank("A bank", Address.MakeRandomAddress()); Console.WriteLine(bank); #endregion "Initializing objects" #region "Testing methods" Console.WriteLine("----- Testing methods -----"); Console.WriteLine(); Console.WriteLine("----- Adding customers -----"); Console.WriteLine(); foreach (Customer customer in customers) { bank.AddCustomer(customer); } Console.WriteLine(bank); Console.WriteLine("----- Listing customers -----"); Console.WriteLine(); Console.WriteLine(bank.ListCustomers()); Console.WriteLine("----- Finding a customer -----"); Console.WriteLine(); Customer customer1 = bank.FindCustomer(1); Console.WriteLine(customer1); Console.WriteLine("----- Removing a customer -----"); Console.WriteLine(); bank.RemoveCustomer(customer1); Console.WriteLine(bank); Console.WriteLine("----- Adding a customer -----"); Console.WriteLine(); bank.AddCustomer(customer1); Console.WriteLine(bank); Console.WriteLine("----- Listing all bankaccounts of customer 1-----"); Console.WriteLine(); Console.WriteLine(customer1.ListBankAccounts()); Console.WriteLine(); Console.WriteLine("----- Finding a bankaccount -----"); Console.WriteLine(); BankAccount bankAccount1 = customer1.FindBankAccount(1); Console.WriteLine(bankAccount1); Console.WriteLine("----- Removing a bankaccount -----"); Console.WriteLine(); customer1.RemoveBankAccount(bankAccount1); Console.WriteLine(customer1); Console.WriteLine("----- Adding a bankaccount -----"); Console.WriteLine(); customer1.AddBankAccount(bankAccount1); Console.WriteLine(customer1); Console.WriteLine("----- Listing all transactions of bankaccount 1 -----"); Console.WriteLine(); Console.WriteLine(bankAccount1.ListTransactions()); Console.WriteLine("----- Finding a transaction -----"); Console.WriteLine(); Transaction transaction1 = bankAccount1.FindTransaction(1); Console.WriteLine(transaction1); Console.WriteLine("----- Removing a transaction -----"); Console.WriteLine(); bankAccount1.RemoveTransaction(transaction1); Console.WriteLine(bankAccount1); Console.WriteLine("----- Adding a transaction -----"); Console.WriteLine(); bankAccount1.AddTransaction(transaction1); Console.WriteLine(bankAccount1); Console.WriteLine("----- Making a savings account -----"); Console.WriteLine(); SavingsAccount savingsAccount = SavingsAccount.MakeRandomAccount(); Console.WriteLine(savingsAccount); Console.WriteLine("----- Depositing money to the account -----"); Console.WriteLine(); int AMOUNTOFDEPOSITS1 = 10; for (int i = 0; i < AMOUNTOFDEPOSITS1; i++) { int randomYear = generator.Next(DateTime.Today.Year - 80, DateTime.Today.Year + 1); int randomMonth = generator.Next(1, 13); int randomDay = generator.Next(1, DateTime.DaysInMonth(randomYear, randomMonth) + 1); DateTime randomDate = new DateTime(randomYear, randomMonth, randomDay); decimal randomValue = (decimal)generator.Next(100, 100000) / 100; savingsAccount.DepositMoney(randomValue, randomDate); } Console.WriteLine(savingsAccount.ListTransactions()); Console.WriteLine(); Console.WriteLine($"Account balance: \u20AC {savingsAccount.CalculateAccountBalance():N}"); Console.WriteLine(); Console.WriteLine("----- Withrawing money from account -----"); Console.WriteLine(); int AMOUNTOFWITHDRAWALS1 = 10; try { for (int i = 0; i < AMOUNTOFWITHDRAWALS1; i++) { int randomYear = generator.Next(DateTime.Today.Year - 80, DateTime.Today.Year + 1); int randomMonth = generator.Next(1, 13); int randomDay = generator.Next(1, DateTime.DaysInMonth(randomYear, randomMonth) + 1); DateTime randomDate = new DateTime(randomYear, randomMonth, randomDay); decimal randomValue = (decimal)generator.Next(10, 10000) / 100; savingsAccount.WithdrawMoney(randomValue, randomDate); } } catch (Exception) { Console.WriteLine("Insufficient funds"); } Console.WriteLine(savingsAccount.ListTransactions()); Console.WriteLine(); Console.WriteLine($"Account balance: \u20AC {savingsAccount.CalculateAccountBalance():N}"); Console.WriteLine(); Console.WriteLine("----- Making an investement account -----"); Console.WriteLine(); InvestmentAccount investmentAccount = InvestmentAccount.MakeRandomAccount(); Console.WriteLine(investmentAccount); Console.WriteLine("----- Depositing money into the account -----"); Console.WriteLine(); int AMOUNTOFDEPOSITS2 = 5; for (int i = 0; i < AMOUNTOFDEPOSITS2; i++) { int randomYear = generator.Next(DateTime.Today.Year - 80, DateTime.Today.Year + 1); int randomMonth = generator.Next(1, 13); int randomDay = generator.Next(1, DateTime.DaysInMonth(randomYear, randomMonth) + 1); DateTime randomDate = new DateTime(randomYear, randomMonth, randomDay); decimal randomValue = (decimal)generator.Next(100, 100000) / 100; investmentAccount.DepositMoney(randomValue, randomDate); } Console.WriteLine(investmentAccount.ListTransactions()); Console.WriteLine(); Console.WriteLine($"Account balance: \u20AC {investmentAccount.CalculateAccountBalance():N}"); Console.WriteLine(); Console.WriteLine("----- Investing money into the account -----"); Console.WriteLine(); int AMOUNTOFINVESTEMENTS = 5; for (int i = 0; i < AMOUNTOFINVESTEMENTS; i++) { int randomYear = generator.Next(DateTime.Today.Year - 80, DateTime.Today.Year + 1); int randomMonth = generator.Next(1, 13); int randomDay = generator.Next(1, DateTime.DaysInMonth(randomYear, randomMonth) + 1); DateTime randomDate = new DateTime(randomYear, randomMonth, randomDay); decimal randomValue = (decimal)generator.Next(100, 100000) / 100; TimeSpan randomPeriod = new TimeSpan(generator.Next(30, 1826), 0, 0, 0); investmentAccount.InvestMoney(randomValue, randomPeriod, randomDate); } Console.WriteLine(investmentAccount.ListTransactions()); Console.WriteLine(); Console.WriteLine($"Account balance: \u20AC {investmentAccount.CalculateAccountBalance():N}"); Console.WriteLine(); #endregion "Testing methods" #endregion "Exercise 4.5" }