
[문과 코린이의 IT 기록장] C# 활용 -Windows From 기초 & 학생관리 클래스 모델링 실습
0. Windows Forms 앱 (.Net Framework) 만들기 기초
- 이 폼은, PPT 등을 만들 때 사용되는 것
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { static class Program { /// <summary> /// 해당 애플리케이션의 주 진입점입니다. /// </summary> [STAThread] static void Main() { // static Main 메서드는, 명령만 하고 구체적 활동은 하지 않음. // 실전에서 프로그램 코드는 이러한 식으로 작성됨. Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); // 파라미터로 Form1이라는 클래스를 줌 // 그러면 모든 제어가 Form1이 가져감. 꺼지면 사라짐. } } }
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 WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("안녕하세요"); } } }


1. Student Class 설계
1. 대표명사 추출
2. 명사 추출 -> Property로 쓰일 후보들
3. 동사 추출 -> Method로 쓰일 후보들
1.
- 중학교입니다 // 중학교
- 1학년부터 3학년까지 있습니다. // 학년(1-3)
- 각 학년은 10반까지 구성됩니다. // 반(1-10)
- 한 반의 학생은 50명 입니다. // 반(50명/반)
- 학생들은 이름, 주소, 전화번호, 키, 몸무게, 나이, 성별 정보를 갖습니다. 그리고 반별로 학생 고유번호를 부여합니다.
// 학생(이름, 주소, 전화번호, 키, 몸무게, 나이, 성별, 고유번호[반별])
- 학생들은 국어만 배웁니다. 시험은 학기별 중간고사, 기말고사를 치룹니다.
// 배운다.
// 시험 (중간고사, 기말고사) [학기별]
// 학기 (상반기, 하반기)
// 과목(국어)
// 치룹니다. => [결과] 성적
2.
- 중학교입니다 # 프로젝트명
- 1학년부터 3학년까지 있습니다.
- 각 학년은 10반까지 구성됩니다.
- 한 반의 학생은 50명 입니다.
- 학생들은 이름, 주소, 전화번호, 키, 몸무게, 나이, 성별 정보를 갖습니다. 그리고 반별로 학생 고유번호를 부여합니다.
- 학생들은 국어만 배웁니다. 시험은 학기별 중간고사, 기말고사를 치룹니다.
// 학생(이름, 주소, 전화번호, 키, 몸무게, 나이, 성별, 고유번호[반별]), 학년(1-3), 반(1-10반, 50명/반), 시험(중간고사, 기말고사, 상반기,하반기)
// 과목(국어)
// 배운다.
// 치룹니다. => [결과] 성적
3.
4.
프로젝트명 : 중학교 학사관리
학생(학년, 반, 고유번호[반별], 이름, 주소, 전화번호, 키, 몸무게, 나이, 성별, 시험(중간고사/기말고사, 상반기/하반기)
// 학생 한명한명을 식별하기 위한 식별자를 지정한다. 즉, 학생에 대한 식별자(DB에서 Primary Key)를 뽑아낸다.
* 식별자 : 학년 + 반 + 고유번호 // 이친구들은 절대 없으면 안되는 정보들
- 이름 : 중복성 가능
- 전화번호 : 안가지고 있는 사람은 고려할 수 없음 (null값)
- 고유 번호 : 반마다 번호를 가지고 있음. 다른 반에서는 중복성 가능.
과목(국어, 수학, 영어,....) // 확장성 고려
2. Student Class 코드
[ Program.cs ]
using System; namespace StudentManagement // namespace : 하나의 건물 { class Program // class : 여러개의 방 { static void Main(string[] args) { StudentMgr sm = new StudentMgr(); // 인스턴스 생성 (힙 메모리에 생성) sm.Run(); // 프로그램 시작 } } }
[ StduentMgr.cs ]
using System; using System.Collections.Generic; using System.Text; namespace StudentManagement { public class StudentMgr // StudentMgr라는 인스턴스를 무한대로 만들어 사용 가능함. { public void Run() // 프로그램 시작 대표 메서드 { // 1. 프로퍼티로 주는 방법 /* Student st1 = new Student(); // enum으로 도메인으로 지정해놓고 사용하는 방법 st1.stsex = Sex.남성; st1.StGrade = Grade.학년_1; st1.StClass = StudentClass.반_1; st1.StNumber = 1;*/ // 2. 프로퍼티로 주지 않는 방법 : 생성자로 주는 방법 // not null, primary key에 해당하는 것들은, 생성자를 만들 적에 강요를 시켜버리는 방법을 사용 // Student st1 = new Student(Grade.학년_1, StudentClass.반_1, 1, "홍길동"); // ctrl+. : 아직 만들어지지 않은 메서드를 만들어줄 수 있도록 도움 Student st = RegistStudent(); // 출력 st.PrintMe(); } private Student RegistStudent() { // 콘솔로부터, 학생 등록 프로그램을 개발 Console.WriteLine("학년 [숫자만 입력] : "); string grade = Console.ReadLine(); // 콘솔에서 한 라인을 읽어오기 (엔터값 전까지) Console.WriteLine("반 : "); string stclass = Console.ReadLine(); Console.WriteLine("번호 : "); string stnumber = Console.ReadLine(); Console.WriteLine("이름 : "); string stname = Console.ReadLine(); // 해당 값 생성자 등록 Student st = new Student( // 1. 학년 (Grade)Enum.Parse(typeof(Grade), grade), // 입력한 grade 값이 매치되는, Grade의 enum 타입은 무엇인지 찾기. // 2. 반 (StudentClass)Enum.Parse(typeof(StudentClass), stclass), // 3. 번호 Convert.ToInt32(stnumber), // 번호는 int지만, console에서 읽어들이면 모두 string으로 입력받음. // 4. 이름 stname ); return st; // 반환값 : Student 객체 } } }
[ enums.cs ]
using System; using System.Collections.Generic; using System.Text; using System.Linq; using System.Threading.Tasks; namespace StudentManagement { // 우리가 프로그램을 짜면, enum은 그 namespace 전번에 걸쳐, 다 공용이 됨. // 따라서 무조건 public으로 선언해야함 public enum Sex // 성 구분을 하는 도메인 지정 { 남성, 여성, 미확인 } public enum Grade { // enum(외에 우리가 지정하는 것들은), 숫자로 시작할 수 없음. // 즉 1학년, 2학년, ... 등으로 만들 수 없다. 학년_1 = 1, 학년_2 = 2, 학년_3 = 3 // 숫자와 매칭되는 값을 부여하도록 유도 (0부터 시작하면 문제 발생) } public enum StudentClass // enum에서는 약어를 쓰면 안됨. 이름만 보고 바로 무슨 뜻인지 알아야함. { 반_1 = 1, 반_2 = 2, 반_3 = 3, 반_4 = 4, 반_5 = 5, 반_6 = 6, 반_7 = 7, 반_8 = 8, 반_9 = 9, 반_10 = 10 } // 번호와 같이 변동성이 있다고 판단되는 것들은, enum 말고 int로 냅두는게 더 좋음 // ex. 50명인 반에서, 갑자기 전학생이 오면 51명이 될 수 있음. }
[ Student.cs ]
using System; using System.Collections.Generic; using System.Text; namespace StudentManagement { public class Student { // 1. 필드, 프로퍼티 /* 학생 속성들 정의 */ // 식별자 (PK) public Grade StGrade { get; set; } // 학년 public StudentClass StClass { get; set; } // 반 public int StNumber { get; set; } // 학생 고유번호 public string Name { get; set; } // 이름 (Not Null) public string address { get; set; } // 주소 public int telNumber { get; set; } // 전화번호 public int height { get; set; } // 키 public int weight { get; set; } // 몸무게 public int age { get; set; } // 나이 public Sex stsex { get; set; } // 성별 (enum Sex 참조) public int exam { get; set; } // 시험 public string subject { get; set; } // 과목 // 2. 생성자 // 생성자 기법 : Not Null 및 Primary Key 경우에는, 이를 강요해야 함. 이를 받아들이지 않고는 인스턴스를 만들어주지 않겠다고, 생성자로 강요해야 함. public Student(Grade StGrade, StudentClass StClass, int StNumber, string Name, Sex sex) { this.StGrade = StGrade; this.StClass = StClass; this.StNumber = StNumber; this.Name = Name; } public Student(Grade StGrade, StudentClass StClass, int StNumber, string Name) : this(StGrade, StClass, StNumber, Name, Sex.미확인) // 자신의 생성자를 부르는데(this), 파라미터가 앞의 5개인 생성자에, 마지막 값에는 null값을 전달하여 호출한다. // Sex의 enum값이 null값을 가질 수 없음. 따라서 enum으로 가서, 새로운 미확인 값을 지정해줌, { } // 3. 메서드 public void PrintMe() { // 학생의 학년, 반, 번호, 이름을 출력해줌. Console.WriteLine(StGrade + ":" + StClass + ":" + StNumber + "[" + Name + "]"); } } }
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |
'문과 코린이의, [C#] 기록 > C# 활용' 카테고리의 다른 글
[문과 코린이의 IT 기록장] C# 활용 - IF문 실습 , 반복문 실습 (0) | 2022.08.04 |
---|---|
[문과 코린이의 IT 기록장] C# 기초 예시 - Timer (0) | 2021.06.28 |
[문과 코린이의 IT 기록장] C# 기초 예시 - XMLReader, XMLWriter (0) | 2021.06.27 |
[문과 코린이의 IT 기록장] C# 기초 예시 - StreamReader, StreamWrite (0) | 2021.06.26 |
[문과 코린이의 IT 기록장] C# 기초 예시 - 오버라이딩과 오버로딩 (0) | 2021.06.25 |