精华内容
下载资源
问答
  • 软件工程实践报告

    2014-04-06 11:48:32
    软件工程实践报告并非任何问题都有明显简单的解决方法,事实上,许多问题不可能在预定的系统规模或时间期限之内解决。如果问题没有可行的解,那么花费在这项工程上的任何时间,人力,软硬件资源和经费,都是无谓的...
  • 软件工程实践报告
  • VB+Access软件工程实践报告,软件工程的作业,里面有需求文档和安装使用说明文档,并且附带源码,代码可以直接运行。
  • 中国矿业大学软件工程实践报告:实验一 ATM自动柜员机业务系统数据流图与原型;实验二 面向对象的软件分析与设计;实验三 集成编程环境与编码规范;实验四 源代码版本管理实验报告;实验5-1IBM Rational Robot实现...
  • 软件工程实践报告

    2012-06-18 20:17:48
    这是一个软件工程开发的实例 适合广大在学软将工程这门课程的同学
  • 软件工程实践实验课上关于代码管理,SVN的使用
  • 自考本科,软件工程实践报告。包含了实践原理,实践内容,实践结果,实践分析以及实践心得。
  • 1、总结归纳软件开发过程中的主要开发环节(软件开发过程框架活动)及内容  2、进行系统需求分析,要求用数据流程图描述系统的基本逻辑功能  3、用例图制作软件Visio,根据系统的功能体系结构建立业务用例图,对各...
  • 一、软件工程实践课程任务目标 掌握软件工程问题调研、问题分析和原型设计; 掌握从技术、经济、社会等方面对系统软件的评估; 掌握运用软件工程原理、方法与技术进行软件系统设计实践能力; 培养学生项目管理与...

    若本文对你有用,请点赞、关注我哟!

    软件工程专业大四上学期课设之一,随便乱写的,报告评分不高,仅供参考。

    一、软件工程实践课程任务目标

    1. 掌握软件工程问题调研、问题分析和原型设计;
    2. 掌握从技术、经济、社会等方面对系统软件的评估;
    3. 掌握运用软件工程原理、方法与技术进行软件系统设计实践能力;
    4. 培养学生项目管理与团队协调沟通的能力;
    5. 掌握数据库模式设计与实现;
    6. 掌握软件工程项目的测试流程;
    7. 熟练掌握UML建模、开发、数据库设计和测试工具的使用。

    二、软件工程实践需求分析能力培养

    1.实践目的

           掌握UML软件建模工具的使用,掌握问题的分析、可行性研究和相关技术约束评估,熟练绘制数据流图;学习快速原型工具的使用和需求分析文档撰写。

    2.实践基本能力要求

    (1)针对XXX系统进行文献查阅和调研,问题细化,团队协调和沟通,需求分析进行详细设计;

    (2)安装 VISIO 2008 以上版本软件,熟练应用VISIO绘制DFD图,绘制XXX系统业务流图,完成系统的软件逻辑模型;

    (3)安装 Axure RP Pro 或者 Balsamiq Mockups 原型设计软件,学习绘制软件原型,完成XXX系统的软件原型设计。

    3.实践方式

           需求文档撰写和项目组成员讨论;

    4.实践报告格式与内容

    (1)XXX系统任务分析;

    (2)XXX系统需求分析;

    (3)XXX 系统的软件逻辑模型;

    (4)XXX 系统的软件原型设计;

    (4)提交XXX系统需求分析设计书。

    三、软件工程实践系统功能设计

    1.实践目的

           系统功能的详细设计和概要设计,学习UML绘制类图、功能图、活动图,掌握面向对象分析与设计方法,协调团队之间的合作与分工以及项目的管理。

    2.实践基本能力要求

    (1)具备面向对象分析与设计能力;

    (2)安装Star UML和Rational Rose软件,熟练使用UML软件工具,对目标系统进行设计;完成类图、序列图、状态图、活动图等软件建模图形的绘制;

    (3)学习 UML 模型和源代码的双向工程。

    3.实践方式

           实验上机和项目开发;

    4.实验报告格式与内容

    (1)基于UML对目标系统进行概要和详细设计,绘制软件模型;

    (2)描述UML模型和源代码的逆向工程、正向工程;

    (3)提交绘制的图形和设计文档。

    四、软件工程实践编码规范约束设计

    1.实践目的

           学习PHP、.Net、JAVA 等集成语言环境,熟悉各语言的编码规范,进行系统编码规范约束设计。

    2.实践基本要求

    (1)熟悉各种语言的编程环境;

    (2)学习各语言的编码技巧和调试方法;

    (3)设计系统编码规范与约束。

    3.实验方式

           上机编程与文档设计;

    4.实验报告格式与内容

           选择PHP、.Net、JAVA 三种语言和集成编程环境其中之一,介绍环境的基本使用方法,调试技术。

    五、软件工程实践项目版本控制

    1.实践目的

           掌握SVN源代码版本管理工具,会部署Tortoise SVN服务端、客户端,实现不同IDE环境下的集成。例如:Ankh SVN(VS2008 插件) + Visual SVN Server 在Visual Studio环境下进行代码版本管理。

    2.项目版本控制的基本要求

    (1)安装SVN服务器和客户端软件,建立代码仓库,创建用户及授权;

    (2)学习代码的同步、管理和协同开发方法;

    (3)在Visual Studio环境下对所选系统的源代码进行版本管理;

    (4)在Eclipse环境下对所选系统的源代码进行版本管理。

    3.实践方式

           上机实践和项目开发协同管理;

    4.实践报告格式与内容

    (1)Visual Studio环境下源代码版本管理;

    (2)Eclipse环境源代码版本管理。

    六、软件工程实践项目测试

    1.实践目的

           熟练掌握IBM Rational Robot、IBM Purify、Win Runner、NUnit、JUnit、CPPUnit、Webstress等各类软件测试工具的使用;编写项目测试计划、设计测试用例;掌握软件自动化测试方法,完成对系统的功能测试和性能测试。

    2.软件工程实践项目测试的基本要求

    (1)下载、安装IBM Rational Robot、IBM Purify、Win Runner、NUnit、JUnit、CPPUnit、Webstress、QTP、Load Runner和Test Manager等测试工具,熟练掌握其使用;

    (2)掌握IBM Rational Robot中测试脚本录制、测试代码编写方法,针对实验代码进行自动测试;

    (3)了解程序运行错误分析软件IBM Purify的工作原理,使用IBM Purify 进行代码错误检测,分析检测结果;

    (4)采用Win Runner等黑盒测试工具进行所选系统的黑盒测试;

    (5)运用NUnit、JUnit、CPPUnit工具软件进行白盒测试用例设计及自动测试;

    (6)运用Webstress工具软件进行性能自动测试;

    (7)了解Test Manager测试管理工具的使用方法;

    (8)学习.Net、JAVA等集成开发工具中的软件测试、调试。

    3.实践方式

           上机实践和测试文档的撰写;

    4.实践报告格式与内容

    (1)说明测试脚本录制、测试代码编写、针对实验代码进行自动测试的步骤、方法和实现情况;

    (2).Net 或者JAVA等集成开发工具中的软件测试、调试方法;

    (3)针对目标系统,使用各种测试工具的测试过程。

    七、软件工程实践系统数据库设计

    1.实践目的

           掌握数据库分析和设计并熟练掌握数据库的安装、操作和使用;完成对表的设计、实体关系图设计;学习使用数据库软件(例如:Power Designer)的使用。

    2.实践基本要求

           使用数据库软件(Power Designer)设计数据库物理模型,并创建数据库。

    (1)安装数据库软件Power Designer;

    (2)设计目标系统的CDM;

    (3)设计目标系统的PDM。

    3.实验方式

           上机实践和数据库设计文档;

    4.实验报告格式与内容

    (1)数据库实体关系设计;

    (2)数据库表的设计;

    (3)使用数据库软件(Power Designer)构建目标系统数据库模型。

    参考题目(仅供参考,也可自选题目由教师审核)

    1. 工资管理系统
    2. 宾馆客房管理系统       
    3. 人事管理系统      
    4. 学生学籍管理系统
    5. 员工档案管理系统
    6. 银行储蓄管理系统           
    7. 考试管理系统    
    8. 民航(铁路)订票系统
    9. 商场销售管理系统       
    10. 水电管理系统       
    11. 证券交易分析系统

    需求说明书

    一、给出完成系统的主要业务流程

                                                                              图1 系统主要业务活动图

    二、给出完成系统的主要用例

                                                                              图2 系统用例图

    三、根据每个用例给出相应的时序图

                                                                              图3 注册时序图

                                                                              图4 登录时序图

                                                                              图5 学生在线考试时序图

                                                                              图6 学生浏览历史试卷时序图

                                                                              图7 学生浏览历史错题时序图

                                                                              图8 考试管理时序图

                                                                              图9 管理员设计考试时序图

                                                                              图10 统计分析时序图

    软件工程实践报告

    1. 实践题目及实现功能

           实践题目:考试管理系统

           本系统的用户可分为管理员和普通用户两类。

           共分为两个界面:一个界面用于管理员登录,主要负责进行基本资料、题库、试卷、成绩的管理以及查询等;另外一个界面用于普通用户登录,主要负责在线考试、查询以往考试成绩等。

           从总体上考虑,系统应实现下列功能:

           对管理员来说,包括试卷管理、题库管理、成绩管理、学生管理、考试安排。

           试卷管理:管理员可以从课程,各种题型的数量等方面对某份试卷提出一定的要求生成试卷规则。同时,管理员还可以对库中已有的试卷进行修改和删除,添加新试卷等。

           题库管理:管理员可以对题库中的试题进行三种基本操作:添加新的考题、删除旧的考题、修改原有考题、其中试题类型包括判断题、填空题、选择题;对于每种类型的试题,教师可以设置题干、答案等属性。

           成绩管理:管理员可以查看考生的考试成绩,并针对不同的课程进行成绩统计,包括考试人数、最高分、最低分、平均分以及各分数段得分人数等。

           学生管理:管理员可以对用户的资料进行查询和删除。

           考试安排:管理员可以发布指定时期的考试任务,学生只能在规定的时间内完成考试。

           对普通用户来说,包括在线考试、查询以往考试成绩、错题浏览等。

           在线考试:学生可以任选时间进行在线测试,考试结束后,系统会根据已有的标准答案进行在线判卷,考生可以立刻知道考试成绩。

           查询以往考试成绩:学生可以在线询问以前参加过的每门课程的考试相关信息。 

           错题浏览:系统自动汇总学生以往所有错题,方便学生后期复习。

    2. 软件需求分析

    2.1考试管理系统任务分析

           传统的考试方式一般要经过人工出卷、考生考试、人工阅卷等过程。对于一些课程来说,随着考生数量的增加,教师出卷阅卷的工作量将会越来越大,并且其工作十分繁琐和非常容易出错。在线考试系统课题产生的背景是当今教育信息化的趋势及我国高校教育信息化系统的建设,目的是充分利用学校现有的计算机软、硬件和网络资源实现无纸化考试以避免传统手工考试的不足。与传统考试模式相比,网上考试渗入了更多的技术环节,对实现安全性的途径、方法也提出了更高的技术要求。

    2.2考试管理系统的软件逻辑模型

           在需求分析过程中,通过用例建立系统模型,展示系统外部角色对系统的功能需求。

           1、识别参与者与用例,在本系统中,把教师(出题者)、学员(考试人员)、考试管理员、系统管理员等确定为参与者;系统主要用例:考纲管理、考点管理、题库管理、专题测试管理、试卷管理、试卷生成、考试管理、成绩管理、公告管理、统计分析、学生登录、学生考试、模拟考试、考试信息、考试过程管理、注册、基本信息管理、班级管理、角色管理。

           2、建立用例图,利用 Microsoft Office Visio 建模环境,创建系统的考生用例图、教师与考试管理员用例图、系统管理员用例图、客户端脚本对象用例图如图1~3所示,其中图3为一级用例图。

                                                                              图1 系统管理员和客户端浏览器用例

                                                                              图2 考生用例

                                                                              图3 教师与考试管理员用例

           3、用例文档,以试卷生成的为例:用例编号:001。用例名:试卷生成。用例描述:出题人根据自身权限定义试卷后,由计算机自动生成试卷。参与者:计算机或用户。前置条件:用户已登录,并进入后台管理系统,在系统里事前定义好了试卷。后置条件:向管理员发送审核通知。事件路径:①用户选择定义试卷,并保存;②系统提示是否成生试卷;③按试卷配置生成试卷,3a试卷不符合考纲覆盖要求和试卷难度系统,3b循环执行生成试卷;④循环结束判断试卷生成结果,成功保存试卷至数据库;⑤系统显示操作成功。

    2.3考试管理系统的软件原型

    ①前台首页模块设计

           考生通过“考生登录”模块的验证后,可以登录到网络在线考试的前台首页,如图4所示。前台首页主要用于实现前台功能导航,在该页面中只包括在线考试、成绩查询、修改个人资料和退出4个导航链接。

           由于本系统的前台首页主要用于进行系统导航,所以在实现时,采用了为图像设置热点的方法,这样可以增加页面的灵活度,使页面不至于太枯燥。下面将对如何设置图像的热点进行详细介绍。为图像设置热点,也可以称作图像映射,是指一幅图像可以建立多个超链接,即在图像上定义多个区域,每个区域链接到不同的地址,这样的区域称为热点。 

           图像映射有服务器端映射(Server-side-Image Map)和客户端映射(Client-side-Image Map)两种。目前使用最多的是客户端映射,因为客户端映射使图像上对应的坐标以及超链接的URL地址都在浏览器读入,省去和服务器之间互传坐标和URL的时间。

                                                                              图4 前台首页图

    ②考生信息模块设计

           考生信息模块主要包括考生注册、考生登录、修改个人资料以及找回密码等四个功能。考生首先要注册成为网站用户,然后才能被授权登录网站进行一系列操作的权限;登录后考生还可以修改个人的注册资料。如果考生忘记了登录密码,还可以通过网站提供的找回密码功能快速找回密码。考生信息注册模块的系统如图5所示:

                                                                              图5 考生信息注册图

           考生信息模块的Action实现类Student继承了Action类。在该类中,首先需要在该类的构造方法中分别实例化考生信息模块的StudentDAO类。Action实现类的主要方法是execute(),该方法会被自动执行,这个方法本身没有具体的事务,它是根据HttpServletRequest的getParameter()方法获取的action参数值执行相应方法的。

    ③在线考试模块设计

           在线考试模块的主要功能是允许考生在网站上针对指定的课程进行考试。在该模块中,考生首先需要阅读考试规则,在同意所列出的考试规则后,才能选择考试,在选择考试课程后,系统将随机抽取试题,然后进入考试页面进行答题,当考生提交试卷或者到达考试结束时间时,系统将自动对考生提交的试卷进行评分,并给出最终考试成绩。在线考试模块的系统流程如图6所示:

                                                                              图6 在线考试流程图

           考生登录到网络在线考试的前台首页后,单击“在线考试”超链接,将进入到考试规则页面,在该页面中单击“同意”按钮,即可进入到选择考试课程页面,在该页面中将以下拉列表框的形式显示需要参加考试的课程.在该页面中,单击“开始考试”按钮,将关闭当前窗口,并打开新的窗口显示试题,如图7所示:

                                                                              图7 考试试题图

    ④考试题目管理模块设计

           网络在线考试系统的后台首页是管理员对网站信息进行管理的首页面。在该页面中,管理员可以清楚地了解网站后台管理系统包含的基本操作。

           a)管理员信息管理:主要包括管理员信息列表、添加管理员、修改管理员和删除管理员。

           b)考生信息管理:主要包括查看注册考生信息列表和删除已注册的考生信息。

           c)考生成绩查询:主要用于根据准考证号、考试课程或考试时间模糊查询考生成绩。

           d)课程信息管理:主要包括查看课程列表、添加课程信息和删除课程信息。

           e)套题信息管理:主要包括查看套题信息列表、添加套题信息、修改套题信息和删除套题信息。

           f)考试题目管理:主要包括查看考试题目列表、添加考试题目、修改考试题目和删除考试题目。

           g)退出管理:主要用于退出后台管理系统。

           为了方便管理员管理,在网络在线考试系统的后台首页中显示考生成绩查询页面,其运行结果如图8所示:

                                                                              图8 后台首页图

           管理员登录系统后,单击“考试题目管理”超链接,进入到查看考试题目列表页面,在该页面中单击“添加考试题目”超链接,进入到添加考试题目页面。在该页面的“属性课程”下拉列表框中选择“计算机专业英语”,在“所属套题”下拉列表框中将显示该课程对应的套题名称。添加考试题目页面的运行结果如图9所示:

                                                                              图9 添加考试题目图

    3. 面向对象的软件分析与设计

    3.1系统类图

           以用例模型为输人,对用例模型进行分析,把系统分解为相互协作的分析类时,以MVC模式识别系统的类、对类进行划分、建立初步模型、确定类的属性和操作、确定类之间的联系,最后建立类图。系统的类图如图4所示,实现时,类主要体现在视图所对应的后置文件中,除了数据库操作、加密算法等公共业务类以外。

    3.2时序图

           在线考试系统中,用顺序图更能表示系统服务流程,通过图4可以识别出系统里的对象,考试服务子系统的各对象执行的顺序如图5所示,先定义考纲,再定义试卷。考试终端子系统的工作时序为:考生登录,如有考试自动切换进入考试界面,否则由考生选择专题进行测试。一旦进入考试,客户端脚本对象开始倒计时,考生可以自由选择考题类型和考题进行作答。与此同时,考试数据将实时备份至客户端,并在设置时间隔内异步备份至服务端,如图6所示。专题测试在服务端的定义与试卷定义及生成执行时序类似,而专题测试的考试终端仅获取考题,考试结東后给出评价分数。

    3.3状态图

           状态图主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件,以及因状态转移而伴随的动作。考试与测试状态图如图7所示,考试分为测试和期末考试,测试包含专题测试与期末模拟考试。考试试卷的状态如图8a所示,其中考试备份为服务器端对考生考试过程进行备份的状态。一般数据对象状态如图8b所示,一般数据对象包含题库考题、考纲考点等,所有数据信息的添加、编辑均需要审核通过后方可使用,为此将信息类型分为活动状态和非活动状态。

                                                                              图10 在线考试系统服务端类图

                                                                              图11 考试管理子系统的顺序图

                                                                              图12 考试终端子系统顺序图

                                                                              图13 考试与测试的状态图

                                                                              图14 一般数据对象的状态图

    3.4描述UML模型和源代码的逆向工程、正向工程

                                                                              图15 UML模型的正向工程图

                                                                              图16 源代码的逆向工程图

    4. 集成编程环境、编码规范及程序清单

    4.1环境的基本使用方法,调试技术

           选择MySql作为后台的数据库,选择MyEclipse作为应用程序开发工具,应用JAVA、JSP、JavaScript、Html、Tomcat服务器技术,整个系统完全基于B/S (Browser/Server)模式进行设计,采用strus框架进行架构。

           在开发网络在线考试系统时,需要具备下面的软件环境:

    1. 操作系统:Windows10。 
    2. Web服务器:Tomcat8.5。 
    3. Java开发包:JDK1.8。 
    4. 开发工具:MyEclipse2019。
    5. 数据库:MySQL及其图形化管理工具SQLyog。 
    6. 浏览器:火狐、IE、Chrome游览器。 

    4.2程序清单

                                                                              图17 目录详情

    1、主函数

    package com.songlea.springboot.demo;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    // 相关于使用@Configuration,@EnableAutoConfiguration与@ComponentScan的默认属性
    @SpringBootApplication
    // @EnableAutoConfiguration:尝试根据你添加的jar依赖自动配置你的Spring应用
    // 扫描WebServlet,WebFilter,WebListener注解,只有使用servlet容器时作用
    @ServletComponentScan(value = {"com.songlea.springboot.demo.servlet"})
    // 启注解事务管理,等同于xml配置方式的<tx:annotation-driven />,可以使用@Transactional注解
    @EnableTransactionManagement
    @MapperScan(basePackages = "com.songlea.springboot.demo.mapper")
    public class DemoApplication  /* extends SpringBootServletInitializer */ {
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    	}
    }

    2、.properties配置文件

    # spring boot配置文件:部分配置属性与说明
    # 是否开启压缩,默认为false
    server.compression.enabled=true
    # 设定http监听端口
    server.port=8080
    # datasource config (use druid)
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    # 数据库url,用户名与密码(界面有表格故使用前需要导入ci_host_compare表结构与数据)
    spring.datasource.url=jdbc:mysql://localhost:3306/student_test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.initialSize=2
    spring.datasource.minIdle=2
    spring.datasource.maxActive=50
    spring.datasource.maxWait=60000
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    spring.datasource.minEvictableIdleTimeMillis=300000
    spring.datasource.validationQuery=SELECT 1 FROM DUAL
    spring.datasource.testWhileIdle=true
    spring.datasource.testOnBorrow=false
    spring.datasource.testOnReturn=false
    spring.datasource.poolPreparedStatements=true
    spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    spring.datasource.filters=stat,wall,log4j
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    
    mybatis.type-aliases-package=com.songlea.springboot.demo.pojo
    mybatis.mapper-locations=classpath:mapper/*.xml
    # 驼峰命名映射
    mybatis.configuration.map-underscore-to-camel-case=true
    mybatis.configuration.mapUnderscoreToCamelCase= true
    #pagehelper.helper-dialect=oracle
    # 启用合理化时如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页;禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据,默认为false
    pagehelper.reasonable=true
    # 支持通过Mapper接口参数来传递分页参数
    pagehelper.support-methods-arguments=true
    # 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值
    # 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值.不理解该含义的前提下,不要随便复制该配置
    # pagehelper.params=count=countSql
    # 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用,默认false
    pagehelper.offset-as-page-num=true
    # 设置为true时使用RowBounds分页会进行count查询,默认为false
    pagehelper.row-bounds-with-count=true
    # 设置为true时,如果pageSize=0或者RowBounds.limit=0就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是Page类型)
    pagehelper.page-size-zero=true
    
    #org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties配置类
    # 是否开启模板缓存,默认true
    spring.thymeleaf.cache=true
    # 是否检查模板路径是否存在,默认true
    spring.thymeleaf.check-template-location=true
    # 指定Content-Type,默认为:text/html
    spring.thymeleaf.content-type=text/html
    # 是否允许MVC使用Thymeleaf,默认为: true
    spring.thymeleaf.enabled=true
    # 指定模板的编码,默认为: UTF-8
    spring.thymeleaf.encoding=UTF-8
    # spring.thymeleaf.excluded-view-names: 指定不使用模板的视图名称,多个以逗号分隔.
    # 指定模板的模式,具体查看StandardTemplateModeHandlers,默认为:HTML5
    spring.thymeleaf.mode=HTML5
    # 指定模板的前缀,默认为:classpath:/templates/
    spring.thymeleaf.prefix=classpath:/templates/
    # 指定模板的后缀,默认为:.html
    spring.thymeleaf.suffix=.html
    # 指定模板的解析顺序,默认为第一个
    spring.thymeleaf.template-resolver-order=1
    # spring.thymeleaf.view-names:指定使用模板的视图名,多个以逗号分隔.

    3、用户接口

    package com.songlea.springboot.demo.common;
    
    public interface UserRole {
        public static final String STUDENT = "student";
        public static final String TEACHER = "teacher";
        public static final String USER = "user";
    }

    4、用户常态接口

    package com.songlea.springboot.demo.common;
    public interface Constant {
        public static final String PAPERID = "paperId";
        public static final String EXAMROOMID = "examroomId";
        public static final String PROBLEMSLIST = "problemsList";
        public static final String EXAMROOMLIST = "examroomList";
        public static final String  USERLIST= "userList";
        public static final String ERRORMESSAGE = "errorMessage";
        public static final String CHOICE = "选择题";
        public static final String CHOICELIST = "choicelist";
        public static final String SHORTANS = "简答题";
        public static final String SHORTANSLIST = "shortanslist";
        public static final String HASVIEWPAPER = "yes";
        public static final String NOTVIEWPAPER = "no";
        public static final String SUCCESS = "success";
        public static final String FAIL = "fail";
        public static final String MESSAGE = "message";
    }

    5、pom.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.songlea.springboot</groupId>
        <artifactId>examroom</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>examination</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
            <thymeleaf-layout-dialect.version>2.0.5</thymeleaf-layout-dialect.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    
            <!--mybatis支持与分页插件-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
            <!--page helper-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <!--数据库连接池与驱动jar包-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.29</version>
            </dependency>
    
            <!--使用mysql数据库时需要-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <!--热部署-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
                <scope>true</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
    
                <!--spring boot 热部署-->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <fork>true</fork>
                    </configuration>
                </plugin>
    
                <!--mybatis-generator-->
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.5</version>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>5.1.39</version>
                        </dependency>
                        <dependency>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-core</artifactId>
                            <version>1.3.5</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>Generate MyBatis Artifacts</id>
                            <phase>package</phase>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <!--允许移动生成的文件 -->
                        <verbose>true</verbose>
                        <!-- 是否覆盖 -->
                        <overwrite>true</overwrite>
                        <!-- 自动生成的配置 -->
                        <configurationFile>
                            src/main/resources/generatorConfig.xml
                        </configurationFile>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    5. 源代码版本管理

    1、进入Github首页,点击New repository新建一个项目。

                                                                              图18 上传至GitHub

    2、填写相应信息后点击create即可。

            Repository name: 仓库名称

            Description(可选): 仓库描述介绍

            Public,Private: 仓库权限(公开共享,私有或指定合作者)

            Initialize this repository with a README: 添加一个README.md

            gitignore: 不需要进行版本管理的仓库类型,对应生成文件.gitignore

            license: 证书类型,对应生成文件LICENSE

                                                                              图19 获取SHH密钥

    3、点击copy这个地址备用。

                                                                              图20 复制SHH密钥

    4、接下来就到本地操作了,首先右键项目,我之前已安装git,故右键会出现两个新选项,分别为Git Gui Here,Git Bash Here,选择Git Bash Here,进入如下界面,springboot即为我的项目名。

                                                                              图21 git bash进入项目目录

    5、接下来输入如下代码(关键步骤),把github上面的仓库克隆到本地。

                                                                              图22 克隆到本地

    6、本地项目文件夹下面就会多出个文件夹,该文件夹名即为我github上面的项目名,如图我多出了个ExamManage文件夹,把本地项目文件夹下的所有文件(除了新多出的那个文件夹不用),其余都复制到那个新多出的文件夹下。

                                                                              图23 克隆后的本地情况

    7、接着依次输入以下代码即可完成其他剩余操作:

            cd ExamManage,进入Test文件夹

            git add .(把ExamManage文件夹下面的文件都添加进来)

            git commit -m "提交信息"

            git push -u origin master(把本地仓库push到github上面,此步骤需要输入帐号和密码)

                                                                              图24 弹出输入账户和密码的任务框

                                                                              图25 git bash上的执行过程

                                                                              图26 最终上传结果

    6. 自动软件测试

    6.1软件开发技术概述 

            Ajax技术是Asynchronous JavaScript and XML的缩写,意思是异步的JavaScript和XML。Ajax并不是一门新的语言或技术,它是JavaScript、XML、CSS、DOM等多种已有技术的组合,它可以实现客户端的异步请求操作。这样可以实现在不需要刷新页面的情况下与服务器进行通信的效果,从而减少了用户的等待时间。 

    6.2通过Ajax技术实现计时与显示剩余时间 

            在通过Ajax技术实现计时与显示剩余时间,首先需要创建一个封装Ajax必须实现的功能的对象AjaxRequest,并将其代码保存为AjaxRequest.js,然后在开始考试页面中包含该文件,具体代码如下:<script language =“javascript” src=“..//JS/AjaxRequest.js”></script>由于通过Ajax技术实现计时与显示剩余时间表的方法类似,下面以实现自动计时为例进行介绍。编写调用AjaxRequest对象的函数、错误处理函数和返回值处理函数。

            计时方法showStartTime()中,首先需要获取保存在Session中的考试开始时间,并将其转化为对应的毫秒数,然后获取当前时间的毫秒数;再应用这两个时间生成两位的小时数、分钟数和秒数,并组合为新的时间;最后将其保存到showStartTime参数中,并转到输出计时时间的页面。

    7. 设计数据库表

    7.1描述使用Power Designer设计目标系统数据库模型的过程

    7.1.1概念模型

            实体-联系图(Entity Relationship Diagram),E-R模型即实体联系数据模型,它属于概念数据模型。其中,构成E-R图的基本要素主要包括实体型、属性和联系3个部分。本系统的数据需求局部模型如所图9示,为了简化E-R图,每个实体的属性省略,具体的实体属性表示如下。

            班级(C-C):班级编号、班级名称、班级成员、创建者;

            教师(A)(系统、试卷管理员):用户名、密码、角色、数据权限;

            考纲(O):编号、课程编号、考纲名称、创建者、创建时间、审核状态、审人、审核时间;

            考点(P):编号、课程编号、考点名称、最小分数、最大分数;

            考题(Q):编号、课程编号、考点编号、课程章节、题干、参考答案、解题分析、难度系数,参考答案是集合,用特殊符号区分,答案所存储的图文表以HIML标记及文件资源构成,依此处理题干所包含选择题的选项;

            课程(C):编号、课程名称、所属单位、创建者、创建时间、关键字、课程描述等;

            试卷(T):试卷编号、考试名称、测试类型、班级编号、课程编号、试卷总分、考试时间、考试地址、考纲编号、考试时长、考卷难度、考点覆盖范围、试卷状态、创建者、创建日期、审核状态、审核人、审核日期,试卷的试题详表记录,试题详表(T-D):试卷编号、题目类型、每个类型题目数量、每个类型题目分数、每个类型题目的单个试题分数;

            考生(S):考号、帐号、姓名、密码、班级編号、登录标志;

            考试信息(T-I):课程编号、创建者、标题、关键字、描述、简介、内容。

    7.1.2逻辑数据模型

            关系数据库的逻辑结构由一组关系模式组成,从概念结构到关系数据库的逻辑结构的转换就是从E-R图转换为关系模式,其转换过程和规则为:实体和实体属性的转换方法为一个实体转换为一个关系模式;实体之间的联系和联系属性的转换视具体情况进行,图9中角色和权限经优化后不再另外转换为关系模式。联系为1:n的转换方法:在n端的子表中增加父表的关键字列2.于是系统的逻辑数据模式为:

            C-C(classId,className,classMember,creator)

            A (userId,userName,userPwd,userRole,userDataAuthority)

            O(outlineld,courseId,outlineName,creator,addTime,checkState,checker,checkTime)

            P (testPointId,courseId,testPointName,minimumGrade,maximumGrade)

            Q(questionId,courseId,testpointId,courseChapterName,question,anwser,anwserAnalysis,questionDifficultyDegree)

            C(courseId,courseName,subordinateUnit,creator,addTime,courseKeyword,courseDescription)

            T(paperld,testName,testType,classId,courseId,totalGrade,testDate,testAddress,outlineld,durationTime,testDifficulty,testRange,testState,creator,addTime,chechState,checkUser, checkDate)

            T-D(paperId,questionType,eachTypeQuantity,eachTypeGrade,eachTypeQuestionGrade)

            S(testId, userAccount, userName, userPwd, classId, isLogin)

            T-I (courseId,author,title,keyword,description,introduction,content)

            成绩(G):考号、科目编号、试卷编号、答案、每个题目的得分情况、平时成绩、在线学习成绩、总成绩,每种威绩的加权系统由任课教师设定。其关系模式表示为:

            G(testId,courseld,testNumber,single-optionGrade,judgeGrade,blankGrade,multipleChoiceGrade,appQuestionGrade,processGrade,e-learningGrade,totalGrade)

            考生答题记录表,该表应该记录着考生的在线考试近3分钟前的答题情况,当考试过程发生故障而又不能从客户端不能进行考试恢复时,从服务器端恢复备份。考生答题记录(B):试卷编号、考号试卷编号、试题编号、试题解答。其关系模式表示为:

            B(paperld, testid, courseld, questionid, solutionresult)

            系统的物理模型是给定的逻辑数据模型选取一个合适应用要求的物理结构,包括数据库的存储记录格式、存取方法等,且数据库的物理模型依赖给定硬件环境和数据库产品。

                                                                              图26 数据需求局部模型

    7.2数据库设计表

    ①tb_manager(管理员信息表) 

            管理员信息表用来保存管理员信息,该表的结构如表1所示:

    ②tb_Student(考生信息表) 

            考生信息表用来保存考生信息,该表的结构如表2所示:

    ③tb_stuResult(考生成绩信息表) 

            考生成绩信息表用来保存考生成绩,该表中的所属课程字段whichLesson与tb_Lesson表中的Name字段相关联,并且设置为级联更新。考生成绩信息表的结构如表3所示:

    ④tb_TaoTi(套题信息表) 

            套题信息表用来保存套题信息,该表中保存着所属套题ID,套题名称,套题所属课程以及套题的添加时间信息。该表的结构如表4所示:

    ⑤tb_Lesson(课程信息表) 

            课程信息表用来保存课程信息,该表中保存着所属课程的ID,课程名以及课程的添加时间信息。该表的结构如表5所示:

    ⑥tb_Questions(考试题目信息表) 

            考试题目信息表用来保存考试题目信息。考试题目信息表的结构如表6所示:

    7.3数据表关系设计

            本系统设计了如图10所示的数据表之间的关系,该关系实际上也反映了系统中各个实体之间的关系。

                                                                              图27 数据表之间的关系图

    8. 实践工作总结

    8.1在设计及编程过程中遇到的问题及解决的方法

                                                                              图28 样式加载不出来

            问题的点在于引用的jquery以及各种css样式都是静态的,所以解析出现错误,把css样式和jQuery的js文件都放在静态资源下就可以解决这个问题,看最后的静态目录,其中需要注意,静态资源的文件夹的名称必须要写成static,不然不能识别,然后在静态资源下放各种js和css文件以及html和图片。

    8.2对软件工程与工匠精神的理解

            “臣之所好者道也,进乎技矣。”庖丁之语,解答了自己解牛何以神乎其技,道出了一个工匠追求技艺的价值所在。从历史的维度来看,工匠是现代社会之前的一个群体,他们的工作和劳动,主要依靠手工完成。工业革命之后,机器化大生产代替了手工作坊的生产,工匠逐渐受到了冷落。然而,在机器化大生产的时代,更注重产品的精度和品质,更需要工匠精神。当前,中国正在由“制造大国”向“制造强国”迈进,培育工匠精神迫在眉睫。学校要大力加强实践教育,让“心灵手巧”成为衡量人才的标准,尤其在职业教育与应用技术教育中要予以体现。企业要有奖励工匠的体制机制,技艺精湛的工匠,应该在企业内部受到应有的重视,多注重从政策上对工匠倾斜。工匠和简单从事体力劳动的群体不同,他们的劳动中闪耀着智慧的灵光,具有创造性和开拓性,社会各方对他们理应给予足够的人文关怀。

            软件在当今的信息社会中占有重要的地位,软件产业是信息社会的支柱产业之一。随着软件应用日益广泛、软件规模日益扩大,人们开发、使用、维护软件不得不采用工程的方法,以求经济有效地解决软件问题。对于软件工程的学习需要借助于计算机科学技术、数学、管理科学与工程诸多学科,如今的软件工程已由最初的一个学科方向发展成为以计算机科学技术为基础的一个新兴交叉学科。

            软件工程是计算机学科中一个年轻且充满活力的研究领域。现代科学技术将人类带入了信息社会,计算机软件扮演着十分重要的角色,软件工程已成为信息社会高技术竞争的关键领域之一。

            从软件工程专业的种种特性来看,软件工程与工匠精神密不可分,软件工程是一门构建优质、高效软件、知识涉略广泛、逻辑严谨的技术性学科,一丝的差错可能导致严重的后果,故当我们在开发软件时一定要时刻保持着工匠精神!

    8.3对《软件工程师职业道德规范和实践要求 5.2版》的理解

            飞速发展的技术使得这个世界对人类的要求越来越高,她越发希望甚至迫使我们要自觉跟踪技术发展动态,积极参与各种技术交流、技术培训和继续教育活动,不断改进和提高自己的技能,自觉参与项目管理和软件过程改进活动。要能注意对个人软件过程活动的监控和管理,积累工程数据,研究和不断改进自己的软件生产效率和质量,并积极参与发展高效的团队软件过程管理,使各项软件产出,都能达到国际和国家标准与规范。

            社会上的大多数职业,倘若不能主动学习,不能自我进步,那么至少你将失去对于你来讲最有价值的手段,用来获得高薪机会的手段。对软件工程师来讲,这一点尤其明显。一方面是技术的不断普及,一方面是公司对经验人员的迫切需求。在开发领域甚至在任何其他领域一个默认的共识是才华横溢绝对不是你想象的那么重要,从才华横溢到事业成功,要付出艰辛的劳动。你再去问问资深软件工程师,成为资深工程师所需要的不是天份,而是1万小时定律支配下的时间和你的肝功能。软件业是一个不断变化和不断创新的行业,面对层出不穷的新技术,软件人才的求知欲和进取心就显得尤为重要,它是在这个激烈竞争的行业中立足的基本条件。软件工程师应具有较强的学习总结能力、需求理解能力和对IT新技术比较敏感,同时,掌握最新的IT实用技术。

            一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法论。程序员是个很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但学习也要找准目标,不能三心二意、盲目泛读,技术不是学得越多越好,而是即使你只掌握一门技术,精益求精、不断钻研,终有一天你会成为这个领域的佼佼者。

    质量目标指标样例及属性详细说明

    分类

    指标

    指标内容

    详细说明

    功能性

    适合性

    行业适合性

    软件支持业务(或领域应用)的必要功能必须存在,这些功能应当与其应用的业务(或领域)场景相适宜,是软件最根本的质量属性。

    准确性

    需求的吻合程度

    应100%覆盖用户的需求。

    互操作性

    如系统进行互联和互通等

    如本系统的某些信息能够与民政网站上的某些信息相对应,进行信息共享。

    依从性

    是否遵守规范

    指系统所依循的书目和文档等参考资料。

    安全性

     

    指软件产品所具备防止未经授权访问程序或数据的能力,以免造成意外的损失。

    可靠性

     

    成熟性

    可用度

    用功能度量即可,能够满足客户一般使用即可。

    初期故障率

    指系统完成初期,在一定时间内,发生系统不能正常使用(如系统崩溃)或影响客户正常工作的问题数。

    偶然故障率

    系统运行一定时间内,发生系统不能正常使用(如系统崩溃)或影响客户正常工作的问题数。

    容错性

    平均失效前时间(MTTF)

    指软件在失效前正常工作的平均统计时间。其中失效指造成系统崩溃的错误,时间为验收后,系统能够正式稳定运行。

    平均失效间隔时间(MTBF)

    指软件在相继两次失效之间正常工作的平均统计时间。其中失效指造成系统崩溃的错误,时间为验收后,系统能够正式稳定运行。

    缺陷密度(FD)

    指缺陷数/代码行数。

    易恢复性

    平均失效恢复时间(MTTR)

    指系统失效后重新启动的平均时间。

    易用性

    易理解性

     

    指用户认识软件的结构、功能、逻辑、概念、应用范围、接口等难易程度的软件属性。

    易学习性

     

    指用户学习软件应用(运行控制、输入、输出)难易程度的软件属性。

    易操作性

     

    指用户操作和运行控制软件的难易程度的软件属性。

    效率

    时间特性

    性能

    输出结果更新周期(页面反应时间)

    不能超过用户所能忍受的限度。

    并发

    指系统允许多少个相同的动作在同一时间进行操作。

    压力

    系统所能承受的最大数据。

    可维护性

    易分析性

     

    指代码名称等是否符合规范,是否完整,

    数据库表格命名等是否符合规范。

    可扩展性

     

    指能与其他系统相连,扩展之后的程序修改不大。

    可修改性

     

    从系统的架构、层次、文档、代码注释等方面考虑。

    可移植性

    适应性

     

    指在不同浏览器、数据库和操作系统上都可运行使用。

    易安装性

     

    指用户使用系统所用的安装方式。

    易替换性

     

    指更新版本后系统是否容易更新。

    交付产品清单

    展开全文
  • 一个大家都能用的试验大纲是模板。简单而方便。有利于大家的使用。
  • 软件工程中常用的Project软件使用报告
  • 在图书馆的图书管理系统,为了使读者能够借阅图书,必须先在系统中存在一个账户,然后系统为其生成一个借阅证,借阅证可以提供读者的姓名,类型(学生,研究生,老师等),系别和借阅证号。持有借阅证的借阅者可以...
  • 软件工程实践

    千次阅读 2010-01-21 21:20:00
    软件工程实践报告计07-5班 吴猛2010/1/12 此次实践共分为四个实践部分,涵盖软件开发工程的主要模块、过程,并掌握开发过程中相关软件的使用。

     

     

    软件工程实践报告

    07-5

     

    吴猛

    2010/1/12

     

     

    此次实践共分为四个实践部分,涵盖软件开发工程的主要模块、过程,并掌握开发过程中相关软件的使用。

     


     

    实践  利用Visio绘制DFD

    根据所选系统,利用Visio绘制系统相关的DFD图。

    实验学时:8学时

    实验要求:

             1.可以采用结构化方法对所选系统进行需求分析;

             2.采用Visio绘制系传统的DFD图;

             3.提交绘制的图形和实验报告。

     

    一、背景:

    家庭的管理已经成为人们关注的焦点,家庭的收入和支出是一个零碎而又切身利益相关的问题。这款基于B/S模式的系统将有效地解决这一繁琐问题,帮助用户管理财务信息,并提供其他一些附加功能。

    家庭财务管理系统是在家庭对自家管理信息系统急迫需求的情况下着手开发的。它可以帮助一个家庭记录收入和支出的情况,并可以通过报表来获得家庭人员在一段时期内的支出和收入信息,生成的报表可以任意的定义类型,比如某段时间的固定日常开支记录等。另外,系统可根据生成的统计数据分析用户的财务状况,提供可行的解决方案。

     

    二、绘制DFD

    21绘制顶层DFD

    家庭财务管理系统的主要模块是进行日常收支的登记,并将家庭在某段时间内的收支信息反馈给家庭成员,让家庭成员及时地了解自己在近期的财务状况。对此我们可绘制出顶层的DFD图:

     

    1.1 0DFD

     

    22绘制第一层DFD

    根据家庭财务管理系统的要求,我们将该系统分为4个模块,分别为:登录模块、收支登记模块和处理报表模块。这里为了便于登陆模块的使用,我们又添加了另一个模块:注册模块,用于填充新的用户。

    1.2 第一层DFD

     

     

    23绘制第二层DFD

            注册子系统是用户初次使用时首先遇到的部分,添加新用户、新用户信息等。

            登陆子系统中如果发现系统中不存在该用户,则转入到注册子系统,登陆成功后,用户便可进入到主界面,进而完成自己相关的操作。

            收支登记子系统是用户经常接触的操作,完成账户信息的更新。包括统计信息(对收支记录进行统计汇总)、自动记账和个人设置。其中个人设置和自动记账是自动记账模块的集中体现,用户在设置个人信息时,将日常固定收支计入其中,如每日伙食费、水电费、工资、房租等等,如此系统会根据此设置信息自动进行账户信息的更新,以便节约用户频繁的收支登记,方便了用户的使用。

            处理报表子系统可根据用户的要求信息生成各类报表,如关于最近一段时间的开支信息、大额的支出记录、超支记录等,用户根据报表可很好的了解自己财务上的信息。系统也可根据数据的统计信息作出有效地预期,如一年的收入走势、日常开支走势、其它支出走势等,以便提供可能的预测信息,供用户参考。

          

     

     

     

     

    1.3 第二层DFD---注册子系统

     

    1.4 第二层DFD---登陆子系统

     

     

    1.5 第二层DFD---收支处理子系统

     

     

    1.6 第二层DFD----生成报表子系统

     

     

     

     

    数据字典

    相应的数据条目如下:

    F1:账户信息表

    文件名

    账户基本信息表

    组成

    {账号+户名+身份证号+性质+账户开通日期}

    组织

    按账号从小到大排列

    备注

     

     

    F2:账户信息表

    文件名

    账户信息表

    组成

    {日期+账号+收(支)款额+摘要+余额}

    组织

    按日期从小到大排列

    备注

    收(支)款额用正(负)数表示

     

    F3:个人设置信息表

    文件名

    个人设置信息表

    组成

    {账号+账户名+{收支款项+金额+摘要}}

    组织

    按账号从小到大排列

    备注

     

     

    F4:收支记录表

    文件名

    收支记录表

    组成

    {账号+{日期+存(取)款额+摘要}}

    组织

    按账号、日期从小到大排列

    备注

    存(取)款额用正(负)数表示

     

    F5:报表统计信息

    文件名

    报表统计信息

    组成

    {日期+账号+账户名+统计类型}

    组织

    按日期从小到大排列

    备注

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    实践 UML工具的使用

    学习Rational RoseStarUML等工具,针对所选系统进行模型分析和设计,完成用例图、类图、序列图、状态图、活动图等图形的绘制。

    实验学时:16学时

    实验要求:

    1.下载、安装Rational RoseStarUML等工具软件,学习软件使用;

             2.绘制用例图、类图、序列图、状态图、活动图等图形针对所选系统进行模型分析和设计。

     

    一、软件介绍及相关

    本实例采用Rational Rose工具软件进行面向对象系统模型的分析和设计。这是一个功能强大的软件开发集成环境,包含系统建模、源代码生成、系统测试、软件文档生成等功能。其包含四个视图:用例视图、逻辑视图、构建视图和部署视图。

    用例视图:包含系统中的所有参与者、用例和用例图,主要使用者是客户、分析人员和项目管理员。分析软件的功能和测试软件都会用到用例模型。

    逻辑视图:提供系统详细描述,包括类、类图、时序图、状态图等,面向人员是设计人员和构架师。其是对用例功能实现的实现。

    构建视图:包含模型代码库、执行文件、运行库和其他组件的信息,主要面向负责控制代码和变异部署应用程序的人。

    部署视图:显示网络上的进程以及其相互间的实际连接。

    二、各类系统模型设计图

    1、用例图

       用例图是UML的静态建模机制之一,用以描述系统应该做什么,即外在功能,是一种面向对象需求建模方法。本系统称为家庭个人财务管理系统,功能较为简单,是为财务管理的一个扩充。

    系统参与者为:用户(主要参与者)、内部系统(维护信息)和银行系统(外来参与者)。

    系统用例:

    1.1注册

    1.2登陆

    1.3选择账户

    1.4收支登记

    1.5大额支出

    1.6个人设置

    1.7自动记账

    1.8生成通知、报表

    1.9汇率变更

    1.10注销

    2.1 “家庭个人财务管理系统用例图

     

     

    2、类图

        在面向对象建模技术中,类和对象模型揭示了系统的静态结构,是UML的静态建模机制之一。

    类与类之间包含的关系有:关联、聚集、泛化、依赖以及组合。

    2.1用户和账户是关联关系,且一个用户可以拥有多个账户。

    2.2现金账户和卡账户是对账户的一种泛化结果。

    2.3用户设置信息是“用户”对象的一部分,构成聚集关系

    2.4支出登记和收入登记分别和收支登记是组合关系。

    2.5账户信息表的实现依赖于接口(get Database)。

    2.2 类图

    3、序列图

       序列图又称时序图,是按时间顺序描述系统元素之间的交互。元素中包括一些实体类、边界类和控制类,每一个用例都对应一个事件流,都可构成一个时序图。这里节选了其中几个用例用以描述元素间的交互。

    3.1用例一 登陆

    2.3 “登陆”时序图

    3.2用例二 收支登记(支出登记)和自动记账

    2.4 “收支登记和自动记账”时序图

    3.3用例三 生成报表

    2.5 “生成报表”时序图

    4、状态图

    状态图用来描述一个特定对象的所有可能状态以及引起其他状态转移的事件。一般来说,状态图表示单个对象在其生命周期中的行为。

    这里描述了报表建立的状态图,包含四个状态:建立新表单、验证信息、操作无效和报表建立。事件的发生导致状态的转移,比如,如果验证信息出现错误,状态“验证信息”会自身转移,再次接受用户的信息输入,直至验证正确或是因为超时或是超过次数而转移到“操作无效”,进而退出,结束其生命周期。

    2.6 状态图实例

    5、活动图

       活动图可以用来描述操作(类的方法)行为,或是描述用例和对象内部的工作工程。通常是多个用例或是对象的复杂行为。

      下面表述的是上例报表生成状态图的扩展。

    2.7 活动图实例

    6、构件图和部署图

       两者是基于物理架构层次的建模,详细描述系统的软件和硬件,包括软件的代码模块的物理结构和硬件不同结点间的连接关系等等。是将前面得到的逻辑架构映射到物理结构。

       构件图:显示软件构件之间的依赖关系。也就是各种实际文件(包括源代码文件、可执行文件等)的联系。

       部署图:描述了系统硬件的物理拓扑结构以及在此文件上执行的文件。

    2.8 构件图

        

    2.9 部署图

    实践三 软件源代码管理

    实验学时:4学时

    实验要求:学习基于系统工具进行源代码版本管理

    实验要求:

    1.下载、安装SVNTrac等工具软件,学习软件使用;

    2.对所选系统的源代码进行版本管理。

     

    一、源代码管理工具之一 SVN

    SVN是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。Subversion 是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。

    11软件安装

    软件安装需要服务器端软件和客户端软件,

    12软件日常使用

    包括一般操作等

    121建立用户、组以及档案库(记录数据改变)

     

    122用户上传文件

    123导入建立的test2档案库中

    124上传服务器成功

    125下载文件

          新建一个文件夹,从服务器上导入档案库中我们需要的所有文件。

    导入成功之后的文件夹(2

    126本地更改文件后提交文件时我们可以选择多种操作

     

     

     

    127本地查看版本信息

     

     

    128查看版本更新详情,并选择下载新版本

     

    129使用Blame查看当前版本与任意版本的差别

     

     

     

    1210利用Revision Graph查看与此文件相关的版本信息

     

     

    1211通过Browser查看档案库

     

     

    二、源代码管理工具之一 Trac

    Trac是一种开放源码网页界面专案管理、缺陷追踪软件。

    主要功能包括:项目管理 (Roadmap, Milestones)、追踪系统 (缺陷追踪、任务 )、最近活动的时间轴、Wiki、可定制的报告、版本控制系统的web接口等。

    通过Subversion集成,开发者可在Trac中以Web方式浏览代码库中各个版本的代码和代码的修改历史,并可方便地比较各个版本间的差别。

    管理员身份登陆后,我们可以对项目的相关信息更改,如ComponentsMilestonesTicket TypesVersion

     

    21 Wiki

    Wiki是一个协同写作平台或者称之为开放编辑系统,即它允许所有人修改它的网页。支持常用的Wiki语法。同时增加了许多bug管理的专用标记,可以方便地创建到ticket、代码行甚至修改历史的链接。

     

    23 Ticket

    Trac中,项目中出现的问题称为ticket。像bug、功能改进等都可以写成一个ticket

    可设置ticket的优先级别。

    可以设置ticket的里程碑,表明这个ticket应在何时完成,并能够通过条形图方式显示里程碑的完成度。

     

    View Ticket:

    根据一定条件列出相应的Ticket,如列出所有ActiveTicket、根据Milestone列出所有ActiveTicket、我的Ticket等等。

     

    可以自定义条件生成bug报告,并可以通过SQL语句自定义报告的格式。

     

     

    24 Timeline

     Timeline即时间线,用来查看由谁在什么时候进行的更改

     

    25 RoadMap

    用来查看工作进度,(根据包含的Ticket的完成情况)。

    26 Browse Source

      即浏览源代码

     

    实践四  使用软件测试工具

    学习WebstressNUnit等各类软件测试工具,及Test Manager测试管理工具,针对所选系统实现情况,编写测试计划、设计测试用例,掌握软件自动测试方法。

    实验学时:4学时

    实验要求:

    1.下载、安装WebstressNUnitTest Manager等工具软件,学习软件使用;

             2.运用NUnit工具软件进行白盒测试用例设计及自动测试

             3.运用Webstress工具软件进行性能自动测试

             4.了解Test Manager测试管理工具的使用方法。

     

    一、网站相关测试-----------Webstress

    Webstress是一个网站压力自动测试的工具。用它可以很好的对建设的网站性能进行测试,内容包括点击命中率、错误率、服务器带宽、服务器响应时间以及网络带宽等。这里采用了一个本地服务器上的网站。

    网站名:中国防雷技术网站 local

    URL192.168.248.128

    通过模拟用户访问,可以对这个网站进行较为全面的测试。

    11软件使用

    主界面:

    4.1 Webstress界面

     

    12单击测试后,软件会自动测试,并生成相关报告

    13测试得到的总体结果(未联网,故Google访问失败)

     

     

     

     Results per URL

    URL No.

    Name

    Clicks

    Errors

    Errors [%]

    Time Spent [ms]

    Avg. Click Time [ms]

    1

    google

    23

    23

    100.00

    0

     

    2

    中国防雷技术网站

    28

    0

    0.00

    3,212

    115

     

     

     

    14得到的每个用户点击的详情

     

    Results per User

    User No.

    Clicks

    Hits

    Errors

    Avg. Click Time [ms]

    Bytes

    kbit/s

    Cookies

    1

    6

    5

    0

    2,253

    0

    0.00

     

    2

    7

    6

    0

    123

    124,140

    1,342.26

     

    3

    6

    5

    0

    2,313

    0

    0.00

     

    4

    7

    6

    0

    113

    124,140

    1,458.88

     

    5

    6

    5

    0

    2,367

    0

    0.00

     

    6

    7

    6

    0

    106

    124,140

    1,564.90

     

    7

    6

    5

    0

    2,406

    0

    0.00

     

    8

    7

    6

    0

    120

    124,140

    1,385.04

     

    9

    5

    5

    1

    2,453

    0

    0.00

     

    10

    6

    5

    0

    111

    103,450

    1,497.48

     

     

     

     

    15点击次数和请求失误次数

     

     

     

    16点击时间、点击率以及命中率

     

     

    17网页分类资源响应时间

     

     

     

    18用户等待网页时间

     

     

     

    19请求的发送、接受数和网络负载关系

     

     

    110系统内存、网络负载以及CPU负载

     

     

    111服务器端的网络带宽和用户端的平均网络带宽

     

     

     

     

    112服务器地址解析以及本地套接字响应时间等

     

     

     

    二、白盒测试 -------NUnit

    21了解软件

         主界面:

     

    22编写测试用例

    本次测试采用的是C#语言,在VS2008NUnit集成在一起,完成测试工作。首先,新建一个测试工程,用来编写我们的测试用例。另外,我们要在vs2008上修改工程的属性,更改Debug的选项,便于我们的使用,如下所示:

     

    编写测试用例:

    221便于我们测试,新建一个类Calculator

    namespace NUnitTest

    {

        public class Calculator

        {

            public int Add(int a, int b){}   

            public int Minus(int a, int b){}

            public int Multiply(int a, int b){}

            public int Divide(int a, int b){}

            static void Main(string[] args)

            {

                Calculator cal = new Calculator();

                int result = cal.Add(2, 3);

                Console.WriteLine(result);

            }

        }

    }

    222建立我们的测试类,要加上库文件引用和命名空间等

    using NUnit.Framework;

    using NUnitTest;

                 然后编写我们的测试类CalculatorTest1

    其中[TestFixture]来说明该类有测试目标,[Test]表示要测试的方法,[Category]用来分类测试。

    [TestFixture]

    public class CalculatorTest1

    {

        [Test]

        public void TestAdd()

        {

            Calculator cal = new Calculator();

            int expected = 5;

            int actual = cal.Add(2, 3);

            Assert.AreEqual(expected, actual);

        }

      

       //其它测试等等

      

        [Test,Category("边界测试")]

        public void TestOther()

        {

            int expected = 0;

            int n = 4;

            int[,] arrayInt = new int[n + 1,n + 1];

            for (int i = 4; i > 0;i-- )

            {

                for (int j = 4; j > 0;j-- )

                {

                    arrayInt[i,j] = 0;

                }

            }

            Assert.AreEqual(expected, arrayInt[0,0]);

        }

        [Test,Category("字符串")]

        public void TestOther2()

        {

            int expected = 20;

            string myString = "my first Test here.";

            Assert.AreEqual(expected, myString.Length);

        }

    }

               为了便于测试的编写,我们修改上述测试代码,使用下列语句,使得每次方法测试时,都恢复测试环境,使用[SetUp]重建测试环境,[TearDown]来销毁环境

        [SetUp]

        public void SetUp()

        {

            cal = new Calculator();

            a = 10;

            b = 0;

        }

        [TearDown]

        public void TearDown()

        {

            cal = null;

                       }

            这样,我们就可以使用上面的测试环境来进行测试了,如

        [Test]

        public void TestAdd()

        {

            expected = 10;

            actual = cal.Add(a, b);

            Assert.AreEqual(expected, actual);

    }

           另外,我们也可以[ignore(“忽略”)]来忽略当前的方法测试,使用[Category(“Category A”)],我们可以很好的选择我们要测试的方法,如我们要测试“边界测试”和“Category B”两个分类,则测试结果如下:

     

    三、测试管理 -------Test Manager

    Rational Test Manager是针对测试活动管理、执行和报告的中央控制台。它是为可扩展性而构建的,支持的范围从纯人工测试方法到各种自动化范型(包括单元测试、功能回归测试和性能测试)。

    其解决了测试和测试资产管理的复杂性,将自动化引入到测试实验室,解决了测试和测试资产管理的复杂性。Rational Test Manager让测试团队可以控制测试工作,通过自动化和简化关键任务来集中他们的精力。该工具允许团队执行、跟踪和测试应用程序所需的所有功能,以助于确保不对非关键性业务需求进行测试。

     

    展开全文
  • 软件工程实践的源代码及详尽报告,C++(MFC)编写,内容详尽
  • 陕西省 西安电子科技大学 计算机应用实践报告 软件工程 doc
  • 软件工程实践案例分析+报告(微信小程序+mysql数据库+web后台管理).zip软件工程实践案例分析+报告(微信小程序+mysql数据库+web后台管理).zip软件工程实践案例分析+报告(微信小程序+mysql数据库+web后台管理)....
  • 对于软件工程或者计算机专业的同学写需求分析报告、可行性分析、的人有帮助。
  • 软件工程专业 软件项目实践(认识实习)报告
  • 自从上个世纪90年代以来,以计算机技术、通信技术和软件技术为核心的信息技术取得了更加迅猛的发展,各种装备与设备上嵌入式计算与系统的广泛应用大大地推动了行业的渗透性应用。嵌入式系统被描述为:“以应用为中心...
  • 一,题目简介: 1、创建一副扑克牌 7------k 加入到集合对象中2、对扑克牌洗牌3、定义参与游戏的玩家的人,通过键盘输入,限定人数2-54、人数符合要求继续执行,不符合退出5、对玩家发牌,每个人发五张,对玩家的牌...

    一,题目简介:

    1、创建一副扑克牌 7------k 加入到集合对象中
    2、对扑克牌洗牌
    3、定义参与游戏的玩家的人,通过键盘输入,限定人数2-5
    4、人数符合要求继续执行,不符合退出
    5、对玩家发牌,每个人发五张,对玩家的牌排序

    GitHub链接地址:

    https://github.com/GY1/test/blob/master/ShowHand(%E6%A2%AD%E5%93%88%E6%B8%B8%E6%88%8F)

    梭哈游戏 源代码:

    package com.langsin.CollectionsFramework;

    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.TreeSet;

    public class ShowHand {

    private ArrayList<String> pukeList = new ArrayList<String>();
    private Map<String, TreeSet<String>> map = new LinkedHashMap<String, TreeSet<String>>();
    private Map<String, Double> scoreMap = new LinkedHashMap<String, Double>();
    private boolean flag = true;

    // 1.创建扑克牌 7-K
    private void createPuke() {
    String[] point = {"2","3","4","5", "6", "7", "8", "9", "10", "J", "Q", "K" };
    String[] type = { "黑桃", "红桃", "梅花", "方块" };
    for (int i = 0; i < type.length; i++) {
    for (int j = 0; j < point.length; j++) {
    this.pukeList.add(type[i] + point[j]);
    }
    }
    }

    // 2.洗牌
    private void sortedPuke() {
    Random rand = new Random();
    for (int i = 0; i < 100; i++) {
    int index1 = rand.nextInt(this.pukeList.size());
    int index2 = rand.nextInt(this.pukeList.size());
    String puke1 = this.pukeList.get(index1);
    String puke2 = this.pukeList.get(index2);
    this.pukeList.set(index1, puke2);
    this.pukeList.set(index2, puke1);
    }

    }

    // 3.创建参加游戏的人
    private void createPlayer() {
    System.out.println("请输入参与游戏的玩家的名称,中间用空格隔开:(人数不得超过8人,少于3人 ,否则程序终止!)");
    Scanner scan = new Scanner(System.in);
    String players = scan.nextLine();
    String[] nums = players.split(" ");
    if (nums.length < 3 || nums.length > 9) {
    System.out.println("参与游戏的玩家人数不符合要求,程序终止!");
    this.flag = false;
    System.exit(0);// (程序终止)
    }
    Comparator<String> comp = new Comparator<String>() {

    public int compare(String str1, String str2) {

    int point1 = getPoint(str1.substring(2));
    int point2 = getPoint(str2.substring(2));
    if (point1 < point2) {
    return -1;
    } else if (point1 > point2) {
    return 1;
    } else {
    int type1 = getType(str1.substring(0, 2));
    int type2 = getType(str2.substring(0, 2));
    if (type1 < type2) {
    return -1;
    } else {
    return 1;
    }
    }

    }
    };
    for (int i = 0; i < nums.length; i++) {
    map.put(nums[i], new TreeSet<String>(comp));
    }

    }

    private int getPoint(String point) {
    if ("J".equals(point)) {
    return 11;
    } else if ("Q".equals(point)) {
    return 12;
    } else if ("K".equals(point)) {
    return 13;
    } else {
    return Integer.parseInt(point);
    }
    }

    private int getType(String type) {
    if ("黑桃".equals(type)) {
    return 4;
    } else if ("红桃".equals(type)) {
    return 3;
    } else if ("梅花".equals(type)) {
    return 2;
    } else {
    return 1;
    }
    }

    // 4.给玩家发牌
    private void showPuke() {
    for (int i = 0; i < 5; i++) {
    for (String key : map.keySet()) {
    String puke = this.pukeList.remove(0);
    map.get(key).add(puke);
    }
    }

    for (String key : map.keySet()) {
    System.out.println("玩家名称:" + key + ":" + map.get(key));
    }
    }

    // 计算玩家分数,得到获胜玩家
    private void getScoreWinner() {
    for (String key : map.keySet()) {
    TreeSet<String> set = map.get(key);
    scoreMap.put(key, this.score(set));
    }
    List<String> list1=this.getWinner(scoreMap);
    System.out.println("恭喜" + list1.get(0) +"获得最终冠军! ! !"+ " 冠军分数为:" + list1.get(1));
    Map<String, Double> scoreMap1=this.getScore(scoreMap);

    List<String> list2=this.getWinner1(scoreMap1);
    System.out.println("恭喜" + list2.get(0) +"获得亚军!!"+ " 亚军分数为:" + list2.get(1));
    Map<String, Double> scoreMap2=this.getScore(scoreMap1);

    List<String> list3=this.getWinner1(scoreMap2);
    System.out.println("恭喜" + list3.get(0) +"获得季军!"+ " 季军分数为:" + list3.get(1));

    }


    private List<String> getWinner(Map<String, Double> scoreMap) {

    List<String> list=new ArrayList<String>();
    String winner = null;
    double end = 0;
    for (Map.Entry<String, Double> entry : this.scoreMap.entrySet()) {
    System.out.println("玩家名: " + entry.getKey() + " " + "玩家获得分值: "
    + entry.getValue());
    if (end < entry.getValue()) {
    end = entry.getValue();
    winner = entry.getKey();
    }
    }
    list.add(winner);
    list.add(String.valueOf(end));
    return list;
    }

    private List<String> getWinner1(Map<String, Double> scoreMap) {

    List<String> list=new ArrayList<String>();
    String winner = null;
    double end = 0;
    for (Map.Entry<String, Double> entry : this.scoreMap.entrySet()) {
    if (end < entry.getValue()) {
    end = entry.getValue();
    winner = entry.getKey();
    }
    }
    list.add(winner);
    list.add(String.valueOf(end));
    return list;
    }

    private Map<String, Double> getScore(Map<String, Double> scoreMap) {


    String winner = null;
    double end = 0;
    for (Map.Entry<String, Double> entry : this.scoreMap.entrySet()) {
    if (end < entry.getValue()) {
    end = entry.getValue();
    winner = entry.getKey();
    }
    }
    scoreMap.remove(winner);
    return scoreMap;
    }


    private double score(TreeSet<String> set) {

    boolean flag = true;
    String[] pukes = set.toArray(new String[set.size()]);
    for (int i = 0; i < pukes.length - 1; i++) {
    int point1 = this.getPoint(pukes[i].substring(2));
    int point2 = this.getPoint(pukes[i + 1].substring(2));
    if (point1 - point2 != -1) {
    flag = false;
    break;
    }
    }

    if (flag) {
    return 5.0 + this.getPoint(pukes[4].substring(2)) * 0.01;
    }

    int point1 = this.getPoint(pukes[0].substring(2));
    int point2 = this.getPoint(pukes[1].substring(2));
    int point3 = this.getPoint(pukes[2].substring(2));
    int point4 = this.getPoint(pukes[3].substring(2));
    int point5 = this.getPoint(pukes[4].substring(2));
    // 四张相同的卡
    if (point1 == point4 || point2 == point5) {
    return 4.0 + this.getPoint(pukes[2].substring(2)) * 0.01;
    }
    // 三张相同的卡
    if (point1 == point3 || point2 == point4 || point3 == point5) {
    return 3.0 + this.getPoint(pukes[2].substring(2)) * 0.01;
    }
    // 两对两张相同的卡
    if (point1 == point2 && point3 == point4) {
    return 2.0 + this.getPoint(pukes[2].substring(2)) * 0.01+ this.getPoint(pukes[0].substring(2)) * 0.0001+ this.getPoint(pukes[4].substring(2)) * 0.000001;
    }
    if (point1 == point2 && point5 == point4) {
    return 2.0 + this.getPoint(pukes[3].substring(2)) * 0.01+ this.getPoint(pukes[0].substring(2)) * 0.0001+ this.getPoint(pukes[2].substring(2)) * 0.000001;
    }
    if (point3 == point2 && point5 == point4) {
    return 2.0 + this.getPoint(pukes[3].substring(2)) * 0.01+ this.getPoint(pukes[1].substring(2)) * 0.0001+ this.getPoint(pukes[0].substring(2)) * 0.000001;
    }
    // 两张相同卡
    if (point1 == point2) {
    return 1.0+this.getPoint(pukes[0].substring(2))*0.01+this.getPoint(pukes[4].substring(2))*0.0001+this.getPoint(pukes[3].substring(2))*0.000001+this.getPoint(pukes[2].substring(2))*0.00000001;
    }
    if (point2 == point3) {
    return 1.0+this.getPoint(pukes[1].substring(2))*0.01+this.getPoint(pukes[4].substring(2))*0.0001+this.getPoint(pukes[3].substring(2))*0.000001+this.getPoint(pukes[0].substring(2))*0.00000001;
    }
    if (point3 == point4) {
    return 1.0+this.getPoint(pukes[2].substring(2))*0.01+this.getPoint(pukes[4].substring(2))*0.0001+this.getPoint(pukes[1].substring(2))*0.000001+this.getPoint(pukes[0].substring(2))*0.00000001;
    }
    if (point4 == point5) {
    return 1.0+this.getPoint(pukes[3].substring(2))*0.01+this.getPoint(pukes[2].substring(2))*0.0001+this.getPoint(pukes[1].substring(2))*0.000001+this.getPoint(pukes[0].substring(2))*0.00000001;
    }

    return this.getPoint(pukes[4].substring(2))*0.01+this.getPoint(pukes[3].substring(2))*0.0001+this.getPoint(pukes[2].substring(2))*0.000001+this.getPoint(pukes[1].substring(2))*0.00000001+this.getPoint(pukes[0].substring(2))*0.0000000001;
    }


    public void init() {

    while (true) {
    this.createPuke();
    this.sortedPuke();
    this.createPlayer();
    if (flag) {
    this.showPuke();
    this.getScoreWinner();
    System.out.println("是否继续进行游戏?Y/N");
    Scanner scan = new Scanner(System.in);
    String idea = scan.nextLine().toUpperCase();
    if (idea.equals("Y")) {
    pukeList.clear();
    map.clear();
    this.init();
    } else {
    System.out.println("拜拜,下次见哦!");
    System.exit(0);
    }
    }
    }
    }


    public static void main(String[] args) {
    new ShowHand().init();
    }
    }

     

     

     

     

    问题及解决方案、心得体会:

    通过本次实践 对java应用更加熟练,特别是集合框架的运用,set的无序,不可重复性,list的有序,可重复性,map的key-value对,各自特点了解更为深刻。提高了个人能力!

     

    转载于:https://www.cnblogs.com/GY-Bky/p/4467648.html

    展开全文
  • 软件工程实践报告最终打印版,实验一ATM机的数据流图,原型图,实验二ATM的USECASE用例图,类图,序列图,协作图,活动图以及状态图,实验三java、php和C#语言的学习规范,实验四SVN版本控制,GIT版本控制和VS以及...
  • 福州大学2016-2017学年软工实践经过一个学期,为了调研上课情况,更好的迭代升级本课程,设计包含15个问题的调查问卷,经过一个星期的收集,全班50人,收到有效调查问卷41份,现将调查问卷情况统计如下: ...

    1.调查问卷概况

    福州大学2016-2017学年软工实践经过一个学期,为了调研上课情况,更好的迭代升级本课程,设计包含15个问题的调查问卷,经过一个星期的收集,全班50人,收到有效调查问卷41份,现将调查问卷情况统计如下:

    2.调查问卷情况

    Q1:你有没有选修实践课

    100%

    Q2:请问你的学号是:

    Q3:本学期你在软工实践课程平均每周花费多长时间?

    1016281-20170213204131269-1951330485.png

    说明:横坐标从左到右,从低到高按成绩排列。
    平均计算18.35h

    Q4:在这门课程中你大概写了多少行代码?

    1016281-20170213204231566-385540605.png

    说明:横坐标从左到右,从低到高按成绩排列。
    平均2396行。
    从Q3和Q4发现,每周花费时间长度,本学期代码行数和最终成绩并不能成正比,计算他们的相关关系,成绩和每周小时数,代码行数的相关系数是分别是-0.00511和0.0839,属于不相关。代码行数和每周时长的相关系数是0.043,也呈不相关的关系。这种现象,应当和团队分工,效率高低不无关系。比如团队分工中做PM统筹项目方向,代码行数不多;如果团队时间规划恰当,每周需要花费的时间并不需要太长。按照分数段分组,计算平均每周时长和代码行数,更反映了成绩不是和代码行数和每周话费时间有关,我想,真正和成绩有关的就是学生的用心程度,和学生的有效投入时间。

    分数段 每周时长(hour) 代码行数
    90-100 16.5 1950
    80-90 12 2959
    70-80 13 2451
    60-70 18.5 1310

    Q5:请填写你上课前后的水平评估。 填 [1..10] 数字即可

    数字参考:1: 最低水平; 3: 基本的书面知识;5: 基本的理论和实践知识, 可以通过企业的面试;6: 具有经实战考验过的技能;可通过最高水平企业的面试8: 可以像专业人士一样自如地运用; 能发表权威技术博客10: 全面精通理论和实践,成为公认的专家。
    统计结果:
    1016281-20170213210829550-979134373.png

    统计自我评估情况和最终成绩的相关性:
    计算方法:自我评估情况取前后两次分数之间的差值,再分别和学生成绩计算、代码行数计算相关系数
    1016281-20170213204820082-294342833.png

    首先说明一下相关系数的作用:相关系数是用以反映变量之间相关关系密切程度的统计指标,一般认为,0-0.09为没有相关性,0.3-弱,0.1-0.3为弱相关,0.3-0.5为中等相关,0.5-1.0为高度相关。从上表可以看出代码行数和自我评估变化程度基本不存在相关性。而除最后两项意外,自我评估变化情况和学生分数存在弱相关关系。
    学生的自我评估能在一定程度上反应学生水平的提高,但是自我评估并没那么准确,尤其是在更偏主观性的问题上体现的更为明显,如Presentation 和Work with others这两个项目上学生的自我评估和成绩呈不相关。在查看自我评估上还有评估偏低的情况出现,如取得100分的同学评估自己从没在4分以上,明显太谦虚了,尽管有明确的标准,但正是这种谦虚的态度使得学生不能准确的评估自己的水平。同时也注意到,代码行数和上述自我评估项目并无明显相关关系,但是有趣的是在最后一个项目Perentation上存在明显的负弱相关,直观判断这个组员角色分工有关,在Pesentation环节上担任PM角色的组员都得到了很好的锻炼,但因为分工问题代码量并没有那么多。
    建议:将数字参考说明修改的更为明晰,更为形象。

    Q6:请填写你上课前后的水平评估:(未掌握的可空缺)

    1016281-20170213211654394-967686109.png

    Q7:对这门课的教学方法评价

    1016281-20170213204828816-276139863.png

    Q8:对这门课的教学方法评价,你觉得:

    1016281-20170213204835644-1176059157.png

    Q9:你对这门课助教(阿波罗_Z)的评价

    1016281-20170213211758488-92707587.png

    Q10:总的来说,你推荐这个老师班级的课给你的低年级同学么?

    1016281-20170213204857472-214718245.png

    Q11:请结合助教本学期的表现,对助教(阿波罗_Z)有那些建议?

    1016281-20170213204904550-1491435955.png

    Q12:软工实践中最让你感到骄傲的一件事是什么?

    1016281-20170213204909050-1498404581.png

    Q13:经过一学期的学习,你觉得老师应该继续做哪一件事情?

    1016281-20170213205047785-1677426787.png

    Q14:经过一学期的学习,你觉得老师应该停止做哪一件事情?

    1016281-20170213205121566-853980191.png

    Q15:经过一学期的学习,你觉得老师应该开始做什么新事情:

    1016281-20170213211548129-1024919750.png

    3.总结

    经过一个学期的学习,大家都取得了很明显的进步,平均每周花费18小时左右,本学期代码数量人均2000余行,多则7000,少则500。让人意外的是每周花费时间和代码行数跟最终的成绩并不存在预想中的相关关系,并且在自我评估环节也出现了有意思的现象,在这里就不进一步阐述了。可见分数并不是跟你的“量”有关,最重要的还是“质”。在同学们的反馈中,以赞赏为主,可见同学们对这种教学方式的认可度之高。在给助教的建议是意外的少,大多数是表扬,这些建议中助教回复时间安排,内容增加一些企业内的例子,增加和班级群里同学的互动等这些对于我而言都是很好的意见。其中更新成绩快一些,是下次做助教最需要改进的地方。在同学给老师的建议中,增加的女生比例的建议似乎爱莫能助:) 此外,基础较弱的同学普遍反映入门较难的问题,个人这个问题只能依靠他们自己解决,教师的作用是带领他们发现自己的问题,帮助解决,而不是保姆。但是“组间增加联系和合作”“在实践课上自己讲课”等是可以考虑吸收的意见。
    最后特别感谢张栋老师的信任,周老师的引荐,邹欣老师的指点。在此次调查问卷统计报告的撰写过程中,更体会到了要把一个事情做好,不断迭代是必需的环节。罗马不是一日建成的,这份报告也是在和邹欣老师邮件沟通中不断反馈修改完善的,在这里再次感谢您百忙之中的指点。

    转载于:https://www.cnblogs.com/deerCode/p/6395375.html

    展开全文
  • 在计算机网络支撑、完善的数据库和稳定的开发平台上,利用现有的软件,和良好的硬件配置,开发一套具有开放体系结构的、可扩充的、易维护的、具有良好人机交互界面的库存管理系统
  • 选题报告内容 选题报告下载链接:点击下载 本组评审表设计 评审表下载链接:点击下载 评审表预览: NABCD 分析引用 NEED 需求 用户群体 主要针对人群:福州大学的广大师生群体以及食堂各个店铺 用户数量:...
  • 这次是软件工程综合实践的第二次实验,本次任务是结对编程,就是找一个小伙伴一起写代码,一人写代码一人复审代码,这样可以更快的找出代码的错误,然后立即更改,提高开发效率。 下面是老师发布的任务截图 ...
  • 本次作业是介绍一个原型设计工具,由于我们上学期就已经用过了Axure RP软件,所以我就拿这个工具来介绍一下。(我的软件已汉化) 什么是Axure RP? Axure(发音:Ack-sure),代表美国Axure公司;RP则是Rapid ...
  • 软件工程 总结报告

    2016-06-16 15:58:00
    软件工程总结报告 一 对前期提出的问题回答 1、经过一个学期的学习和了解,让我对这门课程有了一定的了解和认识,但是也有许多的问题。 让我对这门课程有了一定的认知,但并不是每个软件工程师都有强烈的...
  • 高级软件工程考察报告姓名:张旭 +原创作品转载请注明出处+ 课程链接:《软件工程(C编码实践篇)》MOOC课程前言Software pervades our world, and we sometimes take granted its role in making our libves more ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 529
精华内容 211
关键字:

软件工程实践报告