사이트 로그인
2016.06.29 10:36
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) (비공개 카페)