Assignment3

연습문제 (3)






□ 단원 : C# 기초


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


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


□ 준비자료 : 지진데이터


8900963879.hwp4018427041.zip


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


-cyber 강의(cyber.dku.edu)로 source code, executable file, solution/project VC# file,

보고서를 학번_이름_Ex3.zip으로 묶어서 낼 것. 보고서 (30%)



[연습문제]


1. QuakeData.cs 파일에 QuakeData 클래스를 정의하라. (10%)


다음 데이터 멤버 필드를 포함한다.


– private int year, month, day;


– private double time;


– private double lat, lon;


– private double magnitude, depth;


그리고 각 멤버 필드에 대한 속성(Property)를 지정하여 외부에서 사용할 수 있도록 한다.


– public int Year { get; set;}// get과 set에 대한 내부구현 필요


– public int Month { get; set;}


– public int Day { get; set;}


– public double Time { get; set;}


– public double Lat { get; set;}


– public double Lon { get; set;}


– public double Magnitude { get; set;}


– public double Depth { get; set;}


또한 다음 메소드를 포함한다.


– QuakeData() // 기본 생성자 내부구현 필요


– QuakeData(int, int, int, double, double, double, double, double)// 생성자 내부구현필요


– public override string ToString() // QuakeData의 모든 정보를 csv 포맷으로 출력하는 메소드 내부구현 필요


 


2. QuakeData클래스에 IComparable<QuakeData>와 IEquatable<QuakeData> 인터페이스를 상속받고 다음 메소드를 구현한다. (10%)


– public int CompareTo(QuakeData other){ // Year 순서대로 비교하는 내부구현 필요}


– public bool Equals(QuakeData other){ // == 내부구현 필요 }


 


 


3. QuakeDataComparer.cs 파일에는 IComparer<QuakeData> 인터페이스를 상속받은 각종 비교 클래스들을 구현한다. QuakeDataManager 클래스의 Sort 메소드에서 사용됨. (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) // 내부구현 필요 }


 


4. QuakeDataManager.cs 파일에는 QuakeDataManager 클래스를 정의하라. (20%)


http://msdn.microsoft.com/en-us/library/system.collections.arraylist(VS.71).aspx


QuakeSortMode 열거형을 정의한다.


enum QuakeSortMode { Year, Month, Day, Time, Lat, Lon, Magnitude, Depth}


QuakeDataManager클래스는 리스트를 데이터 멤버로 포함한다.


– private List<QuakeData> pList = new List<QuakeData>();


그리고 메소드는 다음을 포함한다.


// cvs(comma separated value) 텍스트를 읽어서 pList에 추가


// StreamReader 사용


– public void Import(string filename) { // 내부구현 필요 }


// pList의 모든 원소를 cvs(comma separated value) 텍스트로 저장


// StreamWriter 사용


– public void Export() { // 내부구현 필요 }


 


// 선택한 모드에 따라서 리스트의 데이터를 Year, Month, Day, Time, Lat, Lon, Magnitude, Depth 순서로 정렬


// QuakeMonthComparer, QuakeDataComparer, QuakeTimeComparer 등을 사용


– public void Sort(QuakeSortMode mode) { // 내부구현 필요 }


 


// 리스트에 모든 QuakeData를 출력


// pList.ForEach에 각각의 Print를 출력하는 Action delegate 사용


– public void Print() { pList.ForEach(Print); }


– private void Print(QuakeData q) { Console.WriteLine(q); }


 


5. QuakeDataManger클래스 또는 Program 클래스의 Main 함수에서 본인이 더 테스트해보고 싶은 Method를 추가하라. (20%)


// 리스트에서 강도가 몇 이상인 조건을 만족하는 새 리스트 List<QuakeData> 반환


// pList.FindAll에 IsMagnitudeGreater를 호출하는 Predicate delegate 사용


// IsMagnitudeGreater 안에서는 사용자가 지정한 mag값보다 클 경우 true반환


– public List<QuakeData> GetQuakeListByMagnitude(double mag)


– private bool IsMagnitudeGreater(QuakeData q)


 


// 리스트에서 지정한 영역에 속한 데이터만 뽑아 새 리스트 List<QuakeData> 반환


// pList.FindAll에 InRange안에 있는지 알려주는 Predicate delegate 사용


// InRange 안에서는 사용자가 지정한 lat1, lon1, lat2, lon2 안에 있을 경우 true반환


– public List<QuakeData> GetQuakeListByRange(double lat1, double lon1, double lat2, double lon2)


– private bool InRange(QuakeData q)


 

Leave a Reply

Your email address will not be published. Required fields are marked *