实验使用基本路径测试法求解“自动售货机”问题
- 格式:doc
- 大小:184.50 KB
- 文档页数:11
1.动手实践题。
火车票退款业务流包括多个业务环节,其中比较重要的一个环节就是退票金额的计算。
请先熟悉下面的退票业务需求。
退票业务需求描述:(1)对开车前15天(不含)以上退票的,不收取退票费。
(2)票面乘车站开车前48小时以上的,退票时收取票价5%的退票费。
(3)开车前24小时以上、不足48小时的,退票时收取票价10%的退票费。
(4)开车前不足24小时的,退票时收取票价20%的退票费。
(5)上述计算的尾数以5角为单位,尾数小于2.5角的舍去、2.5角以上且小于7.5角的计为5角、7.5角以上的进为1元。
(6)开车前2小时并且没有打印纸质车票,可以在网上退票,晚于开车前2小时或者已经打印了车票,只能在车站退票窗口办理。
假设用户张三购买了一张2019年6月30日上午07:52(2019-06-30-07)的火车票,请尝试运用场景法设计该用户退票流程的测试用例。
订单参见图6-26。
图6-26 火车票订单答案:用场景法设计测试用例。
2.动手实践题。
某程序有4个输入因子A,B,C,D,其水平分别为: A: A1,A2 B: B1,B2,B3 C: C1,C2,C3,C4 D: D1,D2,D3 试用PICT工具为该程序设计测试用例。
答案:创建test1.txt文件,保存到PICT安装目录下,文件内容如下示:打开CMD命令控制台,切换到PICT安装目录,运行PICT命令生成测试用例,如下图所示:最终生成的测试用例如下图所示:3.动手实践题。
设有3个独立的查询条件,根据这些查询条件可以获得特定员工的个人信息。
员工号(ID)员工姓名(Name)员工邮件地址(Email)每个查询条件包括3种情况:不填、填上正确的内容、填上错误的内容。
请用正交试验法为其设计测试用例。
答案:员工号(ID):1001、NULL、A!员工姓名(Name):Alice、NULL、A!001员工邮件地址(Email):************、NULL、A!001选择正交表L9(34),共9条测试用例,如下表示。
《软件测试技术》实验指导书实验1、自由测试实验目的1. 理解软件测试的概念。
2. 提高反向思维的能力。
二、实验任务针对某产品Beta 的版本,对照其竞争对手的产品,进行测试,以发现该软件产品 潜在的任何问题,记录下来。
Discuz! X beta 对比 PHPWi nd实验2、黑盒测试方法:等价类划分法+边界值分析方法、实验目的1. 掌握等价类、有效等价类、无效等价类、边界值等概念。
2. 掌握边界值分析法、等价类划分法的测试用例设计方法。
3. 能够将这两种方法结合起来,灵活运用二、实验任务以下三个任务、至少完成一个1、对三角问题综合运用边界值分析方法、等价类划分方法设计测试用例。
三角形问题:void Triangle (int a, int b, int c) 函数规定输入三个整数 a 、b 、c 分别作为三边的边长构成三角形。
通过程序判定所构成的三角形的类型(等边三角形、等腰三角形、一般三角形、构不成三角形),并在屏幕上输出。
1<=a,b,c<=200实验步骤:①划分等价类,得到等价类表。
等价类表格式如下:②综合运用这两种方法设测试用例,得到测试用例表:③ 综合运用这两种方法设测试用例,得到测试用例表:④ 根据上述测试用例表,能否进行优化,获得最小测试用例集合:2、对于找零钱最佳组合问题运用边界值分析法设计测试用例。
实验步骤:①分析边界值。
②运用健壮性边界条件法设计测试用例,得到测试用例表(测试用例表格式同实验1)。
③执行测试,填写软件缺陷报告(软件缺陷报告格式同实验1)。
3、现有一个程序int CheckTel(char *rc, char *n)执行电话号码有效性检查功能,中国的固定电话号码由两部分组成。
这两部分的名称和内容分别是:地区码(rc):以0开头的三位或者四位数字(包括0)。
电话号码(n):以非0、非1开头的七位或者八位数字。
对该程序进行边界值分析,然后进行等价类划分,分别运用边界值条件、等价类划分的结果来设计测试用例,并尽可能优化所设计的测试用例。
自动售货机实验报告实验目的:本次实验的目的旨在了解自动售货机的工作原理和方法,掌握串口通信和图形化用户界面设计的技巧,实现一个基础的自动售货机模型并调试其功能。
实验环境和工具:硬件平台:Arduino UNO开发板、LCD液晶屏、矩阵键盘、电机、红外传感器等。
软件环境:Arduino IDE集成开发环境、Proteus电路仿真软件。
实验步骤:1. 硬件搭建2. 程序编写编写程序,实现自动售货机的基本功能,包括选择商品种类、投币、购买商品、找零等。
程序中以串口通信方式实现与PC端的通信,将运行状态和操作结果实时传输到PC端进行监测和反馈。
3. 软件仿真在Proteus电路仿真软件中,将硬件连线图导入,设置各个元件的型号和参数,构建完整的电路仿真模型,并运行模拟程序,进行自动售货机模型的完整验证和调试。
4. 调试运行将编写好的程序烧录到Arduino开发板中,将电路模型与实际硬件连接起来,进行硬件调试和运行测试。
在控制台上进行商品选择、投币、购买、找零等操作,并观察LCD屏幕反馈和PC端的串口通信,检测程序运行是否正常、反应是否及时、显示是否精准等。
实验结果:经过以上的实验操作和调试测试,我们成功实现了一个基础的自动售货机模型,其核心功能和操作结果均符合设计要求和实际需求。
通过电路仿真和硬件实验,我们深入了解了自动售货机的实际工作原理、运行机制和参数特性,掌握了串口通信和图形化用户界面设计等技巧,为今后相关工作提供了良好的基础。
同时,我们也发现了一些问题和待优化的方面,例如降低误操作率、提高售货速度、增加商品种类等,这些都将成为下一步改进的重点和方向。
本次实验是一项十分有趣和实用的工作,它不仅让我们明白了自动售货机的实现原理和工作方式,同时也展示了设计和制作电路的技能和能力。
在实验过程中,我们遇到了不少问题和困难,但我们也能够积极思考和动手解决,最终获得了可靠和优秀的成果。
从这份实验中,我们深入体验了科学与技术的魅力,感到对学习和未来发展的期望和信心,期望今后能够更好地发掘自身的潜力和优异实力,为社会和人类的发展做出建设性的贡献。
自动售货机实验报告自动售货机实验报告引言:自动售货机是一种现代化的商业销售设备,它通过自动化技术实现商品销售和支付功能,为消费者提供了便利和选择。
本实验旨在探究自动售货机的工作原理、销售模式以及对消费者行为的影响。
一、自动售货机的工作原理自动售货机通过内部的电子系统和机械结构实现商品的储存、选择、售卖和支付等功能。
其工作原理主要包括以下几个步骤:1. 商品储存:自动售货机内部设置有多个货道,每个货道可以储存一种商品。
商品通过传送带或弹簧等装置储存在货道中,保持整齐有序。
2. 商品选择:消费者通过触摸屏或按键选择所需商品。
自动售货机内部的电子系统会根据消费者的选择信号,控制相应货道的开关门,将商品送至取货口。
3. 商品售卖:当消费者选择的商品位于取货口时,自动售货机会打开门,消费者可以取走商品。
部分自动售货机还配备了自动找零功能,方便消费者支付。
4. 支付方式:自动售货机通常支持多种支付方式,如硬币、纸币、银行卡、移动支付等。
消费者可以根据自己的需求选择适合的支付方式。
二、自动售货机的销售模式自动售货机的销售模式主要分为自动售卖和自助选购两种。
1. 自动售卖:在这种模式下,自动售货机会事先设定好商品的价格,并通过内部的计算机系统实时监测库存和销售情况。
当商品售罄或库存不足时,自动售货机会停止销售并显示相应信息。
这种模式适用于一些固定价格和库存较少的商品,如饮料、零食等。
2. 自助选购:在这种模式下,自动售货机提供了更多的选择和定制化服务。
消费者可以根据自己的需求选择商品的种类、数量和价格等,并通过自动售货机完成支付。
这种模式适用于一些需要个性化定制的商品,如鲜花、礼品等。
三、自动售货机对消费者行为的影响自动售货机的出现改变了传统的购物方式,对消费者行为产生了一定的影响。
1. 购物便利性:自动售货机的24小时不间断运营,为消费者提供了更加便捷的购物体验。
消费者可以在任何时间和地点购买所需商品,无需排队等待。
题目:有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。
其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。
若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。
1.分析这一段说明,列出原因和结果原因:1.售货机有零钱找2.投入1元硬币3.投入5角硬币4.押下橙汁按钮5.押下啤酒按钮结果:21.售货机〖零钱找完〗灯亮22.退还1元硬币23.退还5角硬币24.送出橙汁饮料25.送出啤酒饮料2.画出因果图如图所示。
所有原因结点列在左边,所有结果结点列在右边。
建立中间结点,表示处理的中间状态。
中间结点:11. 投入1元硬币且押下饮料按钮12. 押下〖橙汁〗或〖啤酒〗的按钮13. 应当找5角零钱并且售货机有零钱找14. 钱已付清3.转换成判定表:4.设计测试用例1)在售货机有零钱找的情况下,投入1元硬币,押下橙汁按钮,找回5角硬币并送出橙汁饮料。
2)在售货机有零钱找的情况下,投入1元硬币,押下啤酒按钮,找回5角硬币并送出啤酒饮料。
3)在售货机有零钱找的情况下,投入1元硬币,系统不做任何处理。
4)在售货机有零钱找的情况下,投入5角硬币,押下橙汁按钮,送出橙汁饮料。
5)在售货机有零钱找的情况下,投入5角硬币,押下啤酒按钮,送出啤酒饮料。
6)在售货机有零钱找的情况下,投入5角硬币,系统不做任何处理。
7)在售货机有零钱找的情况下,押下橙汁按钮,系统不做任何处理。
8)在售货机有零钱找的情况下,押下啤酒按钮,系统不做任何处理。
9)在售货机没有零钱找的情况下,投入1元硬币,押下橙汁按钮,售货机“零钱找完”灯亮,并退还1元硬币。
10)在售货机没有零钱找的情况下,投入1元硬币,押下啤酒按钮,售货机“零钱找完”灯亮,并退还1元硬币。
11)在售货机没有零钱找的情况下,投入1元硬币,售货机“零钱找完”灯亮。
实验04:使用基本路径测试法求解“自动售货机”问题实验学时:2实验类型:设计实验要求:必修一、实验目的●理解并掌握基本路径覆盖测试法,能够实际运用;●使用Eclipse+JUnit+EclEmma进行单元测试。
二、实验要求●开发环境:Eclipse v3.7及以上版本;JUnit v4.10及以上版本;文本编辑软件。
●硬件要求:CPU PIV 以上,256M 内存,1G 硬盘空间。
●系统要求:Windows98/Me/XP/NT/2000,IE 5 以上。
三、实验内容1.下载并安装Eclipse+JUnit+EclEmma实验环境;2.通读自动售货机程序,并在Eclipse环境下运行该程序;3.使用基本路径测试法设计测试用例;⏹绘制程序控制流图;⏹计算环路复杂度;⏹确定基本路径;⏹设计测试用例。
4.完整填写以下表格:5.编写JUnit测试用例,并运行程序,保证所有测试用例通过测试;6.使用EclEmma检测测试用例覆盖率,保证覆盖率达到100%。
四、实验结果检查与评定●提交时间:2013年4月24日之前/2013年5月1日22:00之前●提交地址:学习委员邮箱●文档命名方式:12软件专升本X班_0907052XXX_张三_实验04.doc实验报告实验序号:实验项目名称:附录问题描述自动售货机程序:●若投入5角钱或1元钱的硬币,按下“橙汁”或“啤酒”按钮,则相应的饮料就送出来;●若售货机没有零钱找,则显示“零钱找完”的红灯亮,这是再投入一元硬币并按下按钮后,饮料不送出来而且1元硬币也退出来;●若有零钱找,则显示“零钱找完”的红灯灭,在送出饮料的同时退还5角硬币。
程序流程图实验源代码(有缺陷的源代码)public class Sale Mac hine {priv ate in t c ount OfB eer, c o untO fOr ang eJu ice, co unt OfF i veCe nts, c oun tOfO neD oll ar;priv ate St rin g[] typ eOf Goo d s = {"B eer", "Ora nge Jui ce"};priv ate St rin g re sul tOf Dea l;publ ic Sal eMa chin e(){init ial();}publ ic voi d i niti al(){coun tOfBee r = 6;coun tOfOra nge Juic e = 6;coun tOfFiv eCe nts= 6;coun tOfOne Dol lar = 6;}publ ic Sal eMa chin e(i nt fiv e Cent s, int on eDol lar, i nt n umOf Bee r, int num OfO ran ge) //便于测试的初始化函数{coun tOfFiv eCe nts= f ive Cen t s;coun tOfOne Dol lar = o neD oll a r;countOf Bee r = num OfB eer;coun tOfOra nge Juic e = nu mOf O rang e;}publ ic Str ing cur ren tSt ate(){Stri ng sta te = "C urr ent St a te\n" +"Be er: "+ c oun tOf Bee r +"\n"+"Or ang e J uic e: " +co unt Of Oran geJ uic e +"\n" +"5 Cen ts: "+ c oun tOf Fiv eC ents + "\n" +"1 Dol lar: " + cou ntO fOn eD olla r;retu rn sta te;}publ ic Str ing ope rat ion(St r ing typ e, Str ing mon ey)//ty pe是用户选择的产品,m one y是用户投币种类{if(m oney.e qua lsIg nor eCa se("5C")) //如果用户投入5角钱{if(t ype.eq ual s(ty peO fGo ods[0]))//如果用户选择啤酒{if(c oun tOf Bee r>0)//如果还有啤酒{coun tOf Bee r--;coun tOf Fiv eCe nts++;resu ltO fDe al= "I npu t I nfo r mati on \n" +"Ty pe: Be er; Mo ney: 5 Ce nt s; C han ge: 0\n\n" + currentSta te();retu rn res ult OfDe al;}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "B eer Sh ort a ge";retu rn res ult OfDe al;}}else if (t ype.equ als(ty peO f Good s[1]))//用户选择橙汁{if(c oun tOf Ora ngeJ uic e > 0){coun tOf Ora nge Juic e--;coun tOf Fiv eCe nts++;resu ltO fDe al= "I npu t I nfo r mati on \n" +"Ty pe: Or ang eJu ice; M one y: 5 C ent s; Cha nge: 0\n\n" + currentSta te();retu rn res ult OfDe al;}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "T ype Er ror";retu rn res ult OfDe al;}}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "T ype Er ror";retu rn res ult OfDe al;}}else if(mo ney.equ als Ign ore C ase("1D"))//如果用户投入一元钱{if(c oun tOf Fiv eCen ts>0) //如果用户投入一元钱{if(c oun tOf Fiv eCen ts> 0) //如果用户有零钱{if(t ype.eq ual s(ty peO fGo ods[0])&&co unt OfB eer>0)//如果用户选择啤酒而且还有啤酒{coun tOf Bee r--;coun tOf Fiv eCe nts--;coun tOf One Dol lar++;resu ltO fDe al= "I npu t I nfo r mati on \n" +"yp e: Bee r; M one y: 1 Do lla r; Ch ang e: 5 Ce nts\n\n"+ currentSta te();retu rn res ult OfDe al;}else if (t ype.equ als(ty peO f Good s[1]))//如果用户选择橙汁而且还有橙汁{coun tOf Ora nge Juic e --;coun tOf Fiv eCe nts--;coun tOf One Dol lar ++;resu ltO fDe al= "I npu t I nfo r mati on: \n" +"Ty pe: Or ang eJu ice; M one y: 1 D oll ar; Ch ange: 5 Cents\n\n" + curr ent Sta te();retu rn res ult OfDe al;}else{if(t ype.eq ual s(ty peO fGo ods[0])&&co unt OfO rang eJu ice<=0){resu ltO fDe al= "F ail ue Inf o rmat ion \n" +"Be er Sho rta g e";retu rn res ult OfDe al;}else if(ty pe.equa ls(typ eOf G oods[1])&&cou ntOf Ora nge Jui c e<=0){resu ltO fDe al= "Fai lur e Info r mati on \n"+"O ran geJ uice S hor tage";retu rn res ult OfDe al;}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "T ype Er ror";retu rn res ult OfDe al;}}}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "C han ge Sho r tage";retu rn res ult OfDe al;}}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "M one y E rro r";retu rn res ult OfDe al;}}resu ltOfDe al = "F ail ure In f orma tio n \n"+ "M one y E rro r";retu rn res ult OfDe al;}}测试用例示例代码:import static org.junit.Assert.*;import org.junit.Before;import org.junit.Test;public class SaleMachineTest {SaleMachine saleMachine = new SaleMachine();@Beforepublic void setUp() throws Exception {}@Testpublic void testOperation1() {String expectedResult = "Input Information \n" +"Type: OrangeJuice; Money: 5 Cents; Change: 0\n\n" +"Current State\n" +"Beer: 6\n" +"Orange Juice: 5\n" +"5 Cents: 7\n" +"1 Dollar: 6";assertEquals(expectedResult,saleMachine.operation("OrangeJuice", "5C"));}}。
《软件测试技术》实验报告实验一单元测试专业:班级:学号:姓名:完成时间:2020年月日实验一单元测试(4学时)实验类别:基本实验实验目的:1、掌握黑盒测试技术,并能应用黑盒测试技术设计测试用例。
2、掌握白盒测试技术,并能应用白盒测试技术设计测试用例。
3、掌握对测试用例进行优化设计方法。
4、掌握单元测试技术,并按单元测试的要求设计测试用例。
5、掌握一种单元测试工具的使用。
实验内容:一、黑盒测试题目:选择1个完成。
1.题目一:电话号码问题某城市电话号码由三部分组成。
它们的名称和内容分别是:(1)地区码:空白或三位数字;(2)前缀:非'0'或'1'的三位数字;(3)后缀:4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
根据该程序的规格说明,作等价类的划分,并设计测试方案。
2.题目二:三角形问题根据下面给出的规格说明,利用边界值测试的方法,给出足够的测试用例。
“一个程序读入三个整数。
把此三个数值看成是一个三角形的三个边。
这个程序要打印出信息,说明这个三角形是三边不等的、是等腰的、还是等边的。
”3.题目三:日期问题用决策表测试法测试以下程序:该程序有三个输入变量month、day、year(month 、day 和year均为整数值,并且满足:1≤month≤12和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期。
例如,输入为2004 年11月29日,则该程序的输出为2004年12月1日。
(1) 分析各种输入情况,列出为输入变量month 、day 、year 划分的有效等价类。
(2) 分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即列出所有的动作桩)。
(3) 根据(1) 和(2) ,画出简化后的决策表。
4.题目四:自动售货机问题向自动售货机中投入1元或5角硬币,并按下【橙汁】或【可口可乐】按钮,则相应饮料送出来。
一、判断题1. 软件需求是度量软件质量的基础。
不符合需求的软件就不具备质量。
(√)2. 全面质量管理的定义是:一个组织以质量为中心,以全员参与为基础,目的在于通过让顾客满意和本组织所有成员及社会受益而达到长期成功的管理途径。
( √ )3. 发现错误是软件测试的唯一目的。
( ╳ )4. 白盒测试可以找出软件遗漏功能和代码错误问题。
( ╳ )5.软件的质量有测试组决定。
( ╳ )6.在设计测试用例时,应包括合理的输入条件和不合理的输入条件。
( √ )7. 测试从不可知内部条件开始,结果是不可预见的。
( ╳ )8. 软件缺陷一定是由编码所引起的。
( ╳ )9. 软件测试等于程序测试。
( ╳ )10. Beta测试是软件的多个用户在实际使用环境下进行的测试。
(√ )11. 经验表明,测试后程序残存的错误数目与该程序中以发现的错误数目或检错率成正比。
( √)12.验收测试比较适合采用软件自动化测试工具进行测试。
(╳)13. 软件测试是有风险的行为,并非所有的软件缺陷都能够被修复。
(∨)14. 软件质量保证和软件测试是同一层次的概念。
(x )15. 我们有理由相信只要能够设计出尽可能好的测试方案,经过严格测试之后的软件可以没有缺陷。
( x )16. 程序员兼任测试员可以提高工作效率。
( x )17. 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
(∨)18. 传统测试是在开发的后期才介入,现在测试活动已经扩展到了整个生命周期。
(∨)19. 传统测试以发现错误为目的,现在测试已经扩展到了错误预防的范畴。
∨20. 软件测试的生命周期包括测试计划、测试设计、测试执行、缺陷跟踪、测试评估。
(∨)21. 调试从一个已知的条件开始,使用预先定义的过程,有预知的结果;测试从一个未知的条件开始,结束的过程不可预计。
( x )22. 白盒测试往往会造成测试用例之间可能存在严重的冗余和未测试的功能漏洞。
( x )23. 在边界值方法中,对于一个有n个变量的函数作最坏情况测试,生成的测试用例个数是7n个。
实训十三自动售货机控制一、实训目的1.掌握计数器指令的使用及编程2.掌握自动售货机控制系统的接线、调试、操作二、实训设备三、面板图四、控制要求1.总体控制要求:如面板图所示,按M1、M2、M3按钮,模拟投入货币,Y0显示投入的货币的数量,按动“QS”和“CF”按钮分别代表购买“汽水”和“咖啡”。
出口处的“E”和“F”表示“汽水”和“咖啡”已经取出。
购买后Y0显示剩余的货币,按下“ZL”找零按键。
2.按下“M1”、“M2”、“M3”三个开关,模拟投入1元、2元、3元的货币,投入的货币可以累加起来,通过Y0的数码管显示出当前投入的货币总数。
3.售货机内的二种饮料有相对应价格,当投入的货币大于等于其售价时,对应的汽水指示灯C、咖啡指示灯D点亮,表示可以购买。
4.当可以购买时,按下相应的“汽水按钮”或“咖啡按钮”,同时与之对应的汽水指示灯C或咖啡指示灯B点亮。
表示已经购买了汽水或咖啡。
5.在购买了汽水或咖啡后,Y0显示当前的余额,按下“找零按钮”后,Y0显示00,表示已经清零五、功能指令使用及程序流程图1.计数器指令使用S1 S2 D加法计数器,将源数据(S1,S2)合并,将合并结果保存到指定的目标软元件D中。
S1 S2 D减法计数器,源软元件数据中,S2减去源软元件S1的数据内容,将合并结果或余数保存到指定的目标软元件D中。
2.程序流程图六、端口分配及接线图1.端口分配及功能表2.PLC外部接线图七、操作步骤1.检查实训设备中器材及调试程序。
2.按照I/O端口分配表或接线图完成PLC与实训模块之间的接线,认真检查,确保正确无误。
3.打开示例程序或用户自己编写的控制程序,进行编译,有错误时根据提示信息修改,直至无误,用SC-09通讯编程电缆连接计算机串口与PLC通讯口,打开PLC主机电源开关,下载程序至PLC中,下载完毕后将PLC的“RUN/STOP”开关拨至“RUN”状态。
4.按下“1元”、“2元”、“3元”按钮后。
课程设计课程名称 C 语言高级程序设计学院xxx小组成员1XXX小组成员2XXX小组成员3XXX任课教师XXX2016——2017学年第1学期一.所选题目与要求自动售货机问题情景:分析学校教学楼自动售货机的功能,设计一个自动售货系统。
功能要求:1. 系统能提供所售商品的清单(编号,名称,单价,数量)2. 客户输入商品编号及购买数量,系统显示应付的金额,输入客户实付的钱数,系统计算应找的钱数系统如果没有足够的库存或零钱时,现实应返还客户已付的金额。
(不考虑用支付宝付款的情况)3. 可增加商品种类,增加商品库存,查询商品库存,查询商品销售量及销售额。
成果要求:通过网络教学平台中的“研究型教学”建立分组,每组2-3人,通过小组讨论,确定每人的分工,并确定系统设计方案。
各小组成员在网络教学平台上进行讨论、并完成最终的报告,整个过程作为小组及个人工作评价的重要依据。
各小组成员根据系统设计方案分模块进行编程,在系统各模块编码完成后集成调试,并最终完成整个系统的测试。
根据下面的报告模板完成综合实验总结报告,并打印成纸质报告,作为大作业课程结束时上交。
附:综合实验总结报告应包含的内容:1. 系统功能说明2. 程序结构程序结构说明重要数据说明函数清单/* 每个函数的书写格式 */函数名:所在文件名函数功能参数说明算法描述或程序代码3. 系统运行结果4. 系统设计难点及其解决方法5. 不足之处6. 人员分工说明二.问题分析及算法设计主函数void main() //主函数模块{do{system("pause");show(); //显示屏幕函数,商品清单loop1:printf("现在你有%.1f元\n你可以选择商品序号开始选购或按0 退出\n",M);input(); //输入函数if(M-goods[n-1].price>v) {t=0;printf("对不起,售货机没有足够的零钱了\n谢谢光临!退还%.1f元\n",M);break;} //判断售货机是否有足够的零钱,0表无if(n==0){ //确认用户是选择离开还是买东西开始购买t=1;change(M);} //找零函数else {loop2:sell(n,M,1,1); //购买函数if(A==0)//货没有了怎么办input(); //输入函数………………………………………………………………………..if(n==0) //没货离开change(M); //找钱函数else //继续购买其它商品{……………………………………………goto loop2;返回至购买函数} //else} //ifelse if(B==0)//没钱了怎么办{…………………………………..if(m1==0) //离开change(M);返回至找零函数else //加钱{…………………………………………..goto loop1;返回至再次购买} //else} //else ifelse//有钱又有货,继续选goto loop1;返回至购买程序} //else}while(1);} //main结构体定义struct goods//定义物品清单{int number;char name[10];float price;int quantity;}goods[9]={{1,"可口可乐",3,5},{2,"拿铁咖啡",4,5},{3,"橙汁",3,5},{4,"奶茶",4,5},{5,"雪碧",2.5,5},{6,"矿泉水",2,5},{7,"椰子汁",2.5,5},{8,"格瓦斯",3,5}};struct money//定义钱的种类,数量用于记录找零的某值张数{float moneys;int mount;}money[2]={{1,0},{0.5,0}};被调用的函数float show() //显示模块--屏幕{……………………………}int input() //输入模块{…………………………..}}int sell(int n,float m,int a,int b) //出售模块n为序号,m钱,{……………………………if(goods[i].quantity>0) //表示有货{………………………………..}elseA=0; //表示没货了}elseB=0; //表示没钱了if(M==0) B=0;//判断出钱已用光return(a);return(b);}void change(float m) //找钱模块{……………………………switch(a){case 1花光…………………………………….case 2:找零……………………………………………………………………………}}三.程序源代码#include<stdio.h>#include<conio.h>float M;//M为投入的钱数int A=1,B=1,t; //A为数量标记,B为金钱标记,1表示有,0表示没有,t用于标记售货机是否能完成退款int i,n,v=100; //i用于循环显示商品列表,n用于记录输入的货号,v用于保存售货机内可以找零的钱数,初设为v=100//结构体定义struct goods //定义物品清单{int number;char name[10];float price;int quantity;}goods[9]={{1,"可口可乐",3,5},{2,"拿铁咖啡",4,5},{3,"橙汁",3,5},{4,"奶茶",4,5},{5,"雪碧",2.5,5},{6,"矿泉水",2,5},{7,"椰子汁",2.5,5},{8,"格瓦斯",3,5}};struct money //定义钱的种类,数量用于记录找零的某值张数{float moneys;int mount;}money[2]={{1,0},{0.5,0}};float show() //显示模块--屏幕{system("pause");putch('\n');for(i=0;i<8;i++){printf(" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf(" |%d%8s%7.1f元...剩余%7d|\n",goods[i].number,goods[i].name,goods[i].price,goods[i].quantity);} printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("购买东西前,请投入money!(支持1元,5元,10元和20元)\n《温馨提示,投入money过多可能无法完成退币》\n");scanf("%f",&M);return M;}int input() //输入模块{for(;;){scanf("%d",&n);if(n<0||n>8)printf("输入错误,请重新输入商品序号开始选购或按0 退出\n");else {return n;break;}}}int sell(int n,float m,int a,int b) //出售模块n为序号,m钱,{int i=0;while(n!=goods[i].number) i++;if(m>=goods[i].price){if(goods[i].quantity>0){goods[i].quantity--;M=m-goods[i].price;for(i=0;i<8;i++){printf(" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf(" |%d%8s%7.1f元...剩余%7d|\n",goods[i].number,goods[i].name,goods[i].price,goods[i].quantity);} printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("你的商品%d %s 已经出货了\n",goods[n-1].number,goods[n-1].name);}elseA=0; //表示没货了}elseB=0; //表示钱了if(M==0) B=0;//判断出钱已用光return(a);return(b);}void change(float m) /钱模块{int i,a;//用于辅助输出if(m==0) a=1;if(m!=0.0&&t!=1) a=2;switch(a){case 1:printf("钱用光了哦\n谢谢光临!");break;case 2:{for(i=0;i<2;i++)if(money[i].moneys<=m){m=m-money[i].moneys;money[i].mount++;i--;}//继续检索当前的面额是否符合条件,才会有相同面值出现printf(" 谢谢光临!\n找零\n");for(i=0;i<2;i++)if(money[i].mount>0)printf("%d张%.1f元\t\n",money[i].mount,money[i].moneys);m=0;M=0;};money[0].mount=0;break;}}void main() //主函数模块{do{int t=1; //用于标记售货机是否能完成退款,1表能float m1; //m1用于记录用户再次加的钱show(); //显示--屏幕loop1:printf("现在你有%.1f元\n你可以选择商品序号开始选购或按0 退出\n",M);input(); //输入函数if(M-goods[n-1].price>v) {t=0;printf("对不起,售货机没有足够的零钱了\n 谢谢光临!退还%.1f元\n",M);break;} //判断售货机是否有足够的零钱,0表无if(n==0){ //确认用户是选择离开还是买东西开始购买t=1;change(M);} /零函数else {loop2:sell(n,M,1,1);if(A==0)//货没有了怎么办{printf("可惜了,商品%d 已卖完了\n你还有%.1f元\n你可以买其它商品(直接输入商品序号)或按0 离开\n",n,M);input(); //输入函数if(n==0)change(M); /钱函数else{A=1;B=1;//要将标记归位goto loop2;} //else} //ifelse if(B==0)//没钱了怎么办{printf("噢,,,没钱了,你可以继续投入money购买,或按0 离开\n");scanf("%f",&m1);if(m1==0)change(M);else{M=M+m1;A=1;B=1;//标记要归位goto loop1;} //else} //else ifelse//有钱又有货,继续选goto loop1;} //else}while(1);} //main四.系统功能及运行效果图一,系统提供商品清单,并提示购买前投入money二,如果用户投入的money过多,售货机无足够硬币完成退币,自动退还用户已付金额三,用户投入money购买,确定购买商品后,系统显示如下。
实验使用基本路径测试法求解“自动售货机”问题————————————————————————————————作者:————————————————————————————————日期:实验04:使用基本路径测试法求解“自动售货机”问题实验学时:2实验类型:设计实验要求:必修一、实验目的●理解并掌握基本路径覆盖测试法,能够实际运用;●使用Eclipse+JUnit+EclEmma进行单元测试。
二、实验要求●开发环境:Eclipse v3.7及以上版本;JUnit v4.10及以上版本;文本编辑软件。
●硬件要求:CPU PIV 以上,256M 内存,1G 硬盘空间。
●系统要求:Windows98/Me/XP/NT/2000,IE 5 以上。
三、实验内容1.下载并安装Eclipse+JUnit+EclEmma实验环境;2.通读自动售货机程序,并在Eclipse环境下运行该程序;3.使用基本路径测试法设计测试用例;⏹绘制程序控制流图;⏹计算环路复杂度;⏹确定基本路径;⏹设计测试用例。
4.完整填写以下表格:编号输入值Type输入值money状态预期输出实际情况001 Beer 5C 各资源剩余Input InformationType: Beer; Money: 5 Cents; Change: 0Current State Beer: 5 Orange Juice: 6 5 Cents: 71 Dollar: 6002 OrangeJuice 5C 各资源剩余Input InformationType: OrangeJuice; Money: 5 Cents; Change: 0Current StateBeer: 6Orange Juice: 55 Cents: 71 Dollar: 6003 Beer 1D 没有啤酒Failure Information Beer Shortage……5.编写JUnit测试用例,并运行程序,保证所有测试用例通过测试;6.使用EclEmma检测测试用例覆盖率,保证覆盖率达到100%。
四、实验结果检查与评定●提交时间:2013年4月24日之前/2013年5月1日22:00之前●提交地址:学习委员邮箱●文档命名方式:12软件专升本X班_0907052XXX_张三_实验04.doc实验报告实验序号:实验项目名称:学号姓名专业、班实验地点指导教师实验时间一、实验目的及要求二、实验设备(环境)及要求三、实验内容与步骤四、实验结果与数据处理五、分析与讨论六、教师评语成绩签名:日期:附录问题描述自动售货机程序:●若投入5角钱或1元钱的硬币,按下“橙汁”或“啤酒”按钮,则相应的饮料就送出来;●若售货机没有零钱找,则显示“零钱找完”的红灯亮,这是再投入一元硬币并按下按钮后,饮料不送出来而且1元硬币也退出来;●若有零钱找,则显示“零钱找完”的红灯灭,在送出饮料的同时退还5角硬币。
程序流程图实验源代码(有缺陷的源代码)public class Sale Mac hin e {priv ate in t c ount OfB eer, c o untO fOr ang eJu ice, co unt OfF i veCe nts, c oun tOfO neD oll ar;priv ate St rin g[] typ eOf Goo d s = {"B eer", "Ora nge Jui ce"};priv ate St rin g re sul tOf Dea l;publ ic Sal eMa chin e(){init ial();}publ ic voi d i niti al(){coun tOfBee r = 6;coun tOfOra nge Juic e = 6;coun tOfFiv eCe nts= 6;coun tOfOne Dol lar = 6;}publ ic Sal eMa chin e(i nt fiv e Cent s, int on eDol lar, i nt n umOf Bee r, int num OfO ran ge) //便于测试的初始化函数{coun tOfFiv eCe nts= f ive Cen t s;coun tOfOne Dol lar = o neD oll a r;coun tOfBee r = num OfB eer;coun tOfOra nge Juic e = nu mOf O rang e;}publ ic Str ing cur ren tSt ate(){Stri ng sta te = "C urr ent St a te\n" +"Be er: "+ c oun tOf Bee r +"\n"+"Or ang e J uic e: " +co unt Of Oran geJ uic e +"\n" +"5 Cen ts: "+ c oun tOf Fiv eC ents + "\n" +"1 Dol lar: " + cou ntO fOn eD olla r;retu rn sta te;}publ ic Str ing ope rat ion(St r ing typ e, Str ing mon ey)//ty pe是用户选择的产品,m one y是用户投币种类{if(m oney.e qua lsIg nor eCa se("5C")) //如果用户投入5角钱{if(t ype.eq ual s(ty peO fGo ods[0]))//如果用户选择啤酒{if(c oun tOf Bee r>0)//如果还有啤酒{coun tOf Bee r--;coun tOf Fiv eCe nts++;resu ltO fDe al= "I npu t I nfo r mati on \n" +"Ty pe: Be er; Mo ney: 5 Ce nt s; C han ge: 0\n\n" + currentSta te();retu rn res ult OfDe al;}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "B eer Sh ort a ge";retu rn res ult OfDe al;}}else if (t ype.equ als(ty peO f Good s[1]))//用户选择橙汁{if(c oun tOf Ora ngeJ uic e > 0){coun tOf Ora nge Juic e--;coun tOf Fiv eCe nts++;resu ltO fDe al= "I npu t I nfo r mati on \n" +"Ty pe: Or ang eJu ice; M one y: 5 C ent s; Cha nge: 0\n\n" + currentSta te();retu rn res ult OfDe al;}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "T ype Er ror";retu rn res ult OfDe al;}}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "T ype Er ror";retu rn res ult OfDe al;}}else if(mo ney.equ als Ign ore C ase("1D"))//如果用户投入一元钱{if(c oun tOf Fiv eCen ts>0) //如果用户投入一元钱{if(c oun tOf Fiv eCen ts> 0) //如果用户有零钱{if(t ype.eq ual s(ty peO fGo ods[0])&&co unt OfB eer>0)//如果用户选择啤酒而且还有啤酒{coun tOf Bee r--;coun tOf Fiv eCe nts--;coun tOf One Dol lar++;resu ltO fDe al= "I npu t I nfo r mati on \n" +"yp e: Bee r; M one y: 1 Do lla r; Ch ang e: 5 Ce nts\n\n"+ currentSta te();retu rn res ult OfDe al;}else if (t ype.equ als(ty peO f Good s[1]))//如果用户选择橙汁而且还有橙汁{coun tOf Ora nge Juic e --;coun tOf Fiv eCe nts--;coun tOf One Dol lar ++;resu ltO fDe al= "I npu t I nfo r mati on: \n" +"Ty pe: Or ang eJu ice; M one y: 1 D oll ar; Ch ange: 5 Cents\n\n" + curr ent Sta te();retu rn res ult OfDe al;}else{if(t ype.eq ual s(ty peO fGo ods[0])&&co unt OfO rang eJu ice<=0){resu ltO fDe al= "F ail ue Inf o rmat ion \n" +"Be er Sho rta g e";retu rn res ult OfDe al;}else if(ty pe.equa ls(typ eOf G oods[1])&&cou ntOf Ora nge Jui c e<=0){resu ltO fDe al= "Fai lur e Info r mati on \n"+"O ran geJ uice S hor tage";retu rn res ult OfDe al;}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "T ype Er ror";retu rn res ult OfDe al;}}}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "C han ge Sho r tage";retu rn res ult OfDe al;}}else{resu ltO fDe al= "F ail ure In f orma tio n \n"+ "M one y E rro r";retu rn res ult OfDe al;}}resu ltOfDe al = "F ail ure In f orma tio n \n"+ "M one y E rro r";retu rn res ult OfDe al;}}测试用例示例代码:import static org.junit.Assert.*;import org.junit.Before;import org.junit.Test;public class SaleMachineTest {SaleMachine saleMachine = new SaleMachine();@Beforepublic void setUp() throws Exception {}@Testpublic void testOperation1() {String expectedResult = "Input Information \n" +"Type: OrangeJuice; Money: 5 Cents; Change: 0\n\n" +"Current State\n" +"Beer: 6\n" +"Orange Juice: 5\n" +"5 Cents: 7\n" +"1 Dollar: 6";assertEquals(expectedResult,saleMachine.operation("OrangeJuice", "5C"));}}11 / 11。