학원에서 배우던 것을 토대로 서점 관리 프로그램을 짜보았다.
솔직하게 말하자면 사실은 이거 만드는 것 보다 알고리즘 푸는게 더 재밌을 것 같다.
서점 책 관리프로그램을 짰다.
일단 vo클래스를 Novle, Assey, Workbook 3개의 클래스로 만들어줬다.
그리고 부모vo클래스는 Book으로 만들었다.
즉 책의 종류가 뭐냐에따라 나눴다.
public class Book {
private int amount; // 책 수량
private int price; // 가격
private String name; // 제목
private String author; // 작가 이름
public Book() {
super();
// TODO Auto-generated constructor stub
}
public Book(int amount, int price, String name, String author) {
super();
this.amount = amount;
this.price = price;
this.name = name;
this.author = author;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
부모 클래스는 이렇게 짰다. 그리구 이 클래스를 상속받는 클래스들의 코드도 짰다.
지금부터 getter setter는 생략하고 코드를 올리겠다!
Novel Class
public class Novel extends Book{
private String genre; // 장르
private boolean storyLength; //장편 단편 여부
private int seriesNum; // 시리즈 번호
public Novel(String genre, boolean storyLength, int seriesNum) {
super();
this.genre = genre;
this.storyLength = storyLength;
this.seriesNum = seriesNum;
}
public Novel() {
super();
// TODO Auto-generated constructor stub
}
//책수량, 가격, 책 이름, 작가 이름, 장르, 장편단편, 시리즈 번호
public Novel(int amount, int price, String name, String author, String genre, boolean storyLength, int seriesNum) {
super(amount, price, name, author);
this.genre = genre;
this.storyLength = storyLength;
this.seriesNum = seriesNum;
}
Assey Class
public class Assey extends Book{
private boolean awards; // 수상 여부
private String genre; //장르
public Assey() {
super();
// TODO Auto-generated constructor stub
}
//책수량, 가격, 책 이름, 작가 이름. 수상 여부, 장르
public Assey(int amount, int price, String name, String author,boolean awards,String genre) {
super(amount, price, name, author);
this.awards = awards;
this.genre = genre;
}
Workbook Class
public class Workbook extends Book{
private boolean isAdult; // 성인용 여부
private String language; // 언어
//생성자
public Workbook() {
super();
// TODO Auto-generated constructor stub
}
//책수량, 가격, 책 이름, 작가 이름, 성인 확인 여부, 언어
public Workbook(int amount, int price, String name, String author,boolean isAdult,String language) {
super(amount, price, name, author);
this.isAdult = isAdult;
this.language = language;
}
3개의 클래스를 만들고, 종류마다 넣어줄 속성을 변수로 더 넣어주었다.
vo클래스를 모두 작성하고 메인 클래스로 넘어와 변수와 생성자를 만들어주었다.
public class BookStoreMgr {
private Scanner sc;//Scanner 객체
private Novel[] n;//novel 객체
private int nIndex;
private Assey[] a;//assey 객체
private int aIndex;
private Workbook[] w;//workbook 객체
private int wIndex;
private Book[] cart;
private int cartIndex;
private Book[][] recomend;
private int rIndex0;//소설 배열 관리
private int rIndex1;//에세이 배열 관리
private int rIndex2;//문제집 배열 관리
public BookStoreMgr() {
super();
sc = new Scanner(System.in);
n = new Novel[10]; // 소설 배열
nIndex = 0; // 소설 관리
a = new Assey[10];// 에세이 배열
aIndex = 0;// 에세이 관리
w = new Workbook[10];// 문제집 배열
wIndex = 0;// 문제집 관리
cart = new Book[10];// 고객 장바구니쓰
cartIndex = 0;// 관리쓰
recomend = new Book[3][5];//추천 목록
rIndex0 = 0;
rIndex1 = 0;
rIndex2 = 0;
// 책수량, 가격, 책 이름, 작가 이름, 장르, 장편단편, 시리즈 번호
n[nIndex++] = new Novel(5, 7000, "소설1", "작가1", "장르1", true, 1);
n[nIndex++] = new Novel(10, 8000, "소설2", "작가2", "장르2", false, 0);
n[nIndex++] = new Novel(8, 7500, "소설3", "작가3", "장르3", true, 3);
// 책수량, 가격, 책 이름, 작가 이름. 수상 여부, 장르
a[aIndex++] = new Assey(10, 9000, "에세이1", "시인1", true, "장르4");
a[aIndex++] = new Assey(20, 9000, "에세이2", "시인2", false, "장르5");
// 책수량, 가격, 책 이름, 작가 이름, 성인 확인 여부, 언어
w[wIndex++] = new Workbook(7, 18000, "수학의정석", "피타고라스", false, "한국어");
w[wIndex++] = new Workbook(10, 15000, "English", "JCena", true, "영어");
}
생성자를 만든 후 프로그램을 실행하는 메인 메소드를 만들어준다.
public void main() {
while (true) {// 프로그램 실행
System.out.println("--------------교보문");
System.out.println("1. 알바"); // 물건추가, 재고관리, 물건삭제
System.out.println("2. 손님"); // 물건구매
System.out.println("0. 프로그램 종료");
System.out.print("선택 > ");
int select = sc.nextInt();
switch (select) {
case 1:
alba();
break;// case 1 end
case 2:
client();
break;// case 2 end
case 0:
System.out.println("bye~");
return;// case 0 end // program end
default:
System.out.println("잘못 입력하셧습니다.");
break;// default end
}
} // while end//program end
}// main end
사실 오늘 이 코드를 짜면서 정리하고싶은 내용은 하나밖에 없다.
나머지는 다 너무 순조롭게 짰기때문에 그 하나만 쓰고 넘어가야겠다.
코드 다 올려야징 너무 쓸데없이 블라블라 하는 것 같다.
아니다 400줄이 넘어가서 너무 길다 안올려야겠다. 그냥 딱 오늘 다시 보고싶은 내용만 넣어야겠다.
public void exhibitionSee() {
System.out.println("---------------추천목록");
System.out.println(" 1\t2\t3\t4\t5\t열");
for(int i=0;i<3;i++) {
System.out.print(i+1);
for(int j = 0 ; j<5;j++) {
if(recomend[i][j]==null) {
System.out.print("□\t");
}else {
System.out.print(recomend[i][j].getName()+"\t");
}
}//inner for end
System.out.println();
System.out.println("---------------------------------------------------------");
}
}//exhibitionSee end
이게 오늘의 문제의 코드다. 추천하는 책의 목록을 추천하기위해서 배열의 기본값이 들어가있는 것들을 □값을 넣어주려고 했다. 그래서 배열에다getName을사용해 비교하고 □를 출력해주려고 했는데, 그게 잘 안됐다. 한참 머리를 싸매고있다가 1시간후 겨우 해결했다. 도움을 받아서...
원래는 코드를
for(int i=0;i<3;i++) {
System.out.print(i+1);
for(int j = 0 ; j<5;j++) {
if(recomend[i][j].getName.equals(null)) {
System.out.print("□\t");
}
}
}
이렇게 짰다. 근데 이렇게 하면 안되더라.
그 이유는 recomend[i][j]의 값이 초기화해주면서 주솟값도 null값을 가지고있기 때문에
null.getName이 되는 것 이다. 그래서 안됐던 것 이다.
명심하자 초기화 하면 기본값이 들어간다. 그리고 그건 주솟값 또한 포함이다.
오늘의 느낀점은 따라만드는거랑 혼자 틀 없이 만드는거랑은 확실히 다르다는 것 이었다!
개념도 다 이해했는데 생각보다 힘들었다...!
오늘은 여기까지! 알고리즘 공부할거다!