实验六基于QT的远程控制详细设计报告【实验目的】1.了解人机界面;2.掌握使用过程设计工具描述模块的详细设计数据结构和算法;3.掌握设计说明书的撰写。
【实验内容】1.确定数据库的物理结构;2.评估物理结构;3.验证用户身份功能模块;4.系统总控制模块;5.修改更新授权功能模块;6.查询用户功能模块;7.显示查询用户明细功能模块;8.查询用户明细结果的编辑功能模块;9.撰写详细设计说明书。
【实验步骤】见附件【实验总结】通过此次实验,我们了解了人机界面;掌握了使用过程设计工具描述模块的详细设计数据结构和算法;掌握了设计说明书的撰写。
附件:目录1引言 (1)1.1 背景 (1)1.2 编写目的 (1)1.3 定义 (1)1.4 参考资料 (2)1.5 运行环境 (2)2 系统模块的软件结构 (2)2.1 模块设计 (2)2.2 屏幕监控模块结构 (3)2.3 文件操作模块结构 (4)2.4 命令操作模块结构 (4)3 验证用户模块设计说明 (5)3.1 用户登录模块设计 (5)4. 接口 (7)4.1 外部接口 (7)4.2 内部接口 (8)5 运行设计 (8)5.1 运行模块的组合 (8)5.2 运行控制 (9)5.3 运行时间 (9)6 软件测试基础 (9)6.1 软件测试的目标: (9)6.2 软件测试常用方法 (10)6.3 本系统采用的测试方法 (10)6.4 连接测试 (10)6.5 文件传输测试 (10)6.6 屏幕键盘鼠标传输测试 (11)6.7 测试结论 (12)7 总结 (12)1引言1.1 背景通常企业内部或者IT公司的客户技术支持部门都有技术支持业务,其任务是通过电话解答疑难问题,努力减少技术人员到现场服务或者让用户把设备送到支持中心进行维护。
这种技术支持方式尽管被普遍采用,但效率不高而且大大增加了技术支持成本。
通常,技术支持必须依赖技术人员和用户之间的口头交流来进行,这种交流既耗时又容易出错。
许多商业用户对计算机知之甚少,然而当遇到问题时,他们必须向技术人员提供故障情报及相关操作。
在尝试解决问题时,技术人员可能指导用户执行一系列复杂的过程,而这些过程对用户来说或许完全不熟悉;如果用户不能正确的按要求操作,反而使问题恶化。
此外,如果通过电话不能解决问题,那么在技术人员亲自到用户现场解决问题之前,计算机将无法继续使用,导致工作延误。
1.2 编写目的本文正是在上文提到的背景下提出的,目的就是为了解决计算机的远程操作,降低企业对软件的后期维护成本,设计出一款远程控制系统。
远程控制系统能使技术人员直接操作远程计算机,就像操作本地机器一样,无须用户介入,技术人员技能得到该机器的问题的第一手材料,从而加快了问题的解决。
实际上,使用远程控制工具的技术人员能够做到解答疑难问题,安装和配置软件,把软件下载到用户计算机上,配置应用程序和系统软件设置并可通过实际操作培训用户。
总之,本课题的设计与实现具有很大的现实意义。
1.3 定义软件结构图:软件结构包括构成系统的设计元素的描述、设计元素之间的交互、设计元素的组合模式以及在这些模式中的约束。
一个系统由一组构件以及它们之间的交互关系组成,这种系统本身又可以成为一个更大的系统的组成元素。
软件结构图也就是为了反映软件系统中组件之间相互关系和约束的体系结构设计图,称为软件体系结构图更为合适,一般通过分层次或分时间段等方式说明体系结构的各个组成部分的组合关系。
在结构化设计方法中,软件结构图主要分为变换型软件结构图和事务型软件结构图两种。
Qt:Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。
它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。
Qt是面向对象语言,易于扩展,并且允许组件编程。
2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。
1.4 参考资料[1] Jeffrey Richter.Windows核心编程.北京:机械工业出版社,2008.150-313[2]黄超.Windows网络编程.北京:人民邮电出版社,2002.254-281[3]网冠科技.Visual C++6.0时尚编程百例.北京:机械工业出版社,2004.198-210[4]李久进.MFC深入浅出.武汉:华中理工大学出版社,1999.302-365[5]郑阿奇.Visual C++ 实用教程.北京:电子工业出版社,2007.177-2151.5 运行环境(1)硬件环境最低配置:奔腾4处理器,512M内存,60G硬盘。
建议配置:奔腾双核T4400 2.2GHZ及其以上 2G内存、320G硬盘(2)软件环境A.windows 98 以上的操作系统B.Myeclipse 和 pl/sqlC.Microsoft office 20002 系统模块的软件结构2.1 模块设计本系统面向的对象有两种,一种是服务端,一种是客户端。
服务端只要是向客户端发送操作命令,客户端解析命令后执行相应操作,然后将结果返回给服务端,服务端再将结果显示出来。
屏幕监控,也就是将客户端的屏幕截图,然后发送给服务端。
由于截图图片格式为BMP,一帧图像数据量很大,因此在此模块中引用第三方开源类库CxImage,和压缩库zlib,将截图在内存中压缩成JPEG格式,然后再调用zlib 的压缩函数进一步对JPEG压缩,最后再发送给服务端。
鼠标和键盘的操作则是通过模拟来实现,在服务端捕获鼠标键盘操作后,服务端的命令连接就会将捕获的结果发送到客户端,客户端再通过调用mouse_event和keybd_event这两个API 函数进行模拟鼠标键盘操作。
该模块大致流程图如图2.1所示:图2.1屏幕监控大致流程图文件操作,包括文件上传、文件下载、删除文件、修改文件名、执行远程程序。
在文件传输过程中,服务端能显示传输进度,也可以终止传输。
该模块大致流程图如图2.2所示:图2.2文件操作大致流程图2.4 命令操作模块结构命令操作,包括系统注册表、服务、进程、消息广播、执行CMD、重启或关闭远程计算机等操作,命令操作传输的数据量小,响应快。
为了客户端程序能正常对进程、服务等操作,还必须对客户端进程进行提升权限操作。
该模块的功能模块图如图2.3所示:图2.3命令操作功能模块图3 验证用户模块设计说明3.1 用户登录模块设计系统用户登录主要用来验证用户的登录信息,完成用户的登录功能。
该模块的运行结果如图3.1所示。
3.1用户登录界面3.1.1 界面设计(1)在view 包下建立文件JF_login.java ,打开UI 设计器设置this 的layout 属性为BorderLayout 类型,其name 属性采用默认值borderlayout1,在borderlayout1上放置两个面板组件Jpanel1,其name 属性采用系统默认值jPanel1、jPanel2,其中jPanel1的constraints 属性为Center ,jPanel2的属性constraints 为north 。
(2)设置jPanel1的Layout 属性为GridLayout 类型,其默认值为gridlayout1,其中row 为2,columns 为2,在gridlayout 上放置2个JLabel 标签组件、2个JTextField 文本组件。
其中标签组件的text 类型设置为上图的文本名字,然后调整好组件位置。
(3)设置jPanel2的Layout 属性为FlowlayOut 类型,在jPanel2上放置两个远程协助系统远程注册表管远程服务管理 远程CMD 操作 远程进程管理 远程关机重启管JButton组件,用来响应用户的单击操作,其name属性为jBlogin和jBexit,其text属性分别为上图按钮中的文本。
用户登录模块UI设计器中的组件结构图,如图3.2所示。
3.2组件结构图3.1.2代码设计(1)输入用户ID后,按<Enter>键,系统校验该用户是否存在。
在公共方法jTuser_keyPressed()中,定义一个String类型变量sqlSelect用来生成SQL查询语句,再定义一个公共类RetrieveObject类型变量retrieve,然后调用retrieve的getObjectRow()方法,其参数为sqlSelect,用来判断该用户是否存在。
该方法的详细代码如下:public void jTextField1_keyPressed(KeyEvent keyEvent) {if(keyEvent.getKeyCode() == KeyEvent.VK_ENTER){String sqlSelect = null;java.util.Vector vdata = null;sqlSelect = "select username from tb_user where userid= '" + jTextField1.getText().trim() + "'";appstu.util.RetrieveObject retrieve = new appstu.util.RetrieveObject();vdata = retrieve.getObjectRow(sqlSelect);if (vdata.size() > 0){jLabel3.setText("当前用户姓名: " + String.valueOf(vdata.get(0)));jPasswordField1.requestFocus();}else{javax.swing.JOptionPane.showMessageDialog(null,"输入的用户ID不存在,请重新输入","系统提示",javax.swing.JOptionPane.ERROR_MESSAGE);jTextField1.requestFocus();} }}(2)如果用户存在,再输入对应的口令,输入的口令正确时,单击“登录”按钮,进入系统。
公共方法jTuser_keyPressed()的设计与jTextField1_keyPressed 的设计方法相似,其关键代码如下:public void jBlogin_actionPerformed(ActionEvent e) {// 此处省略了部分代码String sqlSelect = null;sqlSelect = "select count(*) from tb_user where userid= '" + jTextField1.getText().trim()+ "' and pass = '" + pass + "'";java.util.Vector vdata = null;appstu.util.RetrieveObject retrieve = new appstu.util.RetrieveObject();vdata = retrieve.getObjectRow(sqlSelect);if (Integer.parseInt(String.valueOf(vdata.get(0))) > 0){AppMain frame = new AppMain();this.setVisible(false);}else{javax.swing.JOptionPane.showMessageDialog(null,"输入的口令不正确,请重新输入", "系统提示",javax.swing.JOptionPane.ERROR_MESSAGE);jPasswordField1.requestFocus();return;}}4. 接口4.1 外部接口4.1.1 用户界面在用户界面部分,根据需求分析的结果,用户需要一个用户友善界面。