《软件工程导论》实验报告

合集下载

龙纯鹏组《软件工程导轮》实验报告系统设计

龙纯鹏组《软件工程导轮》实验报告系统设计

中国矿业大学(北京)软件工程导论实验报告课程名称:软件工程导论实验名称:银行计算机储蓄系统设计说明书班级:信息与计算科学(1)班组长:龙纯鹏组员:代喜白鑫刘永鸿侯佳意实验日期: 2014年4月9日指导老师姓名:王颖组内任务分配:龙纯鹏11107200110组长、主要负责可行性分析报告和需求分析报告代喜 11107200103 主要负责系统设计白鑫 11107200101 刘永鸿11107200210 主要负责编写代码侯佳意11107200106主要负责用户手册目录1引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (2)2总体设计 (2)2.1需求规定 (2)2.2运行环境 (2)2.3基本设计概念和处理流程 (3)2.4结构 (3)2.5功能器求与程序的关系 (3)2.6人工处理过程 (3)2.7尚未问决的问题 (3)3接口设计 (3)3.1用户接口 (3)3.2外部接口 (3)3.3内部接口 (4)4运行设计 (4)4.1运行模块组合 (4)4.2运行控制 (4)4.3运行时间 (4)5系统数据结构设计 (4)5.1逻辑结构设计要点 (4)5.2物理结构设计要点 (4)5.3数据结构与程序的关系 (4)6系统出错处理设计 (5)6.1出错信息 (5)6.2补救措施 (5)6.3系统维护设计 (5)系统设计说明书1引言1.1编写目的在现代化社会中随着银行业的激烈竞争,如何更好的提高办事效率,降低成本,提高银行系统的电算化及现代化程度,充分满足客户的需求,提供更优质高效的服务,成为各银行正向追逐的目标。

因此,开发一套方便快捷,高效实用,安全稳定的银行储蓄系统软件,便成了银行的当务之急。

它的意义也就显得尤为重要了。

过去落后的银行操作系统已经不适应现代社会的需求了,伴随着银行业激烈的竞争,急需出现一套更符合银行需要的新一代银行储蓄系统。

1.2背景项目名称:银行计算机储蓄系统开发者:计041软件工程第一小组用户:××银行背景:为了以更高的服务质量让储户满意,提高业务效率,强调资金安全,完善风险防范意识,特此开发一套新的银行计算机存储系统。

软件工程导论实习报告

软件工程导论实习报告

一、实习背景随着信息技术的飞速发展,软件工程作为一门研究软件开发和维护的学科,其重要性日益凸显。

为了更好地理解和掌握软件工程的基本原理和方法,我参加了为期两周的软件工程导论实习。

本次实习旨在通过实际操作,加深对软件工程概念、方法、工具和过程的了解。

二、实习目的1. 熟悉软件工程的基本概念和原则。

2. 掌握软件开发的基本流程和方法。

3. 学习使用常用的软件开发工具。

4. 培养团队协作和沟通能力。

三、实习内容1. 软件工程基本概念在实习的第一周,我们学习了软件工程的基本概念,包括软件、软件工程、软件开发过程、软件质量等。

通过学习,我对软件工程的定义、目标和任务有了更清晰的认识。

2. 软件开发流程接下来,我们学习了软件开发的基本流程,包括需求分析、系统设计、编码、测试和维护等阶段。

通过实际案例分析,我了解了每个阶段的具体任务和目标。

3. 软件开发方法实习期间,我们学习了两种软件开发方法:瀑布模型和敏捷开发。

通过对比分析,我认识到敏捷开发在应对需求变更和快速迭代方面的优势。

4. 软件开发工具为了提高软件开发效率,我们学习了常用的软件开发工具,如版本控制工具(Git)、集成开发环境(IDE)、数据库设计工具等。

通过实际操作,我掌握了这些工具的基本使用方法。

5. 团队协作与沟通在实习过程中,我们分组进行软件开发项目。

通过团队协作,我学会了如何与他人沟通、协调和分工,提高了团队协作能力。

四、实习成果1. 完成软件开发项目在实习期间,我们分组完成了一个简单的软件开发项目。

通过实际操作,我掌握了软件开发的基本流程和方法,提高了编程能力。

2. 撰写实习报告为了总结实习经验,我撰写了这份实习报告。

通过回顾实习过程,我对软件工程有了更深入的理解。

3. 提高团队协作能力通过实习,我学会了与他人沟通、协调和分工,提高了团队协作能力。

五、实习体会1. 理论与实践相结合本次实习让我深刻体会到理论与实践相结合的重要性。

只有将所学知识应用于实际项目,才能真正提高自己的能力。

软件工程导论实验报告-白盒测试-黑盒测试

软件工程导论实验报告-白盒测试-黑盒测试

.《软件工程导论》实验报告学生姓名:学号:班级:指导老师:专业:实验日期:.白盒测试一、实验目的通过简单程序白盒测试,熟悉测试过程,对软件测试形成初步了解,并养成良好的测试习惯。

熟练掌握如何运用基路径测试方法进行测试用例设计,初步熟悉如何利用程序插装技术进行逻辑覆盖率分析。

二、实验内容:1、被测试程序功能:求解系数为整数的方程ax2+bx+c=02、程序定义:键盘输入 3 个数字 a,b ,c,求解方程 ax2 +bx+c=03、测试环境: Windows8.1 、Eclipse4、说明:本次测试采用插桩测试法,由于程序比较简单,手动输入测试用例。

四、实验步骤1、程序流程图开始输入 a, b, ca=0 Y Y Y无穷多解b=0 C=0NN NX= 无解N无解b2-4ac>=0.YX1=x2=结束2、代码:import java.util.Scanner;public class test {public static void main(String[]args ) {Scanner sc= new Scanner(System.in );System. out .println( "请输入 3个整数 a,b,c:" );String as;String bs ;String cs;int a=0;int b =0;int c=0;double x, x1 , x2 ;as= sc.nextLine();bs = sc.nextLine();cs= sc.nextLine();try {a=Integer.parseInt (as );b =Integer.parseInt (bs );c=Integer.parseInt (cs);}catch (Exception e){System. out .println( " 输入错误 ");System. exit (0);}if (a == 0){if (b == 0){if ( c == 0)System. out .println(" 无穷多解 " );elseSystem. out .println(" 无解 " );}else{x = -( c / b );System. out .println( "x=" + x);}}else{double h = b * b - 4 * a*c;if (h<0)System. out .println(" 无解 " );else{x1 = (- b + Math. sqrt (h )) / (2 * a);x2 = (- b - Math. sqrt (h )) / (2 * a); System. out .println( "x1=" + x1 + "\tx2="+ x2 );}}}}3、流图:.4、程序基本路径:(1) 1 2 3 4 5 11 预期输出:无穷多解(2) 1 2 3 4 6 11 预期输出:无解(3) 1 2 3 7 11 预期输出: x=(4) 1 2 8 9 11 预期输出: x1= x2=(5) 1 2 3 10 11 预期输出:无解5、测试实验用例:路径覆盖编号测试用例覆盖路径对应输出1a=0 ,b=0 , 1 2 3 4 5 11无穷多解c=02 a=0 ,b=0 ,c=1 1 234 6 11 无解3 a=0 ,b=1 ,c=1 1 2 3 7 11 x=-14 a=1 ,b=2 ,c=1 1 2 8 9 11 x1=-1x2=-15 a=1 ,b=1 ,c=1 1 2 3 10 11 无解黑盒测试一、实验目的黑盒测试是常用的软件测试的方法,用这种方法测试时,把被测试程序当作一个黑盒,在不考虑程序内部结构和内部特性,测试者只知道该程序的输入和输出之间的关系或程序的功能的情况下,依靠能反应这一关系和程序功能需求规格的说明书,来确定测试用例和推断测试结构的正确性。

软件工程试验报告

软件工程试验报告

软件工程试验报告第一篇:软件工程试验报告实验项目名称:需求分析(所属课程:软件工程概论)1.实验目的1.选择要设计的系统,使用UML进行需求分析,了解所要完成系统的功能需求,性能需求,接口需求等。

2.学习实使用Rational Rose 或其它软件工程工具绘制用例图、活动图。

2.实验内容使用Rose 绘制系统的用例图。

1.Rational Rose介绍Rational Rose是基于UML而产生的,是软件开发过程中的不可或缺的一个建模工具。

(1)Rational Rose的特点:λ支持多种语言,如Ada、CORBA、Visual Basic、Java等;λ支持模型的Internet发布;λ可以生成简单、清晰且定制灵活的文档;λ双向工程保证了模型和代码高度一致;λ支持逆向工程,建立代码框架;λ支持多种关系型数据库的建模;λ从需求分析到测试,在整个软件生命周期中,都为团队开发提供强有力的支持。

(2)Rational Rose的作用λ整个开发团队可以使用用例图,来获得一个系统高层次的视图,并且可以协商项目的范畴;λ项目经理可以使用用例图和文档,把项目分解成便于管理的多个模块;λ系统分析员和客户在看到用例规格描述文档的时候,就可以明白系统将会提供什么样的功能;λ技术编写者在看到用例规格描述文档时,就可以着手编写用户手册和培训计划;λ系统分析员和软件开发者在看到时序图和协作图时,就可以明白整个系统的逻辑流程、对象以及对象之间的消息2.安装Rational Rose ①双击Rational Rose 2007的安装程序,进入安装界面;按照系统提示一步一步完成系统的安装。

其中在选择安装产品时,选择“Rational Rose Enterprise Edition”;并且在设置创建程序位置时,选择创建一个本地的应用程序而非网络的,即选择“Desktop installation from CD”。

②安装成功,进入Rational Rose界面,如图1-1所示。

软件工程导论报告

软件工程导论报告

软件工程导论报告实验报告课程名称实验题目学生学号实验目的:本课程实验的教学目标在于通过绘制数据流图、实体关系图、用例图、状态图等实验,重点熟悉软件设计中的逻辑模型设计方法及其绘制工具软件,从软件工程角度理解和掌握软件设计开发过程。

实验条件:电脑一台、能上网查阅资料。

实验项目一熟悉软件工程工具 1.实验目的、任务:通过创建、编辑、保存一个简单的Visio图形文件,让学生学习掌握Microsoft Office Visio 的基本用法,掌握使用Microsoft Office Visio绘制业务流程图、数据流图、功能模块图、软件结构图和软件界面的方法。

2.实验基本要求:熟练应用Visio绘制软件开发图形的基本操作。

3.实验内容:打开Microsoft Office Visio,按照给出的业务流程图、数据流图、功能模块图、软件结构图和软件界面,绘制出相同的图形。

实验结果:软件工程姓名日期班级 2021-6-10 实验项目二绘制数据流图和实体关系图 1.实验目的、任务:能够根据业务描述,分析设计并绘制其数据流图和实体关系图。

2.实验基本要求:基本掌握数据流图和实体关系图的分析设计方法。

3.实验内容:银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员输入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。

要求用数据流图描绘本系统的功能,并用实体关系图描绘系统中的数据对象。

实验结果:数据流图: E-R图:实验项目三绘制用例图和状态图 1.实验目的、任务:掌握用例图分析方法和绘制方法,掌握状态分析方法和状态图的绘制方法。

2.实验基本要求:能够根据业务描述分析绘制用例图和状态图,能够熟练使用绘图工具软件绘制出用例图和状态图。

软件工程导论实验报告航空订票系统设计

软件工程导论实验报告航空订票系统设计

“机票预订系统”的需求分析需求分析是开发软件系统的重要环节,是系统开发的第一步和基础环节。

通过需求分析充分认识系统的目标、系统的各个组成部分、各部分的任务职责、业务范畴、工作流程、工作中使用的各种数据及数据结构、各部门的业务关系和数据流程等,为系统设计打下基础。

需求分析的好坏往往决定了系统开发的成败。

需求分析从系统的调查研究入手,需求分析要对系统的各个方面有全面的了解,既包括系统内部的各个方面,也包括与系统有联系的各种外部因素。

通过调查研究和分析,对系统产生比较深刻的认识。

需求分析阶段的最终结果是“需求分析说明书”,它涵盖了对用户环境、事务处理和信息流程分析的一切成果,供项目开发小组和用户共同遵守。

如果采用瀑布模型,就要对“需求分析说明书”进行冻结,使它成为凝固可靠的基线。

万一要求变更基线,开发者和用户双方,都必须执行基线变更程序,此变更程序在合同中已做了明确规定。

现针对“机票预订系统”对机票预订部门的组织结构、业务流程、用户角色职能、系统数据流进行分析。

利用结构化分析和UML中的用例从大到小、从粗到细进行系统建模。

1、组织结构调查系统的组织结构,反映了单位内部各个部门的职责划分和它们之间的关系。

为了对系统有一个全貌性的了解,首先要对系统内部部门结构、人员组织及用户情况有所了解。

对系统组织结构的调查,是从总的方面对系统进行宏观了解和分析。

信息的流动关系是以组织结构为背景的,而且总是伴随着组织部门之间的资金流和物流的传递而产生。

机票预订系统的组织结构如图 1所示。

图1 系统组织结构图机票预订由机票预定部门全面负责,下设信息管理部、票务部、客服部三个部门的业务职责如下:●信息管理部:管理基本信息、主要包括旅客基本信息的查询、更改、删除;航班信息的添加、查询、更改、删除。

●票务部:管理各种票据,主要包括根据订票信息和航班信息打印账单和取票通知、核对账单和取票通知以及交款信息,无误则打印机票并发放。

●客服部:为订票旅客提供实时服务,主要包括投诉咨询受理,和售前售后支持。

软件工程导论实验报告材料

软件工程导论实验报告材料

软件工程导论实验报告一、实验题目:学生成绩管理系统、图书借阅管理系统、工资管理系统、网络订餐系统、招聘考试成绩管理系统二、实验目标通过独立完成项目开发,加深对软件开发分析过程的流程和方法的理解,建立软件工程的思想,同时,明确软件开发的成本和时间管理的相关概念。

实验一实验要求:①.在实验题目列出的几个系统中选择一个作为自己要开发的软件系统,要求该系统有明确的功能需求,并建立系统的分析模型。

②.对系统进行需求分析,掌握ER图、DFD、DD的设计与编写③.熟悉Visio环境和基本操作,制作一个简单的系统流程图和数据流图、主要数据项的数据字典描述及主要加工的逻辑说明(自己选择结构语言、判定树、判定表等)。

④.撰写需求分析规格说明书用户需求分析作为图书管理系统,其主要的需求人员是借阅者,借阅者对其的要求可以大体概括如下:1)能按各种方式,比如书名、编号、作者等查询图书馆的藏书情况;2)能熟悉使用图书管理系统;3)能方便地借阅图书、续借图书、归还图书;4)能查询自己的基本资料、借阅图书情况;5)能方便图书管理员对图书的录入登记、注销;6)能方便对新生的登记或注销已经毕业学生的信息;7)能及时发布一些学院学生借阅图书超期情况、馆内藏书情况等。

功能说明1)、读者管理系统(1)未注册者可以进入注册系统进行注册;(2)已注册借阅者可按姓名、编号或身份证号登陆进入借阅者检索系统查询借阅者情况;(3)、已注册借阅者可按书名、出版社或作者对图书信息进行检索查询或提出预约请求;2)、图书管理员管理系统(1)图书管理员通过图书管理员身份认证进入图书管理员管理系统;(2)读者可借阅在库图书;(3)在规定期限内借阅者归还借阅图书;(4)读者在不违规情况下可继续借阅已借阅图书;(5)读者可以预约图书。

3)、系统管理员管理系统(1)系统管理员通过系统管理员身份认证进入系统管理员管理系统;(2)系统管理员可以对图书进行图书管理(如:查询、删除、修改图书资料或图书分类查询修改、删除管理);(3)系统管理员可以对借阅者进行学生管理(如:查询、删除、修改借阅者信息或借阅者类别修改、删除管理,查询浏览借阅者详细资料,包括借阅次数,登陆次数,最后登陆时间);4)、罚款管理系统(1)罚款管理员通过罚款管理员身份认证进入罚款管理系统;(2)罚款处理可以读取借阅信息表再生成超时罚款信息表,通过超时罚款信息表可以生成罚款单给罚款管理员;(3)图书管理员告知罚款系统图书超时未还,经罚款管理员鉴定后,对图书进行注销处理且罚款管理员对借阅者进行罚款处理。

软件导论实验报告范文

软件导论实验报告范文

一、实验目的通过本次实验,使学生掌握软件工程的基本概念、原理和方法,了解软件开发的流程,提高软件设计和开发能力。

二、实验内容1. 软件工程的基本概念2. 软件开发的流程3. 软件需求分析4. 软件设计5. 软件测试6. 软件维护三、实验步骤1. 软件工程的基本概念(1)了解软件工程的定义:软件工程是一门研究软件开发、维护和管理的技术科学。

(2)了解软件工程的基本原则:抽象、模块化、信息隐藏、可复用性、可维护性等。

(3)了解软件工程的基本方法:需求分析、设计、编码、测试、维护等。

2. 软件开发的流程(1)了解软件开发的生命周期:需求分析、设计、编码、测试、部署、维护。

(2)了解每个阶段的主要任务和目标。

3. 软件需求分析(1)了解需求分析的方法:访谈、问卷调查、观察等。

(2)了解需求分析的工具:UML(统一建模语言)、用例图、需求规格说明书等。

(3)以一个实际项目为例,进行需求分析。

4. 软件设计(1)了解软件设计的方法:模块化、层次化、面向对象等。

(2)了解软件设计的工具:UML、ER(实体-关系)图等。

(3)以一个实际项目为例,进行软件设计。

5. 软件测试(1)了解软件测试的方法:黑盒测试、白盒测试、灰盒测试等。

(2)了解软件测试的工具:Junit、Selenium等。

(3)以一个实际项目为例,进行软件测试。

6. 软件维护(1)了解软件维护的类型:错误修复、功能增强、性能优化等。

(2)了解软件维护的方法:版本控制、代码审查、自动化测试等。

(3)以一个实际项目为例,进行软件维护。

四、实验结果与分析1. 通过实验,掌握了软件工程的基本概念、原理和方法。

2. 熟悉了软件开发的生命周期和每个阶段的主要任务。

3. 学会了使用UML、ER图等工具进行软件需求分析和设计。

4. 掌握了软件测试的方法和工具,能够对软件进行有效的测试。

5. 了解软件维护的类型和方法,能够对软件进行有效的维护。

五、实验心得1. 软件工程是一门实践性很强的学科,需要我们在理论学习的基础上,不断进行实践。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2011-2012(2)《软件工程导论》实验报告学院:计算机学院班级:软件工程114姓名:***学号:*********目录实验1:项目计划、分析和设计实验2;编码实验3:代码复查、编译实验4:项目测试总结软件工程导论实验一:项目计划、分析和设计[ 实验日期 ] 2012 年 4 月 20 日[ 实验目的 ]初步了解结构化分析、设计方法的原理、步骤以及各阶段的文档,练习撰写简要的需求文档、设计文档。

[ 实验内容 ]贪吃蛇程序:贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物则表示食物被蛇吃掉,这时蛇的身体长一节,同时计1分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体,游戏结束。

根据编写贪吃蛇的游戏规则,我们利用c语言来进行编辑具体步骤,从而使游戏能够运行,根据编写贪吃蛇程序,掌握软件工程思想及要领,进一步巩固编程思想和掌握画图函数底层,依据项目可行性研究的结果,进行需求分析和设计,编写简要的需求规格说明书,绘制程序流程图。

[ 实验原理和步骤]当前的建模方法主要有传统的结构化分析、设计方法(SA/D)和面向对象分析、设计方法(OOA/D)两种。

分析阶段:结构化分析(SA)是一种建模技术,它通过一定方法帮助开发人员定义系统需要什么功能,系统需要存储和使用哪些数据,以及为完成这些功能,系统需要什么样的输入和输出以及如何把这些功能结合在一起来完成任务。

设计阶段:分总体设计和详细设计两阶段。

总体设计阶段的任务主要是确定系统由哪些模块组成,以及这些模块之间的相互关系;详细设计阶段的任务主要是设计每个模块的处理过程。

常用的结构化设计(SD)方法有面向数据流分析(DFA)的设计方法和面向数据的设计方法。

DFA设计技术实施的通用步骤:(1)复查并精化DFD;(2)确定DFD类型;(3)把DFD映射到系统模块结构,设计出模块结构的上层;(4)基于DFD逐步分解高层模块,设计出下层模块〈初步结构〉;(5)根据模块独立性原理,精化模块结构,得到更为合理的软件结构;(6)模块接口描述;(7)修改和补充数据词典;(8)制定测试计划。

详细设计阶段的任务主要是确定每个模块的处理过程,包括(1)确定每个模块的算法。

(2)确定每一个模块的数据组织。

(3)为每个模块设计一组测试用例。

(4)编写详细设计说明书。

详细设计阶段采用的方法是结构化程序设计(SP),与SA,SD方法衔接。

目标是给出可以直接用以编码的程序逻辑结构,强调清晰第一。

设计思路:这个程序的关键点是表示蛇的图形以及蛇的移动。

用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。

移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。

如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现和消失也是画矩形块和覆盖矩形块。

为了便于理解,定义了两个结构体:食物和蛇。

[ 需求规格说明书]主要功能陈述:这是一款适合各年龄阶层小游戏,它可以使人们休息时的一种放松方式也可以是孩子们的娱乐游戏;另外对于一些对于有一定的C语言基础的,可以一边在玩的时候,感受在其中的编程思想并且自己进行尝试。

IPO图:数据字典:先进行蛇与食物的定义,再制定游戏中蛇的光标处理方法,初始化蛇的位置坐标,接着创建整个游戏的活动界面从而确定游戏的整体的框架。

初始化游戏的计分系统,设置初始化分数,再增加分数统计系统确立分数处理的方法。

接着编写游戏的规则,蛇的走动方法与吃到食物增长的处理以及游戏中碰壁或碰到自身的处理,最后进行对游戏失败的处理以及游戏的清屏处理。

[ 详细设计说明书]模块的文字描述:main()主函数:这是程序的大体流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数画出开始画面,调用函数,即玩游戏的具体过程与分数的增加,游戏结束后调用关闭图形系统清理屏幕,结束程序画界面函数:设计游戏的活动界面,就是一个密封的围墙加上一个数据处理界面,利用printf 来构建游戏的大体框架与各个部分的具体内容游戏具体过程函数:这一部分是游戏的重要组成,调用这个函数是游戏的主要部分,重点是一次次反复表示蛇与食物的新位置并进行对前一次的反复清屏。

采用的方法是每次移动的时候从最后一节开始到倒数第二节,将前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可。

蛇的方向通过w a s d键进行控制数组的加减。

如果没有食物,随机出现食物;如果有食物,则显示食物,蛇移动身体,根据蛇的方向改变坐标值,并判断蛇是否撞到了墙或自己吃了自己,如果出现这两种情况之一,则蛇死,调用游戏结束函数结束本次游戏或重新开始。

如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数、分数都进行相应的改变。

如果有按键,则识别键值。

如果按键为Esc键则结束游戏,程序运行结束;如果所按键为方向键,则根据该键改变代表蛇方向的变量的值,要考虑相反方向键无效。

游戏结束函数:游戏结束,显示游戏结束信息。

HIPO图:[[注意事项]1.程序流程图应符合结构化思想:单入口、单出口。

[实验总结 ]通过本次试验让我加深了对程序设计的理解,对程序结构化设计有了进一步的认识,同时也是对自己编程思想的优化和编程能力的提高,认识到了如何将程序设计工程化,同时也发现了自己诸多问题,对软件工程思想没有很好的理解,以及IPO图和HIPO图的绘制与编写出现了问题,我觉得在画图之前首先要确定具体框架,然后根据框架进行补充。

此次试验让我发现了很多问题,我认识到编写任何程序无论难或易都要进行实验前的准备,对实验的步骤有个具体了解并且能够理清实验思路才能够进行实验。

这些发现让我能够及时的进行自我反思从而对自己进行相应的改进。

总体说,这次实验让我学到了很多宝贵的经验与思想,为以后打好基础。

软件工程导论实验二:编码[ 实验日期 ] 2012 年 4 月 20 日[ 实验目的 ]通过对本次贪吃蛇程序的编写,了解各种不同的编程方法和不同的编程风格,从而在这次实验以及以后学习过程中养成属于自己的良好的编程风格与编程方法技巧。

[ 实验内容 ]通过实验一的基础,先制定基本框架,然后在这个基础上详细的进行编注,整体按照相应的结构化思想编写代码,在相应的地方做出对自身的注释,从而能够使自己和他人能够更好的理解。

[ 实验原理和步骤]编码的原理包括几方面,首先编码风格要强调“清晰易读”,不能过分个性化或过多的插入个人技巧,要做到自己编的程序对于那些会编程的人都能够轻易理解并能够在不足的地方进行修改。

编码过程中要注意变量或函数的名字要赋予相应的意义,做到每个代码都有自己存在的意义与作用。

编码中的表达式和语句要一目了然,排版风格、循环语句风格要保持一致,使人在阅读你的程序是能够很快理解你要表达的意思与目的。

在函数宏的定义,常数的定义,注释方面要全面。

注释包括序言性注释、函数模块注释和程序语句注释。

[具体步骤]首先制定相应的程序框架,然后根据实验一种相应的模块进行相应的填充。

当整体程序基本成型后,再通过反复测试,找出其中的不足,进行不断地完善。

然后对程序中相应的模块与需要理解的地方进行合理的简洁的注释,使他人能够跟快的理解。

对每个函数前写模块注释,重要语句写功能性注释,变量或函数的名字要有意义,排版,从而使程序变得美观易懂。

[ 程序源代码]#include <stdio.h>#include <windows.h>#include <time.h>#include <conio.h>#include <stdlib.h>#include <string.h>int snake_len=1;//蛇的长度int snake_loc[50][2]={31,12};//整条蛇的位置,最长为50int snake_head[2]={31,12};//蛇头位置,初始值为11,12;int food[2];//食物位置char snake_direction='s';int delay=200; //蛇每delay个时间走一步int eat_flag=0;//1表示吃了食物,0表示未吃int liv_stat=0;//1表示死了,游戏该结束了;0表示还活着void gotoxy(int x, int y)//定位光标,x为行坐标,y为列坐标{COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);}void hidden()//隐藏光标{HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO cci;GetConsoleCursorInfo(hOut,&cci);cci.bVisible=0;//赋1为显示,赋0为隐藏SetConsoleCursorInfo(hOut,&cci);}void init()//初始化{int i;snake_len=1;//蛇的长度snake_loc[0][0]=31;//整条蛇的位置snake_loc[0][1]=12;snake_head[0]=31;//蛇头位置,初始值为11,12;snake_head[1]=12;snake_direction='s';delay=200;eat_flag=0;liv_stat=0;for(i=1;i<50;i++){snake_loc[i][0]=0;//整条蛇的位置snake_loc[i][1]=0;}}void create_window()//创建窗口{gotoxy(0,0);printf("********************************************************************* ***********");printf("* * *");printf("* * *");printf("* * 分数:1 *");printf("* * 按键说明:*");printf("* * 上:w *");printf("* * 下:s *");printf("* * 左:a *");printf("* * 右:d *");printf("* * 暂停:空格*");printf("* * 退出:Esc键*");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* **");printf("* * *");printf("* * *");printf("* * *");printf("********************************************************************* ***********");}void update_score()//更新分数{gotoxy(73,3);printf("%2d",snake_len);}void create_food()//产生食物的位置{time_t t;srand(time(&t));while(1){food[0]=rand()%62+1;//生成1~62之间的随机数,其中random函数生成0~77之间的随机数food[1]=rand()%22+1;//生成1~22之间的随机数,其中random函数生成0~17之间的随机数if(food[0]!=snake_head[0]&&food[1]!=snake_head[1])break;}gotoxy(food[0],food[1]);printf("*");}void direction(){char keyhit=0,i;while(kbhit()!=0)keyhit=getch();if( ((keyhit=='a') || (keyhit=='d') || (keyhit=='w') || (keyhit=='s')) && (abs(snake_direction/16-keyhit/16)==1) )snake_direction=keyhit;else if(keyhit==' '){gotoxy(30,24);system("pause");gotoxy(30,24);for(i=0;i<19;i++)printf(" ");}else if(keyhit==27)exit(0);}void state()//判定蛇死没死{if(snake_head[0]<1||snake_head[0]>62||snake_head[1]<1||snake_head[1]>22)liv_stat=1; }void eat()//判定蛇吃没吃上,并对根据方向对蛇头位置进行更新{switch(snake_direction){case 'w': snake_head[1]--;break;case 's': snake_head[1]++;break;case 'a': snake_head[0]--;break;case 'd': snake_head[0]++;break;}if((food[0]==snake_head[0]) && (food[1]==snake_head[1]) ){eat_flag=1;switch(snake_direction){case 'w': snake_head[1]--;break;case 's': snake_head[1]++;break;case 'a': snake_head[0]--;break;case 'd': snake_head[0]++;break;}}}void show_snake()//更新蛇在屏幕中的位置{gotoxy(snake_head[0],snake_head[1]);printf("*");gotoxy(snake_loc[snake_len-1][0],snake_loc[snake_len-1][1]);printf(" ");}void update_maxtrix()//更新存储蛇位置的数组{int i;if(eat_flag!=1){for(i=snake_len-1;i>0;i--){snake_loc[i][0]=snake_loc[i-1][0];snake_loc[i][1]=snake_loc[i-1][1];}}else{snake_len++;if(snake_len>3 && delay>100)delay-=30;for(i=snake_len-1;i>1;i--){snake_loc[i][0]=snake_loc[i-2][0];snake_loc[i][1]=snake_loc[i-2][1];}snake_loc[1][0]=food[0];snake_loc[1][1]=food[1];eat_flag=0;create_food();update_score();}snake_loc[0][0]=snake_head[0];snake_loc[0][1]=snake_head[1];}void main(){int flag;long password=123456;int i=1;long pw;printf("请输入密码\n");scanf("%ld",&pw);if(password!=pw)while(1){i++;printf("密码错误\n请重新输入:");scanf("%ld",&pw);if(password==pw){printf("密码正确,欢迎使用\n");flag=1;break;}i f(i==3){printf("请稍后再试\n");flag=0;break;}}else{printf("密码正确,欢迎使用");f lag=1;LOOP:system("cls");init();create_window();hidden();create_food();while(1){int i;Sleep(delay);direction();eat();show_snake();update_maxtrix();state();if(liv_stat==1){for(i=1;i<snake_len;i++){gotoxy(snake_loc[i][0],snake_loc[i][1]);printf(" ");}gotoxy(food[0],food[1]);printf(" ");gotoxy(30,12);printf("Game over!\n");gotoxy(25,13);printf("继续请按y,退出请按n");while(1){i=getch();if(i=='y')goto LOOP;else if(i=='n')break;}break;}}}}[注意事项]1.模块的逻辑描述应该清晰第一、使用标准的、规范的控制结构、正确可靠[实验总结 ]通过对实验二的学习让我对程序的编写有了更深的理解也对编程的谨慎性有了更深层次的体会,即使在小的疏忽或错误都会影响整个实验的进行。

相关文档
最新文档