By GokiSoft.com| 15:06 05/10/2022|
Java Basic

Quản lý bể bơi bằng Java - Swimming Pool in Java

Xây dựng hệ thống phần mềm quản lý bể bơi ở HN. Yêu cầu nghiệp vụ như sau

- Thiết kế lớp ticket gồm các thuộc tính sau : Mã vé (Sinh tự đồng gồm các ký tự a-zA-Z0-9 có độ dài là 6 ký tự), Họ tên khách hàng, địa chỉ, ngày dăng ký, ngày kết thúc và hình ảnh khách hàng (lưu là URL), giá tiền => TH sử dụng vé tháng

- Thiết kế lớp DailyTicket quản lý vé ngày gồm các thông tin : mã vé (sinh tự động như mục trên), ngày mua, mã khung giờ

- Tạo lớp quản lý khung giờ : gồm các thuộc tính giờ bắt đầu, giờ kết thúc, mã khung giờ (sinh tự động gồm 2 ký tự 0-9), giá tiền với vé ngày.

- Tạo lớp quản lý quá trình sử dụng bể bơi : mã vé, mã khung giờ, thời gian vào.

- Tạo lớp SwimmingPool chứa thông tin : mã bể bơi, địa chỉ, danh sách vé tháng, ngày, khung giờ, booking.

Yêu cầu:

- Thiết kế lớp đối tượng trên, tạo getter/setter và hàm tạo ko đối, hàm nhập, hiển thị

- Thực hiện menu chương trình sau

Tảo mảng SwimmingPool quản lý danh sách bể bơi ở HN.

1. Nhập thông tin quản lý bể bơi

2. Mua vé tháng

3. Vào bể bơi. TH khách ko có vé thì tạo vé ngày cho khách

4. Thống kê số tiền thu được theo 1 khung giờ nhập vào với vé ngày

5. Thống kê doanh thu 1 tháng bất kỳ.

6. Thoát chương trình

Chú ý: Mã vé là duy nhất, m mã khung giờ là duy nhất 

Phản hồi từ học viên

5

(Dựa trên đánh giá ngày hôm nay)

Nguyễn Hoàng Anh [C1907L]
Nguyễn Hoàng Anh

2020-04-22 06:24:25



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Redmibook 14
 */
public class Booking {

    String ticketCode, durationCode;
    Date checkInTime;

    public String getTicketCode() {
        return ticketCode;
    }

    public String getDurationCode() {
        return durationCode;
    }

    public Date getCheckInTime() {
        return checkInTime;
    }

    public void setTicketCode(String ticketCode) {
        this.ticketCode = ticketCode;
    }

    public void setDurationCode(String durationCode) {
        this.durationCode = durationCode;
    }

    public void setCheckInTime(Date checkInTime) {
        this.checkInTime = checkInTime;
    }

    public Booking(String ticketCode, String durationCode, Date checkInTime) {
        this.ticketCode = ticketCode;
        this.durationCode = durationCode;
        this.checkInTime = checkInTime;
    }

    public Booking() {
    }

    public void input() {
        Scanner scan = new Scanner(System.in);

        System.out.println("Ticket");
        System.out.println("1. Monthly ticket");
        System.out.println("2. Daily ticket");
        System.out.println("Choose: ");
        int choose = Integer.parseInt(scan.nextLine());

        switch (choose) {
            case 1:
                System.out.println("Enter swimming pool code: ");
                List<MonthTicket> Dlist = new ArrayList<>();
                for (int i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
                    System.out.println(DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode());
                }
                String code = scan.nextLine();
                int i;
                for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
                    if (DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode().equals(code)) {
                        Dlist = DataMgr.getInstance().getSwimmingPool().get(i).arrMonthTicket;
                        break;
                    }

                }
                if (i == DataMgr.getInstance().getSwimmingPool().size()) {
                    System.out.println("Wrong code!");
                    return;
                } else {
                    System.out.println("Enter ticket code: ");
                    ticketCode = scan.nextLine();
                    for (i = 0; i < Dlist.size(); i++) {
                        if (ticketCode.equals(Dlist.get(i).TicketCode)) {
                            System.out.println("Code is available !");
                            break;
                        }
                    }
                    if (i == DataMgr.getInstance().getSwimmingPool().size()) {
                        System.out.println("Wrong code!");
                        return;
                    }
                }

                break;

            default:
                SwimmingPool sm = new SwimmingPool();
                DailyTicket dailyTicket = new DailyTicket();
                dailyTicket.input();

                durationCode = dailyTicket.durationCode;
                checkInTime = new Date();
                Booking booking;
                for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
                    if (DataMgr.getInstance().getSwimmingPool().get(i).poolCode.equals(dailyTicket.getPoolCode())) {
                        booking = new Booking(ticketCode, durationCode, checkInTime);
                        DataMgr.getInstance().getSwimmingPool().get(i).getArrBooking().add(booking);
                    }
                }
                break;
        }

        //Display all duration times => Choose from them.
    }
}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import static jdk.nashorn.tools.ShellFunctions.input;

/**
 *
 * @author Redmibook 14
 */
public class DailyTicket extends Ticket {

    String durationCode;
    String PoolCode;

    public DailyTicket(String durationCode, String TicketCode, Date ApplyDate) {
        super(TicketCode, ApplyDate);
        this.durationCode = durationCode;

    }

    public DailyTicket(String durationCode) {
        this.durationCode = durationCode;
    }

    public DailyTicket() {
    }

    @Override
    public void input() {

        DailyTicket dailyTicket;
        int i;
        Scanner input = new Scanner(System.in);
        List<DurationTime> arrDur = new ArrayList<>();
        List<DailyTicket> arrTic = new ArrayList<>();
        System.out.println("Choose swimming pool(code) : ");
        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            System.out.println(PoolCode = DataMgr.getInstance().getSwimmingPool().get(i).poolCode);
        }
        String sC = input.nextLine();
        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            if (DataMgr.getInstance().getSwimmingPool().get(i).poolCode.equals(sC)) {
                arrDur = DataMgr.getInstance().getSwimmingPool().get(i).getArrDurationTime();
                arrTic = DataMgr.getInstance().getSwimmingPool().get(i).getArrDailyTicket();
                break;
            }
        }
        if (i == DataMgr.getInstance().getSwimmingPool().size()) {
            System.out.println("Wrong code !");
            return;
        }
        super.input();

        System.out.println("Enter duration code : ");
        for (i = 0; i < arrDur.size(); i++) {
            System.out.println(arrDur.get(i).durationCode + "(code) : From " + arrDur.get(i).fromTime + " to " + arrDur.get(i).toTime + " time ");
        }
        String code = input.nextLine();
        for (i = 0; i < arrDur.size(); i++) {
            if (arrDur.get(i).durationCode.equals(code)) {
                dailyTicket = new DailyTicket(durationCode, TicketCode, ApplyDate);
                arrTic.add(dailyTicket);
                break;
            }
        }
        if (i == arrTic.size()) {
            System.out.println("Wrong code !");
        }

    }

    public String getPoolCode() {
        return PoolCode;
    }

}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Redmibook 14
 */
public class DataMgr {
    private static DataMgr instance = null;
    List<SwimmingPool> swimmingPool;
    private DataMgr(){
    swimmingPool = new ArrayList<>();
    }
    public static DataMgr getInstance(){
        if(instance == null){
            instance = new DataMgr();
        }
        return instance;
    }

    public List<SwimmingPool> getSwimmingPool() {
        return swimmingPool;
    }

    public void setSwimmingPool(List<SwimmingPool> swimmingPool) {
        this.swimmingPool = swimmingPool;
    }
    
}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import static PoolManager.Ticket.charList;
import static PoolManager.Ticket.indexList;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Redmibook 14
 */
public class DurationTime {

    static List<Character> charList2 = new ArrayList<>();
    static List<Integer> indexList2 = new ArrayList<>();
    String durationCode;
    float fromTime, toTime;
    float price;


    public static List<Integer> getIndexList() {
        return indexList;
    }

    public String getDurationCode() {
        return durationCode;
    }

    public float getFromTime() {
        return fromTime;
    }

    public float getToTime() {
        return toTime;
    }

    public float getPrice() {
        return price;
    }

  

    public void genCode() {
        generateCode();
        durationCode = "";
        for (int i = 0; i < indexList2.size(); i++) {
            durationCode += String.valueOf(charList2.get(indexList2.get(i)));
        }
        int lastIndex = indexList2.size() - 1;
        indexList2.set(lastIndex, indexList2.get(lastIndex) + 1);
        for (int i = lastIndex; i > 0; i--) {
            if (indexList2.get(i) < charList2.size()) {
                break;
            }
            indexList2.set(i, 0);
            indexList2.set(i - 1, indexList2.get(i - 1) + 1);
        }

    }

    private static void generateCode() {
        if (charList2.size() > 0) {
            return;
        }
        for (int i = '0'; i <= '9'; i++) {
            charList2.add((char) i);
        }
        for (int i = 0; i < 2; i++) {
            indexList2.add(0);
        }

    }

    public void input() {
        genCode();
        Scanner input = new Scanner(System.in);
        System.out.println("Enter start time : ");
        fromTime = Float.parseFloat(input.nextLine());
        System.out.println("Enter end time : ");
        toTime = Float.parseFloat(input.nextLine());
        System.out.println("Enter price : ");
        price = Float.parseFloat(input.nextLine());
        System.out.println(durationCode);
    }

}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Redmibook 14
 */
public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int choose;

        do {
            showMenu();
            choose = Integer.parseInt(input.nextLine());

            switch (choose) {
                case 1:
                    addPool();
                    break;
                case 2:
                    addMonthTicket();
                    break;
                case 3:
                    addDuration();
                    break;
                case 4:
                    booking();
                    break;
                case 5:
                    statiticProfitDay();
                    break;
                case 6:
                    statiticProfitMonth();
                    break;
                case 7:
                    System.out.println("Exit!!!");
                    break;
                default:
                    System.out.println("Input failed!");
                    break;
            }
        } while (choose != 7);
    }

    static void showMenu() {
        System.out.println("1. Add swimming pool");
        System.out.println("2. Add monthly ticket");
        System.out.println("3. Add duration time");
        System.out.println("4. Booking");
        System.out.println("5. Statistic profit of day by daily ticket");
        System.out.println("6. Statistic profit of month");
        System.out.println("7. Exit");
        System.out.println("Choose: ");
    }

    public static void addPool() {
        Scanner input = new Scanner(System.in);
        while (true) {
            SwimmingPool Sp = new SwimmingPool();
            Sp.input();
            System.out.println("Contimue Y/N ?");
            String n = input.nextLine();
            if (n.equals("y")) {

            } else {
                break;
            }
        }
    }

    public static void addMonthTicket() {
        Scanner input = new Scanner(System.in);
        if (DataMgr.getInstance().getSwimmingPool().size() > 0) {
            System.out.println("Swimming pool(code) available : ");
            for (int i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
                System.out.println(DataMgr.getInstance().getSwimmingPool().get(i).poolCode);
            }
            System.out.println("Enter swimming pool code : ");
            String sC = input.nextLine();
            int i;
            for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
                if (DataMgr.getInstance().getSwimmingPool().get(i).poolCode.equals(sC)) {
                    MonthTicket Mt = new MonthTicket();
                    Mt.input();
                    DataMgr.getInstance().getSwimmingPool().get(i).getArrMonthTicket().add(Mt);
                    break;
                }
            }
            if (i == DataMgr.getInstance().getSwimmingPool().size()) {
                System.out.println("Wrong code !");
            }
        } else {
            System.out.println("No swimming pool(code) available !");
        }

    }

    public static void addDuration() {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter swimming pool(code) :");

        List<DurationTime> Dlist = new ArrayList<>();
        for (int i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            System.out.println(DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode());
        }
        String code = input.nextLine();
        int i;
        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            if (DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode().equals(code)) {
                Dlist = DataMgr.getInstance().getSwimmingPool().get(i).getArrDurationTime();
                break;
            }

        }
        if (i == DataMgr.getInstance().getSwimmingPool().size()) {
            System.out.println("Wrong code!");
        } else {
            DurationTime sm = new DurationTime();

            sm.input();
            Dlist.add(sm);
        }
    }

    public static void booking() {
        Booking booking = new Booking();
        booking.input();

    }

    public static void statiticProfitDay() {
        Scanner input = new Scanner(System.in);
        int i;
        System.out.println("Enter swimming pool(code) :");
        SwimmingPool sP = new SwimmingPool();
        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            System.out.println(DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode());
        }
        String code2 = input.nextLine();

        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            if (DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode().equals(code2)) {
                sP = DataMgr.getInstance().getSwimmingPool().get(i);
                break;
            }

        }
        if (i == DataMgr.getInstance().getSwimmingPool().size()) {
            System.out.println("Wrong code!");
        } else {
            System.out.println("Enter date(number) :");
            int inDay = Integer.parseInt(input.nextLine());
            System.out.println("Enter month(number) :");
            int inMonth = Integer.parseInt(input.nextLine());
            int count = 0;
            for (i = 0; i < sP.getArrDailyTicket().size(); i++) {
                if (sP.getArrDailyTicket().get(i).ApplyDate.getDate()
                        == inDay && sP.getArrDailyTicket().get(i).ApplyDate.getMonth() == inMonth) {
                    count += 1;
                }
            }
            System.out.println("Sold " + count + " ticket!");
        }

    }

    public static void statiticProfitMonth() {
        Scanner input = new Scanner(System.in);
        int i;
        System.out.println("Enter swimming pool(code) :");
        SwimmingPool sP2 = new SwimmingPool();
        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            System.out.println(DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode());
        }
        String code3 = input.nextLine();

        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            if (DataMgr.getInstance().getSwimmingPool().get(i).getPoolCode().equals(code3)) {
                sP2 = DataMgr.getInstance().getSwimmingPool().get(i);
                break;
            }

        }
        if (i == DataMgr.getInstance().getSwimmingPool().size()) {
            System.out.println("Wrong code!");
        } else {

            System.out.println("Enter month(number) :");
            int inMonth = Integer.parseInt(input.nextLine());
            int count = 0;
            for (i = 0; i < sP2.getArrMonthTicket().size(); i++) {
                if (sP2.getArrDailyTicket().get(i).ApplyDate.getMonth() == inMonth) {
                    count += 1;
                }
            }
            System.out.println("Sold " + count + " ticket!");
        }
    }
}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import java.util.Date;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Redmibook 14
 */
public class MonthTicket extends Ticket {

    String customerName, address, avatar;
    Date expiredDate;
    float price;

    public String getCustomerName() {
        return customerName;
    }

    public String getAddress() {
        return address;
    }

    public String getAvatar() {
        return avatar;
    }

    public Date getExpiredDate() {
        return expiredDate;
    }

    public float getPrice() {
        return price;
    }

  

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public void setExpiredDate(Date expiredDate) {
        this.expiredDate = expiredDate;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public static List<Integer> getIndexList() {
        return indexList;
    }

    public static List<Character> getCharList() {
        return charList;
    }


    @Override
    public void input() {
        super.input();
        Scanner input = new Scanner(System.in);
        System.out.println("Enter customer name : ");
        customerName = input.nextLine();
        System.out.println("Enter customer address : ");
        customerName = input.nextLine();
        System.out.println("Enter customer avatar : ");
        customerName = input.nextLine();
        System.out.println("Enter expired date : ");
        expiredDate = convertDate(input.nextLine());
        System.out.println("Enter price : ");
        price = Float.parseFloat(input.nextLine());
    }

  

}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Redmibook 14
 */
public class SwimmingPool {

    String poolCode, Address;
    List<DailyTicket> arrDailyTicket = new ArrayList<>();
    List<MonthTicket> arrMonthTicket = new ArrayList<>();
    List<DurationTime> arrDurationTime = new ArrayList<>();
    List<Booking> arrBooking = new ArrayList<>();

    public String getPoolCode() {
        return poolCode;
    }

    public SwimmingPool() {
    }

    public SwimmingPool(String poolCode, String Address) {
        this.poolCode = poolCode;
        this.Address = Address;
    }

    public String getAddress() {
        return Address;
    }

    public List<DailyTicket> getArrDailyTicket() {
        return arrDailyTicket;
    }

    public List<MonthTicket> getArrMonthTicket() {
        return arrMonthTicket;
    }

    public List<DurationTime> getArrDurationTime() {
        return arrDurationTime;
    }

    public List<Booking> getArrBooking() {
        return arrBooking;
    }

    public void setPoolCode(String poolCode) {
        this.poolCode = poolCode;
    }

    public void setAddress(String Address) {
        this.Address = Address;
    }

    public void setArrDailyTicket(List<DailyTicket> arrDailyTicket) {
        this.arrDailyTicket = arrDailyTicket;
    }

    public void setArrMonthTicket(List<MonthTicket> arrMonthTicket) {
        this.arrMonthTicket = arrMonthTicket;
    }

    public void setArrDurationTime(List<DurationTime> arrDurationTime) {
        this.arrDurationTime = arrDurationTime;
    }

    public void setArrBooking(List<Booking> arrBooking) {
        this.arrBooking = arrBooking;
    }

    public void input() {
        Scanner scan = new Scanner(System.in);

        System.out.println("Enter code: ");
        poolCode = scan.nextLine();
        int i;
        for (i = 0; i < DataMgr.getInstance().getSwimmingPool().size(); i++) {
            if (poolCode.equals(DataMgr.getInstance().getSwimmingPool().get(i).poolCode)) {
                break;
            }
        }
        if (i != DataMgr.getInstance().getSwimmingPool().size()) {
            System.out.println("Code exists!");
            return;
        }
        System.out.println("Enter address: ");
        Address = scan.nextLine();
        SwimmingPool Sp = new SwimmingPool(poolCode,Address);
        DataMgr.getInstance().getSwimmingPool().add(Sp);

    }
}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package PoolManager;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Redmibook 14
 */
public class Ticket {

    public static List<Integer> indexList = new ArrayList<>();
    public static List<Character> charList = new ArrayList<>();
    String TicketCode;
    Date ApplyDate;

    public Ticket(String TicketCode, Date ApplyDate) {
        this.TicketCode = TicketCode;
        this.ApplyDate = ApplyDate;
    }

  
    public Ticket() {
    }

    public String getTicketCode() {
        return TicketCode;
    }

    public Date getApplyDate() {
        return ApplyDate;
    }

    public void setTicketCode(String TicketCode) {
        this.TicketCode = TicketCode;
    }

    public void setApplyDate(Date ApplyDate) {

        this.ApplyDate = ApplyDate;
    }

    public void genCode() {
        generateCode();
        TicketCode = "";
        for (int i = 0; i < indexList.size(); i++) {
            TicketCode += String.valueOf(charList.get(indexList.get(i)));
        }
        int lastIndex = indexList.size() - 1;
        indexList.set(lastIndex, indexList.get(lastIndex) + 1);
        for (int i = lastIndex; i > 0; i--) {
            if (indexList.get(i) < charList.size()) {
                break;
            }
            indexList.set(i, 0);
            indexList.set(i - 1, indexList.get(i - 1) + 1);
        }
        System.out.println(TicketCode);
    }

    private static void generateCode() {
        if (charList.size() > 0) {
            return;
        }
        for (int i = 'a'; i <= 'z'; i++) {
            charList.add((char) i);
        }
        for (int i = 'A'; i <= 'Z'; i++) {
            charList.add((char) i);
        }

        for (int i = '0'; i <= '9'; i++) {
            charList.add((char) i);
        }
        for (int i = 0; i < 6; i++) {
            indexList.add(0);
        }

    }

    public Date convertDate(String str) {
        try {
            SimpleDateFormat fomat = new SimpleDateFormat("dd/MM/yy");
            return fomat.parse(str);
        } catch (ParseException ex) {
            Logger.getLogger(Ticket.class.getName()).log(Level.SEVERE, null, ex);
        }
        return new Date();
    }

    public void input() {
        genCode();
        Scanner input = new Scanner(System.in);
        System.out.println("Enter registered date (dd/MM/yyyy): ");
        String applyDate = input.nextLine();
        ApplyDate = convertDate(applyDate);
    }

}