Manager

mail@pastecode.io avatar
unknown
plain_text
2 years ago
7.4 kB
0
Indexable
/*
 * 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 s00015;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Scanner;

/**
 * LAB 05 SE1606
 *
 * @author Ngo Hai Bang CE160624
 */
public class Manager {

    private int numberOfVoc = 0;
    Hashtable<String, String> VocabularyList;
    Scanner sc = new Scanner(System.in);

    /**
     *
     */
    public Manager() {
        this.numberOfVoc = 0;
        this.VocabularyList = new Hashtable<String, String>();
    }

    /**
     * Tải từ vừng từ file vào trong hashtable
     *
     * @throws IOException
     */
    public void loadVocabulary() throws IOException {
        File vocFile = new File("EnVn.txt");
        if (!vocFile.exists()) {    // kiểm tra xem file tồn tại hay chưa
            vocFile.createNewFile();    // tạo file data khi nó chưa tồn tại
            System.out.printf("The data file " + vocFile + " is not exits. "
                    + "Creating new data file " + vocFile + "... Done!\n");
        } else {
            System.out.printf("\nThe data file " + vocFile + " is found." // thông báo load file thành công
                    + " The data of vocabulary is loading... ");

            String VN, EL;
            try (BufferedReader br = new BufferedReader(new FileReader(vocFile))) {
                this.numberOfVoc = Integer.parseInt(br.readLine()); //đọc dòng đầu tiên là số lượng của từ vựng lưu trong file
                for (int i = 0; i < this.numberOfVoc; i++) {    //đọc dữ liệu
                    VN = br.readLine(); //dòng nghĩa tiếng Việt
                    EL = br.readLine();     //dòng Tiếng Anh
                    this.VocabularyList.put(VN, EL); // tạo đưa dữ liệu vào hashtable
                }
            }
            System.out.println(" Done! [" + this.numberOfVoc + " vocabulary]");     //thông báo đọc file xong và hiển thị số lượng từ vựng có trong file
        }
    }

    /**
     * Lưu từ vựng từ hashtable vào file
     *
     * @throws IOException
     */
    public void saveVocabulary() throws IOException {
        FileWriter fw = new FileWriter(new File("EnVn.txt"));   //taọ đối tượng để ghi file
        try {
            System.out.print("Vocabulary is saving into data file EnVn.txt...");

            fw.append(String.valueOf(this.numberOfVoc) + "\n");     //ghi số lượng của từ vựng ở dầu file
            for (String key : VocabularyList.keySet()) {    // vòng lặp để ghi dữ liệu

                String VN = key;
                String EL = this.VocabularyList.get(key);

                // ghi thông tin từ vựng vào file
                fw.append(VN + "\n");   //ghi từ tiếng Việt vào file
                fw.append(EL + "\n");   //ghi từ tiếng Anh vào file
            }
        } finally {
            // lưu dữ liệu ( từ RAM vào HDD)
            fw.close();
            System.out.println(" Done! [" + this.numberOfVoc + " vocabulary]");     //hiển thị số lượng từ lưu vào file
        }
    }

    /**
     * Hàm để nhập chuỗi và kiểm tra xem chuỗi ng dùng nhập có rỗng hay không,
     * rỗng thì nhập lại
     *
     * @param scanner
     * @param message
     * @return
     */
    public String getInputString(Scanner scanner, String message) {
        String string;
        do {    //vòng lặp sẽ lạp lại nếu nhập sai dữ liệu
            System.out.print(message);
            string = scanner.nextLine().trim();
            if (string.equals("")) {  // kiểm tra xem người dùng có nhập gì không
                System.out.println("Error: Your input can not be empty!");
            }
        } while (string.equals(""));
        return string;
    }

    /**
     * Nhập từ tiếng Anh và tiếng Việt, và thêm vào hashtable
     *
     */
    public void addWord() {
        String EL;
        String VN;

        EL = getInputString(sc, "Enter English: "); //nhập từ tiếng Anh muốn thêm
        if (checkValid(EL) == false) {  // kiểm tra xem từ đó đã có trong từ điển chưa
            System.out.println("This word has been added to the dictionary!");
            return;
        }
        VN = getInputString(sc, "Enter Vietnamese: "); //nhập từ tiếng Việt
        this.VocabularyList.put(VN, EL);    //thêm vào hashtable
        ++this.numberOfVoc;     //tăng một đơn vị cho số lượng từ
        System.out.println("Add Successful");
    }

    /**
     * Nhập một từ tiếng anh, và xóa từ đó khỏi hashtable
     *
     */
    public void removeWord() {
        String removeWord;
        int count = 0;
        removeWord = getInputString(sc, "Enter English: ");     //nhập từ tiếng Anh muốn xóa

        for (String key : VocabularyList.keySet()) {    //lượt qua từng phần tử
            if (VocabularyList.get(key).toLowerCase().equals(removeWord.toLowerCase())) {   //kiểm tra xem phân tử hiện tại có giống với từ muốn xóa không
                this.VocabularyList.remove(key);    //nếu có thì xóa khỏi hashtable
                --this.numberOfVoc;
                ++count;
                System.out.println("Remove Successful");
                break;
            }
        }
        if (count == 0) {   //nếu count = 0 thì thông báo không tìm thấy
            System.out.println("Not found '" + removeWord + "' in dictionary!");
        }
    }

    /**
     * Dich từ từ tiếng Anh ra tiếng Việt
     *
     */
    public void translate() {
        String findWord;
        int count = 0;
        findWord = getInputString(sc, "Enter English: ");   //nhập từ tiếng Anh muốn dịch

        for (String key : VocabularyList.keySet()) {    //kiểm tra qua từng phần tử trong hashtable
            if (VocabularyList.get(key).toLowerCase().equals(findWord.toLowerCase())) {     //kiểm tra xem 2 từ có giống nhau không
                ++count;
                System.out.println("Vietnamese: " + key);   //nếu có thì in nghĩa tiếng Việt
                break;
            }
        }
        if (count == 0) {   //hiển thị không tìm thấy khi count = 0
            System.out.println("Not found '" + findWord + "' in dictionary!");
        }
    }

    /**
     * Kiểm tra xem từ người dùng muốn thêm vào có trùng hay không
     *
     * @param EL
     * @return
     */
    public boolean checkValid(String EL) {
        for (String key : VocabularyList.keySet()) {    //lượt qua từng phần tử của hashtable
            if (VocabularyList.get(key).toLowerCase().equals(EL.toLowerCase())) {   //kiểm tra xem từ này đã được thêm vào chưa
                return false;
            }
        }
        return true;
    }
}