close_btn
로그인, 회원가입후 더 많은 혜택을 누리세요 로그인 회원가입 닫기

간단한 주식시스템(테스트 X

2016.06.29 10:36

준희미니 조회 수:69

l1j.server.GameSystem 폴더에 아래 파일 넣어주세요.

L1Stock_Data.java , L1Stock.java , StockSystem.java

 

l1j.server.server.datatables 폴더에 아래 파일 넣어주세요.

StockTable.java

 

아래는 추가

 

UserCommands.java

 

} else if (cmd.equalsIgnoreCase("주식")) {

    stockinfo(pc);

   } else if (cmd.equalsIgnoreCase("주식구입")) {

    stockbuy(pc, param);

   } else if (cmd.equalsIgnoreCase("주식목록")) {

 

    stocklist(pc);

 

 

private void stocklist(L1PcInstance pc) { //주식목록

  // TODO Auto-generated method stub

  String msg = null;

  ArrayList<L1Stock> list = StockSystem.getInstance().stocklist();

  for(L1Stock _stock : list){

   msg = "[ "+_stock.getNo()+"번주식 / 현재가격 : "+_stock.getPrice()+"아덴 ]";

   pc.sendPackets(new S_SystemMessage(msg));

  }

}

 

private void stockbuy(L1PcInstance pc, String param) { //주식구입

  // TODO Auto-generated method stub

  StringTokenizer tok = new StringTokenizer(param);

  int stocknum = Integer.parseInt(tok.nextToken());

  int count = Integer.parseInt(tok.nextToken());

  StockTable st = new StockTable();

  st.CreateStock(pc, stocknum, count);

}

 

private void stockinfo(L1PcInstance pc) { //내주식목록

  // TODO Auto-generated method stub

  String msg = null;

  StockTable st = new StockTable();

  ArrayList<L1Stock_Data> sd = st.mystocklist(pc);

  for(L1Stock_Data _stock : sd){

   msg =  "[ "+_stock.getStock_num()+"번주식 / 살때가격 : "+_stock.getStock_price()+"아덴 / 구입갯수" +_stock.getStock_count()+" ]";

   pc.sendPackets(new S_SystemMessage(msg));

  }

 

}

 

C_SelectCharacter.java

 

 

 

/**

  * 주식시스템 주식지급

  */

  StockTable st = new StockTable();

 

  st.CheckStock(pc);

 

 

테이블 생성 Query 

 

 

CREATE TABLE stock

( stock_no       INT primary key,

  stock_date   VARCHAR(40),

  stock_price   INT

  );

 

CREATE TABLE stock_data

( stock_no       INT unsighned not null auto_increment primary key,

  stock_date   VARCHAR(30),

  stock_player_id INT 

  stock_price  INT,

  stock_count     INT,

  stock_num      INT,

  stock_give    VARCHAR(30)

 

  );

 

 

 

안녕하세요 3월초부터 개발들어가는터라 그동안은 java코딩실력이나 다시복습할겸 프리섭팩만지고있어요.

 

오늘도 출근해서 빈둥빈둥하다 심심해서 만들어본 주식시스템이에요

 

/**

* 당일날 산 주식은 24시간뒤에 에 접속or재접속시 팔린다.

* 정각00:00분에 주식값이변동한다.지났을시엔 서버처음켰을때 계산해서 한다. 

* 주식테이블  no , date 날짜 , 주식가격 , 주식번호 , 

* 구입목록테이블 no , Date 구입일 , playerid, 구입할떄의금액 , 구입한수량 , 주식번호 , 지급여부

private final int priceChangesize = 1000; <<이부분이 변동폭 +- 1000원 으로설정되있어요~

기존가격+변동가격 = 주식가격 이되는겁니다!

*/

.주식 //내현재주식구매목록 내가구입한 주식들을 쫙뿌려준다. 플레이어id로검색해서 받아오기

.주식구입 //주식구매 insert .주식구입 주식번호 수량

 

.주식목록 //주식현재가격및 주식들현황

 

아침에오자마자 이것만 적어놓고 시작했던게 이만큼해버렸네요 테스트를못하니확인은못해보지만 ㅎㅎ

 

테스트할 환경이안되서 그냥 머리속으로디코딩하면서짯는데 하시다가안되시면 저에게문의주세요

 

댓글도되고 쪽지도됩니다. 안바쁠때고쳐드릴게요 ㅎ

 

아그리구 요즘활동살짝하는데 네이트온아이디 알려달라 또는 팩파시냐고 쪽지많이오시네요 ㅎㅎ;; 

 

제가 회사생활하다가 틈날때심심해서하는거라 그렇게까지 도와드릴수가없어요 팩은아무거나다운받아서한거라 ㅎㅎ

 

그런쪽지는 자제해주시고 질문답변은환영합니다.

 

아래부터는 첨부파일내용입니다. 보시라구올려요.

 

 

 

L1Stock.java

 

 

public class L1Stock {

 

public L1Stock(){

 

}

 

private int no = 0;

private Calendar date =null;

private int price = 0;

private int stocknum = 0;

 

public int getNo() {

  return no;

}

public void setNo(int no) {

  this.no = no;

}

public Calendar getDate() {

  return date;

}

public void setDate(Calendar date) {

  this.date = date;

}

public int getPrice() {

  return price;

}

public void setPrice(int price) {

  this.price = price;

}

 

 

}

 

 

StockSystem.java

 

 

public class StockSystem implements Runnable{

private static StockSystem instance;

 

private StockSystem(){

  //테이블에서 list채우기

  StockTable st = new StockTable();

  stocklist = st.SelectStock();

}

 

public static StockSystem getInstance(){

  if (instance == null) {

   instance = new StockSystem();

  }

  return instance;

}

/**

* 변수모음

*/

private ArrayList<L1Stock> stocklist = new ArrayList<L1Stock>();

 

private final int priceChangesize = 1000;

 

 

/**

* 당일날 산 주식은 다음날 정각 24시간뒤에 에 팔린다.

* 하루마다에 주식값이변동한다.지났을시엔 서버처음켰을때 계산해서 한다. 

* 주식테이블  no(주식번호) , date 날짜 , 주식가격

* 구입목록테이블 no , Date 구입일 , playerid, 구입할떄의금액 , 구입한수량 , 주식번호 , 지급여부

*/

 

@Override

public void run() {

  try {

   // TODO Auto-generated method stub

   while(true){

    TimeCheck();

    Thread.sleep(1000);

   }

  } catch (Exception e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

}

 

private void TimeCheck(){

  Calendar Rtime = RealTimeClock.getInstance().getRealTimeCalendar();

  Calendar endtime = null;

  Calendar Addtime = null;

  L1Stock Addstock = null;

  for(L1Stock _stock : stocklist){

   endtime = _stock.getDate();

   endtime.add(Calendar.DATE,1);

   if(!_stock.getDate().before(Rtime) && endtime.after(Rtime)){

    endtime.add(Calendar.DATE,1);

    _stock.setDate(endtime);

    _stock = StockPriceChange(_stock);

    stocklist.set(stocklist.indexOf(_stock), _stock);

   }

  }

}

 

private L1Stock StockPriceChange(L1Stock _stock){

  Random _random = new Random();

  int result = _random.nextInt(priceChangesize)+1;

  _stock.setPrice(result);

  //디비에 저장하기 

  StockTable st1 = new StockTable();

  st1.UpdateStock(_stock);

  return _stock;

}

 

public ArrayList<L1Stock> stocklist(){

  return stocklist;

}

 

 

 

 

 

}

 

 

 

StockTable.java

 

 

public class StockTable {

 

private static Logger _log = Logger.getLogger(StockTable.class.getName());

 

private Connection con = null;

 

public StockTable(){

  try {

   con = L1DatabaseFactory.getInstance().getConnection();

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

}

public void CreateStock(L1PcInstance pc,int stocknum,int count){

  PreparedStatement pstm = null;

  Calendar cal = Calendar.getInstance();

  String date = String.valueOf(cal.get(Calendar.YEAR))+"-"

    +String.valueOf(cal.get(Calendar.MONTH)+1)+"-"

    +String.valueOf(cal.get(Calendar.DATE))+"-"

    +String.valueOf(cal.get(Calendar.HOUR));

  StockTable st = new StockTable();

  L1Stock _stock = st.SelectStock(stocknum); 

  if(!pc.getInventory().checkItem(40308, (_stock.getPrice()*count))){

   pc.sendPackets(new S_SystemMessage("아데나가 부족합니다."));

   return;

  }

  L1Stock_Data sd = new L1Stock_Data();

  sd.setStock_count(count);

  sd.setStock_date(date);

  sd.setStock_num(stocknum);

  sd.setStock_player_id(pc.getId());

  sd.setStock_price(_stock.getPrice());

  try{

   pstm =con

   .prepareStatement("INSERT INTO stock_data SET stock_date=?, stock_player_id=? ,stock_price=?,stock_count=?,stock_num=?,stock_give=?");

   pstm.setString(1, sd.getStock_date());

   pstm.setInt(2, pc.getId());

   pstm.setInt(3, sd.getStock_price());

   pstm.setInt(4, sd.getStock_count());

   pstm.setInt(5, sd.getStock_num());

   pstm.setBoolean(6, false);

   pstm.execute();

   pc.getInventory().consumeItem(40308,(_stock.getPrice()*count));

  } catch (SQLException e) {

   _log.log(Level.SEVERE, e.getLocalizedMessage(), e);

  } finally {

   SQLUtil.close(pstm);

   SQLUtil.close(con);

  

  }

}

 

public boolean CheckStock(L1PcInstance pc){

  PreparedStatement pstm = null;

  ResultSet rs = null;

  boolean result = false;

  String date;

  String[] date1;

  Calendar cal;

  Calendar endtime = null;

  ArrayList<Integer> numlist = new ArrayList<Integer>();

  try{

   pstm = con

     .prepareStatement("SELECT * FROM stock_date where stock_player_id=? and stock_give=?");

   pstm.setInt(1, pc.getId());

   pstm.setBoolean(2, false);

   rs = pstm.executeQuery();

  

   while(rs.next()) {

    cal = Calendar.getInstance();

    date = rs.getString("stock_date");

    date1 = date.split("-");

    cal.set(Calendar.YEAR, Integer.parseInt(date1[0]));

    cal.set(Calendar.MONTH, Integer.parseInt(date1[1]));

    cal.set(Calendar.DATE, Integer.parseInt(date1[2]));

    cal.set(Calendar.HOUR, Integer.parseInt(date1[3]));

    StockTable st = new StockTable();

    L1Stock _stock = st.SelectStock(rs.getInt("stock_num")); 

    endtime = cal;

    endtime.add(Calendar.DATE,1);

    if(endtime.before(cal)){

    pc.getInventory().storeItem(40308,_stock.getPrice() * rs.getInt("stock_count"));

    pc.sendPackets(new S_SystemMessage(_stock.getNo()+"번 주식이 팔려 아데나 : "+(_stock.getPrice() * rs.getInt("stock_count"))+"지급됩니다."));

    numlist.add(rs.getInt("stock_no"));

    }

   }

   if(numlist.size() > 0){

    StockTable st = new StockTable();

    st.updategive(numlist);

   }

  } catch (SQLException e) {

   _log.log(Level.SEVERE, e.getLocalizedMessage(), e);

  } finally {

   SQLUtil.close(pstm);

   SQLUtil.close(con);

  }

  return result;

}

public ArrayList<L1Stock_Data> mystocklist(L1PcInstance pc){

  PreparedStatement pstm = null;

  ResultSet rs = null;

  ArrayList<L1Stock_Data> list = new ArrayList<L1Stock_Data>();

  L1Stock_Data sd =null;

  try{

   pstm = con

     .prepareStatement("SELECT * FROM stock_date where stock_player_id=? and stock_give=?");

   pstm.setInt(1, pc.getId());

   pstm.setBoolean(2, false);

   rs = pstm.executeQuery();

   while(rs.next()){

    sd = new L1Stock_Data();

    sd.setStock_count(rs.getInt("stock_count"));

    sd.setStock_date(rs.getString("stock_date"));

    sd.setStock_price(rs.getInt("stock_price"));

    list.add(sd);

   }

  } catch (SQLException e) {

   _log.log(Level.SEVERE, e.getLocalizedMessage(), e);

  } finally {

   SQLUtil.close(pstm);

   SQLUtil.close(con);

  }

  return list;

 

}

 

private void updategive(ArrayList<Integer> list){

  PreparedStatement pstm = null;

  try{

   pstm = con

     .prepareStatement("UPDATE stock_data SET stock_give=? where stock_no=?");

   for(int result : list){

   pstm.setBoolean(1, true);

   pstm.setInt(2, result);

   pstm.execute();

   }

  } catch (SQLException e) {

   _log.log(Level.SEVERE, e.getLocalizedMessage(), e);

  } finally {

   SQLUtil.close(pstm);

   SQLUtil.close(con);

  }

}

 

public void UpdateStock(L1Stock _stock){

  PreparedStatement pstm = null;

  Calendar cal = _stock.getDate();

  String date = String.valueOf(cal.get(Calendar.YEAR))+"-"

    +String.valueOf(cal.get(Calendar.MONTH))+"-"

    +String.valueOf(cal.get(Calendar.DATE))+"-"

    +String.valueOf(cal.get(Calendar.HOUR));

  try{

   pstm = con

     .prepareStatement("UPDATE stock SET stock_date=?, stock_price=? where stock_no=?");

   pstm.setString(1, date);

   pstm.setInt(2, _stock.getPrice());

   pstm.setInt(3, _stock.getNo());

 

 

 

   pstm.execute();

  } catch (SQLException e) {

   _log.log(Level.SEVERE, e.getLocalizedMessage(), e);

  } finally {

   SQLUtil.close(pstm);

   SQLUtil.close(con);

  }

}

 

public ArrayList<L1Stock> SelectStock(){

  PreparedStatement pstm = null;

  ResultSet rs = null;

  ArrayList<L1Stock> stocklist = new ArrayList<L1Stock>();

  L1Stock _stock = null;

  String date;

  String[] date1;

  Calendar cal;

 

  try {

   pstm = con

     .prepareStatement("SELECT * FROM stock");

 

   rs = pstm.executeQuery();

   while (rs.next()) {

    _stock = new L1Stock();

    cal = Calendar.getInstance();

    date = rs.getString("stock_date");

    date1 = date.split("-");

    cal.set(Calendar.YEAR, Integer.parseInt(date1[0]));

    cal.set(Calendar.MONTH, Integer.parseInt(date1[1]));

    cal.set(Calendar.DATE, Integer.parseInt(date1[2]));

    cal.set(Calendar.HOUR, Integer.parseInt(date1[3]));

    _stock.setNo(rs.getInt("stock_no"));

    _stock.setDate(cal);

    _stock.setPrice(rs.getInt("stock_price"));

    stocklist.add(_stock);

   }

 

  } catch (SQLException e) {

   _log.log(Level.SEVERE, e.getLocalizedMessage(), e);

  } finally {

   SQLUtil.close(rs);

   SQLUtil.close(pstm);

   SQLUtil.close(con);

  }

  return stocklist;

}

 

public L1Stock SelectStock(int stocknum){

  PreparedStatement pstm = null;

  ResultSet rs = null;

  L1Stock _stock = null;

  String date;

  String[] date1;

  Calendar cal;

 

  try {

   pstm = con

     .prepareStatement("SELECT * FROM stock where stock_no ="+stocknum);

 

   rs = pstm.executeQuery();

   while (rs.next()) {

    _stock = new L1Stock();

    cal = Calendar.getInstance();

    date = rs.getString("stock_date");

    date1 = date.split("-");

    cal.set(Calendar.YEAR, Integer.parseInt(date1[0]));

    cal.set(Calendar.MONTH, Integer.parseInt(date1[1]));

    cal.set(Calendar.DATE, Integer.parseInt(date1[2]));

    cal.set(Calendar.HOUR, Integer.parseInt(date1[3]));

    _stock.setNo(rs.getInt("stock_no"));

    _stock.setDate(cal);

    _stock.setPrice(rs.getInt("stock_price"));

   }

 

  } catch (SQLException e) {

   _log.log(Level.SEVERE, e.getLocalizedMessage(), e);

  } finally {

   SQLUtil.close(rs);

   SQLUtil.close(pstm);

   SQLUtil.close(con);

  }

  return _stock;

}

 

}

 

 

 

L1Stock_Data.java

 

 

public class L1Stock_Data {

private int stock_no = 0;

private String stock_date =null;

private int stock_player_id = 0;

private int stock_price = 0;

private int stock_count = 0;

private int stock_num = 0;

private boolean stock_give = false;

 

public int getStock_no() {

return stock_no;

}

public String getStock_date() {

return stock_date;

}

public int getStock_player_id() {

return stock_player_id;

}

public int getStock_price() {

return stock_price;

}

public int getStock_count() {

return stock_count;

}

public int getStock_num() {

return stock_num;

}

public boolean isStock_give() {

return stock_give;

}

public void setStock_no(int stock_no) {

this.stock_no = stock_no;

}

public void setStock_date(String stock_date) {

this.stock_date = stock_date;

}

public void setStock_player_id(int stock_player_id) {

this.stock_player_id = stock_player_id;

}

public void setStock_price(int stock_price) {

this.stock_price = stock_price;

}

public void setStock_count(int stock_count) {

this.stock_count = stock_count;

}

public void setStock_num(int stock_num) {

this.stock_num = stock_num;

}

public void setStock_give(boolean stock_give) {

this.stock_give = stock_give;

}

 

 

 

}

 

 

 

 

 

[출처] 간단한 주식시스템(테스트 X) (비공개 카페)

번호 제목 글쓴이 날짜 조회 수
공지 소스자료는 직접 올려주세요 게임존 2017.06.06 550
359 [에바] 3.80 옵코드 [1] 준희미니 2016.06.29 569
358 캐릭명 "메티스" 인 운영자캐릭 접속시 항상 메티스 변신 되게 하기 준희미니 2016.06.29 192
357 3.80 게렝 스킬부분 입니다 준희미니 2016.06.29 40
356 스핵 5회이상 감지시 좀비로 변신되게~ 준희미니 2016.06.29 65
355 서버 게시판 // 유저 게시판 나눠봅시다~! 준희미니 2016.06.29 82
354 운영자 명령어중 나비켓로드 개별 뭉치도록.(ex .리로드 아이템/.리로드 드랍)이런식 준희미니 2016.06.29 111
353 좌표버X(민쿡님 자료) 막는법이래용 준희미니 2016.06.29 73
352 오만의탑 이동 부적 Safe Zone 에서만 사용할수 있게~ 준희미니 2016.06.29 45
351 몬스터 피틱 and 엠틱 간단하게 쓰레드 최소화? 준희미니 2016.06.29 87
350 아이템 드랍 필드별제한 준희미니 2016.06.29 74
349 투명핵 관련으로.... 준희미니 2016.06.29 75
348 데미지핵 관련... 준희미니 2016.06.29 197
347 얼던 퀘 버그,얼녀 이어링 문제등등 코드 보시고 지적좀요 준희미니 2016.06.29 29
346 쑨님 보세요..[기르관련](재맘대로 해봤어요) 준희미니 2016.06.29 35
345 변신이벤트 외부화로 해봅시다~(2.7 Rev1484용) 준희미니 2016.06.29 118
344 데스나이트 포우? 펌 준희미니 2016.06.29 59
343 스냅퍼 용사/지혜 반지 준희미니 2016.06.29 70
342 투석기입니다용 준희미니 2016.06.29 28
341 혈맹버프 아이콘 패킷부분임 준희미니 2016.06.29 61
340 변신시 Alt+1~4주사위 나오도록 준희미니 2016.06.29 41
339 공성소스 정리 (수정 준희미니 2016.06.29 180
338 [에바팩강좌] ThreadPool System에 대해서 알아보자 준희미니 2016.06.29 153
» 간단한 주식시스템(테스트 X 준희미니 2016.06.29 69
336 성장의 마법사^에킨스 준희미니 2016.06.29 41
335 공성소스 최종수정판 테스트완료 준희미니 2016.06.29 143
334 에어리어 오브 사일런스 준희미니 2016.06.29 47
333 특정 지역 어택 못하게 준희미니 2016.06.29 54
332 요정 이레이즈 매직 소스 입니다 준희미니 2016.06.29 63
331 바포메트 지팡이 이럽쏴도 안튕기게 준희미니 2016.06.29 47
330 주유팩수정팩 공성시낑김 준희미니 2016.06.29 33
329 주유팩 창고 리셋 되는문제해결 준희미니 2016.06.29 26
328 서먼 공속 막는 야매 준희미니 2016.06.29 37
327 포그&어바%앱솔등 피빠질때 준희미니 2016.06.29 41
326 점팩버젼 인벤제작소스 준희미니 2016.06.29 56
325 한계정당 한번만 아덴주기 준희미니 2016.06.29 128
324 점팩용소스 피제한 준희미니 2016.06.29 28
323 요즘에 될지모르겟지만... 해보세요 ㅎ 준희미니 2016.06.29 122
322 인첸트 실패로 증발 할 경우 무게게이지 업데이트 하기 준희미니 2016.06.29 31
321 새로운 이동주문서 만들어보자 준희미니 2016.06.29 165
320 운영자 명령어 전체마법 [1] 준희미니 2016.06.29 158
319 텔레포트 요금 청구하기 준희미니 2016.06.29 56
318 배율 조절 GM 명령어로 바로 적용시키기 준희미니 2016.06.29 152
317 파란물약 구현하기 준희미니 2016.06.29 49
316 발라가 유저 엠흡 준희미니 2016.06.29 33
315 빛나는 벨트 제작 준희미니 2016.06.29 85
314 무게게이지 82% 가 되면 마법도 사용되지 않도록 하기 준희미니 2016.06.29 34
313 기사 마법투구 바운스어택 스킬나오게 준희미니 2016.06.29 52
312 선공몹 운영자 무시하기 준희미니 2016.06.29 50
311 군주 스킬 아이콘 만들기 준희미니 2016.06.29 100
310 덱방을 알아보자 준희미니 2016.06.29 45