// 문제1

class Account
{
 String accountNo;
 String ownerName;
 int balance;
 Account(String accountNo, String ownerName, int balance)
 {
  this.accountNo = accountNo;
  this.ownerName = ownerName;
  this.balance = balance;
 }
 
 void deposit(int amount)
 {
  balance += amount;
 }
 int withdraw(int amount) throws Exception
 {
  if(balance < amount)
   throw new Exception("잔액 부족");
  balance -= amount;
  return amount;
 }
}

class CheckingAccount extends Account
{
 String cardNo;
 CheckingAccount(String accountNo, String ownerName, int balance, String candNo)
 {
  super(accountNo, ownerName, balance);
  this.cardNo = candNo;
 }
 int pay(String cardNo, int amount) throws Exception
 {
  if(!cardNo.equals(this.cardNo) || (balance < amount))
   throw new Exception("지불 불가");
 
  return withdraw(amount);
 }
}

public class test
{
 public static void main(String[] args)
 {
  Account obj1 = new Account("111-22-33333","임꺽정",10000);
  Account obj2 = new Account("777-88-99999","김선달",30000);
  Account obj3 = new CheckingAccount("444-55-66666","홍길동",20000,"5555-6666-77777-8888");
  Account obj4 = new Account("000-00-00000","김미영",0);
 
  printAccountInfo(obj1);
  printAccountInfo(obj2);
  printAccountInfo(obj3);
  printAccountInfo(obj4);
 }
 
 static void printAccountInfo(Account obj)
 {
  System.out.println("계좌번호 : "+obj.accountNo);
  System.out.println("예금주 이름 : "+obj.ownerName);
  System.out.println("잔액 : "+obj.balance);
  if(obj instanceof CheckingAccount)
  {
   CheckingAccount CAobj = (CheckingAccount)obj;
   System.out.println("카드번호 : " + CAobj.cardNo);
  }
  System.out.println();
 }
}

// 문제 2번
enum Color
{
 YELLOW("노랑"), RED("빨강"), BLUE("파랑");
 final private String name;
 Color(String name)
 {
  this.name = name;
 }
 String value()
 {
  return name;
 }
}

// 문제 3
enum State
{
 BORROWED(1), NORMAL(0);
 final private int state;
 State(int state)
 {
  this.state = state;
 }
 int value()
 {
  return state;
 }
}

class SeparateVolume
{
 String requestNo;
 String bookTitle;
 String writer;
 String borrower;
 String checkOutData;
 State state;
 SeparateVolume(String requno, String book, String writer)
 {
  this.requestNo = requno;
  this.bookTitle = book;
  this.writer = writer;
 }
 public void checkOut(String borrower, String data)//대출함
 {
  if(state.value()!= state.NORMAL)
   return;
  this.borrower = borrower;
  this.checkOutData = data;
  this.state = state.BORROWED;
  System.out.println("*"+ bookTitle + "이(가) 대출되었음");
  System.out.println("대출인 : "+ borrower);
  System.out.println("대출일 : "+ checkOutData);
 }
 
 public void checkID()       // 반납
 {
  this.borrower = null;
  this.checkOutData = null;
  this.state = state.NORMAL;
  System.out.println("*"+ bookTitle + "이(가) 반납되었음");
 }
}

// 문제1 클래스 변경문제
/*
class CDInfo
{
 String registerNo;
 String title;
 CDInfo(String registerNo, String title)
 {
  this.registerNo = registerNo;
  this.title = title;
 }
}

class MusicCD extends CDInfo
{
 String artist;
 String music_name[];
 MusicCD(String registerNo, String title,
   String art, String musicname[])
 {
  // 슈퍼 클래스 생성자 사용
  super(registerNo, title);
  this.artist = art;
  this.music_name = musicname;
 }
 // 제대로 값이 들어갔는가 테스트용
 void Out()
 {
  System.out.println(this.registerNo);
  System.out.println(this.title);
  System.out.println(this.artist);
  System.out.println(this.music_name);
 }
}
public class main {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  MusicCD cd = new MusicCD("t-1","darkness","rosa","하늘을보면 하늘밖에");
  cd.Out();
 }
}
*/
/*
// 문제2번
class Rectangle
{
 private int width, height;
 Rectangle(int width, int height)
 {
  this.width = width;
  this.height = height;
 }
 
 int getWidth()
 {
  return this.width;
 }
 
 int getHeight()
 {
  return this.height;
 }
}

class Square extends Rectangle  // a부분
{
 Square(int sideLenght)
 {
  super(sideLenght, sideLenght);  // b부분
 }
 int getSideLength()
 {
  return this.getWidth();
 }
}

public class main {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Square rect = new Square(100);
  System.out.println(rect.getSideLength());
 }
}
*/
// 문제 3번
interface Lendable
{
 abstract void checkOut(String aborrower, String data);
 abstract void checkIn();
 abstract void Out_borrower();
 abstract void Out_checkoutdata();
}

class SeparateVolume implements Lendable
{
 String requsetNo;
 String bookTitle;
 String writer;
 String borrower;
 String checkOutData;
 byte state;
 SeparateVolume(String requsetNo, String bookTitle, String writer)
 {
  this.requsetNo = requsetNo;
  this.bookTitle = bookTitle;
  this.writer = writer;
 }
 public void checkOut(String borrower, String data)
 {
  if(state != 0)
   return;
 
  this.borrower = borrower;
  this.checkOutData = data;
  this.state = 1;
  System.out.println("*" + bookTitle + " 이(가) 대출되었다.");
  System.out.println("대출인" + borrower);
  System.out.println("대출일:" + data + "\n");
 }
 
 public void checkIn()
 {
  this.borrower = null;
  this.checkOutData = null;
  this.state = 0;
  System.out.println("*" + bookTitle + " 이(가) 반납됨\n");
 }
 public void Out_borrower()
 {
  System.out.println("대출인" + borrower);
 }
 public void Out_checkoutdata()
 {
  System.out.println("대출일:" + checkOutData + "\n");
 }
}
class CDInfo
{
 String registerNo;
 String title;
 CDInfo(String registerNo, String title)
 {
  this.registerNo = registerNo;
  this.title = title;
 }
}
class AppCDInfo extends CDInfo implements Lendable
{
 String borrower;
 String checkOutData;
 byte state;
 AppCDInfo(String registerNo, String title)
 {
  super(registerNo, title);
 }
 public void checkOut(String borrower, String data)
 {
  if(state != 0)
   return;
 
  this.borrower = borrower;
  this.checkOutData = data;
  this.state = 1;
  System.out.println("*" + title + "CD가 대출되었다.");
  System.out.println("대출인" + borrower);
  System.out.println("대출일:" + data + "\n");
 }
 
 public void checkIn()
 {
  this.borrower = null;
  this.checkOutData = null;
  this.state = 0;
  System.out.println("*" + title + "CD가 반납됨\n");
 }
 public void Out_borrower()
 {
  System.out.println("대출인" + borrower);
 }
 public void Out_checkoutdata()
 {
  System.out.println("대출일:" + checkOutData + "\n");
 }
}

public class main {
 public static void main(String[] args)
 {
  Lendable arr[] = {
    new AppCDInfo("2005-7001", "Redhat Fedora"),
    new SeparateVolume("859ㅂ986ㅊ","책상은 책상답게","빅셀")
  };
  checkOutAll(arr, "김수진", "20060318");
 }
 static void checkOutAll(Lendable arr[], String borrower, String data)
 {
  for(Lendable obj : arr)
  {
   obj.checkOut(borrower, data);
   obj.Out_borrower();
   obj.Out_checkoutdata();
  }
 }
}

interface MessageSender
//class MessageSender
{
/* String title;
 String senderName;
 
 // 인터페이스에선 추상 메소드만 선언해야 하는데, 생성자를 썻음
 MessageSender(String title, String sendName)
 {
  this.title = title;
  this.senderName = sendName;
 }
*/
 abstract void sendMessage(String recipient);
 
}

abstract class MessageSender
{
 String title;
 String senderName;
 
 // 인터페이스에선 추상 메소드만 선언해야 하는데, 생성자를 썻음
 MessageSender(String title, String sendName)
 {
  this.title = title;
  this.senderName = sendName;
 }
 abstract void sendMessage(String recipient);
}

// 문제 1번
class goods_info
{
 int m_code;   // 상품코드
 String m_name;  // 상품명
 String m_maker;  // 제조사
 int m_standvalue; // 표준단가
 double m_dcpersent; // 할인율

 // 할인율을 제외한 파라메터로 받는 생성자
 goods_info(int code, String name, String maker, int standvalue)
 {
  goods_write(code, name, maker, standvalue);
 }
 
 // 모든 필드를 파라메터로 받는 생성자
 goods_info(int code, String name, String maker,
   int standvalue, double dcper )
 {
  goods_write(code, name, maker, standvalue);
  this.m_dcpersent = dcper;
 }
 // 일종의 메크로
 void goods_write(int code, String name, String maker, double standvalue)
 {
  this.m_code = code;
  this.m_name = name;
  this.m_maker = maker;
  this.m_standvalue = (int)standvalue;
 }
 // 할인율 변경
 void change_dc(double num)
 {
  this.m_dcpersent =  m_standvalue * num;
 }
 // 판매가 계산
 int output_value()
 {
  return this.m_standvalue *= (int)this.m_dcpersent;
 }
}
// 문제 2번
class Square
{
 // final은 변수가 아닌 상수값으로 놓겠다는 의미인데
 // 이 함수는 이 상수값을 변경하려고 하였으므로 에러, final 을 지워준다.
 int sideLength;
 void setSideLength(int sideLength)
 {
  this.sideLength = sideLength;
 }
}
// 문제 3번
class Rectangle
{
private:
 int width, height;
public:
 Rectangle(int width, int height)
 {
  if(width <= 0)
   throw new Exception("넓이가  0이하임");
  if(height <= 0)
   throw new Exception("높이가  0이하임");
  this.width = width;
  this.height = height;
 }
 
 int getArea()
 {
  return width * height;
 }
}
// 문제 4번
class BBSItem
{
 static int number = 0;
 int seqNo;
 String writer;
 String writtenData;
 String title;
 String content;
 
 BBSItem(String writer, String writtenData, String title, String content)
 {
  this.seqNo = ++number;
  this.writer = writer;
  this.writtenData = writtenData;
  this.title = title;
  this.content = content;
 }
}

// 문제 5번
class TestApp
{
  public static void main(String args[])
  {
   printCharacter('*',30);
   System.out.println("Hello Java");
   printCharacter('-',30);
  }
  // 메인 함수가 static 즉 정적 메소드 이므로, 이 메소드에서 로딩되는
  // 함수인 printCharacter또한 정적 메소드로 해줘야 에러가 안난다.
  static void printCharacter(char ch, int num)
  {
   for(int cnt=0; cnt<num; cnt++)
    System.out.print(ch);
  
   System.out.println();
  
  }
}


public class test {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println("문제 1번");
  int total = 0;  // 문제의 short를int로 바꿔야 한다.
       // for문상 cnt 가 int선언되서 변수형이 달라 에러 나옴
  for(int cnt = 0; cnt < 10; cnt++)
   total = total + cnt;
  System.out.println(total);
 
  System.out.println();
  System.out.println("문제 2번");
  System.out.println("10%7 = " + (10%7));
  System.out.println("- - 100 = " + (- - 100));
  System.out.println("10*20 = " + 10*20);
  System.out.println("12e2 < 1234 = " + (12e2 < 1234));
  System.out.println("true & false | true = " + (true & false | true));
  System.out.println("100 == 1000 = " + (100 == 1000));
  System.out.println("true && false || true = " + (true && false || true));
  System.out.println("3&4 = " + (3&4));
  System.out.println("4==(3+1)?0:1 =" + (4==(3+1)?0:1));
  System.out.println("1<<3 = " + (1<<3));
 
  System.out.println();
  System.out.println("문제 3번");
  System.out.println(3 & 100L);   // 결과  0
 // System.out.println(++num++);   // 어느쪽 증감 연산인지 알수 없음
 // System.out.println(true + 3);   // boolean 과 덧샘 불가
  System.out.println("-_-"+true+3);  // 결과  -_-true3
 // System.out.println(true > false);  // boolean 끼리 비교 불가
 // System.out.println(0xFF00 || 0x00FF); // int 형끼리만 or 가능
 // System.out.println(--100);    // 변수로 감소연산자 사용하지 않음
 // System.out.println(120e3 << 2);   // 자료형이 각각 double, int형임 120e3 은 10진수로  73955 (int 범위 초과)
 }

}

+ Recent posts