프로그래밍/코드 정리
[C#] 성적 정렬 프로그램
NIA1995
2021. 3. 29. 01:19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @Sort
{
class Program
{
class StudentData
{
private int id;
private int kor;
private int math;
private int eng;
private int total;
public int ID
{
get { return id; }
}
public int Kor
{
get { return kor; }
}
public int Math
{
get { return math; }
}
public int Eng
{
get { return eng; }
}
public int Total
{
get { return total; }
}
public StudentData(int id, int kor, int math, int eng)
{
this.id = id;
this.kor = kor;
this.math = math;
this.eng = eng;
total = kor + math + eng;
}
}
static void Main(string[] args)
{
List<StudentData> dataList = new List<StudentData>();
bool isLoop = true;
InitData(dataList, 20);
do
{
Console.WriteLine("메뉴를 골라주세요 !");
Console.Write("(1)id정렬 (2)성적 순 정렬 (3) 국어 점수 정렬 (4)특정 점수 이상 (5)특정 점수 이하 (0)나가기");
string inputNum = Console.ReadLine();
switch (inputNum)
{
case "0":
Console.WriteLine("프로그램 종료");
isLoop = false;
break;
case "1":
SortDataByID(dataList);
break;
case "2":
SortDataByTotal(dataList);
break;
case "3":
SortDataByKor(dataList);
break;
case "4":
SortData(dataList, true);
break;
case "5":
SortData(dataList, false);
break;
default:
Console.Clear();
Console.WriteLine("다시 입력해 주세요!");
break;
}
} while (isLoop);
}
static void InitData(List<StudentData> dataList, int initCount)
{
Random rnd = new Random();
for(int i = 0; i < initCount; ++i)
{
dataList.Add(new StudentData(i+1, rnd.Next(0, 101), rnd.Next(0, 101), rnd.Next(0, 101)));
}
}
static void PrintData(List<StudentData> dataList)
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", "ID", "KOR", "MATH", "ENG", "TOTAL");
Console.WriteLine("---------------------------------------");
for(int i = 0; i < dataList.Count(); ++i)
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", dataList[i].ID, dataList[i].Kor, dataList[i].Math, dataList[i].Eng, dataList[i].Total);
}
}
static void SortDataByID(List<StudentData> listData)
{
listData.Sort(delegate (StudentData a, StudentData b)
{
if (a.ID > b.ID)
{
return 1;
}
else if (a.ID < b.ID)
{
return -1;
}
else
{
return 0;
}
});
Console.WriteLine("아이디 정렬 !");
PrintData(listData);
}
static void SortDataByTotal(List<StudentData> listData)
{
/* var data = 와 같다. */
IOrderedEnumerable<StudentData> data =
from item in listData
orderby item.Total descending
select item;
List<StudentData> sortedData = data.ToList();
Console.WriteLine("총점 정렬 !");
PrintData(sortedData);
}
static void SortDataByKor(List<StudentData> listData)
{
listData.Sort((StudentData a, StudentData b) =>
{
return b.Kor - a.Kor;
});
Console.WriteLine("국어 기준 정렬 !");
PrintData(listData);
}
static void SortData(List<StudentData> listData, bool isASC)
{
Console.Write("기준 점수 입력 : ");
string targetScore = Console.ReadLine();
int num = 0;
try
{
num = int.Parse(targetScore);
}
catch(FormatException e)
{
Console.Clear();
Console.WriteLine("올바르지 않은 문자 형식입니다. 숫자만 입력 가능 합니다!");
}
finally
{
if(num < 0)
{
Console.Clear();
Console.WriteLine("잘못된 입력 범위 입니다. -1보다 큰 수를 입력하세요 !");
}
if(num > 300)
{
Console.Clear();
Console.WriteLine("잘못된 입력 범위 입니다. 301보다 작은 수를 입력하세요 !");
}
}
if(num > -1 && num < 301)
{
if(isASC)
{
var datas =
from item in listData
where item.Total >= num
select item;
List<StudentData> sortedData = datas.ToList();
PrintData(sortedData);
}
else
{
var datas =
from item in listData
where item.Total <= num
select item;
List<StudentData> sortedData = datas.ToList();
PrintData(sortedData);
}
}
}
}
}