All posts by kpark

Assignment 4

연습문제 (4)


□ 단원 : C# WinForm
□ 목표 : Collections & FileIO & C# WinForm & Controls & GDI+ & Dialog
□ 주요 연습 내용 : Graphics, ListView
□ 준비자료 : QuakeData.cs 지진데이터


4100722456.txt사용자 삽입 이미지
[연습문제] Ex4 (Due by 12/06 화 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex4.zip으로 묶어서 낼 것. 보고서 (30%)


[연습문제]


1. QuakeDataComparer.cs 파일에는 IComparer<QuakeData> 인터페이스를 상속받은 각종 비교 클래스들을 구현한다.  QuakeDataManager.cs에서 qList의 SortList에 사용됨. (10%)
– class QuakeMonthComparer : IComparer<QuakeData>
{ public int Compare(QuakeData p, QuakeData q) // 내부구현 필요 }
– class QuakeDayComparer : IComparer<QuakeData>
{ public int Compare(QuakeData p, QuakeData q) // 내부구현 필요 }
– class QuakeTimeComparer : IComparer<QuakeData>
{ public int Compare(QuakeData p, QuakeData q) // 내부구현 필요 }
– class QuakeLatComparer : IComparer<QuakeData>
{ public int Compare(QuakeData p, QuakeData q) // 내부구현 필요 }
– class QuakeLonComparer : IComparer<QuakeData>
{ public int Compare(QuakeData p, QuakeData q) // 내부구현 필요 }
– class QuakeMagnitudeComparer : IComparer<QuakeData>
{ public int Compare(QuakeData p, QuakeData q) // 내부구현 필요 }
– class QuakeDepthComparer : IComparer<QuakeData>
{ public int Compare(QuakeData p, QuakeData q) // 내부구현 필요 }


2. ListViewItemComparer.cs 파일에는 IComparer 인터페이스를 상속받은 ListViewIntegerItemComparer와 ListViewDoubleItemComparer 클래스를 구현한다. MainForm.cs에서 ListView의 SortListView에 사용됨. (10%)
(힌트: http://msdn.microsoft.com/en-us/library/ms996467.aspx)
– class ListViewIntegerItemComparer : IComparer
{ public int Compare(object x, object y) // 내부구현 필요 }
– class ListViewDoubleItemComparer : IComparer
{ public int Compare(object x, object y) // 내부구현 필요 }


3. QuakeDataManager.cs에 QuakeDataManager 클래스를 구현한다. (10%)
– private List<QuakeData> pList = null;
그리고 메소드는 다음을 포함한다.
// cvs(comma separated value) 파일을 읽어서, QuakeData를 pList에 추가
// StreamReader 사용
– public void LoadFile(string path, ref List<QuakeData> pList) { // 내부구현필요 }
// pList의 모든 QuakeData를 cvs(comma separated value) 텍스트 파일로 저장
// StreamWriter 사용
– public void WriteFile(string path) { // 내부구현 필요 }
// 리스트 데이터를  Year, Month, Day, Time, Lat, Lon, Magnitude, Depth 순서로 정렬
// QuakeMonthComparer, QuakeDataComparer, QuakeTimeComparer 등을 사용
– public void SortList(int index) { // 내부구현 필요 }


4. MainForm에 메뉴, 툴바, 탭컨트롤을 추가한다. (10%)사용자 삽입 이미지사용자 삽입 이미지


File 메뉴항목
 -New: 새로 그리기
 -Open/Save: 열기/저장하기
 -Print: 프린트로 출력하기 (optional)
 -Exit: 응용프로그램 종료
Data 메뉴항목
 -Find : 자료 찾기
View 메뉴항목
 -List: 리스트뷰로 보기
 -Map: 맵뷰로 보기


툴바에 메뉴 항목과 동일한 내용을 추가한다.
-New/Open/Save/Print/Close 메뉴항목 => New/Open/Save/Print/Close 툴바 버튼 추가
-Data 메뉴 항목=> Find Data 툴바 버튼 추가
-View 메뉴 항목 => ListView/MapView 툴바 콤보박스 추가


탭컨트롤에는 ListView와 PictureBox 컨트롤을 추가한다.
-첫 번째 TabPage에는 ListView를 추가하고, View는 Detail로 바꾼 후, Data를 보여줄 수 있도록 Column Header (Year/Month/Day/Time/Latitude/Longitude/Magnitude/Depth) 추가


-두 번째 TabPage에는 PictureBox를 추가하고, BackgroundImage로 Image에 Resources 디렉토리 안에 있는 “2_no_clouds_2K.jpg”를 추가


4. MainForm에 각종 이벤트 핸들러를 추가한다. (30%)
– private List<QuakeData> pList = new List<QuakeData>();
– private QuakeDataManager manager = new QuakeDataManager();
그리고 메소드는 다음을 포함한다.
// Exit – 메인폼을 닫고 응용프로그램 종료
– private void exitToolStripMenuItem_Click(object sender, EventArgs e) { … }
// Open – 파일을 읽어서 pList에 데이터를 로딩하고 listView와 pictureBox를 update
– private void openToolStripMenuItem_Click(object sender, EventArgs e) { … }
// Save – pList 데이터를 파일에 저장
– private void saveToolStripMenuItem_Click(object sender, EventArgs e) { …}
// 리스트컬럼클릭 – 클릭된 컬럼을 기준으로 정렬
// QuakeDataManager의 SortList와 listView의 SortListView를 사용
– private void listView1_ColumnClick(object sender, EventArgs e) { … }
// 리스트뷰의 정렬
// ListViewIntegerItemComparer와 ListViewDoubleItemComparer를 사용
– private void SortListView(int index) { … }


// listView와 pictureBox의 탭페이지 선택을 바꿔주는 메뉴항목과 탭컨트롤에서 페이지를 직접 선택할 시 메뉴항목에 Checked 업데이트
– private void listToolStripMenuItem_Click(object sender, EventArgs e) { …}
– private void mapToolStripMenuItem_Click(object sender, EventArgs e) { …}
– private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { …}
// MainForm의 Resize할 때 listView와 pictureBox 무효화를 사용해 다시 그리기
– private void MainForm_Resize(object sender, EventArgs e) { …}


5. 비모달형 대화상자 (Modeless Dialog)인 SearchForm을 새로 추가하고 MainForm과 연동한다. (extra 10%)
– 전체 리스트에서 일정 영역만 Search해서 listView와 pictureBox에서 나타낼 수 있는
SearchForm 대화상자를 추가한다.


6. 본인이 원하는 기능을 더 추가하고, 결과를 모두 출력해서 넣는다. (보고서 점수에 포함)

결과예시: 사용자 삽입 이미지사용자 삽입 이미지

PersonListView

PersonListView
-Person 정보 FileIO (csv format) 파일 읽기, 저장하기
-리스트뷰에 파일읽어서 열기 및 저장하기
-여기에 리스트뷰의 칼럼을 클릭하면 그 순서대로 전체 항목을 정렬하기 추가해보기
-여기에 사람정보 (이름, ID, 전화번호, 주소) 입력을 위한 TextBox. 그리고 ID는 숫자만 입력가능한 모달형 대화상자 추가해보기
-여기에 사람을 찾는 모달리스형 대화상자 추가해보기


resizeImage

        private void resizeImage(Image fullsizeImage, string destFilename, int destWidth, int destHeight)
        {
            // Prevent using images internal thumbnail
            fullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
            fullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
            // Resize the image
            Image destImage = fullsizeImage.GetThumbnailImage(destWidth, destHeight, null, IntPtr.Zero);
            // Save the resized picture
            destImage.Save(destFilename);
            System.Diagnostics.Trace.WriteLine(“Debug: Path=” + destFilename);
        }

Assignment 3

연습문제 (3)






□ 단원 : C# WinForm


□ 목표 : C# Form, Controls, GUI, Dialog


□ 주요 연습 내용 : collections, class, Form, 속성, FileIO 연습


□ 준비자료 : Photo.cs7134993273.cs


  연습문제 Ex3 (Due by 11/11 금 24시까지)


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

[연습문제]

1. MainForm에 메뉴, 툴바, 탭컨트롤을 추가한다. (10%)
– menuStrip1
     +File
          +Open: 이미지 폴더 열기
         
+Exit: 응용프로그램 종료
    
+Image
         
+Resize: 전체 이미지 사이즈 일괄 변경하기
– listView & imageList
– folderBrowser
– statusStrip사용자 삽입 이미지


 


2. 모달형 대화상자 (Moal Dialog)인 DetailForm을 새로 추가하고 Photo를 보여준다. (10%)
– pictureBox
– button (Previous/Next/Slideshow)
    
+Previous 버튼이 Click되면, 이전 사진을 보여준다
    
+Next 버튼이 Click되면, 다음 사진을 보여준다
    
+Slideshow 버튼이 Click되면, 디렉토리의 전체 사진을 슬라이드쇼로 보여준다
– timer
    
+타이머가 Tick되면, 다음 사진을 보여준다 사용자 삽입 이미지


 


3. 모달형 대화상자 (Moal Dialog)인 ResizeForm을 새로 추가하고, 크기조절 비율과 저장 디렉토리를 입력받아 사진 크기변환을 할 수 있다. (10%)
– label & button
– listBox
– textBox 사용자 삽입 이미지 


4. MainForm 에는 프로그램을 정의한다. (20%)
– public List<Photo> pList = new List<Photo>();
// 응용프로그램을 종료한다.
– private void exitToolStripMenuItem_Click(object sender, EventArgs e)

// folderBrowserDialog를 이용하여 선택한 디렉토리에 모든 이미지(Photo)를
// List<Photo>와 imageList와 listView에 추가한다.
– private void openToolStripMenuItem_Click(object sender, EventArgs e)

// ResizeForm 대화상자를 열어서 입력받은 크기비율과 저장디렉토리에
// 모든 이미지를 크기변환(제공하는 resizeImage를 사용)한다.
– private void resizeToolStripMenuItem_Click(object sender, EventArgs e)

// listView에 이미지를 선택하면, DetailForm 대화상자를 열어준다.
// 현재 선택한 이미지의 정보를 statusStrip에 출력해준다.
– private void listView1_ItemSelectionChanged(object sender, EventArgs e)


 


5. DetailForm 클래스 또는 ResizeForm 클래스에 이벤트 핸들러를 구현하고 본인이 원하는 기능을 더 추가한다. (20%)


DetailForm클래스
    
// DetailForm이 로딩되면 리스트뷰에서 선택된 사진을 보여준다.
    
– private void DetailForm_Load(object sender, EventArgs e)

    
// Previous 버튼을 누르면 이전 사진을 보여준다
    
– private void button1_Click(object sender, EventArgs e)


// Next 버튼을 누르면 다음 사진을 보여준다.
– private void button2_Click(object sender, EventArgs e)


// Slideshow 버튼을 누르면 슬라이드쇼를 한다.
// (즉, timer를 활성화시킨다. 즉, Tick 이벤트가 실행되게 한다.)
– private void button3_Click(object sender, EventArgs e)


ResizeForm클래스
    
// listBox1에서 사용자가 원하는 퍼센티지(%)를 선택할 수 있다.
    
– private void listBox1_SelectedIndexChanged(object sender, EventArgs e)


// textBox1를 마우스로 누르면 folderBrowserDialog1를 불러 크기변환된 파일을 저장할 디렉토리를 지정할 수 있다. (folderBrowserDialog1.ShowNewFolderButton = true)
– private void textBox1_Enter(object sender, EventArgs e)