实践项目流程展示

核心提示文章导读【项目遵循需求分析、程序设计、编码、测试、运行标准开发过程, 从分析项目问题入手,提出解决方案,应用对象建模工具UML设计系统,依据设计文档进行编码。】问题描述:实现一个简单的四则运算器。满足用户在Windows命令行窗口可以进行简

文章介绍

【项目遵循需求分析、编程、编码、测试、运行的标准开发流程,从分析项目问题入手,提出解决方案,用对象建模工具UML设计系统,根据设计文档进行编码。】

描述:实现一个简单的四运算符。满足用户在Windows命令行窗口中进行简单的四则操作的需求。

1.四项操作的具体功能要求:

用单个运算符实现一个表达式的计算;

用户可以重复输入表达式进行计算;

输入quit退出程序;

显示程序帮助内容。

2.角色划分和用例描述

角色是指与程序相关的人和事,是指在程序之外使用程序或与程序交互时所扮演的角色。比如使用程序的人,程序运行的环境等等。本节主要讨论与人相关的程序的作用。

这个程序只涉及一个角色,就是程序的使用者,他输入公式,程序给出公式结果;用户输入退出命令,程序退出;当用户不熟悉如何使用程序时,用户可以查看程序给出的帮助说明。

本程序使用用例图描述角色功能,通过用例图分析整理功能需求。画用例图的过程就是程序建模的过程,建立的模型就是用例模型。

通过角色分析可以看出,程序用户有三种用例模型,即输入公式、退出程序、查看帮助。

3.用例图

用例图中通常有三个元素:参与者、用例以及程序边界。用例描述了程序为用户提供的功能,即程序能为用户做什么。图例符号是一个椭圆;就是表1中参与者划分的角色,也就是程序的用户。图例符号是一个小人;最后,程序边界描述了程序本身实现的功能与外部交互的边界。例如,参与者在项目边界之外,用例在项目边界之内,图例符号是一个方框。

公式计算的用例图

公式计算案例包含五个子案例,其中用例、用例、用例、用户有交互行为。用例和用例是内部用例,被用例调用和使用。用例扫描公式。如果发现错误,将通过公式解决并返回给用户。

退出程序用例图

这个用例包含两个子用例。用例用于判断用户输入的字符串。如果字符串等于“quit”,用例被调用以退出程序。

查看帮助用例图

这个用例包含两个子用例。用例用于判断用户输入的字符串。如果字符串等于“help”,则调用用例来显示帮助内容。

4.根据需求设计程序。

角色、用例以及业务流程在前面的需求分析阶段已经给出。在设计阶段,需求阶段给出的角色、用例、业务流程模型需要映射到编程语言能够识别和描述的对象、对象功能和对象行为模型。设计阶段使用的UML模型包括类图、活动图、序列图、状态图、部署图和伪代码。

在设计阶段,我们需要根据需求阶段给出的角色和用例来规划对象类。在UML设计模型中,对象类一般分为边界类、控制类和实体类。类主要用于描述外部参与者和程序之间的交互。例如,“程序用户”角色与四个操作员的交互包括:“程序用户”输入公式、查看帮助、退出程序等。控制类用于描述程序的控制流。比如四种操作符开始运行后,需要等待用户输入命令或公式,根据用户输入的内容选择不同的流程;类一般用于事物、人或者一些现实生活中的对象,这些对象都有存储数据的需求。例如,如果四个操作员要求区分角色“程序用户”并存储角色信息,则需要为角色“程序用户”建立一个实体类,以便程序可以存储每个“程序用户”的信息。

那么四个操作员的角色“程序用户”没有存储其信息的要求,所以不需要为这个角色建立实体类。与这个角色相关的用例有三个,分别是用例,用例和用例。这三个用例都有流程控制和外部交互需求,需要分别为这三个用例建立控制类和边界类。考虑到设计实用性和编程效率,可以将控件类和边界类合并为一个控件类。但考虑到可维护性和可扩展性,分开设计有利于明确代码结构,便于扩展四种算子的功能。选择什么样的设计模式取决于程序所在的环境、技术和资源。例如,当一个程序的交付日期已经确定,项目进度很紧,技术和人力资源存在问题时,应考虑设计实用性和编程效率,而应考虑可维护性和可扩展性。本节主要用于说明如何根据需求分析总结类对象,从简单易懂的角度采用合并设计的原则。

类名命名为“算术”。类名确定后,需要根据用例、业务流程图总结出类的属性和方法。

从前面的用例图和业务流程图分析可以看出,程序主要涉及三部分信息:计算公式、帮助内容和错误信息。这三部分信息都是需要程序修改和获取的,所以可以归为“算术”属性。类的属性不同于类的成员变量。类的属性内容可以通过get方法获取,通过set方法设置。

一般来说,用例图中的子用例可以概括为类方法。比如用例的子用例,,,等等。都可以概括为类方法。

图4 Arithmetic类图

类图描述

设计完类图后,可能还需要设计活动图、顺序图、状态图、部署图等。根据设计要求。它主要用于复杂的程序,以进一步合理化业务活动、流程、事件、部署等的设计需求。这个程序结构简单,不需要设计活动图。类图设计好之后,基本就可以进入编码了。

过程控制功能

程序开始运行后,首先会显示帮助内容,提示用户使用程序。然后循环等待用户的输入。用户输入完成后,程序根据用户的输入选择不同的分支执行程序。如果输入内容是“退出”,则执行退出程序分支;如果输入内容是“帮助”,则执行显示帮助器分支;如果不是前两项,执行计算程序分支。执行分支后,继续等待用户输入。控制流程如下图所示:

图5 程序控制流程图

公式计算功能

计算公式并返回计算结果。计算之前,先对公式进行语法判断。如果公式语法错误,返回错误消息并终止计算功能。如果公式语法正确,则计算公式并返回计算结果。公式计算过程如下图所示:

图6 算式计算流程图

5.根据设计写代码。

过程控制

流程描述在程序流程控制功能一节中给出。根据流程描述,需要实现以下功能。

建立run方法并在main方法中调用它。

在main方法中,声明作为算术类成员的变量temp algorithm,调用new方法初始化它,然后调用算术类的run方法。

显示帮助内容

部分需求帮助内容和显示格式如下:

* * *欢迎来到四大运营商* * *

公式计算:输入公式后,按回车键,程序会给出答案。公式仅限于公式。仅支持包含单个运算符和两个操作数的公式。比如:15+20,8*9,20/5等。

退出:请输入“quit”命令,然后按回车键。

查看帮助:请输入“help”命令并按回车键。

算术类的属性“help”存储帮助内容,showHelp方法显示帮助内容。在算术类方法运行中添加以下代码:

在循环中等待用户输入。

在程序顶部导入java.util包,在run方法中添加while循环代码,在循环体中获取用户输入代码。

在run方法中添加do-while循环语句循环接收用户的输入,这是一个无限循环,后续代码需要添加exit循环语句。

判断用户输入内容,选择不同的节目分支。

根据用户的输入,程序流有三个分支。如果输入内容是“quit”,调用算术类的quit方法退出程序;如果输入内容是“help”,调用算术类的showHelp方法;如果不是前两项,

调用算术类的calculateFormula方法。将if-else语句添加到run方法的do-while循环语句中。

配方计算

计算公式并返回计算结果。计算之前,先对公式进行语法判断。如果公式语法错误,返回错误消息并终止计算功能。如果公式语法正确,则计算公式并返回计算结果。

语法扫描

扫描用户输入的公式,检查公式的语法是否符合程序的要求。判断语法是否正确的规则如下:

●公式的开头和结尾字符必须是数字;

●公式只能包含数字和运算符“+”、“-”、“*”和“/”;

●运算符不能是连续的;

●运算符有且只能包含一个;

将以下代码添加到算术类的scanFormula方法中:

public string扫描公式{ string result = " sucessString strFormula = getFormulachar ch//声明count变量来存储运算符int count=0的出现次数;//遍历strFormulafor++){//获取strFormula的第I个字符ch = strFormula.charatif { continue;} else if { count++;//公式的首末字符不能是运算符如果-1) {result = "公式的首末字符不能是运算符";打破;}//如果{result = "输入的公式只能包含一个运算符",则公式只能包含一个运算符;打破;} }else {result = "输入的公式包含非法字符,公式首字符非法";打破;} }返回结果;}

语法扫描采用遍历公式所有字符的算法来判断公式的每个字符。for循环遍历公式的所有字符,for循环体的if-else语句判断公式的单个字符是否符合语法要求,如果不符合,则设置语法错误信息并跳出循环。

计算公式

具体来说,算法就是对公式进行遍历分析得到操作数和运算符,然后用switch语句控制不同的计算分支得到计算结果。

将以下代码添加到算术类的calculateFormula方法中:

公共字符串计算公式{ string result =//声明num1和num2变量来存储操作数字符串num1 =字符串num2 =//声明op,用来存放运算符字符串op =char ch//判断布尔bFirst = trueString strFormula = getFormula//遍历strFormulafor++){//获取strFormula的第I个字符ch = strFormula.charatif { if num 1+= ch;else num 2+= ch;} elseif { bFirst = falseop+= ch;} }//计算公式//得到运算符ch = op.charAt//将字符串强制转换为double类型double dnum 1 = double . parse double;double dnum 2 = double . parse double;double dResult = 0.0switch { case '+':d result = dnum 1+dnum 2;打破;case '-':d result = dnum 1-dnum 2;打破;case ' * ':d result = dnum 1 * dnum 2;打破;case '/':{ ifd num 2 = = 0){ d result = 0.0;打破;} d result = dnum 1/dnum 2;}破;} returnString.valueOf}

完善算术课的运行方法

在算术类的run方法的循环体中添加扫描公式语法、计算公式、输出计算结果的代码。

publicvoidrun

{ String strHelp = "***欢迎使用四则运算符* * n "+"公式计算:输入公式后,按回车键,程序会给出答案。公式仅限于公式。仅支持包含单个运算符和两个整数操作数的公式。比如:15+20,8*9,20/5等。n"+"退出程序:请输入" quit "命令,然后按enter。+"要查看帮助:请输入“help”命令,然后按enter。;setHelp显示帮助;/声明Scanner变量并用new运算符实例化Scanner Scanner sc = new Scannerdo { String strInput = sc.next//判断用户输入内容并执行不同的分支程序,如果)退出;else if)show help;else { setFormula//语法扫描字符串ret = scanFormula//语法正确if){ ret = calculate formula;打印结果;}else {//输出语法错误信息printResult} } }而;}

至此,程序完成。

 
友情链接
鄂ICP备19019357号-22