[Java] Interface를 활용해 학생 관리프로그램 만들기개발자가 되기까지 (2023.08.16~2024.04.15)/[Basic] Java2023. 10. 3. 22:39
Table of Contents
<문제>
학생 관리프로그램 만들기 |
Program Interface - 학생 리스트 출력 메서드 - 학생 추가 메서드 - 학생 검색 메서드 - 학생의 수강신청 메서드 - 학생의 수강철회 메서드 ================================================================================================ Subject Class 멤버변수 : 과목코드, 과목명, 학점, 시수, 교수명, 학기, 시간표 기능 : toString/print메서드 ================================================================================================ Student Class 멤버변수 : 학번, 이름, 주민번호, 학부, 학과, 과목(과목클래스를 배열로 생성[5]) 기능 : 학생정보만 출력, 수강과목을 출력, 수강과목 추가(신청), 수강과목 삭제(철회) 1. 수강과목 추가(신청) -> subjectList 배열에 값이 들어가는 것, 배열이 다 찼다면 늘려주기 2. 수강과목 삭제(철회) -> 찾았을 경우 삭제, 마지막 번지는 null로 채우기 ================================================================================================ StudentManager Class 멤버변수 : 학생 클래스를 배열로 생성[5] 기능 : Interface를 구현하는 형태로... 1. Program Interface를 구현 2. 학생 추가 시 열이 꽉 찼다면 배열을 늘려주는 기능 추가 ================================================================================================ ProgramMain Class 1. 메뉴를 출력하여 사용자로부터 어떤 기능을 수행할 것인지 처리 2. 1.학생등록|2.학생검색|3.학생리스트|4.수강신청|5.수강철회|6.종료 |
<방법>
import java.util.Scanner;
public interface Program {
void printStudent(); // 학생 전체 리스트 출력
void insertStudent(Scanner scan); // 스캐너로 매서드 내부에서 입력받기
void searchStudent(Scanner scan);
void registerSubject(Scanner scan);
void deleteSubject(Scanner scan);
}
public class Subject {
private String subCode;
private String subName;
private int subCredite;
private int subTime;
private String subProfessor;
private String subSemester;
private String subScheduler;
public Subject() {}
public Subject(String subNmae) {
this.subName = subNmae;
}
public Subject(String subCode, String subNmae, int subCredite, int subTime, String subProfessor, String subSemester,
String subScheduler) {
this.subCode = subCode;
this.subName = subNmae;
this.subCredite = subCredite;
this.subTime = subTime;
this.subProfessor = subProfessor;
this.subSemester = subSemester;
this.subScheduler = subScheduler;
}
@Override
public String toString() {
return subName;
}
public String getSubCode() {
return subCode;
}
public void setSubCode(String subCode) {
this.subCode = subCode;
}
public String getSubNmae() {
return subName;
}
public void setSubNmae(String subNmae) {
this.subName = subNmae;
}
public int getSubCredite() {
return subCredite;
}
public void setSubCredite(int subCredite) {
this.subCredite = subCredite;
}
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 getSubSemester() {
return subSemester;
}
public void setSubSemester(String subSemester) {
this.subSemester = subSemester;
}
public String getSubScheduler() {
return subScheduler;
}
public void setSubScheduler(String subScheduler) {
this.subScheduler = subScheduler;
}
}
public class Student {
private int stdCode;
private String stdName;
private int stdResisterNum;
private String stdDept;
private String stdMajor;
private Subject[] subList = new Subject[5];
private int subCnt;
public Student() {}
public Student(String stdName, String stdMajor) {
this.stdName = stdName;
this.stdMajor = stdMajor;
}
public Student(String stdName, String stdMajor, Subject[] subList) {
this.stdName = stdName;
this.stdMajor = stdMajor;
this.subList = subList;
}
public Student(int stdCode, String stdName, int stdResisterNum, String stdDept, String stdMajor,
Subject[] subList, int subCnt) {
this.stdCode = stdCode;
this.stdName = stdName;
this.stdResisterNum = stdResisterNum;
this.stdDept = stdDept;
this.stdMajor = stdMajor;
this.subList = subList;
this.subCnt = subCnt;
}
//학생정보만 출력하는 메서드
public void printInfoStd() {
System.out.println(stdName + "(" + stdMajor + ")");
}
//수강과목을 출력하는 메서드 (배열 출력)
public void printStdSub() {
if(subCnt == 0) {
System.out.println("수강중인 과목이 없습니다.");
}
for(int i = 0; i < subCnt; i++) {
System.out.println(""+(i+1) + ". "+ subList[i]);
}
}
//수강과목 추가(신청)
//배열이 다 찼다면 늘려주기
public void insertSub(Subject sub) {
if(subCnt == subList.length) {
Subject[] tmp = new Subject[subList.length+5];
System.arraycopy(subList, 0, tmp, 0, subList.length);
subList = tmp;
}
subList[subCnt] = sub;
subCnt++;
}
//수강과목 삭제(철회)
//마지막 번지는 null로 채우기
public void deleteSub(String subName) {
int index = -1;
if(subName == null) {
return;
}
for(int i = 0; i < subList.length; i++) {
if(subList[i].getSubNmae().equals(subName)) {
index = i;
break;
}
}
if(index == -1) {
System.out.println("과목이 존재하지 않습니다.");
return;
}
for(int i = index; i < subList.length-1; i++) {
subList[i] = subList[i+1];
}
subList[subCnt-1] = null;
subCnt--;
}
public int getStdCode() {
return stdCode;
}
public void setStdCode(int stdCode) {
this.stdCode = stdCode;
}
public String getStdName() {
return stdName;
}
public void setStdName(String stdName) {
this.stdName = stdName;
}
public int getStdResisterNum() {
return stdResisterNum;
}
public void setStdResisterNum(int stdResisterNum) {
this.stdResisterNum = stdResisterNum;
}
public String getStdDept() {
return stdDept;
}
public void setStdDept(String stdDept) {
this.stdDept = stdDept;
}
public String getStdMajor() {
return stdMajor;
}
public void setStdMajor(String stdMajor) {
this.stdMajor = stdMajor;
}
public Subject[] getSubList() {
return subList;
}
public void setSubList(Subject[] subList) {
this.subList = subList;
}
public int getSubCnt() {
return subCnt;
}
public void setSubCnt(int subCnt) {
this.subCnt = subCnt;
}
}
import java.util.Scanner;
public class StudentManager implements Program {
private Student[] std = new Student[5];
private int stdCnt;
@Override
public void printStudent() {
System.out.println("---학생 전체 정보---");
for(int i = 0; i < stdCnt; i++) {
std[i].printInfoStd(); //학생정보만
std[i].printStdSub(); //수강정보 추가
System.out.println("-------------------");
}
}
// 1명의 정보값을 입력받아 객체를 생성한 후 std 배열에 추가
//배열이 꽉 찼다면 배열복사후 배열 이동
//배열에 등록
@Override
public void insertStudent(Scanner scan) {
System.out.println("--학생정보입력--");
System.out.print("학생명> ");
String sName = scan.next();
System.out.print("학과> ");
String major = scan.next();
System.out.println("------------");
Student s = new Student(sName,major);
if(stdCnt == std.length) {
Student[] tmp = new Student[std.length+5];
System.arraycopy(tmp, 0, std, 0, std.length);
std = tmp;
}
std[stdCnt] = s;
stdCnt++;
}
@Override
public void searchStudent(Scanner scan) {
System.out.print("찾는 학생명> ");
String name = scan.next();
for(int i = 0; i < stdCnt; i++) {
if(std[i].getStdName().equals(name)) {
std[i].printInfoStd();
std[i].printStdSub();
return;
}
}
System.out.println("검색 결과가 없습니다.");
}
@Override
public void registerSubject(Scanner scan) {
int index = -1;
System.out.print("수강신청 학생명> ");
String name = scan.next();
for(int i = 0; i < stdCnt; i++) {
if(std[i].getStdName().equals(name)) {
index = i;
break;
}
}
if(index == -1) {
System.out.println("학생정보가 없습니다.");
}else {
System.out.print("수강신청 과목명> ");
String subName = scan.next();
Subject s = new Subject(subName);
std[index].insertSub(s);
}
}
@Override
public void deleteSubject(Scanner scan) {
int index = -1;
System.out.print("수강철회 학생명> ");
String name = scan.next();
for(int i = 0; i < stdCnt; i++) {
if(std[i].getStdName().equals(name)) {
index = i;
break;
}
}
if(index == -1) {
System.out.println("학생정보가 없습니다.");
}else {
System.out.print("취소할 과목명> ");
String sName = scan.next();
std[index].deleteSub(sName);
}
}
}
import java.util.Scanner;
public class ProgramMain {
public static void main(String[] args) {
StudentManager sm = new StudentManager();
Scanner scan = new Scanner(System.in);
int menu = 0;
do {
System.out.println("--<<MENU>>--");
System.out.println("1.학생등록|2.학생검색|3.학생리스트");
System.out.println("4.수강신청|5.수강철회|6.종료");
System.out.print("메뉴선택 > ");
menu = scan.nextInt();
switch(menu) {
case 1:
System.out.println("----학생등록----");
sm.insertStudent(scan);
break;
case 2:
System.out.println("----학생검색----");
sm.searchStudent(scan);
break;
case 3:
System.out.println("----학생조회----");
sm.printStudent();
break;
case 4:
System.out.println("----수강신청----");
sm.registerSubject(scan);
break;
case 5:
System.out.println("----수강철회----");
sm.deleteSubject(scan);
break;
case 6: break;
default: System.out.println("잘못된 입력입니다.");
}
}while(menu != 6);
System.out.println("프로그램 종료");
scan.close();
}
}
[Java] Interface를 활용해 학생 관리프로그램 만들기 끝!
(다음 게시물 예고편)
[Java] Interface와 Class 상속을 활용해 로또 프로그램 만들기
728x90
@rlozlr :: 얼렁뚱땅 개발자
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!