Category Archives: Homework
Assignment 6
연습문제 Ex6 (Due by 12/10 목 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex6.zip으로 묶어서 낼 것. 보고서 (30%)1198135212.cs
1356549115.zip
[연습문제]
0. Window Form 응용프로그램의 메인 폼의 Text를 “HCI2_Ex6_이름_학번”으로 바꾼다.
1. 생성된 폼 Form1.cs [Design]에서 Toolbox(도구상자)에서 메뉴와 툴바를 추가한다. (20%)
File 메뉴항목
-New: 새로운 그림판 그리기
-Open/Save: 그림판 열기/저장하기
-Print: 화면을 프린터로 출력하기
-Exit: 응용프로그램 종료
Shape 메뉴항목
-Line/Ellipse/Rectangle/Triangle: 선,타원,사각형,삼각형 펜으로 그리기
-FillEllipse/FillRectangle/FillTriangle: 타원,사각형,삼각형 단색으로 채우기
-HatchEllipse/HatchRectangle/HatchTriangle: 타원,사각형,삼각형 해치스타일로 채우기
-TextureEllipse/TextureRectangle/TextureTriangle: 타원,사각형,삼각형 비트맵으로 채우기
Design 메뉴항목
-Color: ForeColor/BackColor 선택하는 대화상자
-Pen: BrushWidth/DashStyle 선택하는 대화상자
-Brush: HatchStyle(Horizontal/Vertical/Backward Diagonal/Cross/Diagonal Cross 등)와 텍스쳐를 선택하는 대화상자
툴바에 메뉴 항목과 동일한 내용을 추가한다.
-New/Open/Save/Print 메뉴항목 => New/Open/Save/Print 툴바 버튼
-Shape 메뉴 항목=> Tool(Line/Ellipse/Rectangle/Triangle)과 Draw(Outline/Solid Fill/Hatch Fill/Texture Fill) DropDownButton로 추가
-Color 메뉴 항목 => Color 툴바 버튼
-Pen 메뉴항목 => Brush width와 Dash style 콤보박스로 추가
-Brush 메뉴항목 =>Hatch style 콤보박스로 추가
2. Color, Pen, Brush 속성 정의를 위하여 사용자 정의 폼과 컨트롤을 추가한다. (20%)
-Color 대화상자(Modeless Dialog):
현재 도형의 foreColor 와 backColor를 선택할 수 있도록 한다.
-Pen 대화상자(Modeless Dialog):
현재 선/타원/사각형/삼각형 도형의 선의 두께와 Dash style을 선택할 수 있도록 한다.
-Brush 대화상자(Modeless Dialog):
현재 HatchBrush/TextureBrush의 Hatch style과 Image를 선택할 수 있도록 한다.
3. Rubber-band Line, Rectangle, Ellipse, Triangle 도형을 그려주는 루틴을 추가한다. (30%)
-Graphics 클래스의 DrawLine/DrawEllipse/DrawRectangle/DrawPolygon 메소드에 Pen 속성을 사용하여 선, 타원, 사각형, 삼각형을 그린다.
-Graphics 클래스의 FillEllipse/FillRectangle/FillPolygon 메소드에 SolidBrush/HatchBrush/TextureBrush를 사용하여 타원, 사각형, 삼각형을 그린다.
-MainForm에서 DrawInfo shape을 리스트로 저장하는 ArrayList shapeList = new ArrayList()를 사용
-메뉴의 New 항목을 선택했을 때, 그림과 shapeList를 지우고 초기화
-Load 이벤트 핸들러, 배경화면 이미지를 흰색으로 초기화
-MouseDown 이벤트 핸들러에서는, 왼쪽 마우스를 누르면 새로운 도형을 생성
-MouseMove 이벤트 핸들러에서는, 왼쪽 마우스가 눌린 상태에서 움직이면 화면 업데이트
-MouseUp 이벤트 핸들러에서는, 마우스를 놓으면 새로운 도형이 생성되고 리스트에 추가
-Paint 이벤트 핸들러에서는, 현재 그리는 도형을 최종적으로 그림
-SizeChanged 이벤트 핸들러, 배경화면 이미지의 크기를 조정
4. 그림판의 출력(Print), 저장(Save), 열기(Open) 등 본인이 원하는 기능을 더 추가한다. (extra 10%)
-printDocument & printDialog 사용
-openFileDialog/saveFileDialog & DrawInfo 클래스의 ToString() 사용
5. 본인이 원하는 열 개 이상의 도형을 그려보고, 그 결과를 모두 출력해서 넣는다. (보고서 점수에 포함)
How to: Sort ListView Items
How to: Sort ListView Items
http://msdn.microsoft.com/en-us/library/ms229643(VS.80).aspx
class ListViewItemComparer : IComparer
{
[…]
public int Column;
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[Column].Text,
((ListViewItem)y).SubItems[Column].Text);
}
}
Number Only Textbox
// number only textbox using TryParse
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
int value = 0;
e.Handled = !int.TryParse(e.KeyChar.ToString(), out value);
}
// number only textbox using Regex.IsMatch
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), “\\d+”))
e.Handled = true;
}
Assignment5
연습문제 Ex5 (Due by 11/26 목 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex5.zip으로 묶어서 낼 것. 보고서 (30%)1113718331.hwp
[연습문제]
1. PersonRecord라는 Window Form 응용프로그램 프로젝트를 생성한다.
2. 생성된 폼 Form1.cs [Design]에서 Toolbox(도구상자)에서 Controls (컨트롤)을 가져와 출력화면을 위한 폼을 디자인한다. (10%)
-리스트 출력을 위한 ListView는 속성 (Property) 창에서 View를 Details로 바꾼다.
-편집 컨트롤 그룹을 위한 Group Box
-사람정보 (이름, ID, 전화번호, 주소) 입력을 위한 TextBox. 그리고 ID는 숫자만 입력할 수 있도록 한다.
-등록, 수정, 삭제, 모두 삭제를 위한 Button
-파일 열기, 파일 저장, 응용프로그램 끝내기 ToolStrip (또는 Button 사용)
-OpenFileDialog와 SaveFileDialog 공용컨트롤 등등
3. Person.cs 클래스는 다음 메소드를 가진다. (10%)
– public override string ToString() // “이름,ID,전화번호,주소”로 출력 (CSV 파일 출력에 필요)
– public int CompareTo(Person other) // Person의 이름 순서대로 비교 (Sort에 필요)
– public bool Equals(Person other) // 이름과 같은지 비교 (Find에 필요)
– public ListViewItem ToListViewItem() // 리스트뷰 항목을 생성 (ListView 컨트롤에 필요) 메소드를 추가한다.
4. Form1.cs 클래스에 List<Person>을 데이터 멤버로 포함시키고, 파일열기, 파일저장, 추가, 수정, 삭제, 모두 삭제 버튼을 이용하여 사람 정보를 ListView에 새로운 항목으로 추가하거나, 선택된 항목의 수정 및 삭제 등이 가능하도록 이벤트 핸들러를 작성한다. (30%)
멤버 필드:
-private List<Person> pList;
-public Form1()
{
InitializeComponent();
pList = new List<Person>();
}
툴바 이벤트 핸들러:
// 파일을 읽어 리스트와 리스트뷰에 Person 추가
-private void loadFileButton_Click(object sender, EventArgs e)
// 리스트에 있는 모든 Person을 파일로 저장
-private void saveFileButton_Click(object sender, EventArgs e)
// 응용프로그램 종료
-private void closeButton_Click(object sender, EventArgs e)
– 텍스트파일은 CSV 포맷 (예: Test.csv를 사용하여 테스트해 볼 것)
김승훈, 1202, 041-550-3481, 3과420
박태근, 1204, 041-550-3486, 3과419
김대원, 1204, 041-550-3487, 3과418
박경신, 1207, 041-550-3469, 3과417
서병문, 1207, 041-550-3471, 3과407
정재진, 1209, 041-550-3482, 3과409
김태완, 1207, 041-550-3512, 학생회관
김명숙, 1207, 041-550-3511, 3과511
버튼 이벤트 핸들러:
// pList와 ListView1에 Person 항목 추가 (Person의 ToListViewItem() 사용할 것)
-private void addButton_Click(object sender, EventArgs e)
// pList와 ListView1에서 현재 선택된 Person 정보 수정
-private void editFileButton_Click(object sender, EventArgs e)
// pList와 ListView1에서 현재 선택된 Person 항목 삭제
-private void deleteButton_Click(object sender, EventArgs e)
// pList와 ListView1에서 모든 Person 항목 삭제
-private void deleteallButton_Click(object sender, EventArgs e)
리스트뷰 이벤트 핸들러:
// 리스트뷰에서 현재 선택된 항목을 사람 정보(이름/ID/전화번호/주소) TextBox에 출력
-private void listView1_ItemSelectionChanged(object sender,
ListViewItemSelectionChangedEventArgs e)
// 리스트뷰에서 현재 선택된 항목에 Person을 삭제
-private void listView1_DoubleClick(object sender, EventArgs e)
4. 생성한 폼을 이용하여 구현한 모든 메소드를 테스트한 결과를 스냅샷으로 찍어서 보고서에 제출한다. (10%)
– 파일 열기로 데이터를 읽어들여 리스트에 로딩
– 추가, 수정, 삭제, 모두삭제를 사용하여 5명 이상 Person 추가 또는 제거
– 리스트뷰의 항목을 선택(ItemSelectionChanged), 항목을 더블클릭(DoubleClick), 헤더의 칼럼을 클릭(ColumnClick)하는 기능 테스트
– 파일 저장을 사용하여 리스트에 있는 모든 데이터를 저장 (리스트뷰에 있는 정보와 저장한 파일의 정보가 동일한지 스냅샷으로 찍어서 비교해줄 것)
– 응용프로그램 종료
5. Person 또는 Form1에서 본인이 더 테스트해보고 싶은 Method를 추가하라. 예를 들어 리스트뷰의 칼럼을 클릭하면 그 순서대로 전체 항목을 정렬하는 것 등등. (10%)
http://msdn.microsoft.com/ko-kr/library/ms229643(VS.80).aspx
// 리스트뷰의 헤더(이름/ID 칼럼)을 클릭하면 그 순서대로 전체 항목 Sort (정렬)
-private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
FileIO
FileIO
http://support.microsoft.com/kb/304430
-한글 텍스트파일 읽기와 쓰기
-csv 파일 Parse 하기1159547285.cs
ArrayList
ArrayList예제 참고자료: http://dotnetperls.com/arraylist
ArrayList pArray = new ArrayList();
pArray.Add(person1);
pArray.Add(student1);
pArray.Add(faculty1);
// 마지막으로 입력된 데이터로 모든 데이터값이 치환됨
Person p = new Person();
for (int i = 0; i < 5; i++) {
p.Name = Console.ReadLine(); // 입력정보
p.ID = int.Parse(Console.ReadLine()); // 입력정보
p.Phone = Console.ReadLine(); // 입력정보
p.Address = Console.ReadLine(); // 입력정보
pArray.Add(p); // 리스트에 들어간 모든 원소는 동일한 p
}
// 각자 다르게 입력된 정보가 들어가게 됨
for (int i = 0; i < 5; i++) {
Person p = new Person();
p.Name = Console.ReadLine(); // 입력정보
p.ID = int.Parse(Console.ReadLine()); // 입력정보
p.Phone = Console.ReadLine(); // 입력정보
p.Address = Console.ReadLine(); // 입력정보
pArray.Add(p); // 이때 p는 새로운 Person객체
}
foreach (Object pt in pArray)
{
if (pt is Person)
{
((Person)pt).Print();
}
if (pt is Student)
{
((Student)pt).Print();
}
if (pt is Faculty)
{
((Faculty)pt).Print();
}
}
// 아래와 같이 pArray 원소를 Person형으로 받아서 처리할 경우 pt.Print()만 호출하면
// 복잡한 형변환 과정이 필요없이 객체 형에 따라서 재정의된 메소드가 자동호출
foreach (Person pt in pArray)
{
pt.Print();
}
C# Formatting Numeric String
Formatting Standard Numeric Format Strings
http://msdn.microsoft.com/en-us/library/s8s7t687(VS.80).aspx
Formatting Custom Numeric Format Strings
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx
Formatting Numeric Format Strings (Alignment)
Integer http://www.csharp-examples.net/string-format-int/
Double http://www.csharp-examples.net/string-format-double/
DateTime http://www.csharp-examples.net/string-format-datetime/
Align String with Spaces http://www.csharp-examples.net/align-string-with-spaces/
Indent String with Spaces http://www.csharp-examples.net/indent-string-with-spaces/
IFormatProvider http://www.csharp-examples.net/iformatprovider-numbers/
Custom IFormatProvider http://www.csharp-examples.net/custom-iformatprovider/
Character | Description | Examples | Output |
C or c | Currency | Console.Write(“{0:C}”, 2.5); | $2.50 |
Console.Write(“{0:C}”, -2.5); | ($2.50) | ||
D or d | Decimal | Console.Write(“{0:D5}”, 25); | 25 |
E or e | Scientific | Console.Write(“{0:E}”, 250000); | 2.50E+05 |
F or f | Fixed-point | Console.Write(“{0:F2}”, 25); | 25 |
Console.Write(“{0:F0}”, 25); | 25 | ||
G or g | General | Console.Write(“{0:G}”, 2.5); | 2.5 |
N or n | Number | Console.Write(“{0:N}”, 2500000); | 2,500,000.00 |
X or x | Hexadecimal | Console.Write(“{0:X}”, 250); | FA |
Console.Write(“{0:X}”, 0xffff); | FFFF |
TryParse
{
Console.Write(“국어 점수를 입력하세요(0~100) : “);
string str = Console.ReadLine();
value = int.TryParse(str, out s.kor);
if (value == false || s.kor < 0 || s.kor > 100) {
Console.WriteLine(“범위에 벗어난 점수를 입력하셨습니다”);
continue;
}
else {
Console.WriteLine(“국어성적 : {0}”, s.kor);
break;
}
}
HW1에서 국어,영어,수학을 입력받는 부분에서 위의 유형이 가장 대표적이였다.
그러나 while을 사용하여 아래의 코드와 같이 간단히 구현할 수 있다.
int value; // needed for TryParse
string str; // needed for ReadLine
Console.Write(“국어성적을 입력하세요(0-100): “);
str = Console.ReadLine();
while ((!int.TryParse(str, out value))||(value<0 || value>100))
{
Console.Write(“다시 국어성적을 입력하세요 (0-100): “);
str = Console.ReadLine();
}
s.kor = int.Parse(str);
Generic List Class
<<List<T> 컬랙션 클래스의 메소드>>
public List<TOutput> ConvertAll<TOutput> (Converter<T, TOutput> converter)
-리스트 객체의 각 원소를 TOutput 형으로 변환하여 리스트로 반환
public bool Exists(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 원소가 있는지 여부를 반환
public T Find(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 첫번째 원소를 반환
public List<T> FindAll(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 모든 원소를 리스트로 반환
public int FindIndex(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 첫번째 원소의 인덱스를 반환
public int FindLastIndex(Predicate<T> match)
-리스트에 있는 모든 원소 중 match 조건을 만족하는 마지막 원소의 인덱스를 반환
public void ForEach(Action<T> action)
-리스트에 있는 모든 원소에 대해 action을 수행
public bool TrueForAll(Predicate<T> match)
-리스트에 있는 모든 원소가 match 조건을 만족하는 지 여부를 반환
<<대리자(Delegate)>>
public delegate void Action<T>(T object)
-T 형의 매개변수를 하나 받고 반환값이 없는 메소드
public delegate TOutput Converter<TInput, TOutput>(TInput input)
-TInput 형의 매개변수를 받고 이를 TOutput 형으로 변환하여 반환하는 메소드
public delegate bool Predicate<T>(T object)
-T 형의 매개변수를 받아 그것이 특정 조건을 만족하는지를 반환하는 메소드
public delegate int Comparison<T>(T x, T y)
-x, y 두 객체를 비교하는 메소드로 x가 y보다 작으면 음수, 같으면 0, 크면 양수를 반환하는 메소드