/*
* 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;
}
}