软件设计报告Word文件下载.docx

上传人:b****6 文档编号:16181345 上传时间:2022-11-21 格式:DOCX 页数:28 大小:737.25KB
下载 相关 举报
软件设计报告Word文件下载.docx_第1页
第1页 / 共28页
软件设计报告Word文件下载.docx_第2页
第2页 / 共28页
软件设计报告Word文件下载.docx_第3页
第3页 / 共28页
软件设计报告Word文件下载.docx_第4页
第4页 / 共28页
软件设计报告Word文件下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

软件设计报告Word文件下载.docx

《软件设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件设计报告Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。

软件设计报告Word文件下载.docx

系统结构部件转换成软件的过程描述

第二章软件开发平台简介

一、软件开发平台:

✧Python2.6IDLE

✧PyQt4

✧Emacs

二、Python2.6IDlE简介及Python简介:

Python是单前非常成功的脚本语言,最开始是由GuidovanRossum进行开发的,在1991年放出了第一个版本。

Python的灵感来源于ABC和Haskell。

Python是一个高级的,跨平台的解释性语言。

很多人喜欢将其称为动态语言。

它非常容易学习,最明显的特征是,它不需要分号和括号,而是使用缩进。

目前最稳定的版本应该是2.5.2,并且有着来自全球的志愿者进行维护。

2007年,Python被评为年度语言。

Python是一种面向对象、直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。

这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。

目前,基于这种语言的相关技术正在飞速的发展,用户数量急剧扩大,相关的资源非常多。

IDLE是Python标准发行版内置的一个简单小巧的IDE,包括了交互式命令行、编辑器、调试器等基本组件,足以应付大多数简单应用。

IDLE是用纯Python基于Tkinter编写的的,最初的作者正是Python之父GuidovanRossum本人。

目前Python的最新版本为3.0,Python2.6是个过渡版本。

IDLE是跟Python一起安装的,不过要确保安装时选中了“Tcl/Tk”组件,准确地说,应该是不要取消该组件,因为默认时该组件是处于选中状态的。

安装Python后,我们可以从“开始”菜单→“所有程序”→“Python2.6”→“IDLE(PythonGUI)”来启动IDLE。

IDLE启动后的初始窗口下图所示:

如上图所示,启动IDLE后首先映入我们眼帘的它的Pythonshell,我们通过它可以在IDLE内部执行Python命令。

除此之外,IDLE还带有一个编辑器,用来编辑Python程序(或者脚本);

有一个交互式解释器用来解释执行Python语句;

有一个调试器来调试Python脚本。

利用IDLE创建Python程序

IDLE为开发人员提供了许多有用的特性,如自动缩进、语法高亮显示、单词自动完成以及命令历史等等,在这些功能的帮助下,能够有效的提高我们的开发效率。

下面我们通过一个实例来对这些特性分别加以介绍。

我们的示例程序的源代码如下所示:

#提示用户进行输入

integer1=raw_input('

请输入一个整数:

'

integer1=int(integer1)

integer2=raw_input('

请再次输入一个整数:

integer2=int(integer2)

ifinteger1<

integer2:

print'

%d<

%d'

%(integer1,integer2)

else:

%d≥%d'

我们现在演示如何利用IDLE的编辑器来创建Python程序。

要新建一个文件,首先从“File”菜单中选择“NewWindow”菜单项,这样就可以在出现的窗口中输入程序的代码了。

现在就让我们输入上面的代码来亲自体验一下IDLE所提供的各种便利吧。

我们首先介绍自动缩进。

实际上,很少有哪种语言能像Python这样重视缩进了,在其他语言比如C语言,缩进对于代码的编写来说是“有了更好”,而不是“没有不行”,它充语法的高度。

复合语句不是用大括号{}之类的符号表示,而是通过缩进来表示。

这样做的好处就是减少了程序员的自由度,有利于统一风格,使得人们在阅读代码时会更加轻松。

为此,IDLE提供了自动缩进功能,它能将光标定位到下一行的指定空距处。

当我们键入与控制结构对应的关键,如if等,或者输入如def等与函数定义对应的关键字的时候,按下回车键后IDLE就会启动自动缩进功能。

如下图所示:

在IDLE中运行Python程序

要使用IDLE执行程序的话,可以从“Run”菜单中选择“RunModule”菜单项,该菜单项的功能是执行当前文件。

对于我们的示例程序,执行情况如下图所示:

IDLE的命令历史功能

命令历史可以记录会话期间在命令行中执行过的所有命令。

在提示符下,可以按Alt+P组合键找回这些命令,每按一次,IDLE就会从最近的命令开始检索命令历史,按命令使用的顺序逐个显示。

按Alt+N组合键,则可以反方向遍历各个命令,即从最初的命令开始遍历。

这个组合是每种命令行界面都通用的。

三、PyQt4简介:

PyQt是一个Qt的GUI库,是将Python和Qt结合在一起的产物。

而Qt是目前比较成功和强大的GUI库。

你可以通过访问www.riverbankcomputing.co.uk了解更多关于PyQt的消息,目前主要的开发人员是PhilThompson.

PyQt通过一组python模块来实现的,其中包括了超过300个类,尽6000个函数和方法。

非常好的是,这个库是平台独立的,可以运行于当前大多操作系统中,包括Unix,Window和Mac。

PyQt使用的是双许可证,开发人员可以在GPL和商业许可之间进行选择。

过去,GPL仅适用于Unix,从PyQt4开始,GPL对所有的平台开放。

由于PyQt4包含了太多的类,所以开发人员将其分为不同的模块进行管理。

QtCore主要负责一些非GUI的功能,包括时间(time),文件(files)和文件夹(directories),各种数据类型(datatypes),流(stream),urls,mime类型,线程(threads)和过程(processes)。

QtGui模块负责图像组件和相关的类,包括常见的按钮(buttons),窗口(windows),状态栏(statusbars),工具栏(toolbars),滑动条(sliders),位图(bitmaps),颜色(colors)和字体(fonts)等。

QtNetwork则负责网络功能,通过该模块,可以完成具有TCP/IP和UDP交互功能的C/S应用,该模块使得网络开发非常的简单便携。

QtXml包含了同xml文件交互的能力,模块实现了同SAX和DOM交互的APIs。

QtSvg提供了显示SVG文件内容的方法。

ScalabeVectorGraphics(SVG)是使用xml文件来描述二维图像的一种语言。

QtOpenGL通过使用OpenGL来呈现3D和2D图像,该模块将QtGUI库和OpenGL库无缝的结合在一起。

QtSql提供了访问数据库的方法。

四、Emacs介绍

Emacs是一种强大的文本编辑器,在程序员和其他以技术工作为主的计算机用户中广受欢迎。

EMACS,即EditorMACroS(编辑器宏)的缩写,最初由RichardStallman(理查德·

马修·

斯托曼)于1975年在MIT协同GuySteele共同完成。

这一创意的灵感来源于TECMAC和TMACS,它们是由GuySteele、DaveMoon、RichardGreenblatt、CharlesFrankston等人编写的宏文本编辑器。

自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种分别是:

1984年由RichardStallman发起并由他维护至今的GNUEmacs,以及1991年发起的XEmacs。

XEmacs是GNUEmacs的分支,至今仍保持着相当的兼容性。

它们都使用了EmacsLisp这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。

第三章软件设计的内容

3.1分数统计软件(A1)

3.1.1设计题目及要求

分数统计(10)

求:

(1)输入某班级学生的姓名、分数;

(2)对

(1)的分数进行降幂排列并输出;

(3)具有输入输出界面。

3.1.2设计思想及程序流程框图

流程图:

设计思想:

使用数组可以存储学生数据,并加入输入界面,输出界面使用GUI界面,并有排序功能,排序使用降幂排序,降幂算法使用冒泡排序的算法,GUI界面包括退出按钮

3.1.3逻辑功能程序

1.插入学生文件:

2.设置model文件:

3.初始化程序:

3.1.4结果及完善方向

结果如下:

程序运行的截图

说明:

姓名,光电子学的成绩,激光原理的成绩都是可以自己添加的,排序默认为光电子学的降幂排序,如果双击光电子学的标签,则可以达到升幂排序的目的,同时双击激光原理和姓名都可以达到排序的目的,因为这一用的是Qt自带的QTreeView的排序功能,图中阴影部分就是按下插入成绩后得到的

完善方向:

可以添加的功能如下,增设一个添加课程的选项,就可在Model中进行对column的添加操作,这样做到课程的动态增设的功能。

3.2打字软件(A2)

3.2.1设计题目及要求

要求:

(1)随即产生一字符串,每次产生的字符串内容、长度都不同;

(2)根据

(1)的结果,输入字符串,判断输入是否正确,输出正确率;

(3)具有输入输出界面。

3.2.2设计思想及程序流程框图

对比按钮:

随机字符串是一个长度和类容都随机的字符串,长度使用random函数产生一个1-100范围内的数,作为字符串的长度,因为产生的随机字符串是用space(空格)间隔开来的,因此要调用其中的jion函数和replace函数将space替换为没有间隔。

接着进行比较,用forin循环进行比较,得到一个字符串相等的长度,接着用这个长度算出比例,这样就得到了一个完整的百分比了。

3.2.3逻辑功能程序

1.产生长度为40范围内的随机字符串,并将之连续的输出

2.比较程序,并且算出正确的字符串的长度,最后输出的是比率

3.2.4结果及完善方向

结果截图如下:

目前完成的功能是产生长度在1至100范围的长度长度的字符串的产生,并可以计算出之后算出的正确比率,可以添加的功能是将字符串验证程序可以带入空格,并且其他符号的限制,加上一个报错的功能模块会更好的。

3.3文本编辑器(A3)

3.3.1设计题目及要求

文本编辑器(10)

(1)编辑文本;

(2)保存、打开指定位置的文本文件;

3.3.2设计思想及程序流程框图

因为在Qt中可以调用自己的文件打开窗口和windows提供的打开窗口,因此,open设计和save设计使用原用的QTextStream模块就可以完成,为了加上中文支持,必须使用utf16作为编码格式,并且使用菜单选项,使得界面更加正式化,并且编辑存储的功能也更加的全面。

流程框图:

3.3.3逻辑功能程序

1.新建文件的函数实现调用Qt的类

2.打开文件的函数

3.保存文件的函数

4.保存为的函数

3.3.4结果及完善方向

结果截图如下:

考虑文件打开的功能可以加上一个最近打开的选项,同时还可以对鼠标的左键的功能进行添加,这样效果会更好点。

3.4加密软件(A4)

3.4.1设计题目及要求

(1)输入任意一段明文M,以及密钥K;

(2)根据以下公式将其转换为密文C。

Ci=mi+K,其中i=0,1,……n-1,K为密钥;

3.4.2设计思想及程序流程框图

用一个文本框可以输入需要加密的字符串,另一个文本框加入的密钥K,

输入之后使用python实现加密算法,并且在加密后的文本框显示出来。

流程图如下:

3.4.3逻辑功能程序

1.程序加密函数

3.4.4结果及完善方向

结果,运行时截图:

加密的算法实现之后,还可以做反向的解密操作,因此可以加上一个解密的选项,将一些密文转换为明文,这是作为消息传输的保密性的实现,明文到密文再到明文,实现这个简单的功能。

3.5进制转换器(A5)

3.5.1设计题目及要求

(1)可输入二进制、八进制、十进制、十六进制数;

(2)将已输入的数转换成其余进制的数;

3.5.2设计思想及程序流程框图

创建4个文本编辑框,分别对应二进制,八进制,十进制,十六进制的输入,并曾设出错检查,每个文本框只可以输入符合进制要求的数字,实时的进行转换,不要就是任意一个进制的数都可以转换为其他三个进制的

流程框图如下:

3.5.3逻辑功能程序

1.使用Qt组件创建界面:

2.输入是十进制时:

3.输入是十六进制时:

4.输入是八进制时:

5.输入是二进制时:

3.5.4结果及完善方向

结果:

运行截图如下:

该程序设定的有限长度的输入字符串,该完善的就是要将字符串的长度再做个改进,然后可以做出更加符合要求的程序。

3.6学生成绩核算系统的设计与实现(B1)

3.6.1设计题目及要求

学生成绩核算系统的设计与实现(25)

(1)按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。

(2)三个成绩对总评成绩的百分比被定义为常数,各占总成绩的30%、30%和40%。

(3)计算每位学生的总评成绩。

(4)计算该班级本课程的总平均成绩。

(5)计算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。

其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。

(6)按要求输出成绩在优、良、中、及格、不及格各区间的学生学号、成绩。

3.6.2设计思想及程序流程框图

Qt4推出了一组新的itemview类,它们使用model/view结构来管理数据与表示层的关系。

这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些itemview使用。

这里对model/view的结构进行了描述,结构中的每个组件都进行了解释。

本章就是采用了model/view的结构来进行表和数据之间的管理。

并通过QSql模块加入了数据库模块。

显示某等级学生:

显示所有学生信息:

插入成绩按钮:

3.6.3逻辑功能程序

一、排序

在model/view架构中,有两种方法进行排序,选择哪种方法依赖于你的底层Model。

假如你的model是可排序的,也就是它重新实现了QAbstractItemModel:

:

sort()函数,QTableView与QTreeView都提供了API,允许你以编程的方式对Model数据进行排序。

另外,你也可以进行交互方式下的排序(例如,允许用户通过点击view表头的方式对数据进行排序),可以这样做:

把QHeaderView:

sectionClicked()信号与QTableView:

sortByColum()槽或QTreeView:

sortByColumn()槽进行联结就好了。

另一种方法是,假如你的model没有提供需要的接口或是你想用listview表示数据,可以用一个代理model在用view表示数据之前对你的model数据结构进行转换。

本实验使用点击表头排序的操作方法,功能程序如下:

二、创建可编辑的model

我们只需要只读的model提供另外一个函数setData()的实现。

下列函数声明被添加到类定义中:

三、查找模块的创立

四、总评分数的计算:

五、设置model:

3.6.4结果及完善方向

结果运行截图如下:

使用了班级总评和查询和插入后的结果如下:

完善方向:

由于用图形化界面花费了比较多的时间,因此在于数据库的链接上没有做到比较好的效果,因此可以在这个方面做点改进。

第二个方面就是对于各个层次的同学的个数的方面的统计,可以单独显示的没有做到。

这个方面也是要加强的。

3.7模拟电信计费系统的设计与实现(B2)

3.7.1设计题目及要求

模拟电信计费系统的设计与实现(25)

(1)计费功能。

根据存放在源数据文件中的通话记录和长途费率文件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。

其中:

通话费的计算方法如下:

通话费=长途电话费+本地电话费

长途电话费=费率(元/分钟)×

通话时长(分钟)

(通话时长不满1分钟的按1分钟计算)

本地电话费为:

3分钟以内0.5元,以后每3分钟递增0.2元。

(2)话费查询。

输入一个电话号码,从费用文件中统计该电话号码的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在屏幕上显示:

用户名电话号码本地话费长途话费话费总计

(3)话单查询。

输入一个电话号码,查询并在屏幕显示该用户的所有通话记录,格式为:

用户名主叫电话号码被叫电话号码通话时

3.7.2设计思想及程序流程框图

程序设计思想:

利用连接数据库与model/view结构组织话费账单的内容,同时使用多model建立话费查询的的结构,最后完成对话费的计算,对账单的查询,并且有搜索模块,这样可以得到比较好的界面,界面也使用比较清晰的结构,并且易于使用,查询分为三种查询方式,有基于姓名的和基于帐号的,长途和本地的分别用区号进行区分得到的结构。

程序流程框图:

话单查询模块:

话单查询:

3.7.3逻辑功能程序

一、计算费用的模块:

二、设置model模块:

三、计算话费程序:

四、将姓名与号码联系起来:

3.7.4结果及完善方向

结果运行截图:

二、话费查询结果:

该程序已经完全达到了题目的要求,只是在文件处理方面还是有些小小的问题,关于这种文件的追加,没有设置接口,只能进入文件内部修改,所以另外可以增设一个可以用来添加数据的文件,那样的效果会好很多。

第四章心得体会

本此实验进行了两周,在验收通过的那瞬间一下子轻松了许多。

两个星期的辛苦,两个星期的收获也许只有自己才知道。

万事开头难。

这次的题目,如果单从算法的角度来分析并不难,简单的C++代码足以解决。

可是,界面问题就很难了。

由于以前接触过Qt,知道这种GUI工具的实用性,加上这次设计是没有语言的要求的,于是便使用的目前还是比较成熟和易用的Python来结合起来做这次软件设计。

由于,我们这次做的题目还是比较普遍的,很多书上都有很多很类似的题目。

刚开始时,但一开始还是没有任何的入手点,因为用的是一种全新的语言和一个全新的工具,没有任何的学习经验,而且资料几乎都是英文版的,于是最后的情况就是要自己去读document,而且是读那些很深的class,和函数。

不过,我到现在都庆幸当天晚上所做的决定。

决定先读Qt里面送的例子,于是那天晚上开始一句一句的注释,第二天也是照样进行的,当完全读了一遍之后,对于Qt这个工具的各种机制都有了全面的理解。

在理论学习结束后,要进行下面的操作其实还是比较困难的。

这时,我就将Qt的所有document下载下来,一遍写实验,一遍查询,一遍还用翻译软件翻译,因为英文版的还是有点麻烦的。

当然了,在进行具体编程时还是比较痛苦的。

毕竟在一个新的环境很多操作虽然简单,但是得自己一步步的摸索。

我就曾因为自己定义了个新的类,可能是因为前一周的比较顺利,在做B1时,为了加大难度,我用了两个窗口。

当然,这其实也没什么,不就是多一个窗口么。

可是因为需要在两个窗口中传递变量。

试了好多方法都不行,最后只能通过文件的读写来解决。

如果说这次实习还有什么遗憾的地方的话,我觉得就是没有运用数据库。

在第二周的设计中,明显的感觉到如果运用数据库的话,很多地方会方便的多,而且效果也将会好很多。

我们可以看到很多代码在数据库中都已经编写过了,我们大可以没必要将很多精力花在这个上面,毕竟——我们得要站在巨人的肩上。

总的来说,这次的实习我还是学到不少东西的。

除了编程能力的提高,新工具的认识。

更重要的是分析问题解决问题的能力,查找资料的能力,跟同学讨论的能力,以及短时间内学到自己想要应用的相关领域知识的能力。

而这些我将受用一生。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1