반응형
실습) 다음 시나리오를 만족하는 프로그램을 작성하시오. 회원 관리 프로그램은 콘솔 응용 프로그램이다. |
*2019년 공주대에서 |
mt.cs
namespace 회원_관리_프로그램
{
enum MT
{
NORMAL, SPECIAL
}
}
member.cs
namespace 회원_관리_프로그램
{
internal class Member
{
public Member(string name, string addr)
{
Name = name;
Addr = addr;
lastno++;
no = lastno;
}
public string Name { get; internal set; }
public string Addr { get; internal set; }
readonly int no;
static int lastno;
public int No
{
get
{
return no;
}
}
}
}
SpecialMember.cs
namespace 회원_관리_프로그램
{
internal class SpecialMember : Member
{
public SpecialMember(string name, string addr, string email):base(name,addr)
{
Email = email;
}
public string Email { get; internal set; }
}
}
MemberManager.cs
using System;
using System.Collections;
using System.Collections.Generic;
namespace 회원_관리_프로그램
{
internal class MemberManager
{
List<Member> memebers = new List<Member>();
public int TotalCount
{
get
{
return memebers.Count;
}
}
public Member this[int index]
{
get
{
return memebers[index];
}
}
internal void AddMember(string name, string addr, string email)
{
memebers.Add(new SpecialMember(name, addr, email));
}
internal void AddMember(string name, string addr)
{
memebers.Add(new Member(name, addr));
}
internal bool RemoveMember(int seq)
{
Member m = FindMember(seq);
if(m != null)
{
memebers.Remove(m);
return true;
}
return false;
}
internal Member FindMember(int seq)
{
foreach (Member m in memebers)
{
if (m.No == seq)
{
return m;
}
}
return null;
}
}
}
MyApp.cs
using System;
namespace 회원_관리_프로그램
{
/*회원 관리 프로그램은 응용, 회원 관리자, 회원, 특별 회원 형식으로 구성한다.*/
internal class MyApp
{
MemberManager mm = new MemberManager();
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()
{
//전체 보기에서는 회원 관리자에 보관한 전체 회원의 수를 요청한 후 인덱서를 통해 전체 회원 정보를 출력한다.
int total = mm.TotalCount;
for(int i = 0; i<total; i++)
{
ViewMember(mm[i]);
}
}
private void Search()
{
//회원 검색 기능에서는 검색할 회원의 일련번호를 사용자로부터 입력받아 회원 관리자에게 검색 요청한다.
int seq = 0;
Console.Write("검색할 회원의 일련번호:");
string str = Console.ReadLine();
if (int.TryParse(str, out seq))
{
Member member = mm.FindMember(seq);
if(member !=null)
{
ViewMember(member);
}
else
{
Console.WriteLine("회원 정보를 찾지 못했습니다.");
}
}
else
{
Console.WriteLine("잘못 입력하였습니다.");
}
}
private void ViewMember(Member member)
{
Console.WriteLine("<{0}> 회원 이름:{1}, 주소:{2}",member.No, member.Name, member.Addr);
SpecialMember sm = member as SpecialMember;
if(sm != null)
{
Console.WriteLine(" 이메일:{0}", sm.Email);
}
}
private void Remove()
{
//회원 삭제 기능에서는 삭제할 회원의 일련번호를 사용자로부터 입력받아 회원 관리자에게 삭제요청한다.
int seq = 0;
Console.Write("삭제할 회원의 일련번호:");
string str = Console.ReadLine();
if(int.TryParse(str,out seq))
{
if(mm.RemoveMember(seq))
{
Console.WriteLine("정상적으로 삭제하였습니다.");
}
else
{
Console.WriteLine("삭제 실패하였습니다.");
}
}
else
{
Console.WriteLine("잘못 입력하였습니다.");
}
}
private void Add()
{
//회원 추가를 선택하면 회원 유형을 선택하고
MT mt = ChoiceMemberType();
//회원의 정보를 입력받아
Console.Write("이름:");
string name = Console.ReadLine();
Console.Write("주소:");
string addr = Console.ReadLine();
if (mt!=MT.NORMAL)
{
Console.Write("이메일:");
string email = Console.ReadLine();
mm.AddMember(name, addr, email); //회원 관리자에게 추가요청한다.
}
else
{
//회원 관리자에게 추가요청한다.
mm.AddMember(name, addr);
}
Console.WriteLine("추가");
}
private MT ChoiceMemberType()
{
Console.WriteLine("회원 유형을 선택하세요.(1:일반(디폴트), 2:특별)");
Console.Write("유형:");
string mt = Console.ReadLine();
if(mt == "2")
{
return MT.SPECIAL;
}
return MT.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# 실습] 반도체 장비 관리 프로그램 - 2. 프로토 타이핑 (0) | 2020.09.21 |
---|---|
[C# 실습] 반도체 장비 관리 프로그램 - 1. 단일체 패턴 표현 (0) | 2020.09.21 |
[C# 실습] 반도체 장비 관리 프로그램 (0) | 2020.09.21 |
[C#] 컬렉션(Dictionary) 실습 - 도서 관리 프로그램 (0) | 2019.08.10 |
[C#] 상속과 다형성, 인터페이스 실습 - 도형 (0) | 2019.08.10 |
[C#] 상속과 다형성 실습 - 학생, 학사학생, 마법학생, 운동학생 (0) | 2019.08.09 |
[C#] 상속과 다형성 - 상품, 할인상품 (0) | 2019.08.08 |
[C#] 상속과 다형성 실습 - 밴드(음악가, 피아니스트, 드러머) (0) | 2019.08.08 |
[C#] 캡슐화 - 학생 클래스 정의, 인덱서 포함 (0) | 2019.08.08 |
[C#] 캡슐화 실습 - 학생 클래스 (0) | 2019.08.08 |