프로젝트 완성

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.net.*;
//네트워크 연동
class Trans{
 
 private Socket cltsk;
 private Work w;
 private String add;


 
 public Trans(String address, Work w){
  
  this.w = w;
  add = address;
 
 }
 
 public void Connection(String work){
  try{
   cltsk = new Socket(add,9000);
        BufferedReader in = new BufferedReader(new
                                      InputStreamReader(cltsk.getInputStream()));
        PrintWriter out = new PrintWriter(cltsk.getOutputStream(),true);
        BufferedReader reader = new BufferedReader(
                    new InputStreamReader(System.in));
        out.println(work);
        cltsk.close();
  } catch(IOException e){
        System.out.println("IOException: "+e.getMessage());
    }
  
  
 }
 
 
 
}
//버튼 패널
class MenuPane extends JPanel{
 
 MenuListener ml;
 Work w;

 
 public MenuPane(Work w, Trans tr){
  
  super(new GridLayout(1,3));
  this.w = w;

  ml = new MenuListener(w,tr);
  JButton Bstart = new JButton("시작하기");
  JButton Bcall = new JButton("카운터호출");
  JButton Bmsg = new JButton("카운터로메세지전달");
  Bstart.addActionListener(ml);
  Bcall.addActionListener(ml);
  Bmsg.addActionListener(ml);
  add(Bstart);
  add(Bcall);
  add(Bmsg);
  
 }
 
 
}
//각종 작업에 필요한 정보 저장.
class Work{
 
 private Long StartTime;
 private int type, PCnum;
 private String msg;
 
 public Work(int num){
  PCnum = num;
 }
 public int getPCnum(){return PCnum;}
 
 public void setType(int type){
  this.type = type;
 }
 public int getType(){
  return type;
 }
 public void setMsg(String msg){
  this.msg = msg;
 }
 public String getMsg(){
  return msg;
 }

 
 
 public void Start(){
  StartTime = new Date().getTime();
  
 }
 public Long getstartTime(){
  return StartTime;
 }
 
}

//메뉴의 버튼 액션 리스너
class MenuListener implements ActionListener{
 
 Work w;

 Trans tr;
 String msg;
 
 public MenuListener(Work w, Trans tr){
  this.w = w;

  this.tr = tr;
 }
 
 
 public void actionPerformed(ActionEvent e){
  
  String str = e.getActionCommand();
  if ("시작하기".equals(str)){
   w.Start();
   w.setType(1);
  }
  else if ("카운터호출".equals(str)){
   w.setType(2);
  }  
  else if ("카운터로메세지전달".equals(str)){
   w.setType(3);
  }
  switch(w.getType()){
  
   case 1:
    tr.Connection(w.getPCnum()+"/!/!/1/!/!/시작");

    break;
   case 2:
    tr.Connection(w.getPCnum()+"/!/!/2/!/!/호출");

    break;
   case 3:
    msg = JOptionPane.showInputDialog("카운터에 전송할 메세지를 입력하세요.", "간단하게 입력해주세요.");
    tr.Connection(w.getPCnum()+"/!/!/3/!/!/"+msg);
    break;
  }//        /!/!/ 은 구분자임.
  
 }
 
}


//메인 클래스
public class Client extends JFrame{
 
 private MenuPane mc;
 private Work w;
 private Trans tr;
 private int num;
 
 public Client(){
  
  super("피시방 관리 프로그램");
  setSize(450,100);
  Container ct = getContentPane();
  try{
   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  }catch(Exception ex){}

  
  String address = JOptionPane.showInputDialog("관리컴퓨터주소를 입력하세요", "000.000.000.000");
  num = Integer.parseInt(JOptionPane.showInputDialog("이 PC 의 관리 번호를 입력하세요", "숫자만 입력."));
  w = new Work(num);
  tr = new Trans(address, w);
  mc = new MenuPane(w,tr);
  
  ct.add(new JLabel(num+" 번 PC"),"Center");
  ct.add(mc,"South");  
  setVisible(true);
  
 }

 public static void main(String args[]){
  
  Client obj = new Client();
  
 }
 
}


 프로젝트가 끝이 났다.

클라이언트 부분에 대한 간단한 설명을 하자면

클라이언트 부분은 매우 간단한 구성으로 이루어진다.


시작

관리자호출

관리자에게 메세지 보내기


의 세가지 버튼(메뉴)이 존재하며 버튼을 클릭하면

버튼의 값을 읽어 그 버튼 값의 정보를 String형 변수에 저장, 서버에 넘겨준다.


시작을 누르면

"(PC번호)/!/!/(작업타입)/!/!/(넘겨줄 정보)"->"/!/!" 스플릿에서 구분자로 사용된다.

의 문자열이 String 형 변수에 저장이 된다.

여기서 PC번호는 제일 처음 클라이언트 프로그램을 실행할때 설정하게 되며,

이번호는 서버에서 Com배열 객체 지정하는 것에도 사용된다.

작업타입은 1은 시작 2는 호출 3은 메세지출력 이다.

서버는 이 작업타입을 확인하여, 그에 맞는 동작을 하게 된다.

예를 들어 작업타입이 1이면,

서버는 확인후, 다이얼로그 메세지로 몇번컴퓨터가 사용을 시작합니다 라고 메세지를 출력한다.

1,2의 경우 넘겨울 정보에 " " 이런식의 공란이 들어가게되고

3의 경우 넘겨줄 정보의 값을 화면에 다이얼로그로 표시한다.


처음에 제작을 하기로 한 분량의 70프로 정도만 구현이 된 것같다.

1학기 때 이미 충분히 느꼈음에도, 또 다시 미리미리 해놓지 못하고 몰려 하게 된 결과인 것같다.

전체 프로그램에서 비중도 적은 부분을 맡았음에도 조원에게 많은 도움을 받았다.


학습 수준이 많이 미비하다는 것을 느꼇고,

이제 프로그램과 ppt는 완성을 했지만 아직 Manege의 부분은 더 학습이 필요하다.

내일 발표까지 최선을 다하자.

by 가짜토끼 | 2008/12/02 22:20 | 시스템 프로젝트 | 트랙백 | 덧글(1)

프로젝트

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.net.*;

class Trans{
 
 private Socket cltsk;
 private Work w;
 private Com c;
 
 public Trans(String address, Work w, Com c){
  
  this.w = w;
  this.c = c;
  try{
   
   cltsk = new Socket(address,8000);
   
  }catch(IOException e){
   System.out.println("예외처리:"+e.getMessage());
  }
  
 }
 
 public void Connection(){
  try{
        BufferedReader in = new BufferedReader(new
                                      InputStreamReader(cltsk.getInputStream()));
        PrintWriter out = new PrintWriter(cltsk.getOutputStream(),true);
        BufferedReader reader = new BufferedReader(
                    new InputStreamReader(System.in));
  
  } catch(IOException e){
        System.out.println("IOException: "+e.getMessage());
    }
  
  
 }
 
 
 
}

class MenuPane extends JPanel{
 
 MenuListener ml;
 Work w;
 Com c;
 
 public MenuPane(Work w, Com c, Trans tr){
  
  super(new GridLayout(1,3));
  this.w = w;
  this.c = c;
  ml = new MenuListener(w,c,tr);
  JButton Bstart = new JButton("시작");
  JButton Bcall = new JButton("카운터 호출");
  JButton Bmsg = new JButton("카운터로메세지전달");
  Bstart.addActionListener(ml);
  Bcall.addActionListener(ml);
  Bmsg.addActionListener(ml);
  add(Bstart);
  add(Bcall);
  add(Bmsg);
  
 }
 
 
}

class Work{
 
 int type;
 String msg;
 
 public void setType(int type){
  this.type = type;
 }
 public int getType(){
  return type;
 }
 public void setMsg(String msg){
  this.msg = msg;
 }
 public String getMsg(){
  return msg;
 }
 
}


class MenuListener extends JFrame implements ActionListener{
 
 Work w;
 Com c;
 Trans tr;
 String msg;
 
 public MenuListener(Work w, Com c, Trans tr){
  this.w = w;
  this.c = c;
  this.tr = tr;
 }
 
 
 public void actionPerformed(ActionEvent e){
  
  String str = e.getActionCommand();
  if ("시작하기".equals(str)){
   w.setType(1);
  }
  else if ("카운터호출".equals(str)){
   w.setType(2);
  }  
  else if ("카운터로메세지전달".equals(str)){
   w.setType(3);
  }
  switch(w.getType()){
  
   case 1:
    c.Start();
    //Trans
    break;
   case 2:
    //Trans
    break;
   case 3:
    msg = JOptionPane.showInputDialog("카운터에 전송할 메세지를 입력하세요.", "간단하게 입력해주세요.");
    w.setMsg(msg);
    break;
  }
  
 }
 
}

class Com{
 
 Long StartTime;
 
 
 public Com(){
  
 }
 
 public void Start(){
  
  StartTime = new Date().getTime();
  
 }
 public Long startTime(){
  return StartTime;
 }
 
}

public class ProJect extends JFrame{
 
 MenuPane mc;
 Work w;
 Com c;
 Trans tr;
 
 public ProJect(){
  
  super("피씨방 관리 프로그램");
  setSize(500,100);
  Container ct = getContentPane();
  try{
   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  }catch(Exception ex){}
  c = new Com();
  w = new Work();
  String address = JOptionPane.showInputDialog("관리컴퓨터주소를 입력하세요", "000.000.000.000");
  tr = new Trans(address, w,c);
  mc = new MenuPane(w,c,tr);
  

  ct.add(mc,"South");  
  setVisible(true);
  
 }

 public static void main(String args[]){
  
  ProJect obj = new ProJect();
  
 }
 
}

현재까지 완성된 부분.

아직 연동과 시작 버튼 구현, 카운터 호출 구현이 안되었다.

어서 끝마쳐야겠다.

by 가짜토끼 | 2008/11/29 13:30 | 시스템 프로젝트 | 트랙백 | 덧글(1)

9주차 1회(수업)

 지난 주에 몸이 아파서 수업에 참여하지 못해 많이 걱정을 햇었다.

다행하게도 이번주에는 DB에 관한 수업을 하면서

지난 주와 연계되는 부분이 적어서 무리 없이 진행을 따라갈 수 있었다.

수업 후 집에 와서 Mysql을 깔고, 간단한 테스트를 진행하였다.


Mysql을 깔고 정상적으로 구동되는 지 확인.


데이터베이스를 생성하고, 테이블을 생성하는 모습.

데이터베이스를 생성하고 use dbname;을 해주지 않아서 error발생!


테이블이 잘 생성되었는지 확인.


새 레코드를 입력하고, 확인하는 모습.


 우선은 간단한 구동과 기초적인 DB생성, TABLE생성, RECORD입력을 실습했다.

정신없이 바쁘다. 어서 마무리를 해야한다.

 프로젝트는 DB나 네트워크 둘 중 하나만 사용하면 되지만,

PC방 클라이언트의 제작에는 둘 모두가 필요할 것 같다.

by 가짜토끼 | 2008/11/10 16:28 | 시스템 프로젝트 | 트랙백

6주차 2회

그래픽 예제

import java.awt.*;
class MyCanvas extends Canvas {
 public void paint(Graphics g){
  g.drawString("Test",10,20);
  g.drawRect(50,10,30,20);
  g.fillRect(100,10,30,20);
  int xPos[] = {150,165,180,170,160}; //{x1,x3,x4,x2,x5}순서로 했다면
  int yPos[] = {20,10,20,30,30}; //{y1,y3,y4,y2,y5}순서로 해주어야한다.(순서쌍!)
  g.drawPolygon(xPos,yPos,5); // xPos와 yPos를 이용한 5각형
  g.drawRoundRect(10,50,40,40,10,10); // 모서리가 둥근 사각형
  g.drawOval(60,50,50,20);
  g.fillArc(100,50,40,40,45,-75);
  g.drawLine(10,110,170,130);
 }
}
class GraphicsExam {
 public static void main (String[]args){
  Frame f = new Frame("캔버스예제");
  Canvas c = new MyCanvas();
  f.setSize (200,180);
  f.add (c,"Center");
  f.setVisible(true);
 }
}


폰트 예제

import java.awt.*;

class FontCanvas extends Canvas {
 public void paint(Graphics g){
  GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  String fonts[] = ge.getAvailableFontFamilyNames();
  int style[] = { Font.BOLD, Font.ITALIC, Font.PLAIN, Font.BOLD, Font.ITALIC, Font.PLAIN, 1, 2, 0}; // 폰트는 ITALIC처럼 정해진 폰트의 구문을 사용해도 되고, 2처럼 정해진 수의 폰트를 사용해도 된다.
  int size[] = {12, 14, 16, 18, 20, 22, 24, 26, 28}; // 사이즈 지정
  for(int index = 0; index < style.length; index++) { // for문으로 style.length만큼 계속 돌려준다.
   g.setFont(new Font(fonts[index], style[index], size[index]));
   g.drawString(fonts[index], 10, 20+size[index]*index);
  }
 }
}
public class FontExam{
 public static void main (String[]args){
  Frame f = new Frame ("Font 예");
  f.setSize(300,300);
  f.add(new FontCanvas(),"Center");
  f.setVisible(true);
 }
}


시험 공부 하자 ㅠㅠ
아직 부족한 부분이 너무나 많다.

by 가짜토끼 | 2008/10/14 17:56 | 시스템 프로젝트 | 트랙백 | 덧글(1)

6주차 1회 (수업)

class Data {
 public String name = null; // public String name; 으로 하면 컴파일에러 발생가능성 있음. 명시해 준 것.
.
.
.
}

* 마우스 이동 좌표 알아내기, 윈도우 종료 버튼을 클릭했을 때 프로그램 종료되게 하기

import java.awt.*;
import java.awt.event.*;

public class AdapterExam extends Frame{
 private TextField point;
 public AdapterExam(String title){
  super(title);
  point = new TextField(10);
  Canvas canvas = new Canvas();
  canvas.addMouseMotionListener(new MouseMotionAdapter(){ // MouseListener(Adapter)->MouseMotionListener(Adapter)
   public void mouseMoved(MouseEvent e){ // MouseClicked->MouseMoved
    point.setText("X :" +e.getX()+", "+ "Y :" +e.getY());
   }
  });
  add(point,"North");
  add(canvas,"Center");
 }
 public static void main(String args[]){
  AdapterExam frm = new AdapterExam("무명 내부 클래스 예제");
  frm.addWindowListener (new WindowAdapter(){ // 윈도우 종료버튼을 클릭했을 때 프로그램이 종료
                     public void windowClosing(WindowEvent e){
           System.exit(0);
              }
    });
  frm.setSize(300,200);
  frm.setVisible(true);
 }
}

by 가짜토끼 | 2008/10/08 16:48 | 시스템 프로젝트 | 트랙백 | 덧글(1)

◀ 이전 페이지          다음 페이지 ▶