首页> 中国专利> 一种简易早操数据统计系统

一种简易早操数据统计系统

摘要

本发明公开了一种简易早操数据统计系统,首先将该程序所需执行的所有类文件加载;创建对象并调用早操操作测试方法;通过this引用调用持久化存储文件是否存在方法,在早操测试类中封装的私有文件字段来接收;通过this引用调用早操数据读取持久化存储方法将返回的File对象作为参数进行传递,再通过全局变量字段map进行接收;通过this引用调用早操统计方法将返回的map集合对象作为参数进行传递,再通过全局变量字段map进行接收;通过this引用调用本类的早操数据写入本地持久化的方法,通过this引用调用遍历集合中数据的方法导出指定教师的学生早操信息。本发明的有益效果是内存占用率低,方便操作。

著录项

  • 公开/公告号CN107368320A

    专利类型发明专利

  • 公开/公告日2017-11-21

    原文格式PDF

  • 申请/专利权人 南京林业大学;

    申请/专利号CN201710612513.1

  • 发明设计人 戈俊;谢扬;金润宇;王莉莉;

    申请日2017-07-25

  • 分类号G06F9/44(20060101);G06F9/45(20060101);G06F17/30(20060101);

  • 代理机构11590 北京市领专知识产权代理有限公司;

  • 代理人林辉轮

  • 地址 210037 江苏省南京市玄武区龙蟠路159号

  • 入库时间 2023-06-19 03:47:06

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-08

    未缴年费专利权终止 IPC(主分类):G06F 8/20 专利号:ZL2017106125131 申请日:20170725 授权公告日:20200626

    专利权的终止

  • 2020-06-26

    授权

    授权

  • 2017-12-15

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20170725

    实质审查的生效

  • 2017-11-21

    公开

    公开

说明书

技术领域

本发明属于算法技术领域,涉及一种简易早操数据统计系统。

背景技术

Properties是一个和IO流相结合的属性集合对象,Properties可以保存在流中或者从流中加载,属性列表中每一个键及其对应的值都是一个字符串。Properties对象更多运用于软件开发中配置文件的设置,由于配置文件中的参数都是通过字符串键值对的形式进行体现,所以在保证键唯一的情况下,将其值进行修改覆盖原值,持久化存储以后,软件下一次启动时重新加载该配置文件,就能将参数进行可视化体现。市面上一些共享软件的使用次数限定,也可以通过Properties进行实现或者使用XML语言进行配置自定义文件描述并使其描述内容更丰富,更具体,同时可使用dom4j进行读取解析。Properties对象中提供了多种方法来将属性列表与输入输出流相结合,以便于完成配置文件的操作,我们结合Properties的特点,模拟制作MESS(MorningExerciseStatisticsSystem)早操数据统计系统。

Properties对象中提供了list方法来将属性列表输出到指定的输出流,此方法对调试很有用。在MESS(MorningExerciseStatisticsSystem)早操数据统计系统设计方法中模拟了该list方法,提供了一种将集合列表输出到指定流的方法:ergodicMapSets。该方法提供了两个参数,一个是本地存储的Map集合,在遍历集合时,可以将集合中的早操键值对数据信息全部通过流输出到指定盘符上,由于该功能是通过GUI图形化界面形式进行展现,最终会将数据通过对话框路径选择的形式存储到本地盘符的文件中,所以将流进行了内部封装,不对外暴露了。第二个参数是教师姓名,如果教师姓名参数传递的是具体值,那么就匹配具体教师的学生早操成绩,如果参数传递为null,那么就输出所有学生的早操个人信息和次数的键值对信息。

发明内容

本发明的目的在于提供一种简易早操数据统计系统,解决了现有的早操数据库操作复杂、内存占用高的问题。

本发明所采用的技术方案是按照以下步骤进行:

1、系统加载MESS.class文件,将该程序所需执行的所有类文件加载进内存;

2、主线程从测试类的主方法作为入口进入,创建MorningExerciseTest对象,并调用早操操作测试方法morningExerciseOperationTest;

3、通过this引用调用持久化存储文件是否存在方法fileIsExists,在早操测试类中封装的私有文件字段来接收;

3.1该方法中通过File对象封装持久化存储文件路径;

3.2创建一个TreeMap集合,由于集合中存储的都是对象,所以泛型定义为学生对象和基本数据类型对象包装类<Student,Integer>,通过早操测试类中封装的私有字段Map<Student,Integer>map来接收;

3.3判断3.1中文件对象是否存在,如果不存在直接通过文件对象调用createNewFile方法,创建该文件对象,保证文件对象一定存在;新建ObjectOutputStream将3.2中创建的TreeMap集合,通过写入对象方法writeObject将集合进行序列化存储,并及时关闭对象输出流;

3.4返回被创建存储了集合的File对象;

4、通过this引用调用早操数据读取持久化存储方法将3.4中返回的File对象作为参数进行传递,再通过全局变量字段map进行接收;

4.1该方法中通过建立对象读取流ObjectInputStream和参数传递中的File对象进行关联;

4.2将持久化存储在本地File中的数据通过读取对象方法readObject读取进内存;

4.3由于该方法读取对象返回的是Object类型,而我们在对象序列化中存储的是Map集合,所以需要进行强制类型转换,这也是ObjectInputStream反序列化的过程,释放资源关闭流对象;

4.4返回强转后的map集合对象;

5、通过this引用调用早操统计方法morningExerciseStatistics,将4.4中返回的map集合对象作为参数进行传递,再通过全局变量字段map进行接收;

5.1通过读卡器读取学生校园卡中的个人信息数据,将学生的信息如:姓名、性别、学号、所在院系、所属教师、课程项目、课程时间等,进行学生对象的封装;

5.2将每一个学生对象作为键,通过Map集合的get方法进行值的获取;由于Map集合中存储的只能是对象,所以通过基本数据类型对象包装类的Integer对象来接收get方法返回的值;

5.3通过定义变量count赋值为0,来记录住每一个学生刷卡的次数;

5.4判断如果5.2中返回的值不为空,那么说明该学生对象在Map集合中已经存在并有相对应值的体现,将值取出并赋值给变量count;

5.5学生对象每一次刷卡,都将通过变量count自增一次来体现,如果该学生对象在Map集合中存在那么将对应值取出自增一次,再将该学生对象和自增后的值存入Map集合,如果学生对象在集合中不存在,那么直接将学生对象和count+1的值存入Map集合;

5.6在学生每一次刷卡时,通过GUI图形化界面展示学生目前出操次数,并且在达到基本合格次数时,给出提示;

5.7由于学生人数不确定,所以使用循环来完成刷卡和读卡的任务,结束循环以后,返回存储了新的学生信息的Map集合;

6、通过this引用调用本类的早操数据写入本地持久化的方法,同时将被封装的File对象和5.7中返回的存有更新过学生早操信息键值对的Map集合作为参数进行传递;

6.1封装对象输出流,使其与File对象封装的本地文件相关联;

6.2Map集合通过实现Serializable接口以启用其序列化功能,通过对象输出流的写入对象方法writeObject将存储有学生早操信息的Map集合写入本地文件,进行持久化存储;

6.3释放资源,关闭流对象;

7、多线程技术:主线程通过匿名内部类形式创建一条新的线程,进行手动的学生数据的增删改查,以保证在不断录入学生信息的同时进行部分问题学生信息的增删改查;

8、通过this引用调用遍历集合中数据的方法,导出指定教师的学生早操信息,将存储学生早操信息的Map集合和指定教师姓名作为参数进行传递,如果没有指定教师姓名则导出所有学生早操数据信息;

8.1封装导出文件存储的位置成File对象;

8.2通过字符流缓冲区包装字符输出流关联8.1中的File对象,达到高效写出的目的;

8.3通过循环反复读写,获取Map集合中的每一个键,通过字符串的equals方法匹配通过参数传递进来的教师姓名,将对应的学生对象键的字符串表现形式和值写入本地文件中,已达到持久化存储,随时查阅的效果,如果没有教师姓名的参数传递,那么将导出所有学生信息和对应早操次数的值。

进一步,学生对象的创建步骤如下:

1.设计学生类,封装字段:姓名,性别,学号,所在院系,体育课教师,体育课项目,体育课时间段;

2.进行空参和带参的构造函数初始化;

3.对每一个字段进行set和get方法的定义;

4.最后对学生类,给出一个特有的字符串表现形式;

5.学生类存入TreeMap集合中需要进行默认排序,实现Comparable接口,并根据自身比较特点覆盖其compareTo方法,先根据学号进行排序,学号相同再根据姓名排序;

6.学生类通过实现java.io.Serializable标记接口以启用其序列化功能,以便于通过ObjectInputStream和ObjectOutputStream进行对象的持久化存储和读写。

进一步,持久化存储文件是否存在方法:通过File对象将文件进行封装,判断文件是否存在,如果不存在通过File对象进行创建,保证文件一定存在,并且在文件存在时就通过ObjectOutputStream对象输出流,向其文件中写入一个新建的TreeMap对象,以此保证对象读取流在读取文件时,能够顺利读取Map集合对象,否则,当数据输入过程中意外到达文件或流的末尾时,抛出EOFException异常。

进一步,早操统计方法是通过模拟读卡器读取学生校园卡上的个人信息,创建每一个学生对象,通过Map集合,存储学生对象和早操锻炼次数,由于录入个人信息的人数不确定,所以使用循环进行反复读取,在进行GUI图形化界面设计时,将退出菜单作为结束录入的操作,学生对象作为键通过TreeMap集合的get方法,在集合中查找相对应的值,如果值存在,通过定义变量记录住学生出早操的次数再+1,再次存入Map集合,如果值不存在,那么直接将键和1存入Map集合,最终达到键唯一,值覆盖的效果。

进一步,早操数据写入本地持久化的方法是通过ObjectOutputStream对象输出流,将内存中的Map集合对象写入本地,进行持久化存储,最后将所有通过Windows底层创建并启动的流资源关闭。

进一步,多线程技术是将数据读写功能、数据查询功能进行分别封装到单个线程中,保证在持续录入学生早操信息的同时,可以有单独的线程来支持数据的修改、查询及导出,通过遍历可以导出符合要求的学生信息和对应的早操次数,为了避免匹配数据时出现空指针异常的情况,通过equals比较时将字符串常量数据作为调用equals方法的引用,如果教师姓名参数传递的是具体值,那么就匹配具体教师的学生早操成绩,如果参数传递为null,那么就导出所有学生的早操个人信息和次数的键值对信息。

本发明的有益效果是易操作的早操数据统计系统的设计简明,内存占用率低,方便操作,借鉴配置文件设计特点,达到数据库设计的效果。

附图说明

图1是选择指定教师的导出结果示意图;

图2是所有教师名单的导出结果示意图。

具体实施方式

下面结合具体实施方式对本发明进行详细说明。

1、系统加载MESS.class文件,将该程序所需执行的所有类文件加载进内存。

2、主线程从测试类的主方法作为入口进入,创建MorningExerciseTest对象,并调用早操操作测试方法(morningExerciseOperationTest)。

3、通过this引用调用持久化存储文件是否存在方法(fileIsExists),在早操测试类中封装的私有文件字段来接收。

3.1该方法中通过File对象封装持久化存储文件路径。

3.2创建一个TreeMap集合,由于集合中存储的都是对象,所以泛型定义为学生对象和基本数据类型对象包装类<Student,Integer>,通过早操测试类中封装的私有字段Map<Student,Integer>map来接收。

3.3判断3.1中文件对象是否存在,如果不存在直接通过文件对象调用createNewFile方法,创建该文件对象,保证文件对象一定存在。新建ObjectOutputStream将3.2中创建的TreeMap集合,通过写入对象方法(writeObject)将集合进行序列化存储,并及时关闭对象输出流。

3.4返回被创建存储了集合的File对象。

4、通过this引用调用早操数据读取持久化存储方法(morningExerciseDataReadPersistedLocally)将3.4中返回的File对象作为参数进行传递,再通过全局变量字段map进行接收。

4.1该方法中通过建立对象读取流(ObjectInputStream)和参数传递中的File对象进行关联。

4.2将持久化存储在本地File中的数据通过读取对象方法(readObject)读取进内存。

4.3由于该方法读取对象返回的是Object类型,而我们在对象序列化中存储的是Map集合,所以需要进行强制类型转换,这也是ObjectInputStream反序列化的过程,释放资源关闭流对象。

4.4返回强转后的map集合对象。

5、通过this引用调用早操统计方法(morningExerciseStatistics),将4.4中返回的map集合对象作为参数进行传递,再通过全局变量字段map进行接收。

5.1通过读卡器读取学生校园卡中的个人信息数据,将学生的信息如:姓名、性别、学号、所在院系、所属教师、课程项目、课程时间等,进行学生对象的封装。

5.2将每一个学生对象作为键,通过Map集合的get方法进行值的获取。由于Map集合中存储的只能是对象,所以通过基本数据类型对象包装类的Integer对象来接收get方法返回的值。

5.3通过定义变量count赋值为0,来记录住每一个学生刷卡的次数。

5.4判断如果5.2中返回的值不为空,那么说明该学生对象在Map集合中已经存在并有相对应值的体现,将值取出并赋值给变量count,由于基本数据类型和对象不能直接运算,所以JDK升级到1.5以后提供了更为便捷的对象和基本数据类型的隐式转换,自动拆箱和自动装箱机制,以此保证了该运算的执行。

5.5学生对象每一次刷卡,都将通过变量count自增一次来体现,如果该学生对象在Map集合中存在那么将对应值取出自增一次,再将该学生对象和自增后的值存入Map集合,由于TreeMap集合的底层数据结构是二叉树结构,所以在保证键唯一的时候调用的是学生对象实现的Comparable接口中的compareTo方法来比较两个学生对象是否相同。同时通过该方法还能实现TreeMap集合中元素的默认排序。又由于学生的学号是唯一的,所以在比较方法中主要条件就是学生的学号。所以在成绩导出的时候是按照学号的升序体现的。如果学生对象在集合中不存在,那么直接将学生对象和count+1(即1)的值存入Map集合。通过此方法实现学生对象键相同,值覆盖的效果,达到准确的记录学生出操次数的目的。

5.6在学生每一次刷卡时,通过GUI图形化界面展示学生目前出操次数,并且在达到基本合格次数时,给出提示,使其心中有数。

5.7由于学生人数不确定,所以使用循环来完成刷卡和读卡的任务。结束循环以后,返回存储了新的学生信息的Map集合。

6、通过this引用调用本类的早操数据写入本地持久化的方法(morningExerciseDataWritePersistedLocally),同时将被封装的File对象和5.7中返回的存有更新过学生早操信息键值对的Map集合作为参数进行传递。

6.1封装对象输出流,使其与File对象封装的本地文件相关联。

6.2由于Map集合通过实现Serializable接口以启用其序列化功能。通过对象输出流的写入对象方法(writeObject)将存储有学生早操信息的Map集合写入本地文件,进行持久化存储,方便再次读取调用,更新数据。

6.3释放资源,关闭流对象。

7、主线程通过匿名内部类形式创建一条新的线程,进行手动的学生数据的增删改查。以保证在不断录入学生信息的同时进行部分问题学生信息的增删改查。

8、通过this引用调用遍历集合中数据的方法,导出指定教师的学生早操信息。将存储学生早操信息的Map集合和指定教师姓名作为参数进行传递。如果没有指定教师姓名则导出所有学生早操数据信息。

8.1封装导出文件存储的位置成File对象。

8.2通过字符流缓冲区包装字符输出流关联8.1中的File对象,达到高效写出的目的。

8.3通过循环反复读写,获取Map集合中的每一个键,即学生对象,通过字符串的equals方法匹配通过参数传递进来的教师姓名,见图1,将对应的学生对象键的字符串表现形式和值写入本地文件中,已达到持久化存储,随时查阅的效果。如果没有教师姓名的参数传递见图2,那么将导出所有学生信息和对应早操次数的值。

学生类设计:

学生类的设计是方便创建学生对象用的。通过对学生不同的信息进行类描述和封装,通过指定的构造函数进行对象的初始化,以便于通过对象调用其方法,指挥对象做事情,充分的体现了Java的面向对象的特点。在本发明中将学生的(姓名,性别,学号,所在院系,体育课教师,体育课项目,体育课时间段)这些信息,封装成对象,以便于存储到Map集合中,因为集合中只能存储对象。同时方便及时从Map集合中取出对象进行进一步操作,比如取出学生对象后,可以通过set和get方法进行学生对象成员字段的设置和获取,拿到每一个学生的信息。学生类的设计主要体现在步骤5中,即通过学生类的描述,进行学生对象的创建,以及学生对象在集合中的存储和取出。

1.设计学生类,封装字段(姓名,性别,学号,所在院系,体育课教师,体育课项目,体育课时间段)

2.进行空参和带参的构造函数初始化

3.对每一个字段进行set和get方法的定义

4.最后对学生类,给出一个特有的字符串表现形式。

5.学生类存入TreeMap集合中需要进行默认排序,应实现Comparable接口,并根据自身比较特点覆盖其compareTo方法,先根据学号进行排序,学号相同再根据姓名排序。

6.学生类通过实现java.io.Serializable标记接口以启用其序列化功能,以便于通过ObjectInputStream和ObjectOutputStream进行对象的持久化存储和读写。

早操锻炼实现类设计:

早操锻炼实现类的设计是将本发明步骤的每一个所需调用的方法进行了描述和封装,主要封装成了四个相对独立的方法,将多个方法进行封装,建立适合本发明的特有的方法,提高阅读性,方便自身内部调用。

1、持久化存储文件是否存在方法:该文件在程序第一次运行时是不存在的,通过File对象将文件进行封装,判断文件是否存在,如果不存在通过File对象进行创建,保证文件一定存在,并且在文件存在时就通过ObjectOutputStream对象输出流,向其文件中写入一个新建的TreeMap对象,以此保证对象读取流在读取文件时,能够顺利读取Map集合对象。否则,当数据输入过程中意外到达文件或流的末尾时,抛出EOFException异常。

2.早操统计方法:通过模拟读卡器读取学生校园卡上的个人信息,创建每一个学生对象。通过ObjectInputStream读取的对象是用Object来接收的,所以要通过强制转换将其转成Map集合。通过Map集合,存储学生对象和早操锻炼次数,由于学生对象存在学号的顺序,以便于今后的查找,所以使用TreeMap集合。由于录入个人信息的人数不确定,所以使用循环进行反复读取,在进行GUI图形化界面设计时,将退出菜单作为结束录入的操作。学生对象作为键通过TreeMap集合的get方法,在集合中查找相对应的值,如果值存在,通过定义变量记录住学生出早操的次数再+1,再次存入Map集合,如果值不存在,那么直接将键和1存入Map集合,最终达到键唯一,值覆盖的效果。以此保证了早操出勤次数的累计。由于学号是唯一的,所以键都是唯一的。基本数据类型和基本数据类型对象包装类之间的运算通过其自动拆箱,自动装箱的特点实现。

3.早操数据写入本地持久化的方法:通过ObjectOutputStream对象输出流,将内存中的Map集合对象写入本地,进行持久化存储,最后将所有通过Windows底层创建并启动的流资源关闭。

4.多线程技术:将数据读写功能、数据查询功能进行分别封装到单个线程中,保证在持续录入学生早操信息的同时,可以有单独的线程来支持数据的修改、查询及导出,通过遍历可以导出符合要求的学生信息和对应的早操次数,如匹配到对应教师的学生早操成绩。为了避免匹配数据时出现空指针异常的情况,通过equals比较时将字符串常量数据作为调用equals方法的引用。如果教师姓名参数传递的是具体值,那么就匹配具体教师的学生早操成绩,如果参数传递为null,那么就导出所有学生的早操个人信息和次数的键值对信息。在该方法中加入字符输出流就可以实现数据的导出。文件最终被存储在本地,即软件所在盘符,以便于查找,关闭资源。

以上所述仅是对本发明的较佳实施方式而已,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施方式所做的任何简单修改,等同变化与修饰,均属于本发明技术方案的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号