新开这篇博客,一是为了分享和总结自己的平日所学,督促自己好好学习。二是为了将来面试的时候也有东西可以吹。博主目前南方某985,计科大二在读。第一篇内容就选取上个月刚做完的数据结构大作业分享。
选取的题目要求是这样的:
科学文献管理系统
科研工作者的日常工作离不开查阅科学文献,并对其中的信息进行分析、筛选、挖掘和管理。请你为科研工作者设计一个管理系统,提高科学文献的管理效率。
- 目标用户:科研工作者。
- 数据配置:请通过以下方法下载数据文件dblp.xml.gz.
http://dblp.uni-trier.de/xml/dblp.xml.gz
将该数据文件解压后,其中包含一个dblp.xml文件。该文件由科学文献的记录序列组成,记录的格式如下所示:
<article mdate="2002-01-03" key="persons/Codd71a">
<author>E. F. Codd</author>
<title>Further Normalization of the Data Base Relational Model.</title>
<journal>IBM Research Report, San Jose, California</journal>
<volume>RJ909</volume>
<month>August</month>
<year>1971</year>
<cdrom>ibmTR/rj909.pdf</cdrom>
<ee>db/labs/ibm/RJ909.html</ee>
</article>
每个记录对应一篇文章,其中包含对作者,题名,发表杂志,卷号,出版时间等的详细说明。请基于该数据,设计能满足后述功能的文献管理系统。
注:1)dblp.xml的大小超过1G,所以不要直接点击打开该文件。需要通过命令行命令’more’ 或者自行编程查看。
2) 编程过程中,不允许使用数据库系统。需要自己建立管理文献数据的数据结构。
功能要求:
F1. 基本搜索功能。输入作者名,能展示该作者发表的所有论文信息。输入完整的论文的题目,能展示该论文的其他相关信息
F2. 相关搜索。输入作者名,能展示于该作者有合作关系的其他所以作者。
F3. 作者统计功能。输出写文章最多的前100名作者。
F4. 热点分析功能。分析每一年发表的文章中,题目所包含的单词中,出现频率排名前10的关键词。
F5. 部分匹配搜索功能。给定若干个关键字,能快速搜索到题目中包含该关键字的文章信息
F6. 聚团分析。作者之间的合作关系可以看成是一个图,每个作者对应一个顶点,任两个作者之间如果存在合作关系,则在两个顶点之间建立连边。这个图中的每一个完全子图我们称为一个聚团(所谓完全子图指的是该子图的任意顶点都和该子图的其他顶点有连边,完全子图的顶点个数称为该完全子图的阶数),请统计整个图中各阶完全子图的个数。
F7. 可视化显示。通过图形化界面,展示作者之间合作关系图及其相关文章信息。
数据结构的评判点在于大数据下的程序运行效率。在寒假前选取这个题目时,对这个题目并太多的了解:一是想选题太简单的做起来就感觉很混,太难了自己又不会做,正好看到这个题目还自带数据库,好耶就选这个了(后面开学了开始动工,修各种bug的时候就怀疑自己脑子进的水) 好在和另一位小组人员的努力下,还是成功做出来了。光代码行数也超过了4k行,过程中也学到了很多知识,算是课设中比较大的项目了
运行截图:
因为要开发可视化的图形界面。选择开发工具时就选择了用C++开发后端,C#/Unity前端(为什么不用QT统一用C++,因为不想学orz 平时打Gamejam用Unity拉UI更熟练,自己也更喜欢C#的码风)。框架跨语言时也涉及到DLL动态链接库的编写。最终总结其中出运用到的技术如下:
C++/C#、Unity
文件哈希管理
哈希表与字典
字典树
排序算法:桶排
Dll动态链接库编写与调用,数据交换
程序线程调度和管理
并查集 最大团分析
状态机设计模式
其中涉及到的一些设计点更新已完结撒花:
数据结构大作业-DBLP科学文献管理系统(一) XML解析,文件哈希,C++线程_Sugarzo_mei的博客-优快云博客
数据结构大作业-DBLP科学文献管理系统(二)作者排序、热点分析功能,模糊搜索(桶排序,字典树)_Sugarzo_mei的博客-优快云博客
数据结构大作业-DBLP科学文献管理系统(三)聚团分析(并查集,最大团问题)_Sugarzo_mei的博客-优快云博客
数据结构大作业-DBLP科学文献管理系统(四) Dll编写,C++与C#的数据交换_Sugarzo_mei的博客-优快云博客
https://blog.youkuaiyun.com/m0_51776409/article/details/124783052
GIthub项目源码,包括了前端后端的全代码以及对应的unitypackage,可执行程序
GitHub - sugarzo/DataStructure: 大二数据结构课设-科学文献管理系统dblp.xml解析
在做项目的过程中,看过另一位博主做的课设,从中得到了很多启发,不过他的原博客是在sina写的然而现在已经被维护了,所以网址打不开x。非常感谢这位博主,在这里也放出他的github源码可供参考:
GitHub - CMHowl/DBLPQuickBrowser: DBLP Management System / DBLP 科学文献管理系统