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을 추가하라. 실행 화면과 코드를 첨부하시오.