HW4

단국대학교 멀티미디어공학과 HCI프로그래밍2 (2016년 가을학기) 실습

과목코드 : 300890

강사 : 박경신

———————————————————

날짜: 2016년 11월 28일

– 실습번호 : HW4 (Due by 12/12)

– 실습제목 : Window.Forms , Controls, FileIO, GMap.Net, LINQ

– 실습요약 : 지도 위에 한국의 지진 정보를 보여준다.

– 준비자료 : 지진데이터

Data

http://greatmaps.codeplex.com/releases/view/73162

 

12/12까지 online.dankook.ac.kr 이러닝으로 실행파일(bin\*.exe)과 소스코드(*.cs)와 보고서(*.doc/*.hwp)를 전부 “학번_이름_HW4.zip”으로 묶어서 제출한다. 또한, 비주얼 스튜디오에서 만든 프로젝트 전체 파일(*.sln, *.csproj)을 폴더에 같이 넣어준다. 보고서는 출력해서 수업시간에 제출한다.

 

– 실습문제

  1. GMap.Net 컨트롤을 설치한다.

http://www.independent-software.com/gmap-net-tutorial-maps-markers-and-polygons/

http://dis.dankook.ac.kr/lectures/hci16/2016/11/28/custom-control/ 참고

 

  1. KEarthquake 클래스를 만든다.

public class KEarthquake: IComparable<KEarthquake>, IEquatable<KEarthquake>

{

public DateTime Time { get; set; }

public double Magnitude { get; set; }

public double Latitutde { get; set; }

public double Longitude { get; set; }

public string Location { get; set; }

public string Link { get; set; }

public Color MagnitudeColor { get { return ComputeARGBColor(); } }

// compute color based on magnitude
public Color ComputeARGBColor()
{
int r = 0, g = 0, b = 0;
if (Magnitude <= 1.5)
{
// BLUE
r = 0; g = 0; b = 255;
}
else if ((Magnitude > 1.5) && (Magnitude <= 2.75))
{
// BLUE->CYAN
r = 0; g = (int)(255 * (Magnitude – 1.5) / 1.25); b = 255;
}
else if ((Magnitude > 2.75) && (Magnitude <= 4.0))
{
// CYAN->GREEN
r = 0; g = 255; b = 255 – (int)(255 * (Magnitude – 2.75) / 1.25);
}
else if ((Magnitude > 4.0) && (Magnitude <= 5.25))
{
// GREEN->YELLOW
r = (int)(255 * (Magnitude – 4.0) / 1.25); g = 255; b = 0;
}
else if ((Magnitude > 5.25) && (Magnitude <= 6.5))
{
// YELLOW->RED
r = 255; g = 255 – (int)(255 * (Magnitude – 5.25) / 1.25); b = 0;
}
else if (Magnitude > 6.5)
{
// RED
r = 255; g = 0; b = 0;
}
return Color.FromArgb(75, r, g, b);
}

}

 

  1. 모든 지진데이터 *.csv 파일을 읽어서 List<KEarthquake>를 만들어주는 KEarthquakeImporter 클래스를 만든다.

http://dis.dankook.ac.kr/lectures/hci15/?p=572 Person.csv 파일 읽기 참고

 

  1. List<KEarthquake>를 이용해서 Listview에 전체 데이터를 보여준다.

kearthquake_listview

  1. List<KEarthquake>를 이용해서 지진 강도(Magnitude)에 따른 색깔로 GMap.NET marker (circle polygon)을 그려준다.

class GMapMarkerCircle : GMapMarker // 제작 필요

class GMapMarkerImageAndLink : GMapMarker // 제작 필요

kearthquake_mapview

  1. LINQ를 이용하여 발생기간, 규모(Magnitude) 범위에 따른 지진데이터를 검색하여 보여준다.

HW3

HW3

단국대학교 멀티미디어공학과 HCI프로그래밍2 (2016년 가을학기) 실습
과목코드 : 300890
강사 : 박경신
——————————————————————
날짜: 2016년 10월 31일
– 실습번호 : HW3 (Due by 11/21)
– 실습제목 : collections, FileIO, GUI
– 실습요약 : 입체 도형의 겉넓이(surface area)와 부피(volume) 구하기 GUI 작성
– 준비자료 : HW1 http://www.mathsisfun.com/area-calculation-tool.html
http://math.about.com/od/formulas/ss/surfaceareavol.htm

11/21까지 online.dankook.ac.kr 이러닝으로 실행파일(bin\*.exe)과 소스코드(*.cs)와 보고서(*.doc/*.hwp)를 전부 “학번_이름_HW3.zip”으로 묶어서 제출한다. 또한, 비주얼 스튜디오에서 만든 프로젝트 전체 파일(*.sln, *.csproj)을 폴더에 같이 넣어준다. 보고서는 출력해서 수업시간에 제출한다.

– 실습문제

1. Geometry 추상클래스를 정의한다.

2. Geometry 추상클래스를 상속받은 Sphere, Cone, Cylinder, … 는 겉넓이(Surface Area), 부피(Volume)를 계산한다.

3. GeometryForm 를 구현하고 입체도형의 겉넓이와 부피 계산을 구현한다.
-ComboBox, Label, TextBox, Button, Panel을 사용하여 GUI를 정의한다.
-Geometry 객체를 생성해서 텍스트필드에서 입력받은 값으로 SurfaceArea와 Volume을 계산하여 화면에 출력한다.

4. MainForm은 List<Geometry>를 관리한다.
-Listview을 사용하여 Geometry 리스트를 출력한다.
-File I/O을 사용하여 Geometry 리스트를 관리한다.

5. 사용자의 잘못된 입력에 따른 처리를 반드시 포함해야 하며, 그 외에 본인이 더 테스트해보고 싶은 method나 routine을 추가하라. 실행 화면과 코드를 첨부하시오.

GeometryForm

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GeometryForm
{
public abstract class Geometry
{
public abstract GeometryType Type { get; }
public abstract double SurfaceArea { get; }
public abstract double Volume { get; }
public void Print()
{
System.Diagnostics.Trace.WriteLine
(ToString() + ” S.A.=” + SurfaceArea + ” Vol=” + Volume);
}
// needed for ListView
#region ListViewItem
public ListViewItem ToListViewItem()
{
ListViewItem item = new ListViewItem(this.ToString());
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, string.Format(“{0:0.###}”, this.SurfaceArea)));
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, string.Format(“{0:0.###}”, this.Volume)));
return item;
}
#endregion
}
}

HW2

단국대학교 멀티미디어공학과 HCI프로그래밍2 (2016년 가을학기) 실습
과목코드 : 300890
강사 : 박경신
——————————————————————
날짜: 2016년 10월 10일
– 실습번호 : HW1 (Due by 10/24)
– 실습제목 : class, abstract class, inheritance, property, ArrayList
– 실습요약 : 입체 도형의 겉넓이(surface area)와 부피(volume) 구하기 & 평면 도형의 넓이(area) 구하기
– 준비자료 : HW1 http://www.mathsisfun.com/area-calculation-tool.html
http://math.about.com/od/formulas/ss/surfaceareavol.htm

10/20까지 online.dankook.ac.kr 이러닝으로 실행파일(bin\*.exe)과 소스코드(*.cs)와 보고서(*.doc/*.hwp)를 전부 “학번_이름_HW1.zip”으로 묶어서 제출한다. 또한, 비주얼 스튜디오에서 만든 프로젝트 전체 파일(*.sln, *.csproj)을 폴더에 같이 넣어준다. 보고서는 출력해서 수업시간에 제출한다.

– 실습문제
0. GeometryType과 FigureType을 아래와 같이 정의한다.
enum GeometryType { SPHERE=1, CONE=2, CYLINDER=3, RECTANGULAR_PRISM=4, SQUARE_PYRAMID=5, ISOSCELES_TRIANGULAR_PRISM=6 }
enum FigureType { TRIANGLE=1, SQUARE=2, RECTANGLE=3, PARALLELOGRAM=4, RHOMBUS=5, TRAPEZOID=6 }

1. Geometry와 Figure 추상클래스를 정의한다.
public abstract class Geometry {
public abstract GeometryType Type { get; } // 도형타입 (GeometryType)
public abstract double SurfaceArea { get; } // 겉넓이
public abstract double Volume { get; } // 부피
public abstract void GetAdditionalUserInput(); // 추가적인 사용자 입력
public void PrintInfo() {
System.Console.WriteLine(ToString() + “ S.A.=” + SurfaceArea + “ Vol=” + Volume);
}
public abstract class Figure {
public abstract FigureType Type { get; } // 도형타입 (FigureType)
public abstract double Area { get; } // 넓이
public abstract void GetAdditionalUserInput(); // 추가적인 사용자 입력
public void PrintInfo() {
System.Console.WriteLine(ToString() + “Area=” + Area);
}

2. Geometry 추상클래스를 상속받은 Sphere, Cone, Cylinder, … 는 겉넓이(Surface Area), 부피(Volume)를 계산하여 출력한다. 그리고 Figure 추상클래스를 상속받은 Triangle, Square, Rectangle, … 등 클래스는 넓이(Area)를 계산하여 출력한다.

3. GeometryFactory 클래스와 FigureFactory 클래스는 사용자가 입력한 도형타입에 따라 원하는 실제 클래스 (즉, Sphere, Cone, … 그리고 Triangle, Square,.. 등등) 객체를 생성하여 계산한다. 이 클래스는 다음의 메소드 (Method)만을 갖는다.
+public static Geometry GetInstance(GeometryType type)
+public static Figure GetInstance(FigureType type)

4. GeometryCalculator 클래스와 FigureCalculator 클래스는 계산 메소드를 갖는다
+ public static void CalculateAll() // ArrayList에 Geometry/Figure 객체를 생성하여 넣고, 각각의 SurfaceArea&Volume/Area를 계산한다.
+ public static void CalculateByUserInput() // 사용자 입력으로 원하는 Geometry/Figure 객체를 생성하여 SurfaceArea&Volume/Area를 계산하고, ArrayList에 저장해 두었다가 프로그램을 종료할 시 전체 리스트를 출력한다.

5. Utility 클래스에서는 각종 유틸리티 메소드를 갖는다.
+public static GeometryType GetUserGeometry()
+public static FigureType GetUserFigure()
+public static double GetUserInputDouble()
+public static int GetUserInputBetween(int min, int max)
+public static bool GetUserExitKey()

6. GeoFigCalculator 클래스에서는 사용자의 입력에 따라 GeometryCalculator와 FigureCalculator를 이용하여 계산한 모든 결과를 출력한다.

7. 사용자의 잘못된 입력에 따른 처리를 반드시 포함해야 하며, 그 외에 본인이 더 테스트해보고 싶은 method나 routine을 추가하라. 실행 화면과 코드를 첨부하시오.

HW1 다시 제출

HW1 숙제를 e-learning 강의실에 실행파일(bin\*.exe)과 소스코드(*.cs)와 보고서(*.doc/*.hwp)를 전부 “학번_이름_HW1.zip”으로 묶어서 제출하도록 합니다. 또한, 비주얼 스튜디오에서 만든 프로젝트 전체 파일(*.sln, *.csproj)을 폴더에 같이 넣어주시기 바랍니다. 보고서는 출력해서 수업시간에 제출합니다.

HW1

단국대학교 멀티미디어공학과 HCI프로그래밍2 (2016년 가을학기) 실습

과목코드 : 300890

강사 : 박경신

날짜: 2016년 9월 12 일

 

– 실습번호 : HW1 (Due by 9/26)

– 실습제목 : enum, if/switch, do/while, for, read/write, nullable

– 실습요약 : 도형의 겉넓이와 부피 구하기 (SurfaceAreaVolumeCalculator)

– 준비자료 :

http://math.about.com/od/formulas/ss/surfaceareavol.htm

 

– 실습문제

  1. SurfaceAreaVolumeCalculator 클래스 작성
  2. enum Geometry { SPHERE=1, CONE=2, CYLINDER=3, RECTANGULAR_PRISM=4, SQUARE_PYRAMID=5, ISOSCELES_TRIANGULAR_PRISM=6 }
  3. double CalculateSurfaceArea(Geometry? type)은 도형(SPHERE/CONE/..)에 따라 겉넓이(Surface Area) 계산. double CalculateVolume(Geometry? type)은 도형(SPHERE/CONE/..)에 따라 부피(Volume)을 계산.
  4. Geometry? GetUserInputGeometry()은 콘솔창 사용자 입력에서 도형(SPHERE/CONE/..) 판별. double GetUserInputDouble()은 콘솔창 사용자 입력에서 double 값이 아니면 다시 재입력.                                                       void GetUserInputAdditionalInformation(Geometry? type)는 콘솔창 사용자 입력에서 각 도형마다 추가적인 정보를 요청하여 입력.
  5. + 예시: 선택한 도형 (e.g. SPHERE/CONE), 그에 따른 추가적인 입력을 받음. (e.g., 구의 반지름/radius, 원뿔의 반지름/radius와 높이/height)
    + while 문을 사용하여 잘못된 입력일 경우, 다시 사용자 입력을 받음.

  6. void Print()는 각 도형마다 도형의 겉넓이와 부피 값을 콘솔창에 출력
  7. +for(int i=1; i<=10; i++)를 사용하여 크기에 따른 각 도형의 넓이를 표로 출력함.

  8. 본인의 원하는 메소드나 루틴을 더 추가한다. 예를 들어 다른 도형의 넓이(또는 부피) 계산 등. 위의 코드로 프로그램을 작성하고, 실행 화면과 코드를 첨부하시오.