using System;
using System.Collections.Generic;
using System.Linq;

public class KG
{
    public int Ban { get; set; }
    public int Num { get; set; }
    public int Kg { get; set; }
    public int banAvg { get; set; }
    public int SumBanKg { get; set; }
    public int BanAvg { get; set; }
    public int TotalKg { get; set; }
    public int TotalAvg { get; set; }

    public KG()
    {
        // Empty
    }
    public KG(int ban, int num, int kg)
    {
        this.Ban = ban;
        this.Num = num;
        this.Kg = kg;
    }
}

public class 체중관리프로그램
{
    public static void Main(string[] args)
    {
        int banTemp = 0;
        int numTemp = 0;
        int kgTemp = 0;

        List<KG> lst = new List<KG>();
        KG pi;

        Console.WriteLine("자료를 입력하세요.");
        do
        {
            pi = new KG();
            Console.Write("반 : _\b");
            banTemp = Convert.ToInt32(Console.ReadLine());              // 반정보 입력
            if (banTemp > 9)                                            // 반정보 9까지 인지 확인
            {
                Console.WriteLine("반은 1~9 사이의 값이여야 합니다.");      // Error
                return;
            }
            else
            {
                pi.Ban = banTemp;
            }

            Console.Write("번호 : __\b\b");
            numTemp = Convert.ToInt32(Console.ReadLine());              // 번호 입력
            if (numTemp > 10 || numTemp < 1)                            // 1~10 인지 확인
            {
                Console.WriteLine("번호는 1~10 사이의 값이여야 합니다.");    // Error
                return;
            }
            else
            {
                pi.Num = numTemp;
            }

            Console.Write("몸무게 : __\b\b");
            kgTemp = Convert.ToInt32(Console.ReadLine());               // 몸무게 입력
            if (kgTemp < 40 || kgTemp > 200)                            // 40 ~ 200 인지 확인
            {
                Console.WriteLine("몸무게는 40~200 사이의 값이여야 합니다."); // Error
                return;
            }
            else
            {
                pi.Kg = kgTemp;
            }
            lst.Add(pi);

        } while (lst.Count < 5);       // 최대 학생수 10명 확인

        IEnumerable<IGrouping<int, KG>> q = from p in lst group p by p.Ban;     // 반별로 그룹핑
        int countBan = q.Count();                                               // 반수 확인
        foreach (IGrouping<int, KG> g in q)                                     // 반별 출력
        {
            Console.WriteLine("\r\n" + g.Key + "반\t번호\t몸무게");
            foreach (KG k in g)
            {
                Console.WriteLine("{0}\t {1}\t {2}", k.Ban, k.Num, k.Kg);       // 개인 출력
            }
            IEnumerable<int> query = from p in lst where p.Ban == g.Key select p.Kg;    // 몸무게만 선택
            pi.SumBanKg = query.Sum();                                                  // 몸무게 합산
            pi.BanAvg = (int)((double)query.Sum() / (double)query.Count() + 0.5);       // 반평균 계산 (반올림)

            pi.TotalKg += pi.BanAvg;                                                    // 전체 합산

            Console.WriteLine(g.Key + "반 평균 :" + pi.BanAvg);                        // 반평균 출력
        }
        pi.TotalAvg = (int)(((double)pi.TotalKg / (double)countBan) + 0.5);             // 전체 평균 (반올림)
        Console.WriteLine("전체평균 : " + pi.TotalAvg);
    }
}


'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

105. 파일처리  (0) 2009.08.24
90. 프로젝션  (0) 2009.08.20
89. LINQ - 그룹알고리즘  (0) 2009.08.19
88. LINQ - 병합  (0) 2009.08.19
87. LINQ - 합계 카운트 평균  (0) 2009.08.19
Posted by holland14
: