HW3

연습문제 (3)







단원 : C# 기초


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


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


준비자료 : 기상데이터


  8043775710.zip


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


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


 


[연습문제]


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


다음 속성(Property)를 지정하여 외부에서 사용할 수 있도록 한다.


– public int Year { get; set;}


– public int Month { get; set;}


– public int Day { get; set;}


– public double MaximumTemperature { get; set;} // 최대기온 (섭씨 도)


– public double AverageTemperature{ get; set;} // 평균기온 (섭씨 도)


– public double LowTemperature{ get; set;} // 최저기온 (섭씨 도)


– public double Humidity { get; set;} // 평균습도(%)


– public double Wind { get; set;} // 평균풍속 (m/s)


– public double DaylightHours { get; set;} // 일조시간 (hr)


– public double Precipitation{ get; set;} // 강수량 (mm)


– public double SnowAccumulation { get; set;} // 최심신적설 (cm)


– public double AverageCloudCover { get; set;} // 일평균운량 ()




– public double WindChillTemperature { get; } // 체감온도 (11~3) 내부구현필요


– public double HeatIndex{ get; } // 열지수 (6~9) 내부구현필요


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


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


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


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


 


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


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


– public bool Equals(WeatherInfo other) { // Year & Month & Day가 일치하는지 내부구현 필요 }


 


3. WeatherInfoComparer.cs 파일에는 IComparer<WeatherInfo> 인터페이스를 상속받은 각종 비교 클래스들을 구현한다. WeatherInfoManager 클래스의 Sort 메소드에서 사용됨. (10%)


– class WeatherYearComparer : IComparer<WeatherInfo>


{ public int Compare(WeatherInfo p, WeatherInfo q) // 내부구현 필요 }


– class WeatherMonthComparer : IComparer<WeatherInfo>


{ public int Compare(WeatherInfo p, WeatherInfo q) // 내부구현 필요 }


– class WeatherDayComparer : IComparer<WeatherInfo>


{ public int Compare(WeatherInfo p, WeatherInfo q) // 내부구현 필요 }


– class WeatherTemperatureComparer: IComparer<WeatherInfo>


{ public int Compare(WeatherInfo p, WeatherInfo q) // 내부구현 필요 }


– class WeatherHumidityComparer: IComparer<WeatherInfo>


{ public int Compare(WeatherInfo p, WeatherInfo q) // 내부구현 필요 }


– class WeatherWindComparer: IComparer<WeatherInfo>


{ public int Compare(WeatherInfo p, WeatherInfo q) // 내부구현 필요 }


– class WeatherPrecipitationComparer : IComparer<WeatherInfo>


{ public int Compare(WeatherInfo p, WeatherInfo q) // 내부구현 필요 }


 


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


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


SortMode 열거형을 정의한다.


enum SortMode { Year, Month, Day, Temperature, Humidity, Wind, Precipitation }


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


public List<WeatherInfo> wList = new List<WeatherInfo>();


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


// 선택한 모드에 따라서 리스트의 데이터를 Year, Month, Day, Temperature, Humidity, Wind, Precipitation 순서로 정렬


// WeatherMonthComparer, WeatherDayComparer 등 사용


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


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


– public void Print() { foreach (var w in wList) Console.WriteLine(w); }


5. WeatherInfoFileManager.cs 파일에는 WeatherInfoFileManager 클래스를 정의하라. (10%)


// 지정한 디렉토리 (path)에 지정한 파일확장자 (ext)인 모든 파일을 읽어서 Import


– public static void Import(string path, string ext, ref List<WeatherInfo> tList) { // 내부적으로 Import(string filename, ref List<WeatherInfo> tList) 호출 }


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


// StreamReader 사용


– public static void Import(string filename, ref List<WeatherInfo> tList) { // 내부구현 필요 }


// 지정한 파일명(filename)으로 tList의 모든 원소를 cvs(comma separated value) 텍스트로 저장


// StreamWriter 사용


– public static void Export(string filename, ref IList<WeatherInfo> tList) { // 내부구현 필요 }


 


6. WeatherInfoManger클래스 또는 Program 클래스의 Main 함수에서 본인이 더 테스트해보고 싶은 Method를 추가하라. 디렉토리에 데이터를 읽어서, 여러 가지 방법으로 정렬 및 LINQ 쿼리를 한 후 새로운 파일에 저장한다. (20%)



// LINQ를 이용하여 리스트에서 지정한 평균온도 내에 있는 것만 List로 추출


public IList<WeatherInfo> GetWeatherInfoListByTemperatureRange(double min, double max) { // 내부구현 필요 – LINQ 와 ToList() 사용  }


 


// LINQ를 이용하여 리스트에서 지정한 평균습도 내에 있는 것만 List로 추출


public IList<WeatherInfo> GetWeatherInfoListByHumidityRange(double min, double max) { // 내부구현 필요 – LINQ 와 ToList() 사용 }


 


// LINQ를 이용하여 11~ 익년 3월 기간 동안 것만 List로 추출하여 체감온도 계산


// LINQ를 이용하여 6~ 9월 기간 동안의 것만 List로 추출하여 열지수 계산


public IList<WeatherInfo> GetWeatherInfoListByMonthRange(double min, double max) { // 내부구현 필요 – LINQ 와 ToList() 사용  }


Leave a Reply

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