2008년 12월 02일
프로젝트 완성
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)







