chord icon indicating copy to clipboard operation
chord copied to clipboard

中小学分类简表匹配工具

Open renyh opened this issue 7 years ago • 7 comments

中小学分类简表匹配工具

功能说明:

查找某中图法分类号在简表中对应的分类号,用于生成索取号得到简表中短的分类号。

开发说明:

开发时可以分为三个层次实现: 第一个层次:输入一个分类号,输出在简表中对应的分类号,输出匹配过程。

第二个层次: 输入一批分类号,每个分类号一行 输出每个分类号在简表中对应的分类号,输出匹配过程。 输出简表中分类号被匹配上的次数

这个小工具直接用winform程序就行,项目放到github上。简表目前就是一个txt文件,取一列(其它信息忽略),在程序启动中加载到内存即可。

样例

参考下面简表,例如输入的中图法分类号A841.63,在简表中匹配上A84;输入A811.64,在简表中匹配上A81。

简表样例:

…
A8	马克思主义、列宁主义、毛泽东思想、邓小平理论的学习和研究	1
A81	马克思主义的学习和研究	2
A82	列宁主义的学习和研究	2
A83	斯大林的思想的学习和研究	2
A84	毛泽东思想的学习和研究	2
A849	邓小平理论的学习和研究	2
A85	著作汇编的学习和研究	2
…

输入的 中图法分类号 样例:

A85
A841.63
A841.63
A841.4
A841.4
A841.26
A841.23
A84
A82
A811.64
A811.63

简表参考:http://www.clcindex.com/

renyh avatar Apr 11 '18 02:04 renyh

中小学分类简表匹配工具

需求讨论和确认阶段:

需求确认: 查找某中图法分类号在简表中对应的分类号,用于生成索取号得到简表中短的分类号。

需求讨论历史:

任老师:
将中图法中的分类号 先用完整长度去匹配简表中的分类号,未命中的话,就从右截取一位,再去匹配,直到命中为止。
兔老师:
最好能记录下简表中每个号码匹配到的数量。
谢老师:
分类号去查。一次查一个。不需要一次查多个。
……

开发要点:

开发语言: C#语言,winform。

功能:

  1. 输入一个中图法分类号,输出在简表(.txt文档)中对应的分类号(匹配规则是:先用完整长度去匹配简表中的分类号,未命中的话,就从右截掉一位,再去匹配,直到命中为止)。
  2. 上传一个分类号的txt档,读取txt档中的每行分类号按照匹配规则去查找简表(.txt文档),最后输出简表中匹配到的分类号以及每个简表分类号被匹配到的次数。

yinjuan1123 avatar Apr 11 '18 11:04 yinjuan1123

中小学分类简表匹配工具

代码设计构想:

  1. 使用StreamReader 读取txt文本中的信息。
  2. 用 DataTable 存储txt文本中的信息。
  3. 用HashTable来存储简表中分类号被命中次数。

问题点: 查询效能

yinjuan1123 avatar Apr 11 '18 16:04 yinjuan1123

中小学分类简表匹配工具

目前代码设计:

  1. 使用StreamReader 读取txt文本中的信息。
  2. 用 DataTable 存储txt文本中的信息以及用一列来记录简表中的分类号被命中次数。
  3. for循环依次取出查询DataTable中的数据去匹配目标DataTable中的数据,命中记录命中次数即中止。
  4. 定义一个int类型用来标志查询字符串是否命中目标DataTable中的数据,若有,取下一个查询字符串继续步骤3中的循环,若没有,截取掉上一个字符串的右边一位,继续步骤3中的循环。
  5. 用DataGridView 绑定简表分类号以及命中次数。

yinjuan1123 avatar Apr 13 '18 12:04 yinjuan1123

中小学分类简表匹配工具

代码设计:

  1. 使用StreamReader 读取简表txt文本中的信息。
  2. 定义一个类 BasicNo,类中定义两个属性(分类号,命中次数),三个方法(设置命中次数,设置分类号,获取分类号,获取次数),一个构造函数。
  3. 把读取的简表信息存储在List中,List的存储对象是 BasicNo。
  4. 读取文本框中的每一行分类号,用for循环取出List中的对象,读取该对象的分类号与文本中的分类号匹配,若一样,则set 该对象的 命中次数加1,中止该次循环继续外循环并输出该次匹配过程。若不一样,输出该次匹配过程并截取掉文本框中的分类号右边一个字符,继续内循环。
  5. for 循环遍历读取List中的信息,即可获取命中次数。

yinjuan1123 avatar Apr 16 '18 10:04 yinjuan1123

定义简表分类号类:

class BasicNo
    {
        public string basicno;//简表分类号
        public int count;//被命中次数
        public BasicNo(string  basicno,int basiccount)
        {
            this.basicno = basicno;
            this.count = basiccount;
        }
        public void setBasicno(string  basicno)
        {
            this.basicno = basicno;
        }
        public void setBasicCount(int basiccount)
        {
            this.count = basiccount;
        }
        public string getBasicNo()
        {
            return this.basicno;
        }
        public int getCount()
        {
            return this.count;
        }
    }

yinjuan1123 avatar Apr 16 '18 10:04 yinjuan1123

中小学分类简表匹配工具开发注意事项

  1. dp2Tools是工具集,所以不可以改动主程序中的启动文件,只要在主界面中加载菜单。
  2. 减少代码耦合度,方法是多使用函数。
  3. 简表加载不要在程序启动时就加载,在程序运行后利用一个事件读取文件并检查简表的正确性分类号,名称,级别,序号。
  4. 程序在运行中加入进度条这样的提示信息提示程序的运行状况,自己要去分析系统需求以及设计。
  5. 类成员的赋值使用get; set,比如 public string Class { get; set; }。
  6. Text文本的赋值,用StringBuild拼接字符,然后再赋值给Text,注意界面的信息跟底层不要有交互。
  7. 资料匹配的时候有一个停止中断的功能,程序开发者需要站在用户的角度去考虑。
  8. 能给匹配过程输出一个简单明了的匹配过程。
  9. 程序要经过反复测试,至少能经过自己这一关再提交同步。
  10. 在代码中尽量加注释。

yinjuan1123 avatar Apr 23 '18 13:04 yinjuan1123

有个技术问题:分类号按等级简化,但是有时候等级不是减少一位就可以的,不知道怎么处理?比如物理O4下位类O4x和O5x,O5x应该简化成O4不是O5,O5在分类表中不存在定义。

renyh avatar Apr 25 '18 22:04 renyh