Category Archives: Homework

실습숙제 5 (Due by 12/7)

 

□ 단원 : 표준 컨트롤 & 대화상자 & 다양한 뷰 클래스


□ 목표 : MFC 대화상자 디자인 & 콘트롤 클래스 사용 연습


□ 주요 연습 내용 : CDialog, CButton, CStatic, CListCtrl, CSliderCtrl 


□ 준비자료 : SimpleMp3.zip

1379737116.zip
 

[연습문제] Ex5 (Due by 12/7 일 24시까지)


-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex5.zip으로 묶어서 낼 것. 보고서 (30%)


 


참고: VC++는 MFC dialog 기반 응용프로그램을 작성한다.


http://dis.dankook.ac.kr/lectures/hci08/entry/MFC-Dialog-based-Application-Program



 


0. 생성한 프로그램의 메인 프레임의 Title을 “HCI2_Ex5_이름_학번”으로 바꾼다. (힌트: Resource View에서 String Table의 IDR_MAINFRAME에 Caption을 “HCI2_Ex5_<이름>_<학번>”으로 하면 됨)




1. SimpleMp3라는 대화상자기반 프로젝트를 생성한다. (즉, Application Type에서 SDI나 MDI 대신, Dialog-based를 선택한다.) 그리고, MP3 파일을 재생할 수 있도록 fmod 사운드 라이브러리를 추가한다. (fmod.h와 fmoddvc.lib를 프로젝트에 추가하고, 프로젝트 속성에서 Linker->Additional Dependencies에 comctl32.lib odbc32.lib odbccp32.lib shlwapi.lib를 넣는다)




2. Resource View의 Bitmap에 Play, Pause, Stop, Back, Forward, Open 비트맵을 로딩한다. 그리고 Dialog에서 출력화면을 위한 Dialog (IDD_SIMPLEMP3_DIALOG)를 작성한다. (10%) 


-Toolbox에서 (현재 재생되고 있는 MP3를 보여줄) Static Control, (Play, Pause, Stop, Back, Forward, Open 비트맵으로 로딩한) Button Control, (MP3 파일목록 리스트 출력을 위한) List Control, (MP3 사운드의 볼륨을 조절해주는) Silder Control을 넣는다.


-List Control의 속성 (Properties) 창에서 View를 Report로 바꾼다.


-Slider Control의 속성 (Properties) 창에서 Orientation을 Vertical로 바꾼다.


사용자 삽입 이미지


3. 대화상자에 Static Control을 추가하고 현재 재생되고 있는 MP3 파일 제목을 출력한다. (10%)


-Add Member Variable을 Value variable로 해서 m_strMpName 추가


 DDX_Text(pDX, IDC_TEXT, m_strMpName) 추가됨


-새로운 MP3 파일이 재생될 시, 해당 MP3파일 제목을 출력할 수 있도록, UpdateData(FALSE)를 불러서 정적 콘트롤 값을 업데이트 시킨다.


-현재 MP3 재생을 멈추고 있으면 m_strMpName=“”로 만들어주고, UpdateData(FALSE)를 불러서 정적 콘트롤 값을 업데이트 시킨다.




4. 대화상자에 Slider를 추가하고, 슬라이더를 잡고 위아래로 움직이면 재생 사운드 볼륨을 제어할 수 있다. (10%)


-Add Member Variable을 control variable로 해서 m_ctrlSlider 추가


 DDX_Control(pDX, IDC_SLIDER, m_ctrlSlider) 추가됨


-대화상자의 OnInitDialog 함수에서 SetRange(0,255,FALSE) 등 슬라이더 콘트롤 초기화 (즉: 0=최소볼륨 & 255=최대볼륨)


OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)를 사용하여 현재 슬라이더의 위치에 따라 Volume 함수를 사용하여 제어된다.




5. 대화상자에 List Control을 추가하고 리스트에 재생하고자 하는 MP3 파일을 선택할 수 있도록 한다. (10%)


-Add Member Variable을 Control variable로 해서 m_ctrlList 추가


 DDX_Control(pDX, IDC_LIST, m_ctrlList) 추가됨


-대화상자의 OnInitDialog 함수에서 InsertColumn 등 리스트 콘트롤 초기화


이때, 리스트의 Column은 No.(번호)와 Name(파일명)과 Path(패스명)로 구성됨


-OnLvnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult)를 사용하여 현재


리스트에서 아이템이 선택되면 바로 그 MP3 파일이 재생(Play)될 수 있도록 한다.




6. 대화상자에서 Open 버튼을 누르면 FileDialog가 나와서 MP3 파일을 원하는 만큼 여러 개 선택할 수 있게 한다. 그리고 파일을 선택하고 열기하면 대화상자의 리스트 콘트롤에 파일들이 추가된다. (10%)


-CFileDialog의 dwFlags를 아래와 같이 바꿔주면 여러 개 파일을 선택할 수 있다. OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_FILEMUSTEXIST| OFN_EXPLORER|OFN_ALLOWMULTISELECT|OFN_LONGNAMES|OFN_ENABLESIZ


-먼저 RemoveAllListRecords함수를 호출하여 리스트에 있는 파일을 지워서 초기화


-그리고, 선택된 파일을 읽어서 AddRecordToList함수를 호출하여 파일명(번호, 파일명, 패스명)을 추가한다.


사용자 삽입 이미지사용자 삽입 이미지
 


7. 대화상자에서 Play, Pause, Stop 버튼을 누르면 리스트에 현재 선택된 MP3 파일을 재생, 잠시멈춤, 멈춤 시킬 수 있다. (10%)


-대화상자 버튼에서 Add Event Handler 로  BN_CLICKED 이벤트에 함수추가


-제공하는 Play(), Pause(BOOL), Stop() 사용




8. 대화상자에서 Back, Forward 버튼을 누르면 리스트에 현재 선택된 MP3 파일의 전후로 옮기면서 MP3 파일을 재생시킬 수 있다. (10%)


-대화상자 버튼에서 Add Event Handler 로  BN_CLICKED 이벤트에 함수추가


-현재 리스트뷰에서 선택된 파일의 위치를 찾아서 그 위치에서 앞뒤로 바뀌어지는 기능을 추가


GetNextItem(-1, LVIS_SELECTED|LVIS_FOCUSED) // 현재 리스트에서 선택되어있는 아이템의 index를 받아옴


-SetSelectionMark(index); // 원하는 index의 아이템을 select


-SetItemState(-1, 0, LVIS_SELECTED|LVIS_FOCUSED); // 전체 아이템을 deselect


-SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); // 원하는 index의 아이템을 select하고 focus




9. 본인이 좋아하는 10개 이상의 MP3 파일을 로딩하여, 위에서 언급한 모든 기능을 구현 데모한다. (보고서점수에 포함)



실습숙제 4 (Due by 11/14)


□ 단원 : 사용자 인터페이스 & 파일입출력


□ 목표 : 메뉴 아이템 및 툴바 추가 연습 & 직렬화 및 파일 입출력


□ 주요 연습 내용 : Doc/View Architecture, Menu, Toolbar, Serialize


□ 준비자료 : SimpleShapeDrawing.zip


(SimpleMouseDrawing-GUI, SimplePointSerialize, SimpleTextListFile 등을 참고할 것)
1302908164.zip
[연습문제] Ex4 (Due by 11/14 금 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex4.zip으로 묶어서 낼 것. 보고서 (30%)


0. 생성한 프로그램의 메인 프레임의 Title을 “HCI2_Ex4_이름_학번”으로 바꾼다. (힌트: Resource View에서 String Table의 IDR_MAINFRAME에 Caption을 “HCI2_Ex4_<이름>_<학번>”으로 하면 됨)



1. 직렬화가 가능한 CShapeObject 클래스와 CShapeObject 클래스를 상속한 CLineObject, CRectangleObject, CEllipseObject 클래스를 작성한다. (20%)



CShapeObject : public CObject
-멤버 변수:
  o 도형의 종류 (m_nShapeMode),
  o 시작/끝점 (m_ptStart, m_ptEnd),
  o 펜색깔 (m_Color),
  o 펜두께(m_nThickness)
-멤버 함수:  
  o Serialize(CArchive& ar) 함수 안에 CArchive를 이용하여 Loading/Storing할 때 멤버 변수 값을 입출력하게 해주는 루틴을 추가한다.
DECLARE_SERIAL(CShapeObject)/ IMPLEMENT_SERIAL(CShapeObject, CObject, 1) 사용함



CLineObject/CRectangleObject/CEllipseObject : public CShapeObject
-멤버 함수:  
  o Serialize(CArchive& ar) 함수를 추가한다.
  o Draw(CDC* pDC) 함수는 도형의 시작/끝점과 펜색깔과 두께 정보를 가지고
  실제도형(선/사각형/타원)을 그려주는 출력 루틴을 추가한다.
 
DECLARE_SERIAL(CLineObject)/ IMPLEMENT_SERIAL(CLineObject, CShapeObject, 1)
DECLARE_SERIAL(CRectangleObject)/ IMPLEMENT_SERIAL(CRectangleObject, CShapeObject, 1)
DECLARE_SERIAL(CEllipseObject)/ IMPLEMENT_SERIAL(CEllipseObject, CShapeObject, 1) 사용함



2. CSimpleShapeDrawingDoc 클래스에 새로운 도큐먼트 생성, 저장, 읽어 들이기 기능과 도형 리스트의 관리 기능을 추가한다. (10%)

CSimpleShapeDrawingDoc
-멤버 변수:
  o 현재 도형의 종류 (m_nShapeMode),
  o 펜색깔 (m_Color),
  o 펜두께(m_nThickness),
  o 도형 리스트 (CTypedPtrList<CObList, CShapeObject*> m_ShapeObjectList)

-멤버 함수:  
 o 소멸자 함수에서는 모든 도형의 리스트 원소들을 모두 지운다.
 o File->New를 위한  DeleteContents() 함수를 추가한다. 이 함수는
 OnNewDocument()함수에서 내부적으로 불리는 것으로, 이 함수에 도형의 리스트
 원소들을 모두 지운다.
 o File->Open/Save/SaveAs를 위한 Serialize(CArchive& ar) 함수를 추가한다.
 이 함수 안에 CArchive를  이용하여 Loading/Storing할 때 도형의 리스트를
 입출력해준다.
 o 도형을 리스트에 추가/제거하는 등의 함수를 추가한다.
 void AddShapeObject(CShapeObject* pObj);    
 void DeleteShapeObject(CShapeObject* pObj);      unsigned int GetShapeObjectType();
 COLORREF GetShapeObjectColor();
 int GetShapeObjectThickness();
 POSITION GetListHeadPosition(); // Return list head POSITION value
 CShapeObject* GetNext(POSITION& aPos); // Return current object pointer



3. CSimpleShapeDrawingView 클래스의  OnMouseMove 함수 안에서 도형의 속성에 따른 선/사각형/타원 도형을 생성하고 그려주는 루틴을 추가한다. (10%)



4. 도형(선, 사각형, 타원형), 펜의 두께(1,2,3,4,5), 색깔(Red, Green, Blue, Black)을 바꿀 수 있는 메뉴 아이템을 메뉴바에 추가한다. 그리고, 도형과 색깔을 바꿀 수 있는 툴바를 추가한다. (리소스 편집기에서 메뉴와 툴바의 IDR_MAINFRAME을 편집한다) (20%)


 ON_COMMAND(ID_SHAPE_LINE, &CSimpleShapeDrawingDoc::OnShapeLine)
 ON_COMMAND(ID_SHAPE_RECTANGLE, &CSimpleShapeDrawingDoc::OnShapeRectangle)
 ON_COMMAND(ID_SHAPE_ELLIPSE, &CSimpleShapeDrawingDoc::OnShapeEllipse)
 ON_COMMAND(ID_COLOR_RED, &CSimpleShapeDrawingDoc::OnColorRed)
 ON_COMMAND(ID_COLOR_BLUE, &CSimpleShapeDrawingDoc::OnColorBlue)
 ON_COMMAND(ID_COLOR_GREEN, &CSimpleShapeDrawingDoc::OnColorGreen)
 ON_COMMAND(ID_COLOR_BLACK, &CSimpleShapeDrawingDoc::OnColorBlack)
 ON_COMMAND(ID_THICKNESS_1, &CSimpleShapeDrawingDoc::OnThickness1)
 ON_COMMAND(ID_THICKNESS_2, &CSimpleShapeDrawingDoc::OnThickness2)
 ON_COMMAND(ID_THICKNESS_3, &CSimpleShapeDrawingDoc::OnThickness3)
 ON_COMMAND(ID_THICKNESS_4, &CSimpleShapeDrawingDoc::OnThickness4)
 ON_COMMAND(ID_THICKNESS_5, &CSimpleShapeDrawingDoc::OnThickness5)



5. 직접 본인이 원하는 열 개 이상의 도형을 그려보고, 저장과 읽어들이기, 새로운 도큐먼트 생성하기를 수행해보고, 그 결과를 모두 출력해서 넣는다. (10%)

실습숙제 3 (Due by 10/26)

□ 단원 : MFC 구조, 화면출력
□ 목표 : MFC CObject 기반 클래스 생성 & 화면 출력
□ 주요 연습 내용 : CObject, CBitmap, CPen, Rectangle, DrawText, LoadImage
□ 준비자료 : 3_CPerson.zip (Person.cpp, Person.h, Student.cpp, Student.h, Faculty.cpp, Faculty.h, PersonManager.cpp, PersonManager.h,
ChildView.cpp, ChildView.h, MainFrm.cpp, MainFrm.h, Simple.cpp, Simple.h, etc)
1218640374.zip
참고: VC++는 MFC Application Program을 사용하는 방식으로 작성한다.
http://dis.dankook.ac.kr/lectures/hci08/entry/MFC-Application-Program

[연습문제]
연습문제 Ex3 (Due by 10/26 일 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex3.zip으로 묶어서 낼 것. 보고서 (30%)


0. 생성한 프로그램의 메인 프레임의 Title을 “HCI2_Ex3_이름_학번”으로 바꾼다. (예: Resource View에서 String Table의 IDR_MAINFRAME에 Caption을 “HCI2_Ex3_<이름>_<학번>”으로 하면 됨)


1. CPerson, CFaculty, CStudent 클래스를 CObject 기반으로 만들고 필요한 함수를 추가한다. (30%)
– 모든 변수명 지정 시 헝가리언 표기법을 사용한다.
– CPerson, CFaculty, CStudent 클래스 Show() 함수를 output 창에 출력할 수 있도록 TRACE를 사용한다.
– CPerson, CFaculty, CStudent 클래스 DrawText(CPaintDC& dc, int x, int y, int width, int height) 함수를 작성한다.
 – dc.Rectangle함수를 이용하여 사각형 외곽을 그린다.
 – LoadImage와 dc.StretchBlt를 이용하여 사진을 그린다.
 – dc.DrawText를 사용하여 “이름: “, “ID : “, “전화: “, “주소: ”
   등등 타이틀을 그린다.
 – dc.DrawText를 사용하여 실제 이름, ID, 전화, 주소 등등을 그린다.
– 힌트: dc.DrawText(LPCTSTR, int, LPRECT, UINT) 함수에서 RECT 구조체의 x, y는 화면에 출력할 시작점, width는 각각 데이터필드를 출력할 사이 간격, height는 출력할 텍스트의 높이. DrawText 함수는 http://msdn2.microsoft.com/en-us/library/ms533909.aspx 참고할 것.
– 힌트: 사진그리기는 SimpleDrawing을 참고할 것
 CDC memdc;
 memdc.CreateCompatibleDC(&dc);
 HBITMAP hImage = (HBITMAP) LoadImage(AfxGetInstanceHandle(),
  “멀티미디어.bmp”, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
 memdc.SelectObject(hImage);
 dc.StretchBlt(50, 500, 777, 272, &memdc, 0, 0, 777, 272, SRCCOPY);


2. CPersonManager 클래스는 CObList를 이용하여 CPerson, CStudent, CFaculty 목록을 통합 관리한다. (30%)
– CObList를 사용하여, CPerson, CStudent, CFaculty 목록을 관리한다.
– CPerson, CFaculty, CStudent 클래스의 Show를 불러서 output 창에 출력하는 Show() 함수를 작성한다.
– 모든 CPerson, CFaculty, CStudent 클래스의 DrawText를 불러서 화면에 출력해 주는 void DrawText(CPaintDC& dc, int x, int y, int width, int height) 함수를 추가한다.
– 힌트: Show() 함수와 DrawText(…) 함수에는 실시간클래스정보를 사용하여 객체의 데이터형에 따른 Show()와 DrawText(…) 함수를 부르도록 한다.


3. CChildView::OnPaint()에서 본인이 원하는 5~6개 정도의 CPerson, CFaculty, CStudent를 추가하고, 리스트 모양으로 화면에 출력한다. (10%)


void CChildView::OnPaint()  // 아래 출력 화면의 예시
{
 CPaintDC dc(this);


 // TODO: Add your message handler code here
 CPersonManager pList;
 
 CPerson person1(“김승훈”, 12011126, “041-550-3481”,
   “충남 천안시 안서동 과학기술관 420호”);
 pList.Add(&person1);


 CPerson person2(person1);
 pList.Add(&person2);


 CFaculty prof1(“Park Tae Geun”, 12041130, “041-550-3486”,
   “충남 천안시 안서동 과학기술관 419호”, “멀티미디어공학전공”);
 pList.Add(&prof1);


 CFaculty prof2(“Suh Byung Moon”, 12071458, “041-550-3471”,
   “충남 천안시 안서동 과학기술관 424호”, “멀티미디어공학전공”);
 pList.Add(&prof2);


 CStudent student1(“Kim Mi Hee”, 52051671, “041-550-3490”,
   “충남 천안시 안서동”, 4.0);
 pList.Add(&student1);


 CStudent student2(“Kim Jeong Mi”, 52051712, “041-550-3490”,
   “충남 천안시 안서동”, 4.5);
 pList.Add(&student2);


 // PersonList TRACE 출력
 pList.Show();
 // PersonList 화면출력
 pList.DrawText(dc, 10, 10, 250, 20);
}


[참고] 출력화면 예시
사용자 삽입 이미지

실습숙제2 재공지

실습숙제2 재공지
실습숙제2에서 2_CPerson.zip을 새로 다운로드 받아서 작성하도록 함
-CPersonManager 클래스는 private 멤버로 CList<CPerson, CPerson&> m_aPersonList를 가지는 것이 아니라 CList<CPerson*, CPerson*> m_aPersonList를 가짐
-그래야, CList에 데이터가 CPerson이나 CStudent이나 CFaculty이라해도 그 데이터형에 맞는 Show함수를 부를 수 있음.
-만약, CList<CPerson, CPerson&>으로 하면 CPerson이나 CStudent이나 CFaculty의 데이터형에 상관없이 모두 CPerson의 Show를 부르게 됨.

-차이점 예시


  CArray<Point, Point&> arr1;
  arr1.Add(Point(10,20));
  arr1.Add(Point(30,40));
  arr1.Add(Point3D(4,5,6));
  arr1.Add(Point3D(7,8,9));
  cout << endl << “CArray<Point, Point&> 출력 Loop by index:” << endl;
  for(int i = 0; i < arr1.GetSize(); i++) {
   arr1[i].Show(); // dynamic binding이 안됨
  }

출력결과:
CArray<Point, Point&> 출력 Loop by index:
X= 10 Y= 20
X= 30 Y= 40
X= 4 Y= 5
X= 7 Y= 8




  CArray<Point*, Point*> arr2;
  arr2.Add(new Point(10,20));
  arr2.Add(new Point(30,40));
  arr2.Add(new Point3D(4,5,6));
  arr2.Add(new Point3D(7,8,9));

  cout << endl << “CArray<Point*, Point*> 출력 Loop by index:” << endl;
  for(int i = 0; i < arr2.GetSize(); i++) {
   Point * pt = arr2[i];
   pt->Show();         // dynamic binding
  }

출력결과:
CArray<Point*, Point*> 출력 Loop by index:
X= 10 Y= 20
X= 30 Y= 40
X=4 Y=5 Z=6
X=7 Y=8 Z=9

실습숙제2 (Due by 10/3)

□ 단원 : 유틸리티 클래스, 집합 클래스
□ 목표 : CString, 집합클래스 연습
□ 주요 연습 내용 : CString, CList
□ 준비자료 : 2_CPerson.zip (Person.cpp, Person.h, Student.cpp, Student.h, Faculty.cpp, Faculty.h, PersonManager.cpp, PersonManager.h, main.cpp)


1102780408.zip
참고: VC++는 Win32 console에 MFC를 사용하는 방식으로 작성한다.
http://dis.dankook.ac.kr/lectures/hci08/entry/WIN32-Console-Program-Using-MFC-Classes



연습문제 Ex2 (Due by 10/3 금 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex2.zip으로 묶어서 낼 것. 보고서 (30%)

[연습문제]


1. CPerson 클래스의 변수를 CString 형으로 변환한다. 그에 따른 함수 내부를 수정한다. (10%)


– CString m_strName;


– int n_nID;


– CString m_strPhone;


– CString m_strAddr;


– friend bool operator==(const CPerson &lhs, const CPerson &rhs) 함수 추가


 


2. CStudent 클래스의 변수를 CString 형으로 변환한다. 그에 따른 함수 내부를 수정한다. (10%)


– float m_nGPA;


– friend bool operator==(const CStudent &lhs, const CStudent &rhs) 함수 추가


 


3. CFaculty 클래스는 CPerson에서 파생한 클래스로 다음과 같은 멤버변수를 추가로 가지고 있다. (10%)


– CString m_strDept;


그리고 멤버 함수는 다음과 같은 기능을 한다.


– CFaculty(); // default constructor 기본 생성자 함수


– CFaculty(CString , int, CString, CString, CString); // conversion 형변환 생성자 함수


– CFaculty(const CFaculty&); // copy constructor 복사 생성자 함수


– CFaculty& operator=(const CFaculty&); // operator= 함수


– virtual ~CFaculty(); // destructor 소멸자 함수


– virtual void Show(); // CFaculty의 이름, 아이디, 전화번호, 주소, 소속을 보여줌


– CString GetDepartment() const; // CFaculty의 소속 (m_strDept)을 돌려줌


– friend std::ostream& operator<<(std::ostream&, const CFaculty&);


– friend std::ostream& operator<<(std::ostream&, const CFaculty*);


– friend std::istream& operator>>(std::istream&, CFaculty&);


– friend bool operator==(const CFaculty &lhs, const CFaculty &rhs) 함수 추가


 


4. CPerson, CStudent, CFaculty 목록을 CList를 이용하여 입출력을 통합 관리하는 CPersonManager 클래스를 작성한다. (20%)


– private 멤버로 CList<CPerson*, CPerson*> m_aPersonList를 가짐


– 소멸자는 모든 CPerson을 리스트에서 제거함


– Add 함수는 CPerson을 리스트에 추가함


– Remove 함수는 CList의 Find를 이용하여 동일한 CPerson이 존재하는지 확인 후 있으면 그것을 제거함


– RemoveAll 함수는 모든 CPerson을 리스트에서 제거함


– GetTotalNumberOfPeople 함수는 리스트에 존재하는 CPerson이 몇 명 있는지를 알려줌


– GetPersonList 함수는 리스트를 돌려줌


– Show 함수는 리스트에 존재하는 모든 CPerson의 Show()를 사용하여 모든 Person, Student, Faculty의 내용(즉, 이름, 아이디, 전화번호, 주소 등등)을 출력함


 


5. main.cpp에서 CPersonManager 목록에 10개 이상의 CPerson, CStudent, CFaculty를 추가하고 난 후, 다음을 수행한다. (20%)


– CPersonManger의 GetTotalNumberOfPeople 함수 사용하여, 리스트에 몇 명의 Person이 존재하는지 출력


– CPersonManger의 Show 함수 사용하여, 리스트에 있는 모든 Person, Student, Faculty의 내용(즉, Person들의 이름, 아이디, 전화번호, 주소 등등)을 출력


– CPersonManger의 Remove와 Show 함수를 사용하여, 각각 한 두 명의 Person, Student, Faculty를 리스트에서 지우고 난 후, 리스트에 있는 모든 내용을 출력


– cin으로 CPerson, CStudent, CFaculty 정보를 입력받은 객체를 생성 후, 리스트에 있는 모든 내용을 출력


 

실습숙제1 (Due by 9/19 금 24시까지)


□ 단원 : C/C++


□ 목표 : 객체지향 프로그래밍

□ 주요 연습 내용 : C++ 생성자, 상속, 멤버함수 정의 및 사용연습

□ 준비자료 : 1_CPerson.zip (Person.cpp, Person.h, Student.cpp, Student.h, main.cpp)

1113967562.zip
참고: VC++는 win32 console로 작성한다.
http://dis.dankook.ac.kr/lectures/hci07/entry/WIN32-Console-Program



연습문제 Ex1 (Due by 9/19 금 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex1.zip으로 묶어서 낼 것. 보고서 (30%)


[연습문제]
1. CPerson 클래스를 정의하라. (20%)
CPerson의 멤버 변수로는 이름, 아이디, 전화번호, 주소가 포함된다.
– char * _name;
– int _id;
– char * _phone;
– char * _addr;
그리고 멤버 함수는 다음과 같은 기능을 한다.
– CPerson(); // default constructor 기본 생성자 함수
– CPerson(char *, int, char *, char *); // conversion 형변환 생성자 함수
– CPerson(const CPerson&); // copy constructor 복사 생성자 함수
– CPerson& operator=(const CPerson&); // operator= 함수
– virtual ~CPerson(); // destructor 소멸자 함수
– virtual void Show(); // CPerson의 이름, 아이디, 전화번호, 주소를 보여줌
– char * GetName() const; // CPerson의 이름 (_name)을 돌려줌
– int GetID() const; // CPerson의 아이디 (_id)을 돌려줌
– char * GetPhoneNumber() const; // CPerson의 전화번호 (_phone)을 돌려줌
– char * GetAddress() const; // CPerson의 주소 (_addr)을 돌려줌


2. CPerson 클래스의 입출력을 위한 operator<< 함수와 operator>> 함수를 작성한다. (힌트: operator>> 함수에서는 “Please Enter Name: “을 호출하여 화면출력한 후에 cin의 getline 함수를 이용해서 한줄씩 char 값을 받는다. 마찬가지로, “Please Enter ID#: “, “Please Enter Phone#: “, “Please Enter Address: “로 화면출력 한 후에 입력값을 받는다.) (10%)
 friend std::ostream& operator<<(std::ostream&, const CPerson&);
 friend std::ostream& operator<<(std::ostream&, const CPerson*);
 friend std::istream& operator>>(std::istream&, CPerson&);


3. CStudent 클래스는 CPerson으로부터 파생한 클래스로 성적평균 멤버변수를 추가로 가지고 있다. (20%)
– float _gpa;
그리고 멤버 함수는 다음과 같은 기능을 한다.
– CStudent(); // default constructor 기본 생성자 함수
– CStudent(char *, int, char *, char *, float); // conversion 형변환 생성자 함수
– CStudent(const CStudent&); // copy constructor 복사 생성자 함수
– CStudent& operator=(const CStudent&); // operator= 함수
– virtual ~CStudent(); // destructor 소멸자 함수
– virtual void Show(); // CStudent의 이름, 아이디, 전화번호, 주소,성적평균을 보여줌
– float GetGPA() const; // CStudent의 성적평균 (_gpa)을 돌려줌


4. CStudent 클래스의 입출력을 위한 operator<< 함수와 operator>> 함수를 작성한다. (10%)
 friend std::ostream& operator<<(std::ostream&, const CStudent&);
 friend std::ostream& operator<<(std::ostream&, const CStudent*);
 friend std::istream& operator>>(std::istream&, CStudent&);


5. main.cpp에서 CPerson 객체와 CStudent 객체를 생성하고 위에서 정의한 각 멤버함수를 테스트하는 routine을 추가하라. (10%)