discountsgui.java

来自「ssd3 java编程 EXAM1 原样上传即可」· Java 代码 · 共 723 行 · 第 1/2 页

JAVA
723
字号
	
		initGUI();
	}
	
	/*
	 * Initialize the graphical user interface
	 */
	 private void initGUI() {
	 
		// Populate catalog and customer database
		for (Iterator i = store.getCatalog().getProductsIterator();
			i.hasNext();) {
			catalogListModel.addElement(
				Integer.toString(((Product) i.next()).getCode()));
		}
		for (Iterator i = store.getCustomerDatabase().getCustomersIterator();
			i.hasNext();) {
			customerDatabaseListModel.addElement(
				Integer.toString(((Customer) i.next()).getNumber()));
		}
	 
	 	// set current order values
	 	currentOrder = new DiscountOrder(
	 		CURRENT_ORDER_CUSTOMER,
	 		CURRENT_ORDER_DATE,
	 		DefaultDiscountStrategy.getSingletonInstance());
	 	
		yearTextField.setText(Integer.toString(CURRENT_ORDER_DATE.getYear()));
		monthTextField .setText(Integer.toString(CURRENT_ORDER_DATE.getMonth()));
		dayTextField.setText(Integer.toString(CURRENT_ORDER_DATE.getDay()));
		
		totalTextField.setText(
			dollarFormatter.format(
					currentOrder.getTotalCostAfterDiscount()));
			 
	 	defaultDiscountButton.setSelected(true);
	 	selectedProductsDiscountButton.setEnabled(false);
	 }

	/**
	 * This inner class processes <code>addButton</code> events.
	 */
	class AddListener implements ActionListener {

		/**
		 * Adds an order item to the current order.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {

			int quantity;
			String code = (String) catalogList.getSelectedValue();

			try {
				quantity = Integer.parseInt(quantityTextField.getText());
			} catch (NumberFormatException nfe) {
				statusTextArea.setText("Please enter an integer.");

				return;
			}
			if (quantity < 1) {
				statusTextArea.setText("Please enter a positive integer.");
			} else if (code == null) {
				statusTextArea.setText(
						"Please select a product code from the catalog list.");
			} else {

				Product product =
					store.getCatalog().getProduct(Integer.parseInt(code));
				OrderItem item = new OrderItem(product, quantity);
				
				currentOrder.addOrderItem(item);
				orderItemsListModel.addElement(item);
				statusTextArea.setText("The product has been added.");
				totalTextField.setText(dollarFormatter.format(
					currentOrder.getTotalCostAfterDiscount()));
				quantityTextField.setText("");
			}
		}
	}
	
	/**
	 * This inner class processes <code>deleteAllItemsButton</code>
	 * events.
	 */
	class DeleteAllItemsListener implements ActionListener {

		/**
		 * Delete all the items in the current order.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {
			
			currentOrder = new DiscountOrder(
	 			CURRENT_ORDER_CUSTOMER,
	 			CURRENT_ORDER_DATE,
	 			currentOrder.getDiscountStrategy());
			orderItemsListModel.clear();
			totalTextField.setText(dollarFormatter.format(0.0));
		}
	}

	/**
	 * This inner class processes <code>loadProductsWithDiscountListener</code>
	 * events.
	 */
	class LoadProductsWithDiscountListener implements ActionListener {

		/**
		 * Loads the selected products with a discount from a file.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {

			String fileName = fileNameTextField.getText();

			try {
				selectedProductsDiscountStrategy = 
						new SelectedProductsDiscountStrategy(
							new ProductsCollection(
								fileName,
								store.getCatalog()));
			
				statusTextArea.setText("The file " + fileName +
						" has been loaded");
				selectedProductsDiscountButton.setEnabled(true);
				
				return;
				
			} catch (FileNotFoundException fnfe) {
				statusTextArea.setText("The file does not exist." + NEW_LINE +
					"The selected products with discount has not been loaded.");	
			} catch (IOException ioe) {
				statusTextArea.setText("Error reading from the file" +
					NEW_LINE + 
					"The selected products with discount has not been loaded.");
				
			} catch (DataFormatException dfe) {
				statusTextArea.setText("Incorrect data in file." + NEW_LINE +
					"The selected products with discount has not been loaded.");
			}
			
			selectedProductsDiscountStrategy = null;
			selectedProductsDiscountButton.setEnabled(false);
		}
	}

	/**
	 * This inner class processes <code>registerSaleButton</code> button events.
	 */
	class RegisterSaleListener implements ActionListener {

		/**
		 * Registers the sale of the current order.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {

			if (currentOrder.getNumberOfOrderItems() == 0) {
				statusTextArea.setText("The order is empty.");
			} else {
				
				Customer customer;
				
				String selectedCustomer =
					(String) customerDatabaseList.getSelectedValue();
			
				if (selectedCustomer == null) {
					statusTextArea.setText(
							"Please select a customer number.");

						return;
				} else {
					try {
						customer = store.getCustomerDatabase().getCustomer(
							Integer.parseInt(selectedCustomer));
						
						if (customer == null) {
							statusTextArea.setText(
								"The customer does not exist in the database.");
						
							return;
						}
					} catch (NumberFormatException nfe) {
						statusTextArea.setText(
							"Invalid customer number.");

						return;
					}
				}
				
				int year;
				int month;
				int day;

				try {
					month = Integer.parseInt(monthTextField.getText());
					if (month < 1 || month > 12) {
						statusTextArea.setText(
							"Invalid month. Please enter an integer between 1 and 12.");

						return;
					}
				} catch (NumberFormatException nfe) {
					statusTextArea.setText(
						"Invalid month. Please enter an integer.");

					return;
				}
				try {
					day = Integer.parseInt(dayTextField.getText());
					if (day < 1 || day > 31) {
						statusTextArea.setText(
							"Invalid day. Please enter an integer between 1 and 31.");

						return;
					}
				} catch (NumberFormatException nfe) {
					statusTextArea.setText(
						"Invalid day. Please enter an integer.");

					return;
				}
				try {
					year = Integer.parseInt(yearTextField.getText());
					if (year < 0) {
						statusTextArea.setText(
							"Invalid year. Please enter a positive  integer.");

						return;
					}
				} catch (NumberFormatException nfe) {
					statusTextArea.setText(
						"Invalid year. Please enter an integer.");

					return;
				}
				
				DiscountOrder order = new DiscountOrder(
					customer,
					new Date(year, month, day),
					currentOrder.getDiscountStrategy());
			
				for (Iterator i = currentOrder.getOrderItemsIterator();
					 i.hasNext();) { 
					order.addOrderItem((OrderItem) i.next());
				} 	
				store.getSales().addOrder(order);
				numberOfOrdersTextField.setText(
					Integer.toString(store.getSales().getNumberOfOrders()));
				statusTextArea.setText("The sale has been registered.");
				currentOrder = new DiscountOrder(
	 				CURRENT_ORDER_CUSTOMER,
	 				CURRENT_ORDER_DATE,
	 				currentOrder.getDiscountStrategy());
				orderItemsListModel.clear();
				totalTextField.setText(dollarFormatter.format(0.0));
			}
		}
	}

	/**
	 * This inner class processes <code>displaySalesButton</code>events.
	 */
	class DisplaySalesListener implements ActionListener {

		/**
		 * Displays the sales information.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {

			if (store.getSales().getNumberOfOrders() == 0) {
				statusTextArea.setText("No orders have been sold.");
			} else {
				statusTextArea.setText(formatSales(store.getSales()));
			}
		}
	}
	
	/**
	 * This inner class processes <code>defaultDiscountButton</code>events.
	 */
	class DefaultDiscountListener implements ActionListener {

		/**
		 * Set the discount to apply to the current order.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {
			
			currentOrder.setDiscountStrategy(
				DefaultDiscountStrategy.getSingletonInstance());	
			totalTextField.setText(dollarFormatter.format(
				currentOrder.getTotalCostAfterDiscount()));
		}
	}
	
	/**
	 * This inner class processes <code>allProductsDiscountButton</code> events.
	 */
	class AllProductsDiscountListener implements ActionListener {

		/**
		 * Sets the discount to apply to the current order.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {
			
			currentOrder.setDiscountStrategy(
				AllProductsDiscountStrategy.getSingletonInstance());
			totalTextField.setText(dollarFormatter.format(
				currentOrder.getTotalCostAfterDiscount()));
		}
	}
	
	/**
	 * This inner class processes <code>selectedProductsDiscountButton</code>
	 * events.
	 */
	class SelectedProductsDiscountListener implements ActionListener {

		/**
		 * Sets the discount to apply to the current order.
		 *
		 * @param event  the event object.
		 */
		public void actionPerformed(ActionEvent event) {

			currentOrder.setDiscountStrategy(selectedProductsDiscountStrategy);
			totalTextField.setText(dollarFormatter.format(
				currentOrder.getTotalCostAfterDiscount()));
		}
	}
	
	/**
	 * Obtains a plain text representation of the specified sales information.
	 *
	 * @param sales  the {@link Sales} object.
	 * @return  a plain text representation of the specified
	 *          {@link Sales} object.
	 */
	static private String formatSales(Sales sales) {

		String out = "";

		for (Iterator i = sales.getOrdersIterator(); i.hasNext();) {

			out += ((Order) i.next()).toString() + NEW_LINE;
		}

		return out;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?