中南大学
软件开发架构平台技术
实验报告
姓名:学
号:班级:
指导老师:
完成时间:
2014-05
实验一基于MVC的JPetStore开发
一、完成项目的过程和时间安排
完成过程:实验由我们小组三人合作完成,考虑到我们对这个实验相关的知识都还比较陌生,我们商量后决定每个人做自己的,遇到问题互相讨论,最终我们小组成员也都先后完成实验,达到实验预期的目标,完成了基于MVC的JPetStore 的开发。
时间安排:我们小组利用三天时间完成实验,事先对相关知识的熟悉大概花费了1天的时间,大部分的时间都用来编码和调试。
二、遇到的问题和解决方法
简单的说一下做的过程中遇到的几个问题,有些问题虽然看着很简单,但是
在实验过程中确实经常因为一些很简单的问题卡很久。
问题1.商品展示部分product只能显示一条内容
解决方法:一开始是以为jsp页面显示出了问题,但是没有检查出结果,后来发现页面显示出的全都是每一个类型的第一条内容,后来我开始在servlet方面查错,通过一层层的调用system.out.println()方法,最终发现我在DA0层的Impl 实现类中把while写成了if,问题的原因也就显而易见了。
问题2.在商品展示模块,所有的图片都无法正常显示
解决方法:经过检查jsp页面内容都没有出错,后来发现由于组织工程的文件夹内容不同,在数据库中的路径写的不一致,他用的是绝对路径,我改成了相对路径后问题解决。
问题3.在编写OrderDAOImpI的过程中出现了时间类型不匹配的情况解决方法:一直报类型转换错误的异常,我很奇怪异常中写道必须为Date类,
可是确实用的Date类的对象。后来通过上网查找问题发现这是由于
pStatement.setDate 需要一个java.sql.Date 类的对象。而我传给它的参数
是一个java.util.Date 类的对象,于是我用这个的语句解决了这个问题:
pStateme nt.setDate(3, new
java.sql.Date(order.getOrderDate().getTime()));
问题4.如何读取checkbox中是否勾选信息
解决方法:一开始我认为checkbox返回的是boolean类型的值,后来通过上网查资料发现,如果不勾选时checkbox所对应属性的值为null,于是我用了这样的语句判断是否勾选。
Boolea n ship =
request.getParameter( "shippingAddressRequired" )== null ;
account .setListOption(request.getParameter( "account.listOption
").equals( "true" ) ? true : false );
问题5.没有找到例子中的合适的检测是否登录的方法
解决方法:由于给的例子用了框架等方法,没有找到可以用的检测是否在登录状态的类,于是我自己写了一个方法。
public Boolea n getAcco un tByUser nameA ndPassword Only (Acco unt
acco unt) {
boolean selectResult = false ;
Conn ecti on connection = DBUtil. getCo nn ecti on ();
try {
PreparedStateme nt pStateme nt = conn ecti on
.prepareStateme nt( getAccou ntByUsernameA ndPassword On lySql );
pStateme nt.setStri ng(1, acco un t.getUser name());
pStateme nt.setStri ng(2, acco un t.getPassword());
ResultSet resultSet = pStateme nt.executeQuery();
if (resultSet.next()) {
selectResult = true ;
}
DBUtil. closeResultSet (resultSet);
DBUtil. closePreparedStateme nt (pStateme nt);
DBUtil. closeC onn ecti on (conn ecti on);
} catch (Exception e) {
e.pri ntStackTrace();
}
retur n selectResult;
}
三、小组成员分工
组长:张先凯
小组三人均独立完成实验要求内容
实验二用AJAX改进用户体验
一、项目应用了AJAX技术的功能模块以及有无使用框架。
运用了Ajax技术的功能模块:
1.账号管理模块。在新建账号和修改账号信息页面上用AJAX技术进行表单
验证。包括密码与二次输入密码是否一致,用户名是否重复等等。
2商品查询模块。在首页右上角的查询商品中增加了自动补全功能,并可以用鼠标和键盘
上线移动选中高亮部分,输入框的内容也会随着鼠标键盘的移动而移动。
3.主页商品展示模块。在首页展示商品的图片上添加了AJAX效果,即当
鼠标移到某个商品图片上时,用悬浮窗动态加载该类型商品的信息。
三个模块中均未使用框架技术。
二、说明应用AJAX技术的理由、具体实现方法和核心源代码。
理由:将整个页面刷新转化为局部刷新功能,改进响应效果,增强用户体验。
具体实现方法:
1.点击按钮或者鼠标失焦等操作触发ajax操作。
2?在js接收传来的值,并利用Json对象与服务器异步交互。在没有接收到服务
器的响应之前,Jsp页面做出响应的等待的响应的反应。
3?得到响应后刷新相应的div或者控件或者显示加载失败。
核心源代码:
模块一:账号管理模块
NewAcco un t.jsp
JSf弋码:
var xmlHttpRequest;
fun ctio n createXMLHttpRequest()
{]_________________________________________________________
if (window.XMLHttpRequest) // ?非IE 浏览器
{
xmlHttpRequest = new XMLHttpRequest();
}
else if (window.ActiveObject) 〃IE6 以上版本的IE 浏览器
—{
xmlHttpRequest = new ActiveObject( "Msxml2.XMLHTTP");
—}
else //IE6及以下版本IE浏览器
{
xmlHttpRequest = new ActiveObject( "Microsoft.XMLHTTP");
} }
function user namelsExist() {
var user name = docume https://www.doczj.com/doc/b3702061.html,ername.value;
sen dRequest( "usernameIsExist?username=" + user name);
}
function sen dRequest(url) { createXMLHttpRequest(); xmlHttpRequest.open( "GET", url, true ); xmlHttpRequest. on readystatecha nge = processResp onse;
xmlHttpRequest.send( null );
}
function processResp on se() {
if (xmlHttpRequest.readyState == 4) {
if (xmlHttpRequest.status == 200) {
}
//以下是我自己写的
fun ctio n passwordlsCorrect() {
var password = document.registerForm.password.value;
var repeatedpassword = docume nt.registerForm.repeatedPassword.value;
createXMLHttpRequest();
xmlHttpRequest.ope n( "GET", "SamePassword?password=" +
password + "&repeatedpassword=" + repeatedpassword, true );
xmlHttpRequest. on readystatecha nge = processResp on sei;
xmlHttpRequest.send( null );
function processResp on se1() {
if (xmlHttpRequest.readyState == 4) {
}
script >
原JSP页面修改:
User ID: td > | ${https://www.doczj.com/doc/b3702061.html,ername} td > tr > |
New password: td > | td > tr > |
Repeat password: td > | div > td > tr > Servlet UsernameIsExistServlet.java package org.csu.myjpetstore.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.csu.myjpetstore.domain.Account; import org.csu.myjpetstore.service.AccountService; public class UsernameIsExistServlet extends HttpServlet { public UsernameIsExistServlet() { super(); } public void doGet(HttpServletRequest HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); Account account = new Account(); account.setUsername(username); AccountService service = new AccountService();request, request, response.setContentType("text/xml;charset=utf-8"); PrintWriter out = response.getWriter(); if(https://www.doczj.com/doc/b3702061.html,ernameIsExist(account)){ out.println(" } else { out.println(" } out.flush(); out.close(); } public void init() throws ServletException { } public void destroy() { super.destroy(); } } SamePasswordServlet.java package org.csu.myjpetstore.web.Ajax; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SamePasswordServlet extends HttpServlet { public SamePasswordServlet() { super(); public void doGet(HttpServletRequest HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }
public void doPost(HttpServletRequest HttpServletResponse response) throws ServletException, IOException { String password = request.getParameter("password"); String repeatedpassword request.getParameter("repeatedpassword"); System.out.println(password+repeatedpassword); response.setContentType("text/xml;charset=utf-8"); PrintWriter out = response.getWriter(); if(repeatedpassword.equals(password)){ out.println(" }
else { out.println(" }
out.flush(); out.close(); }
public void init() throws ServletException { }
public void destroy() { super.destroy(); 效果截图: request, request, vform n ame="searchForm" actio n ="searchProducts" > method ="post" type ="text" n ame="keyword" size ="20" 模块二:商品查询模块 核心代码: 原JSP页面修改IncludeTop.jsp: on keyup ="test(eve nt);" /> form > style ="display : none; background-color : White ; width : 150px; border : solid 1px; position : relative ; top : -23px ; right : -90px ; line-height : 20px ; t ext-align : left ;" > div > div > 页面中的JS代码: 声明全局变量和XRL 这里是响应事件的function 其中包括获取页面Search 模块中所有的标签并进行了筛选,其中通过key 的值屏蔽了除了字母之外其余输入内容的合法性,而且对于方向键的向上和向下进行了处理,使得使用键盘时也可以获取提示框中的内容,对重复的代码也进行了封装,封装代码在下面。 面则是在搜 上面的函数是对键盘处理功能中重复代码的封装处理, 选出应修改内容后对标签样式的修改。 这里是鼠标处理,使用了和键盘处理相同的全局变量使得使用中视觉效果的同步。 实验效果图: 只输入a: 鼠标或者键盘移动下去: 模块三:主页商品展示模块 核心代码: 原jsp页面修改Main.jsp vdiv id ="Mainlmage" > href ="categoryView?categoryld=DOGS" shape ="RECT" onm ouseover ="dogshow();" onm ouseout ="birdshowoff();" /> href ="categoryView?categoryld=REPTILES" shape ="RECT" onm ouseover ="reptileshow();" onm ouseout ="birdshowoff();" /> href ="categoryView?categoryId=CATS" shape ="RECT" onm ouseover ="catshow();" onm ouseout ="birdshowoff();" /> href ="categoryView?categoryld=BIRDS" shape ="RECT" onm ouseover ="birdshow();" onm ouseout ="birdshowoff();" /> map> alig n ="middle" usemap="#estoremap" width ="350" /> div > JS代码: vstyle > * { } .b { margin : 0px; padding : 0px; overflow : auto ; } 」ine0 { line-height : 20px ; background-color : orange ; padding : 0px 15px;} 」ine1 { line-height : 18px ; background-color : orange ; padding : 0px 10px;} .w { display : none; position : absolute ; right : 10px; bottom : 10px; width : 160px; height : 240px ; overflow : hidden ; border : 2px groove #281; cursor : default ; -moz-user-select : none; } .t { line-height : 20px; height : 20px; width : 160px ; overflow : hidden ; background-color : orange ; color : white ; font-weight : bold ; border-bottom : 1px outset blue ; text-align : center ; } .winBody {height : 218px ; width : 160px; overflow-x : hidden ; overflow-y : auto ; border-top : 1px in set blue ; padd ing : 10px; text-indent : 10px ; background-color : white ; } .seletcted { background-color : gray ;} style > //以下为鼠标事件 fun cti on birdshow(){ document.getElementByld( "div2" ).innerHTML = str11; "block" document.getElementByld( "div2" ).style.display = fun cti on fishshow(){ var str21 =""; str21 += " AboutFish " ;str21 += " FI-FW-01:Koi ";FI-FW-02:Goldfish FI-SW-01:A ngelfish FI-SW-02:Tiger Shark document.getElementByld( "div2" ).innerHTML = str21; document.getElementByld( "div2" ).style.display = "block" } fun cti on dogshow(){ var str31 =""; fun cti on reptileshow(){ var str41 =""; str41 += " AboutReptiles " ;str41 += " RP-LI-02:lgua na " ;RP-SN-01:Rattles nake document.getElementByld( "div2" ).innerHTML = str41; document.getElementByld( "div2" ).style.display = "block" } fun cti on catshow(){ var str51 ="" str51 += " AboutCats " ;str51 += " FL-DLH-02:Persian "FL-DSH-01:Ma nx document.getElementByld( "div2" ).innerHTML = str51; document.getElementByld( "div2" ).style.display = "block" } 效果图: 上图为鼠标放在空白处时初始的界面 上图为鼠标放在鸟图案时右下角出现的关于鸟的一些信息。其余图案也有相 同的效果。 三、小组成员分工及实验体会 小组成员分工: 这次试验中,第一个用户登录相关模块由于比较简单,三个人都做出一份结果。第二个搜索模块由张先凯独立完成,第三个用户商品展示模块由胡涛和李静涛合作完成。 心得体会:通过实验,我们了解到前端的内容比较琐碎,需要更加认真仔细,由于我们基本不开设前端课程内容,而它又是web 开发中重要的一部分,需要我们在平时自学完成。 实验三用Struts 2 重构JPetStore 一、实验结果 (一)在用struts 2 重构JPetStore 之后主要有以下一些变化 1.如下图所示,原来的JSP页面中的标签已经被struts2自带的标签所代替,方便以后添加输入验证等功能。 【精品实验报告】软件体系结构设计模式实验报告【精品实验报告】软件体系结构设计模式实验报告软件体系结构 设计模式实验报告 学生姓名: 所在学院: 学生学号: 学生班级: 指导老师: 完成日期: 一、实验目的 熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括组合模式、外观模式、代理模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。 二、实验内容 使用PowerDesigner和任意一种面向对象编程语言实现组合模式、外观模式、代理模式、观察者模式和策略模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。 (1) 组合模式 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。 (2) 组合模式 某教育机构组织结构如下图所示: 北京总部 教务办公室湖南分校行政办公室 教务办公室长沙教学点湘潭教学点行政办公室 教务办公室行政办公室教务办公室行政办公室 在该教育机构的OA系统中可以给各级办公室下发公文,现采用 组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。(注:可以定义一个办公室类为抽象叶子构件类,再将教务办公室和行政办公室作为其子类;可以定义一个教学机构类为抽象容器构件类,将总部、分校和教学点作为其子类。) (3) 外观模式 某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求编程模拟实现。参考类图如下: reader = new FileReader();EncryptFacadecipher = new CipherMachine();writer = new FileWriter();-reader: FileReader-cipher: CipherMachine-writer: FileWriter +EncryptFacade () +fileEncrypt (String fileNameSrc,: voidString plainStr=reader.read(fileNameSrc); String fileNameDes)String 软件开发实验报告doc软件开发实验报告 篇一:软件开发实验报告 本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:CASE工具PowerDesigner的使用 实验地点:专业班级: 指导教师: XX年10月22日 本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:搭建Visual Studio开发环境,设计实验地点:致远楼B303指导教师:崔秀娟XX年9月28日 篇二:软件开发平台实验报告 课程设计报告 课程名称: 软件开发平台与工具任课教师: 姓名: 学号: 1. 引言 1.1. 课程设计项目 1.2. 背景简介从编程之初,便免不了和方法,类,接口之类的东西打交道。久而久之,自然会对此进行总结, 由此而产生了开发平台。而今中国的程序员之中,有很大一部分都是编一些企业MIS、政府MIS之类的程序。其主要工作就是对数据进行一下增删改查的操作,对MIS系统做一些基础的管理而已。软件开发平台有两种平台模式:一种是传统的C/S架构模式,一种是现在流行的B/S架构模式。B/S 架构模式是随着互联网的流行,自然又要求以互联网为基础,把这些都网络化,以实现网络资源共享,而不是传统的单机模式。这便激发了软件开发者的创造力,形成了软件开发平台的B/S架构模式(web开发平台)。对于web开发平台,我的个人理解是: 1.以web 2.0为基础,基于互联网的B/S架构的软件。它本身也是一个软件,只不过不是最终的软件产品,而是用于二次开发的软件。 2.用于实现各类业务系统,如CRM、MIS、ERP、HIS、OA 等等的开发。web开发平台本身就是一个二次开发平台,他不同于诸如eclipse等这样的开发工具,需要写大量的代码来完成各个业务模块,二次开发平台只需要设计好自己的数据结构,进行一些简单的配置、拖拉等操作就可以完成业务系统的开发。 3.能够快速的实现各种报表包括复杂的图表报表的设计制作,传统的编码式开发需要自己去编写想要的各种报表,而运用开发平台就简单多了,可以很轻松的配置出各种报表。 体系结构实验报告中南大学软件学院 软件体系结构 设计模式实验报告 学生姓名:宋昂 所在学院:软件学院 学生学号: 3901080115 学生班级:软件0801 指导老师:刘伟 完成日期: 2010-12-7 一、实验目的 熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。 二、实验内容 使用PowerDesigner和任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。 (1) 简单工厂模式 使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、方形(Rectangle)和三角形(Triangle) 对象,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnsupportedShapeException,绘制类图并编程实现。 (2) 简单工厂模式 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man 对象,如果传入参数“W”,则返回一个Woman对象,使用任意一种面向对象编程语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意女娲的变化。 (3) 工厂方法模式 某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。用代码实现日志记录器实例,如果在系统中增加一个中的日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码,注意增加新日志记录方式过程中原有代码的变化。 电子科技大学软件开发环境实验报告电子科技大学软件开发 环境实验报告 Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】 本实验总体目的是,通过使用huffman编码算法从而实现文件的压缩和解压,以达到使学生掌握并灵活运用分割函数的三项原则。 五、实验内容: 本实验要求实现一个exe程序。这个程序按照huffman编码方式,同时包含了压缩功能和解压功能。用户通过以下命令进行压缩: C:\> –c uncompress_filename compress_filename 上述命令中,是程序名,-c表示要进行压缩。uncompress_filename是要压缩的文件名,可以包含路径信息,而compress_filename是压缩之后的文件名,同样可以包含路径信息。用户可以通过如下命令进行解压: C:\> –u compress_filename uncompress_filename 上述命令中,-u表示要执行解压命令。compress_filename是要解压的文件名,可以包含路径信息;uncompress_filename就是解压后所得到的文件,同样可以包含路径信息。 提示:在实现程序时,需要考虑如何存储huffman树或者编码表或者词频表等等。 本实验要求实现两个版本的程序,一是C语言版本的,二是C++版本的。对这两个版本的要求如下: 对于每一个版本的程序,需要在实验报告中给出函数调用关系图、流程处理关系 图以及它们的文字说明等内容; 对于每一个版本的程序,都需要在实验报告中给出源代码。为了便于查重,代码 中注释的比例要占到总行数的20%; C++版本的程序,需要给出类关系图。 实验报告的评分标准,包括以下几个方面: 实验报告是否规范 计算机体系结构实验报告二实验二结构相关 一、实验目得: 通过本实验,加深对结构相关得理解,了解结构相关对CPU性能得影响。 二、实验内容: 1、用WinDLX模拟器运行程序structure_d、s 。 2、通过模拟,找出存在结构相关得指令对以及导致结构相关得部件。 3、记录由结构相关引起得暂停时钟周期数,计算暂停时钟周期数占总执行 周期数得百分比。 4、论述结构相关对CPU性能得影响,讨论解决结构相关得方法。 三、实验程序structure_d、s LHI R2, (A>>16)&0xFFFF 数据相关 ADDUI R2, R2, A&0xFFFF LHI R3, (B>>16)&0xFFFF ADDUI R3, R3, B&0xFFFF ADDU R4, R0, R3 loop: LD F0, 0(R2) LD F4, 0(R3) ADDD F0, F0, F4 ;浮点运算,两个周期,结构相关 ADDD F2, F0, F2 ; < A stall is found (an example of how to answer your questions) ADDI R2, R2, #8 ADDI R3, R3, #8 SUB R5, R4, R2 BNEZ R5, loop ;条件跳转 TRAP #0 ;; Exit < this is a ment !! A: 、double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 B: 、double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 四、实验过程 打开软件,load structure_d、s文件,进行单步运行。经过分析,此程序一 次循环中共有五次结构相关。(Rstall 数据相关Stall 结构相关) 1)第一个结构相关:addd f2,,f0,f2 由于前面得数据相关,导致上一条指令addd f0,f0,f4暂停在ID阶段,所以下一条指令addd f2,,f0,f2发生结构相关,导致相关得部件:译码部件。 软件设计模式与软件体系结构实验报告《软件体系结构》大作业(1) 学院:软件学院 课程名称:软件体系结构 专业班级: 学生姓名:学号: 学生姓名:学号: 指导教师: 完成时间:年月日 评分表 1、叙述各小组成员完成本题目的分工协作情况。 小组中的每个成员都先理解题目要求及涉及的设计模式,并一起完成代码编写。另外,组长负责文档制作。 2、评分表 序号姓名评分是否组长 1 2 作业正文需要包括以下内容: 1、作业题目内容的详细描述。 2、完成本题目所采用的软件设计模式名称及画出相应的类图,或者是所采用的 软件体系结构名称及画出相应的体系结构图。 3、画出完成本题目所设计程序的设计类图;如还有其他图,也一并画出。 4、完成本题目所设计的程序代码。 5、程序运行的典型界面截图 1、作业题目内容的详细描述。 【作业2.1-1】例2.3为使用工厂方法模式设计的汽车保险管理应用程序实例。现在需要 扩展例2.3的设计图,添加一个名为LuxuryCarInsurance的类,并且需要编写此类和其他需要添加的类的代码,详细要求参见光盘的相应作业部分。 【作业2.1-1】在例2.4中,设计并且实现了豪华(Super)和中等(Medium)别墅(House)与公寓(Condo)的查询。要求在该设计的基础上,增加一个新的类SemiDetacher(半独立式楼宇),并且编写代码,实现相应的查询功能,详细要求参见光盘的相应作业部分。 2、完成本题目所采用的软件设计模式名称及画出相应的类图,或者是所采用的软件体系结构名称及画出相应的体系结构图。 【作业2.1-1】采用的是工厂方法模式 【作业2.1-2】采用的是抽象方法模式 软件开发工具与环境实验报告.南昌大学实践报告 学生姓名:谢某某学号:0149001506109 专业班级:软件工程2006 实践类型:□验证□综合□设计□创新实践日期:2010-11-30 实践成绩: (以下主要内容由学生完成) 一、实验项目名称 利用VC++设计一个简单的电话薄管理程序 二、实验目的 综合运用面向对象程序设计的基础知识,设计一个小型的应用程序,提高解决问题的能力。 三、实验基本内容 设计一个电话簿管理程序,要求: 〔1〕具有添加、删除、显示、修改和查询联系人电话号码的功能。 〔2〕联系人的信息保存到文件中。 〔3〕可以实现为控制台程序或图形界面程序。 〔4〕按学院实验报告要求格式书写实验报告 四、主要仪器设备及耗材 PC一台,Microsoft Visual C++ 6.0 开发环境 五、实验步骤 该电话薄的实现代码如下: #include book();//默认构造函数 char inter_face();//首页 void add_person();//添加 void del_person();//删除 void show_all();//显示 void alter();//修改 void select();//查询 void save_new();//保存 private: string name;//姓名 string number;//电话号码 }; book::book() { name = "\0"; number = "\0"; } //首页 char book::inter_face() { system("cls"); cout < 福建农林大学计算机与信息学院 实验报告 课程名称:软件设计与体系结构 姓名:陈宇翔 系:软件工程系 专业:软件工程 年级:2007 学号:070481024 指导教师:王李进 职称:讲师 2009年12月16日 实验项目列表 福建农林大学计算机与信息学院实验报告 学院:计算机与信息学院专业:软件工程系年级:2007 姓名:陈宇翔 学号:070481024 课程名称:软件设计与体系结构实验时间:2009-10-28 实验室田实验室312、313计算机号024 指导教师签字:成绩: 实验1:ACME软件体系结构描述语言应用 一、实验目的 1)掌握软件体系结构描述的概念 2)掌握应用ACMESTUDIO工具描述软件体系结构的基本操作 二、实验学时 2学时。 三、实验方法 由老师提供软件体系结构图形样板供学生参考,学生在样板的指导下修改图形,在老师的指导下进行软件体系结构描述。 四、实验环境 计算机及ACMESTUDIO。 五、实验内容 利用ACME语言定义软件体系结构风格,修改ACME代码,并进行风格测试。 六、实验操作步骤 一、导入Zip文档 建立的一个Acme Project,并且命名为AcmeLab2。如下图: 接着导入ZIP文档,导入完ZIP文档后显示的如下图: 二、修改风格 在AcmeLab2项目中,打开families下的TieredFam.acme.如下图: 修改组件外观 1. 在组件类型中,双击DataNodeT; 在其右边的编辑器中,将产生预览;选择Modify 按钮,将打开外观编辑器对话框。 2. 首先改变图形:找到Basic shape section,在Stock image dropdown menu中选 择Repository类型. 3. 在Color/Line Properties section修改填充颜色为深蓝色。 4. 在颜色对话框中选择深蓝色,并单击 [OK]. 5. 修改图形的边框颜色为绿色 7. 单击Label tab,在Font Settings section, 设置字体颜色为白色,单击[OK] 产生的图形如下图: 软件工程实验报告 姓名:冯巧 学号 实验题目:实验室设备管理系统 1、系统简介: 每天对实验室设备使用情况进行统计,对于已彻底损坏的作报废处理,同时详细记录有关信息。对于有严重问题(故障)的要即时修理,并记录修理日期、设备名、修理厂家、修理费用、责任人等。对于急需但又缺少的设备需以“申请表”的形式送交上级领导请求批准购买。新设备购入后立即对新设备登记(包括类别、设备名、型号、规格、单价、数量、购置日期、生产厂家、购买人等),同时更新申请表的内容。 2、技术要求及限定条件: 采用C#语言设计桌面应用程序,同时与数据库MySql进行交互。系统对硬件的要求低,不需要网络支持,在单机环境下也能运行,在局域网环境下也能使用。方案实施相对容易,成本低,工期短。 一:可行性分析 1、技术可行性分析 计算机硬件设备,数据库,实验室设备管理软件与实验室设备管理系统的操作人员组成,能够实现实验室设备管理的信息化,提高工作效率,实现现代化的实验室设备管理。系统需要满足实验室设备管理(包括对实验设备的报废、维修和新设备的购买)、实验室设备信息查询(包括按类别进行查询和按时间进行查询)、实验室设备信息统计报表(包括对已报废设备的统计、申请新设备购买的统计和现有设备的统计)。这些功能框图如下图所示: 2、经济可行性分析 依据用户的现实需求、技术现状、经济条件、工期以及其他局限性因素等等因素,考虑到工期的长短、技术的成熟可靠、操作方便等因素,本方案具备经济可行性。 3、系统可选择的开发方案 ①方案A用C#开发系统的特点是:开发工具与数据库集成一体,可视化,开发速度较快,但数据库能够管理的数据规模相对较小。系统对硬件的要求低,不需要网络支持,在单机环境下也能运行,在局域网环境下也能使用。方案的实施相对容易,成本低,工期短。 ②方案B:以小型数据库管理系统为后台数据库,该前台操作与数据库分离,也能够实现多层应用系统。系统对硬件的要求居中,特别适合在网络环境下使用,操作方便。但系统得实现最复杂,成本最高,工期也较长。 二:软件需求分析 1.软件系统需求基本描述: 实验室设备管理系统是现代企业资源管理中的一个重要内容,也是资源开发利用的基础性工作。实验室设备在信息化之前,在用户系统管理、设备维修管理、设备的增删改查管理等方面存在诸多不利于管理的地方,不适应现代的企业管理形势和资源的开发利用。 2.软件系统数据流图(由加工、数据流、文件、源点和终点四种元素组成): 1)顶层数据流图 2)二层流程图 3)总数据流图 实验二结构相关 一、实验目的: 通过本实验,加深对结构相关的理解,了解结构相关对CPU性能的影响。 二、实验内容: 1. 用WinDLX模拟器运行程序structure_d.s 。 2. 通过模拟,找出存在结构相关的指令对以及导致结构相关的部件。 3. 记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行 周期数的百分比。 4. 论述结构相关对CPU性能的影响,讨论解决结构相关的方法。 三、实验程序structure_d.s LHI R2, (A>>16)&0xFFFF 数据相关 ADDUI R2, R2, A&0xFFFF LHI R3, (B>>16)&0xFFFF ADDUI R3, R3, B&0xFFFF ADDU R4, R0, R3 loop: LD F0, 0(R2) LD F4, 0(R3) ADDD F0, F0, F4 ;浮点运算,两个周期,结构相关 ADDD F2, F0, F2 ; <- A stall is found (an example of how to answer your questions) ADDI R2, R2, #8 ADDI R3, R3, #8 SUB R5, R4, R2 BNEZ R5, loop ;条件跳转 TRAP #0 ;; Exit <- this is a comment !! A: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 B: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 四、实验过程 打开软件,load structure_d.s文件,进行单步运行。经过分析,此程序一 次循环中共有五次结构相关。(R-stall 数据相关Stall- 结构相关) 1)第一个结构相关:addd f2,,f0,f2 由于前面的数据相关,导致上一条指令addd f0,f0,f4暂停在ID阶段,所以下一条指令addd f2,,f0,f2发生结构相关,导致相关的部件:译码部件。 2)第二个结构相关:ADDI R2, R2, #8,与第一个结构相关类似。由于数据相关, 上一条指令暂停在ID阶段,所以导致下一条指令发生结构相关。 实验指导书 实验一 1、实验项目:软件体系结构设计(一) 某系统C/S风格客户端软件体系结构设计 2、实验目的:熟悉C/S风格的工作机制 3、实验内容:针对某个应用系统,选用C/S风格作为这个系统的软件体系结构 风格。熟悉C/S风格的工作机制,对所考察的系统进行C/S风格客户端软件体系结构设计。(针对不同的特定应用系统具体表述) 实验二 1、实验项目:软件体系结构设计(二) 某系统C/S风格服务器软件体系结构设计 2、实验目的:熟悉C/S风格的工作机制 3、实验内容:针对某个应用系统,选用C/S风格作为这个系统的软件体系结构 风格。熟悉C/S风格的工作机制,对所考察的系统进行C/S风格服务器软件体系结构设计。(针对不同的特定应用系统具体表述) 实验三 1、实验项目:UML建模 某系统UML建模 2、实验目的:深入理解UML建模的思想,熟悉UML建模方法 3、实验内容:作为实际应用前的一种演练,深入理解UML建模的思想,熟悉 UML建模方法,锻炼和培养分析问题、解决问题的能力。针对某个选定的应用系统,对其进行用例建模、对象类建模和状态图建模。 实验四 1、实验项目:某系统详细设计 2、实验目的:细化前期设计的有关结果,做出软件的详细规格说明 3、实验内容:详细设计(也叫过程设计)是软件设计的具体模块设计阶段,是 在作为软件开发前期设计的体系结构设计和总体设计的基础上进行的。目的是要细化前期设计的有关结果,做出软件的详细规格说明。要求具体地设计目标系统给个模块的实现过程。 实验五 1、实验项目:系统集成 2、实验目的:系统集成与总结 3、实验内容:综合考察前八次实验的内容,通盘考虑软件设计的整个过程,深 入理解软件体系结构的构建过程 软件工程导论实验报告 一、实验题目: 学生成绩管理系统、图书借阅管理系统、工资管理系统、网络订餐系统、招聘考试成绩管理系统 二、实验目标 通过独立完成项目开发,加深对软件开发分析过程的流程和方法的理解,建立软件工程的思想,同时,明确软件开发的成本和时间管理的相关概念。 实验一 实验要求: ①.在实验题目列出的几个系统中选择一个作为自己要开发的软件系统,要求该系统有明确的功能需求,并建立系统的分析模型。 ②.对系统进行需求分析,掌握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)系统管理员可以对借阅者进行学生管理(如:查询、删除、修改借阅者信息或借阅者类别 本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:CASE工具PowerDesigner的使用 实验地点: 致远楼B501 专业班级: 指导教师: 2013年10月22日 2、转换物理模型,学生宿舍管理的PDM如下图: 本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:搭建Visual Studio开发环境,设计 Windows控制台应用程序 实验地点:致远楼B303 指导教师:崔秀娟 2013年9月28日 namespace Test2__02 { class Program { static void Main(string[] args) { int m=0; int n; long sum=0; Console.WriteLine("请输入n的值:"); n = int.Parse(Console.ReadLine()); for (int i = 1; i <= n; i++) { m += i; sum += m; } Console.WriteLine("sum = {0}",sum); Console.WriteLine("请输出sum的值:{0}", sum); } } } (方法二) namespace Test2__02 { class Program { static void Main(string[] args) { int i, j; int n; long sum=0; Console.WriteLine("请输入n的值:"); n = int.Parse(Console.ReadLine()); for (i = 1; i <= n; i++) for (j = 1; j <= i; j++) sum += j; Console.WriteLine("sum = {0}",sum); Console.WriteLine("请输出sum的值:{0}", sum); } } 实验一基本实验----by 王琳PB07210432 1. 实验目的: 1)熟悉计算机流水线基本概念 2)了解DLX基本流水线的各段的功能 3)了解各种不同指令在流水线中的实际流动情况 4)对流水线做性能分析 5)了解影响流水线效率的因素——数据相关、结构相关、控制相关,了解相关的种类 6)了解解决数据相关的方法 2. 实验平台:WinDLX仿真器 WinDLX简介: ●是一个图形化、交互式的DLX流水线仿真器。 ●可以装入DLX汇编语言程序,然后单步,设断点或是连续执行该程序. ●CPU的寄存器,流水线,I/O和存储器都可以用图形表示出来 ●提供了对流水线操作的统计功能. ●可以装载文件名为*.s的文件. ●要求的硬件平台是IBM-PC兼容机. ●WinDLX是一个Windows应用程序,运行DOS3.3以上和Windows3.0以上的操作系统. ●WinDLX软件包中带有说明文件及教程,可以供使用者进一步了解仿真器的使用方法和 DLX处理器的原理.大家再进行实验前应该仔细阅读这些文档. 3. 实验内容: 1)在仿真器上分别运行单条指令:Load指令、Store指令、分支指令、寄存器ALU指令、立即数ALU指令,记录它们在流水线中的执行情况 ●Lw: 观察此流水线时空图,可以发现:转移指令引起的延迟仅为1 clocks,另2 stalls 是trap指令引起的,这个执行结果似与不采用forwarding技术的前提相违,只能理解为对于无条件的转移指令,新的PC值在EX阶段即已被写入。 ●Sw: ●Beqz: 由此图可见,对于分支指令,总是用 not-taken的策略来处理,并且也认为新的 PC值也在EX阶段即已被写入,且cond 条件也在EX段被算出(这显然是一个极 不合理的假设,究竟为何分支指令的延迟 为1 stall有待进一步探究) ●寄存器ALU指令 ●立即数ALU指令 2)仿真器运行一段无相关的程序,记录它的执行情况,计算流水线的加速比、吞吐率与效率。下面是一段不相关的程序,一共6条指令 ADDI R5, R5, 1 SUBI R4, R4, 1 AND R3, R3, R3 XOR R7, R7, R7 ADDI R8, R8, 1 ADDI R9, R9, 1 在WinDLX中执行的结果如下: 信息工程学院软件工程实验报告 专业: 班级: 学号: 姓名: 指导老师: 实验一:软件开发的过程计划 实验课时:2课时 一、实验目的 项目计划的目的是为项目的研发和管理工作制定合理的行动纲领,以便所有相关人员按照计划有条不紊地开展工作。 ⑴估计项目的总体规模、工作量和成本。 ⑵制定项目计划,重点放在产品生命周期中的主要关键任务。 ⑶制定项目时间表和预算。 二、实验环境 1.硬件环境 P4以上的个人计算机环境,要求内存不少于512MB,硬盘不小于20G.。 2.软件环境 操作系统:Windows XP 数据库:Sql Server 2000以上或Access 2003以上 3.通用工具软件 通用绘图工具:MicroSoft Visio 2003以上 文本编辑工具:MicroSoft Word 2003以上 4.CASE工具 UML建模工具:Rational Rose 2000 三、实验要求、实验内容 1、实验要求: 在进行实验之前,必须掌握软件开发过程的一些基础知识,准备参考资料和阅读相关的过程模型的文档。 2、实验内容 熟悉RUP(Rational Unified Process)软件开发统一过程的思想,RUP(Rational Unified Process)是由Rational公司(现已是IBM公司的一部分)提出的过程模型,它软件工程史上最完整、最成熟、最优秀的过程模型之一。 学习软件开发的组织和管理,将项目开发各阶段的任务明确,掌握各阶段的里程碑,并熟悉相应的工具。 四、思考题 1、项目开发首先要做的事是什么? 答:进行需求分析和定义,了解客户或用户的需求,然后再进行后续。 2、你认为该软件应具备的最重要的特性是什么。 答:安全性、实用性、灵活性。 3、你认为怎样分工是最合理的? 答:该项目已经采取项目经理制,但是在具体开发过程中,情况也许会比预计的复杂,因此,在了解了各组员的工作风格的情况下,根据性格类型进行工作分配,比如:外向而且善于交流的,可以给他安排和客户交流沟通,让客户随时了解我们 的工作情况,并且反应客户的需求改变;为了让项目更好的组织和管理,可以采取 主程序员负责制;这样,在项目经理的带领下,内部安排主程序员和副程序员,工 作员有问题的话,内部自己解决,只要按时汇报工作就可以了。 五、实验内容: 项目背景 项目名称:银行计算机储蓄系统 随着社会经济的发展,XX银行的业务不断增长,传统的依靠手工的存取款业务办理方式已经不能满足不断增长的业务需求。其一,业务需求的增加需要消耗大量人力物力资源;其二,业务复杂化导致人工处理方式出错率增加,从而引起储户不满。一方面可以减轻银行业务员的工作量,另一方面可以减少工作的出错率,从而提高工作效率。现在计算机网络的告诉发现使越来越多的人更喜欢在网购物、在家存款取款。在这样的背景下,很明显现在的银行储蓄系统已经不能满足人们越益增长的需求,急切需要建立一个新的、高效的、方便的、互联的计算机储蓄系统。为解决此问题,拟为其开发计算机储蓄系统。 项目进度: 项目在项目经理的制度下,在整个开发过程中,树立“里程碑”,而且严格按照计划进行,各阶段任务必须完成,现把任务进度历程绘制如下: 1.1 实验一结构化需求分析 一.实验类型 图书馆管理系统 假定校图书馆需要你设计一个图书馆管理系统,要求包括以下功能: ●图书管理员可以管理馆藏图书,包括每本图书的藏书编号、书名、编著者、 ISBN号、出版社、出版时间、入馆时间、馆藏数量(如果馆藏数量为1,则标明为孤本图书)、在馆数量、学科类别等(或其它你认为有用的信息); ●管理员可以查询、统计所有图书、每一类图书或每一本书的借阅记录; ●图书管理员可以管理所有读者的信息,包括读者类型(学生、教师、社会人 士)、姓名、图书证编号、办证时间、证件状态(正常、挂失、冻结)等信息; ●图书管理员可以查询和统计所有读者、每一类读者或每一个读者的借阅记录; ●读者可以通过本系统查询馆藏图书; ●读者可以通过本系统借阅读书。但对于孤本图书或在馆数量为1的图书则不 准外借; ●管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年 不归还图书的读者冻结其图书证; ●读者可以通地本系统归还图书。如果图书超期,则自动计算罚款金额。二.实验目的 1.掌握数据流的分析技术 2.掌握软件需求分析的过程和方法。 3.熟悉项目开发计划和需求规格说明书的制定方法。 三.实验内容和要求 1.用结构化数据流分析技术进行软件系统需求分析,得出系统的数据流图和数据字典。 2.正确运用图表工具进行表示。 3.按规范正确编写软件文档。 四.实验步骤 1.理解所承担项目的业务流程和业务内容。 本软件项目是面向中小型学校、单位机构对于图书管理的基于服务的一款便捷式软件。能满足一系列常用图书管理的功能模块,提供简介、准确的操作性,可以很大程度减少人为因素带来的数据错误,统计错误,系统逻辑错误。并且规模小,很容易进行推广。 ●本项目的参与对象有图书管理员及读者。 ●对于读者,能通过该软件浏览馆藏的所有图书。读者在图书馆找到自己喜欢 的书后,能自行通过该软件操作完成借阅操作。若读者是第一次借书,必须通过图书管理员进行添加读者记录,登记读者信息。读者在登陆后方能完成借阅操作,对于孤本图书(即图书馆中馆藏只有一本的图书)则拒绝进行借阅操作。在规定期限内,读者可以通过该软件完成还书操作,对于超期的图书,应将扣除一定罚款金额,对于超期一年不归还图书的读者冻结其图书证。 并且读者能修改个人信息。 ●对于图书管理员,能管理自己和比自己低一级管理权限的管理员。一级管理 员能完成维护管理员的基本信息和二级管理员的一切操作。二级管理员则能维护自己的信息和添加读者、添加图书的功能。管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年不归还图书的读者冻结其图书证; 2.按照系统的功能及性能要求,系统的作业范围等,确定软件系统的开发环境(操作系统、开发工具、程序设计语言等)。 根据软件编程经验,本系统将采用面向对象的设计方法,使用Eclipse开发工具,java窗体应用程序,操作系统使用Win8。 3.绘制数据流图、功能分析图等。 计算机体系结构课程设计 学院:信息科学与工程学院 专业班级: 指导老师: 学号: 姓名: 目录 实验1 对指令操作码进行霍夫曼编码 (3) 一、实验目的 (3) 二、实验内容 (3) 三、设计思路 (4) 四、关键代码 (4) 五、实验截图 (5) 六、源代码 (5) 实验2 使用LRU 方法更新Cache (8) 一、实验目的 (8) 二、实验内容 (8) 三、设计思路 (9) 四、程序截图 (9) 五、实验代码 (9) 实验总结 (16) 参考文献 (16) 实验1 对指令操作码进行霍夫曼编码一、实验目的 了解和掌握指令编码的基本要求和基本原理 二、实验内容 1. 使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。与扩展操作码和等长编码进行比较。 2. 问题描述以及问题分析 举例说明此问题,例如: 下表所示: 对此组指令进行 HUFFMAN 编码正如下图所示: 最后得到的HUFFMAN 编码如下表所示: 最短编码长度为: H=0.45*1+0.30*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95. 要对指令的操作码进行 HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN 树再进行 HUFFAM 编码。此过程的难点构造 HUFFMAN 树,进行 HUFFAM 编 码只要对你所生成的 HUFFMAN 树进行中序遍历即可完成编码工作。 三、设计思路 观察上图,不难看出构造 HUFFMAN 树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。3、在对链表进行排序,链表是否只有一个节点,是则 HUFFAN 树构造完毕,否则继续做 2 的操作。为此设计一个工作链表(链表的元素时类,此类的功能相当结构。)、HUFFMAN 树节点、HUFFMAN 编码表节点。 四、关键代码 哈夫曼树重点在于如何排列权值大小不同的结点的顺序 private int leafNum; //叶子结点个数 private HaffmanNode[] hnodes; //哈夫曼树的结点数组 public HaffManCode(double[] weight) //构造指定权值集合的哈夫曼树 { int n = weight.length; //n个叶子结点 this.leafNum = n; this.hnodes = new HaffmanNode[2*n-1]; //n个叶子结点的哈夫曼树共有2n-1个结点 for(int i=0; i 实验题目实验一:描述用户界面 实验地点502 实验日期3-24 机器号27 一、实验目的 学会写自己的第一个Android程序,从最简单的从模拟器上输出“Hello,world!”开始。 二、实验内容 1,先自己创建一个项目。 2.此时在窗口右边有一个“Activities”的项目,右击部署到模拟器上 三、实验步骤及结果 1,helloActivity.JA V A package net.lightwinner.app; import android.app.Activity; import android.os.Bundle; package net.lightwinner.app; import android.app.Activity; import android.os.Bundle; package net.lightwinner.app; package net.lightwinner.app; import android.app.Activity; package net.lightwinner.app; import android.app.Activity; import android.os.Bundle; public class helloActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/b3702061.html,yout.main); } } 2.MAIN.JA V A
|