本科毕业设计(论文)
题 目 软件在线升级系统的设计与实现
院(系) 专业
学 号
学生姓名
指导教师
起讫日期 2015.1.11-2015.6.6
设计地点
摘要
就算是最专业的软件开发商也不可能在软件开发过程中做到完美,都会或多或少的存在这样或着那样的问题。软件开发商为了占领市场和继续发展客户,也为了自己产品的未来。软件升级这一概念我们听到的也就越来越普遍。对于用户来说,漏洞可以被软件升级来修补好,数据安全也会有很大一定的提升;软件开发商们为了开拓市场,增强自己产品的竞争力,也会不断升级自己的软件,力求把升级可以做到更好。可以说软件升级是一个一举多得的事情。该系统使用C/S模型编写。主要由服务端管理员登录模块,管理升级包模块,管理升级序列号模块,设置模块,与客户端段模块组成。整个程序编写完成之后实施并通过了了相关的测试与调试。保证运行正常。
系统实现的主要功能:
客户端:下砸升级包,安装升级包,备份当前系统,还原系统,保存升级历史
用户:运行系统,查看升级包列表,升级系统,查看升级历史
管理员:添加升级包,查看升级包状态,停用升级包,启用升级包,提升升级包版本,开启升级服务,关闭升级服务,增加可升级序列号,删除可升级序列号,查看可升级序列号,升级服务器,查看服务器升级历史,设置服务器密码,修改服务器密码,重置服务器密码
关键字:软件升级 客户端/服务器 升级包
Abstract
Even the most professional software developers can not do perfect existence, will more or less of this or that kind of problem in the software development process. Software developers in order to capture the market and the continued development of customers, but also for the future of their products. Software upgrade this concept we hear is more and more common. For users, the vulnerability can be repaired software upgrades, data security, there will be some great promotion; software developers to develop new markets, enhance the competitiveness of their products, will continue to upgrade their software, strive to Upgrading can do better. Software upgrades can be said to be a fully staffed thing. The system uses C / S model to prepare. The main login module by the server administrator, management upgrade package module, management module upgrade serial number, set up the module, and the client segment modules. After the completion of the preparation of the implementation of the entire program and passed the relevant tests and commissioning. To ensure normal operation.abstract
The main function of system implementation:
Client: The next hit upgrade package, install the upgrade package, back up the current system, restore the system, save the upgrade history
User: the operating system, view the upgrade package list, upgrade the system, view the upgrade history
Administrator: Add the upgrade packages, view the upgrade package status, disable the upgrade package to enable the upgrade package, upgrade version upgrade package, open upgrade services, upgrade services shut down, can be upgraded to increase the serial number, delete a serial number can be upgraded, view scalable sequence No, upgrade the server, view server upgrade history, set the server password, change the server password, reset the server password
Keywords: software upgrade the client / server upgrade package
目录
第1章 绪论 1
1.1 开发背景及意义 1
1.2 系统结构及组成 1
第2章 系统开发分析 3
2.1 经济可行性 3
2.2 技术可行性 3
2.3 操作可行性 3
第3章 系统理论基础 5
3.1 开发语言 5
3.2 开发工具 6
3.3 数据库SQLite 7
3.4 其他相关知识 7
第4章 系统总体设计 9
4.1 软件升级设计原理 9
4.2 软件升级设计流图 10
4.2.1 服务端系统流图 10
4.2.2 客户端系统流图 11
第5章 系统模块实现 12
5.1 系统主要界面介绍 12
5.1.1 服务端管理员登陆页面 12
5.1.2 服务端主页面 13
5.1.3 客户端主页面 13
5.2 业务模块详细介绍 14
5.2.1 服务端管理员登陆模块 14
5.2.2 管理升级包模块 17
5.2.3 管理升级序列号模块 20
5.2.4 设置模块 23
5.2.5 客户端模块 25
第6章 系统数据库总体设计 29
6.1 数据库设计 29
6.2 数据类型设计 29
6.3 软件升级系统UML数据库 32
6.4 软件升级系统UML图 33
第7章 系统调试与测试 35
7.1 系统使用环境 35
7.2 系统调试 36
7.3 系统测试 36
7.4 错误处理 36
第8章 总结与展望 38
8.1 总结 38
6.1.1 系统特色与创新 38
8.2 展望 38
8.3 感想 38
参考文献 40
致谢 41
第1章 绪论
据研究称,至今没有发现任何一个团队能够在软件的开发设计中将软件做得足够完美,不需要升级维护的,总是有着或多或少的由于考虑不周导致的问题,更有甚者还存在着相当多的漏洞;软件在不断的使用过程中用户会逐步的发现各种各样的问题,这些问题是来自各个方面的,软件自身肯定也会存在一定的问题,还有一部分原因可能是由于软硬件的运行环境改变而导致的,因此用户会有不断的完善产品功能的要求。因此软件升级这一概念我们听到的也就越来越普遍。对于用户来说,漏洞可以被软件升级来修补好,数据安全也会有很大一定的提升;软件开发商们为了开拓市场,增强自己产品的竞争力,也会不断升级自己的软件,力求把升级可以做到更好。
1.1 开发背景及意义
任何软件开发商都不可能把软件开发做到完美,软件在使用一段时间之后由于各方面的原因,总会出现这样那样的问题,随着新技术的出现,以及用户要求的不断增加,软件升级变得越来越重要。软件在软件的整个生命周期中,升级工作显得更加尤为重要,尤其是在当今社会高速发展的时期,各软件厂商为了拓展市场和增加竞争力,都对软件升级这个方面非常关心,投入相当数量的人力物力争取搞定这块难啃的骨头[1]。
现在基本国内各种软件都具备自动升级,或者在线升级的功能。例如腾讯QQ,当检测到有新版本时提示用户进行升级,用户确定升级之后,开始下载软件,下载完成后安装软件,安装完成自动删除升级包。其它的软件也和腾讯QQ的升级流程以及做法大致相同,在告诉发展的现代社会软件升级技术已变的越来越成熟,网络上也出现了大量的参考书籍,开发人员可以通过学习此类资料,开发出属于自己的,有自己公司特色的软件升级系统[2]。
1.2 系统结构及组成
该论文本着严肃认真的态度完成,保证是自己独力完成,无抄袭现象。现将论文结构及答题内容做以下介绍:
首先第二章介绍的是该项目使用的编程语言为Java与C#,数据库为sqlite,以及一些客户端与服务端的相关知识;接着第三章介绍的软件在线升级的设计原理,以及客户端与服务端的设计流图。这个在软件开发中是相当重要的;接着第四章介绍的是系统模块了,软件的界面以及各个模块的功能和具体实现代码。还有数据库的具体设计,还有软件升级系统的数据库UML表示法,和UML类图。我想这是其他论文里面所没有的,但是我在做项目时是真正用到的,我就写到里面了;接下来就是系统的调试与测试了,这也是一个软件所必要的。在这里面我加上了错误处理;接下来就是对我的软件升级系统的展望了,虽然说我的软件目前只针对的是我公司的升级系统,但是在公司全体员工的共同努力之下,会把他做到更好慢慢的推向市场;接着是参考文献和致谢词。这些都是一个论文必不可少的内容。
第2章 系统开发分析
2.1 经济可行性
软件开发商们为了使用户可以得到自己的升级软件,最开始的时候他们主要采取邮寄的方式,这种方法的缺点是非常明显的:一是邮寄耗费的时间较长,不能使用户获得最新的体验;二是邮寄花费了软件开发商的很大的一笔费用,如果软件每个月都要进行更新的话,这样一年下来邮递更新软件的费用也是一笔不菲的支出。三是:邮递过程中可能会导致更新文件的丢失,从而造成用户安装不完整,影响整个软件的使用。网络得到普遍应用之后的今天,用户可以从软件开发商的服务网站下下载软件升级包,对自己的软件进行升级。这样开发商不仅节省了很大一笔开支,操作简单方便,多余广大用户和开发商来说何乐而不为呢?
2.2 技术可行性
开发者一般都具有开发该系统所需的硬件条件,计算机。该系统使用C#与Java 语言进行开发,Java是目前使用范围最广的开发语言。它具有以下特性:面向对象、可移植、并发性、安全性、分布式、解释型、可靠性、平台无关、高性能、多线程、简单性、动态性[3]。C#语言继承和发扬了C和C++的几乎所有优点。正如前文所述,C#是专门为.NET应用而开发出的语言。这从根本上保证了C#与.NET框架的完美结合。使用这两种技术相结合,优势上互相补助,绝对不是一加一等于二的效果。
2.3 操作可行性
该升级系统采用目前十分流行的客户端/服务器模式,主要针对济南泰乐信息技术有限公司的测绘师软件进行升级。管理员登陆服务端之后首先将升级包放到服务器上,并且开启升级服务。就可以了。客户端用户检测服务端版本,如果发现服务端版本号高于客户端版本并且该客户端的升级序列号必须处于存放在可升级的序列号表中,该客户端用户单击升级按钮,将升级包下载到本地,首先备份当前的客户端系统数据,并关闭客户端,然后客户端开始安装升级包。安装完成之后,自动记录升级历史到数据库。这样看来,操作简单,易懂。满足很多用户的需求。
第3章 系统理论基础
本系统使用了Eclipse和Visual Studio 2013作为开发工具,使用了Java和C#以及SQLite数据库系统来开发本系统,前台使用了C#语言开发,后台主要使用Java来完成。
3.1 开发语言
Java是目前使用范围最广的开发语言。它具有以下特性:面向对象、可移植、并发性、安全性、分布式、解释型、可靠性、平台无关、高性能、多线程、简单性、动态性等。
Java语言的特点以表格的形式显示出来,简单,直接,让人一看赏心悦目。
表3.1 Java语言的特点和优势
特点名称 特点简介
面向对象 现实世界中任何实体都可以被看成是对象。现实世界中万事万物皆对象。对象之间都是通过消息来起到相互作用的。另外,现实世界中的所有的对象都可以归为某一类事物。实体又是事物的具体表现。Java编程语言支持,封装、继承、多态,三个基本特性。
平台无关性 Java可以实现一处编译处处运行的原理,真正实现了支持跨平台。
安全性 Java本身自带了一种”沙箱”,可自由定制,Java程序完全可以在这个沙箱中运行。规定了Java程序一定要在沙箱的内部才可以运行。在外不是不可以运行的,这是很关键的。
健壮性 垃圾回收机制(自动回收内存的过程),异常处理机制(在程序运行过程中有可能出现某些问题,对这些问题我们要进行处理)
C#语言也支持面向对象,支持多线程,解释型语言,安全性也很高,可靠性
表3.2 C#语言的特点和优势
特点名称 特点简介
简洁的语法 在缺省的情况下,C#的代码不允许直接对内存进行操作。它的最大的特点是去除了指针。与此相关的是,那些在C++中被疯狂使用的操作符(例如:“::”、“->”和“.,”)在C#中已经不再出现了,这样对语法进行了大量的简化。
与web相结合 C#已有的面向对象的知识与技巧被程序员们充分利用去开发Web服务。XML已经成为网络中数据结构传递的标准。这样就可以有效的处理各种数据。不必再担心数据的庞大与复杂。
安全性与错误处理 编程过程中会遇到很多的错误,这些错误常常产生的后果将会是难以预见的。我们为了尽量减少开发中的错误,编译器现在可以进行提醒了;C#中提供了边界检查与溢出检查功能。这样大提高了安全性,错误处理也进行了极大的提升。
支持面向对象 C#包含多种语言的特点。C#中没有了全局函数,没有了全局变量,也没有了全局常数。全部都必须封装在一个类之中。这样就真正实现了面向对象。
图2.2 C#语言的特点与优势
3.2 开发工具
表3.3 Eclipse的优势
优势 优势说明
“系出名门”+开源 eclipse最初是被IBM公司开发的一个软件产品,只是前期就投入了4千万美金。IBM公司与2001年11月将该产品捐赠给eclipse联盟,规定由该组织负责eclipse的开发与维护及其其他相关事宜。
“平台+插件” “平台+插件”的完整的体系结构被Eclipse采用,平台只是被当做一个简单的容器,所有的业务功能全部都会被封装在插件中,插件组件通过插件组件来构建。
灵活性高 Eclipse也在不断地提供更好的灵活性为工具开发商们,使用该工具进行更多的开发工作。这样他们就能更好的控制自己的软件技术。
表3.4 Visual Studio 2013的优势
优势 优势说明
TFS TFS将更加重视企业敏捷性,相信在新版本中还将提供更加完善的敏捷支持。
主页简洁明确 新的Team Explorer主页也更加简洁、明确,在各个任务间切换变得更加方便。
支持多个浏览器 全新的VS2013支持将多个浏览器作为自己的默认浏览器,这是在之前的版本中没有的功能。我们可以通过使用CTRL键来进行选择和控制。
3.3 数据库SQLite
SQLite的优势
1. 遵守ACID事务
2. 零配置无需任何安装和管理配置
3. 储存在单一磁盘文件中的一个相对完整的数据库
4. 支持数据库可至2TB大小
5. 足够小, 大致13万行C代码, 仅为4.43M空间
6. 更加简单, 轻松的API
3.4 其他相关知识
客户端/服务器模式通过不同的途径应用在很多不同类型的应用程序中,最常见就是目前在因特网上使用的网页。当你的网页浏览器向维基百科请求一个指定的文章时,百度百科服务器从百度百科的数据库中找出所有该文章需要的信息,结合成一个网页,再发送回你的浏览器上。C/S模式只是一个逻辑概念,不是指计算机设备。从双方建立联系的方式来看,主动启动通信的应用叫客户端,被动等待通信的应用叫服务器。
表3.5 服务器/客户端特征
服务器特征 被动的角色(从)。
等待来自用户端的请求。
处理请求并传回结果。
客户端特征 主动的角色(主)。
发送请求。
等待直到收到回应。
这些信息的作用域可以是全局的或者某个事务的。例如:静态 HTML 页面服务器就是一个无状态服务器,Apache Tomcat 则是一个有状态服务器。
第4章 系统总体设计
4.1 软件升级设计原理
软件升级的基本原理如下:
4.2 软件升级设计流图
4.2.1 服务端系统流图
图4.1 服务端系统流图
4.2.2 客户端系统流图
图4.2客户端系统流图
第5章 系统模块实现
5.1 系统主要界面介绍
5.1.1 服务端管理员登陆页面
服务端管理员登陆页面比较简单,因为我们的宗旨就是让软件变得简单、易用,满足大多数用户的需求。
服务端管理员登陆页面如图5.1所示:
图5.1 服务端管理员登陆页面
该页面由输入密码框,登录按钮,取消按钮组成。
(1)输入密码框:管理员用户在输入密码框中输入密码,该服务端系统存在默认密码。
(2)登录按钮:管理员用户输入密码,单击登录按钮之后,可以登录到服务端主页面。
(3)取消按钮:如果用户输入密码之后,不再想登录,这时可以单击该按钮,从而取消登录。
简单的使用说明:在登陆界面(图4.1)输入密码(默认密码123456),如图2.1所示,点击“登录”按钮,进入“主界面”(图4.2,默认进入管理升级包界面)。
5.1.2 服务端主页面
服务端主页面,详细可以分为管理升级包模块,管理升级序列号模块,设置模块。
服务端主页面如图5.2所示:
图5.2 服务端主页面
各功能模块还进行了详细划分,具体各部分功能在下文介绍。
(1)管理升级包模块:主要完成查看服务器上的升级包,进行启用升级包,停用升级包,提升升级包版本的相关功能。
(2)管理升级序列号模块:主要完成查看可升级的序列号,增加可升级的序列号,删除可升级的序列号的功能。
(3)设置模块:主要完成开启/关闭升级服务,修改服务端登录密码的功能。
5.1.3 客户端主页面
客户端主页面主要完成客户端升级功能,该界面简单、易用,但是功能强大,足以满足大多数用户的使用需求。
客户端主页面如图5.3所示:
图5.3 客户端主页面
(1)当前版本:在该页面中显示出客户端当前版本号信息。
(2)最新版本:在该页面中显示服务端最新版本号信息。
(3)升级按钮:单击该按钮可以完成客户端系统的升级。
(4)升级历史:该列表中显示升级历史信息。
(5)升级进度:客户端系统升级过程中显示升级进度信息。
5.2 业务模块详细介绍
5.2.1 服务端管理员登陆模块
图5.4 服务端管理员登陆模块
该模块如图5.4所示,管理员用户只需要输入登录密码,单击登录按钮系统就会默认登录到如图5.2所示的服务端主页面。具体实现代码为:
namespace CaseSerch
{
private void button2_Click(object sender, EventArgs e)
{
//登录
if (textBox1.Text.Trim() != “”)
{
if (textBox2.Text.Trim() != “”)
{
//从数据库中读取数据
DataTable dt = db.getDataTable(“select * from S_user where Uname=’” + textBox1.Text.Trim() + “’”);
if (dt.Rows.Count > 0)
{
if (dt.Rows[0][2].ToString().Trim() == textBox2.Text.Trim())
{
lblInfo.Text = “登录成功!”;
lblInfo.Visible = true;
this.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close();
}
else
{
//输入的密码不正确时,给出密码不正确的提示
lblInfo.Text = “密码不正确!”;
lblInfo.Visible = true;
}
}
else
{
//输入的账号不正确时,给出用户不存在的提示
lblInfo.Text = “用户不存在!”;
lblInfo.Visible = true;
}
}
else
{
//输入的密码为空时,给出密码为空提示
lblInfo.Text = “密码不能为空!”;
lblInfo.Visible = true;
}
}
else
{
//输入的账号为空时,给出用户名为空提示
lblInfo.Text = “用户名不能为空!”;
lblInfo.Visible = true;
}
}
private void Login_Load(object sender, EventArgs e)
{
lblInfo.Visible = false;
}
}
}
5.2.2 管理升级包模块
图5.5 服务端主页面
(1)升级包列表:在该列表中管理员用户可以查看升级包的版本号与升级包的状态。
(2)启用升级包按钮:选择某个状态为已停用的升级包,单击该按钮之后可以启用升级包。
(3)停用升级包按钮:选择某个状态为已启用的升级包,单击该按钮之后
可以停用升级包。
(4)提升升级包版本按钮:单击该按钮可以将非最新版的升级包提升到最新版本。
简单使用说明:
(1)如图5.5所示,“升级包列表”中会显示出升级包的版本号和状态(前提是服务端存在升级包),在升级包列表中选择一个“状态”为“已停用”的升级包,如图5.5所示,点击下方的“启用升级包”按钮,等待启用完成,该升级包的状态在“升级包列表”中显示为“已启用”。
(2)在“主界面”(图5.1),“升级包列表”中选择一个“状态”为“已启用”的升级包,如图5.5所示,点击下方的“停用升级包”按钮,等待停用完成,该升级包的状态在“升级包列表”中显示为“已停用”。
(3)在“主界面”(图5.5),“升级包列表”中选择一个升级包(提升完成之后状态不会改变),如图4.2所示,点击下方的“提升升级包版本”按钮,等待提升完成,该升级包的版本号成为最新版本号。
(4)如图4.5所示,管理员用户可以在升级包列表中查看升级包状态。
该模块如图4.5所示,管理员用户可以在升级包列表中查看升级包的版本以及状态,选择状态为停用的升级包,单击下方的启用升级包按钮,即可启用升级包。采用相同的方式对某个已启用的升级包进行停用。如果当某个升级包出现错误时,可以将低于该版本的安装包提升为最新版本,重新进行安装,从而去除错误,此时可以通过单击下方的提升升级版本按钮来完成。
具体实现代码为:
//管理升级包部分代码
public void dataGridView1Bind()
{
//从数据库中读取数据,显示所有升级包
System.Data.DataTable dt = db.getDataTable(“select ID,VNum as 版本号,Status as 状态 from SoftUpdate “);
dataGridView1.DataSource = dt;
dataGridView1.Columns[0].Visible = false;
}
//启用升级包
private void btn1_Click(object sender, EventArgs e)
{
int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim());
string sql = “update SoftUpdate set Status=1 where id=” + id + “”;
int count = db.RunSQL(sql);
if (count > 0)
{
MessageBox.Show(“修改成功!”);
}
else
{
MessageBox.Show(“修改失败!”);
}
}
//停用升级包
private void btn2_Click(object sender, EventArgs e)
{
int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim());
string sql = “update SoftUpdate set Status=0 where id=” + id + “”;
int count = db.RunSQL(sql);
if (count > 0)
{
MessageBox.Show(“修改成功!”);
}
else
{
MessageBox.Show(“修改失败!”);
}
}
//提升升级包版本
private void button3_Click(object sender, EventArgs e)
{
int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim());
string strsql = “select * from SoftUpdate where id=’”+id+”’”;
System.Data.DataTable dt = db.getDataTable(strsql);
string newbanben = dt.Rows[0][“VNum”].ToString() + “V2.0”;
string sql = “update SoftUpdate set VNum=’” + newbanben + “’ where id=” + id + “”;
int count = db.RunSQL(sql);
if (count > 0)
{
MessageBox.Show(“修改成功!”);
}
else
{
MessageBox.Show(“修改失败!”);
}
}
5.2.3 管理升级序列号模块
图5.6 管理升级包序列号模块
(1)可升级的序列号列表:在该列表中可以查看哪些序列号可以进行升级。
(2)增加按钮:单击该按钮可以增加可升级的序列号。
(3)删除按钮:单击该按钮可以删除可升级的序列号。
简单使用说明:
(1)在主界面(图5.1)中选择“管理升级序列号”选项卡,进入“管理升级序列号”界面(图5.6)。
(2)在“管理升级序列号”界面(图5.6)中,如图5.6所示,“可升级的序列号”列表会显示出可进行升级的序列号,如图5.6所示,在“请输入要增加的升级序列号”中输入要增加的序列号,待显示为“可增加时”,如图5.6,点击“增加”按钮。待增加完毕,在“可升级的序列号”列表显示出刚刚增加的序列号。
(3)在“管理升级序列号”主界面(图5.6)中,在“请输入要删除的升级序列号”中输入要删除的序列号,待显示为“可删除”时,如图5.6所示,点击“删除”按钮。待删除完成,会看到在“可升级的序列号”列表中,之前输入的序列号会被删除。
(4)如图5.6所示,管理员用户可以在“可升级的序列号列表”查看可升级的序列号。
该模块如图5.6所示,管理员用户可以在可升级的序列号列表中查看可升级的序列号,在输入要增加的升级序列号文本框中输入要增加的序列号,待显示可增加之后,单击增加按钮,即可在下方的可升级的序列号列表中看到刚增加的序列号,在输入要删除的升级序列号列表中输入要删除的序列号,待显示可删除后,单击删除按钮,即可在下方的可升级序列号列表中看到输入的序列号已删除。
具体实现代码为:
//可升级的序列号
public void dataGridView2Bind()
{
System.Data.DataTable dt = db.getDataTable(“select ID,SerialNum as 序列号 from Serial “);
dataGridView2.DataSource = dt;
dataGridView2.Columns[0].Visible = false;
}
//添加可升级的序列号
private void button1_Click(object sender, EventArgs e)
{
//将升级序列号添加到数据库中
string Num = txt1.Text.Trim();
string sql = “insert into Serial(Serial)values(‘” + Num + “’)”;
int count = db.RunSQL(sql);
if (count > 0)
{
MessageBox.Show(“插入成功!”);
}
else
{
MessageBox.Show(“插入失败!”);
}
}
//删除序列号
private void button2_Click(object sender, EventArgs e)
{
string strsql = “select * from Serial where SerialNum=’” + txt2.Text.Trim() + “’ “;
System.Data.DataTable dt = db.getDataTable(strsql);
if (dt.Rows.Count > 0)
{
if (MessageBox.Show(“确定要删除这条序列号么?”, “提示”, MessageBoxButtons.YesNo) == DialogResult.Yes)
{
{
string delSql = “delete from S_Case where SerialNum=’”+txt2.Text.Trim()+”’”;
db.RunSQL(delSql);
}
}
dataGridView2Bind();
}
}
}
5.2.4 设置模块
图5.7 设置模块
(1)升级服务状态:显示当前升级服务的状态
(2)开启/关闭升级服务:当升级服务状态为关闭/开启时,单击该按钮可以完成开启/关闭升级服务的功能。
(3)旧密码:输入服务端旧密码,进行验证。
(4)新密码:输入修改后的新密码。
(5)确认密码:用来确认用户输入的新密码。
(6)确定:单击该按钮将完成修改密码的功能。
(7)取消:单击该按钮将取消修改密码的功能。
(8)重置:单击该按钮将清空各密码框中输入的密码,使用户重新输入。
简单使用说明:
(1)在主界面(图5.1)中点击“设置”选项卡,进入“设置”界面(图4.7)。
(2)在“设置”界面中,“升级服务状态”为已开启时,如图5.7所示,点击“关闭升级服务”按钮。
(3)在“设置”界面中,“升级服务状态”为已开启时,如图5.7所示,点击“关闭升级服务”按钮。
(4)在“设置”界面的“修改密码列表”中,在“旧密码”中输入旧密码,在“新密码”中输入修改后的密码,在“确认密码”中再次输入修改后的密码,点击“确定”按钮,修改完成。点击“取消”按钮,取消修改密码,点击“重置”按钮,将清空输入的密码。
该模块如图4.7所示,用户可以在升级服务状态中查看当前升级服务的状态,可以开启/关闭升级服务,可以对服务端密码进行修改。
具体实现代码为:
//关闭服务状态
private void button5_Click(object sender, EventArgs e)
{
string strsql = “select * from SoftUpdate where Status=1”;
System.Data.DataTable dt = db.getDataTable(strsql);
if (dt.Rows.Count >= 0)
{
label6.Text = “已关闭”;
string sql = “update SoftUpdate set Status=0”;
int count = db.RunSQL(sql);
}
else
{
MessageBox.Show(“升级服务已经全部关闭”);
}
}
//修改密码
private void BtnUser_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex = 3;
System.Data.DataTable dt = db.getDataTable(“select top 1 * from S_User “);
if (dt.Rows.Count > 0)
{
txtUpname.Text = dt.Rows[0][“Uname”].ToString();
}
else
{
MessageBox.Show(“数据库中没有添加账号!”);
btnuppwd.Enabled = false;
}
}
private void btnuppwd_Click(object sender, EventArgs e)
{
string sql = "select * from S_user";
System.Data.DataTable dt = db.getDataTable(sql);
if (txtNowpwd.Text.Trim() == dt.Rows[0]["Pwd"].ToString())
{
if (txtBNewpwd.Text.Trim() != "" && txtTruepwd.Text.Trim() != "" && txtBNewpwd.Text.Trim() == txtTruepwd.Text.Trim())
{
int count = db.RunSQL("update S_user set Pwd='" + txtTruepwd.Text.Trim() + "',Oldpwd='" + txtTruepwd.Text.Trim() + "',Uptime=#" + DateTime.Now + "#");
if (count > 0)
{
MessageBox.Show("修改成功!");
txtNowpwd.Text = "";
txtBNewpwd.Text = "";
txtTruepwd.Text = "";
}
else
{
MessageBox.Show("修改失败!");
}
}
else
{
MessageBox.Show("前两次输入密码不相同!");
}
}
else
{
MessageBox.Show("当前密码错误!");
}
5.2.5 客户端模块
图5.8 客户端模块
简单使用说明:
(1)该系统安装完成并运行之后,主界面如图5.8所示,“当前版本”显示当前客户端的版本号。“最新版本”显示服务端的最新版本号。如果最新版本高于当前版本,如图5.8所示,点击“升级”按钮,进行客户端系统的升级。
(2)待升级完成之后,如图5.8所示,“升级历史列表”中会显示出升级历史。如果未对软件进行过升级该列表将显示为空。
该模块如图5.8所示,该模块可以完成查看当前升级包版本,查看服务端最新版本号,查看客户端升级历史,查看升级进度的功能。
具体实现代码为:
namespace CaseSerch
{
public partial class shengji : Form
{
SqlHelper db = new SqlHelper();
public int id = 0;
public shengji()
{
InitializeComponent();
}
private void shengji_Load(object sender, EventArgs e)
{
dataGridView1Bind();
string sql = “select * from SoftUpdate where id=” + id;
DataTable dt = db.getDataTable(sql);
if (dt.Rows.Count > 0)
{
label2.Text = dt.Rows[0][“VNum”].ToString();
}
}
//软件升级历史
public void dataGridView1Bind()
{
System.Data.DataTable dt = db.getDataTable(“select ID,VNum as 版本号,NewVNum as 新版本号,format(Uptime,’yyyy-MM-dd ‘) as 升级时间 from SoftUpdate where Status=true”);
dataGridView1.DataSource = dt;
dataGridView1.Columns[0].Visible = false;
}
//软件升级按钮
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == “”)
{
MessageBox.Show(“请输入正确版本号”);
}
else
{
string sql = “update SoftUpdate set NewVNum=’” + textBox1.Text + “’,Uptime=#” + DateTime.Now + “# where id=”+id+”“;
int count = db.RunSQL(sql);
if (count > 0)
{
MessageBox.Show("升级成功");
}
else
{
MessageBox.Show("升级失败!");
}
}
dataGridView1Bind();
}
}
第6章 系统数据库总体设计
6.1 数据库设计
当软件在线升级系统分析设计完成后,下面就是进行数据库的分析和实现。数据库的设计主要包括建立数据库,创建数据表与字段,也可设数据视图及存储过程,这些设计工作通常是在数据库管理系统环境下操作并实现的。在本系统中,数据库的数据表包括:管理员用户数据表、服务端升级历史表、更新包信息表、升级序列号表、更新服务状态表、客户端更新历史表、客户端版本表、权限表、角色表、角色权限表。
6.2 数据类型设计
表-TOperationLog用于存储操作日志信息
表6.1 TOperationLog
字段名 类型 说明
OperationLogId 整数 唯一标识一条操作日志,自动加1
Logger 字符串 日志的记录者
Datetime 字符串 日志记录时间
Content 字符串 日志的内容
ClientUserId 整数 唯一标识一条客户端用户信息(若某操作为管理员进行时,该id为空)
ManagerId 整数 唯一标识一条管理员信息(若某操作为客户端用户进行时,该id为空)
表-TUpdateLog用于存储更新日志信息
表6.2 TUpdateLog
字段名 类型 说明
UpdateLogId 整数 唯一标识一条更新日志,自动加1
Logger 字符串 日志的记录者
Datetime 字符串 日志记录时间
Content 字符串 日志的内容
ClientUserId 整数 唯一标识一条客户端用户信息
表-TClientUser用于存储客户端用户信息
表6.3 TClientUse
字段名 类型 说明
ClientUserId 整数 唯一标识一条客户端用户信息,自动加1
Roleid 整数 唯一标识一条角色信息
表-TManager用于存储管理员用户信息
表6.4 TManager
字段名 类型 说明
ManagerId 整数 唯一标识一条管理员用户信息,自动加1
Roleid 整数 唯一标识一条角色信息
表-TClientHistory用于存储客户端升级历史信息
表6.5 TClientHistory
字段名 类型 说明
ClientHistoryId 整数 唯一标识一条客户端升级历史信息,自动加1
Content 字符串 升级历史的内容
Date 日期 升级历史的创建时间
Name 字符串 升级历史的名称
ClientUserId 整数 唯一标识一条客户端用户信息
表-TServerHistory用于存储客户端升级历史信息
表6.6 TServerHistory
字段名 类型 说明
ServerHistoryId 整数 唯一标识一条服务端升级历史信息,自动加1
Content 字符串 升级历史的内容
Date 日期 升级历史的创建时间
Name 字符串 升级历史的名称
ManagerId 整数 唯一标识一条管理员信息
表-TUpdatePackage用于存储客户端升级历史信息
表6.7 TUpdatePackage
字段名 类型 说明
PackageId 整数 唯一标识一条更新包信息,自动加1
PackageName 字符串 更新包名称
PackageVersion 字符串 更新包版本
PackageStatus 数字 0:停用、1:启用
DateTime 日期型 更新包的上传日期
ManagerId 整数 唯一标识一条管理员用户信息
表-TUpdateSN用于存储升级序列号信息
表6.8 TUpdateSN
字段名 类型 说明
UpdatesnId 整数 唯一标识一条升级序列号信息,自动加1
UpdateSN 字符串 升级序列号
表-TClientVersion用于存储升级序列号信息
表6.9 TClientVersion
字段名 类型 说明
VersionId 整数 唯一标识一条客户端版本信息,自动加1
Version 字符串 客户端版本
DateTime 日期型 该版本的更新时间
表-TUpdateServerStatus用于存储升级序列号信息
表6.10 TUpdateServerStatus
字段名 类型 说明
StatusId 整数 唯一标识一条更新服务状态信息,自动加1
Status 数字 0:关闭、1:开启
DateTime 日期型 该状态的切换时间
表-TRole用于存储升级序列号信息
表6.11 TRole
字段名 类型 说明
RoleId 整数 唯一标识一条角色信息,自动加1
Role 字符串 角色名称
Type 整数 0:管理员用户、1:客户端用户
Notes 字符串 角色说明信息
PermissionId 整数 唯一标识一条权限信息
表-TPermission用于存储升级序列号信息
表6.12 TPermission
字段名 类型 说明
PermissionId 整数 唯一标识一条权限信息,自动加1
Name 字符串 权限名称
Notes 字符串 权限说明信息
6.3 软件升级系统UML数据库
软件升级的数据库的UML表示
图6.14 UML数据库表示法
6.4 软件升级系统UML图
软件升级系统UML图
图4.10 软件升级UNL类图
第7章 系统调试与测试
7.1 系统使用环境
一、服务器要求(最低配置要求):
1.1G空间容量
2.支持SQLite数据库二、客户端要求:
1.硬件配置:标准配置,普通家庭计算机即可使用本系统。
2. 软件配置:WindowsXP/Win7操作系统
三、网络环境
既可以用有线网络如宽带网络、ADSL拨号上网等上网方式访问本系统,也可以通过无线网络、WIfi等访问。
四、软件安全标准
GTT-B级安全标准:适用于学校、政府、企业等网站应用系统。身份认证信息加密;权限分配严格;数据备份;安全日志;系统运行环境维护严格。
表5.1 软件安全标准
序号 机制 说明
1 用户身份认证 一般身份认证(加密):用户名+密码+验证码
2 严格的权限管理 可设多个管理员,自由分配选项管理权限
3 数据备份与恢复 数据备份方式:手动备份;数据恢复办法:还原某一数据备份文件。
4 系统日志 系统自动记录用户登录与操作信息
5 数据关联控制 依据数据本身的状态与时效性、数据之间的关联,严密控制数据的录入、修改、删除。
7 全面测试 单元测试、集成测试、系统测试。
8 运行环境安全 1.关闭没有使用的服务如:Telnet和FTP
2.检查操作系统的开放端口,关闭不用的端口。
3.使用不间断电源支持 如:UPS
7.2 系统调试
在该系统具体设计的过程中,可能会出现一些错误。对于语句出现的语法错误,程序运行时,系统会自动提示,要求用户立即纠正,因此这些错误很容易被发现和纠正。但是,错误的是一类程序执行的,因为用户无法正常运作或一些数据的计算造成错误结果的逻辑错误。这种类型的错误隐藏的,有时,有时不会出现,因此,会出现解决这种动态的错误是很费时间的。
7.3 系统测试
软件测试是为了确保软件产品的改进,保证软件产品的质量稳定性和可靠性的最重要的手段。它是实现软件规格,设计规格和功能,以实现最终的审核。该测试的目的是基于公司最小的人力,物力和时间投入尽可能多地识别各种潜在的软件错误和软件产品的缺陷。需要提供软件可靠性测试的结果。设计测试用例,有两种方法:黑盒测试与白盒测试。该测试采用了黑盒测试中最可能值的方法来检查程序的准确性,并提高了调试和结果的必要功能。
7.4 错误处理
表7.1 错误处理
错误情况 情况说明 处理方法
网络传输错误 客户端与服务端传输数据时出现 1.提示用户检查网络连接情况
2.如果网络连接正常,设置一段时间后客户端再次申请与服务端连接
3.重新连接之后继续进行之前未完成的传输
网络中断 服务端与客户端连接时出现 1.提示检查网络线路连接情况
2.提示检查防火墙设置问题
3.提示检查IE浏览器设置问题
4.提示检查是否受到病毒、木马的攻击
数据库连接错误 读取数据库数据时出现 1.检查服务器使用的端口是否被占用
2.服务端或客户端网络配置错误
3.检查数据库服务是否启动
4.数据库安装步骤是否有错
5.数据库安装版本的问题
找不到指定文件或打不开文件 查找指定某文件或打开某文件时出现 1.检查文件是否被删除
2.若被删除创建一个缺省文件
3.检查文件格式
4.查看是否被隐藏
参数无效 参数传递,安装软件进行配置时出现 1.检查参数个数,类型,长度
2.检查参数配置是否出错
端口被占用 客户端,服务端或数据库安装时出现 1.修改被占用端口
2.更换软件安装时需要的端口
查询数据超时 在数据库中读取数据时出现 1.检查是否内存不足
2.是否表中内容太多查不出
3.检查查询语句是否正确
存储数据失败 往数据库写入数据时出现 1.数据可能正在被占用
2.数据表中缺少要存储的字段
3.连接不到数据库
4.存储语句错误
登录服务器失败 管理员用户登录服务器时出现 1.密码错误
2.数据库中未存储密码
修改服务器密码错误 管理员修改服务器密码时错误 1.管理员输入旧密码错误
2.两次输入的新密码不相等
3.管理员忘记原始密码
第8章 总结与展望
8.1 总结
6.1.1 系统特色与创新
1.界面简洁,结构紧凑:界面模块化设计,易于操作使用。
2.数据库:数据保存到数据库,可随时调出查看。
3.随时升级:标准更新之后,可以及时升级软件。
8.2 展望
确立论文的最开始阶段我正在济南泰乐信息技术有限公司实训,这是一个测绘类的公司,软件部门只是其中一个很小的组成。我从一个学生慢慢的到一个社会人的转变的关键时期,在这个公司我学到了很多东西,不仅仅是学到了软件开发的知识,还学会了待人接物,为人处世的很多道理。后来我们公司的经理看了毕业论文设计之后让我询问指导老师可以用公司的项目做论文设计吗,经过学院指导老师的同意,我的毕业设计就成了现在这个软件在线升级系统了。
这个系统从最开始的系统需求说明书,到用户使用手册,到诊断报告,到UML数据库类图,到数据库表示,我自己慢慢的在摸索中成长。一步一步的朝着我的目标迈进,天天带着梦想一起飞翔。这个升级系统目前是这针对济南泰乐信息技术有限公司测绘师项目进行的升级,后期还会增大实用性,对公司其他软件进行升级,这样可以做到一举多得到效果。界面简洁,流畅,用户操作方便可以实现用户所能够想到的绝大多数任务。如果推出到市场,会有很大的市场空间,只要做好就可以占据极大的市场份额。
8.3 感想
学习是为了可以得到应用,有句话叫学以致用,真正的可以做到这个词的很多。我们刚刚毕业的大学生,最终的目标就是可以做到学以致用,学校里学到的东西拿出来自己能够真正的用得到,才不会辜负四年的青春,不会辜负那些年付出的努力,我们为了高考走过了那么多路,吃过那么多苦,为的就是这一天。慢慢的一步一步,一天一天的我走到了毕业,走到了今天这个伟大的日子。
刚开始根本不懂得如何写论文,到今天能够完整的写完这篇论文,让我学到了很多东西,让我有了足够的信心,去面对以后的艰难险阻,面对以后的人生。我知道我的程序设计在一定程度上还存在着很多的不足,这些不足也是我以后更加努力学习技术的动力,也是我继续深入研究技术的不竭的源泉。我一定会努力继续下去。慢慢的做一个对社会有更大帮助的人。实现自己的人生理想。
参考文献
[1]林信良。 JSP&Servlet学习笔记[M].清华大学出版社, 2012.5
[2]陈道鑫,宋绍云,袁中旺等。ExtJS框架在Web软件开发中的应用[J].电脑知识与技术2011,07(9):2044-2047
[3]郭贤海,詹英。通用自动升级系统的研制与开发[J]。计算机时代2009,(02):60-61
[4]魏汪洋,许翠霞,张明川。基于WEB服务的一种软件自动升级方法及实现[J]福建电脑,2008,(07):20-21
[5]谢峰。软件升级程序的设计与实现[J].大众科技,2009,(05):84-85
[6]武俊。软件自动升级方法的研究。[D].西南石油学院
[7]彭作民。基于HTTP协议的文件上传下载的实现[J]南京师大学报
[8]陈华恩。JAVA设计模式研究之抽象工厂模式.电脑知识与技术,[J] 2010(9): 第2245-2246页.
[9] Metsker SJ。Java设计模式[M].第2版.电子工业出版社,2012.9
[10]王海涛,-贾宗璞。基于Struts和Hibernate的Web应用开发[J].计算机工程,2011, 37(9):113.
[11]傅鹏,殷旻昊.基于Structs+Spring+Hibernate+Ajax技术的科研管理系统设计[J].软件导刊,2009, 8(1):135-136.
[12]龚瑜江,红黄永.基于Struts的Web开发[J].计算机与数字工程,2009,37(232):58-62.
[13]李峰,刘彦隆. 基于SSH框架与jquery技术的Java Web开发应用[J].科技情报开发与经济,2010,20(6):106-109.
[14] 耿祥义编著.JSP基础编程[M].清华大学出版社,2010.55-162
[15] 孙鑫编著.Java Web开发详解[M].电子工业出版社,2010.189-274
[16] 林上杰,林康司编著.JSP2.0技术手册[M].电子工业出版社,2011.3-6
[17] 萨师煊,王珊.数据库系统概论(第三版)[M].北京:高等教育出版社,2009.
[18]马国财.基于JSP技术的MIS系统中复杂查询器的设计与实现[J].青海大学学报(自然科学版),2009,(02).
[19]李佳.基于JSP技术的网页自动生成工具的实现[J].电脑开发与应用,2009,(03)
[20]梁玉环,李村合,索红光.基于JSP的网站访问统计系统的设计与实现[J].计算机应用研究,2009,(04)
[21]熊皓,杨月英.JSP自动生成工具的设计与实现[J].黄石理工学院学报,2010,(04)
[22]韩世芬.基于JSP网页自动生成工具的开发[J].科技资讯,2010,(17)
[23]孙年芳.基于JSP网页自动生成工具的设计与实现[J].计算机与信息技术,2010
[24] 杜波依斯. MySQL技术内幕[M]. 第4版. 人民邮电出版社 , 2011年07月.
[25] 林信良. JSP & Servlet学习笔记[M]. 清华大学出版社, 2012年05月.
[26] 张峋, 杨三成. 关键技术:JSP与JDBC应用详解[M].中国铁道出版社, 2010年11月.
[27] 张银鹤. 点石成金:JSP+Ajax网站开发典型实例[M].电子工业出版社, 2009年01月.
[28] Weiss, MA. 数据结构与算法分析:Java语言描述[M]. 第2版. 机械工业出版社, 2009年01月.
[29] Metsker S J. Java设计模式[M]. 第2版. 电子工业出版社, 2012年09月.
[30]Abdellatif,T.andF.Boyer.Anodeallocation system for deploying JavaEE systems on Grids. [J]2009.Hammemet, Tunisia.
致谢
学习是为了可以得到应用,有句话叫学以致用,真正的可以做到这个词的很多。我们刚刚毕业的大学生,最终的目标就是可以做到学以致用,学校里学到的东西拿出来自己能够真正的用得到,才不会辜负四年的青春,不会辜负那些年付出的努力,我们为了高考走过了那么多路,吃过那么多苦,为的就是这一天。再次毕业论文结束之际我要特别感谢我的指导老师——郭笃刚老师,他的严谨认真的治学态度,值的广大老师同学的学习,我向郭老师表示诚挚的敬意。
这四年感谢潍坊科技学院的培养,谢谢各位老师在我的人生道路和生活中的给出的指导和建议。特别是我的辅导员田会老师,虽然他只给我们带过半年的课,可是她心细的指导和渊博的学识,以及在生活和学习上对我的帮助,是我受用终生,在此我为我的辅导员深深的鞠上一躬。
感谢四年来软件技术二班各位同学和朋友的帮助,是你们让我在失落时看到希望,找到了目标,是你们让我成功时不会过度膨胀。是你们让我的大学四年的学习生活不会孤独。这一次见面之后我们就要各奔前程,走上社会去闯荡了。我祝愿大家都有一个好的前途,来日定会飞黄腾达。
最后还要感谢此次抽出宝贵时间,对我们进行答辩的老师说一声谢谢。各位老师您辛苦了!虽然我们可能在学校里从未见过,我也没有上过各位老师的任何一节课,没听过各位老师的教诲,可是我相信这是老师们最后给我上的最重要的一节课,必将让我受用终生。在此深深的鞠上一躬,感谢各位老师。