본문 바로가기

카테고리 없음

학생 관리 프로그램

/* 학생관리를 제어하는 클래스
 * 1. 초기값  : init()
 * 2. 화면메뉴 : menuView()
 *     // 1.추가 2. 수정 3. 삭제 4. 보기, 99종료
 *      
 * 3. 학생추가 : void addStudent()
 * 4. 학생수정 : updateStudent()
 *    - 1. 이름 2. 나이 3. 학번 4.전공
 * 5. 학번검색 : int searchStudent(학번)
 *             찾으면 index, 못찾으면 index=-1 return
 *   
 * 6. 학생삭제 :  deleteStudent()
 *    => 삭제된 학생을 StudentExpel클래스에서 저장
 *     
 * 7. 학생조회(출력) : studentView()
 *        1. 전체보기 2. 학번검색 3. 삭제정보    
 */
package kr.co.dong.check;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class StudentControl extends Student {

	// 학생정보를 담고있는 리스트
	static ArrayList<Student> students = new ArrayList<Student>();
	static Scanner scan = new Scanner(System.in);

	public static void main(String[] args) {
		// 삭제된 정보를 담고있는 클래스의 객체 생성
		StudentExpel studentdel = new StudentExpel();
	}

	// 초기값
	void init() {
		Student s1 = new Student("홍길동", "22", "1", "영어");
		Student s2 = new Student("홍길순", "25", "2", "국어");
		Student s3 = new Student("김영수", "26", "3", "수학");
		Student s4 = new Student("이영호", "27", "4", "사회");
		Student s5 = new Student("박영식", "28", "5", "과학");

		students.add(s1);
		students.add(s2);
		students.add(s3);
		students.add(s4);
		students.add(s5);
	}

	// 기본메뉴 출력메소드
	String menuView() {
		System.out.println("==========학생관리============");
		System.out.println("1.추가 2.수정 3.삭제 4.보기 5.종료");
		return scan.next();// 입력된 데이터를 리턴. 공백까지만 입력받음
	}

	// 동작을 구현해보자 studentPlay(menuView())
	void studentPlay(String sel) {
		switch (sel) {
		case "1":
			System.out.println("학생정보추가");
			addStudent();
			break;
		case "2":
			System.out.println("학생정보수정");
			updateView();
			break;
		case "3":
			System.out.println("학생정보삭제");
			deleteStudent();
			break;
		case "4":
			System.out.println("학생정보보기");
			studentView();
			break;
		case "5":
			System.out.println("프로그램 종료");
			break;
		default:
			System.out.println("메뉴의 번호를 입력하세요.");
		}
	} // end of void studentPlay(String sel)

	private static void studentView() {
		for (Student student : students) {
			System.out.println(student);
		}
	}

	private static void deleteStudent() {
		boolean done = false;
		int sel1 = 0;
		StudentExpel del = new StudentExpel();
		Student s = new Student();
		for (int i = 0; i < students.size(); i++) {
			s = students.get(i);
			del.addDelStudent(s);
		}

		System.out.println("1.전체삭제 2.부분삭제");
			sel1 = Integer.parseInt(isNumber());
		if (sel1 == 1) {
			studentView();
			System.out.println("정말 삭제하시겠습니까? 1.예 2.아니요");
			int sel2 = Integer.parseInt(isNumber());
			while (!done) {
				if (sel2 == 1) {
					students.clear();
					System.out.println("모든 정보가 삭제되었습니다.");
					break;
				} else if (sel2 == 2) {
					System.out.println("메뉴로 이동합니다.");
					break;
				} else {
					System.out.println("1번과 2번 중에서 입력하세요.");
				}
			}
			// del.delStudents에는 기록이 남아있고 students에는 기록이 남아있지 않는다.
		} else if (sel1 == 2) {
			System.out.println("몇 번을 삭제하겠습니까?");
			String tmp = scan.next();
			String tmp2 = tmp;
			int idx = searchStudent(tmp2);
			if (idx != -1) {
				for (int i = 0; i < students.size(); i++) {
					if (students.get(i).getSnum().equals(tmp2)) {
						System.out.println(students.get(i));
					}
				}

				done = false;
				while (!done) {
					System.out.println("정말 삭제하시겠습니까? 1.예 2.아니요");
					int sel3 = Integer.parseInt(isNumber());
					if (sel3 == 1) {
						for (int i = 0; i < students.size(); i++) {
							if (students.get(i).getSnum().equals(tmp2)) {
								students.remove(i);
								System.out.println(tmp2 + "번의 정보를 삭제했습니다.");
							}
						}
						break;
					} else if (sel3 == 2) {
						System.out.println("메뉴로 이동합니다.");
						break;
					} else {
						System.out.println("1번과 2번 중에 입력하세요.");
					}

				}

			} else {
				System.out.println("해당 번호의 정보는 없습니다.");
			}

		} else {
			System.out.println("1번과 2번 중에 입력하세요.");
		}
	}

	private static String isNumber() {
		String str = null;
		boolean isNumber = false;
		char ch = 'x';
		
		while(!isNumber) {
			str = scan.next();
			for (int i = 0; i < str.length(); i++) {
				ch = str.charAt(i);
				if (ch >= '0' && ch <= '9') {
					isNumber = true;
				} else {
					System.out.println("알맞은 숫자로 다시 입력하세요.");
					isNumber = false;
					break;
				}
			}
		}
		return str;
	}

	private static void updateView() {
		int idx = 0, sel = 0;
		boolean done = false; // 번호 돌리기
		// 학번불러오기
		System.out.println("수정할 학번을 입력하세요 : ");
		String update = scan.next();
		String update2 = update;
		idx = searchStudent(update2);
		for (int i = 0; i < students.size(); i++) {
			if (students.get(i).getSnum().equals(update2)) {
				System.out.println(students.get(i));
			}
		}

		if (updateStudent(idx) == true) {
			// 정보를 모두 가져온 다음에 거기서 하나
			System.out.println("1.이름수정 2.나이수정 3.학번수정 4.전공수정");
			String str = isNumber();
			sel = Integer.parseInt(str);
			if (sel == 1) {
				// students에서 해당 인덱스의 정보가져와
				System.out.println("수정할 이름 : ");
				String tmp1 = scan.next();
				students.get(idx).setName(tmp1);
			} else if (sel == 2) {
				System.out.println("수정할 나이 : ");
				String tmp2 = scan.next();
				students.get(idx).setAge(tmp2);
			} else if (sel == 3) {
				while (!done) {
					System.out.println("수정할 번호 : ");
					String str1 = scan.next();
					String tmp3 = str1;

					int snum = searchStudent(tmp3);
					if (snum == -1) {
						students.get(idx).setSnum(tmp3);
						break;
					} else {
						System.out.println("이미 존재하는 번호입니다.");
					}
				}
			} else if (sel == 4) {
				System.out.println("수정할 전공 : ");
				String tmp4 = scan.next();
				students.get(idx).setMajor(tmp4);
			}
		}
	}

	private static int searchStudent(String str) {
		// 같은정보의 학생이 없다면 -1
		// 같은정보의 학생이 있다면 index
		for (int i = 0; i < students.size(); i++) {
			if (students.get(i).getSnum().equals(str)) {
				return i;
			}
		}
		return -1;
	}

	private static boolean updateStudent(int index) {
		int sel = 0; // isNumber메소드 가져오기
		boolean update = false; // 헷갈려서
		// 수정메소드 updateView()안에 검색메소드를 이용해서 학생정보를 보여주고
		// 그것에 대한 인덱스를 받고
		// 정말로 학생정보를 수정할 것이냐? -true or false
		// true면 학생정보 수정
		// false면 메뉴로 돌아가기
		if (index != -1) {
			System.out.println("정말 수정하시겠습니까? 1.예 2.아니요");
			sel = Integer.parseInt(isNumber());
			if (sel == 1) {
				update = true;
			} else if (sel == 2) {
				System.out.println("메뉴로 이동합니다.");
			} else {
				System.out.println("예/아니요 번호만 입력하세요.");
			}
		} else if (index == -1) {
			System.out.println("입력한 번호의 학생은 없습니다.");
			update = false;
		}
		return update;
	}

	private static void addStudent() {
		Student stu = new Student();
		boolean snumControl = false;

		System.out.println("이름 : ");
		String tmp1 = scan.next();
		stu.setName(tmp1);

		System.out.println("나이 : ");
		String tmp2 = scan.next();
		stu.setAge(tmp2);

		do {
			System.out.println("번호 : ");
			String snum = scan.next();
			int index = searchStudent(snum);

			if (index != -1) {
				System.out.println("이미 존재하는 번호입니다.");
				snumControl = false;
			} else {
				snumControl = true;
				stu.setSnum(snum);
			}
		} while (!snumControl);
		String tmp3 = stu.getSnum();

		System.out.println("전공 : ");
		String tmp4 = scan.next();
		stu.setMajor(tmp4);

		Student obj = new Student(tmp1, tmp2, tmp3, tmp4);
		students.add(obj);
	}
}​
/*
 * 삭제된 학생정보를 저장하는 클래스
 */
package kr.co.dong.check;

import java.util.ArrayList;
import java.util.List;

public class StudentExpel extends StudentControl{
	List<Student> delStudents;
	
	StudentExpel(){  // 삭제클래스 생성될때 공간확보
		delStudents = new ArrayList<Student>();
	}	
	//삭제저장소에 삭제할 학생정보를 저장하는 메소드 생성
	public void addDelStudent(Student student) {
		//학생정보를 불러와서 delStudents 배열에 각각 입력시켜주고
			delStudents.add(student);
	}
}​
/*
 * 동작 구현
 */
package kr.co.dong.check;

public class StudentManager

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StudentControl stu = new StudentControl();
		String sel = "";
		stu.init(); //초기화
		while(!sel.equals("5")) { //5누르면 종료
			sel = stu.menuView();
			stu.studentPlay(sel);
		}
		System.out.println("Program End!");
	}

	@Override
	public String toString() {
		return "StudentManager []";
	}

}
/* [학생 클래스]
 * 이름(name),나이(age),학번(snum),전공(major)
 *    => private
 * 생성자 -> 4개필드
 * toString()
 */
package kr.co.dong.check;

public class Student {
	private String name;
	private String age;
	private String snum;
	private String major;
	
	public Student() {
		super();
	}
	
	
	
	public Student(String name) {
		super();
		this.name = name;
	}



	public Student(String name, String age, String snum, String major) {
		super();
		this.name = name;
		this.age = age;
		this.snum = snum;
		this.major = major;
	}

	@Override
	public String toString() {
		return "(학생정보) 이름 : " + name + " 나이 : " + age + " 학번 : " + snum + " 전공 : " + major;
	}



	public String getName() {
		return name;
	}



	public void setName(String name) {
		this.name = name;
	}



	public String getAge() {
		return age;
	}



	public void setAge(String age) {
		this.age = age;
	}



	public String getSnum() {
		return snum;
	}



	public void setSnum(String snum) {
		this.snum = snum;
	}



	public String getMajor() {
		return major;
	}



	public void setMajor(String major) {
		this.major = major;
	}	
}