public void buyItemFromUser(User buyer, User seller, Item currentItem) // PRE: buyer, seller, currentItem must be initialized // POST: Purchases item from the store and has stores it into inventory. { int buyer_balance; // The new balance of the buyer int seller_balance; // The new balance of the seller String str; // First query String str2; // Second query String str3; // Third query buyer_balance = buyer.getBalance() - currentItem.getPrice(); seller_balance = seller.getBalance() + currentItem.getPrice(); if (buyer_balance > 0) // If the buyer wont go negative { str = String.format( "Update users set balance = (%d) where user_name = '%s'", buyer_balance, buyer.getUserName()); str2 = String.format( "Update users set balance = (%d) where user_name = '%s'", seller_balance, seller.getUserName()); str3 = String.format( "Update items set owner_id = (%d) where item_name = '%s'", buyer.getUserId(), currentItem.getItemName()); updateTables(str, str2, str3); } else { // Prompt the user with an error JOptionPane.showMessageDialog( null, "You will go bankrupt if you try buying that, try selling some items."); } }
/** * Get a line item to put in the database * * @param id for the line item * @param warehouse for the station * @param Station station * @param Customer customer * @param Order order * @param ArrayList<Item> itemList * @return lineItem */ public LineItem getLineItem( int id, Warehouse warehouse, Station station, Customer customer, Order order, ArrayList<Item> itemList) { LineItem lineItem = new LineItem(); Item item = itemList.get(randInt(0, itemList.size())); int numOrdered = randInt(1, 5); if (item.getCurrentStock() < numOrdered) return null; lineItem.setLineItemID(id); lineItem.setOrderID(order.getOrderID()); lineItem.setItemID(item.getItemID()); lineItem.setCustomerID(customer.getCustomerID()); lineItem.setWarehouseID(warehouse.getWarehouseID()); lineItem.setStationID(station.getStationID()); lineItem.setNumOrdered(numOrdered); lineItem.setAmountDue(item.getPrice().multiply(new BigDecimal(lineItem.getNumOrdered()))); lineItem.setAmountDue( lineItem.getAmountDue().add(station.getSalesTax().multiply(lineItem.getAmountDue()))); lineItem.setAmountDue( lineItem.getAmountDue().subtract(customer.getDiscount().multiply(lineItem.getAmountDue()))); lineItem.setDateDelivered(randDate()); item.setNumLineItems(item.getNumLineItems() + 1); item.setNumSold(item.getNumSold() + lineItem.getNumOrdered()); // item.setCurrentStock(item.getCurrentStock() - lineItem.getNumOrdered()); don't modify stock // counts for random generation customer.setTotalPaid(customer.getTotalPaid().add(lineItem.getAmountDue())); station.setTotalSales(station.getTotalSales().add(lineItem.getAmountDue())); warehouse.setTotalSales(warehouse.getTotalSales().add(lineItem.getAmountDue())); return lineItem; }
@Override public void keyPressed(KeyEvent e) { int option; // The option the user selected. User buyer; // User object for buyer User seller; // User object for seller Item selected_item; // Item object for selected item if (help) // if in help mode { return; } switch (e.getKeyCode()) // handle event associated with key { case KeyEvent.VK_F1: // if f1 was pressed switchStore(0); break; case KeyEvent.VK_F2: // if f2 was pressed switchStore(1); break; case KeyEvent.VK_F3: // if f3 was pressed switchStore(2); break; case KeyEvent.VK_F4: // if f4 was pressed switchStore(3); break; case KeyEvent.VK_D: // if d or right was pressed case KeyEvent.VK_RIGHT: if (currentPage != totalPages - 1) // if we are not on the last page { currentPage++; itemSelected = -1; } break; case KeyEvent.VK_A: // if a or left was pressed case KeyEvent.VK_LEFT: if (currentPage != 0) // if we are not on the first page { currentPage--; itemSelected = -1; } break; case KeyEvent.VK_W: // if w or up was pressed case KeyEvent.VK_UP: if (itemSelected == -1) // if no items currently selected { itemSelected = 0; } else // if an item was selected { itemSelected--; if (itemSelected < 0) // loop if at beginning of list { itemSelected = ITEMSPERPAGE - 1; } } break; case KeyEvent.VK_S: // if s or down was pressed case KeyEvent.VK_DOWN: itemSelected++; if (itemSelected >= ITEMSPERPAGE) // if at end of list, loop around { itemSelected = 0; } break; case KeyEvent.VK_ENTER: // if enter was pressed if (itemSelected == -1) // if no item was selected { break; } selected_item = itemsArray[itemSelected]; option = JOptionPane.showConfirmDialog( this, ((!mode) ? "Buy " : "Sell ") + "for " + "$" + selected_item.getPrice() + "?"); if (option == 0 && mode) // if they choose to buy { buyer = usersArray[0]; switch (store) // change message based on value of store. { case 0: seller = usersArray[2]; break; case 1: seller = usersArray[1]; break; case 2: seller = usersArray[3]; break; case 3: seller = usersArray[4]; break; default: seller = usersArray[1]; } buyItemFromUser(buyer, seller, selected_item); } else if (option == 0 && mode) // if they choose to sell { seller = usersArray[0]; switch (store) // change message based on value of store. { case 0: buyer = usersArray[2]; break; case 1: buyer = usersArray[1]; break; case 2: buyer = usersArray[3]; break; case 3: buyer = usersArray[4]; break; default: buyer = usersArray[1]; } buyItemFromUser(buyer, seller, selected_item); } itemSelected = -1; break; default: return; } repaint(); }
@Override public void mousePressed(MouseEvent e) { CustomButton buttonPressed; // Button that was pressed. String buttonName; // The name of the button. int option; // Option chosen by user. User buyer; // User object for buyer User seller; // User object for seller Item selected_item; // Item object for selected item if (help) // if in help mode { help = false; repaint(); return; } wasItemSelected(e.getX(), e.getY()); buttonPressed = CustomButton.wasPressed(e.getX(), e.getY()); if (buttonPressed == null) // if no button was pressed { return; } buttonName = buttonPressed.getName(); playAudio(-1); switch (buttonName) // handle event associated with button name { case "rightTab": currentPage++; itemSelected = -1; break; case "leftTab": currentPage--; itemSelected = -1; break; case "buyTab": mode = false; break; case "sellTab": mode = true; break; case "button": selected_item = itemsArray[itemSelected]; option = JOptionPane.showConfirmDialog( this, ((!mode) ? "Buy " : "Sell ") + "for " + "$" + selected_item.getPrice() + "?"); if (option == 0 && (!mode)) // if they choose to buy { buyer = usersArray[0]; switch (store) // change message based on value of store. { case 0: seller = usersArray[2]; break; case 1: seller = usersArray[1]; break; case 2: seller = usersArray[3]; break; case 3: seller = usersArray[4]; break; default: seller = usersArray[1]; } buyItemFromUser(buyer, seller, selected_item); } else if (option == 0 && mode) // if they choose to sell { seller = usersArray[0]; switch (store) // change message based on value of store. { case 0: buyer = usersArray[2]; break; case 1: buyer = usersArray[1]; break; case 2: buyer = usersArray[3]; break; case 3: buyer = usersArray[4]; break; default: buyer = usersArray[1]; } buyItemFromUser(buyer, seller, selected_item); } itemSelected = -1; break; case "nextStore": if (++store == NUMSTORES) // if we're on the last store, loop around { store = 0; } switchStore(store); break; case "sort": // something orderToSort = JOptionPane.showOptionDialog( this, "Sort by:", "Sort", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, SORTOPTIONS, null); break; case "help": help = true; break; default: } repaint(); }
private void drawItem(Graphics g, int item, Item currentItem) { Font font; // The font to be used. int x1; // The first x coordinate of drawing area. int y1; // The first y coordinate of drawing area. int x2; // The second x coordinate of drawing area. int y2; // The second y coordinate of drawing area. int width; // Width of drawing area. int height; // Height of drawing area. int iconX; // x coordinate of the icon. int iconY; // y coordinate of the icon. int iconLength; // Length of the icon. int itemNameX; // The x coordinate of the item name. int itemNameLength; // The length of the item name. int itemPriceX; // The x coordinate of the item price. int itemPriceWidth; // The width of the item price. x1 = itemPositions[item][0].getScaledX(); x2 = itemPositions[item][1].getScaledX(); y1 = itemPositions[item][0].getScaledY(); y2 = itemPositions[item][1].getScaledY(); width = x2 - x1; height = y2 - y1; iconX = x1 + (int) (width * .01); iconY = y1 + (int) (height * .1); iconLength = (int) (height * .8); Drawing.drawImage(g, iconX, iconY, iconLength, iconLength, currentItem.getItemPath()); itemNameX = iconX + (int) (iconLength * 1.5); itemNameLength = (int) (width * 0.6); font = Drawing.getFont( currentItem.getItemName(), itemNameLength, (int) (iconLength * 0.8), FONTNAME, FONTSTYLE); g.setFont(font); g.setColor(Color.WHITE); g.drawString(currentItem.getItemName(), itemNameX, iconY + (int) (iconLength * 0.9)); itemPriceX = x1 + (int) (width * 0.8); itemPriceWidth = (int) (width * 0.15); font = Drawing.getFont( Integer.toString(currentItem.getPrice()), itemPriceWidth, iconLength, FONTNAME, FONTSTYLE); g.setFont(font); g.setColor(Color.WHITE); g.drawString( Integer.toString(currentItem.getPrice()), itemPriceX, iconY + (int) (iconLength * .9)); return; }