훈스에서 어느분이 객체지향을 공부하신다기에....
# 1) 프로그래밍2009. 7. 15. 23:33
간단히 학생들에 대한 점수 계산 후 ...
평점 순위별로 재정렬 하는 질문이었음. 참 재미있었음!!
쩝.. 분류를 어디다 넣는다!!.. ㅡ.,ㅡ;?
질문글
http://www.hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=25054&Key=&Value=
답글
http://www.hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=25061&Key=&Value=
List<T> 를 이용해서 학생이 수강한 과목들을 가지는 학생정보를 생성하고
List<T> 를 이용해서 학생정보들을 취합한 학생들! 이란걸 만들었음.
그리고 학생들을 정렬시키는 조건이 되는 객체를 생성해서
Sort 에 넣어줌.
관련 링크는 아래 소스에 주석문에 포함되어있음.
* 학생정보들 이 되어야 될텐데.. 아차차!!!
<객체> 대충 그림.
사람 <----- 학생정보,
학생들 (*) ----- (1) ( 학생정보 (1) ---- (*) 과목 )
과목,
평균정렬, 총점정렬
// 설정
.net 2.0으로 제작!
폼 1개,
버튼 2개 -> 각 버튼별 Click이벤트 ,
리스트뷰 1개 -> View속성 -> View.List; 로 설정,
// 원본 소스
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
public Form1()
{
InitializeComponent();
학생정보 a군 = new 학생정보("a군");
a군.Add("영어", 10);
a군.Add("국어", 50);
a군.Add("수학", 40); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점 // 순위 확인을 위해
public class 사람
{
private string __이름 = string.Empty;
public class 학생정보 : 사람
{
public 학생정보(): base("홍길동")
{
}
List<과목> 수강과목 = new List<과목>();
public void Add(과목 과목)
{
수강과목.Add(과목);
}
public class 과목
{
public 과목(string _과목명, int _점수)
{
__과목명 = _과목명;
__점수 = _점수;
}
}
평점 순위별로 재정렬 하는 질문이었음. 참 재미있었음!!
쩝.. 분류를 어디다 넣는다!!.. ㅡ.,ㅡ;?
질문글
http://www.hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=25054&Key=&Value=
답글
http://www.hoons.kr/Board.aspx?Name=QACSHAP&Mode=2&BoardIdx=25061&Key=&Value=
<총점으로 정렬 하기>
<평균으로 정렬하기>
List<T> 를 이용해서 학생이 수강한 과목들을 가지는 학생정보를 생성하고
List<T> 를 이용해서 학생정보들을 취합한 학생들! 이란걸 만들었음.
그리고 학생들을 정렬시키는 조건이 되는 객체를 생성해서
Sort 에 넣어줌.
관련 링크는 아래 소스에 주석문에 포함되어있음.
* 학생정보들 이 되어야 될텐데.. 아차차!!!
<객체> 대충 그림.
사람 <----- 학생정보,
학생들 (*) ----- (1) ( 학생정보 (1) ---- (*) 과목 )
과목,
평균정렬, 총점정렬
// 설정
.net 2.0으로 제작!
폼 1개,
버튼 2개 -> 각 버튼별 Click이벤트 ,
리스트뷰 1개 -> View속성 -> View.List; 로 설정,
// 원본 소스
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
List<학생정보> 학생들 = new List<학생정보>();
{
public partial class Form1 : Form
{
List<학생정보> 학생들 = new List<학생정보>();
public Form1()
{
InitializeComponent();
학생정보 a군 = new 학생정보("a군");
a군.Add("영어", 10);
a군.Add("국어", 50);
a군.Add("수학", 40); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점
a군.Add("수학", 10); // 총 100점 평 33점 // 순위 확인을 위해
학생정보 b군 = new 학생정보("b군");
b군.Add("영어", 10);
b군.Add("국어", 20);
b군.Add("수학", 100);// 총 40 평 13
학생정보 c군 = new 학생정보("c군");
c군.Add("영어", 10);
c군.Add("국어", 10);
c군.Add("수학", 40); // 총 20 평 10
b군.Add("영어", 10);
b군.Add("국어", 20);
b군.Add("수학", 100);// 총 40 평 13
학생정보 c군 = new 학생정보("c군");
c군.Add("영어", 10);
c군.Add("국어", 10);
c군.Add("수학", 40); // 총 20 평 10
a군.평균구하기();
b군.평균구하기();
c군.평균구하기();
b군.평균구하기();
c군.평균구하기();
학생들.Add(a군);
학생들.Add(b군);
학생들.Add(c군);
학생들.Add(b군);
학생들.Add(c군);
listView1.View = View.List;
// 리스트 뷰에 아이템 컬럼 추가하기
listView2.View = View.Details;
// 리스트 뷰에 아이템 컬럼 추가하기
listView2.View = View.Details;
listView2.Columns.Add("이름", "이름");
listView2.Columns.Add("과목수", "과목수");
listView2.Columns.Add("총점", "총점");
listView2.Columns.Add("평균", "평균");
listView2.Columns.Add("영어", "영어");
listView2.Columns.Add("국어", "국어");
listView2.Columns.Add("수학", "수학");
listView2.Columns.Add("과목수", "과목수");
listView2.Columns.Add("총점", "총점");
listView2.Columns.Add("평균", "평균");
listView2.Columns.Add("영어", "영어");
listView2.Columns.Add("국어", "국어");
listView2.Columns.Add("수학", "수학");
comboBox1.DataSource = Enum.GetNames(typeof(View));
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Text = "평균정렬";
학생들.Sort(new 평균비교());
Display();
}
{
this.Text = "평균정렬";
학생들.Sort(new 평균비교());
Display();
}
private void button2_Click(object sender, EventArgs e)
{
this.Text = "총점정렬";
학생들.Sort(new 총점비교());
Display();
}
{
this.Text = "총점정렬";
학생들.Sort(new 총점비교());
Display();
}
public void Display()
{
listView1.Items.Clear();
listView2.Items.Clear();
foreach (학생정보 정보 in 학생들)
{
this.listView1.Items.Add(정보.ToString());
// 리스트 뷰에 아이템 추가하기
// [정보.이름]은 이미지에서 보다싶이 첫번재 컬럼에 들어감.
ListViewItem _정보 = new ListViewItem(정보.이름);
_정보.SubItems.Add(정보.과목수.ToString() );
_정보.SubItems.Add(정보.총점.ToString() );
_정보.SubItems.Add(정보.평균.ToString() );
_정보.SubItems.Add(정보["영어"].ToString() );
_정보.SubItems.Add(정보["국어"].ToString() );
_정보.SubItems.Add(정보["수학"].ToString() );
this.listView2.Items.Add(_정보);
}
}
{
listView1.Items.Clear();
listView2.Items.Clear();
foreach (학생정보 정보 in 학생들)
{
this.listView1.Items.Add(정보.ToString());
// 리스트 뷰에 아이템 추가하기
// [정보.이름]은 이미지에서 보다싶이 첫번재 컬럼에 들어감.
ListViewItem _정보 = new ListViewItem(정보.이름);
_정보.SubItems.Add(정보.과목수.ToString() );
_정보.SubItems.Add(정보.총점.ToString() );
_정보.SubItems.Add(정보.평균.ToString() );
_정보.SubItems.Add(정보["영어"].ToString() );
_정보.SubItems.Add(정보["국어"].ToString() );
_정보.SubItems.Add(정보["수학"].ToString() );
this.listView2.Items.Add(_정보);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
View v = listView2.View;
{
View v = listView2.View;
try
{
this.Text = "";
listView2.View = (View)Enum.Parse(typeof(View ), comboBox1.SelectedItem.ToString());
}
catch
{
this.Text = "err";
listView2.View = v;
}
{
this.Text = "";
listView2.View = (View)Enum.Parse(typeof(View ), comboBox1.SelectedItem.ToString());
}
catch
{
this.Text = "err";
listView2.View = v;
}
}
}
}
#region 계산용 -- 클래스
/// <summary>
/// <para> List.Sort 메서드 도움말 참조 </para>
/// http://msdn.microsoft.com/ko-kr/library/234b841s(VS.85).aspx 참고!
/// </summary>
public class 평균비교
: IComparer<학생정보>
{
#region IComparer<학생정보> 멤버
/// <summary>
/// <para> List.Sort 메서드 도움말 참조 </para>
/// http://msdn.microsoft.com/ko-kr/library/234b841s(VS.85).aspx 참고!
/// </summary>
public class 평균비교
: IComparer<학생정보>
{
#region IComparer<학생정보> 멤버
public int Compare(학생정보 x, 학생정보 y)
{
if (x == null)
{
if (y == null)
{
return 0;
}
{
if (x == null)
{
if (y == null)
{
return 0;
}
return -1;
}
else
{
if (y == null)
{
return 1;
}
}
else
{
if (y == null)
{
return 1;
}
if (x.평균 > y.평균)
{
return 1;
}
else if (x.평균 < y.평균)
{
return -1;
}
else
{
return 0;
}
{
return 1;
}
else if (x.평균 < y.평균)
{
return -1;
}
else
{
return 0;
}
}
}
#endregion
}
}
/// <summary>
/// <para> List.Sort 메서드 도움말 참조 </para>
/// http://msdn.microsoft.com/ko-kr/library/234b841s(VS.85).aspx 참고!
/// </summary>
public class 총점비교 : IComparer<학생정보>
{
#region IComparer<학생정보> 멤버
/// <para> List.Sort 메서드 도움말 참조 </para>
/// http://msdn.microsoft.com/ko-kr/library/234b841s(VS.85).aspx 참고!
/// </summary>
public class 총점비교 : IComparer<학생정보>
{
#region IComparer<학생정보> 멤버
public int Compare(학생정보 x, 학생정보 y)
{
if (x == null)
{
if (y == null)
{
return 0;
}
{
if (x == null)
{
if (y == null)
{
return 0;
}
return -1;
}
else
{
if (y == null)
{
return 1;
}
}
else
{
if (y == null)
{
return 1;
}
if (x.총점 > y.총점)
{
return 1;
}
else if (x.총점 < y.총점)
{
return -1;
}
else
{
return 0;
}
{
return 1;
}
else if (x.총점 < y.총점)
{
return -1;
}
else
{
return 0;
}
}
}
#endregion
}
#endregion
}
#endregion
public class 사람
{
private string __이름 = string.Empty;
public string 이름
{
get { return __이름; }
//set { __이름 = value; }
}
{
get { return __이름; }
//set { __이름 = value; }
}
public 사람(string 사람이름)
{
this.__이름 = 사람이름;
}
{
this.__이름 = 사람이름;
}
public override string ToString()
{
return string.Format("나는 {0}입니다." + Environment.NewLine, __이름);
}
}
{
return string.Format("나는 {0}입니다." + Environment.NewLine, __이름);
}
}
public class 학생정보 : 사람
{
public 학생정보(): base("홍길동")
{
}
public 학생정보(string 이름): base(이름)
{}
{}
List<과목> 수강과목 = new List<과목>();
public int 과목수
{
get { return 수강과목.Count; }
}
{
get { return 수강과목.Count; }
}
public int this[string ___과목명]
{
get {
{
get {
foreach (과목 item in 수강과목)
{
if (item.p과목명 == ___과목명)
{
return item.점수;
}
}
{
if (item.p과목명 == ___과목명)
{
return item.점수;
}
}
return -1;
// throw new Exception("과목이없음.");
}
}
// throw new Exception("과목이없음.");
}
}
public void Add(과목 과목)
{
수강과목.Add(과목);
}
public void Add(string _과목명, int _점수)
{
Add( new 과목( _과목명, _점수 ));
}
{
Add( new 과목( _과목명, _점수 ));
}
int __평균 = 0;
public int 평균
{
get { return __평균; }
// set { __평균 = value; }
}
int __총점 = 0;
{
get { return __평균; }
// set { __평균 = value; }
}
int __총점 = 0;
public int 총점
{
get { return __총점; }
// set { __총점 = value; }
}
{
get { return __총점; }
// set { __총점 = value; }
}
public void 평균구하기()
{
if (수강과목.Count <= 0)
{
__평균 = __총점 = 0;
return;
}
총점구하기();
this.__평균 = __총점 / 수강과목.Count;
}
{
if (수강과목.Count <= 0)
{
__평균 = __총점 = 0;
return;
}
총점구하기();
this.__평균 = __총점 / 수강과목.Count;
}
private void 총점구하기()
{
foreach (과목 item in 수강과목)
{
__총점 += item.점수;
}
}
{
foreach (과목 item in 수강과목)
{
__총점 += item.점수;
}
}
public override string ToString()
{
string ret = base.ToString();
ret += string.Format(" 과목수:{2}, 총점:{0} , 평균:{1} 입니다" +Environment.NewLine, __총점, __평균, 수강과목.Count);
foreach (과목 item in 수강과목)
{
ret += item.ToString();
}
return ret + Environment.NewLine;
}
}
{
string ret = base.ToString();
ret += string.Format(" 과목수:{2}, 총점:{0} , 평균:{1} 입니다" +Environment.NewLine, __총점, __평균, 수강과목.Count);
foreach (과목 item in 수강과목)
{
ret += item.ToString();
}
return ret + Environment.NewLine;
}
}
public class 과목
{
public 과목(string _과목명, int _점수)
{
__과목명 = _과목명;
__점수 = _점수;
}
string __과목명 = string.Empty;
public string p과목명
{
get { return __과목명; }
// set { 과목명 = value; }
}
int __점수 = 0;
{
get { return __과목명; }
// set { 과목명 = value; }
}
int __점수 = 0;
public int 점수
{
get { return __점수; }
//set { __점수 = value; }
}
{
get { return __점수; }
//set { __점수 = value; }
}
public override string ToString()
{
return string.Format("{0} 과목의 점수는 {1}점입니다. "+Environment.NewLine, __과목명, __점수);
}
}
{
return string.Format("{0} 과목의 점수는 {1}점입니다. "+Environment.NewLine, __과목명, __점수);
}
}
}
'# 1) 프로그래밍' 카테고리의 다른 글
VS : 정의 보기 -> 되돌아가기.. 단축키 (1) | 2010.01.22 |
---|---|
나만에 개발방법... (0) | 2010.01.13 |
디자인 패턴관련... (0) | 2009.07.13 |
인터페이스 (0) | 2009.07.10 |
객체지향을 꿈꾸며... (0) | 2009.07.10 |