协同写作系统的研究与实现论文_第1页
协同写作系统的研究与实现论文_第2页
协同写作系统的研究与实现论文_第3页
协同写作系统的研究与实现论文_第4页
协同写作系统的研究与实现论文_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳航空工业学院毕业设计论文

第2章总体设计2.1设计目标就协同写作系统而言,最主要的是实现对作品信息的共享和操作权限的区分以及文章编辑环境的实现。本项目的重点是对作品信息的操作实现:既要让用户尽可能的利用共享的作品信息,又不能让用户随意更改系统的共享的作品信息。针对本项目的具体要求,并考虑到实际的情况,可以对系统的设计目标作如下归纳:1.用户级别分为主编、编辑、作者和读者四类;2.读者可以对所有作品进行查阅,并可以对其发表评论;3.作者除具有读者的权限外,还可以对所属学科的作品进行写作;4.编辑除具有作者的权限外,还可以创建所属学科的新作品,并对作者提交的写作内容进行审阅;5.主编除具有编辑的权限外,还可以对作品进行最后审阅,并设置完成标志;6.对于未提交的作品,用户可以随意更改;7.用户可以添加所属学科的比自身级别低的用户;8.管理员可对系统所有用户信息、作品信息进行添加、修改、删除等操作;9.系统提供在线用户相互沟通的环境;2.2系统构架本系统由服务器端和客户端两部分组成。客户端程序主要完成用户登录、添加新用户、创建新作品以及对作品的各项操作等功能,并提供文章的编辑环境和显示当前系统的状态。服务器端程序主要是提供用户资料和作品资料的增加、删除、查询、修改等操作。本系统从结构上分为四大模块:1.编辑模块:该模块主要完成文章正文的写作、修改以及评论的写作等工作,在具体执行这些功能之前,必须判断当前用户是否有权进行此项操作;2.设置操作者权限模块:该模块实现根据用户的学科、级别等信息对其设置操作权限;3.操作模块:该模块主要实现用户对文章的各项操作并存储到数据库中等工作;4.通信模块:该模块提供在线用户及管理员之间相互沟通的环境;2.3系统构架图协同写作系统编辑模块协同写作系统编辑模块 设置操作者权限模块设置操作者权限模块操作模块通信模块操作模块通信模块2.4数据库设计2.4.1用户信息表(UserTable)属性属性名属性类型长度备注UserID用户编号整型(int)4唯一标识用户UserName用户姓名字符型(char)50可以为空Subject所属学科字符型(char)20Purview用户级别字符型(char)20Password用户密码字符型(char)4Regdate注册日期日期型8说明:1.UserID(用户编号)为主属性;2.该表存储用户全部信息;3.对本表纪录的操作有添加、修改、删除三个;4.只有系统管理员对本表拥有全部操作权限;5.用户可以添加比自己的级别低的新用户;2.4.2作品信息表(WorksTable属性属性名属性类型长度 备注WorksID作品编号字符型(char)4唯一标识作品WorksName作品名称整型(int)50可为空Subject所属学科字符型(char)20EditFlag编辑标志字符型(char)20标识作品当前状态Author作者姓名字符型(char)50Editor编辑姓名字符型(char)50Regdate注册日期日期型8Review评论文本型(text)16Contents正文文本型(text)16说明:1.WorksID(作品编号)为主属性;2.该表储存系统中所有作品信息;3.对本表的操作有添加、修改、删除;4.只有系统管理员对本表拥有全部操作权限;5.对本表的操作前需要判断当前用户的权限是否可以进行操作;2.4.3权限类型表(PurviewTable属性属性名属性类型长度备注PurID级别编号整型(int)4PurName级别名称字符型(char)20说明:1.PurID(级别编号)为主属性;2.本表存储系统中全部级别类型;3.每个用户都具有工作权限,级别高者享有优先权,此表定义为数值大者级别高;4.主编为1级,编辑为2级,作者为3级,读者为4级;2.4.4学科类型表(SubjectTable)属性属性名属性类型长度备注SubID学科编号整型(int)4SubName学科名称字符型(char)20说明:1.SubID(学科编号)为主属性;2.本表存储系统中所有学科类型;3.每个用户都具有相应的学科,每个作品也具有相应的学科;4.用户只能对所属学科的作品进行操作;2.5网络设计原理2.5.1客户端/服务器模型本系统属于分布式应用系统,因此采用客户端/服务器模型。系统运行时,客户端程序向服务器程序请求服务,这就隐含了在建立客户端/服务器模型间通信时的非对称性,工作时要求有一套为客户端/服务器所共识的惯例——协议。服务程序通常在一个众所周知的地址监听客户对服务的请求,服务进程一直处于休眠状态,直到有客户对这个服务的地址提出了连接请求,服务进程被“惊醒”,并为客户服务——对客户的请求做出适当反应。2.5.2流套接字编程模型流套接字提供双向的、有序的、无重复并无纪录边界的数据流服务,是面向连接的。通信双方建立通信之前必须建立一条路径,这种方式既可以确定它们之间存在路径,又保证双方都是活动的。流套接字的服务进程和客户进程在通信前必须建立各自的套接字并建立连接,然后才能对相应的套接字进行“读”、“写”操作,实现数据传输。本项目利用MFC类库封装的CSocket类来完成流套接字的网络编程。流套接字编程流程:服务器Socket()Socket()Bind()Bind()Listen()Listen()Accept()Accept()Socket() 客户端Socket() 阻塞,等待客户请求 Connect() 建立连接Connect()Write()Read()请求数据Write()Read() 处理服务请求 Read()Write() 应答数据Read()Write()Close()Close() Close()Close()

第3章系统实现3.1服务器端详细设计3.1.1服务器端总的结构模块流程启动协同写作系统服务器启动协同写作系统服务器系统管理员登录系统管理员登录系统初始化,显示用户信息系统初始化,显示用户信息进入消息循环,接受相应命令信息进入消息循环,接受相应命令信息注销作品创建新作品删除用户添加新用户在线通信注销作品创建新作品删除用户添加新用户在线通信退出协同写作系统服务器退出协同写作系统服务器 3.1.2添加新用户模块模块功能:1.在用户信息表添加新纪录;2.根据输入参数完成新纪录的初始化;3.更新列表控件,将新的用户信息在列表控件中显示;具体操作:该模块需要对用户信息表(UserTable)进行操作。1.根据输入信息,给新纪录赋初值;2.向数据库中插入新纪录操作;3.将新纪录输出到列表控件中;执行流程:进入添加新用户模块进入添加新用户模块输入用户信息参数输入用户信息参数接收输入参数接收输入参数进入用户信息表进入用户信息表在用户表中插入新纪录在用户表中插入新纪录产生操作结果信息产生操作结果信息将新用户信息输出到列表将新用户信息输出到列表进入消息循环进入消息循环输入输出参数:输入:新建的用户编号(m_UI)、用户姓名(m_UN)、学科(m_S)、级别(m_P)、密码(m_PW);输出:当前用户信息;3.1.3删除用户模块模块功能:1.接收要删除的用户信息;2.根据接收参数,删除用户信息表中的纪录;3.更新列表控件,将删除的用户信息从列表中删除;具体操作:该模块需要对用户信息表(UserTable)进行操作。1.输入要删除用户信息的编号;2.根据输入用户信息,查找数据库中用户信息纪录;3.删除数据库中符合条件的纪录;4.将删除的用户信息从列表中删除;执行流程:进入删除用户模块进入删除用户模块输入要删除的用户编号输入要删除的用户编号接收输入参数接收输入参数访问用户信息访问用户信息表是符合条件的纪录?是符合条件的纪录?取出下一条纪录取出下一条纪录删除该纪录 Y N删除该纪录在列表中删除用户在列表中删除用户进入消息循环进入消息循环 输入输出参数:输入:要删除的用户编号(m_UI2);输出:void;3.1.该模块内容与新建用户模块相似,不再详细介绍。3.1.该模块内容与删除用户模块相似,不再详细介绍。3.1.在线通信的功能是通过两个CSocket类的派生类实现的。CListenSocket类主要完成侦听、响应连接请求;CClientSocket类主要完成与客户端之间信息的发送与接收功能。编程步骤:1.用create()函数创建套接字;2.用bind()函数将本地地址绑定到所创建的套接字上以在网络中标识该套接字;3.用listen()函数将套接字置监听模式,准备接收连接请求;4.当有客户请求连接时,用accept()创建新套接字接收连接请求;5.用receive()、send()函数接收、发送数据;6.用close()函数关闭套接字; 3.2客户端详细设计3.2.1客户端总的结构模块流程启动客户端程序启动客户端程序进入消息循环,接受相应的命令信息进入消息循环,接受相应的命令信息退出系统在线通信操作模块查阅作品信息文章编辑退出系统在线通信操作模块查阅作品信息文章编辑用户登录用户登录退出协同写作客户端程序退出协同写作客户端程序3.2.2用户登录模块模块功能:该模块主要是接收用户登录系统的请求以及接收用户登录信息,即用户编号和密码。凡在用户代码表(UserTable)没有相应记录的用户编号和密码均不能成功登录该系统,即使用该系统。登录界面如下图所示:具体操作: 该系统客户端的主界面就是用户登录界面,添加用户编号和密码以后,用户点击“登录”按钮时,该模块取得UserName和Password的值。系统根据用户输入的信息访问数据库的用户信息表,查看是否有满足条件的用户信息。如果有,则用户登录成功,反之登录失败。如果登录成功,则原来被禁止的各项操作控件被激活,用户根据自己的权限可以对文章进行各种相应的操作。如果用户选择“进入写作”,系统自动初始化:从返回信息中依次取出用户的各项信息,根据这些信息设置用户可以进行的操作。遍历数据库的作品信息表,将所有的作品信息纪录显示在列表控件中。用户左键点击列表中的作品信息,可以查阅所选择作品的正文,点击右键,弹出浮动菜单,可以查看相应作品的评论、备注;执行流程:启动系统,进入登录模启动系统,进入登录模块输入用户编号、密码输入用户编号、密码接收输入参数 接收输入参数根据取得信息访问数据库根据取得信息访问数据库访问下一条纪录访问下一条纪录是最后一条纪录?是与接收的用户编号相同? N是最后一条纪录?是与接收的用户编号相同? N Y 、 Y 该纪录的密码与接收的密码相同? 该纪录的密码与接收的密码相同? N Y 初始化系统写作界面 初始化系统写作界面 进入消息循环进入消息循环输入输出参数:输入:登录用户的编号(m_SUI),密码(m_SPW);输出:登录成功标志;3.2.3文章编辑模块 模块功能:该模块主要功能是提供给用户一个文字的编辑环境。具体操作:用户可以在这个编辑环境中进行文字的输入、文章的导入以及文字的剪切、复制、粘贴、删除及保存等编辑操作。其中文字输入、剪切、复制、粘贴、删除等功能系统初始化的时候已经完成。3.2.4查阅作品信息模块模块功能:该模块主要完成以下操作:1.从数据库中取出作品信息表中的所有纪录;2.将作品信息纪录输出到视图的列表控件中;3.点击作品列表,显示被点击作品的正文;4.右键点击列表,弹出浮动菜单,可以选择查看作品的正文、评论、备注;具体实现:该模块将需要访问作品信息表(WorksTable)。首先,在视图中对列表控件进行初始化,列出“作品编号”、“作品名称”、“学科”、“状态”等几项用户信息;然后,将作品信息表中的第一条纪录取出,将取出的作品信息纪录在列表中显示;取出下一条纪录,同样将取出的作品信息纪录在表中显示;重复上述操作,遍历并显示所有作品信息表中的纪录;当有作品被点击时,到数据库中查找该纪录,取出相应的信息;执行流程:进入查阅作品信息模块进入查阅作品信息模块进入消息循环进入消息循环点击列表控件点击列表控件取出被点击纪录的编号取出被点击纪录的编号访问数据库作品表纪录 访问数据库作品表纪录访问下一条纪录 访问下一条纪录是所点击的纪录? N是所点击的纪录? Y 显示相关信息显示相关信息3.2.5操作模块 模块功能:该模块实现不同级别的用户对文章进行操作的功能。其中包括:审阅作品、创建作品、提交写作、发表评论、编辑作品等操作。该模块界面如下:具体操作:审阅作品:用户可以通过点击列表控件中的作品纪录来查阅作品的备注内容。用户经审阅后,可将这些内容添加到作品正文。创建作品:当用户输入完要创建的作品信息后,系统接收这些参数,并根据这些参数对新作品进行初始化,并把新作品信息存储到数据库中,然后更新列表,显示新添加的作品。系统可通过服务器提示其他在线用户。提交写作:用户完成写作后,便可以将其写作的内容录入到原文中,系统接收到用户写作的内容后,便自动将其存储到数据库中。发表评论:当用户对文章有意见或建议时,便可以发表评论,系统接收到用户发表的评论后,便自动将其存储到数据库中。编辑作品:用户可以对作品原文进行修改,系统禁止其他用户修改此文章。修改完毕后提交,系统将修改过的文章存储到数据库中。3.2.6在线通信模块模块功能:在这个模块当中,完成了服务器端、客户端之间通信的功能。用户可以在在线信息视图中与其他用户进行沟通交流。具体实现:在线通信的功能是通过一个CSocket类的派生类来实现的,即CchatSocket类。编程步骤:用create()函数创建套接字;用connect()函数请求与服务器连接;得到允许后,用receive()、send()函数进行数据传输;4.用close()函数关闭套接字;

第4章调试与修改编程必然离不开要调试程序,没有一个程序员在开发程序的时候能一次性成功。在系统的具体实现当中,我也遇到了很多问题。首先是数据库与应用程序之间的衔接问题。我采用了用AppWizard生成支持ODBC数据源的形式来对数据库进行操作,但是,当程序同时支持多个表时,应用程序中显示的数据库内容却和数据库中的实际内容不同,出现数据混乱现象,程序不能正常运行,原因也很难找到。后来,我将数据库中的多个表共同建立了一个视图,使应用程序支持这个视图,这样,既解决了数据混乱的问题,又保证了应用程序对数据库的各项操作。还有就是视图之间的切换问题。这个问题也是比较难解决的。我定义了两个指向视图类的指针pOldActiveView和pNewActiveView。其中,pOldActiveView用于指向当前的活动视图,pNewActiveView根据传递的参数指向一个新视图,保存pOldActiveView所指向的当前活动视图文档,然后用pNewActiveView->Create()建新视图并初始化,隐藏当前视图,显示新视图。这样,就完成了视图之间的切换。类似的问题在编程过程中还有许多。我总结了一下,大都是因为对C++语法了解得不太深入和对VC++开发环境的不熟悉,不过这些问题还是通过查阅资料和请教老师同学一一解决了。4

4第5章经济技术分析协同写作系统要求在局域网的环境下运行。运行该软件所需的环境配置为:一台客户机、一台性能指标比较高的服务器;软件需求为Windows2000Server、MicrosoftSQLServer2000标准版、MicrosoftVisualC++6.0中文专业版。如果采用纯人工方式完成采编、校对、审阅等工作,不但耗工时较多,而且效率低下、出错率较高。在信息技术高速发展的今天,这种方式很难满足社会的需求。使用本系统能大大的缩短采编等工作的时间,减轻工作人员的劳动强度,避免冗余工作,从而降低成本。因此,开发此系统在经济上是完全可行的。从技术方面来讲,SQLServer2000本身就是功能强大的DBMS,所以后台数据库选择SQLServer2000设计本系统的数据结构。VisualC++6.0是基于对象的开发工具,用它开发的应用程序易于维护,Client/Server模式的前端工具,对数据库的应用开发有着特殊的支持,在技术上也是可行的。另外,SQLServer2000和VisualC++6.0都是微软的产品,在开发工具和数据库交互上比较好。因此,本系统能够较好的满足用户的需求,具有很强的可操作性和实用性。综合各方面考虑,可以说该系统具备经济可行性和技术可行性。

结论由于协作式工作系统开发很复杂而我的水平有限,还有时间的关系,本项目只实现了协同写作系统的基本功能,在网络环境下,该系统可以提供来自不同地域、不同责任的操作者访问共享文稿的写作平台,并提供了对文稿的编辑环境。在该系统实现的具体细节问题上有许多不足之处有待改进。例如,操作者正在编辑未发布的内容不能及时的通知其他的在线用户,对不同级别的操作者的操作权限区分的不是很明确。虽然由于我对工具掌握的不太好,成果不像自己构想的那样完美,但是,通过本次毕业设计,我还是学到了不少东西。第一,我学会了通过各种途径查找自己所需要的资料。第二,我对面向对象的程序设计思想有了一定的了解,并且积累了一些实际的经验。第三,本次毕业设计也是对大学四年所学的知识的一次总结,使我知道了自己对知识掌握的不足之处。第四,这次毕业设计使我得到了锻炼,增强了自学能力和独立分析问题的能力,培养了发现问题解决问题的能力。这些都为我

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论