/* 학생관리를 제어하는 클래스
* 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;
}
}