본문 바로가기

자바 수업 정리

수업정리 10일차.

인터페이스 : 추상메서드와 상수(final)로만 이루어진 것.
추상 메서드 : 메서드의 선언부만 있고, 구현부가 없는 메서드
추상메서드가 포함되어있는 추상클래스/인터페이스 => 반드시 구현해야 객체를 생성할 수 있음.

 인터페이스 키워드 : interface 
- 추상클래스 : 대부분 상속을 하기위해 사용
- 인터페이스 : 메뉴얼 화 / 상속을 하기위해 사용
- 기능요약서라고 함.
- 상속키워드: extends / 구현키워드 : implement
- 인터페이스는 멤버변수를 포함하지 않기 떄문에, 이부분을 염두에 두고 메서드 정리를 해야함.

- 상속 : 다중상속 불가능
- 구현 : 다중구현 가능
- 상속 + 구현 동시에 가능

 


 

Student, Subject 클래스를 만들어서

Controller , main 구현해보기

 

interface로 일단 필요한 기능들 구현해놓고

public interface Program {
	/*
	 * 1.학생등록 | 2.학생리스트출력 | 3.학생검색(학생정보, 수강정보) | 4.학생정보수정 | 5.학생삭제 | 6.수강신청 | 7.수강철회 | 8.종료 
	 */
	
	void insertStudent(Scanner scan);
	
	void printStudent();
	
	void searchStudent(Scanner scan);
	
	void modifyStudent(Scanner scan);
	
	void deleteStudent(Scanner scan);
	
	void registerSubject(Scanner scan);
	
	void deleteSubject(Scanner scan);
	
	
	
}

 

 

모든 코드에 getter /setter 는 길어서 생략 들어가있음.

 

public class Subject {
	private String su_code;
	private String su_name;
	private int su_point;
	private int su_time;
	private String su_proName;
	private String timetable;
	private String su_place;
	
	
	public Subject() {
		
	}
	
	

	public Subject(String su_code, String su_name) {
		this.su_code = su_code;
		this.su_name = su_name;
	}


	public Subject(String su_code, String su_name, int su_point, int su_time, String su_proName, String timetable,
			String su_place) {
		this.su_code = su_code;
		this.su_name = su_name;
		this.su_point = su_point;
		this.su_time = su_time;
		this.su_proName = su_proName;
		this.timetable = timetable;
		this.su_place = su_place;
	}
	
	public void insertSubject(String su_code, String su_name, int su_point, int su_time, String su_proName, String timetable,
			String su_place) {
		this.su_code = su_code;
		this.su_name = su_name;
		this.su_point = su_point;
		this.su_time = su_time;
		this.su_proName = su_proName;
		this.timetable = timetable;
		this.su_place = su_place;
	}

	
	

	@Override
	public String toString() {
		return "Subject [su_code=" + su_code + ", su_name=" + su_name + ", su_point=" + su_point + ", su_time="
				+ su_time + ", su_proName=" + su_proName + ", timetable=" + timetable + ", su_place=" + su_place + "]";
	}

 

과목 구성 : 과목코드, 과목명, 학점, 시수 , 교수명, 시간표, 강의장 7가지로 구성

 

생성자와 과목추가 메서드까지 구현

 

public class Student {
	private String st_num;
	private String st_name;
	private int st_age;
	private String tel;
	private String st_home;
	private Subject[] sj = new Subject[10];
	private int number;
	private int cnt;
	
	public Student() {
		
	}
	
	
	public Student(String st_num, String st_name, String tel) {
		this.st_num = st_num;
		this.st_name = st_name;
		this.tel = tel;
	}


	public Student(String st_num, String st_name, int st_age, String tel , String st_home) {
		this.st_num = st_num;
		this.st_name = st_name;
		this.st_age = st_age;
		this.tel = tel;
		this.st_home = st_home;
	}
	
	

	public void insertSt(String st_num, String st_name, int st_age, String tel , String st_home) {		
		this.st_num = st_num;
		this.st_name = st_name;
		this.st_age = st_age;
		this.tel = tel;
		this.st_home = st_home;
	}
	
	
	public void printSj() {
		if(cnt != 0 && sj != null ) {
			for(int i = 0; i < cnt; i ++) {
				if(sj[i] != null) {
					System.out.println(sj[i]);
				}
			}
		} else {
			System.out.println("등록된 과목이 없습니다.");
		}
	}
	
	public void registerSubject(Scanner scan) {
		
		if (cnt == sj.length) {
			Subject[] tmp = new Subject[sj.length + 5];
			System.arraycopy(sj, 0, tmp, 0, cnt);
			sj = tmp;
		}
		
		System.out.println("신청할 수강 정보를 입력해주세요 ( 과목코드, 과목명, 학점, 시수, 교수명, 시간표, 강의장 순서 )");
		String su_code = scan.next();
		String su_name = scan.next();
		int su_point = scan.nextInt();
	    int su_time = scan.nextInt();
		String su_proName = scan.next();
		String timetable = scan.next();
		String su_place = scan.next();
		
		Subject sub = new Subject();
		
		sub.insertSubject(su_code, su_name, su_point, su_time, su_proName, timetable, su_place);
		
		sj[cnt] = sub;
		
		cnt++;
		
	    System.out.println("과목이 등록되었습니다: " + sub);
		
	}
	
	public void deleteSubject(Scanner scan) {
    
    	if(cnt == 0) {
			System.out.println("수강중인 과목이 없습니다.");
			return;
		}
        
		System.out.println("삭제할 과목명을 입력해주세요");
		String delName = scan.next();

		int index = -1; // 없는 번지를 기본값으로 설정

		for (int i = 0; i < cnt; i++) {
			if (sj[i].getSu_name().equals(delName)) {
				index = i;
				break;
			}
		}

		if (index == -1) {
			System.out.println("해당 과목이 목록에 없습니다.");
		}

		int copyCnt = sj.length - index - 1;
		System.arraycopy(sj, index + 1, sj, index, copyCnt);

		sj[cnt - 1] = null;
		cnt--;

	}



	@Override
	public String toString() {
		return "Student [st_num=" + st_num + ", st_name=" + st_name + ", st_age=" + st_age + ", tel=" + tel
				+ ", st_home=" + st_home +  "]";
	}

 

학생 구성 : 학번, 이름 나이, 전화번호, 사는곳 5가지로 구성하였고 

학생이 수강하고있는 수강과목들을 subject 클래스를 배열로해서 받아주게 만듬.

 

생성자와 학생추가 메서드를 구현하고

컨트롤러에서 사용 할 과목 배열에 수강정보를 추가 / 삭제하는 메서드를 구현해줌.

삭제하는 메서드는 배열복사를 이용.

 

public class StudentController implements Program {

	// 멤버변수 추가

	private Student[] s = new Student[10];
	private int cnt = 0;

	@Override
	public void insertStudent(Scanner scan) {
		if (cnt == s.length) {
			// 5개 더 많은 길이의 배열을 생성
			Student[] tmp = new Student[s.length + 5];
			// 배열 복사 기존배열의 0 번지부터 새배열으ㅏ 0번지부터 복사 cnt 개수만큼
			System.arraycopy(s, 0, tmp, 0, cnt);
			s = tmp;
		}

		System.out.println("학번,이름,나이,전화번호,주소를 순서대로 입력해주세요");
		String st_num = scan.next();
		String st_name = scan.next();
		int st_age = scan.nextInt();
		String st_tel = scan.next();
		String st_home = scan.next();

		Student st = new Student();

		st.insertSt(st_num, st_name, st_age, st_tel, st_home);
		st.setNumber(cnt + 1);

		s[cnt] = st;

		cnt++;

	}

	@Override
	public void printStudent() {
		if (cnt == 0) {
			System.out.println("학생이 없습니다. 추가해주세요");
		} else {
			for (int i = 0; i < cnt; i++) {
				System.out.println(s[i]);
			}
		}

	}

	@Override
	public void deleteStudent(Scanner scan) {
		System.out.println("삭제할 학생명을 입력해주세요");
		String delName = scan.next();

		int index = -1; // 없는 번지를 기본값으로 설정

		for (int i = 0; i < cnt; i++) {
			if (s[i].getSt_name().equals(delName)) {
				index = i;
				break;
			}
		}

		if (index == -1) {
			System.out.println("해당 학생이 목록에 없습니다.");
		}

		int copyCnt = s.length - index - 1;
		System.arraycopy(s, index + 1, s, index, copyCnt);

		s[cnt - 1] = null;
		cnt--;

		printStudent();
	}

	public void deleteStudent2(Scanner scan) {
		System.out.println("삭제할 학생명을 입력해주세요");
		String delName = scan.next();

		boolean found = false;

		for (int i = 0; i < cnt; i++) {
			if (s[i].getSt_name().equals(delName)) {
				for (int j = i; j < cnt - 1; j++) {
					s[j] = s[j + 1];
					s[j].setNumber(j + 1);
				}
				s[cnt - 1] = null;
				cnt--;
				found = true;
				break;
			}

		}

		if (!found) {
			System.out.println("해당 학생이 목록에 없습니다.");
		}

		printStudent();
	}

	@Override
	public void modifyStudent(Scanner scan) {
		System.out.println("수정할 학생명을 입력해주세요");
		String modifyName = scan.next();
		boolean found = false;

		for (int i = 0; i < cnt; i++) {
			if (s[i].getSt_name().equals(modifyName)) {
				System.out.println("수정 정보를 입력해주세요(학번,이름,나이,번호,사는곳 순서로 입력)");
				String st_num = scan.next();
				String st_name = scan.next();
				int st_age = scan.nextInt();
				String st_tel = scan.next();
				String st_home = scan.next();
				s[i].setSt_num(st_num);
				s[i].setSt_name(st_name);
				s[i].setSt_age(st_age);
				s[i].setTel(st_tel);
				s[i].setSt_home(st_home);

				found = true;
				break;
			}
		}

		if (!found) {
			System.out.println("해당 학생이 목록에 없습니다.");
		}

	}

	@Override
	public void searchStudent(Scanner scan) {
		System.out.println("검색할 학생명을 입력해주세요");
		String searchName = scan.next();
		boolean found = false;

		for (int i = 0; i < cnt; i++) {
			if (s[i].getSt_name().equals(searchName)) {
				System.out.println(s[i]);
				s[i].printSj();

				found = true;
				break;
			}
		}

		if (!found) {
			System.out.println("해당 학생이 목록에 없습니다.");
		}

	}
	
	

	@Override
	public void registerSubject(Scanner scan) {

		System.out.println("과목을 등록할 학생의 이름을 입력해주세요:");
		String studentName = scan.next();
		boolean found = false;

		for (int i = 0; i < cnt; i++) {
			if (s[i].getSt_name().equals(studentName)) {
				s[i].registerSubject(scan);
				found = true;
				break;
			}
		}
		if (!found) {
			System.out.println("해당 학생이 목록에 없습니다.");
		}

	}

	@Override
	public void deleteSubject(Scanner scan) {
		System.out.println("과목을 삭제할 학생의 이름을 입력해주세요:");
		String studentName = scan.next();
		boolean found = false;
		
		for (int i = 0; i < cnt; i++) {
			if (s[i].getSt_name().equals(studentName)) {
				s[i].deleteSubject(scan);
				found = true;
				break;
			}
		}
		if (!found) {
			System.out.println("해당 학생이 목록에 없습니다.");
		}
		
		
	}

}

 

인터페이스 했던걸 implements 구현.

 

학생 클래스를 배열로 받아와주고 메인에서 사용할 출력, 학생 추가 / 삭제 / 수정 / 검색 , 과목 추가 / 삭제

메서드 7가지를 구현해줌.

 

delete2는 학생을 따로 넘버링해서 학생고유번호로 삭제하는방법을 사용해볼까하고 student 클래스에 number을 만들어서 구현해보았는데 학생명으로 검색해서 보는게 지금 구현하는기능에 더 맞는거같아서 사용하진않고 delete2로 따로 빼둠.

 

student 클래스에서 구현한 과목 추가 / 삭제메서드를 내가 원하는 학생을 찾아서 그 학생의 과목배열에 추가 / 삭제 될 수 있도록 구현해주었음.

 

public class StudentMain {

	public static void main(String[] args) {
		/*
		 * 메뉴처리 1.학생등록 | 2.학생리스트출력 | 3.학생검색(학생정보, 수강정보) | 4.학생정보수정 | 5.학생삭제 | 6.수강신청 |
		 * 7.수강철회 | 8.종료
		 */

		StudentController sc = new StudentController();

		Scanner scan = new Scanner(System.in);

		int menu = 0;

		do {

			// 메뉴를 받을 때 필요, 상품을 받을 때 필요
			// 스캐너를 매개변수로 전달
			System.out.println(
					"메뉴를 선택해주세요 1.학생등록 | 2.학생리스트출력 | 3.학생검색(학생정보, 수강정보) | 4.학생정보수정 | 5.학생삭제 | 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);
		
		
		
		scan.close();
	}

}

 

실행 할 수 있는 메인을 구현해주면 끝.

'자바 수업 정리' 카테고리의 다른 글

수업정리 12일차.  (5) 2024.10.07
수업정리 11일차.  (0) 2024.10.04
수업정리 9일차.  (1) 2024.09.30
자바 설정 관련  (1) 2024.09.25
수업정리 8일차.  (3) 2024.07.24