언어 자료구조 알고리즘/프로그래밍 실습

[NCS 실습, C#] 프로그래밍 언어 활용, 라이브러리 활용하기 - 회원 관리 프로그램 소스 코드

언제나휴일 2018. 10. 11. 10:04
반응형

[NCS 실습, C#] 프로그래밍 언어 활용, 라이브러리 활용하기 - 회원 관리 프로그램 소스 코드



- 프로젝트 제목

회원 관리 프로그램

 

- 프로그램 유형

콘솔 응용 프로그램

 

- 프로그램 구성

데이터: 회원 형식 정의, 라이브러리

엔진: 회원 관리자 형식 정의, 라이브러리

응용: 회원 관리 응용, 콘솔 응용 프로그램

 

- 동작

사용자는 메뉴 선택을 통해 다음 기능을 반복 수행할 수 있다.

* 회원 데이터 추가

  (아이디, 이름, 주소, 나이)

* 회원 데이터 삭제

* 회원 데이터 검색

  (회원 아이디로 검색, 이름으로 검색)

* 전체 회원 데이터 보기

  (간략 정보<아이디, 이름> 보기,

   세부 정보<이이디, 이름, 주소, 나이> 보기)

 

Usecase 다이어그램


 

컴포넌트 다이어그램


- MemberLib: 클래스 라이브러리

Member.cs

namespace MemberLib

{

    /// <summary>

    /// 회원 클래스

    /// </summary>

    public class Member

    {

        /// <summary>

        /// 아이디 속성 - 가져오기

        /// </summary>

        public string ID

        {

            get;

            private set;

        }

        /// <summary>

        /// 이름 속성 - 가져오기

        /// </summary>

        public string Name

        {

            get;

            private set;

        }

        /// <summary>

        /// 주소 속성 - 가져오기

        /// </summary>

        public string Address

        {

            get;

            private set;

        }

        /// <summary>

        /// 나이 속성 - 가져오기

        /// </summary>

        public int Age

        {

            get;

            private set;

        }

        /// <summary>

        /// 회원 클래스 생성자

        /// </summary>

        /// <param name="id">아이디</param>

        /// <param name="name">이름</param>

        /// <param name="address">주소</param>

        /// <param name="age">나이</param>

        public Member(string id, string name, string address, int age)

        {

            ID = id;

            Name = name;

            Address = address;

            Age = age;

        }

        /// <summary>

        /// ToString 재정의

        /// </summary>

        /// <returns>회원 아이디</returns>

        public override string ToString()

        {

            return ID;

        }

    }

}

 

- MemberManagerLib : 클래스 라이브러리(MemberLib.dll 참조)

MemberManager.cs

using MemberLib;

using System.Collections.Generic;

 

namespace MemberManagerLib

{

    /// <summary>

    /// 회원 관리자 클래스

    /// </summary>

    public class MemberManager

    {

        Dictionary<string, Member> mdic = new Dictionary<string, Member>();

        /// <summary>

        /// 회원 데이터 추가 메서드

        /// </summary>

        /// <param name="id">아이디</param>

        /// <param name="name">이름</param>

        /// <param name="addr">주소</param>

        /// <param name="age">나이</param>

        /// <returns>추가 여부</returns>

        public bool AddMember(string id, string name,string addr,int age)

        {

            if(mdic.ContainsKey(id))

            {

                return false;

            }

            mdic[id] = new Member(id, name, addr, age);

            return true;

        }

 

        /// <summary>

        /// 회원 데이터 삭제 메서드

        /// </summary>

        /// <param name="id">아이디</param>

        /// <returns>삭제 여부</returns>

        public bool RemoveMember(string id)

        {

            if(mdic.ContainsKey(id))

            {

                mdic.Remove(id);

                return true;

            }

            return false;

        }

        /// <summary>

        /// 회원 데이터 검색 메서드

        /// </summary>

        /// <param name="cdele">비교 대리자</param>

        /// <returns>조건에 만족하는 회원 컬렉션</returns>

        public List<Member> SearchMember(CompareDele cdele)

        {

            List<Member> members = new List<Member>();

            foreach(Member member in mdic.Values)

            {

                if(cdele(member))

                {

                    members.Add(member);                   

                }

            }

            return members;

        }

        /// <summary>

        /// 모든 멤버에게 특정 행위를 수행하는 메서드

        /// </summary>

        /// <param name="doitmember">수행할 메서드의 대리자</param>

        public void DoItAll(DoItMember doitmember)

        {

            foreach(Member member in mdic.Values)

            {

                doitmember(member);

            }

        }

    }

}

 

 

MMDelegate.cs

using MemberLib;

 

namespace MemberManagerLib

{

    /// <summary>

    /// 특정 조건에 만족하는 회원인지 판별하는 대리자

    /// </summary>

    /// <param name="member">회원</param>

    /// <returns>특정 조건에 만족 여부</returns>

    public delegate bool CompareDele(Member member);

    /// <summary>

    /// 특정 회원에 수행하는 작업을 대행하는 대리자

    /// </summary>

    /// <param name="member">회원</param>

    public delegate void DoItMember(Member member);

}

 

 

- MemberManagerApp: 콘솔 응용 프로그램(MemberManagerLib.dll, MemberLib.dll 참조)

MMApp.cs

using MemberLib;

using MemberManagerLib;

using System;

using System.Collections.Generic;

 

namespace MemberManagerApp

{

    class MMApp

    {

        #region 단일체

        internal static MMApp Singleton

        {

            get;

            private set;

        }

        static MMApp()

        {

            Singleton = new MMApp();

        }

        MMApp()

        {

        }

        #endregion

 

        MemberManager mm = new MemberManager();

 

        internal void Run()

        {

            ConsoleKey key;

            while((key = SelectMenu())!=ConsoleKey.Escape)

            {

                switch (key)

                {

                    case ConsoleKey.F1: AddMember(); break;

                    case ConsoleKey.F2: RemoveMember(); break;

                    case ConsoleKey.F3: SearchMember(); break;

                    case ConsoleKey.F4: ViewAll(); break;

                    default: Console.WriteLine("잘못 선택하였습니다."); break;

                }

                Console.WriteLine("아무 키나 누르세요.");

                Console.ReadKey(true);

            }

        }

 

        private void ViewAll()

        {

            Console.WriteLine("선택한 기능:  전체 회원 데이터 보기");

           

            Console.WriteLine("*** F1:상세 보기 그 외: 간략 보기");

            if(Console.ReadKey(true).Key == ConsoleKey.F1)

            {

                mm.DoItAll(VerifyView);

            }

            else

            {

                mm.DoItAll(SimplyView);

            }

        }

        static void VerifyView(Member member)

        {

            Console.WriteLine("아이디:{0}", member.ID);

            Console.WriteLine("*  이름:{0}", member.Name);

            Console.WriteLine("*  주소:{0}", member.Address);

            Console.WriteLine("*  나이:{0}", member.Age);

        }

        static void SimplyView(Member member)

        {

            Console.WriteLine("<{0}:{1}>", member.ID, member.Name);

        }

 

        string dummy = string.Empty;//검색을 위해 필요한 더미 멤버

        private void SearchMember()

        {

            Console.WriteLine("선택한 기능: 회원 데이터 검색");

 

            Console.WriteLine("*** F1:ID로 검색, 그 외: 이름으로 검색");

 

 

            List<Member> members;

            if (Console.ReadKey(true).Key == ConsoleKey.F1)

            {

                Console.Write("검색할 회원 ID:");

                dummy = Console.ReadLine();

                members = mm.SearchMember(CompareByID);

            }

            else

            {

                Console.Write("검색할 회원 이름:");

                dummy = Console.ReadLine();

                members = mm.SearchMember(CompareByName);

            }

 

            Console.WriteLine("=== 검색 결과");

            if(members.Count == 0)

            {

                Console.WriteLine("조건에 맞는 회원 데이터는 없네요.");

                return;

            }

            foreach (Member member in members)

            {

                VerifyView(member);

            }

        }

        bool CompareByID(Member member)

        {

            return member.ID == dummy;

        }

        bool CompareByName(Member member)

        {

            return member.Name == dummy;

        }

 

        private void RemoveMember()

        {

            Console.WriteLine("선택한 기능:  회원 데이터 삭제");

            Console.Write("삭제할 회원 ID:");

            string id = Console.ReadLine();

            if(mm.RemoveMember(id))

            {

                Console.WriteLine("삭제하였습니다.");

            }

            else

            {

                Console.WriteLine("회원 데이터 삭제 실패!!!");

                Console.WriteLine("존재하는 회원 ID인지 확인해 보세요.");

            }

        }

 

        private void AddMember()

        {

            Console.WriteLine("선택한 기능:  회원 데이터 추가");

            Console.Write("추가할 회원 ID:");

            string id = Console.ReadLine();

            Console.Write("이름:");

            string name = Console.ReadLine();

            Console.Write("주소:");

            string addr = Console.ReadLine();

            Console.Write("나이:");

            int age = -1;

            int.TryParse(Console.ReadLine(), out age);

 

            if(mm.AddMember(id,name,addr,age))

            {

                Console.WriteLine("추가하였습니다.");

            }

            else

            {

                Console.WriteLine("회원 데이터 추가 실패!!!");

                Console.WriteLine("이미 존재하는 아이디인지 확인하세요.");

            }

 

        }

 

        private ConsoleKey SelectMenu()

        {

            Console.Clear();

            Console.WriteLine("*** 회원 관리 프로그램");

            Console.WriteLine("*** F1: 회원 데이터 추가");

            Console.WriteLine("*** F2: 회원 데이터 삭제");

            Console.WriteLine("*** F3: 회원 데이터 검색");

            Console.WriteLine("*** F4: 전체 회원 데이터 보기");

            return Console.ReadKey(true).Key;

        }

    }

}

 

 

Program.cs

namespace MemberManagerApp

{

    class Program

    {

        static void Main(string[] args)

        {

            MMApp app = MMApp.Singleton;

            app.Run();

        }

    }

}

 

 


반응형