using System;
using System.Collections.Generic;

namespace InventoryExample
{
    // 아이템 클래스
    class Item
    {
        public string Name { get; set; }
        public int Quantity { get; set; }

        public Item(string name, int quantity)
        {
            Name = name;
            Quantity = quantity;
        }
    }

    // 인벤토리 클래스
    class Inventory
    {
        private List<Item> items;

        public Inventory()
        {
            items = new List<Item>();
        }

        public void AddItem(string name, int quantity)
        {
            Item existingItem = FindItem(name);
            if (existingItem != null)
            {
                existingItem.Quantity += quantity;
            }
            else
            {
                Item newItem = new Item(name, quantity);
                items.Add(newItem);
            }
        }

        public void RemoveItem(string name, int quantity)
        {
            Item existingItem = FindItem(name);
            if (existingItem != null)
            {
                existingItem.Quantity -= quantity;
                if (existingItem.Quantity <= 0)
                {
                    items.Remove(existingItem);
                }
            }
        }

        public void DisplayInventory()
        {
            Console.WriteLine("*************************************");
            Console.WriteLine("인벤토리:");
            
            foreach (Item item in items)
            {
                Console.WriteLine($"{item.Name}x{item.Quantity}");
            }
            Console.WriteLine("*************************************");
        }

        public void SortInventory(bool ascending)
        {
            if (ascending)
            {
                items.Sort((x, y) => x.Name.CompareTo(y.Name));
            }
            else
            {
                items.Sort((x, y) => y.Name.CompareTo(x.Name));
            }
        }

        public void ClearInventory()
        {
            items.Clear();
            Console.WriteLine("인벤토리를 초기화했습니다.");
        }

        private Item FindItem(string name)
        {
            foreach (Item item in items)
            {
                if (item.Name == name)
                {
                    return item;
                }
            }
            return null;
        }
    }

    // 인벤토리 메뉴 클래스
    class ItemMenu
    {
        private Inventory inventory;

        public ItemMenu()
        {
            inventory = new Inventory();
        }

        public void ShowMenu()
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("*************************************");
                Console.WriteLine("인벤토리 메뉴:");
                Console.WriteLine("1. 아이템 추가");
                Console.WriteLine("2. 아이템 삭제");
                Console.WriteLine("3. 아이템 목록 표시");
                Console.WriteLine("4. 인벤토리 정렬");
                Console.WriteLine("5. 인벤토리 초기화");
                Console.WriteLine("6. 종료");
                Console.WriteLine("*************************************");
                Console.Write("번호를 입력하세요: ");
                int choice = Convert.ToInt32(Console.ReadLine());

                switch (choice)
                {
                    case 1:
                        AddItem();
                        break;
                    case 2:
                        RemoveItem();
                        break;
                    case 3:
                        DisplayItemList();
                        break;
                    case 4:
                        SortInventoryMenu();
                        break;
                    case 5:
                        ClearInventory();
                        break;
                    case 6:
                        Console.WriteLine("인벤토리를 종료합니다.");
                        return;
                    default:
                        Console.WriteLine("유효하지 않은 선택입니다. 다시 시도해주세요.");
                        break;
                }

                Console.WriteLine("인벤토리 메뉴로 돌아가려면 1을 누르세요. 종료하려면 다른 키를 누르세요.");
                Console.Write("번호를 입력하세요: ");
                int returnChoice = Convert.ToInt32(Console.ReadLine());
                if (returnChoice != 1)
                {
                    Console.WriteLine("인벤토리를 종료합니다.");
                    return;
                }
            }
        }

        private void AddItem()
        {
            Console.Write("아이템 이름: ");
            string name = Console.ReadLine();
            Console.Write("아이템 수량: ");
            int quantity = Convert.ToInt32(Console.ReadLine());

            inventory.AddItem(name, quantity);
            Console.WriteLine("아이템이 성공적으로 추가되었습니다.");
        }

        private void RemoveItem()
        {
            Console.Write("아이템 이름: ");
            string name = Console.ReadLine();
            Console.Write("아이템 수량: ");
            int quantity = Convert.ToInt32(Console.ReadLine());

            inventory.RemoveItem(name, quantity);
            Console.WriteLine("아이템이 성공적으로 삭제되었습니다.");
        }

        private void DisplayItemList()
        {
            inventory.DisplayInventory();
        }

        private void SortInventory(bool ascending)
        {
            inventory.SortInventory(ascending);
            Console.WriteLine("인벤토리가 성공적으로 정렬되었습니다.");
        }

        private void SortInventoryMenu()
        {
            Console.WriteLine("*************************************");
            Console.WriteLine("인벤토리 정렬:");
            Console.WriteLine("1. 오름차순");
            Console.WriteLine("2. 내림차순");
            Console.WriteLine("3. 취소");
            Console.WriteLine("*************************************");
            Console.Write("번호를 입력하세요: ");
            int sortChoice = Convert.ToInt32(Console.ReadLine());

            switch (sortChoice)
            {
                case 1:
                    SortInventory(true);
                    break;
                case 2:
                    SortInventory(false);
                    break;
                case 3:
                    break;
                default:
                    Console.WriteLine("유효하지 않은 선택입니다. 다시 시도해주세요.");
                    break;
            }
        }

        private void ClearInventory()
        {
            inventory.ClearInventory();
        }
    }

    // 메인 클래스
    class Program
    {
        static void Main(string[] args)
        {
            ItemMenu itemMenu = new ItemMenu();
            itemMenu.ShowMenu();
        }
    }
}

'KDT > C# 프로그래밍' 카테고리의 다른 글

SCV  (0) 2023.07.21
도전문제 4번  (0) 2023.07.20
도전 문제 3번  (0) 2023.07.20
도전문제 2번  (0) 2023.07.20
도전문제 1번  (0) 2023.07.20

+ Recent posts