반응형
문제 : 임의의 10인의 성적표를 만들고, 익명 함수, LINQ, Lamda를 이용해서 값을 정렬, 추출한다.
using System;
using System.Collections.Generic;
using System.Linq;
namespace LHHCheckPoint05
{
class LHStudent
{
private int id;
private int kor;
private int eng;
private int math;
private int total;
public LHStudent(int id, int kor, int eng, int math)
{
this.id = id;
this.kor = kor;
this.eng = eng;
this.math = math;
this.total = kor + eng + math;
}
public int ID { get { return id; } }
public int KOR { get { return kor; } }
public int ENG { get { return eng; } }
public int MATH { get { return math; } }
public int TOTAL { get { return total; } }
}
class Program
{
static void InitData(List<LHStudent> _listData)
{
Random rnd = new Random();
for( int i = 0; i < 10; i++)
{
LHStudent data = new LHStudent(i, rnd.Next(0, 100), rnd.Next(0, 100), rnd.Next(0, 100));
_listData.Add(data);
}
PrintData(_listData);
}
static void PrintData(List<LHStudent> _listData)
{
foreach(var data in _listData)
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", data.ID, data.KOR, data.ENG, data.MATH, data.TOTAL);
}
}
static void SortByID(List<LHStudent> _listData)
{
// 익명 함수로 정렬하기
_listData.Sort(delegate(LHStudent a, LHStudent b)
{
if (a.ID > b.ID)
{
return 1;
}
else if (a.ID < b.ID)
{
return -1;
}
else
{
return 0;
}
});
Console.WriteLine("ID로 정렬 되었습니다.");
PrintData(_listData);
}
static void SortByTotal(List<LHStudent> _listData)
{
// LINQ로 정렬하기
var items = from item in _listData
orderby item.TOTAL descending // 내림차
select item;
List<LHStudent> sortedData = items.ToList<LHStudent>();
Console.WriteLine("총점으로 정렬 되었습니다.");
PrintData(sortedData);
}
static void SortByKor(List<LHStudent> _listData)
{
// Lamda로 정렬 (오름차순)
_listData.Sort((LHStudent a, LHStudent b) => { return a.KOR - b.KOR; });
PrintData(_listData);
}
static void FindData(List<LHStudent> _listData, bool isUp)
{
// 예외 처리
Console.WriteLine("기준 점수를 입력하세요 :");
string inputNum = Console.ReadLine();
int num = 0;
try
{
// 숫자만 입력 가능
num = int.Parse(inputNum);
}
catch
{
// 숫자가 아닌 숫자가 입력되는 경우
Console.Clear();
Console.WriteLine("입력값 {0}은 잘못된 값입니다. 숫자만 입력하세요.", num);
}
finally
{
// 숫자가 입력되었지만 0보다 작은 수가 입력 된 경우
if(num<0)
{
Console.Clear();
Console.WriteLine("입력값 {0}은 잘못된 값입니다. 0보다 큰 값을 입력하세요.", num);
}
// 허용치보다 큰 값이 입력된 경우
if(num > 300)
{
Console.Clear();
Console.WriteLine("입력값 {0}은 잘못된 값입니다. 300보다 작은 값을 입력하세요.", num);
}
}
if( num >= 0 && num <= 300)
{
// 입력된 값보다 큰 데이터 추출
if(isUp)
{
var findData = from item in _listData
where item.TOTAL >= num
select item;
List<LHStudent> data = findData.ToList<LHStudent>();
PrintData(data);
SortByID(data);
SortByTotal(data);
}
else
{
List<LHStudent> data = _listData.FindAll(data => data.TOTAL <= num);
PrintData(data);
SortByID(data);
SortByTotal(data);
}
}
}
static void Main(string[] args)
{
List<LHStudent> listData = new List<LHStudent>();
bool isLoop = true;
InitData(listData);
do
{
Console.WriteLine("메뉴를 입력하세요.");
Console.WriteLine("(1)ID로 정렬 (2)총점으로 정렬 (3)국어 점수로 정렬 (4)특정 점수 이상 출력 (5)특정 점수 이하 출력");
string inputString = Console.ReadLine();
switch(inputString)
{
case "0":
Console.WriteLine("프로그램이 종료 됩니다.");
isLoop = false;
break;
case "1":
SortByID(listData);
break;
case "2":
SortByTotal(listData);
break;
case "3":
SortByKor(listData);
break;
case "4":
break;
case "5":
break;
default:
Console.WriteLine("잘못된 수가 입력되었습니다.");
break;
}
} while (isLoop);
}
}
}
반응형
'프로그래밍 이야기 > GameDev' 카테고리의 다른 글
[게임이론] 삼각함수 (0) | 2020.12.10 |
---|---|
[C#] File - BinaryFormatter (0) | 2020.12.08 |
[C#] Lamda, Func, Action (0) | 2020.11.29 |
[C#] Delegate, Event (0) | 2020.11.26 |
C#코딩 연습 - Indexer (0) | 2020.11.21 |