- 학생의 정보 등록, 출력, 검색, 수정, 삭제, 수강신청, 수강철회 기능들 구현
📢 구조
- Student: 학생 정보 저장
- Subject: 과목 정보 저장
- Program (인터페이스): 학생 관리 기능을 정의.
- StudentController: 주 기능들 구현
- StudentMain: 사용자와의 상호작용
📢 클래스
🔷 Student 클래스
속성
학번(stdNum)
이름(stdName)
나이(stdAge)
전화번호(stdPhone)
주소(stdAddress)
수강 과목 목록(subjectList)
주요 메서드
stdPrint(): 학생 정보 출력
insertSubject(Subject sub): 수강 과목 추가.
removeSubject(String subCode): 수강 과목 삭제
🔷 Subject 클래스
속성
과목 코드(subCode)
과목명(subName)
학점(subPoint)
시수(subTime)
교수명(subProfessor)
시간표(subScheduler)
강의실(subRoom)
주요 메서드
toString(): 과목 정보 출력
🔷 Program 인터페이스
insertStudent(Scanner scan)
printStudent()
searchStudent(Scanner scan)
modifyStudent(Scanner scan)
deleteStudent(Scanner scan)
registerSubject(Scanner scan)
deleteSubject(Scanner scan)
🔷 StudentController 클래스
인터페이스를 구현.
학생 관리 기능을 실제로 수행한다.
학생 추가, 출력, 검색, 수정, 삭제, 수강신청, 수강철회 기능 처리.
🔷 StudentMain 클래스
메뉴 출력. 사용자 입력 받은 후, 각 기능을 호출.
package student;
public class Student {
/* 한 학생이 가져야 하는 정보
* 학번, 이름, 나이, 전화번호, 주소, 수강과목s (Subject class를 배열로 처리) => 포함관계
* 멤버변수, 생성자, getter/setter, toString(학생정보 출력)
* 수강신청 / 수강철회 / 수강과목 출력
* */
private String stdNum;
private String stdName;
private int stdAge;
private String stdPhone;
private String stdAddress;
private Subject[] subjectList = new Subject[5];
private int cnt; //배열의 index 역할
//생성자
public Student() {}
public Student(String stdNum, String stdName, String stdPhone) {
this.stdNum = stdNum;
this.stdName = stdName;
this.stdPhone = stdPhone;
}
public Student(String stdNum, String stdName, int stdAge, String stdPhone, String stdAddress) {
this.stdNum = stdNum;
this.stdName = stdName;
this.stdAge = stdAge;
this.stdPhone = stdPhone;
this.stdAddress = stdAddress;
}
// method
// 학생정보 출력 메서드 (toString 이용가능)
public void stdPrint() {
System.out.println("학생명:"+stdName+"("+stdNum+") / "+stdPhone);
}
// 수강과목 출력 메서드 => 배열로 존재 (for)
public void subPrint() {
if(cnt==0) {
System.out.println("수강과목이 없습니다.");
return;
}
for(int i=0; i<cnt; i++) {
System.out.println(subjectList[i]); //toString 호출
}
}
// 수강신청 메서드 : subjectList subject 객체를 생성하여 추가
// 수강과목 객체를 매개변수로 받아서 추가
public void insertSubject(Subject sub) {
// 배열이 다 찼다면... 배열 늘려주기
if(cnt == subjectList.length) {
Subject[] tmp = new Subject[subjectList.length+5];
// 배열복사
System.arraycopy(subjectList, 0, tmp, 0, cnt);
// 기존 배열 변경
subjectList = tmp;
}
subjectList[cnt] = sub;
cnt++;
}
// 수강삭제 메서드
// 수강코드 값을 매개변수로 받아서 삭제
public void removeSubject(String subCode) {
// 삭제할 코드의 위치 값을 저장하는 변수
int index = -1;
if(subCode == null) {
return;
}
//삭제할 코드의 위치 값 찾기
for(int i=0; i<cnt; i++) {
if(subjectList[i].getSubCode().equals(subCode)) {
index = i;
break;
}
}
if(index == -1) {
System.out.println("찾는 과목이 없습니다.");
return;
}
//삭제 : 찾은 위치부터 뒷번지를 앞번지로 옮기는 작업
for(int i=index; i<cnt-1; i++) {
subjectList[i] = subjectList[i+1];
}
//끝번지는 null 처리
subjectList[cnt-1] = null;
cnt--;
}
// getter/setter
public String getStdNum() {
return stdNum;
}
public void setStdNum(String stdNum) {
this.stdNum = stdNum;
}
public String getStdName() {
return stdName;
}
public void setStdName(String stdName) {
this.stdName = stdName;
}
public int getStdAge() {
return stdAge;
}
public void setStdAge(int stdAge) {
this.stdAge = stdAge;
}
public String getStdPhone() {
return stdPhone;
}
public void setStdPhone(String stdPhone) {
this.stdPhone = stdPhone;
}
public String getStdAddress() {
return stdAddress;
}
public void setStdAddress(String stdAddress) {
this.stdAddress = stdAddress;
}
public Subject[] getSubjectList() {
return subjectList;
}
public void setSubjectList(Subject[] subjectList) {
this.subjectList = subjectList;
}
@Override
public String toString() {
return "Student [stdNum:" + stdNum + ", stdName:" + stdName + ", stdPhone:" + stdPhone + "]";
}
public int getCnt() {
return cnt;
}
public void setCnt(int cnt) {
this.cnt = cnt;
}
}
package student;
public class Subject {
// --Subject 클래스가 가져야 하는 기본적인 내용--
// 과목정보 : 과목코드, 과목명, 학점, 시수, 교수명, 시간표, 강의장
// 멤버변수, 생성자, getter/setter, toString(과목정보 출력)
private String subCode;
private String subName;
private int subPoint;
private int subTime;
private String subProfessor;
private String subScheduler;
private String subRoom;
// 생성자
public Subject() {}
// 과목코드,과목명만 받는 생성자
public Subject(String subCode, String subName) {
this.subCode = subCode;
this.subName = subName;
}
public Subject(String subCode, String subName, int subPoint, int subTime, String subProfessor, String subScheduler,
String subRoom) {
this.subCode = subCode;
this.subName = subName;
this.subPoint = subPoint;
this.subTime = subTime;
this.subProfessor = subProfessor;
this.subScheduler = subScheduler;
this.subRoom = subRoom;
}
public String getSubCode() {
return subCode;
}
public void setSubCode(String subCode) {
this.subCode = subCode;
}
public String getSubName() {
return subName;
}
public void setSubName(String subName) {
this.subName = subName;
}
public int getSubPoint() {
return subPoint;
}
public void setSubPoint(int subPoint) {
this.subPoint = subPoint;
}
public int getSubTime() {
return subTime;
}
public void setSubTime(int subTime) {
this.subTime = subTime;
}
public String getSubProfessor() {
return subProfessor;
}
public void setSubProfessor(String subProfessor) {
this.subProfessor = subProfessor;
}
public String getSubScheduler() {
return subScheduler;
}
public void setSubScheduler(String subScheduler) {
this.subScheduler = subScheduler;
}
public String getSubRoom() {
return subRoom;
}
public void setSubRoom(String subRoom) {
this.subRoom = subRoom;
}
@Override
public String toString() {
return "Subject [subCode:" + subCode + ", subName:" + subName + "]";
}
}
package student;
import java.util.Scanner;
public interface Program {
//1.학생등록|2.학생리스트출력|3.학생검색(학생정보,수강정보)|4.학생정보수정|5.학생삭제
//6.수강신청|7.수강철회|8.종료
void insertStudent(Scanner scan);
void printStudent();
//학생을 검색후 해당 번지를 리턴
int searchStudent(Scanner scan);
void modifyStudent(Scanner scan);
void deleteStudent(Scanner scan);
void registerSubject(Scanner scan);
void deleteSubject(Scanner scan);
}
package student;
import java.util.Scanner;
public class StudentController implements Program {
// 멤버변수 추가 : Student 배열을 멤버변수로 추가
private Student[] studentList = new Student[5];
private int stdCnt = 0;
@Override
public void insertStudent(Scanner scan) {
// 학생 추가 : 1명의 정보를 받아 Student 객체로 생성 후 배열에 추가
System.out.println("학번>");
String stdNum = scan.next();
System.out.println("이름>");
String stdName = scan.next();
System.out.println("전화번호>");
String stdPhone = scan.next();
Student s = new Student(stdNum, stdName, stdPhone);
// 만약 배열이 다 차서 저장할 공간이 없을 경우
if(stdCnt == studentList.length) {
Student[] tmp = new Student[studentList.length+5];
System.arraycopy(studentList, 0, tmp, 0, stdCnt);
studentList = tmp;
}
studentList[stdCnt] = s;
stdCnt++;
}
@Override
public void printStudent() {
// 학생 배열 출력
System.out.println("--전체 학생정보--");
for(int i=0; i<stdCnt; i++) {
// System.out.println(studentList[i]); //toString
studentList[i].stdPrint(); //메서드 호출
}
}
@Override
// 해당 학번의 index 리턴
public int searchStudent(Scanner scan) {
// 학생검색 - 학번을 기준
// 학번을 입력받아 배열에서 탐색 후 학생정보 + 수강정보 출력
// 없으면 없다고 출력
System.out.println("학번>");
String searchNum = scan.next();
for(int i=0; i<stdCnt; i++) {
if(searchNum.equals(studentList[i].getStdNum())) {
studentList[i].stdPrint();
studentList[i].subPrint();
return i;
}
}
System.out.println("검색한 학번이 없습니다.");
return -1;
}
@Override
public void modifyStudent(Scanner scan) {
// 학생정보 수정
int index = searchStudent(scan);
if(index != -1) {
System.out.println("이름>");
String name = scan.next();
System.out.println("전화번호>");
String phone = scan.next();
studentList[index].setStdName(name);
studentList[index].setStdPhone(phone);
}
}
@Override
public void deleteStudent(Scanner scan) {
// 학생 삭제
int index = searchStudent(scan);
if(index != -1) {
int copyCnt = studentList.length - index - 1;
System.arraycopy(studentList, index+1, studentList, index, copyCnt);
// 마지막 번지 null 처리
studentList[studentList.length-1] = null;
stdCnt--;
}
}
@Override
public void registerSubject(Scanner scan) {
// 수강과목의 정보를 입력받아 subject 객체를 생성하여 Student 클래스
// 누가 어떤과목을 수강할지를 받아야 함.
// 수강신청 학번을 먼저 검색 후 추가
int index = searchStudent(scan);
System.out.println("---------------------------");
System.out.println("과목코드>");
String subCode = scan.next();
System.out.println("과목이름>");
String subName = scan.next();
//객체 생성 후 메서드 호출
Subject sub = new Subject(subCode, subName);
studentList[index].insertSubject(sub);
}
@Override
public void deleteSubject(Scanner scan) {
// 삭제할 수강코드를 입력받아 Student 클래스의 강의 삭제
int index = searchStudent(scan);
//수강과목이 없다면 받지 않기.
if (studentList[index].getCnt() != 0) {
System.out.println("---------------------------");
System.out.println("과목코드>");
String subCode = scan.next();
studentList[index].removeSubject(subCode);
System.out.println(subCode+" 과목 수강철회 완료!");
}
}
}
package student;
import java.util.Scanner;
public class StudentMain {
public static void main(String[] args) {
// 메뉴처리
//1.학생등록|2.학생리스트출력|3.학생검색(학생정보,수강정보)|4.학생정보수정|5.학생삭제
//6.수강신청|7.수강철회|8.종료
//interface
//7개 메뉴의 메서드 정리
//StudentController가 구현
//- Student class 배열처리
//Student class: 학생정보
//- 학번, 이름, 나이, 전화번호, 주소, 수강과목s (Subject class를 배열로 처리) => 포함관계
//subject class : 과목정보
//- 과목코드, 과목명, 학점, 시수, 교수명, 시간표, 강의장
StudentController sc = new StudentController();
Scanner scan = new Scanner(System.in);
int menu = 0;
do {
System.out.println("--menu--");
System.out.println("1.학생등록|2.학생리스트출력|3.학생검색(학생정보,수강정보)|4.학생정보수정|5.학생삭제");
System.out.println("6.수강신청|7.수강철회|8.종료");
System.out.println("menu>");
menu = scan.nextInt();
switch(menu) {
case 1: sc.insertStudent(scan); break;
case 2: sc.printStudent(); break;
case 3: sc.searchStudent(scan); break;
case 4: sc.modifyStudent(scan); break;
case 5: sc.deleteStudent(scan); break;
case 6: sc.registerSubject(scan); break;
case 7: sc.deleteSubject(scan); break;
case 8: System.out.println("종료!!"); break;
default: System.out.println("없는 메뉴입니다.");
}
}while(menu != 8);
}
}
'백엔드 > Java' 카테고리의 다른 글
| Java로 고객 관리 시스템 구현 (2) | 2024.10.15 |
|---|---|
| 객체지향 프로그래밍 (1) | 2024.10.14 |
| Java로 로또 추첨기 만들기 (1) | 2024.10.12 |
| Java 인터페이스 (0) | 2024.10.11 |
| Java로 상품 관리 시스템 구현(2) (0) | 2024.10.10 |