학사 관리 시스템의 개요
학사 관리 시스템에서 학생 관리(학생 등록, 조회, 수정, 삭제 등) 부분을 구현한 프로그램이다.
▶ 프로젝트 시나리오
· 학생 5명의 샘플 데이터를 데이터베이스에 등록한다.
· 전체 학생 정보를 출력한다.
· 새로운 학생 정보를 등록한다.
· 학생 정보를 수정한다.
· 학생 정보를 삭제한다.
· 시스템 정보를 출력한다.
▶ 프로젝트 구조
프로그램에서 사용하는 클래스와 IoC 컨테이너 제작에 필요한 applicationContent.xml의 내용은 다음과 같다.
학생 정보를 등록, 조회, 수정, 삭제하는 서비스 클래스들은 DAO(StudentdDao)을 이용해서 학생 정보를 관리한다.
IoC 컨테이너 : 서비스 객체를 생성하고, 필요한 DAO 객체를 생성해서 서비스에 주입하는 역할
MainClass 클래스 | |
MainClass | main() 메서드가 명시되어 있는 클래스 |
DB 관련 클래스 | |
DBConnectionInfo | 데이터베이스 정보 |
Student | 학생 정보 |
Service 클래스 | |
EMSInformationService | 시스템 정보 |
PrintStudentInformationService | 학생 정보 출력 |
StudentAllSelectService | 전체 학생 정보 조회 |
StudentDeleteService | 학생 정보 삭제 |
StudentModifyService | 학생 정보 수정 |
StudentRegisterService | 학생 정보 등록 |
StudentSelectService | 학생 정보 조회 |
DAO 클래스 | |
StudentDao | DAO |
Util 클래스 | |
InitSampleData | 샘플 데이터 초기화 |
IoC 컨테이너 | |
applicationContext.xml | 객체 생성과 조립 |
학사 관리 시스템 만들기
자바 메이븐 프로젝트 ch04_pjt_01을 생성한다.
다음과 같이 패키지와 클래스를 생성한다.
각각의 클래스에 코드를 입력한다.
getter와 setter 단축키 : ctrl + shift + s / Source > Generate getters and setters
① Student 클래스
· 학생 정보를 담고 있다.
· sNum : 학생 구분하는 학번, 생성자에서 필드 초기화에 필요한 모든 값을 받음.
· 모든 필드에 대한 getter와 setter가 있다.
package ch04_pjt_01.ems.member;
public class Student {
private String sNum;
private String sId;
private String sPw;
private String sName;
private int sAge;
private char sGender;
private String sMajor;
public Student(String sNum, String sId, String sPw, String sName,
int sAge, char sGender, String sMajor) {
this.sName = sName;
this.sId = sId;
this.sPw = sPw;
this.sAge = sAge;
this.sGender = sGender;
this.sMajor = sMajor;
}
public String getsNum() {
return sNum;
}
public void setsNum(String sNum) {
this.sNum = sNum;
}
public String getsId() {
return sId;
}
public void setsId(String sId) {
this.sId = sId;
}
public String getsPw() {
return sPw;
}
public void setsPw(String sPw) {
this.sPw = sPw;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public int getsAge() {
return sAge;
}
public void setsAge(int sAge) {
this.sAge = sAge;
}
public char getsGender() {
return sGender;
}
public void setsGender(char sGender) {
this.sGender = sGender;
}
public String getsMajor() {
return sMajor;
}
public void setsMajor(String sMajor) {
this.sMajor = sMajor;
}
}
② DBConnectionInfo 클래스
· 데이터베이스 연결에 필요한 정보(url, userId, userPw)를 가지고 있다.
· 모든 필드에 대한 getter와 setter 메서드가 있다.
package ch04_pjt_01.ems.member;
public class DBConnectionInfo {
private String url;
private String userId;
private String userPw;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserPw() {
return userPw;
}
public void setUserPw(String userPw) {
this.userPw = userPw;
}
}
③ StudentDao 클래스
· 데이터베이스에 접속하고, Service에 의해서 호출되며 데이터의 insert, search, update, delete 등 기능을 수행
· HashMap : 학생 데이터 관리
· studentDB에서 key로 사용되는 값은 학생정보(Student 클래스)에서 고유 값으로 부여되는 sNum(학번)을 이용한다.
package ch04_pjt_01.ems.member.dao;
import java.util.HashMap;
import java.util.Map;
import ch04_pjt_01.ems.member.Student;
public class StudentDao {
private Map<String, Student> studentDB = new HashMap<String, Student>();
public void insert(Student student) {
studentDB.put(student.getsNum(), student);
}
public Student select(String sNum) {
return studentDB.get(sNum);
}
public void update(Student student) {
studentDB.put(student.getsNum(), student);
}
public void delete(String sNum) {
studentDB.remove(sNum);
}
public Map<String, Student> getStudentDB(){
return studentDB;
}
}
④ StudentRegisterService 클래스
· 학생 정보를 데이터베이스에 저장하는 기능
· 생성자에서 DAO 객체(StudentDao)를 받아 studentDao 필드를 초기화하는 코드로, 추후 IoC 컨테이너에서 생성자에 StudentDao를 주입한다.
· verify() : 학생 정보 등록하기 전에 학번(sNum)을 이용하여 기존에 등록된 학생인지 판단한다.
package ch04_pjt_01.ems.member.service;
import ch04_pjt_01.ems.member.Student;
import ch04_pjt_01.ems.member.dao.StudentDao;
public class StudentRegisterService {
private StudentDao studentDao;
public StudentRegisterService(StudentDao studentDao) {
this.studentDao = studentDao;
}
public void register(Student student) {
if(verify(student.getsNum())) {
studentDao.insert(student);
} else {
System.out.println("The student has already registered.");
}
}
public boolean verify(String sNum) {
Student student = studentDao.select(sNum);
return student == null ? true : false;
}
}
⑤ StudentSelectService 클래스
· 학생 한 명의 정보를 얻을 수 있다.
· 다른 Service와 마찬가지로 생성자에서 전달받은 DAO 객체를 studentDao 필드에 저장한다.
· select() : DAO을 이용하여 데이터베이스에서 학생 정보를 가져온다.
package ch04_pjt_01.ems.member.service;
import ch04_pjt_01.ems.member.Student;
import ch04_pjt_01.ems.member.dao.StudentDao;
public class StudentSelectService {
private StudentDao studentDao;
public StudentSelectService(StudentDao studentDao) {
this.studentDao = studentDao;
}
public Student select(String sNum) {
if (verify(sNum)) {
return studentDao.select(sNum);
} else {
System.out.println("Student information is avilable.");
}
return null;
}
public boolean verify(String sNum) {
Student student = studentDao.select(sNum);
return student != null ? true : false;
}
}
⑥ StudentAllSelectService 클래스
· allSelect() : 전체 학생 정보를 반환한다.
· 다른 Service 클래스와 마찬가지로 생성자를 통해서 studentDao를 초기화한다.
package ch04_pjt_01.ems.member.service;
import java.util.Map;
import ch04_pjt_01.ems.member.Student;
import ch04_pjt_01.ems.member.dao.StudentDao;
public class StudentAllSelectService {
private StudentDao studentDao;
public StudentAllSelectService(StudentDao studentDao) {
this.studentDao = studentDao;
}
public Map<String, Student> allSelect(){
return studentDao.getStudentDB();
}
}
⑦ StudentModifyService 클래스
· modify() : 학생 정보를 수정
· 다른 Service 클래스와 마찬가지로 생성자에서 studentDao를 초기화
package ch04_pjt_01.ems.member.service;
import ch04_pjt_01.ems.member.Student;
import ch04_pjt_01.ems.member.dao.StudentDao;
public class StudentModifyService {
private StudentDao studentDao;
public StudentModifyService(StudentDao studentDao) {
this.studentDao = studentDao;
}
public void modify(Student student) {
if (verify(student.getsNum())) {
studentDao.update(student);
} else {
System.out.println("Student information is avilable.");
}
}
public boolean verify(String sNum) {
Student student = studentDao.select(sNum);
return student != null ? true : false;
}
}
⑧ StudentDeleteService 클래스
· 생성자에서 studentDao를 초기화
· delete() : 학생 정보 삭제
package ch04_pjt_01.ems.member.service;
import ch04_pjt_01.ems.member.Student;
import ch04_pjt_01.ems.member.dao.StudentDao;
public class StudentDeleteService {
private StudentDao studentDao;
public StudentDeleteService(StudentDao studentDao) {
this.studentDao = studentDao;
}
public void delete(String sNum) {
if (verify(sNum)) {
studentDao.delete(sNum);
} else {
System.out.println("Student information is avilable.");
}
}
public boolean verify(String sNum) {
Student student = studentDao.select(sNum);
return student != null ? true : false;
}
}
⑨ PrintStudentInformationService 클래스
· 생성자에서 allSelectService를 초기화
· printStudentsInfo() : 전체 학생 정보 출력
package ch04_pjt_01.ems.member.service;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import ch04_pjt_01.ems.member.Student;
public class PrintStudentInformationService {
StudentAllSelectService allSelectService;
public PrintStudentInformationService(StudentAllSelectService allSelectService) {
this.allSelectService = allSelectService;
}
public void printStudentsInfo() {
Map<String, Student> allStudent = allSelectService.allSelect();
Set<String> keys = allStudent.keySet();
Iterator<String> iterator = keys.iterator();
System.out.println("STUDENT LIST START --------------");
while(iterator.hasNext()) {
String key = iterator.next();
Student student = allStudent.get(key);
System.out.print("sNum:" + student.getsNum() + "\t");
System.out.print("|sId:" + student.getsId() + "\t");
System.out.print("|sPw:" + student.getsPw() + "\t");
System.out.print("|sName:" + student.getsName() + "\t");
System.out.print("|sAge:" + student.getsAge() + "\t");
System.out.print("|sGender:" + student.getsGender() + "\t");
System.out.println("|sMajor:" + student.getsMajor() + "\t");
}
System.out.println("END -------------------------------");
}
}
⑩ EMSInformationService 클래스
· EMS의 개발 연도, 개발자, 버전 등의 정보를 담고 있는 클래스
· 특별한 기능 없고, 각각의 정보에 해당하는필드와 getter와 setter메서드가 있다.
package ch04_pjt_01.ems.member.service;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import ch04_pjt_01.ems.member.DBConnectionInfo;
public class EMSInformationService {
private String info;
private String copyRight;
private String ver;
private int sYear;
private int sMonth;
private int sDay;
private int eYear;
private int eMonth;
private int eDay;
private List<String> developers;
private Map<String, String> administrators;
private Map<String, DBConnectionInfo> dbInfos;
public void printEMSInformation() {
System.out.println("EMS INFORMATION START ---------");
String devPeriod = sYear + "/" + sMonth + "/" + sDay + "/" + " ~ "
+ eYear + "/" + eMonth + "/" + eDay;
System.out.println(info + "(" + devPeriod + ")");
System.out.println(copyRight);
System.out.println(ver);
System.out.println("Developers: " + developers);
System.out.println("Administrator: "+ administrators);
printDBInfo();
System.out.println("END ---------------------------");
}
private void printDBInfo() {
Set<String> keys = dbInfos.keySet();
Iterator<String> iterator = keys.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
DBConnectionInfo info = dbInfos.get(key);
System.out.print("[" + key + " DB] ");
System.out.print("url: " + info.getUrl() + "\t");
System.out.print("userId: " + info.getUserId() + "\t");
System.out.print("userPw: " + info.getUserPw() + "\n");
}
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getCopyRight() {
return copyRight;
}
public void setCopyRight(String copyRight) {
this.copyRight = copyRight;
}
public String getVer() {
return ver;
}
public void setVer(String ver) {
this.ver = ver;
}
public int getsYear() {
return sYear;
}
public void setsYear(int sYear) {
this.sYear = sYear;
}
public int getsMonth() {
return sMonth;
}
public void setsMonth(int sMonth) {
this.sMonth = sMonth;
}
public int getsDay() {
return sDay;
}
public void setsDay(int sDay) {
this.sDay = sDay;
}
public int geteYear() {
return eYear;
}
public void seteYear(int eYear) {
this.eYear = eYear;
}
public int geteMonth() {
return eMonth;
}
public void seteMonth(int eMonth) {
this.eMonth = eMonth;
}
public int geteDay() {
return eDay;
}
public void seteDay(int eDay) {
this.eDay = eDay;
}
public List<String> getDevelopers() {
return developers;
}
public void setDevelopers(List<String> developers) {
this.developers = developers;
}
public Map<String, String> getAdministrators() {
return administrators;
}
public void setAdministrators(Map<String, String> administrators) {
this.administrators = administrators;
}
public Map<String, DBConnectionInfo> getDbInfos() {
return dbInfos;
}
public void setDbInfos(Map<String, DBConnectionInfo> dbInfos) {
this.dbInfos = dbInfos;
}
}
⑪ InitSampleData 클래스
· 프로그램 실행에 필요한 샘플 데이터로 5명의 학생 정보를 각각의 필드에 가지고 있다.
· getter와 setter 메서드를 가진다.
package ch04_pjt_01.ems.utils;
public class InitSampleData {
private String[] sNums = {"hbs001", "hbs002", "hbs003", "hbs004", "hbs005"};
private String[] sIds = {"rabbit", "hippo", "raccoon", "elehant", "lion"};
private String[] sPws = {"96539", "64875", "15284", "48765", "28661"};
private String[] sNames = {"agatha", "barbara", "chris", "doris", "elva"};
private int[] sAges = {19, 22, 20, 27, 19};
private char[] sGenders = {'M', 'W', 'W', 'M', 'M'};
private String[] sMajors = {"English Literature", "Korean Language and Literature",
"French Language and Literature", "Philosophy", "History"};
public String[] getsNums() {
return sNums;
}
public void setsNums(String[] sNums) {
this.sNums = sNums;
}
public String[] getsIds() {
return sIds;
}
public void setsIds(String[] sIds) {
this.sIds = sIds;
}
public String[] getsPws() {
return sPws;
}
public void setsPws(String[] sPws) {
this.sPws = sPws;
}
public String[] getsNames() {
return sNames;
}
public void setsNames(String[] sNames) {
this.sNames = sNames;
}
public int[] getsAges() {
return sAges;
}
public void setsAges(int[] sAges) {
this.sAges = sAges;
}
public char[] getsGenders() {
return sGenders;
}
public void setsGenders(char[] sGenders) {
this.sGenders = sGenders;
}
public String[] getsMajors() {
return sMajors;
}
public void setsMajors(String[] sMajors) {
this.sMajors = sMajors;
}
}
'Spring & Springboot > 올인원 스프링 프레임워크' 카테고리의 다른 글
학사 관리 시스템 -3 (0) | 2023.09.14 |
---|---|
학사 관리 시스템 -2 (0) | 2023.09.13 |
프로젝트 생성 시 나타나는 경고 해결방안 (0) | 2023.09.12 |
스프링을 이용한 계산기 프로그램 (0) | 2023.09.12 |
스프링 프로젝트 생성하기 (0) | 2023.09.12 |