마지막 튜터링 2일은 온라인 슈퍼마켓을 만들었다.
Mysql에 저장되어 있는 슈퍼마켓의 제품 이름, 유통기한, 제품 종류 , 제품 개수 , 할인율의 데이터를 가져와서 손님과 직원의 입장에서 사용할 수 있게끔 구성했다.
그리고 직원이 사용하는 메뉴에 들어가기 위해서는 아이디와 비밀번호가 필요한데 아이디와 비밀번호를 파일에 저장하여 입력한 값과 같으면 사용할 수 있도록 했다.
짧은 시간에 만들기도 했고 거대한(?) 프로젝트는 처음 구현해 봐서 여러 개의 파일로는 나누지 못했다..
그래서 한 파일에 구현했고 static을 사용해서 한 개의 클래스 내부에서 작성되었다.
프로그램이 종료되는 시점은 고객이 물건 계산을 완료하면 종료되게끔 구현했다.
참고) My sql을 처음 사용해서 데이터를 가져오는 것을 멘토분의 도움으로 구성해보았지만 sql table에 추가하거나 삭 제하는 방법을 몰라서 구현하지 못했다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;
import java.util.Vector;
public class Project1 {
static StringBuffer sb = new StringBuffer();
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static Vector<Information> info = new Vector<Information>(); // 제품정보저장
static Vector<Bucket> buck = new Vector<Bucket>();
static class Information { // 제품 정보
private String product; // 제품이름
private int price; // 제품가격
private String date; // 유통기한
private String product_option; // 제품종류
private int discount; // 할인률
private int product_Num; // 제품 개수
Information(String product, int price, String date, String product_option, int discount, int product_Num) {
this.product = product;
this.price = price;
this.date = date;
this.product_option = product_option;
this.discount = discount;
this.product_Num = product_Num;
}
public void input_Product_Num(int num) {
this.product_Num += num;
}
public String return_product() {
return product;
}
public int return_price() {
return price;
}
public String return_date() {
return date;
}
public String return_product_option() {
return product_option;
}
public int return_discount() {
return discount;
}
public int return_product_Num() {
return product_Num;
}
public void print_information() {
System.out.print(product + "\t");
System.out.print(price + "\t");
System.out.print(date + "\t");
System.out.print(product_option + "\t");
System.out.print(discount+"%" + "\t");
System.out.println(product_Num);
}
}
static class Worker { // 알바생 전용
private static int Income; // 총매출
public void Over_date() { // 유통기한 지난 목록 출력후 삭제
// 유통기한들이 지났는지 반복문을 통해 Information 배열을 확인해야한다.
Calendar now_date = Calendar.getInstance(); // 시스템상 시간 가져옴
int year = now_date.get(Calendar.YEAR); // 시스템상 연도
int month = now_date.get(Calendar.MONTH) + 1; // 시스템상 월
int day = now_date.get(Calendar.DAY_OF_MONTH); // 시스템상 일
for (int i = 0; i < info.size(); i++) {
StringTokenizer st = new StringTokenizer(info.get(i).return_date(), "-");
int product_Year = Integer.parseInt(st.nextToken());
int product_Month = Integer.parseInt(st.nextToken());
int product_Day = Integer.parseInt(st.nextToken());
if (year > product_Year) {
info.remove(i);
i--;
} else if (year == product_Year) {
if (month > product_Month) {
info.remove(i);
i--;
} else if (month == product_Month) {
if (day > product_Day) {
info.remove(i);
i--;
}
}
}
}
for (int i = 0; i < info.size(); i++) {
info.get(i).print_information();
}
}
public void left_product() { // 제고가 남아 있는지 확인 (10개 미만인경우 제품 추가)
for (int i = 0; i < info.size(); i++) {
if (info.get(i).return_product_Num() < 10) {
info.get(i).input_Product_Num(100); // 제고 100개 추가
}
}
for (int i = 0; i < info.size(); i++) {
info.get(i).print_information();
}
}
public static void input_Total_Money(int money) {
Income += money;
}
public static void print_Total_Money() throws IOException {
bw.write(Income);
bw.flush();
} // 매출
}
static class Bucket { // 장바구니
String product;
int price;
int product_count;
int discount;
Bucket(String product, int price, int product_count, int discount) {
this.product = product;
this.price = price;
this.product_count = product_count;
this.discount = discount;
}
public void print_Bucket() throws IOException {
bw.write(this.product + "\t" + this.price + "\t" + this.product_count + "\t" + this.discount+"%" + "\n");
bw.flush();
}
public String return_Product() {
return this.product;
}
}
static class Customer { // 손님
public void print_product_option() throws IOException { // 제품종류 입력시 제품종류 출력
bw.write("원하는 제품종류를 입력하세요 >>");
bw.flush();
String need = br.readLine(); // 제품 종류
boolean flag = false;
// 제품 종류와 비교하여 존재하면 출력 없는 경우 제품 다 떨어졌다고 출력
for (int i = 0; i < info.size(); i++) {
if (need.equals(info.get(i).return_product_option())) {
info.get(i).print_information();
flag = true;
}
}
if (flag == false) {
bw.write("다 떨어졌습니다.\n");
bw.flush();
}
// 재품이 존재하는 경우 실행
do {
bw.write("제품을 장바구니에 담으시겠습니까? >> (y,n)");
bw.flush();
char choose = br.readLine().charAt(0);
if ((choose == 'y') || (choose == 'Y')) {
bw.write("원하는 제품의 이름과 개수를 입력하세요.\n");
bw.write("제품 이름 >>");
bw.flush();
String need_product = br.readLine();// 출력된 제품 종류중에 필요한 제품 선택
bw.write("제품 개수 >>");
bw.flush();
int product_count = Integer.parseInt(br.readLine()); // 선택된 제품중 필요한 제품 개수 입력
// 장바구니에 담기
for (int i = 0; i < info.size(); i++) {
if (need.equals(info.get(i).return_product())) {
if (product_count < info.get(i).return_product_Num()) {
bw.write("제품이 없습니다. ㅎㅎㅎㅎ\n");
bw.flush();
return;
}
}
}
int price = 0;
int discount =0;
for (int i = 0; i < info.size(); i++)
if (need_product.equals(info.get(i).return_product())) {
price = info.get(i).return_price();
discount = info.get(i).return_discount();
}
buck.add(new Bucket(need_product, price, product_count,discount));
} else if ((choose == 'n') || (choose == 'N')) {
return;
} else {
bw.write("잘못 입력하셨습니다\n");
bw.write("다시 입력하세요.\n");
bw.flush();
}
} while (true);
}
public void print_product() throws IOException { // 제품이름 검색시 해당제춤정보 출력
bw.write("어떤 제품의 정보를 원하십니까? >>");
bw.flush();
String need = br.readLine(); // 제품 이름
boolean flag = false;
// 제품 이름과 비교하여 있으면 출력
for (int i = 0; i < info.size(); i++) {
if (need.equals(info.get(i).return_product())) {
info.get(i).print_information();
flag = true;
}
}
if (flag == false) {
bw.write("다 떨어졌습니다.\n");
bw.flush();
}
// (제품이름 , 가격 , 개수) 장바구니에 담기
while (true) {
bw.write("제품을 장바구니에 담으시겠습니까? >> (y,n)");
bw.flush();
char choose = br.readLine().charAt(0);
if ((choose == 'y') || (choose == 'Y')) {
bw.write("몇개 구입하시겠습니까? >>");
bw.flush();
int product_Count = Integer.parseInt(br.readLine());
int over_count = 0;
for (int i = 0; i < info.size(); i++) {
if (need.equals(info.get(i).return_product())) {
over_count = i;
}
}
if (product_Count > info.get(over_count).return_product_Num()) {
bw.write("제품이 없습니다. ㅎㅎㅎㅎ\n");
bw.flush();
break;
} else {
// 장바구니에 담기
int price = 0;
int discount=0;
for (int i = 0; i < info.size(); i++)
if (need.equals(info.get(i).return_product())) {
price = info.get(i).return_price();
discount = info.get(i).return_discount();
}
buck.add(new Bucket(need, price, product_Count,discount));
break;
}
} else if ((choose == 'n') || (choose == 'N')) {
return;
} else {
bw.write("잘못 입력하셨습니다\n");
bw.write("다시 입력하세요.\n");
bw.flush();
}
}
}
public void print_discount() throws IOException { // 할인률 큰순서 출력
Collections.sort(info, new Comparator() {
public int compare(Object o1, Object o2) {
Information info1 = (Information) o1;
Information info2 = (Information) o2;
return info2.discount - info1.discount;
}
});
for (int i = 0; i < info.size(); i++) {
info.get(i).print_information();
;
}
}
public void show_bucket() throws IOException { // 장바구니 목록
for (int i = 0; i < buck.size(); i++) {
buck.get(i).print_Bucket();
}
while (true) {
bw.write("1.장바구니 수정 2.계산하기 3.장바구니 나가기>> ");
bw.flush();
int select = Integer.parseInt(br.readLine());
switch (select) {
case 1:
insert_Bucket();
break;
case 2:
Calculate();
System.exit(0);
case 3:
return;
default:
bw.write("잘못입력하셨습니다.\n");
bw.flush();
}
}
}
public void insert_Bucket() throws IOException {
while (true) {
bw.write("1. 개수 추가 2. 개수 취소 3. 삭제 4. 나가기");
bw.flush();
int choose = Integer.parseInt(br.readLine());
if (choose == 4)
break;
bw.write("어떤 제품을 고르시겠습니까? >>");
bw.flush();
String product = br.readLine();
int count = 0;
switch (choose) {
case 1:
bw.write("몇개를 추가하시겠습니까? >>");
bw.flush();
count = Integer.parseInt(br.readLine());
for (int i = 0; i < buck.size(); i++) {
if (product.equals(buck.get(i).product)) {
buck.get(i).product_count += count;
}
}
break;
case 2:
bw.write("몇개를 취소하시겠습니까? >>");
bw.flush();
count = Integer.parseInt(br.readLine());
for (int i = 0; i < buck.size(); i++) {
if (product.equals(buck.get(i).product)) {
buck.get(i).product_count -= count;
}
}
break;
case 3:
for (int i = 0; i < buck.size(); i++) {
if (product.equals(buck.get(i).product)) {
buck.get(i).product_count = 0;
}
}
break;
default:
bw.write("잘못입력하셨습니다.\n");
bw.flush();
}
}
}
public void Calculate() throws IOException {
do {
bw.write("계산하시겠습니까?(y,n) >> ");
bw.flush();
char choose = br.readLine().charAt(0);
if ((choose == 'y') || (choose == 'Y')) {
// 결제 시스템
int product_Total_Money = 0;
for (int i = 0; i < buck.size(); i++) { // 장바구니에 있는 모든 제품의 가격 합하기
product_Total_Money += (buck.get(i).price *
buck.get(i).product_count*
(1-((double)buck.get(i).discount/100)));
}
Worker.input_Total_Money(product_Total_Money);
while (true) {
bw.write("1.현금 2.카드 3.뒤로가기");
bw.flush();
int select = Integer.parseInt(br.readLine());
if (select == 3)
break;
switch (select) {
case 1:
Money_Cal(product_Total_Money);
return;
case 2:
Card_Cal(product_Total_Money);
return;
default:
bw.write("잘못 입력하셨습니다\n");
bw.write("다시 입력하세요.\n");
bw.flush();
}
}
} else if ((choose == 'n') || (choose == 'N')) {
return;
} else {
bw.write("잘못 입력하셨습니다\n");
bw.write("다시 입력하세요.\n");
bw.flush();
}
} while (true);
}
public void Money_Cal(int product_Total_Money) throws IOException {
while (true) {
bw.write("얼마를 지불하시겠습니까? >>");
bw.flush();
int customer_Price = Integer.parseInt(br.readLine());
if (customer_Price < product_Total_Money) {
bw.write("금액이 부족합니다.\n");
bw.flush();
} else {
int pay = customer_Price - product_Total_Money;
int money_50000 = 0;
int money_10000 = 0;
int money_5000 = 0;
int money_1000 = 0;
int money_500 = 0;
int money_100 = 0;
int money_50 = 0;
int money_10 = 0;
bw.write(pay + "\n");
bw.flush();
money_50000 = pay / 50000;
money_10000 = pay % 50000 / 10000;
money_5000 = pay % 50000 % 10000 / 5000;
money_1000 = pay % 50000 % 10000 % 5000 / 1000;
money_500 = pay % 50000 % 10000 % 5000 % 1000 / 500;
money_100 = pay % 50000 % 10000 % 5000 % 1000 % 500 / 100;
money_50 = pay % 50000 % 10000 % 5000 % 1000 % 500 % 100 / 50;
money_10 = pay % 50000 % 10000 % 5000 % 1000 % 500 % 100 % 50;
bw.write("5만원권 : " + money_50000 + ", 1만원권 : " + money_10000 + ", 5천원권 : " + money_5000 + "\n");
bw.write("1천원권 : " + money_1000 + ", 500원 : " + money_500 + ", 100원 : " + money_100 + "\n");
bw.write("50원 : " + money_50 + ", 10원 : " + money_10 + "\n");
bw.flush();
break;
}
}
}
public void Card_Cal(int product_Total_Money) throws IOException {
bw.write(product_Total_Money + "원을 결제하였습니다 :)\n");
bw.flush();
}
}
static boolean Check_Worker() throws IOException { // 알바생인지 확인하는 메소드
// 알바생 저장된 정보 불러오기
File work = new File("C:\\Users\\H_J\\Desktop\\대학\\2-2\\자바 튜터링\\src\\Project_Store\\Worker_code.txt");
String id = null; // //파일에 저장된 알바생 이름
String password = null; // 파일에 저장된 알바생 비밀번호
try {
FileReader fr = new FileReader(work); // 파일 읽기
int c;
while ((c = fr.read()) != -1)
sb.append((char) c); // 파일 읽어서 stringbuffer에 한글자씩 저장
StringTokenizer st = new StringTokenizer(sb.toString());
// stringbuffer에 저장된 글자를 줄 개행 지준으로 구분
id = st.nextToken(); // 알바생 이름
password = st.nextToken(); // 알바생 비밀번호
sb.setLength(0); // stringbuffer의 크기를 줄여 강제적으로 초기화
fr.close(); // 알바생 정보 저장된 파일 닫기
} catch (IOException e) {
System.out.println(
"C:\\Users\\H_J\\Desktop\\대학\\2-2\\자바 튜터링\\src\\Project_Store\\Worker_code.txt를 읽을수 없습니다.");
}
bw.write("id >>");
bw.flush();
String input_id = br.readLine(); // 입력할 알바생이름
bw.write("password >>");
bw.flush();
String input_password = br.readLine(); // 입력할 알바생 비밀번호
bw.flush();
if (id.equals(input_id) && password.equals(input_password)) { // 입력한 알바생 정보가 알바생인 경우
return true;
} else { // 알바생과 정보가 일치하지 않는 경우
bw.write("입력한 정보가 정확하기 않습니다.\n");
bw.flush();
return false;
}
}
static void Worker_Memu() throws IOException { // 알바생 정보를 입력하는 메소드
if (Check_Worker()) {
// 알바생 전용 class 실행
while (true) {
bw.write("알바생 전용 메뉴입니다\n");
bw.write("1.유통기한 2.제품수량 3.매출량 4.알바생메뉴종료 >>");
bw.flush();
int Options = Integer.parseInt(br.readLine()); // 알바생 전용 메뉴 선택
Worker wk = new Worker(); // 클래스 선언
if (Options == 4)
break;
switch (Options) {
case 1:
wk.Over_date();
break;
// 유통기한 지났는지
case 2:
wk.left_product();
// 제품 개수
break;
case 3:
wk.print_Total_Money();
break;
default:
bw.write("입력오류\n");
bw.flush();
break;
}
}
} else {
return;
}
}
static void Customer_Memu() throws IOException {
while (true) {
bw.write("손님전용 메뉴입니다\n");
bw.write("원하는 메뉴를 선택해주세요\n");
bw.write("1.제품종류 2.제품이름 3.오늘의 할인 4.장바구니 >> ");
bw.flush();
int choose = Integer.parseInt(br.readLine());
Customer ct = new Customer();
switch (choose) {
case 1:
ct.print_product_option();
break;
case 2:
ct.print_product();
break;
case 3:
ct.print_discount();
break;
case 4:
ct.show_bucket();
break;
default:
bw.write("잘못입력하셨습니다\n");
bw.write("다시 입력하세요\n");
bw.flush();
break;
}
}
}
public static void printData(ResultSet srs, String[] cols) throws SQLException {
while (srs.next()) {
String product = ""; // 제품이름
int price = 0; // 제품가격
String date = ""; // 유통기한
String product_option = ""; // 제품종류
int discount = 0; // 할인률
int product_Num = 0; // 제품 개수
for (int i = 0; i < cols.length; i++) {
if (cols[i].equals("제품")) {
product = srs.getString(cols[i]);
}
if (cols[i].equals("가격")) {
price = Integer.parseInt(srs.getString(cols[i]));
}
if (cols[i].equals("유통기한")) {
date = srs.getString(cols[i]);
}
if (cols[i].equals("제품종류")) {
product_option = srs.getString(cols[i]);
}
if (cols[i].equals("할인(%)")) {
discount = srs.getInt(cols[i]);
}
if (cols[i].equals("제품 개수")) {
product_Num = srs.getInt(cols[i]);
}
}
info.add(new Information(product, price, date, product_option, discount, product_Num));
}
}
public static void main(String[] args) throws IOException {
try {
Connection conn = DriverManager.getConnection(
"jdbc:mysql://db-java-study.cm3rcbp5wyir.ap-northeast-2.rds.amazonaws.com:3306/simulationDBs",
"wjdghwls", "1234");
Statement stmt = conn.createStatement();
ResultSet srs = stmt.executeQuery("Select * from HoJin_table");
String cols[] = { "id", "제품", "가격", "유통기한", "제품종류", "할인(%)", "제품 개수" };
printData(srs, cols);
} catch (SQLException e) {
e.printStackTrace();
}
// 출력
while (true) { // 24시간 운영
bw.write("1. 알바생 2.손님 >>");
bw.flush();
int choose = Integer.parseInt(br.readLine());
switch (choose) { // 알바생,손님의 따라 다르게 작동
case 1: // 알바생
Worker_Memu();
break;
case 2: // 손님
Customer_Memu();
break;
default:
bw.write("잘못 입력했습니다.\n");
bw.flush();
}
}
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 튜터링 11일차!(2021-08-09) (0) | 2021.08.11 |
---|---|
[JAVA] 튜터링 10일차! (2021-08-04) (0) | 2021.08.06 |
[JAVA] 튜터링 9일차!(2021-08-02) (0) | 2021.08.03 |
[JAVA] 튜터링 8일차!!(2021-07-30) (0) | 2021.08.03 |
[JAVA] 공부 7일차! (2021-07-28) (0) | 2021.07.29 |