ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WinForm 콤보박스를 이용한 학점계산기
    C# 예제 공부일기 2020. 8. 11. 19:26

    과목명을 표시하는 7개의 TextBox와 학점수와 성적을 입력하는 각각 7개씩의 콤보박스로 구성된다. 

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Test1
    {
        public partial class Form : System.Windows.Forms.Form
        {
            public Form()
            {
                InitializeComponent();
            }
            TextBox[] titles; //교과목 Text배열
            ComboBox[] crds; //학점 Combobox 배열
            ComboBox[] grds; //성적 Combobox 배열
            private void txt2_Load(object sender, EventArgs e)
            {
                txt1.Text = "인체의 구조와 기능";
                txt2.Text = "일반수학";
                txt3.Text = "디지털공학및실험";
                txt4.Text = "자료구조";
                txt5.Text = "비주얼 프로그래밍";
                txt6.Text = "기업가정신";
                //일일이 타이핑하기 귀찮으니 미리 TextBox 초기화
    
                crds = new ComboBox[] { crd1, crd2, crd3, crd4, crd5, crd6, crd7 }; //콤보박스를 한꺼번에 처리하기위함
                grds = new ComboBox[] { grd1, grd2, grd3, grd4, grd5, grd6, grd7 };
                titles = new TextBox[] { txt1, txt2, txt3, txt4, txt5, txt6, txt7 };//과목이름이 비어있는지 체크하기 위함
                int[] arrCredits = new int[] { 1, 2, 3, 4, 5 }; //학점콤보박스에 넣을 값들
                List<String> lstGrade = new List<string> { "A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0" ,"F"};
                //성적 콤보박스에 넣을 값들
                UPdateCbo(crds,grds,titles,arrCredits,lstGrade); //콤보박스 없데이트
    
                
    
            }
    
            private void UPdateCbo(ComboBox[] crds, ComboBox[] grds, TextBox[] titles, int[] arrCredits, List<string> lstGrade)
            {
                foreach (var item in crds) //콤보박스마다
                {
                    foreach (var i in arrCredits)//위에서 정의한 1,2,3,4,5 Add
                    {
                        item.Items.Add(i);
                    }
                    item.SelectedItem = 3;
                }
    
                foreach (var item in grds) //콤보박스마다
                {
                    foreach (var i in lstGrade) //위에서 정의한 A+ ~ F Add
                    {
                        item.Items.Add(i);
                    }
                }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {//평균평점 클릭할 시
                double totalscore = 0;
                int totalCredits = 0;
    
                for(int i=0;i<crds.Length;i++) //학점 콤보박스의 수만큼 반복
                {
                    if(titles[i].Text != "")//과목란이 비어있으면 집계안함
                    {
                        int crd = int.Parse(crd1.SelectedItem.ToString());//학점 콤보박스에서 선택한 값 int로 변환
                        totalCredits += crd; //누적
                        totalscore += crd * GetGrade(grds[i].SelectedItem.ToString());
                        //학점*성적 으로 총합성적 산출
                    }
                }
                avg.Text = (totalscore / totalCredits).ToString("0.00");
                //총합성적에서 학점을 다 더한값을 나눈 걸 X.XX 형태로 TextBox에 표시
            }
            private double GetGrade(string text)
            {
                double grade = 0;
                switch(text) //입력받은 문자열에 따른 성적 숫자 반환
                {
                    case "A+":
                        grade = 4.5;
                        break;
                    case "A0":
                        grade = 4.0;
                        break;
                    case "B+":
                        grade = 3.5;
                        break;
                    case "B0":
                        grade = 3.0;
                        break;
                    case "C+":
                        grade = 2.5;
                        break;
                    case "C0":
                        grade = 2.0;
                        break;
                    case "D+":
                        grade = 1.5;
                        break;
                    case "D0":
                        grade = 1.0;
                        break;
                    default:
                        grade = 0;
                        break;
                }
                return grade;
            }
        }
    }
    

     

     

    콤보박스형의 배열을 만들어서 모두 똑같은 값을 Add해야할 경우 반복문 돌리면 되서 편리하다.

    ComboBox[] crds = new ComboBox[] { crd1, crd2, crd3, crd4, crd5, crd6, crd7 };

    'C# 예제 공부일기' 카테고리의 다른 글

    C# Random 클래스  (0) 2020.08.20
    MES 1일  (0) 2020.08.10
    미니프로젝트 정리 (조원파트) NewMemberForm  (0) 2020.08.08
    미니프로젝트 정리 (조원파트) Login Form  (0) 2020.07.31
    Thread  (0) 2020.07.31
Designed by Tistory.