软件设计模式浅析论文

时间:2019-05-13 18:19:32下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《软件设计模式浅析论文》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《软件设计模式浅析论文》。

第一篇:软件设计模式浅析论文

软件设计模式浅析

陈亚东

(中原工学院软件学院,河南 郑州450000)

摘要:什么是软件设计模式呢?其实广义的来讲,软件设计模式是可解决一类软件问题并且能反复使用的软件设计方案;狭义的来讲,软件设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。是在类和对象的层次描述的可反复使用的软件设计问题的解决方案。软件设计模式通常描述了一组相互紧密作用的类与对象。

在课堂学到的软件设计模式,我学习的并不好,对各种模式的运用和实现,感觉简单,但是要做起来还是有些难度。本文简单讲述了以面向对象技术为基础的软件设计模式的分析。

关键词:设计模式;设计方案;面向对象

中国分类号:TP311.5文献标志码:A

Software design patterns is

analysed

Chenyadong

(Zhongyuan University of TechnologySoftware college,henan zhengzhou450000)Abstract: What is a software design pattern? Actually, broadly speaking, the software design pattern is a type of the software can solve the problem and the repeated use of the software design;Narrowly speaking, the software design pattern is to be used in specific scenarios and communicate with each other to solve the problem of general design of the description of the object.Is described in the level of the classes and objects can be repeated use of the software design of the solution of the problem.Software design patterns usually describes a set of mutually close function classes and objects.Learned in the class of software design pattern, I'm not a very good learning, for the use of various patterns and implementation, feeling is simple, but want to do or some difficulty.This article simply describes the software design based on object-oriented technology pattern analysis.Key words: design patterns;Design scheme;object-oriented

对于软件设计模式,从上课到现在,我在头脑中还没有一个完整的概念,主要是因

为我的基础比较差,凭自身能力还不能写出

来一个项目。通过上网搜索,知道了什么是

软件设计模式,它是一套被反复使用,多数

人知晓的,经过分类编目的,代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性

[1]厂模式、单例模式、生成器模式、工厂方法模式、原型模式、适配器模式等等。

一、设计模式 模式是用来描述所交流的问题及解决方案的,一个完整的设计模式主要由模式名称、问题、解决方案、效果四个基本要素组成。设计模式体现的是程序整体的一种构思,所以有时候它也会出现在分析或者是概要设计阶段中,设计模式的核心思想是通

过增加抽象层,把变化部分从那些不变的部[2][2]。软件设计模式分为基础模式、委托模式、接口模式、代理模式、创建型模式、抽象工

分中分离出来。这就是我所了解的设计模式。设计模式有五种原则,“开-闭”原则(OCP)、单一职责原则(SRP)、里氏代换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则(ISP)[3],设计模式就是实现了上面所说的五种原则,从而达到了代码复用、增加可维护性的目的。

在设计模式经典著作《GOF95》中,设计模式从应用的角度上被分为三个大的类型,分别是创建型模式、结构型模式和行为型模式。又根据模式的范围分,模式既用于类又用于对象,类模式是处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了;对象模式是处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。

二、设计模式的分类

创建型设计模式是用来创建对象的模式,抽象了实例化过程,工厂模式、抽象工厂模式、单件模式、生成器模式、原型模式都属于创建型设计模式。简单来说一下创建型结构模式有哪几种模式吧,首先说一下工厂模式,工厂模式:客户类和工厂类分开,消费者任何时候需要某种产品,只需要向工厂请求即可,消费者无须修改就可以接纳新产品;缺点就是当产品修改时,工厂类也要做出相应的修改。比如:如何创建及如何向客户端提供。抽象工厂模式:为一个产品族提供统一的创建接口,当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。单件模式:保证一个类有且仅有一个实例,提供一个全局访问点。生成器模式:将复杂对象创建与表示分离,同样的创建过程可创建不同的表示,允许用户通过指定复杂对象类型和内容来创建对象,用户不需要知道对象内部的具体构建细节。原型模式:通过“复制”一个已经存在的实例来返回新的实例(不新建实例)。被复制的实例就是“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。这几种模式老师也让做过作业,做起来感觉也挺简单的。

结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象来实现新的功能(对象结构型模式)。结构型模式有这几种模式,组合模式:定义一个接口,使之用于单一对象,也可以应用于多个单一对象组成的对象组。装饰模式:给对象动态添加额外的职责,就好像给一个物体加上装饰物,完善其功能。代理模式:在软件系统中,有些对象有时候由于跨越网络或者其他障碍,而不能够或者不想直接访问另一个对象,直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切,这就是代理模式。享元模式:Flyweight是一个共享对象,它可以同时在不同上下文(Context)使用。外观模式:外观模式为子系统提供了一个更高层次、更简单的接口,从而降低了子系统的复杂度,使子系统更易于使用和管理。外观承担了子系统中类交互的责任。桥梁模式:桥梁模式的用意是将问题的抽象和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。适配器模式:将一个类的接口适配成用户所期待的接口。一个适配器允许因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包装在一个已存在的类中。对于这几种模式,我理解的太笼统,也不太明白,只是根据这些定义来用心理解来消化。

行为型设计模式着力解决的是类实体之间的通讯关系,希望以面向对象的方式描述一个控制流程。行为型设计模式种类比较多,其中观察者模式和访问者模式运用的比较多。模版模式:定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。子类在不改变算法架构的情况下,可重新定义算法中某些步骤。观察者模式:定义了对象之

间一对多的依赖,当这个对象的状态发生改变的时候,多个对象会接受到通知,有机会做出反馈。迭代子模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。责任链模式:很多对象由每一个对象对其下一个对象的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任。备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。命令模式:将请求及其参数封装成一个对象,作为命令发起者和接收者的中介,可以对这些请求排队或记录请求日志,以及支持可撤销操作。状态模式:允许一个“对象”在其内部状态改变的时候改变其行为,即不同的状态,不同的行为。访问者模式:表示一个作用于某对象结构中的各元素的操作。可以在不改变各元素的类的前提下定义作用于这些元素的新操作。解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。中介者模式:用一个中介对象来封装一系列的对象交互。策略模式:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。因为是学时太少的原因,老师讲的模式并不多,这几个模式好多都没有讲,我们只能根据一些书籍和资料来学习。

三、模式分析

对于工厂模式,是最常见的一种模式之一。在面向对象编程中, 常用的方法是用new操作符构造对象实例,但在有些情况下,new操作符直接生成对象会带来一些问题。创建对象之前必须清楚所要创建对象的类信息,但个别情况下无法达到此要求,譬如打开一个视频文件需要一个播放器对象,但是用户可能不知道具体播放器叫什么名字,需要系统分派给这个视频文件一个合适的播放器,这种情况下用new运算符并不合适。许多类型对象的创造需要一系列步骤,比如需要计算或取得对象的初始设置,需要选择生成哪个子对象实例,在生成需要对象之前必须先生成一些辅助功能对象。在这些情况, 新对象的建立就是一个 “过程”,而不仅仅是一个操作。为了能方便地完成这些复杂的对象创建工作,可引入工厂模式。工厂模式的实例分析: // EventFactory类

public class EventFactory:LogFactory{

public override EventLog Create(){

return new EventLog();} }

// FileFactory类

public class FileFactory:LogFactory{

public override FileLog Create(){

return new FileLog();} }

客户程序有效避免了具体产品对象和应用程序之间的耦合,增加了具体工厂对象和应用程序之间的耦合,在类内部创建对象通常比直接创建对象更灵活,通过面向对象的手法,将具体对象的创建工作延迟到子类,提供了一种扩展策略,较好的解决了紧耦合问题。

工厂模式客户端程序: public class App {

public static void Main(string[] args){

LogFactory factory = new EventFactory();

//FileFactory factory = new FileFactory();

Log log = factory.Create();

log.Write();} }

对于抽象工厂模式,在软件系统中,经常面临“一系列相互依赖对象”的创建工作,由于需求变化,这“一系列相互依赖的对象”也要改变,如何应对这种变化呢?如何像工厂模式一样绕过常规的”new”,提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合呢?其中有一种说法就是可以将这些对象一个个通过工厂模式来创建。但是,既然是一系列相互依赖的对象,它们是有联系的,每个对象都这样解决,如何保证他们的联系呢?所以运用抽象工厂模式,是一种有效的解决途径。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。适用于一个系统独立于其产品创建、组合和表示时,一个系统由多个产品系列中的一个来配置时,强调一系列相关产品对象的设计以便进行联合时,提供一个产品类库,只想显示其接口而非实现时。抽象工厂模式的结构,如下图:

图1抽象工厂模式的结构

抽象工厂模式与工厂模式的区别就在于工厂模式提供一个接口,用于创建相关和依赖对象的家族,而不需要明确指定具体类。抽象工厂模式允许客户使用抽象接口来创建一组相关产品,而不需要关心具体实际产出的产品是什么。

对于适配器模式,是将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以一起工作。打个比方

说,一个team要为外界提供S类服务,但team里面没有能够完成此项任务的member,只有team外的A可以完成这项服务。为保证对外服务类别的一致性(提供S服务),一是将A招安到team内,负责提供S类服务,二是A不准备接受招安,可安排B去完成这项任务,并让B做好A的工作,让B工作的时候向A请教,此时,B是一个复合体(提供S服务,是A的继承弟子)。这种模式的使用过程是客户通过目标接口调用适配器的方法对适配器发出请求,适配器使用被适配者接口把请求转换成被适配者的一个或者多个调用接口,客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。就是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有三种适用场合,一是使用一个已经存在的类,而它的接口不符合要求,二是创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作,三是使用一些已经存在的子类,但不可能通过子类化以匹配各自接口。对象适配器可以适配它的父类接口。适配器模式还分为了累适配器和对象适配器两种,这里就不再具体介绍了。适配器模式的优点就是方便设计者自由定义接口,不用担心匹配问题,而它的缺点是这个模式属于静态结构,由于只能单继承,所以不适用于多种不同的源适配到同一个目标。

对于命令模式,将一个请求封装为一个对象,可用不同请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。这种模式的适用性是抽象出待执行的动作以参数化某对象,在不同时刻指定、排列和执行请求,支持取消操作,支持修改日志,用构建在原语操作上的高层操作构造一个系统。命令模式的实现:

public class Receiver{//接收者public void action(){

System.out.println(“我在行动

");} }

public interface Command {//抽象命令

public abstract void execute();} public

class

ConcreteCommand

implements Command{//具体命令Receiver rcv;//含有接收者的引用

ConcreteCommand(Receiverrcv){this.rcv=rcv;}publicvoid execute(){rcv.action();}//执行命令}

public class Invoker{//请求者Command command;public command){

this.command=command;}

public void startExecuteCommand(){command.execute();} }

public class Application{//客户程序public static void main(String args[]){Command ConcreteCommand(r);

Invoker i=new Invoker();i.startExecuteCommand();} }

命令模式的结构:

command=new

void

setCommand(Command

图2命令模式的结构

命令模式中请求者不直接与接收者交互,即请求者不包接收者的引用,彻底消除了彼此之间的耦合。满足“开-闭原则”。如果增加新的具体命令和该命令的接受者,不必修改调用者的代码,调用者就可以使用新的命令对象;反之,如果增加新的调用者,不必修改现有的具体命令和接受者,新增加的调用者就可以使用已有的具体命令。由于请求者的请求被封装到了具体命令中,就可以将具体命令保存到持久化的媒介中,在需要的时候,重新执行这个具体命令。因此,使用命令模式可以记录日志。使用命令模式可以对“请求”进行排队。每个请求都各自对应一个具体命令,因此可以按一定顺序执行这些具体命令。

四、总结

在现代软件开发当中,软件设计模式起

到至关重要的作用。尤其是自从面向对象的语言普遍使用以后,促成了团队合作设计的软件设计几乎成了不可能完成的任务。软件设计模式在程序中的运用是非常广的,在程序设计的过程中,是对反复出现的问题的很用设计模式可确保更快的开发正确的代码,并且降低在设计或者视线中出现的错误的可能性。通过学习软件设计模式这门课程,了解到这么多种模式,虽然还不能熟练运用和操作,但是我会在以后的工作和实践中去多加锻炼。

Receiverr=new Receiver();热潮,而在此时,没有一个好的设计模式,i.setCommand(command);好的解决办法,是良好思路的经验集成。使

参考文献:

[1]钟茂生,王文明。软件设计模式及其使用[J].计算机应用,2002,22(8):32-35 [2]Gamma E.Design patterns elements of reusable object-oriented software[M].北京:机械工业出版社,2002

[3]廖志刚,李增智。设计模式在系统中的应用[J]。计算机工程与应用,2002,(12):7-10

第二篇:软件设计模式课程教学设计

软件设计模式课程教学设计

软件设计模式课程教学设计

***

(*****************)

摘要:本文结合教学实践从学习需要分析、学习者分析、教学目标的设计、教学策略的设计、教学媒体的设计、教学过程的设计、教学设计的评价这六个方面对操作系统课程的教学模式进行了探讨

关键词:教学设计模式;双主模式;教学策略 中图分类号:G423.1

Instructional design for software design patterns Abstract:Combining with teaching practice from the learning needs analysis, learner analysis, design of teaching goal, teaching strategy design, design of teaching media, teaching process design and evaluation of the six aspects of teaching design of operating system course teaching mode are discussed in this paper Key words: teaching design pattern;Double main mode;Teaching strategies 0引言

近年来,以计算机技术为支撑的信息产业迅速发展,以及全球化浪潮所导致的信息技术人才新需求,对软件工程教育产生了巨大的影响。在软件产品、项目的研发过程中,不仅需要大量的初、中级人才来完成程序编写工作,更需要能完成软件设计的高级人才,目前总体来看,高校对该类人才的培养还远远未达到产业界的实际要求,没有真正把软件开发原理中的思维和内涵传授给学生,更多的时候还处在传授计算机软件开发技术层面,一定程度上制约了学生激发自己学习的潜力。

在信息技术的推动下,网络教育以其独特的魅力逐渐成为一种重要的教育手段。在网上开展教学,使得网络课程的设计和开发成为必然,软件设计模式与其结合,才能提高教学效果和教学效率,才能更充分的发挥网络多媒体技术的特点与优势,更有效的支持学生富有创造性的个性化学习。

设计模式作为软件设计研究领域新的热点,随着其理论成果的不断取得一级在软件与设计中所起到的举足轻重的作用,受到了软件产业界广泛一致认同,特别是设计模式更多地关注了程序开发基本原理,而并非一味追求所谓技术创新,通过学习这些基本原理,有助于摆脱定式思维的桎梏,加深对软件开发的理解,该课程的总体安排、教学方法、理论与实践课的内容以及安排甚至教材的选定都需要进一步的探索和研究。

软件设计模式课程教学设计 教学设计的一般模式

教学设计,就是为了达到一定的教学目的,对教什么和怎么教进行设计。教学设计的模式既是教学设计理论的具体化,也是教学设计实践活动的升华1。从教学设计的角度看,构成教学设计模式的基本要素主要有四个,即教学对象、教学目标、教学策略、教学评价。而组成教学设计模式的因素有以下几个方面:(1)学习需要分析,包括学习需求分析、学习者分析(2)教学目标的设计;(3)教学策略的设计;(4)教学媒体的设计;(5)教学过程的设计;(6)教学设计的评价.

2软件设计模式课程教学设计探析

2.1 学习需要分析:

学习需要的核心是发现问题,而不是解决问题的方法。包括三方面的工作:一是通过调查研究,分析教学中是否存在要解决的问题;二是分析问题存在的性质,以判断教学系统设计是不是解决该问题的合适途径;三是分析现有资源和约束条件,以论证解决该问题的可能性。

2.1.1 学习需求分析

设计模式,它描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。所有结构良好的面向对象软件体系架构中都包含了许多设计模式,特别是在J2EE的架构中使用了大量的设计模式,使系统架构精巧,简洁和易于理解,同时也给我们提供了学习典范。与之同时设计模式被认为是的软件复用的目标2。

本课程主要介绍软件复用基本概念,设计模式的原则,典型的GOF的设计模式,并列举的大量的可运行代码,结合实例使课程生动。通过讲授,使学生理解设计模式的概念、作用以及在软件开发中的应用,掌握设计模式使用原则。同时通过使用复用技术,改造代码,从而使用合适的设计模式。

2.1.2学习者分析:

每个学习者都有各自不同的先天素质和后天通过学习得到的素质,这就造成了学习者与学习者之间学习现状和学习目标的不同。对学习者进行分析就是要弄

软件设计模式课程教学设计

清楚他们具有什么样的先天素质、已习得哪些后天的能力及学习需要是什么,因此在对学习者进行分析时就包括对其一般个性心理特征进行分析、对其学习风格进行分析、对其已习得的能力的分析和学习需要进行分析四个方面。

要使分析结果客观真实,相应的调查问卷的设计是关键,笔者在实践工作中设计并采用了“一般个性心理特征调查问卷”、“学习风格分析调查问卷”、“习得的能力调查问卷”等来进行分析;根据设计的调查问卷首先对学生进行分析,为制定教学策略方案寻找相应的依据。2.2 教学目标的设计:

通过这门课程的学习,为计算机科学与技术专业学生,传授软件设计与方法的基础知识,培养科学思维和软件开发的基本能力。了解软件设计一般过程和掌握软件设计的原则,加强学生的面向对象设计开发思想、理解设计模式的概念、掌握常用的设计模式的使用方法,提高学生的软件系统架构设计能力。树立学生正确的软件设计思想,基本具备创建可维护的、灵活的和清晰的应用程序的能力。

我们对学习目标的描述应力求做到精确化,避免传统描述中存在的模糊性;我在进行相应目标描述时,采用了学习结果的分类方法,对每一部分的教学目标的成分进行分析时,都分别从学习者可以习得的智慧技能、言语信息技能、认知策略、动作技能和态度情感等五个大的方面去进行分析;在具体描述时对对象、行为、条件和标准四方面进行描述,这样就基本上做到了对教学目标描述的精确化,为后面的教学评价提出了具体的标准。

进行本课程学习的学生,也有基础较好,其中也有一部分学生需要系统扎实的学习理论知识,以便于进一步深造,同时也注重实践活动;另一部分学生则面临将走上工作岗位的压力,根据社会对人才的需要要求提高理论知识和应用能力,多学习一些基本技能,提高操作能力;对于学习的目的比较明确,希望通过学习提高自己实际的应用能力.即将走向工作岗位的同学具有较强的自学能力,希望在学习上改变过去那种死记硬背的作法,多理论联系实际、所学知识能对今后实际应用工作有较强的指导作用.即学以致用,而不是纯粹的理论学习.我认为,在教学过程中,应该根据不同班级,采取不同的策略,对于基础较好的学生,使学生在系统掌握基本理论的基础上,提高实际应用能力.对于即将走上工作岗位的学生,侧重于以学生为中心的教学模式,以学生在掌握基本理论、基本分析方法的基础上,注重实际分析问题、解决问题能力的培养. 对所有学生都应注重实际学习效果.对每一堂课的教学活动都应该具有实效,能解决学习上碰到的问题.

软件设计模式课程教学设计

2.3 教学策略的设计

教学策略的设计,是有效地解决 “如何教”、“如何学”的问题.只有采取了相应的教学策略,才能完成预期的教学目标.在现代教学设计研究领域,已形成两大流派:一是以“教”为中心的教学设计理论;二是以 “学”为中心的教学设计理论.以 “教”为中心的教学设计理论的研究重点放在将知识和技能加以分解,使之符合一定的加工顺序,以及以什么样的媒体形式呈现才会有利于信息加工等方面.这种教学设计只关注知识的传递,教师被看作是知识的主要来源.

针对以上情况的分析,我认为应该从教学形式、教学方法、信息呈现方式和程序四个方面进行了规划设计;在教学形式上,主要采取集体教学与小组合作学习相结合的方式,也鼓励学习者根据自身情况进行些个别化学习;在教学方法上,采用了讲授法、讨论法、演示法、设问法等多种方法;在信息的传递方式上,采用了传统与现代媒体来呈现信息的方式;课程教学的基本程序是:问题——相关理论——实践——评价。2.4 教学媒体的设计

学生获取知识不再是单纯从书本上、教师的课堂讲解中,而是已经可以立体化,全方位的从学习环境中取得.学习环境是学习资源和人际关系的组合.学习资源包括学习材料、帮助学习者学习的认知工具、学习空间等等.我们提供了便于自学的文字材料、电子教案及多媒体课件,从媒体的有机组合上来实现教学过程的优化.便于学生利用计算机网络进行远距离交互式学习.教师不再是学习材料的主要来源.教师通过人际交往来影响和引导学生管理自己的学习活动,并且应以学生的身份参与到学生的学习活动中去.教师不再是个体学习的辅导者,而是群体学习的参与者。针对以上情况,我认为现行的教学模式,从网站下载课件和源码的方式固化,不方便分享,随着社会化媒体的兴起,我认为应该充分利用现有资源对教学媒体的资源进行扩充,比如,在现有条件下部署一个FTP,供校内学生进行资源共享,可上传和下载,对于校外学生,则应建立具有分享属性的网盘文件来共享文件,比如百度网盘、金山快盘等都是非常不错的配比。2.5 教学过程的设计

软件设计模式的教学在精心备课、内容求新的基础上,采用启发式教学的方法,力求教学质量的全面提高.在教学中,根据现有可参考设计思想做如下教学策略3:

软件设计模式课程教学设计

2.5.1 告诉学习者学习目标、学习重点、难点.

教学开始时,明确告诉学习者学习目标,并使其了解当目标达到后,将学会什么,从而激发学习者对学习的期望.这不仅能提高学习动机,而且能起到“先行组织者”的作用.告诉学习者学习重点、难点,引起注意.以唤起和控制学习者注意力.

2.5.2 新课导人.

在学习新内容前,指出所需先决知识和技能,提出相关问题,以此刺激回忆起学过的有关知识和技能.还应使学习者充分利用原有的认知。

2.5.3 课堂教学.

课堂教学采用了讲解、提问、小组活动、讨论相结合的形式.在教学中采取的策略是先进行教师讲解,通过ppt、动画、现场操作方式,把教学涉及的新信息、新内容较快地系统地向较多的学生传输.但如果仅是教师讲解这一种教学形式,教师就不能及时获得学生的反馈信息.为改变这一状况,在教学过程中,穿插了课堂提问及时了解学生的情况,要按学生的反应做出必要的说明和进一步的提问. 根据学生的具体情况,进行不同的活动安排.对于普通专科班的教学安排是采取讲解、提问、小组讨论方式,还增加了专门 的讨论课、答疑课,使教学活动更加生动活泼.对于有工作压力的同学,重点放在教学辅导课上,根据学生的需求,选用以讨论式为主,穿插讲解、提问方式,能起到事半功倍 的效果 . 同时提供丰富的教学资源,如参考教材、网络资源、学习指导、电子教案等供学生在课外学习.

2.5.4 教学后记.

每堂课后,认真听取学生的意见和建议,根据课堂情况和教学效果,记录教学后记.及时对教案和教学方法进行研究和改进.这一反馈工作可以使下一轮教学更加优化

2.5.5 加强实践教学注重提高学生的实践能力.

实验教学是培养学生实践能力的重要环节,精心设计实验,引导实验过程.对学生实验的指导特别注意调动学生的积极性,引导他们独立思考、独立

软件设计模式课程教学设计

完成 ;加强实验过程与结果的监督.提高实验教学质量.机房实验室是学生创新能力和动手的实践场所,通过实验培养学生创新能力和实践能力.改变传统的实验教学模式,拓宽实验教学内容.按照实验教学 “三步骤”来提高学生技能.这三步是:课程实验实行 “讲解扫清障碍、指导落实过程、考核强化结果”.实验前讲解实验内容、过程和要求,补充必要的知识 ;在实验过程中检查学生完成规定的实验项目,督促学生实际动手,并指对结果进行分析;实验考核以过程考核为主,综合考察学生试验的态度、试验技能、试验完成情况、试验报告质量等.增设设计型实验:这类实验以项目形式提出实验要求和具体实验结果,要求学生通过查资料或自学方式结合所学知识,来完成实验项目.旨在培养学生的综合应用能力.

2.6教学设计的评价

教学评价主要包括两大部分,一是传统的总结性评价,二是需要在教学过程中不断进行的形成性评价4;总结性评价一方面是对学习者的学习结果进行检测,另一方面也可发现一些教学方面的问题,从而在下一届的教学中予以改进;形成性评价是在教学的过程中为使教学效果更好而不断进行的评价,它是教师为使学习者尽可能在教学过程中学得更好而需不断进行的工作之一;从某种意义上讲,形成性评价比总结性评价更重要,因此我认为在教学过程中特别注意形成性评价方面的工作,具体针对“教学设计概述”、“学习者分析”、“学习内容分析”、“教学目标的阐明”、“教学策略的制定”、“教学实践活动”等几个教学环节进行了形成性评价,诊断出现的问题,然后在下一阶段的教学中给予解决。

3:结论

总之,在软件设计模式这门课程的教学中,注意运用了教学设计的基本原理和操作程序,特别注意让学生理解现代科学教育思想(大教育观)、帮助学生掌握教学设计基础理论和基本技术、引导学生理论联系实际,依据现代教育思想、运用现代教学设计理论和技术对具体的教学活动进行设计,形成成果;在教学方法上注意讲授、组织小组讨论、指导见习和实践活动相结合,对相关问题进行分析、指导教学方案、学习方案及课件的设计、指导研究论文的撰写和课件的制作,从而使学生真正的有所收获和学习的成果。通过对这门课程的学习,学生们不仅学到相关的理论,而且更重要的是他们学会了思考、分析、研究相关教学问题,学会了对相关教学问题进行解决的方法——设计教学策略方案。学生变被动学习为主动学习,达到了原定的教学目标,他们的实践作品(上机作业等)也收集在软件设计模式课程教学设计

一起,形成了成果。当然由于是集体教学,面对的是几十个学生,一套方案总是不能兼顾所有的学生,故还存在个别学生不能主动参与各项教学活动的情况,这将在今后的教学方案中设法解决。

软件设计模式课程教学设计

[参考文献]

[1] 罗伯特·加涅主编.教学设计原理.华东师范大学出版社,2000.[2] 《软件设计--从程序设计到体系结构》 Eric J.Braude著; 李仁发、王岢、任小西译,电子工业出版社。

[3] 李克东,谢幼如著.多媒体组合教学设计.科学出版社,1994.[4] 何克抗.教学设计理论的新发展.中国电化教育.1998.(10)、(11)、(12).[5] 罗伯特·加涅主编.学习的条件.华东师范大学出版社,2000.[6 《设计模式:可复用面向对象软件的基础》,机械工业出版社,Erich Gamma 等著,2000。

[7] 张文兰,李文光.对我国教学设计理论与实践的思考.2001年教育技术论坛论文集.

第三篇:矿用网络电话软件设计方法探讨论文

摘要:网络电话在矿山生产中发挥着越来重要的作用,为了提高煤矿井下通讯效率,设计了一种矿用网络电话系统,叙述了网络电话系统的构成,重点介绍了系统上位机和下位机软件的设计方法,该电话系统功能齐全,操作方便,应用效果良好.

关键词:煤矿;网络;电话;软件

中图分类号:TP311文献标识码:A

作者简介:陈林坤(1981-),男,安徽蚌埠人,唐山开诚电控设备集团助理工程师

随着计算机网络技术、通信技术的飞速发展和我国矿山生产规模的不断扩大以及自动化水平的不断提高,原有的通讯手段已不适应生产的需要.当前,“数字化矿山”建设正方兴未艾,人们利用高科技来监测、监控矿山的生产和管理,其中,网络通信是离不开的关键技术[1].本文结合煤矿井下通讯的实际,设计了一种效率较高的网络电话系统,介绍了该系统上位机和下位机软件的设计方法.实际应用表明,该系统功能齐全,使用方便,有效地提高了煤矿生产管理中通话的实时性和可靠性,进而提高了煤矿生产和管理的效率.

1硬件结构组成矿用网络电话系统主要用于煤矿调度音频通讯场合[2],采用工业以太网、网络寻呼台和井下电话组成网络系统,对煤矿调度生产进行语音通话和语音播报.该系统由上位机、交换机、网络寻呼台、网络电话板等组成。

2系统上位机软件设计

矿用网络电话系统上位机软件采用C#语言编写,基于MicrosoftVisualStudio2010开发平台,软件由2部分构成,包括网络音频软件PCNetTel和网络音频配置软件PCManger.

2.1网络音频软件

网络音频软件的功能主要有:监听在线客户端设备的登陆状态及客户端连接状态,对客户端的广播、组播、对讲通话以及通话内容音频文件进行回放以及历史记录查询等[3].网络音频软件流程图如图2所示.网络音频软件在对讲模式下的呼叫、挂断以及伴随的振铃逻辑稍显复杂,此处采用事件驱动后台线程实现,网络通讯采用TCP和UDP混合编程模式,这提高了系统的实时响应性能.在音频文件生成方面采用设备IP、日期、时间方式来命名文件夹和音频文件,以便于数据的查询和回拨.

2.2网络音频配置软件

网络音频配置软件的功能是搜索局域网内设备,进行参数修改配置,主要配置参数包括:本机IP地址、子网掩码、网关、服务器IP地址、寻呼台IP地址以及设备编号;输入音源、增益、音量、振铃次数、设备组播以及设备Modbus从站地址、串口波特率等参数.网络音频配置软件搜索局域网内设备时采用发送全网广播询问帧方式,以实现跨网段的未知设备IP的查询.在数据帧校验方面,采用MCU的全球唯一ID号作为算法数据源生成设备ID.

3系统下位机软件设计

系统下位机软件采用标准C语言编写,硬件平台为STM32F10X系统嵌入式单片机,软件由2部分组成,包括网络寻呼台软件和网络电话板软件.

3.1网络寻呼台软件

网络寻呼台软件的功能是建立与上位机和网络电话板的通讯[4].网络寻呼台可单独与上位机或网络电话板使用,也可与上位机和网络电话板一起接入网络使用.当与上位机音频通讯时,建立网络连接后,可与上位机进行双向对讲互话、接收上位机的组播或广播通知,也可接收上位机发出的音频文件进行本地播放.当与网络电话板音频通讯时,可对网络内所有寻呼台IP配置为本设备IP的网络电话板进行双向互话、对其语音广播、组播、多播操作.

3.2网络电话板软件

网络电话板软件主要功能为与上位机或网络寻呼台联网组成网络电话系统,可主动呼叫上位机或网络寻呼台,也可接收上位机或网络寻呼台的对讲呼叫、广播或组播.网络电话板软件实现方法与网络寻呼台软件设计方法类似,再此不再赘述.

4结论

矿用网络电话系统上位机软件采用C#语言编写,基于MicrosoftVisualStudio2010平台进行开发,采用多线程管理事件,软件界面设计友好、操作简洁、安装方便.下位机软件采用标准C语言编写,硬件平台为STM32F10x系列嵌入式单片机,采用UCOS-II操作系统实时地对接入网内的网络电话板进行多任务管理,提高了通话的实时性、可靠性;配合3.5寸彩色显示屏可动态地对网络电话板和上位机的连接进行查看管理及呼叫操作显示.该系统已在多个煤矿进行应用,使用效果良好.

参考文献:

[1]高杰.矿山多媒体应急通信系统软件设计[D].西安科技大学,2008.

[2]王涛.企业VoIP网络电话系统的设计和实现[D].天津大学,2008.

[3]庄乾成.嵌入式网络电话机设计[J].仪表技术.2009,(7):36-38.

[4]纪秀辉.基于Linux系统嵌入式网络电话设计[J].电脑知识与技术,2010,6(1):216-217.

第四篇:软件设计报告

软件设计报告

姓名: 方轶琦

学号:10005808

2013年6月18日~2013年6月28日

第一章 软件设计介绍.........................................................1 第三章 软件设计的内容.......................................................4 3.1 分数统计软件(A1)...................................................4 3.1.1设计题目及要求.....................................................4 3.1.2设计思想及程序流程框图.............................................4 3.1.3逻辑功能程序.......................................................5 3.1.4结果及完善方向.....................................................5 3.2 打字软件(A2).......................................................9 3.2.1设计题目及要求.....................................................9 3.2.2设计思想及程序流程框图.............................................9 3.2.3逻辑功能程序......................................................10 3.2.4结果及完善方向....................................................10 3.3 文本编辑器(A3)....................................................13 3.3.1设计题目及要求....................................................13 3.3.2设计思想及程序流程框图............................................14 3.3.3逻辑功能程序......................................................14 3.3.4结果及完善方向....................................................17 3.4 加密软件(A4)......................................................19 3.4.1设计题目及要求....................................................19 3.4.2设计思想及程序流程框图............................................19 3.4.3逻辑功能程序......................................................19 3.4.4结果及完善方向....................................................19 3.5 进制转换器(A5)....................................................23 3.5.1设计题目及要求....................................................23 3.5.2设计思想及程序流程框图............................................23 3.5.3逻辑功能程序......................................................24 3.5.4结果及完善方向....................................................29 3.6 学生成绩核算系统的设计与实现(B1)..................错误!未定义书签。3.6.1设计题目及要求....................................................30 3.6.2设计思想及程序流程框图............................................30 3.6.3逻辑功能程序......................................................32 3.6.4结果及完善方向....................................................32 3.7 模拟电信计费系统的设计与实现(B2)..................................39 3.7.1设计题目及要求....................................................39 3.7.2设计思想及程序流程框图............................................40 3.7.3逻辑功能程序......................................错误!未定义书签。3.7.4结果及完善方向....................................................41 第四章 心得体会............................................................49

软件设计报告 10005808 方轶琦

软件设计介绍

一. 软件的设计概念

软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。建议用数学语言来抽象事务和问题,因为数学是最好的抽象语言,并且它的本质就是抽象。将复杂的问题分解成可以管理的片断会更容易。将问题或事物分解并模块化这使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。

二.软件设计的性质、目的:

本课程是一门技能训练课,为在校学生的必修课程。通过设计培养学生良好的编程习惯,使学生掌握编程的基本步骤,规范学生的编写程序的格式,锻炼学生编写程序的能力,为将来编写较大程序的打好基础。

三.软件设计总时间:二周

四.实验设备:南京邮电大学微机室微机。五.软件设计的任务

通过集中时间上机实验,使学生充分发挥已有的编程能力,熟悉编译环境,选择若干课题,进行审题、分析、设计和调试,并根据要求写出实验报告。

六.实验内容

软件设计课题共分A、B两档。A档共5题,第一周完成;B档共2题,第二周完成。

软件设计报告 10005808 方轶琦

第二章

软件开发平台简介

Visual Studio 2008 简介

Microsoft® Visual Studio® 2008 使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序,充分展示了 Microsoft 开发智能客户端应用程序的构想。借助 Visual Studio 2008,采集和分析信息将变得更为简单便捷,业务决策也会因此变得更为有效。任何规模的组织都可以使用 Visual Studio 2008 快速创建能够利用 Windows Vista™ 和 2007 Visual Studio system 的更安全、更易于管理并且更可靠的应用程序。

Visual Studio 2008 提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序。

Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用.NET Framework 3.5 加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web 应用程序。开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web 应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP.NET 应用程序服务和 Microsoft平台。

Visual Studio 2008 具备如下优势:

快速开发新突破

从建模到编码,再到调试,Visual Studio 2008 提供了增强的编程语言、设计器、编辑器以及和数据相关的新功能,可以帮助您体验到生产力的突破。

创建杰出的用户体验

Visual Studio 2008为开发人员提供了新的工具,通过使用最新的平台,如Web, Windows Vista、2007 Microsoft Office System、Microsoft SQL Server 2008、Windows Mobile®以及Windows Server®2008,开发人员可以快速创建个性化很强的用户体验以及互联的应用程序。

跨越开发周期的协作

Visual Studio 2008 可以让开发人员、设计人员、测试人员、架构师以及项目经理通过共享工具以及过程整合的方式,实现协同工作,从而减少了解决方案所花费的时间。

采用统一整合的方式处理数据

Visual Studio 2008 可以显著的改进开发人员处理数据的方法。传统方式中,开发人员不得不根据数据的存储位置以及用户的连接方法,对数据进行不同的操作。通过语言集成查询(Language-Integrated Query, LINQ), 开发人员可以使用单独的模型来查询并转换XML, Microsoft SQL Server™和对象数据,而不需要学习或使用特定的编程语言,这样就降低了复杂度并提高了生产力。

体验全新的Web开发工具

Visual Studio 2008为公司或开发团队提供了一个健壮的、端到端的平台来构建应用程序并通过Web 方式提供应用程序。通过Visual Studio 2008, 开发人员可以很容易的将最新的Windows Presentation Foundation(WPF)功能整合到现

有的Windows Forms 应用程序以及新的应用程序中,并在Windows平台上创建高保真的用户体验。通过额外的ASP.NET AJAX 1.0和Microsoft

软件设计报告 10005808 方轶琦

IntelliSense®以及对调试JavaScript 8.0的支持,构建AJAX 应用程序将会更加快捷。增强的Web 设计器带有分离视图编辑功能,可以让开发人员同时看到HTML 页面以及结果页面,从而提升了Web 开发的体验。

将数据库功能整合到应用程序生命周期的管理中

Visual Studio 2008为不同的团队成员提供了一系列针对架构、设计、程序开发、数据库开发以及应用程序测试的相关工具。Microsoft Visual Studio Team System 2008 Database Edition 目前已经全部整合到了Microsoft Visual Studio Team System 2008 Team Suite 中。

构建运行在多个版本的.NET Framework 之上的应用程序

通过Visual Studio 2008, 开发人员可以使用一个工具来管理并构建针对多个版本的.NET Framework 的应用程序。Visual Studio 2008将会自动让项目以及设置适应开发人员所指定的.NET framework 版本。开发人员不再需要安装多个版本的Visual Studio 来维护运行于多个版本的.NET Framework 之上的应用程序。

为Microsoft Office 系列构建可靠的、可伸缩的应用程序

Visual Studio Tools for Office 目前已经完全整合到了Visual Studio 2008 专业版当中。Visual Studio 2008可以让开发人员自己定制Microsoft Office Word, Microsoft Office Excel ,Microsoft Office PowerPoint , Microsoft Office Outlook ,Microsoft Office Visio , Microsoft Office InfoPath , 以及Microsoft Office Project, 从而提升用户生产力并且更有效的利用了Office 2007 中的新增功能。对Microsoft Office 进行自定义,同时应用程序支持ClickOnce 部署,从而使开发人员可以采用正确的工具以及框架来实现对Microsoft Office 解决方案进行从容部署。

为Windows Vista 构建完美的应用程序

Visual Studio 2008可以让开发人员快捷的创建出同Windows Vista 外观风格一样炫的应用程序,并且可以利用Windows Vista 中所提供的8000多种新API.在开发人员和设计人员之间实现无缝协作

Microsoft已经针对设计人员发布了名为Microsoft Expression的工具。在Visual Studio 2008中,来自于Microsoft Expression Web 以及Microsoft Expression Blend™中的设计元素可以在不更改后台代码的情况下,从Visual

Studio 中进行导入导出的操作。这就意味着开发人员和设计人员可以实时的进行无缝协作,并且不用担心用户界面设计更改所引起的开发问题。

软件设计报告 10005808 方轶琦

第三章 软件设计的内容

3.1 分数统计软件(A1)

3.1.1设计题目及要求 设计题目:分数统计 要求:(1)、输入某班级学生的姓名、分数;

(2)、对(1)的分数进行降幂排列并输出;(3)、具有输入输出界面。3.1.2设计思想及程序流程框图

这道题我是用C# 的可视化环境制作了一个分数统计系统。制作的界面如图3.1-1所示:

实现的功能和设计方法:

1.在“姓名”和“分数”后面的文本框内输入学生信息,输入完毕后,按“输入”按钮,学生信息就会显示到左下方的listbox中。

2.当用户输入若干名学生信息后,按“排序”按钮,右下方的listbox中就会显示按成绩降幂排序后的学生信息。排序方法是使用冒泡排序法。

3.当用户输入学生信息出错时,用鼠标选择出错项,按下“删除选中的输入项”,即可删除输错项,继续输入学生信息。方法是用listBox.SelectedIndex找到选中的索引值,然后删除数组中该学生信息和listbox中信息就可以了。

4.当用户想重新输入学生信息,按下“重新开始”清空数组和listbox中的信息。

5.当用户要结束操作,按下“结束”,调用close()函数就可以跳出界面。主程序的流程图如图3.1-2所示。冒泡排序的流程图如图3.1-3所示。

软件设计报告 10005808 方轶琦

开始N=学生数i=0ii?N开始输入学生信息score[j-1]

图3.1-1 主流程图

图3.1-2冒泡排序流程图 3.1.3逻辑功能程序 具体程序如下:

#include #include #include struct student //存放学生信息的结构体 { char name[20];//字符型数组存放姓名

int grade;//成绩类型 } temp,std[100];int main(){ int err;char x[5];int n;int i;int m;char ch[20];

软件设计报告 10005808 方轶琦

do { system(“cls”);printf(“ nn”);printf(“

--------n”);printf(“ | 欢迎使用本系统 | n”);printf(“

--------n”);printf(“ n”);printf(“

-------------请输入学生数--------------nn”);do{ printf(“tt学生数: ”);

err=0;i=0;

scanf(“%s”,x);//输入选项

getchar();

while(x[i]!='')//依次检查输入的字符串是否为数字

{

if(x[i]>'9'||x[i]<'0')err=1;

i++;

} if(err)printf(“ntt请输入数字!n”);}while(err);

n=atoi(x);//将字符型数组x转换成整型n for(i=0;i

{ printf(“ntt请输入第%d个人的信息ntt姓名:”,i+1);scanf(“%s”,std[i].name);getchar();printf(“tt分数:”);scanf(“%d”,&std[i].grade);getchar();

}

printf(“输入信息:n”);printf(“----n”);printf(“ 姓名 成绩 nn”);for(i=0;i

printf(“ %s %dn”,std[i].name,std[i].gra

软件设计报告 10005808 方轶琦

de);} printf(“nn----n”);

printf(“n排序后信息:n”);for(m=0;m

if(std[i].grade

{

temp=std[i];

std[i]=std[i+1];

std[i+1]=temp;//成绩按降幂排序

} } printf(“n您所输入的学生名次如下:nn”);printf(“

------------n”);printf(“ 名次 姓名 成绩 nn”);for(i=0;i

第 %d 名 %s %dn”,i+1,std[i].name,std[i].grade);} printf(“nn------------n”);printf(“t您还继续吗?请按Y键继续:”);//选择是否继续

scanf(“%s”,ch);} while(ch[0]=='Y'||ch[0]=='y');//与开头组成do-while结构循环

printf(“t”);return 0;}

软件设计报告 10005808 方轶琦

图3.1—4

图3.1-3 运行结果

系统的完善:

软件设计报告 10005808 方轶琦

1.当用户在分数框输入了非数字字符,则会提示用户输出正确格式的分数。2.当用户未完整输入姓名和分数,系统会提示用户完整输入。完善方向

该系统虽然考虑了并完善了很多用户操作可能出现的错误,但仍然有不足之处。比如,本系统中的删除按钮只能在用户排序前删除用户想删除的信息。若用户排序后删除左边栏目里的学生信息,再来排序,这时排序出的结果就可能会出错。这点是需要改进的。

另外这题和数据库SQL连接起来,程序会更加简单方便。这方面还需加以学习。

3.2 打字软件(A2)

3.2.1设计题目及要求 设计题目:打字程序 要求:(1)随即产生一字符串,每次产生的字符串内容、长度都不同;

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

(3)具有输入输出界面。3.2.2设计思想及程序流程框图 设计思想:采用C#界面编程。

(1).从题目的要求可知,本系统要求随机产生字符串,字符串的内容和长度都是随机的。要产生随机数,就可以使用rand()函数。设定字符串最长为20。用rand.Next(min, max)函数就可以产生min~max之间的随机数。

(2).为使系统随机产生字母字符,首先用rand.Next(0,25)产生0~25的随机数,将随机数加上97,然后再将数字转换为相应的ASCII码的字母就可以了。

(3).正确率的计算。将系统产生的随机字符和用户输入的字符进行逐个比较统计出相同的字符个数,在与系统产生的字符总数相除便可得到得正确率。

设计的用户界面如图3.2-1所示。主流程图如图3.2-2所示

开始 产生随机字符串用户输入字符串计算正确率N结束?Y结束

图3.2-1主流程图

界面按钮功能设计思想:“开始”:按下后,首先清空界面的三个输入文本框

软件设计报告 10005808 方轶琦

textbox。然后再随机生成字符串显示在第一个文本框textbox1中。

“确定”:用户在第二个文本框textbox2中输入字符串后,按下确定按钮,首先系统会读入用户的字符串,然后与系统字符串比较,计算出正确率最后输出到正确率的文本框里。

“结束”:使用close()函数,按下后退出系统。3.2.3逻辑功能程序 具体程序如下:

#include #include #include #include #define max_len 40

//定义产生的字符串最长为40个字符

void rand_str(char *p,int length);double compare(char *p,char *s,int length);void display();

int main(){

char ch[20];int length;double flag;srand(time(NULL));char p[80]=“";char s[80]=”“;

display();

do {

char p[80]=”“;

char s[80]=”“;

printf(”nt----n“);

length=1+rand()%max_len;

rand_str(p,length);

printf(”nt----n“);

printf(”t请输入上面的字母:n“);

printf(”t“);

fflush(stdin);//减少不必要错误

scanf(”%s“,s);

flag=compare(p,s,length);

if(flag==1)

printf(”t输入完全正确!n“);

else

软件设计报告 10005808 方轶琦

printf(”t输入有误,您本次输入正确率:%0.2g%%n“,flag*100);

printf(”tn“);

getchar();

printf(”t您还继续吗?请按任意键继续或者按N键结束:“);

scanf(”%s“,ch);

}while(ch[0]!='N'&&ch[0]!='n');

printf(”t“);return 0;}

void rand_str(char *p,int length){ int i;char ch;printf(”t“);

for(i=0;i

{ int num;

do

{

num=65+rand()%(122-65+1);

}while(num>90&&num<97);

ch=num;

printf(”%c“,num);

p[i]=ch;

} }

double compare(char *p,char *s,int length){ int j;int number=0;double rate;for(j=0;j

if((p[j]-s[j])==0)

number=number+1;} rate=1.0*number/length;return rate;

软件设计报告 10005808 方轶琦

}

void display(){ printf(”t****************************************************************n“);printf(”t****************************************************************n“);printf(”t**

欢迎进入打字练习程序

**n“);printf(”t****************************************************************n“);

printf(”t****************************************************************n“);printf(”tn“);}

程3.2.4结果及完善方向

序运

行结果:

软件设计报告 10005808 方轶琦

用户按下开始按钮后,输入字符串,最后按下确定按钮的程序运行情况如图3.2-3所示。

按下开始按钮

输入字符串后按下确定按钮

图3.2-2 程序运行结果

系统的完善

最初编写的程序中存在输出正确率的BUG。就是在用户输入字符串的前半段和系统的字符串一样,而后面又多输入了其他字符,这时算出的正确率是100%,这在常理上是不正确的,发现错误后,更正了正确率的计算方法。

当用户输入的字符串长度小于或等于系统产生的字符串长度时,正确率的计算方法为:

与系统字符串相同的字母数正确率=

系统产生的字符串长度当用户输入的字符长于系统字符串长度时,正确率的计算方法为:

与系统字符串相同的字母数正确率=

用户输入的字符串长度这样就避免了之前的错误情况。完善方向

本打字系统仍然有需要完善的地方,如可增加计时系统,这样就增加了打字程序的趣味性。系统中正确率的计算方法也有待改进。

3.3 文本编辑器(A3)

3.3.1设计题目及要求 设计题目:文本编辑器 要求:(1)、编辑文本;

软件设计报告 10005808 方轶琦

(2)、保存、打开指定位置的文本文件;(3)、具有输入输出界面。3.3.2设计思想及程序流程框图

文本编辑器的界面设计,我是参考了word中提供的部分功能,用C#界面环境设计编写一个小型的文字编辑工具。

在C#界面的工具箱中,RichTextBox控件拥有非常强大的文字格式化功能。很多对文字文本的各种操作只需要调用RichTextBox控件中的函数,就可以搞定,非常的方便。

界面设计时,具有工具栏和功能图标按钮,提高了操作的便利性。文本编辑器的界面如图3.3-1所示。

文本编辑器具有三个大模块,具有以下功能: 1:文件:(新建 打开 保存 退出)

2:编辑:(撤销 恢复 全选 复制 剪切 粘贴 清除)3:帮助:(关于版权信息)模块结构如图3.3-2所示。

开始用户选择操作文件编辑帮助关于新建打开保存退出撤销恢复全选复制剪切粘贴清除 图3.3-1模块结构图

3.3.3逻辑功能程序 具体程序和注释如下:

#include #include //包含exit(1)的原型 #include #include”windows.h“

void create_file(FILE *fp,char *fname);//建立文本函数 void write_file(FILE *fp,char *fname);//编辑函数 void read_file(FILE *fp,char *fname);//读取函数

int main(){ FILE *fp;

软件设计报告 10005808 方轶琦

int count=0;char choose[100];int flag1,flag2,flag3;char F_name[20];

while(1){

printf(”****************************************************************n“);printf(”****************************文本编辑器***************************n“);printf(”****************************************************************n“);printf(”**

1、建立文本 **n“);printf(”**

2、编辑文本 **n“);printf(”**

3、读取文本 **n“);printf(”**

4、退出程序 **n“);

printf(”****************************************************************n“);

printf(”t请选择你要进行的文件操作:“);

scanf(”%s“,choose);

getchar();

switch(choose[0])

{

case '1': flag1=1;break;

case '2': flag2=1;break;

case '3': flag3=1;break;

case '4': printf(”t“);printf(”nnt*** 谢谢使用!****n“);exit(0);break;

default : printf(”t输入错误!n“);Sleep(500);system(”cls“);

}

if(flag1==1)

{

flag1=0;printf(”n***********建立文件***********n“);

create_file(fp,F_name);

软件设计报告 10005808 方轶琦

}

else if(flag2==1)

{

flag2=0;

printf(”n***********编辑文件***********n“);

write_file(fp,F_name);

}

else if(flag3==1)

{

flag3=0;

printf(”n***********读取文件***********n“);

read_file(fp,F_name);

}

}

return 0;}

void write_file(FILE *fp,char *fname){ char ch;printf(”请键入编辑的文件名(如D:ame.txt):nt“);gets(fname);if((fp=fopen(fname,”w“))==NULL){

printf(”不能打开文件!n“);

exit(0);} printf(”请输入内容(以#号键结束):n“);ch=getchar();while(ch!='#'){

fputc(ch,fp);

ch=getchar();} printf(”nn“);getchar();fclose(fp);Sleep(500);system(”cls“);} void create_file(FILE *fp,char *fname){

软件设计报告 10005808 方轶琦

printf(”请键入新建的文件名(如D:ame.txt):nt“);gets(fname);if((fp=fopen(fname,”w+“))==NULL){

printf(”不能打开文件!n“);

exit(0);} printf(”%s文件已经创建好!nn“,fname);fclose(fp);Sleep(500);system(”cls“);} void read_file(FILE *fp,char *fname){ char ch;printf(”请键入读取的文件名(如D:ame.txt):nt“);gets(fname);if((fp=fopen(fname,”r“))==NULL){

printf(”不能打开文件!n“);

exit(0);} printf(”***********文件内容***********n“);printf(”--------n“);while((ch=fgetc(fp))!=EOF)//输出文件直到文件结束符

{

putchar(ch);} printf(”n--------nn“);fclose(fp);Sleep(1000);printf(”nn“);} 3.3.4结果及完善方向

软件设计报告 10005808 方轶琦

软件设计报告 10005808 方轶琦

系统完善方向

这次设计的文本编辑器基本上能够较好的模拟出word中对文本的部分操作功能。基于RichTextBox控件的功能很多,可以在此基础上添加更多的有用的方便的功能,如改变文本背景颜色,字体格式和颜色,文本左对齐右对齐等。这样文本编辑器的功能就会更加完善。

3.4 加密软件(A4)

3.4.1设计题目及要求 设计题目:加密 要求:(1)输入任意一段明文M,以及密钥K;(2)根据以下公式将其转换为密文C。

Ci = mi

+ K ,其中i = 0,1,„„n-1 , K 为密钥;

(3)具有输入输出界面。3.4.2设计思想及程序流程框图 设计思想:用C#界面编程。

由题目可以知道,要实现加密,就要对用户输入的字符串进行操作。首先要将用户输入的字符串存入数组。将字符类型转换为相应的ASCII码,再与输入的密钥相加,最后再转换为字符型就可以得到密文。

系统共有三个功能按钮,为“生成密文”,“重新输入”和“结束”。“生成密文”是按上述的思想对用户输入的字符串进行加密。“重新输入”是清空三个textbox。“结束是”调用close()函数退出系统。

系统界面和系统流程框图如图3.4-1所示。

开始用户输入明文,密钥加密重新开始结束

图3.4-1

程序流程框图

3.4.3逻辑功能程序

#include #include #include

void dis_menu();//显示函数

软件设计报告 10005808 方轶琦

void set_menu();//输入函数

void encryption(char *m, char *c, char *key);//加密函数 void decryption(char *m, char *c, char *key);//解密函数

int main(){ while(1){

dis_menu();set_menu();} return 0;} void dis_menu(){ printf(”t******************************************************n“);printf(”t***********************加密解密程序*******************n“);printf(”t**

1、加密 **n“);printf(”t**

2、解密 **n“);printf(”t**

3、退出 **n“);printf(”t******************************************************nn“);printf(”t请选择你要进行的操作:“);} void set_menu(){ char m[100]=”“;//明文 char c[100]=”“;//密文 char key[100]=”“;//密钥

char n[100];scanf(”%s“,n);if(strlen(n)>1){ printf(”t输入错误!请重新输入:“);

set_menu();} else {

switch(*n)

{

case '1': encryption(m, c, key);break;

case '2': decryption(m, c, key);break;

case '3': printf(”t“);exit(1);break;

default: printf(”t输入错误!请重新输入:“);set_menu();break;

软件设计报告 10005808 方轶琦

} } }

void encryption(char *m, char *c, char *key){

printf(”t-----------------------n“);printf(”t------------------------加密环节----------------------n“);printf(”t-----------------------n“);printf(”t请输入需加密的明文:“);scanf(”%s“,m);printf(”t请输入密钥:“);scanf(”%s“,key);while(strlen(key)>1)//密钥长度不能大于1 {

printf(”t输入密钥有误,请重输:“);scanf(”%s“,key);} { int i,length;length=strlen(m);printf(”t你输入的明文为:“);printf(”%sn“,m);for(i=0;i

{

c[i]=m[i]+key[0]-'0';} printf(”t转换后的码文为:“);printf(”%snn“,c);} }

void decryption(char *m, char *c, char *key){ printf(”t-----------------------n“);printf(”t------------------------解密环节----------------------n“);printf(”t-----------------------n“);printf(”t请输入需解密的密文:“);scanf(”%s“,c);printf(”t请输入密钥:“);scanf(”%s“,key);while(strlen(key)>1){

软件设计报告 10005808 方轶琦

printf(”t输入密钥有误(应输入一个字符),请重输:“);scanf(”%s“,key);}

{ int i,length;length=strlen(c);printf(”t你输入的密文为:“);printf(”%sn“,c);for(i=0;i

m[i]=c[i]-(key[0]-'0');//密文反译

} printf(”t破解后的明文为:“);printf(”%snn“,m);} } 3.4.4结果及完善方向 运行结果:

用户输入明文和密钥后,按下“生成密文”后的程序运行结果如图3.4-2所示。

软件设计报告 10005808 方轶琦

图3.4-2密钥运行结果

系统完善

1.当用户明文和密钥输入的不完整,系统会提示要求用户输入完整。2.当用户输入的密钥不在要求的0~9之间,系统会提示用户。如图3.4-3所示。

完善方向

当密钥过大时,生成的密文字符有些无法输出,因此可改进加密算法,更好完善这个加密系统。

3.5 进制转换器(A5)

3.5.1设计题目及要求 设计题目:进制转换器 要求:(1)可输入二进制、八进制、十进制、十六进制数;

(2)将已输入的数转换成其余进制的数;(3)具有输入输出界面。3.5.2设计思想及程序流程框图 设计思想:

由题目可以知道,本系统要求实现二、八、十、十六进制数之间的相互转换功能。

(1)、对于数字的显示问题,可以用字符串的形式进行数字的输入输出。在软件设计报告 10005808 方轶琦

系统内部进行转换前,利用ASCII码将字符串再转换为相应的数字进行处理。

(2)、进制的转换。系统中,首先将用户输入的任意进制的数统一转换为十进制。然后再将得到的十进制数转换为其他进制最后输出。

(3).转化成十进制时可以先得到用户输入的字符串的长度,在知道输入是什么进制数的前提下就可以将不同位上的数乘以进制的相应幂次最后求和就可以十进制数;由十进制转换成任意进制时可以使用短除法,不断相除取余数直到商为零为止,得到的字符串在翻转后即使得到的任意进制数对应的字符串。

(4).转换输出时,是将该数据的所有进制转换结果进行输出。进制转换系统是采用C#界面环境编程制作的。系统界面如图3.5-1所示。

图3.5-1 进制转换系统界面

界面中用户可以打开下拉菜单选择要输入的进制,选定后,选择的进制输入文本框会变白,用户可以输入要转换的数,按下“转换”按钮后,其他进制后面的文本框就会显示转换后的数。按下“结束”按钮可以退出系统。

整个程序可分为四个模块,分别是:数据输入模块,数据转换为十进制模块,十进制转换为其他进制模块,数据输出模块。程序流程框图如图3.5-2所示。

开始用户选择要输入的进制数据读入转换为十进制十进制转换其他进制数据输出结束 图3.5-2程序流程框图

3.5.3逻辑功能程序 具体程序和注释如下:

#include ”stdio.h“ #include void bishow(int m);void main(){ char x,w;char c[10];int i=0,err=0,quitflag=0;int num=0;do{ system(”cls“);printf(”t--------n“);printf(”t 欢迎数制转换系统 n“);

软件设计报告 10005808 方轶琦

printf(”t--------n“);printf(”t n“);printf(”t--------n“);printf(”t| 1 二进制 |n“);printf(”t| 2 八进制 |n“);printf(”t| 3 十进制 |n“);printf(”t| 4 十六进制 |n“);printf(”t| 0 退出 |n“);printf(”t--------n“);printf(”nt请选择: “);do{ err=0;scanf(”%c“,&x);//输入选项

getchar();if(x>'4'||x<'0')//若输入非法,则重新输入

{ err=1;printf(”n输入错误,请重新输入n“);} }while(err);switch(x){ case '1': //输入二进制

do{

err=0;i=0;num=0;

printf(”nt请输入二进制数:“);scanf(”%s“,c);

getchar();

while(c[i]!='')//‘’字符结尾

{ if(c[i]!='1' && c[i]!='0')err=1;//若输入数字不为1或0则输入错误

i++;

}

if(err)printf(”n输入数值错误,不是二进制数!n“);} while(err);// err为1重复上面,否则继续

i=0;while(c[i]!='')//二进制转换为十进制

{

num=num*2;

if(c[i]=='1')num=num+1;

i++;}

软件设计报告 10005808 方轶琦

printf(”nt二进制数 %s 转换为其他进制:nn“,c);

printf(”t********************************************n“);

printf(”t八进制: %on“,num);//输出八进制

printf(”t十进制: %dn“,num);//输出十进制

printf(”t十六进制: %xn“,num);//输出十六进制

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;

case '2': //输入八进制

do{

err=0;i=0;num=0;

printf(”nt请输入八进制数:“);

scanf(”%s“,c);

getchar();

while(c[i]!='')

{

if(c[i]>'7' || c[i]<'0')err=1;//若输入数据不在0~7间则输入错误

i++;

}

if(err)printf(”n输入数值错误,不是八进制数!n“);

} while(err);

i=0;

while(c[i]!='')

{

num=num*8;

num=num+c[i]-48;

i++;

}

printf(”nt八进制数 %s 转换为其他进制: nn“,c);

printf(”t********************************************n“);

bishow(num);

printf(”t十进制: %dn“,num);

printf(”t十六进制: %xn“,num);

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;

软件设计报告 10005808 方轶琦

case '3': //输入十进制

do{

err=0;i=0;num=0;

printf(”nt请输入十进制数:“);

scanf(”%s“,c);

getchar();

while(c[i]!='')

{

if(c[i]>'9' || c[i]<'0')err=1;//若输入数据为非数字符号,则错误

i++;

}

if(err)printf(”n输入数值错误,不是十进制数!n“);

} while(err);

i=0;

while(c[i]!='')

{

num=num*10;

num=num+c[i]-48;

i++;

}

printf(”nt十进制数 %s 转换为其他进制:nn“,c);

printf(”t********************************************n“);bishow(num);

printf(”t八进制: %on“,num);

printf(”t十六进制: %xn“,num);

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;

case '4': //输入十六进制

do{

err=0;i=0;num=0;

printf(”nt请输入十六进制数:“);

scanf(”%s“,c);

getchar();

while(c[i]!='')

{

if(c[i]<='9' && c[i]>='0')err=0;//若输入数据为非数字符号,则错误

软件设计报告 10005808 方轶琦

else if(c[i]>='a'&&c[i]<='f')err=0;

else if(c[i]>='A'&&c[i]<='F')err=0;

else err=1;

i++;

}

if(err)printf(”n输入数值错误,不是十六进制数!n“);

} while(err);

i=0;

while(c[i]!='')

{

num=num*16;

if('0'<=c[i]&&c[i]<='9')num=num+c[i]-48;

if('a'<=c[i]&&c[i]<='f')num=num+c[i]-97+10;

if('A'<=c[i]&&c[i]<='F')num=num+c[i]-65+10;

i++;

}

printf(”nt十六进制数 %s 转换为其他进制:nn“,c);

printf(”t********************************************n“);bishow(num);

printf(”t八进制: %on“,num);

printf(”t十进制: %dn“,num);

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;case '0':

quitflag=1;

break;

}

}while(!quitflag);

}

void bishow(int m)//转换成二进制数 { int b[20];

int i=0;

软件设计报告 10005808 方轶琦

while(m){ b[i]=m%2;m=m/2;i++;} i--;printf(”t二进制: “);if(m==0)printf(”%d“,0);while(i>=0){ printf(”%d“,b[i--]);//输出二进制数 } printf(”n“);} 3.5.4结果及完善方向 程序运行结果:

图3.5-3 进制转换系统界面运行情况

系统的完善

本系统能够较好的完成二、八、十、十六进制数之间的相互转换,并且对可能出现的异常情况进行了处理。例如,当用户选择输入二进制,用户就无法在其

软件设计报告 10005808 方轶琦

他进制的文本框内输入数据。还有,如果用户要键入非该进制内的字符,用户的键入将无效,非法字符将无法输入到文本框内。这样的设计能方便用户操作。

系统还有一些地方有待完善,比如,用户输入的字符串的最大长度需要进行一定的限制等等。

3.6 分数统计

3.6.1设计题目及要求

设计题目:学生成绩核算系统的设计与实现 要求:(1)、按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。

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

(3)、计算每位学生的总评成绩。(4)、计算该班级本课程的总平均成绩。(5)、计算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。

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

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

1.建立文本文件 note.dat,第一行为学生的总人数,其后为每个学生的成绩,每个学生的信息占一行,格式为:

学号(9位)平时成绩

期中考试成绩

期末考试成绩 例如: 15 B10040801

75.5

B10040802

79.5

B10040803

B10040804

80.5 B10040805

83.5

81.5

B10040806

B10040807

B10040808

B10040809

B10040810

B10040811

45.5

B10040812

B10040813

B10040814

B10040815

2.数据结构(用C++实现)

本题中共设计了两个类:学生(Student)和学生成绩(marks)(1)基类学生(Student),定义如下:

class Student //基类学生

软件设计报告 10005808 方轶琦

{ private: //私有成员:

char stu_no[10];//学号(题目中用到的)char stu_name[10];//姓名(可拓展的)char stu_zhy[20];//专业(可拓展的)public: //公有成员:

Student()//构造函数

{

strcpy(stu_no,”NULL“);

strcpy(stu_name,”NULL“);

strcpy(stu_zhy,”NULL“);

}

~Student(){} //析构函数

void setno(char no[])//设置学号

{strcpy(stu_no,no);}

void setname(char name[])//设置姓名

{strcpy(stu_name,name);}

void setzhy(char zhy[])//设置专业

{strcpy(stu_zhy,zhy);}

char *getno()//取学号

{return stu_no;}

char *getname()//取姓名

{return stu_name;}

char *getzhy()//取专业

{return stu_zhy;} };

(2)基类学生(Student)的派生类学生成绩(marks),定义如下: class marks:public Student //派生类学生成绩 { protected: //保护成员:

float sco1;//平时成绩

float sco2;//期中成绩

float sco3;//期末成绩

float avg;//总评成绩

char dengj;//等级 public: //公有成员:

void setsco1(float s1){sco1=s1;} //设置平时成绩

void setsco2(float s2){sco2=s2;} //设置期中成绩

void setsco3(float s3){sco3=s3;} //设置期末成绩

float getsco1(){return sco1;} //取平时成绩

float getsco2(){return sco2;} //取期中成绩

float getsco3(){return sco3;} //取期末成绩

float getavg(){return avg;} //取总评成绩

char getdengj(){return dengj;} //取等级

软件设计报告 10005808 方轶琦

void Computavg();//计算总评成绩 void GetDJ();//计算等级 }mark[100];3.从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩时,用C++中的流实现。

4.每次计算出的结果可在屏幕输出,并把每个学生的总评成绩输入到新文件out.dat文件中,格式为:

学生学号(9位)

总评成绩

成绩等级 例如: B07040801

B

为查询方便,可把总评成绩所处等级(优、良、中、及格、不及格)同时保存在文件out.dat中,分别用字母A、B、C、D、E表示。

5.设计方法:本系统采用自顶向下,逐步细化的方法,将整个系统细化为5个模块:读入文件,计算成绩模块,保存文件模块,计算并输出等级分布模块以及退出模块。根据这个思想,主程序的流程图如3.6-1图所示:

开始显示菜单键盘输入选项读入文件否计算成绩保存文件计算输出等级分布退出系统是否退出系统?是结束图3.7-1主程序流程图

3.6.3逻辑功能程序 具体程序及注释如下:

#include #include #define N 100 struct student { char number[10];

char psgra[5];

软件设计报告 10005808 方轶琦

char qzgra[5];char qmgra[5];

};

int information(){

FILE* fp;

int i;

struct student std[15]=

{{”B10040801“, ”88“, ”75.5“, ”66“ },{”B10040802“ ,”91“, ”79.5“,”76“},{”B10040803“,”85“,”75“,”77“ },{”B10040804“,”79“,”82“,”80.5“},{”B10040805“,”94“,”83.5“,”81.5“},{”B10040806“ ,”80“,”69“,”68“},{”B10040807“,”82“,”77“,”71“} ,{”B10040808“,”77“,”57“,”58“},{”B10040809“,”91“,”88“,”86“} ,{”B10040810“,”96“, ”89“,”90“},{”B10040811“,”70“,”45.5“,”50“} ,{”B10040812“,”74“,”65“,”66“},{”B10040813“,”81“,”71“,”76“},{”B10040814“,”83“,”75“,”77“},{”B10040815“,”85“,”78“,”79“ }};

if((fp=fopen(”note.dat“,”w“))==NULL){

printf(”文件打开错误!n“);

exit(0);}

fprintf(fp,” 学号

平时成绩

期中成绩

期末成绩n

15n“);

for(i=0;i<15;i++)fprintf(fp,” %-8s %8s %8s %8sn“,std[i].number,std[i].psgra,std[i].qzgra,std[i].qmgra);//%8s表示输出8个字符的字符串,不够8个字符右对齐;

fclose(fp);

return 0;

软件设计报告 10005808 方轶琦

}

int read(struct student st[15])

//读取文件的函数;{ FILE*fp1;

struct student s;int size;int i=0;if((fp1=fopen(”note.dat“,”r“))==NULL)

//打开information文件;{

printf(” 文件打开错误!n“);

exit(0);}

size=sizeof(struct student);fseek(fp1,0L,SEEK_SET);fread(&s,size,1,fp1);

//读取一个字节的fp1指针

fread(&s,size,1,fp1);for(i=0;i<15;i++)

{

fscanf(fp1,”%s“, st[i].number);

fscanf(fp1,”%s“, st[i].psgra);

fscanf(fp1,”%s“, st[i].qzgra);

fscanf(fp1,”%s“, st[i].qmgra);

}

fclose(fp1);

return 0;

}

void output(double n[20],char a[20],struct student st[15],char ch){

int j=0;

int i;

printf(”得等级%c的学生及其分数:n“,ch);

for(i=0;i<15;i++)

软件设计报告 10005808 方轶琦

{

if(a[i]==ch)

{

printf(”%-8s %8.1lf %8c n“,st[i].number,n[i],a[i]);

//判断后循环输出满足相应条件的学生的学号、分数及其等级;

j++;

}

} printf(”得%c的人数为:%d人n“,ch,j);printf(”得%c的比例为:%.1lf%%n“,ch,100*j/15.0);

printf(”nn“);}

char level(double //判断得ABCDE的条件;{ if(n>=0&&n<60)

return 'E';

else

if(n>=60&&n<70)

return 'D';

else

if(n>=70&&n<80)

return 'C';

else

if(n>=80&&n<90)

return 'B';

else

return 'A';}

n)

软件设计报告 10005808 方轶琦

int main(){ FILE*fp1;struct student st[15];int i=0;double n[N];char a[N];double d=0.0;

information();

read(st);

if((fp1=fopen(”out.dat“,”w“))==NULL){

printf(” File open error!n“);

exit(0);}

fprintf(fp1,” 学号

总评成绩

等级n

15n“);

for(i=0;i<15;i++)

{

n[i]=0.3*atof(st[i].psgra)+0.3*atof(st[i].qzgra)+0.4*atof(st[i].qzgra);

//按照0.3 0.3 0.4计算成绩;

a[i]=level(n[i]);

//输出等级给a[i];

fprintf(fp1,” %-8s %8.1lf %8c n“,st[i].number,n[i],a[i]);

d=d+n[i];

//求总成绩;

} fclose(fp1);

while(1){

printf(”tttt

南京邮电大学nnn“);

printf(”------------------“);

printf(”tttt请选择服务类型:ntttt1:输出得A的学生。ntttt2:输出得B的学生。ntttt3:输出得C的学生。n“);

printf(”tttt4:输出得D的学生。ntttt5:输出得E的学生。ntttt6:输出总平均成绩。ntttt7:输出学生相应的等级。n“);

printf(”tttt8:输出原始成绩。ntttt0:退出n“);

printf(”------------------“);

scanf(”%d“,&i);

printf(”nnn“);

软件设计报告 10005808 方轶琦

if(i==0)

break;

else

switch(i)

{

case 1:

//进入得A学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'A');

system(”pause“);

暂停以清屏;

system(”cls“);

清屏;

}

break;

case 2:

进入得B学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'B');

system(”pause“);

system(”cls“);

}

break;

case 3 //进入得C学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'C');

system(”pause“);

system(”cls“);

}

break;

case //进入得D学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'D');

system(”pause“);

system(”cls“);

}

break;

case 37

//////

: 4: 5:

软件设计报告 10005808 方轶琦

//进入得A学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'E');

system(”pause“);

system(”cls“);

}

break;

case 6:printf(”总平均成绩为:%.2lfnnn“,d/15);

//总成绩d/15求平均成绩;

system(”pause“);

system(”cls“);

break;

case 7:{

//输出学生的成绩及其等级;

printf(” 成绩及相应等级信息n“);

printf(”

学号

成绩

等级n“);

for(i=0;i<15;i++)

//15个学生的信息全部输出;

printf(” %-8s %8.1lf %8c n“,st[i].number,n[i],a[i]);

system(”pause“);

system(”cls“);

}

break;

case 8:{

//输出15个学生的所有信息;

printf(” 学号

平时成绩

期中成绩

期末成绩n“);

printf(” 15n“);

for(i=0;i<15;i++)

{

printf(” %-8s %8s %8s “,st[i].number,st[i].psgra,st[i].qzgra);

printf(”%10sn“,st[i].qmgra);

}

system(”pause“);

system(”cls“);

}

break;

default: printf(”输入错误,请重新输入。n“);

break;

}

软件设计报告 10005808 方轶琦

printf(”n“);

}

}3.6.4结果及完善方向

(一).程序运行结果如下:

1、菜单选择界面如图3.6-2所示。

(三).系统有待完善的方向

该系统还有一些细节有待改进完善。如输出5个等级区间学生学号和成绩时,分别都进行了一个循环,共进行了5个循环,这个算法的时间效率较低。可以改进算法,使其进行一次循环便可输出5个等级的情况。

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

3.7.1设计题目及要求

设计题目:模拟电信计费系统的设计与实现 要求:(1)、计费功能。根据存放在源数据文件中的通话记录和长途费率文件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。其中:通话费的计算方法如下:

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

长途电话费=费率(元/分钟)×通话时长(分钟)(通话时长不满1分钟的按1分钟计算)

软件设计报告 10005808 方轶琦

本地电话费为:3分钟以内0.5元,以后每3分钟递增0.2元。(2)、话费查询。输入一个电话号码,从费用文件中统计该电话号码的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在屏幕上显示:

用户名 电话号码 本地话费 长途话费 话费总计(3)、话单查询。输入一个电话号码,查询并在屏幕显示该用户的所话通话记录,格式为:

用户名 主叫电话号码 被叫电话号码 通话时长 3.7.2设计思想及程序流程框图

1.本系统的输入输出文件 本系统的输入文件有三个:(1)源数据文件(hd.dat)存放:主叫区号

主叫电话号码

被叫区号 被叫电话号码

通话时长(秒)每次通话作为一条记录,占源数据文件的一行。每条记录中各数据之间以空格间隔,例如:025 83491234 010 62320983 90 每个电话号码可以有多次通话记录。如果主、被叫区号相同,则通话记录为本地通话记录;否则为长途通话记录。(2)长话费率文件(fl.dat)存放:区号 费率

例如:010 1.20 表示从本地打往区号为010的地区每分钟收费1.20元。(3)用户文件(yh.dat)

存放: 电话号码

用户姓名 例如: 83491234 张明

本系统的输出文件有一个: 费用文件(fy.dat)

存放:主叫电话号码

通话类型

话费金额 其中,通话类型表示本次通话是长途还是本地。2.系统输入数据

hd.dat—有20条通话记录,分别是:

fl.dat

有4条记录

025 83491234 025 85319971

010

1.20

025 84927038 010 62110045 236

020

1.20

025 87216340 025 84521009

310

021

0.80 025 83491234 0571 82199516 100

0571 1.00 025 58120321 021 81094532 50

025 83491234 025 85319971

025 84927038 025 83491234

115

yh.dat

有5条记录 025 58120321 025 87216340

83491234 张明 025 87216340 010 62110045 93

84927038 李小红 025 83491234 010 62110045 792

87216340 王励 025 84927038 0571 82199516 931

83492200 赵强 025 83491234 025 85319971

580

58120321 杨冬 025 84927038 025 83491234

358

025 58120321 021 81094532 197 025 87216340 025 84521009

256

025 87216340 010 62110045 193

软件设计报告 10005808 方轶琦

025 83492200 025 84521009

320

025 83491234 025 85319971

270 025 84927038 025 83491234

231

025 83492200 025 84927038

3.数据结构(用C++实现)

本题共设计了三个类:话单(callist)、费用(charge)和用户(user),类的定义如下:

(1)、基类:话单类Callist #include #include #include #include #define N 100

struct callist

{

char zqnum[5];

char znum[20];

char bqnum[5];

char bnum[20];

char longti[10];}cali[N];struct charge

{

char bqnum[5];

char cha[5];}

ch[N];struct user {

char znum[20];char name[15];}

use[N];struct huaf {

char znum[20];

int flag;

double huafei;}

hf[N];

int readuse(){

FILE* fp;int i=0;

char a[10];

strcpy(a,”yh.dat“);

if((fp=fopen(a,”r“))==NULL){

printf(”文件打开错误!n“);

exit(0);}

while(!feof(fp)){

fscanf(fp,”%s %s n“,use[i].znum,use[i].name);

i++;

}

fclose(fp);return i--;}

int readcharge(){

FILE* fp;int i=0;

if((fp=fopen(”fl.dat“,”r“))==NULL)

费规则;{

printf(” File open error!n“);

exit(0);} while(!feof(fp))

软件设计报告 10005808 方轶琦

//将yh.dat写入数组a;//输出号码与名字;

//打开fl.dat通话计费

软件设计报告 10005808 方轶琦

{

fscanf(fp,”%s %s n“,ch[i].bqnum,ch[i].cha);

i++;

}

fclose(fp);return i--;}

int readcallist(){

FILE* fp;int i=0;

if((fp=fopen(”hd.dat“,”r“))==NULL)

//打开通话记录表;{

printf(” 文件打开错误!n“);

exit(0);} while(!feof(fp)){

fscanf(fp,”%s

%s

%s

%s

%sn“,cali[i].zqnum,cali[i].znum,cali[i].bqnum,cali[i].bnum,cali[i].longti);

i++;

}

fclose(fp);return i--;}

int Billing()

//计费函数;{

FILE* fp;

int i;int j;int m;int l;

软件设计报告 10005808 方轶琦

double bd=0.0;

//通话时间初始化0;

j=readcallist();

m=readcharge();

for(i=0;i

{

strcpy(hf[i].znum,cali[i].znum);

hf[i].huafei=0.0;

//初始化话费为0.0元;

bd=atof(cali[i].longti)/60.0;

//计算通话时间(n个一分钟);

if(!strcmp(cali[i].bqnum,cali[i].zqnum))

{

hf[i].flag=0;

if(bd<=3.0)

//本地话费:3分钟以内0.3元,以后每1分钟递增0.2元;

hf[i].huafei=0.3;

else

if(bd==floor(bd))

hf[i].huafei=0.3+0.2*(bd-3);

else

hf[i].huafei=0.3+0.2*(floor(bd)-2);

}

else

{

hf[i].flag=1;

//长途话费计算;

for(l=0;l

{

if(!strcmp(cali[i].bqnum,ch[l].bqnum))

if(bd==floor(bd))

hf[i].huafei=atof(ch[l].cha)*bd;

else

hf[i].huafei=atof(ch[l].cha)*(floor(bd)+1);

}

}

}

if((fp=fopen(”fy.dat“,”w“))==NULL)

//打开通话

软件设计报告 10005808 方轶琦

类型数据并向其写入数据;{

printf(” 文件打开错误!n“);

exit(0);}

for(i=0;i

{

fprintf(fp,”%s

%d

%.2lfn“,hf[i].znum,hf[i].flag,hf[i].huafei);//输出号码、长途以及本地话费;

} fclose(fp);

return i--;}

int query()

话费函数;{

char a[10];

char na[15];

int i;

int j;

int l;

double bd=0.0;

double ct=0.0;

j=Billing();

l=readuse();

getchar();

printf(”请输入要查询的号码n“);

gets(a);

for(i=0;i

{

if(!strcmp(hf[i].znum,a))

数据;

if(hf[i].flag==0)

bd=bd+hf[i].huafei;

else

//查询

//寻找与输入字符串(号码)相匹配的 软件设计报告 10005808 方轶琦

ct=ct+hf[i].huafei;

}

for(i=0;i

{

if(!strcmp(use[i].znum,a))

{

strcpy(na,use[i].name);

//条件成立则将use[i].name的内容复制到na中

break;

}

}

if(i==l)

printf(”输用户不存在,请重新输入!n“);

else

printf(”tttt用户:%sntttt号码:%sntttt本地话费: %.2lfntttt长途话费:%.2lfntttt总话费: %.2lfn“,na,a,bd,ct,bd+ct);

return 0;

system(”cls“);}

int billquery()

//话单查询函数;{

int i;

int j;

int l;

char na[15];

char a[10];

j=Billing();

l=readuse();

getchar();

printf(”请输入要查询的号码n“);

gets(a);

for(i=0;i

//比较输入号码与表单中号码是否有符合;

软件设计报告 10005808 方轶琦

{

if(!strcmp(use[i].znum,a))

{

strcpy(na,use[i].name);

break;

}

}

if(i==l)

printf(”输用户不存在,请重新输入!n“);

else

for(i=0;i

if(!strcmp(hf[i].znum,a))

printf(”tttt用户:%sntttt主叫号码:%sntttt被叫电话号码:%sntttt通话时长%s秒n“,na,cali[i].znum,cali[i].bnum,cali[i].longti);//输出话单;

return 0;

}

int main(){ int i;

while(1){

printf(”tttt

南京邮电大学nnn“);

printf(”------------------“);

printf(”tttt 请选择服务类型:ntttt 1:计费功能。ntttt 2:话费查询。ntttt 3:话单查询。ntttt 0:退出服务。n“);

printf(”------------------“);

scanf(”%d“,&i);

if(i==0)

//选择服务类型;

break;

else

{

软件设计报告 10005808 方轶琦

switch(i)

{

case 1:

Billing();system(”pause“);//计费选项;

break;

case 2:

query();system(”pause“);system(”cls“);

system(”cls“);

//话费查询选项;

break;

case 3:

billquery();system(”pause“);//话单查询选项;

break;

default: printf(”输入错误!n“);

}

}

printf(”n“);

}

} 3.7.4结果及完善方向(一).程序运行结果如下:

1、菜单选择

界面48

如图system(”cls");

3.7-2所示。

第五篇:软件设计辞职报告

软件程序员是一个工作压力非常大的职业,下面就是小编为您收集整理的软件设计辞职报告的相关文章,希望可以帮到您,如果你觉得不错的话可以分享给更多小伙伴哦!

软件设计辞职报告一

尊敬的领导:

您好!

在经过我长时间的考虑之后,结合我自身的实际情况,我不得不作出辞职申请,因为很多的实际情况,我已经无法继续在公司中工作下去,这些是我不愿意看到的,也是领导不愿意看到的。可是现实就是这样,谁也无法左右,我感到十分的无奈,我会牢记我在今公司中工作的过去的。

入职以后先后在宽带无线接入和gbss维护开发部门工作,xx年年2月正式转正。转正成绩为c。以后的工作中表现正常,两次季度考核都获得c。由于个人的从业经历和专业的问题,对无线产品没有知识积累,但是在工作中我努力学习,积极请教,能够完成公司交给我的任务。

在职期间两个部门的主管对我的生活和工作都非常的关心,经常进行思想交流和技术点拨,使我受益很大,感谢领导们的关心。辞职主要原因是我自身的问题,无法适应目前的工作压力,精神上和身体上已经不勘重负。另一个原因是在华为入职以来一直找不到自己的位置,无法给自己定位。海外的生活使我感觉自己的性格特点和思维方式无法适应华为海外团队的文化。

出于保护自己的目的,特向您提出辞职申请。希望早日回到国内,完成离职手续,有时间调整自己的身体状态和精神状态。我想我会在调养好自己的身体之后,继续不断的努力工作下去的。可是现在的情况是我已经无法继续高质量完成公司的工作了,我只好选择离开,我在今后的工作中一定会更好的工作下去的。前提是我一定要养好自己的身体,我坚信自己能够走好!

请对我个人给予充分的谅解,并批准我的辞职申请,谢谢。

软件设计辞职报告二

尊敬的××领导:

当我在凌晨三点读到这段话时,心里面感慨万千,久不能眠。于是我打开Notebook,给您写了这封辞呈。

去年底开始,去与留这二字,在我心里一直反复。直到我想到了这句话“当您在很难作出选择的时候,您必须尊重发自你内心的声音”。当初进入公司时您对我的满怀期许。而我自持在外企呆过,做事条理清晰,对自已充满信心,看不到自已的短处。想起这些至今令我汗颜。

记得当时我在工作上遇到困难与挫折,我与我夫人商量准备离开公司时。我夫人一句意味深长的话让我留了下来。她说:“您先呆着看看,有的时候坏事它也末必是坏事”。我现在得感激她,因为现在看来,她的话是对的。是她的这句话,使我在工作之余每天都在反省自已的不足之处,并想办法加以弥补。我终于明白了一个道理,一个人在反省中不断完善和超越自我是多么的重要。

IT是一个技术性很强的行业,个人曾经历过一个又一个开发工具从受到大家的追捧到被冷落。最后我发现,我应抓住其中的一些基础的,和永恒的不变因素,即便人人都有权力去选择他感兴趣的部分。因此我努力的找到了自已的兴趣与擅长。并不断努力的学习。

在这三年的工作时间里曾经有过的激情,迷惘,彷徨,和温暖,感悟,奋进。父亲交给我的坚毅,诚实的心态使我在这些过程中坚难的走了过来,并在工作中,生活中不断的修正自已,努力的提高自已的认识。我也并因此而重拾生活的信心。

回首过去,当我想到要有足够的胸怀来接受你不能改变的事情,要有足够的勇气来改变你能改变的事情,要有足够的智慧来区分二者的不同.时,我恍然大悟,原来是因为自已的胸怀不够.人生无法重来,但是可以随时重新来,我有选择的权力.....曾记起研究开发部的朝气,热情。技术工程部的和谐,沉稳,责任。这些都给我留下难以磨灭的印象,它已深深的印在我的脑海里,也必将让我时常想起一起共事过的各位同仁。

最后我发自内心地——

感谢和一起工作过的同仁,我曾经和他们度过了一段非常快乐的,令我难忘的时光。

感谢您这几年来对我的厚爱,对我自身存在缺点的包容,以及对我在工作中所犯错误的指正。您那颗正直的心,满怀激情的人生态度、宽广的胸怀、机敏的处事方式、必将令我受用终身。

也正因此,我祝愿您,您也必将用您的智慧引领公司走向一个更加高远的,全新的末来。

×× 敬上

下载软件设计模式浅析论文word格式文档
下载软件设计模式浅析论文.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    基于P2P的局域网多线程共享软件设计论文[合集]

    1 系统概述本系统的主要功能其一,局域网下的文件P2P共享,这里包括文件的传输和文件列表的传输;其二,局域网下用户的P2P心跳检测。系统的特点是多线程多任务同步。2 设计思想下......

    系统软件设计的铁路运输论文[五篇范例]

    1企业铁路运输概述此处以某石化企业作为说明,这个企业的铁路作业地点的组成部分为工业站、装卸站以及化纤工作区。其中,工作站包含了24个股道,装卸站则有25个,化纤工作区有8个。......

    3D游戏软件设计

    《3D游戏软件设计》 一、单选题(共 20 道试题,共 40 分。) 1. 现有三组逆时针环绕的轮廓线,依次包含。现在,如果把区域的环绕属性设置为奇数类型,那么最终绘制出的区域描述正确的......

    软件设计大赛策划书

    软件设计大赛策划书 软件设计大赛策划书1 活动目的:为营造我校浓厚的学生科研学术氛围,增强大学生创新意识,传播计算机文化,并为广东省软件设计大赛选拔作品,我校拟于XX年3月21日......

    如何撰写软件设计毕业论文

    如何撰写软件设计毕业论文 一、 问题定义与可行性分析 问题定义是弄清用户需要计算机解决的问题根本所在,以及项目所需的资源和经费。通过向用户调查,编写系统目标与范围的说......

    软件设计大赛策划

    信息工程学院科技创新与创业协会 “大学生软件设计大赛”主题活动策划书一、 活动背景正确引导我校学子积极参加科技竞技活动,不断培养创新精神和团队意识,切实增强理论联系实......

    3D游戏软件设计

    注:“★考核知识点”后面的标注内容在PPT中均有对应章节,因PPT序号混乱,不在考核知识点后一一罗列,请在PPT中查找。 一、客观部分:(单项选择、多项选择、不定项选择、判断) (一)、选......

    通信软件设计教学大纲

    通信软件设计 (专业限选课) Design of Communication Software 【课程编号】XZ26199 【学分数】3 【学时数】60 = 38(理论)+ 6(研究)+ 16(实验) 【适用专业】网络通信工程 一、教学......