직원관리시스템 (Employee Management System)
4. 근데 정렬은 뭐가 뭔지 모르겠어요
List 개념이나 사용방법은 Array랑 크게 다르지 않아서 어렵지 않았는데 문제는 List<T>.Sort()....정렬....
그냥 정렬해줘!! 라고 하면 그냥 정렬해줄 줄 알았더니, 뭔가 정렬할때 쓸 함수가 또 필요하댄다...
구글링해가면서 해결방법은 찾았는데 아직도 완전히 이해가 되질 않아서... 내일 다시한번 뜯어봐야겠다.
5.그 외의 자잘하게
- 함수 이름은 기능이기 때문에 동사를 쓴다. 그리고 첫글자를 대문자로 쓰자.(ex. Get, Set, Display...)
- 클래스 이름은 객체를 만드는 도안같은 역할이기때문에 명사를 쓰자 (ex. System, Program....)
- Enum은 첫글자는 대문자를 쓴다. 그리고 클래스처럼 명사를 쓴다.
- 새로만들어진 클래스가 기존 main()이 들어있는 클래스(여기선 Program)를 참조하게 되면
나중에 확장성에 문제가 생긴다. 이거 말고 다른 프로그램에서 새 클래스를 가져다 쓰게되면 어떡할껀가?
- Input 이라던가, number같은 딱봐서 어디에 쓰일지 모르겠는 이름은 제발 짓지 말자.(흑... 상상력이 부조카다..)
- 필요없는 else는 생략하는게 좋다.
- 초반엔 매니저 클래스를 static으로 만들려고 했는데,
그러면 만약 둘 이상의 회사를 관리하게 될때 여러명의 매니저가 불가능해지기 때문에 그냥 일반 함수들로 구현했다.
이 클래스가 여럿 복제될 일이 있는지 아니면 한 개로 계속 쓰일지 클래스를 디자인할때 미리 생각하라.
- 위와 같은 이유로 직원들 리스트는 프로그램이 아닌 오직 매니저만 가지고 있다. 프로그램이 필요하면 매니저꺼 가져다 쓴다.
- 다시한번 강조. 클래스와 함수가 할 일을 확실히 구분하라. 이름을 보고 얘가 무슨 용도인지 한눈에 파악되게.
이제 드디어 코드들.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | using System; using System.Collections.Generic; namespace managementsystem { class Program { static void Main(string[] args) { EmployeeManager manager = new EmployeeManager(); while (true) { Console.Clear(); Console.WriteLine("::Employee Management System::"); Console.WriteLine("[1] Input the New Employee"); Console.WriteLine("[2] Check All Employees"); Console.WriteLine("[3] Save"); Console.WriteLine("[4] Load"); Console.WriteLine("[5] Exit"); MainMenuOption mainmenunumber = (MainMenuOption)Int32.Parse(Console.ReadLine()); switch (mainmenunumber) { case MainMenuOption.Newemployee: { Console.Clear(); Console.WriteLine("[1] Input the New Employee---"); manager.CreateEmployee(InputForm()); break; } case MainMenuOption.Check: { bool editpage = true; while (editpage) { Console.Clear(); Console.WriteLine("[2] Check All Employees---"); DisplayEmployees(manager.Employees); Console.WriteLine("---------END--------"); Console.WriteLine("[1] Edit Employee"); Console.WriteLine("[2] Delete Employee"); Console.WriteLine("[3] Delete All Employees"); Console.WriteLine("[4] Sort(Name) Employees"); Console.WriteLine("[5] Find Employee by First Name"); Console.WriteLine("[6] Back to the Mainpage"); Console.WriteLine("[7] Exit"); EditMenuOption editmenunumber = (EditMenuOption)Int32.Parse(Console.ReadLine()); switch (editmenunumber) { case EditMenuOption.Edit: { Console.Write("[Edit] which number? : "); int editnumber = Int32.Parse(Console.ReadLine()); manager.EditEmployee(editnumber, InputForm()); break; } case EditMenuOption.Delete: { Console.Write("[Delete] which number? : "); int deletenumber = Int32.Parse(Console.ReadLine()); manager.DeleteEmployee(deletenumber); break; } case EditMenuOption.DeleteAll: { Console.Write("[Delete All] Do you want delete all?"); Console.Write(" y / n : "); string delete = Console.ReadLine(); if (delete == "y") { manager.DeleteAllEmployee(); } break; } case EditMenuOption.Sort: { manager.Sort(); break; } case EditMenuOption.Find: { Console.Write("- Name : "); List<Employee> findresult = manager.FindByName(Console.ReadLine()); DisplayEmployees(findresult); string pause = Console.ReadLine(); break; } default: case EditMenuOption.BackToMain: { editpage = false; break; } case EditMenuOption.Exit: { return; } } } break; } case MainMenuOption.Save: { Console.WriteLine("Input File Name : "); string filename = Console.ReadLine(); manager.SaveToFile(filename); Console.WriteLine("---Done!---"); System.Threading.Thread.Sleep(300); break; } case MainMenuOption.Load: { Console.WriteLine("Input File Name : "); string filename = Console.ReadLine(); manager.LoadFromFile(filename); Console.WriteLine("---Done!---"); System.Threading.Thread.Sleep(300); break; } default: case MainMenuOption.Exit: return; } } } public static Employee InputForm() { Console.Write("- Name : "); string name = Console.ReadLine(); Console.Write("- Department : "); string department = Console.ReadLine(); Console.Write("- Title : "); string title = Console.ReadLine(); return new Employee(name, department, title); } public static void DisplayEmployees(List<Employee> Employees) { int count = 0; foreach (Employee e in Employees) { Console.Write("<{0}> ", count); Console.WriteLine(e.GetEmployeeInformation()); count++; } } } } | cs |
1 2 3 4 5 6 7 8 | public enum MainMenuOption { Newemployee = 1, Check, Save, Load, Exit } | c s |
1 2 3 4 5 6 7 8 9 10 | public enum EditMenuOption { Edit = 1, Delete, DeleteAll, Sort, Find, BackToMain, Exit } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | using System; namespace managementsystem { class Employee { public string Department { get; private set; } public string Name { get; private set; } public string Title { get; private set; } public Employee(string name, string department, string title) { Name = name; Department = department; Title = title; } public string GetEmployeeInformation() { return "-Name: " + Name + " -Department: " + Department + " -Title: " + Title; } public static int compare(Employee a, Employee b) { return a.Name.CompareTo(b.Name); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | using System; using System.IO; using System.Collections.Generic; namespace managementsystem { class EmployeeManager { public List<Employee> Employees = new List<Employee>(); public void CreateEmployee(Employee newEmployee) { Employees.Add(newEmployee); } public void EditEmployee(int editnumber, Employee newEmployee) { Employees[editnumber] = newEmployee; } public void DeleteEmployee(int deletenumber) { Employees.RemoveAt(deletenumber); } public void DeleteAllEmployee() { Employees.Clear(); } public List<Employee> FindByName(string name) { int count = 0; List<Employee> findresult = new List<Employee>(); foreach (Employee e in Employees) { if (e.Name == name) { findresult.Add(e); } count++; } return findresult; } public void Sort() { Employees.Sort(Employee.compare); } public void SaveToFile(string filename) { StreamWriter savefile = new StreamWriter(@"C:\temp\" + filename + ".txt"); foreach (Employee e in Employees) { savefile.WriteLine(e.Name); savefile.WriteLine(e.Department); savefile.WriteLine(e.Title); } savefile.Close(); } public void LoadFromFile(string filename) { Employees.Clear(); StreamReader loadfile = new StreamReader(@"C:\temp\"+ filename + ".txt"); while (loadfile.Peek() >= 0) { Employees.Add(new Employee(loadfile.ReadLine(), loadfile.ReadLine(), loadfile.ReadLine())); // name line, department line, title line. } loadfile.Close(); } } } | cs |
'Programing(프로그래밍)' 카테고리의 다른 글
C# 소문자를 대문자로 바꾸자. (0) | 2015.08.07 |
---|---|
C# 어딘가에 있을 대문자를 찾자 (0) | 2015.08.05 |
c# 도형그리기와 팩토리 패턴(객체지향OOP, 클래스cs 관리, 프로퍼티 등) (0) | 2015.08.05 |
C# 입력받은 스트링을 뒤집어보자 (0) | 2015.08.05 |
c# 파칭코 게임 (재귀함수, 랜덤, 잠깐 기다리기, 커서 위치 바꾸기, 키입력 전 무한루프) (0) | 2015.08.05 |