체감온도(Wind Chill Temperature)와 열지수(Heat Index)를 구하는 Windows Forms 응용프로그램을 작성한다.
Monthly Archives: November 2013
lecture9
HW3
연습문제 (3)
□ 단원 : C# 기초 □ 목표 : C# 객체지향 프로그래밍 □ 주요 연습 내용 : collections, class, interface, 속성, FileIO, LINQ 연습 □ 준비자료 : 기상데이터 |
연습문제 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() 사용 }
VC# Windows Forms Application
- .NET2010
Visual C# Windows Forms Application 프로젝트 새로 만들기
Dialog-based App 프로젝트 새로 만들기
- 메뉴에서 File->New->Project->Visual C# 템플릿->Windows Forms Application를 선택한 후 “프로젝트 이름(예를 들어, WindowFormHelloWorldApplication)”을 적고 확인버튼을 누르면 빈폼 프로젝트가 생성된다.
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/1884178186.png)
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/9775397860.png)
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/9132768911.png)
코드 추가
- Toolbox(도구상자) 에서 컨트롤을 선택(예를 들어, Label 또는 Button)하여 Dialog기반의 Form 안에 추가하여 편집한다.
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/4440558883.png)
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/6067068770.png)
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/6593246798.png)
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/1312449413.png)
컨트롤에 이벤트 추가하기
-컨트롤 (예를들어, 버튼을 더블클릭하면 또는 이벤트목록중 Click이벤트에 더블클릭하면)에 클릭 이벤트에 대한 이벤트핸들러에 내용(예를 들어, 레이블의 Text를 “Button Clicked”)을 작성한다.
private void button1_Click(object sender, EventArgs e)
{
// button1을 클릭하면 label1에 “Button Clicked”출력
label1.Text = “Hello World!”;
}
빌드(F7) 후 실행(F5)하기
![사용자 삽입 이미지](http://dis.dankook.ac.kr/lectures/hci11/attach/1/5649027187.png)