2014-02-16 3 views
0

Ниже у меня есть этот код, над которым я работаю, а не задание, его включение в ассоциацию. В основном у меня есть C2.buyPhoneApple (P1); это вызывает метод в моем классе Customer. Вернемся к моему списку, у меня есть список, этот список состоит из элементов, добавленных в класс телефона, моя проблема в том, что я использовал P1 для проверки вызова, он работает, но теперь мне нужен вызов метода, чтобы отразить элемент внутри список и взять 1 из запасов сразу после размещения заказа. Я попытался объяснить это как можно лучше.Помощь с вызовом метода ассоциирования

В дополнение к этому, я использую переменную, называемую моделью для хранения выбора пользователей из повторного списка (0, 1, 2). Я использую эту переменную, чтобы подтвердить выбор пользователей, индексируя библиотеку applePhones, извините длинное объяснение ,

P.S. У меня есть больше кода, но он не чувствовал необходимости публиковать все классы.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace OOP_Phone_Shop_Test 
{ 
    class Program 
    { 

     static int thanksApple(ref int thankYou) 
     { 
      Random text = new Random(); 
      thankYou = text.Next(1, 4); 

      switch (thankYou) 
      { 
       case 1: 
        Console.WriteLine("\nThank you for choosing Apple!\n"); 
        break; 
       case 2: 
        Console.WriteLine("\nCongratualation on purchasing your Apple product!\n"); 
        break; 
       case 3: 
        Console.WriteLine("\nWelcome to Apple, you shall receieve your account information and billing through the mail.\n"); 
        break; 
       case 4: 
        Console.WriteLine("\nCell-Sale, number 1 for Apple products and services!\n"); 
        break; 
      } 

      return thankYou; 
     } 
     static void menu() 
     { 


     } 
     static void Main(string[] args) 
     { 
      menu(); 
      int model = 0; 
      bool menuRepeat = true; 
      string confirm = ""; 
      int choice = 0; 

      do 
      { 
       AppleLibrary appleLib = new AppleLibrary(); 
       SamsungLibrary samsungLib = new SamsungLibrary(); 
       Customer C1 = new Customer("Poseidon", 500, 309487, "The Sea, Greece"); //Instantiation with predefined values due to predefined constructor. 
       Customer C2 = new Customer("Zeus", 601, 345928, "Olympus, Greece"); 
       Windows W1 = new Windows(); 



       W1.brand = "Windows"; 
       W1.model = "Nokia Lumia"; 
       W1.stock = 5; 

       Samsung Sam2 = new Samsung(); 
       Sam2.brand = "Samsung, Andriod"; 
       Sam2.Model = "Samsung Galaxy note 3"; 
       Sam2.stock = 5; 
       Sam2.price = 300; 

       Apple P1 = new Apple(); 
       P1.brand = "Apple"; 
       P1.model = "iPhone 5"; 
       P1.stock = 5; 
       P1.price = 350; 

       appleLib.ApplePhones.Add(new Phone("Apple", "iPhone 5", 350, 1));//Adding to the library object with initialization (Predefined constructor) 
       appleLib.ApplePhones.Add(new Phone("Apple", "iPhone 4s", 250, 1)); 
       appleLib.ApplePhones.Add(new Phone("Apple", "iPhone 3", 150, 0)); 
       samsungLib.samsungPhones.Add(new Phone("Samsung", "Galaxy Note 1", 100, 7)); 
       samsungLib.samsungPhones.Add(new Phone("Samsung", "Galaxy Note 2", 150, 2)); 
       samsungLib.samsungPhones.Add(new Phone("Samsung", "Galaxy Note 3", 350, 4)); 

       Console.BackgroundColor = ConsoleColor.DarkGreen; 
       /* 
       for (int j = 0; j < windowsPhoneArray.Length; j++) 
       { 
        Console.WriteLine("{0}", windowsPhoneArray[j].model); 
       } 
       * */ 

       Console.WriteLine("\nCustomer name: {0}\nCustomer balance: {1}\n", C1.name, C1.balance); 

       Console.WriteLine("\n1)Apple\n\n2)Samsung\n\n3)Windows\n"); 

       Console.Write("Please select a brand: "); 

       try 
       { 
        choice = Convert.ToInt32(Console.ReadLine()); 
       } 

       catch (FormatException) 
       { 
        Console.BackgroundColor = ConsoleColor.DarkGray; 
        Console.WriteLine("\n\n***Please enter a number***\n\n"); 
       } 

       if (choice == 1) 
       { 
        Console.WriteLine("\nPlease Select a model"); 

        for (int i = 0; i < appleLib.ApplePhones.Count(); i++) 
        { 
         Console.BackgroundColor = ConsoleColor.DarkMagenta; 
         Console.Write("\nSelection {0}) = Model: {1}\nPrice: {2}\nStock: {3}\n", i, appleLib.ApplePhones[i].model, appleLib.ApplePhones[i].price, appleLib.ApplePhones[i].stock); 
        } 

        Console.Write("\nPlease select your model: "); 

        try 
        { 
         model = Convert.ToInt32(Console.ReadLine()); //This variable to show/confirm the users list<phone> selection. 
        } 

        catch (FormatException) 
        { 
         Console.BackgroundColor = ConsoleColor.DarkGray; 
         Console.WriteLine("\nPlease enter a number\n"); 
        } 

        Console.WriteLine("\nYou have selected: {0}\nPrice: {1}", appleLib.ApplePhones[model].Brand, appleLib.ApplePhones[model].price); 


        Console.BackgroundColor = ConsoleColor.Blue; 
        Console.Write("\nConfirm purchase Y/N: "); 
        confirm = Console.ReadLine(); 

        if (confirm == "y" || confirm == "Y") 
        { 
         menuRepeat = false; 
         C2.BuyPhoneApple(P1);// I want this call to reflect the chosen element within the list<phone> and call buyPhoneApple and remove a phone from the stock according to the users selection. 
        } 
        else 
        { 
         Console.WriteLine("Returning to the main menu...standby"); 
        } 

       } 

       if (choice == 2) 
       { 
        for (int x = 0; x < samsungLib.samsungPhones.Count(); x++) 
        { 
         Console.Write("\nSelection {0}) = Model: {1}\nStock: {2}\n", x, samsungLib.samsungPhones[x].model, samsungLib.samsungPhones[x].stock); 
        } 

        Console.Write("\nPlease select your model: "); 

        try 
        { 
         model = Convert.ToInt32(Console.ReadLine()); 
        } 
        catch (FormatException) 
        { 
         Console.BackgroundColor = ConsoleColor.DarkGray; 
         Console.WriteLine("\nPlease enter a number\n"); 
        } 

        Console.WriteLine("\nYou have selected: {0}\nPrice: {1}", samsungLib.samsungPhones[model].brand, samsungLib.samsungPhones[model].price); 

        Console.Write("\nConfirm purchase Y/N: "); 
        confirm = Console.ReadLine(); 

        if (confirm == "y" || confirm == "Y") 
        { 
         menuRepeat = false; 
         C2.BuyPhoneApple(P1); 
        } 
       } 
      } while (menuRepeat == true); 
     } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace OOP_Phone_Shop_Test 
{ 
    class Apple : Phone 
    { 
     public Apple(string newBrand, string newModel, int newPrice, int newStock) 
      : base(newBrand, newModel, newPrice, newStock) 
     { 
     } 
     public Apple() 
     { 
     } 
     static int thanksApple(ref int thankYou) 
     { 
      Random text = new Random(); 
      thankYou = text.Next(1, 4); 

      switch (thankYou) 
      { 
       case 1: 
        Console.WriteLine("\nThank you for choosing Apple!\n"); 
        break; 
       case 2: 
        Console.WriteLine("\nCongratualation on purchasing your Apple product!\n"); 
        break; 
       case 3: 
        Console.WriteLine("\nWelcome to Apple, you shall receieve your account information and billing through the mail.\n"); 
        break; 
       case 4: 
        Console.WriteLine("\nCell-Sale, number 1 for Apple products and services!\n"); 
        break; 
      } 

      return thankYou; 
     } 
     public override void OrderPhoneApple(Customer objCustomer) 
     { 
      int thankyouApple = 0; 
      stock--; 
      Console.WriteLine("\n\nSold!\n\nName: {0}\nAccount Number: {1}\nAddress: {2}", objCustomer.name, objCustomer.AccountNumber, objCustomer.Address); 
      thanksApple(ref thankyouApple); 
     } 
     public override void AddStock() 
     { 
      stock++; 
      Console.WriteLine("Single stock added!"); 
     } 
     public override void AddMassStock(int MassStock) 
     { 
      stock = stock + MassStock; 
      Console.WriteLine("stock added!"); 
     } 
     public override void RemoveStock() 
     { 
      stock--; 
      Console.WriteLine("Single stock removed!"); 
     } 
     public override void RemoveMassStock(int RemoveMassStock) 
     { 
      stock = stock - RemoveMassStock; 
      Console.WriteLine("stock removed!"); 
     } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace OOP_Phone_Shop_Test 
{ 
    class Customer 
    { 
     public string name; 
     public double balance; 
     public double accountNumber; 
     public string address; 

     public Customer(string newName, double newBalance, double newAccountNumber, string newAddress) 
     { 
      name = newName; 
      balance = newBalance; 
      accountNumber = newAccountNumber; 
      address = newAddress; 
     } 

     public string Name 
     { 
      get 
      { 
       return name; 
      } 
      set 
      { 
       name = value; 
      } 
     } 
     public double Balance 
     { 
      get 
      { 
       return balance; 
      } 
      set 
      { 
       balance = value; 
      } 
     } 
     public double AccountNumber 
     { 
      get 
      { 
       return accountNumber; 
      } 
      set 
      { 
       accountNumber = value; 
      } 
     } 
     public string Address 
     { 
      get 
      { 
       return address; 
      } 
      set 
      { 
       address = value; 
      } 
     } 
     public void BuyPhoneApple(Apple objApplePhone) 
     { 
      if (balance >= objApplePhone.price) 
      { 
       objApplePhone.OrderPhoneApple(this); 
      } 
      else 
      { 
       Console.WriteLine("Not enouogh funds"); 
      } 
     } 
     public void BuyPhoneSamsung(Samsung objSamsungPhone) 
     { 
      if (balance >= objSamsungPhone.price) 
      { 
       objSamsungPhone.OrderPhoneSamsung(this); 
      } 
      else 
      { 
       Console.WriteLine("Not enough funds"); 
      } 
     } 
    } 
} 
+0

Вы можете как-то разрушить свою проблему, а не размещать весь код, который не имеет отношения к делу? – user1767754

+0

У меня есть класс под названием AppleLibrary, который представляет собой список , который состоит из объектов класса телефона, в основном у меня есть C1 и C2, которые являются объектами Customer с предопределенными значениями конструктора. buyPhoneApple - это метод в классе Customer, передает объект этого класса в apple, у которого есть метод, который когда-то вызывал, удаляет одну из этих акций; Мне нужно как-то поместить элемент списка, который пользователь выбирает в ассоциированном вызове C2.buyapplePhone (выбран элемент списка); поэтому он будет продолжать принимать один из запаса в пределах значения конструктора. –

ответ

1

По вашему вопросу и код, который вы в курсе, что вы спрашиваете, что вам нужен способ, чтобы удалить заказанный телефон из магазина яблоко, которое для вас является класс AppleLibrary и использовать приобретенный телефон вниз технологической цепочки.

Прежде всего вам нужно сделать refactor свой код и поместить метод обслуживания для выполнения заказов, связанных с вашими услугами, которые вы набивали в классе модели телефона.

Во-вторых, упростите цепочку наследования, чтобы указать тип телефона, используя свойство значения перечисления.

Затем упростите метод домена клиента, просто удалив все методы Buy ***, затем внедрите общий метод Buy, который принимает объект телефона и передает себя либо телефонному объекту, либо модели в PhoneOrderService, который вы создали ранее. Это может быть представлено в коде, как показано ниже.

public class Customer 
    { 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public double AccountNumber { get; set; } 
     public double AvaliableBalance { get; set; } 

     public void Buy(Phone phone) 
     { 
      if (phone == null) 
       return; 
      var phoneService = new PhoneOrderService(); 

      if (phoneService.PurchasePhone(this, phone.Model)) 
      { 
       Console.WriteLine("{0} phone purchased!", phone.Model); 
      } 
     } 

namespace PhoneApp 
{ 
    public enum PhoneType : int 
    { 
     Apple, 
     Windows, 
     Samsung 
    } 


    public class Phone 
    { 
     public string Brand { get; set; } 
     public string Model { get; set; } 
     public double Price { get; set; } 
     public int QuantityInStock { get; set; } 
     public PhoneType PhoneType { get; set; } 

    } 
} 

namespace PhoneApp 
{ 
    public class PhoneOrderService 
    { 
     // I used a private static list here as a backup storeage for ease of 
     // implementation and simplicity of the example. 
     private static List<Phone> _itemsInStock = new List<Phone>(); 

     public void AddToStock(Phone phone) 
     { 
      if(phone == null) 
       return; 

      _itemsInStock.Add(phone); 
     } 

     //Now add those methods in your apple model to this service. 

     public bool PurchasePhone(Customer customer, string model) 
     { 
      if (customer == null) 
       return false; 

      if (string.IsNullOrWhiteSpace(model)) 
       return false; 

      var phone = _itemsInStock.FirstOrDefault(a => a.Model == model); 


      if (phone != null) 
      { 
       if (customer.AvaliableBalance < phone.Price) 
        return false; 

       customer.AvaliableBalance -= phone.Price; 

       phone.QuantityInStock -= 1;  

       AddToStock(phone); 
      } 

      // then you use the phone to do whatever you like 
      //after return true to the calling method to show that this action ucceeded. 

      return true; 
     } 
    } 
} 


namespace PhoneApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //initialize the PhoneOrderService 
      var phoneOrderService = new PhoneOrderService(); 

      //initialize the phone model 
      var phone1 = new Phone 
      { 
       Model = "IPhone 5", 
       Price = 450, 
       QuantityInStock = 5, 
       Brand = "Brand new", 
       PhoneType = PhoneType.Apple 
      }; 

      //initialize the phone model 
      var phone2 = new Phone 
      { 
       Model = "Nokia Lumia", 
       Price = 500, 
       QuantityInStock = 3, 
       Brand = "Brand new", 
       PhoneType = PhoneType.Windows 
      }; 

      //initialize the phone model 
      var phone3 = new Phone 
      { 
       Model = "Galaxy 4 tab", 
       Price = 350, 
       QuantityInStock = 7, 
       Brand = "Brand new", 
       PhoneType = PhoneType.Samsung 
      }; 

      //Add the phones to the phone order service 
      phoneOrderService.AddToStock(phone1); 
      phoneOrderService.AddToStock(phone2); 
      phoneOrderService.AddToStock(phone3); 


      //Initialize the customer model 
      var customer = new Customer 
      { 
       Name = "Mr Moon", 
       AvaliableBalance = 1000, 
       Address = "41 new street road!", 
       AccountNumber = 1234567889 
      }; 

      customer.Buy(phone1); 

      Console.ReadLine(); 
     } 
    } 
} 
+0

Имейте в виду, что я раньше не использовал перечисление, это только моя вторая неделя ООП, перечислить пока еще не преподавали. –

+0

Хорошо, в этом случае используйте иерархию наследования, которую вы использовали. Теперь в методе 'BuyPhone (Customer customer, Phone phone)' класса ** PhoneOrderService ** передайте объект телефона, который вы хотите купить. Внутри этого метода определите тип телефона в инструкции if/else, проверив тип телефона, например: if (phone.GetType() == typeof (Apple)), а затем поместите логику для обработки яблочного телефона внутри яблока, если блок. Используйте тот же стиль для проверки телефонов заказов. – Cizaphil

+0

Это было исправлено путем изменения типа корпуса, вместо использования списка , используя список и т. Д., Сконфигурировав библиотеку до одной библиотеки, состоящей из трех членов класса списка и инициализируя их как объекты, а затем, используя переменную модели для индексации и сопоставить заказ и удалить соответствующий запас. –

Смежные вопросы