반응형
실습) 다음 시나리에 맞게 프로그램을 작성하시오. 도서 관리 프로그램은 콘솔 응용 프로그램이다. |
*2019년 공주대에서 |
BT.cs
namespace 도서_관리_프로그램
{
/// <summary>
/// 도서 유형 열거형
/// </summary>
public enum BT
{
/// <summary>
/// 일반 도서
/// </summary>
NORMAL,
/// <summary>
/// 프로그래밍 도서
/// </summary>
SPECIAL
}
}
Book.cs
namespace 도서_관리_프로그램
{
/// <summary>
/// 도서 클래스
/// </summary>
public class Book
{
/// <summary>
/// 생성자
/// </summary>
/// <param name="isbn">isbn</param>
/// <param name="title">도서제목</param>
/// <param name="publisher">출판사</param>
/// <param name="price">가격</param>
/// <param name="author">저자</param>
public Book(string isbn, string title, string publisher, int price,string author)
{
ISBN = isbn;
Title = title;
Publisher = publisher;
Price = price;
Author = author;
}
/// <summary>
/// ISBN 속성 - 가져오기
/// </summary>
public string ISBN { get; private set; }
/// <summary>
/// 제목 속성 - 가져오기
/// </summary>
public string Title { get; private set; }
/// <summary>
/// 출판사 속성 - 가져오기
/// </summary>
public string Publisher { get; private set; }
/// <summary>
/// 저자 속성 - 가져오기
/// </summary>
public string Author { get; private set; }
/// <summary>
/// 가격 속성 - 가져오기
/// </summary>
public int Price { get; private set; }
}
}
ProgrammingBook.cs
namespace 도서_관리_프로그램
{
/// <summary>
/// 프로그래밍 도서 클래스 - Book 클래스에서 파생
/// </summary>
public class ProgrammingBook : Book
{
/// <summary>
/// 생성자
/// </summary>
/// <param name="isbn">isbn</param>
/// <param name="title">제목</param>
/// <param name="publisher">출판사</param>
/// <param name="price">가격</param>
/// <param name="author">저자</param>
/// <param name="dev_lan">개발 언어</param>
public ProgrammingBook(string isbn, string title, string publisher, int price, string author,string dev_lan):base(isbn,title,publisher,price,author)
{
DevLan = dev_lan;
}
/// <summary>
/// 개발 언어 속성 - 가져오기
/// </summary>
public string DevLan { get; private set; }
}
}
BookManager.cs
using System;
using System.Collections;
using System.Collections.Generic;
namespace 도서_관리_프로그램
{
/// <summary>
/// 도서 관리자 클래스
/// </summary>
public class BookManager:IEnumerable
{
Dictionary<string, Book> bdic = new Dictionary<string, Book>();
/// <summary>
/// 도서 추가 메서드
/// </summary>
/// <param name="isbn">isbn</param>
/// <param name="title">제목</param>
/// <param name="publisher">출판사</param>
/// <param name="price">가격</param>
/// <param name="author">저자</param>
/// <param name="dev_lan">개발 언어</param>
public void AddBook(string isbn, string title, string publisher, int price, string author,string dev_lan)
{
bdic[isbn] = new ProgrammingBook(isbn, title, publisher, price, author, dev_lan);
}
/// <summary>
/// 도서 추가 메서드
/// </summary>
/// <param name="isbn">isbn</param>
/// <param name="title">제목</param>
/// <param name="publisher">출판사</param>
/// <param name="price">가격</param>
/// <param name="author">저자</param>
public void AddBook(string isbn, string title, string publisher, int price,string author)
{
bdic[isbn] = new Book(isbn, title, publisher, price, author);
}
/// <summary>
/// 도서 삭제 메서드
/// </summary>
/// <param name="isbn">isbn</param>
/// <returns>삭제 성공 여부</returns>
public bool RemoveBook(string isbn)
{
if(bdic.ContainsKey(isbn))
{
bdic.Remove(isbn);
return true;
}
return false;
}
/// <summary>
/// 도서 검색 메서드
/// </summary>
/// <param name="isbn">isbn</param>
/// <returns>도서 개체</returns>
public Book FindBook(string isbn)
{
if(bdic.ContainsKey(isbn))
{
return bdic[isbn];
}
return null;
}
/// <summary>
/// IEnumerable 인터페이스에 약속한 메서드 구현
/// </summary>
/// <returns>IEnumerator</returns>
public IEnumerator GetEnumerator()
{
return bdic.Values.GetEnumerator();
}
}
}
MyApp.cs
using System;
namespace 도서_관리_프로그램
{
/*도서 관리 프로그램은 응용, 도서 관리자, 도서, 프로그래밍 도서 형식으로 구성한다.*/
class MyApp
{
BookManager bm = new BookManager();
internal void Run()//사용자와 상호작용
{
//응용은 사용자에게 메뉴를 보여주고 선택한 메뉴를 수행하는 것을 반복한다.
ConsoleKey key = ConsoleKey.NoName;
while ((key = SelectMenu()) != ConsoleKey.Escape)
{
switch (key)
{
case ConsoleKey.F1: Add(); break;
case ConsoleKey.F2: Remove(); break;
case ConsoleKey.F3: Search(); break;
case ConsoleKey.F4: ViewAll(); break;
default: Console.WriteLine("잘못 선택하였습니다."); break;
}
Console.WriteLine("아무 키나 누르세요.");
Console.ReadKey(true);
}
}
private void ViewAll()
{
//전체 보기에서는 foreach 문을 이용하여 전체 도서 정보를 출력한다.
foreach(Book book in bm)
{
ViewBook(book);
}
}
private void Search()
{
//도서 검색 기능에서는 검색할 도서의 ISBN을 사용자로부터 입력받아 도서 관리자에게 검색 요청한다.
Console.Write("검색할 도서의 ISBN:");
string isbn = Console.ReadLine();
Book book = bm.FindBook(isbn);
if (book != null)
{
ViewBook(book);
}
else
{
Console.WriteLine("도서 정보를 찾지 못했습니다.");
}
}
private void ViewBook(Book book)
{
Console.WriteLine("=== {0} , {1} ", book.ISBN, book.Title);
Console.WriteLine(" 출판사:{0} 저자:{1} 가격:{2}", book.Publisher, book.Author, book.Price);
ProgrammingBook pb = book as ProgrammingBook;
if(pb != null)
{
Console.WriteLine(" 개발 언어:{0}", pb.DevLan);
}
}
private void Remove()
{
//도서 삭제 기능에서는 삭제할 회원의 ISBN을 사용자로부터 입력받아 도서 관리자에게 삭제요청한다.
Console.Write("삭제할 도서의 ISBN:");
string isbn = Console.ReadLine();
if(bm.RemoveBook(isbn))
{
Console.WriteLine("삭제하였습니다.");
}
else
{
Console.WriteLine("삭제 실패하였습니다.");
}
}
private void Add()
{
//도서 추가를 선택하면 도서 유형을 선택하고
BT bt = ChoiceBookType();
//도서는 ISBN(주요키, 10자리), 도서명, 저자, 출판사, 가격 정보를 사용자로부터 입력받는다.
Console.Write("ISBN(10자리):");
string isbn = Console.ReadLine();
Console.Write("도서명:");
string title = Console.ReadLine();
Console.Write("출판사:");
string publisher = Console.ReadLine();
Console.Write("가격:");
int price = 0;
int.TryParse(Console.ReadLine(), out price);
Console.Write("저자:");
string author = Console.ReadLine();
if (bt != BT.NORMAL)
{
Console.Write("개발 언어:");
string dev_lan = Console.ReadLine();
bm.AddBook(isbn,title,publisher,price,author,dev_lan); //도서 관리자에게 추가 요청한다.
}
else
{
//도서 관리자에게 추가 요청한다.
bm.AddBook(isbn,title,publisher,price,author);
}
Console.WriteLine("추가");
}
private BT ChoiceBookType()
{
Console.WriteLine("도서 유형을 선택하세요.(1:일반(디폴트), 2:프로그래밍 도서)");
Console.Write("유형:");
string bt = Console.ReadLine();
if (bt == "2")
{
return BT.SPECIAL;
}
return BT.NORMAL;
}
private ConsoleKey SelectMenu()
{
//메뉴에는 도서 추가,도서 삭제, 도서 검색, 전체 도서 보기, 프로그램 종료가 있다.
Console.Clear();
Console.WriteLine("=== 메인 메뉴 ===");
Console.WriteLine("F1: 추가");
Console.WriteLine("F2: 삭제");
Console.WriteLine("F3: 검색");
Console.WriteLine("F4: 전체 보기");
Console.WriteLine("ESC: 종료");
return Console.ReadKey(true).Key;
}
}
}
Program.cs
namespace 도서_관리_프로그램
{
class Program
{
static void Main(string[] args)
{
MyApp app = new MyApp();
app.Run();
}
}
}
반응형
'언어 자료구조 알고리즘 > 프로그래밍 실습' 카테고리의 다른 글
[C# 실습 시나리오] 레코드 코팅 - 반도체 장비 및 제어시스템 개발자 양성 과정 (0) | 2020.10.06 |
---|---|
[C# 실습] 반도체 장비 관리 프로그램 - 3. 상세 구현 (0) | 2020.09.22 |
[C# 실습] 반도체 장비 관리 프로그램 - 2. 프로토 타이핑 (0) | 2020.09.21 |
[C# 실습] 반도체 장비 관리 프로그램 - 1. 단일체 패턴 표현 (0) | 2020.09.21 |
[C# 실습] 반도체 장비 관리 프로그램 (0) | 2020.09.21 |
[C#] 상속과 다형성, 인터페이스 실습 - 도형 (0) | 2019.08.10 |
[C#] 컬렉션 실습 - IList 인터페이스 구현 약속한 컬렉션 (0) | 2019.08.09 |
[C#] 상속과 다형성 실습 - 학생, 학사학생, 마법학생, 운동학생 (0) | 2019.08.09 |
[C#] 상속과 다형성 - 상품, 할인상품 (0) | 2019.08.08 |
[C#] 상속과 다형성 실습 - 밴드(음악가, 피아니스트, 드러머) (0) | 2019.08.08 |