JAVA基礎編程學習-用文本文件和數據庫實現鄭碼查詢系統

1、

打開小小輸入法的鄭碼錶觀察,如

a 一 再

aa 一下

aaam 萬無一失

aaav 可歌可泣

aaax 天下無難事

aacf 百無聊賴

aacm 無可奉告

aadj 無可挽回

aadt 殊死搏鬥

aaeu 平型關

aaez 一開始

。。。

改造上次你已完成的“編程實現一個命令窗程序,使得輸入“你”則在屏上回顯“you”的那個程序”,使得能進行鄭碼查詢,如輸入aacm,則輸出“無可奉告”。以如下兩種方法:

1)將碼錶放在一個文本文件中,如zmb.txt中,實現以上功能。

2)將碼錶放在SQLite文件中,如zmdb. sqlite, 再次以上功能。

第一種方法:

將以下內容輸入到記事本中 保存爲zmb.txt

<a><一再>
<aa><一下>
<aaam><萬無一失>
<aaav><可歌可泣>
<aaax><天下無難事>
<aacf><百無聊賴>
<aacm><無可奉告>
<aadj><無可挽回>
<aadt><殊死搏鬥>
<aaeu><平型關>

<aaez><一開始>

下面的代碼用來實現上述的功能

import java.io.BufferedReader;//導入java.io包中的BufferedReader類
import java.io.FileReader;    //導入java.io包中的FileReader類
import java.io.IOException;   //導入java.io包中的IOException類
import java.util.Scanner;     //導入java.util包中的Scanner類

class dic {      //定義一個類,類名爲dic
    public static void main(String[] args) throws IOException {  //main方法裏有什麼操作可能會發生IOException
        Scanner scan = new Scanner(System.in);   //定義一個Scanner對象,等待從鍵盤上輸入
        while(true) {
            System.out.println("請輸入鄭碼吧:");  //控制檯輸出“請輸入一個詞”
            String str = scan.nextLine();         //定義一個字符串
            FileReader fr = new FileReader("zmb.txt");//創建一個新的 FileReader,給予File讀。
            BufferedReader br = new BufferedReader(fr);//從一個字符輸入流中讀取文本
            String s = null;//定義一個字符串
            boolean b = false;//判斷字典中是否含有輸入的詞
            while((s = br.readLine()) != null) {//readLine()讀一行文本

                String china = s.substring(s.indexOf("<")+1, s.indexOf(">"));
                //substring(int beginIndex, int endIndex) 
                //返回一個字符串的子串,從beginIndex開始到endIndex結束(含頭不含尾)
                //indexOf(String str) 
                //返回指數在這個字符串指定的子字符串中第一個出現的下標。

                String english = s.substring(s.lastIndexOf("<")+1,s.lastIndexOf(">"));
                //lastIndexOf(String str) 
                //返回指數在這個字符串的指定子字符串中最後出現的下標。
                if(str.equals(china)) {//存在
                    System.out.println(english);//輸出對應的漢語意思
                    b = true;
                }
            }
            if(str.equals("ByeBye")) {//判斷是否輸入的爲"ByeBye"
                System.out.println("程序退出!");
                System.exit(0);//終止當前正在運行的程序
            }
            if(!b) {//查不到
                System.out.println("查不到該詞!");
            }
        }
    }
}

運行結果如下:


第二種方法:

<a><一再>
<aa><一下>
<aaam><萬無一失>
<aaav><可歌可泣>
<aaax><天下無難事>
<aacf><百無聊賴>
<aacm><無可奉告>
<aadj><無可挽回>
<aadt><殊死搏鬥>
<aaeu><平型關>

<aaez><一開始>

將上述內容利用可視化數據庫Navicat Premium導入student.db數據庫的zmdb表格中,如下所示:


通過下面的代碼連接數據庫student.db,讀取english和chinese字段下的值 將輸入的字符串與讀取到的english字段下的值進行比較如果相同,則輸出對應的chinese字段下的值。完成鄭碼的查詢 

import java.sql.*;       //導入java.sql包
import java.io.BufferedReader;      //導入IO流BufferedReader類
import java.io.FileReader;          //導入IO流FileReader類,
import java.io.IOException;         //導入IO流IOException類,拋出或捕獲異常信息
import java.util.Scanner;

public class Sqlite {
    static Connection con;     //聲明Connection對象
    static Statement sql;      //聲明Statement對象
    static ResultSet res;      //聲明ResultSet對象
    public Connection getConnection(){    //建立返回值爲Connection的方法
        try {                             //加載數據庫驅動
            Class.forName("org.sqlite.JDBC");
            System.out.println("數據庫驅動加載成功");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        try {                 //通過訪問數據庫的URL獲取數據庫連接對象
            con=DriverManager.getConnection("jdbc:sqlite:student.db");
            System.out.println("數據庫連接成功");
            System.out.print('\n');
        }catch(SQLException e) {
            e.printStackTrace();
        }
        return con;           //按方法要求放回一個Connection對象
    }
    public static void main(String[] args)throws IOException {
        Scanner scan = new Scanner(System.in);
        Sqlite c = new Sqlite();       //創建本類對象
        con =c.getConnection();              //與數據庫建立連接
        while(true) {
            try {
                sql = con.createStatement();     //實例化Statement對象
                res = sql.executeQuery("select * from zmdb");
                    String str = scan.nextLine();     //定義字符型變量str並賦值
                    boolean flag = false;                  //定義布爾型變量flag  
                    while(res.next()) {      //讀一行文本並賦值給word
                        String en = res.getString("english");      //獲取english字段值
                        String ch = res.getString("chinese");      //獲取chinese字段值
                        String english = en.substring(en.indexOf("<")+1,en.indexOf(">"));  //截取字母
                        String chinese = ch.substring(ch.lastIndexOf("<")+1,ch.lastIndexOf(">"));  //截取漢字
                        if(str.equals(english)) {      //將輸入字符與截取字母作比較
                            System.out.println(chinese);                        
                            flag = true;                //能查找到對應便將flag置1
                        }
                    }
                    if(str.equals("ByeBye")) {    //輸入ByeBye退出程序
                        System.exit(0);
                    }
                    if(!flag) {                  //查找不到對應的詞    
                        System.out.println("查不到該詞");    
                    }
             }catch(SQLException e) {
                    e.printStackTrace();
             }
        }
     }
}

運行結果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章