花了好几个小时,测试通过,希望楼主多给点分
import javautilScanner;
class Question{
private int firstParam;
private int secondParam;
private String operator;
private int answer;
private int score;
public int getFirstParam() {
return firstParam;
}
public void setFirstParam(int firstParam) {
thisfirstParam = firstParam;
}
public int getSecondParam() {
return secondParam;
}
public void setSecondParam(int secondParam) {
thissecondParam = secondParam;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
thisoperator = operator;
}
public int getAnswer() {
return answer;
}
public void setAnswer(int answer) {
thisanswer = answer;
}
public int getScore() {
return score;
}
public void setScore(int score) {
thisscore = score;
}
//构造
public Question(int firstParam, int secondParam) {
thisfirstParam = firstParam;
thissecondParam = secondParam;
}
}
public class StudentStudy {
private int questionNumber;
private String operator;
private Question[] questions;
private int rightNumber=0;
private int wrongNumber=0;
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
thisoperator = operator;
}
public int getQuestionNumber() {
return questionNumber;
}
public void setQuestionNumber(int questionNumber) {
thisquestionNumber = questionNumber;
}
public int getRightNumber() {
return rightNumber;
}
public void setRightNumber(int rightNumber) {
thisrightNumber = rightNumber;
}
public int getWrongNumber() {
return wrongNumber;
}
public void setWrongNumber(int wrongNumber) {
thiswrongNumber = wrongNumber;
}
public Question[] getQuestions() {
return questions;
}
public void setQuestions(Question[] questions) {
thisquestions = questions;
}
public int getRandom(){
return (int)(Mathrandom()10);
}
public int calculateByOperator(String operator,int first,int second){
switch(operatorcharAt(0)){
case '+':
return first+second;
case '-':
return first-second;
default:
return 0;
}
}
public void makeQuestion(){
mywhile:
while(questions[questionNumber-1]==null){
Question question=new Question(getRandom(),getRandom());
for(int i=0;questions[i]!=null&&i<questionNumber;i++){
if((questiongetFirstParam()==questions[i]getFirstParam())&&(questiongetSecondParam()==questions[i]getSecondParam())){
continue mywhile;
}
}
for(int i=0;i<questionNumber;i++){
if(questions[i]==null){
questions[i]=question;
questions[i]setOperator(operator);
questions[i]setScore(100/questionNumber);
questions[i]setAnswer(calculateByOperator(operator,questions[i]getFirstParam(),questions[i]getSecondParam()));
break;
}
}
}
}
public StudentStudy(int questionNumber){
thisquestionNumber=questionNumber;
questions=new Question[thisquestionNumber];
}
public static void main(String[] args){
Scanner input=new Scanner(Systemin);
Systemoutprintln("现在开始测试,请填写要测试的试题数量(1-100):");
int number=inputnextInt();
StudentStudy ss=new StudentStudy(number);
Systemoutprintln("请选择要测试的试题类型:1加法2减法");
int type=inputnextInt();
switch(type){
case 1:
sssetOperator("+");
break;
case 2:
sssetOperator("-");
break;
default:
Systemoutprintln("输入有误,退出系统!");
Systemexit(0);
}
ssmakeQuestion();
for(int i=0;i<number;i++){
Systemoutprintln("第"+(i+1)+"题:"+ssgetQuestions()[i]getFirstParam()+ssgetQuestions()[i]getOperator()+ssgetQuestions()[i]getSecondParam()+"=");
int answer=inputnextInt();
if(ssgetQuestions()[i]getAnswer()==answer){
sssetRightNumber(ssgetRightNumber()+1);
Systemoutprintln("回答正确!");
}
else{
sssetWrongNumber(ssgetWrongNumber()+1);
Systemoutprintln("回答错误!");
}
}
Systemoutprintln("您总共答了"+ssgetQuestionNumber()+"道题,答对"+ssgetRightNumber()+"道,答错"+ssgetWrongNumber()+"道,最后总分为:"+ssgetRightNumber()100/ssgetQuestionNumber()+"分");
}
}
(1)控制流图
(2)计算环路复杂度
环路复杂度=P+1 (P为判断节点数)=3+1=4
(3)程序的独立路径
1) 4-25
2) 4-6-8-25
3) 4-6-11-15-22-4-25
4) 4-6-11-19-22-4-25
(4)测试用例
1) i_count=0,预期结果 i_temp=0
2) i_count=1,i_flag=0,预期结果 i_temp=i_count+100=101
3) i_count=1,i_flag=1,预期结果 i_temp=i_count10=10
4) i_count=1,i_flag=2,预期结果 i_temp=i_count20=20
不知道是不是你的题目写错了,上面描述的函数说明与程序中实际罗列的不符,我只能选取其中一个来设计用例了,不论选取哪一个函数公式,只是在预期结果处会有出入,其他均无影响
软件开发一般分为五个阶段:
1问题的定义及规划此阶段是软件开发与需求放共同讨论,主要确定软件的开发目标及其可行性。
2需求分析在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。需求分析阶段是一个很重要的阶段,这一阶段做的好,将为整个软件项目的开发打下良好的基础。逗唯一不变的是变化本身地,同样软件需求也是在软件爱你开发过程中不断变化和深入的,因此,我们必须定制需求变更计划来应付这种变化,以保护整个项目的正常进行。
3软件设计此阶段中偶要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计和详细设计。还的软件设计将为软件程序编写打下良好的基础。
4程序编码此阶段是将软件设计的结果转化为计算机可运行的程序代码。在程序编码中必定要制定统一、符合标准的编写规范。以保证程序的可读性、易维护性。提高程序的运行效率。
5软件测试在软件设计完成之后要进行严密的测试,一发现软件在整个软件设计过程中存在的问题并加以纠正。整个测试阶段分为单元测试、组装测试、系统测试三个阶段进行。测试方法主要有白盒测试和黑盒测试。以上就是软件开发过程的五个阶段,但是有的时候在软件爱你开发过程中并不是必须按照这个过程进行的。
class Test
{
public:
Test(int x,int y)
{
a=x;
b=y;
}
void show();
{
cout<<a<<"+"<<b<<"="<<a+b<<endl;
}
private:
int a;
int b;
}
int main()
{
Test x(2,3);
xshow();
xset(30,20);
xshow();
}
程序输出结果:
2+3=5
20+30=50
软件测试的5个基本流程:
1、需求分析、需求评审。2、编写测试计划。3、编写测试用例、用例评审。4、执行测试、提交bug、回归测试。5、编写测试总结报告。
软件测试模型:
传统:项目计划——需求分析——软件设计——程序开发——软件测试——集成维护
V模型:需求分析-概要设计-详细设计-软件编码-单元测试-集成测试-系统测试-验收测试
W模型:用户需求-需求分析-概要设计-详细设计-编码-单元测试-集成测试-验收测试-单元测试设计-集成测试设计-系统测试设计-验收测试设计-集成-实施-交付
H模型:测试准备-测试就绪点-测试执行-测试流程-其他流程
X模型:程序片段1-测试设计-工具配置-执行测试-编码完成-执行测试-工具配置-测试设计-程序片段N;封版-执行测试-测试设计-工具配置-迭代1N-探索式测试-执行测试
摘要:详细介绍了基于多P89C668单片机的组合逻辑电路自动测试诊断系统的设计,包括硬件结构设计和软件设计。该自动测试诊断系统采用USB接口实现计算机与诊断平台的通信,其移动式结构便于在现场进行测试,且设备成本低、 *** 作简单。
关键词:自动测试诊断系统 多单片机 P89C668 USB
随着IT产业和通信技术、电子技术、计算机技术的高速发展,大量的生产装备和产品的电子化、数字化、自动化、智能化的程度越来越高,与之配套的电子测量设备必须适应这种形势。因此,综合测量技术、电子技术、自动化技术和计算机技术于一体的自动测试系统发展日益完善,在一些高度电子化产品、航空航天和军用武器装备中以及工业自动化、通信、光学、能源等诸多领域中得到了广泛应用。
一般意义的自动测试系统是指采用计算机控制,能实现自动化测试的系统。这类系统通常是在标准的测控总线或仪器总线(CAMAC、GPIB、VXI、PXI、CAN等)的基础上组建而成的。目前,通用串行总线(Universal SerialBus,即USB)以其方便的即插即用和热插拔特性及较高的传输速率,成为PC机领域广为应用的外设连接规范。本文介绍的自动测试诊断系统是以五片P89C668单片机为核心组成故障诊断平台,采用基于FT245BM USB芯片的通信卡建立计算机与测试诊断平台通信的桥梁,使其能对需要检测的组合逻辑数字电路板进行测试,并可以根据标准诊断数据库对产生故障的电路板进行自动故障定位。目前该系统能够对多种不含有不受控制的部件如CPU、存储元件、晶振、阻容式单稳态等的数字电路板进行自动测试及故障诊断,可测试的电路板边缘连接器的最大引脚数为96个。
1 硬件结构
该测试诊断系统的硬件主要由以下部分组成:
·计算机
·USB通信电缆
·USB通信卡
·多MCU系统测试诊断平台
·微型开关电源
·散热风扇
·通道连接适配器板等
1.1 计算机
计算机的主要功能是通过USB接口控制测试诊断平台,进而完成测试平台系统自检、通道输入/输出的定义、发送测试激励数据、接收响应数据、数据计算与分析等工作。
1.2 USB通信卡
USB通道卡是连接计算机与测试平台的桥梁。它的主要功能一方面是将计算机发送的控制命令、数据送到测试平台的主MCU,使测试平台完成各种测试任务;另一方面是将测试平台中多MCU系统的自检信息和测试结果送往计算机,以供计算机进行判断与分析。
USB通信卡是基于FTDI公司的FT8U245BM芯片组成的,具有数据传送数据高(达8Mb/s)和即插即用等优点。
1.3 多MCU系统构成的测试平台
多MCU系统由一个MCU和四个从MCU组成。所有的MCU均采用PHILIPS公司的P89C668单片机芯片,其内部有可ISP/IAP编程的64KB Flash程序存储器和8KB RAM,每个机器周期可采用六个时钟周期,是传统单片机(80C51)的两倍。在其余双工增强型UART中具有帧错误检测和自动地址识别功能,另外还具有可编程的时钟输出功能及可编程的计数器阵列(PCA)等,是PHILIPS公司MCU家庭中较为高端的产品。多MCU系统构成的测试平台如图1所示。
在本设计的多MCU系统中,各个MCU的功能如下:
(1)主机MCU的功能
·负责与PC机的通信。通信采用目前流行的USB总线通讯方式,一方面接收来自于PC机的命令与数据,另一方面向PC机发送测试数据和自检信息。
·解释来自PC机的命令,并向所有从机或者相应的从机发送。对来自PC机的数据进行分类,并发送给相应的从机。对自身的RAM进行自检。
·负责与四个从机的通信。通信为多机主-从方式,利用MCU的RxD和TxD端以全双工UART串行模式进行通信,并使用帧错误检测和自动地址识别功能。
·管理四个从机进行同步测试。主MCU利用P1口的低四位(14、P15、P16、P17)向四个从机发送同步控制信号,使得多个从机在测试过程中能够保持同步性。
(2)从机MCU1~MCU4的功能
·通过RxD端口,以串行通信方式接收来自主MCU的与自己相关的命令和数据。
·每个从机的24路I/O端口P00~P07、P10~P17和P20~P27共计96路分别与测试通道Port1~Port96相连接。根据I/O端口的设备情况,向定义的输出通道输出测试激励信号,从相应的输入通道读入测试结果并存入 相应的RAM单元。
·在被测试电路板的一个输出通道测试完毕后,将测试的结果发送到主MCU的RAM存储区,并由主MCU发往计算机。
·负责自身数据存储区RAM的自检工作。当接收到主MCU的自检命令时,对自身的RAM进行自检,并将自检结果发送到主MCU。
1.4 测试通道适配接口卡
普通的被测数字电路板是不能直接插到测试平台的测试接口上的,需要有特制的测试通道适配接口卡才能进行连接。本系统提供的接口卡是96路通道的总线结构的接口卡,可与适用了本设计的数字电路板进行连接。如果要测试其它类型的数字电路板,则需要专门定做与其配套的测试通道适配接口卡。
2 软件设计
2.1 测试平台程序设计
本系统测试平台程序采用模块化设计,是基于Keil系统开发软件和TKS-668开发硬件,采用C语言与汇编语言编写的。模块化程序设计的思想就是要把一个复杂的程序按整体功能划分成若干相对独立的程序模块,各模块可以单独设计、编程、测试和查错,然后装配起来进行联调,最终成为一个有实用价值的程序。本系统的测试平台软件主要由系统的主程序、通信程序、测试程序和自检程序等模块组成。
2.1.1 主程序设计
主、从MCU的主程序设计流程图分别如图2、图3所示。本系统中的四个从MCU具有相同的功能,因此其主程序设计是一样的。主、从MCU在初始化中要设置的相关参数包括:串行口的方式、波特率、定时器的方式、中断等。
2.1.2 自检程序设计
主从MCU的自检是为了保证每个单片机都能正常工作,即USB和主MCU、主MCU和从MCU之间的通讯正常,并且保证每个单片机的RAM没有损坏。
主MCU和从MCU之间的通讯是否正常的自检是:先由主单片机向从单片机发一串数据,然后再由从单片机把接收到的数据发回主单处机,判断两串数据的个数和内容是否一致,一致的话则说明通讯正常。同理,USB和主MCU之间通讯自检的原理也是如此。
MCU的RAM自检的原理是:对于每一个RAM的存储单元,先把一个数据写入该RAM的单元,然后再从该单元里读出一个数据,判断两者是否一致,如果一致则说明该RAM单元没有损坏。
2.1.3 通讯程序设计
系统的通讯程序包括:主MCU与USB之间的通讯程序、主MCU与从MCU之间的通讯程序以及从MCU对被检测电路板的扫描程序。
主MCU的USB是通过USB的管脚D0~D7和主MCU的管脚P00~P07传递数据的。控制主要是通过USB的四个管脚:RXF、TXE、WR、/RD和主MCU的四个管脚:P14、P15、P16、P17进行的。当TXE为低且WR从0变为1时,数据写入USB;当RXF为低且/RD从1变为0时,数据从USB读到主MCU。主MCU通过P14和P15对USB的RXF和TXE进行判断,然后通过P16和P17对USB的WR和/RD进行控制传递数据。
主MCU与从MCU之间利用MCU的RxD和RxD端以全双工UART串行模式进行通信,串行通讯通过中断实现,使用了帧错误检测和自动地址识别功能。本系统的主MCU采用广播通讯方式,由特殊寄存器SADEN和SADDR逻辑或产生从机的广播地址,利用地址自动识别功能,通过发送广播地址,同时发命令与四个从MCU进行通讯。当主MCU只和单个从MCU通讯时,采用点点通讯方式,由SADEN和SADDR相与产生的特定地址来确认哪些从机被选中与主机进行通讯,不需要再进行软件查询。
从MCU对被检测电路板的扫描程序采用的是功能测试技术。为了检测某一组合逻辑电路板是否存在故障,首先把电路板插到诊断插槽上,由于每个输出端口只是与该电路板所有端口中的几个有逻辑关系,所以扫描程序只需对某个输出端口有逻辑关系的电路板的输入端口进行从全0到全1的电平激励(比如有五个输入端口,一共有2 5=32组激励)。对于有逻辑关系的输入超过七个以上时,由于工作量很大,不实行从全0到全1的激励,而是从中选择128组激励进行类似抽查的检测,然后读取输出端口,把输出结果传输到计算机内,和标准数据库的仿真结果进行分析与比较,判断是否一致,如果出现不一致的情况,则说明电路板存在故障。
2.2 应用系统软件设计
安装在计算机上的自动测试诊断系统软件采用Visual 60语言编程,其主要作用是使计算机向USB接口通信卡发送测试激励数据、接收响应数据、进行数据计算与分析等。
2.3 标准诊断数据库的软件产生方法
建立标准诊断数据库的目的是为了进行自动故障定位。本系统可用两种方法建立标准诊断数据库:第一种方法是根据被测数字电路板的原理图,在一些EDA软件环境如Protel、Foudation、Maxplus II中通过仿真功能生成标准诊断数据库。第二种是测试功能正常的数字电路板,在特定的激励下记录该电路板的响应数据,由软件自动追加到相应的数据库中,作为今后测试该电路板的标准诊断数据库。
由于本系统所要测试诊断的电路板端口数较多,采用第二种方法不但工作量非常大,而且还要确保所测数字电路板在测试过程中功能正常,因此本系统采用第一种方法。考虑到所测的电路板为组合逻辑数字电路板,所以本系统采用Xilinx公司的Foundation F31i软件环境,在原理图编辑器(Schematic Editor)中输入被测数字电路板的原理图,然后在功能仿真器(Functional Simulation)r Script Editor中利用软件自带的仿真命令自动生成标准诊断数据文件,再由应用系统软件将数据导入相应的数据库。
目前一般的自动测试诊断系统通常是在标准的测控总线或仪器总线(CAMAC、GPIB、VXI、PXI、CAN等)的基础上组建而成的,其成本较高、体积庞大、 *** 作复杂,基础上组建而成的,其成本较高、体积庞大、 *** 作复杂,在测试过程中显得非常不方便,难以满足现代科技工作者的需要。本文介绍的自动测试诊断系统是以五片P89C668单片机为核心组成故障诊断平台,采用基于FT245BM USB芯片的通信卡实现计算机与测试诊断平台的通信。该系统的便携式结构特别适合于现场测试,具有成本低、体积小、重量轻、结构紧凑、自动化程度高等优点;系统的 *** 作比较简单,只要掌握计算机的一般 *** 作,具有一定的数字电路技术基础,能够看懂一般的数字电路原理的,经过简单的技术培训,详细阅读并理解本系统的使用说明后就可以进行 *** 作;系统硬件模块的标准化和软件模块的可复用性使系统具有很强的扩展能力。目前该测试诊断系统已经投入使用,效果良好,完全达到了预期的设计目的。
染色体是细胞核中载有遗传信息(基因)的物质,在显微镜下呈丝状或棒状,由核酸和蛋白质组成,在细胞发生有丝分裂时期容易被碱性染料着色,因此而得名。在无性繁殖物种中,生物体内所有细胞的染色体数目都一样。而在有性繁殖物种中,生物体的体细胞染色体成对分布,称为二倍体。性细胞如精子、卵子等是单倍体,染色体数目只是体细胞的一半。
在有不同性别的生物体内,有两个基本类型的染色体:性染色体和常染色体。前者控制性联遗传特征,后者控制着除性联遗传特征以外的全部遗传特征。人体共有22对常染色体和一对性染色体。男女的性染色体不同,男性由一个X性染色体和一个Y性染色体组成,而女性则有两个X性染色体。第22对染色体是常染色体中最后一对,形体较小,但它与免疫系统、先天性心脏病、精神分裂、智力迟钝和白血病以及多种癌症相关。
研究结果表明,每一个染色体含有一个脱氧核糖核酸(DNA)分子,每个DNA分子含有很多个基因,一个基因是DNA分子的一部分。现代遗传学认为,基因是DNA分子上具有遗传效应的特定核苷酸序列的总称,是具有遗传效应的DNA分子片段。基因位于染色体上,并在染色体上呈线性排列。基因不仅可以通过复制把遗传信息传递给下一代,还可以使遗传信息得到表达,也就是使遗传信息以一定的方式反映到蛋白质的分子结构上,从而使后代表现出与亲代相似的性状。一个基因要有正常的生理机能,它的几个正常组成部分一定要位于相继邻接的位置上,也就是说核苷酸要排成一定的次序,才能决定一种蛋白质的分子结构。假使几个正常组成部分分处于两个染色体上,理论上就是核苷酸的种类和排列改变了,这样就失去正常的生理机能。所以,基因不仅是一个遗传物质在上下代之间传递的基本单位,也是一个功能上的独立单位。
DNA的双螺旋结构
染色体的DNA分子中含有四种核苷酸,核苷酸排列顺序的不同决定了遗传信息的差异。人的生、老、病、死归根结底都与基因和染色体相关。人体基因组图谱好比是一张能说明构成每一个人体细胞脱氧核糖核酸(DNA)的30亿个碱基对精确排列的“地图”。这些碱基对以一种特殊方式排列形成人体的10万个基因,基因又成为制造蛋白和化合物的蓝图,蛋白和化合物则负责指导人体细胞和器官的形成和运作。科学家们认为,通过对每一个基因的测定,人们将能够找到新的方法来治疗和预防许多疾病,如癌症和心脏病等。从理论上讲,如果掌握了所有基因上核苷酸分布的详细情况,关于人类生长、发育、衰老、遗传病变的秘密都将随之揭开,科学家将拥有新的“武器”来征服癌症、艾滋病、肝炎、肺结核和阿尔茨海默氏症等。
人类基因组研究
人类只有一个基因组,大约有5-10万个基因。人类基因组计划是美国科学家于1985年率先提出的,旨在阐明人类基因组30亿个碱基对的序列,发现所有人类基因并搞清其在染色体上的位置,破译人类全部遗传信息,使人类第一次在分子水平上全面地认识自我。
为了破译人体DNA分子的全部核苷酸顺序,建立完整的遗传信息数据库,由多国政府支持的人体基因组计划在1989年启动,先后有美、英、日、德、法及中国等6个国家参与,并于2003年4月宣布完成人类基因组序列绘制。此后,有塞莱拉遗传信息公司等多家公司和实验室先后宣布独立或联合破译人体基因组。破译人类基因组序列这一生命科学成就将促进生物学的不同领域如神经生物学、细胞生物学、发育生物学等的发展;医学也将从中获得极大益处,5000多种遗传性疾病以及恶性肿瘤、心血管疾病和其它严重危害人类的疾病,都有可能得到预测、预防、早期诊断和治疗。
1990年,美国启动“人类基因组计划”,拉开解读和研究遗传物质DNA的序幕,截至2009年10月20日,全世界已有5973种生物进行基因组测序,其中已完成发表的有1117种。
2003年4月,中、美、日、德、法、英等国科学家宣布人类基因组序列图绘制完成,人类基因组计划所有目标全部实现。已完成的序列图覆盖人类基因组所含基因区域的99%,精确率达到99.99%。
2012年9月5日,国际科学界宣布,“DNA元素百科全书”计划(简称ENCODE)获得了迄今最详细的人类基因组分析数据,其成果由于非常复杂,以30篇论文的形式同时发表在英国《自然》杂志等多份学术刊物上。这是“人类基因组计划”之后国际科学界在基因研究领域取得的又一重大进展。人类基因组计划让我们得到了人类基因组图谱,但其中许多基因过去都不知道有什么功能。研究者最常关注的是与编码蛋白质相关的基因,但它们只占整个基因组的约2%。本次公布的数据显示,人类基因组中约80%的基因都有某种确定的功能。
以上就是关于java课程设计“小学算术运算测试程序”全部的内容,包括:java课程设计“小学算术运算测试程序”、软件测试的设计题目,来神人,在线等高分、应用程序的开发都需要测试,测试的过程一般包括哪几个阶段等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)