2022-01-18 서점

GGAE99·2022년 1월 18일
0

진도

목록 보기
10/43

서점 프로그램

학원에서 배우던 것을 토대로 서점 관리 프로그램을 짜보았다.
솔직하게 말하자면 사실은 이거 만드는 것 보다 알고리즘 푸는게 더 재밌을 것 같다.

서점 책 관리프로그램을 짰다.
일단 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이 되는 것 이다. 그래서 안됐던 것 이다.
명심하자 초기화 하면 기본값이 들어간다. 그리고 그건 주솟값 또한 포함이다.

오늘의 느낀점은 따라만드는거랑 혼자 틀 없이 만드는거랑은 확실히 다르다는 것 이었다!
개념도 다 이해했는데 생각보다 힘들었다...!

오늘은 여기까지! 알고리즘 공부할거다!

0개의 댓글