控制台实现微型词典

从控制台输入英语单词及单词解释两项数据,把录入的数据追加到文件中。要求提供单词查询功能。用户输入单词后,从单词库文件中查找,如果存在则输出该单词的解释。

注意,单词不能有重复,如果重复则覆盖替换以前的解释数据。

应用map的hashmap动态存储更改文件,使得更改具有即时性,并且涉及到相关文件读写流操作,以及格式转换判断等,结束时根据查询词库自动保存文件

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class Dictionary {
    private static Map<String, String> dictionaryMap = new HashMap<>();
    private static boolean isHave = true;


    public static void main(String[] args) throws IOException {

        File file = new File("dictionary.txt");
        if (file.exists() && file.isFile()) {
            System.out.println("文件已存在");
        } else {
            if (file.createNewFile()) System.out.println("创建成功");

        }
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReaderForFile = new BufferedReader(fileReader);
        String stringFromFile = null;
        while ((stringFromFile = bufferedReaderForFile.readLine()) != null) {
            String[] strings = stringFromFile.split("=");
            dictionaryMap.put(strings[0], strings[1]);
        }


        PrintWriter printWriter = new PrintWriter(file);
        String s = null;
        boolean b = true;
        System.out.println("微词典fromDUTZhaoPeng\n=====================请选择===============\n1\t存单词解释;\n2\t查询单词\n3\t退出");

            while ((s = bufferedReader.readLine()) != null) {

                if (s.equals("3")) {

                    b = false;break;
                }
                if (s .equals( "1")) {
                    System.out.println("格式: /单词/=/解释/");
                    if ((s = bufferedReader.readLine()) != null) {
                        if ((s.indexOf('=') == -1) || (s.indexOf('=') == 0) || (s.indexOf('=') != s.lastIndexOf('='))) {
                            System.out.println("格式错误");
                            break;
                        }
                        DmapAdd(s);
                    }
                } else if (s.equals("2")) {
                    isHave = false;
                    System.out.println("请输入单词:");
                    if ((s = bufferedReader.readLine()) != null) {
                        String finalS = s;
                        dictionaryMap.forEach((k, v) -> {
                            if (k.equals(finalS)) {
                                System.out.println("解释:" + v);
                                isHave = true;
                            }
                        });
                        if (!isHave) System.out.println("查无此词");

                    }
                }

            }

                dictionaryMap.forEach((k,v)->{
                    printWriter.println(k + "=" + v);
                });


        bufferedReader.close();
        bufferedReaderForFile.close();
        printWriter.close();



    }

    private static void DmapAdd(String s) {
        isHave = true;
        String[] strings = s.split("=");
        dictionaryMap.forEach((k, v) ->{
            if (k.equals(strings[0])) {
                dictionaryMap.put(k, strings[1]);
                isHave = false;
            }
        });
        if (isHave) {
            dictionaryMap.put(strings[0], strings[1]);
        }

    }
}
更多可以参见 我的GitHub
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
第二次作业: 1. 编写点类(Point类),属性成员有x,y,都是double数据类型。需要为Point类编写构造函数。 编写直线类(Line类),需要提供两点确定一条直线的函数功能。 如果两点重合,可以返回异常或者返回null引用来解决这个问题。 直线类的数据成员和函数成员请自行设计。 2. 给定文本文件,文件名称为a.txt,文件内容为一个8行8列的字符矩阵,内容为1和0字符, 请编程计算出该矩阵中水平方向或者垂直方向或者斜线方 向连续1最多的个数。 例如: 11001101 10110101 01010101 11001000 01010101 11001101 00011000 11110000 3. 编写程序求出1万以内的所有素数,并将这些素数输出到一个文本文件中,每行文本只包含一个素数数据。 该文本文件内容要求可以用记事本程序来查看。 4. 编写程序求出1万以内的所有素数,然后再判断这些素数中哪些是由素数拼接而成的。 例如素数23就符合条件,23本身是素数,其由素数2,和素数3拼接(连接)组成。 素数29就不满足条件,2是素数,而9不是素数。素数307不满足条件,不能忽略0. 7907这个素数符合条件,7是素数,907是素数。 需要把符合条件的拼接素数全部输出,并统计个数。 5. 要求从控制台输入英语单及单解释两项数据, 把录入的数据追加到文件中。要求提供单查询功能。 用户输入单后,从单库文件中查找,如果存在则输出 该单的解释。注意,单不能有重复,如果重复则覆盖替换 以前的解释数据。 6. 通过命令行参数输入一个文件夹的路径名称,然后编写程序找出该文件夹下文件名称重复并且文件大小也一样的文件, 如果没有“重复文件”,则输出“没有重复文件”的提示,如果有,需要输出文件名称,和文件所在的文件夹路径(绝对路径)。 提示,需要遍历该文件夹下所有子文件夹,设计一个文件类,属性包括文件名称,文件路径,文件大小,然后进行“重复” 判断,如果文件重复,则需要记录并输出,有可能有文件名重复,但是文件大小不一样,重复的文件可能不止2个,可能 在不同的子文件夹下有多个文件重复。 7. 霍夫曼编码实现压缩文本文件,见文件huffman.rar. 对文件数据读写等功能已经实现,程序在Q2Resources.zip中。 Q2Resources.zip中的文件禁止修改。请将TextZip.java文件所有未实现的函数按照要求给以实现
第二次作业: 1. 编写点类(Point类),属性成员有x,y,都是double数据类型。需要为Point类编写构造函数。 编写直线类(Line类),需要提供两点确定一条直线的函数功能。 如果两点重合,可以返回异常或者返回null引用来解决这个问题。 直线类的数据成员和函数成员请自行设计。 2. 给定文本文件,文件名称为a.txt,文件内容为一个8行8列的字符矩阵,内容为1和0字符, 请编程计算出该矩阵中水平方向或者垂直方向或者斜线方向连续1最多的个数。 例如: 11001101 10110101 01010101 11001000 01010101 11001101 00011000 11110000 3. 编写程序求出1万以内的所有素数,并将这些素数输出到一个文本文件中,每行文本只包含一个素数数据。 该文本文件内容要求可以用记事本程序来查看。 4. 编写程序求出1万以内的所有素数,然后再判断这些素数中哪些是由素数拼接而成的。 例如素数23就符合条件,23本身是素数,其由素数2,和素数3拼接(连接)组成。 素数29就不满足条件,2是素数,而9不是素数。素数307不满足条件,不能忽略0. 7907这个素数符合条件,7是素数,907是素数。 需要把符合条件的拼接素数全部输出,并统计个数。 5. 要求从控制台输入英语单及单解释两项数据, 把录入的数据追加到文件中。要求提供单查询功能。 用户输入单后,从单库文件中查找,如果存在则输出 该单的解释。注意,单不能有重复,如果重复则覆盖替换 以前的解释数据。 6. 通过命令行参数输入一个文件夹的路径名称,然后编写程序找出该文件夹下文件名称重复并且文件大小也一样的文件, 如果没有“重复文件”,则输出“没有重复文件”的提示,如果有,需要输出文件名称,和文件所在的文件夹路径(绝对路径)。 提示,需要遍历该文件夹下所有子文件夹,设计一个文件类,属性包括文件名称,文件路径,文件大小,然后进行“重复” 判断,如果文件重复,则需要记录并输出,有可能有文件名重复,但是文件大小不一样,重复的文件可能不止2个,可能 在不同的子文件夹下有多个文件重复。 7. 霍夫曼编码实现压缩文本文件,见文件huffman.rar. 对文件数据读写等功能已经实现,程序在Q2Resources.zip中。 Q2Resources.zip中的文件禁止修改。请将TextZip.java文件所有未实现的函数按照要求给以实现。 改成了控制台输入,因为命令行输入太麻烦了,不过像用命令行也就是改一改就好。
Java控制台实现管理系统是一种使用Java编程语言开发的管理系统,通过在控制台中输入指令和参数来实现对系统的管理和操作。 首先,我们可以在控制台显示欢迎信息和提示用户输入指令的信息。然后,通过使用Java的输入输出流将用户在控制台中输入的指令和参数获取到程序中。 接着,我们可以使用Java的控制流语句来判断用户输入的指令,并根据用户输入的指令执行相应的操作。例如,如果用户输入"add"指令,那么我们可以执行添加数据的操作,并提示用户输入相应的参数。如果用户输入"delete"指令,那么我们可以执行删除数据的操作,并提示用户输入需要删除的数据的相关信息。 对于管理系统的实现,我们可以使用Java的数据结构,如数组或集合,来存储和管理系统中的数据。通过使用循环语句和条件语句,我们可以在控制台实现对数据的CRUD操作,包括添加、删除、修改和查询数据等功能。 除此之外,我们还可以加入一些异常处理机制,以防止用户输入错误的指令或参数,或者在操作数据时出现异常情况。通过使用Java的异常处理语句,我们可以在控制台中捕获并处理这些异常,以保证系统的可靠性和稳定性。 最后,为了提高用户体验,我们可以在控制台界面中提供菜单选项,用户可以通过键盘输入对应的数字或字符来选择对应的操作,并通过判断用户的选择,执行相应的功能。 总体而言,Java控制台实现管理系统是一种简单而高效的开发方式,适用于一些简单的管理系统的开发和使用。通过灵活运用Java编程语言的特性和语法,我们可以实现一个功能完善、用户友好的管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值