본문 바로가기
공부,일/C#

book class 만들기

by fromnothing1 2021. 5. 23.

실행 시키는 클래스

using System;

class Program
{
    static void Main(string[] args)
    {
        BookManager aObject = new BookManager();

        aObject.Run();
    }
}

책의 정보를 기억하는 클래스

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

class Book
{
    //속성: 저자,출판사,제목,가격,
    // 행위 : 
    string Title;
    string Author;
    string Publisher;
    int Price;

    public void getTitle(string Title)
    {
        this.Title = Title;

    }
    public void getAuthor(string Author)
    {
        this.Author = Author;

    }
    public void getPublisher(string Publisher)
    {
        this.Publisher = Publisher;

    }
    public void getPrice(int Price)
    {
        this.Price = Price;

    }
    public void deletTitle()
    {
        this.Title = "";
    }
    public void deletAuthor()
    {
        this.Author = "";
    }

    public void deletPublisher()
    {
        this.Publisher = "";
    }

    public void deletPrice()
    {
        this.Price = 0;
    }



    public Book(string Tilte = "", string Author = "", 
                string Publisher = "", int Price = 0)
    {
        this.Author = Author;
        this.Publisher = Publisher;
        this.Title = Tilte;
        this.Price = Price;

    }

    public void print()
    {
        Console.WriteLine($"책 제목 : {this.Title }");
        Console.WriteLine($"책 저자 : {this.Author }");
        Console.WriteLine($"책 출판사 : {this.Publisher }");
        Console.WriteLine($"책 가격 : {this.Price }원");

    }

    public string print_title()
    {
        
        return Title;
    }


}



 

 

책을 관리하는 클래스

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;


class BookManager
{
    private int Count; // 책장 갯수 
    private List<Book> list;             // 책 목록

    public BookManager()
    {
            list = new List<Book>() {
            new Book("심청전", "미상", "품질재단", 15000),
            new Book("나를 웃게 하는 것들만 곁에 두고 싶다", "마담롤리나", "허밍버드", 15000),
            new Book("69년 전에 이미 지불하셨습니다", "라미 현", "마음의숲", 16000),
            new Book("직업으로서의 예술가", "박희아", "카시오페아", 18000),
            new Book("잠깐 선 좀 넘겠습니다", "최원석", "상상출판", 14200),

        };
        Count = list.Count();
    }


    private void MethodEnd()
    {
        Console.WriteLine("아무키나 누르면 메뉴로 돌아갑니다.");
        Console.ReadKey();
        Console.Clear();
    }


    private void Print()
    {
        Console.WriteLine("----------------BookList 출력------------------");

        foreach (Book item in list)
        {
            item.print();// Book class 의 print
            Console.WriteLine("---------------------------------------------");
        }
        Console.WriteLine("==========================================");
        Console.WriteLine($"전체 책 갯수 {Count}");
        MethodEnd();
    }
    private void Menu()
    {
        Console.WriteLine("");
        Console.WriteLine("******************");
        Console.WriteLine("* 1. Book List   *");
        Console.WriteLine("* 2. Insert      *");
        Console.WriteLine("* 3. Delete      *");
        Console.WriteLine("* 4. Find        *");
        Console.WriteLine("* e. Exit        *");
        Console.WriteLine("******************");
        Console.Write("선택>");

    }

    private string InputBookData(string Category) // null 값이 아닌 string 을 받는 함수 
    {

        string Data;

        while (true)
        {
            Console.WriteLine($"{Category}을 입력하세요");
            Data = Console.ReadLine();
            Console.Clear();
            if (Data.Length == 0)
            {
                Console.WriteLine($"{Category}을 잘못 입력하셨습니다.");
                continue;
            }

            break;
        }

        return Data;
    }
    public void PrintTitle()
    {
        for (int i = 0; i < list.Count(); i++)
        {
             Console.WriteLine($"{i + 1}. {list[i].print_title()}");
        }
    }
    public void Run()
    {
        string sCommand;
        string Name;
        int parse_num;

        while (true)
        {
            Menu();
            sCommand = Console.ReadLine().Trim();
            switch (sCommand)
            {
                case "1":
                    Print();
                    continue;
                case "2":
                    Insert();
                    continue;
                case "3":
                    Delete();
                    continue;
                case "4":
                    Console.WriteLine("찾는 책의 이름이나 숫자를 입력해 주세요");

                    Console.WriteLine("================================================");
                    PrintTitle();
                    Name = InputBookData("이름,숫자").Trim();
                    if (Int32.TryParse(Name, out parse_num))
                    {
                        Find(parse_num);
                    }
                    else
                    {
                        Search(Name);
                    }
                    continue;
                case "Exit":
                case "exit":
                case "e":
                case "E":
                    break;
                default:
                    Console.WriteLine("값이 지정된 범위를 벗어남니다 (1,2,3,4,e, 중에서 선택해주세요)");
                    continue;

            }
            break;

        }
        Console.WriteLine("프로그램 종료");
    }

    private void Insert()
    {
        int parse_num;
        // 책 정보 받는 코드-----------
        list.Add(new Book());
       
        Console.Clear();
        Console.WriteLine("======책 정보 입력====");
        list[Count].getTitle(InputBookData("제목"));
        list[Count].getAuthor(InputBookData("저자"));
        list[Count].getPublisher(InputBookData("출판사"));

        Console.WriteLine("가격을 입력하세요");
        if (Int32.TryParse(Console.ReadLine(), out parse_num))
        {
            list[Count].getPrice(parse_num);
        }
        else
        {
            do// do while 써보고 싶어서 사용함
            {
                Console.Clear();
                Console.WriteLine("가격은 정수형으로 입력해 주세요");

            } while (!Int32.TryParse(Console.ReadLine(), out parse_num));
            list[Count].getPrice(parse_num);
        }
        Count = list.Count();
        Console.WriteLine("입력이 완료 되었습니다.");
        Print();

    }

    private void Search(string Name) // 제목으로 찾는 함수 
    {
        Console.Clear();
        while (true)
        {
            int SearchCount = 0;
            Console.WriteLine($"찾는 제목 : {Name}");
            Console.WriteLine("==========================================");
            foreach (var Temp in list)
            { 
                if (Temp.print_title().Contains(Name))
                {
                    Temp.print();
                    Console.WriteLine("==========================================");
                    SearchCount++;
                }
                
            }

            if (SearchCount == 0)
            {
                Console.WriteLine("검색된 책이 없습니다.");
                Name = InputBookData("재검색 하시겠습니까?(y/n)");
                switch (Name)
                {
                    case "y":
                    case "Y":
                    case "yes":
                    case "Yes":
                    case "YES":
                        PrintTitle();
                        Name = InputBookData("제목");
                        Search(Name);  // 재귀 함수 사용해봄
                        continue;
                    default:
                        break;
                }
            }
            else
            {
                Console.WriteLine($"찾은 책 개수 {SearchCount}");
            }
            break;
        }


        MethodEnd();
    }
    
    
    private int Find(int Num)// 숫자로 찾는 함수 
    {
        string input;
        int parse_num;

        while (true)
        {
            if ((1 > Num )|| (Count < Num ))
            {
                while (true)
                {
                    PrintTitle();
                    Console.WriteLine("========================");
                    Console.WriteLine("책 번호 범위를 벗어나는 숫자입니다.");
                    Console.Write($"1~{Count}사이의 ");
                    input = InputBookData("숫자");
                    if (Int32.TryParse(input, out parse_num))
                    {
                        Num = parse_num;
                        break;
                    }
                    else
                    {
                        continue;
                    }

                }
            }
            else
            {
                Console.WriteLine("========================");
                list[Num - 1].print();
                MethodEnd();
                return Num - 1;
            }

        }
    }

    
    void Delete()// 삭제 기능 구현
    {
        bool Search_result = true;
        Console.Clear();
        Console.WriteLine("======책 삭제 =========");
        PrintTitle();
        string Name = InputBookData("이름");

        for (int i = 0; i < Count; i++)
        {
            if (list[i].print_title().Contains(Name))
            {
                Search_result = false;
                Console.WriteLine("==========================");
                list[i].print();
                Console.WriteLine("==========================");
                string YesNo = InputBookData("삭제할까요? (y/n)");
                switch (YesNo)
                {
                    case "y":
                    case "Y":
                    case "yes":
                    case "Yes":
                    case "YES":
                        list.RemoveAt(i);
                        Count--;
                        Console.WriteLine("삭제 완료");
                        break;
                    default:
                        break;
                }
            }

        }
        if (Search_result)
        {
            Console.WriteLine("삭제할 책이 없습니다.");
        }
        MethodEnd();
        
    }
    
}

'공부,일 > C#' 카테고리의 다른 글

210525  (0) 2021.05.25
210524  (0) 2021.05.24
묵시적 형변환&float에 실수 대입  (0) 2021.05.12
디버그 모드  (0) 2021.05.12
visual studio dot.Net 설치 for c# & 한국어패치  (0) 2021.05.11

댓글