控制台实现微型词典

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

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

应用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文件所有未实现的函数按照要求给以实现
随着社会的发展,在人们生活中学习外语变得越来越重要。 现在许多文件和资料都是电子版,所以更多人喜欢通过电子工具学习外语。为了给外语学习者更多便利以及实现无纸化的教育,基于以上的原因开发了这款迷你电子词典。 这个系统是基于电脑桌面程序的电子词典,它主要实现查询、背单和生本管理三个功能。查询功能提供英语单查询中文意思以及中文组查询英语单;把单添加到用户定义的生本;浏览已查询单的记录。背单功能部分有两个子功能-----测试和猜游戏。测试是单选题,并且测试结束后可以查看正确率。猜游戏是用户根据英文单词的发音和解释,然后通过软键盘拼写正确的英文单词。生本是根据用户需求将单分类,方便用户记忆与复习。 本系统运用MFC 应用架构,使用C++语言编写。使用WindowsXP作为开发平台,开发环境是微软Visual C++ 6.0,后台数据库是SQL server 2000。 关键 条查询,生管理,MFC, 目录 摘要 i 英文摘要 ii 第一章 概述 1 1.1课题背景 1 1.2现状…………………………………………………………………………….2 1.3 研究意义 3 1.4 工程目标 4 第二章 应用技术介绍 5 2.1 编程语言概述 5 2.2 微软基础类概述 6 2.3 数据库概述 7 2.4 开放数据库互连概述 8 第三章需求分析 9 3.1 目标 9 3.2 描述 10 3.3 性能需求 11 3.4 功能需求 12 3.4.1 查询单 13 3.4.2 背单 13 3.4.3 生本管理 13 3.5 环境需求 14 3.5.1 硬件 14 3.5.2 软件 14 第四章 系统设计 15 4.1 原则 15 4.2 功能结构设计 16 4.3 数据库设计 16 4.3.1 数据库设计原则 17 4.3.2 表设计 17 4.3.3 数据库实体联系图 20 第五章 系统实现 21 5.1 数据库配置与连接 21 5.2 单查询模块 23 5.2.1 介绍 23 5.2.2 状态图 24 5.2.3 模块实现 24 5.3 背单模块 28 5.3.1 介绍 28 5.3.2 状态图 28 5.3.3 测试模块实现 29 5.3.4 猜游戏模块 32 5.4 生本模块 34 5.4.1 介绍 34 5.4.2 用户定义库管理模块实现 34 5.4.3 生管理模块实现 38 5.5 其他 41 5.5.1 电子时钟 41 5.5.2 按钮贴图 43 5.5.3 网上冲浪 44 5.5.4 历史记录 45 5.5.5 文件导入导出 47 第六章 总结 50 参考文献 51
第二次作业: 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文件所有未实现的函数按照要求给以实现。 改成了控制台输入,因为命令行输入太麻烦了,不过像用命令行也就是改一改就好。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值