关于数据库类论文范本,与基于知网的文按需检索系统相关毕业设计论文
本论文是一篇关于数据库类毕业设计论文,关于基于知网的文按需检索系统相关研究生毕业论文开题报告范文。免费优秀的关于数据库及用户及图书馆方面论文范文资料,适合数据库论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
42;curl,int*link,
},
每次构造一个新的Curl对象时都会由构造函数自动地调用curl_easy_init函数对curl成员进行初始化,而每次删除一个Curl对象时都会由析构函数调用curl_easy_cleanup函数来对curl成员做清理工作.因此,使用Curl类将不用再考虑何时需要调用curl_easy_init函数和curl_easy_cleanup函数,从而简化了对CURL指针的使用.
类GetPage用于实现网页信息的获取功能.由于http协议提供了两种获取信息的方式:GET和POST,因此类GetPage定义为一个基类.可以通过调用set_ret_func_h等四个成员函数来设置如何保存获取到的页面和把获取到的页面保存到哪里.为了使用方便,GetPage的构造函数指定了默认的回调函数和存储区,这样,就不必在每次获取网页前设置回调函数和存储区了.
为了使程序能够分别使用GET方法和POST方法获取页面,从GetPage类派生出两个类GetPage_get和GetPage_post,分别对应使用GET方法和使用POST方法.其中GetPage_get类相对其基类GetPage没有增加任何成员,而GetPage_post则增加了一个string成员post_content,用来存放表单的内容.另外,虽然GetPage_get和GetPage_post都继承了它们基类的url成员,但含义不一样:GetPage_get中的url存放所要获取的页面的url地址,而GetPage_post中的url存放的是提交表单的目的地址.
有关论文范文主题研究: | 关于数据库的论文范文素材 | 大学生适用: | 学校学生论文、电大毕业论文 |
---|---|---|---|
相关参考文献下载数量: | 18 | 写作解决问题: | 写作参考 |
毕业论文开题报告: | 文献综述、论文小结 | 职称论文适用: | 杂志投稿、职称评副高 |
所属大学生专业类别: | 写作参考 | 论文题目推荐度: | 优质选题 |
classGetPage{
public:
typedefsize_t(*ret_func)(void*,size_t,size_t,void*),
GetPage(stringu),
GetPage(Curlc,stringu),
voidset_ret_func_h(ret_funch),//设置报文头的回调函数
voidset_ret_func_b(ret_funcb),//设置报文体的回调函数
voidset_stream_h(void*sh),//设置报文头的存储区
voidset_stream_b(void*sb),//设置报文体的存储区
virtualintget_(void),//获取页面
void*get_sh(void),//获取报文头
void*get_sb(void),//获取报文体
Curlget_Curl(void),//返回本对象所使用的Curl对象
virtual~GetPage(),
protected:
Curlcurl,
stringurl,
ret_funchead,body,
void*streamh,*streamb,
boolalloc_flag_h,alloc_flag_b,},
由于需要频繁地从获取的页面中解析出一些信息(如链接地址等),所以定义一个Parser类,用于从一个字符串中获取以指定字段开头,并以指定字段结尾的字符串.在类Parser中,read_file函数用于把源字符串读到成员file中.parse函数的作用是从成员file中找出以head开头并以tail结尾的字符串.在其参数中,如果reserve_head的值为true,则会在目标字符串中保留head;如果为false,则在目标字符串中不保留head.reserve_tail也一样,表示是否保留tail.最后一个参数get_first_num表示最多把多少个符合条件的目标字符串存放在作为返回值的list中,0表示返回所有符合条件的,n(n>0)表示返回符合条件的前n个.
classParser{
public:
Parser(strings),
voidread_file(string&str),
list
reserve_tail,unsignedintget_first_num等于0),
private:
stringfile,
list
},
3.2知网的自动登录实现
在Curl,GetPage和Parser三个类实现之后,就可以实现登录知网的程序了.因为libcurl库支持自动跳转,即自动重定向,从而不用特意地去判断是否需要跳转,而直接得到查询首页.登录过程的流程如下所示.
ki_login函数最后返回Curl对象这一步是必需的,因为这个Curl对象“保存”着程序和知网之间的交互信息(cookie),即这个Curl对象维持着程序作为已登录用户的状态.返回这个Curl对象将便于后续的查询操作能始终使用这个Curl对象与知网进行交互.
其实,从本质上来讲,整个登录的过程就是为了使程序在之后的查询过程中能始终以已登录用户的身份来与网站进行交互,因此,ki_login函数的最终目标就是生成一个具有已登录用户身份的Curl对象,并把该对象返回给后续的程序使用.
3.3本地数据库的存储模式
系统的本地数据库用于存储用户的查询需求和查询结果,主要包括两个模式:需求表和结果表.需求表用来存放用户的需求,即用户对所要搜索论文的相关描述,程序将会根据每一条需求分别从知网上获取相关信息.需求表的模式如图3所示.其中,searchfield表示查找域,即“题名”,“关 键 词”,“作者”等;database表示所要选择的数据库;match表示匹配模式,“1”为精确匹配,“2”为模糊匹配;value表示搜索关键字;startyear和endyear分别表示查询的起始年份和结束年份.
本篇论文来自 http://www.sxsky.net/benkelunwen/060374441.html
图3需求表模式
结果表用来存放每一篇论文的相关信息,其模式如图4所示.其中,titlech和titleen分别表示中文题名和英文题名;authorch和authoren分别表示中文作者名和英文作者名;keych和keyen分别表示中文关 键 词和英文关 键 词;abstractch和abstracten分别表示中文摘 要和英文摘 要;pdf_url表示该论文的下载链接地址.
图4结果表模式
由于程序只需要对需求表执行读操作和对结果表执行写操作,因此仅为DbOper类定义两个相应的成员函数,就可以实现用户需求的获取,DbOper类定义如下所示.
classGetQuery{
public:
intsetQuery(Query&),//获取需求并拼装成表单
stringgetJQ()const,//获取拼装后的表单
private:
voidjoint(),//把需求拼装成表单
Queryq,
stringjointedQuery,//用来存放表单},
3.4查询处理的实现
系统的查询处理由类DoQuery实现,其功能包括:把查询表单提交给知网,解析知网返回的结果页面并获取论文的详细信息,以及把这些信息存入数据库之中.DoQuery类定义如下所示.
classDoQuery{
public:
DoQuery(constCurl&,constGetQuery&),
voidsetGetQuery(constGetQuery&),
voidsetUrl(conststring&),
intrun(DbConn&),
private:
DoQuery(),
Paperdetail_parse(string),
Curlcurl,
stringpost_url,
stringpost_content,
},
一般来说,应该将所获得的内页中的所有论文链接地址解析出来,一页解析完之后再解析后一页,直到所有链接地址都解析完成.但知网比较特殊,同一次搜索出的所有结果链接都是相关联的.例如第一条结果链接地址为“/kns50/detail.aspxQueryID等于17&CurRec等于1”,则第二条的地址为“kns50/detail.aspxQueryID等于17&CurRec等于2”,以此类推,每条结果的地址除了最后一个数
关于数据库类论文范本,与基于知网的文按需检索系统相关毕业设计论文参考文献资料: