综合实训报告测试版

更新时间:2023-05-25 04:07:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

综合实训报告写作框架

一、综合实训报告写作框架

正文

第一章 实训的目的、要求 1、基本信息

●实训时间(1—8周)共计学时 实训指导教师:王现君 实训地点:软件学院实训中心 实训题目:部门相册管理 2、.NET平台开发综合实训 ●实训目的 1、总体目标

通过本门课程的学习,使学生具有较强的团队意识和协作精神,具有明确的职业目标,.NET综合实训是软件技术专业的核心专业课程。采用东软.NET综合实训平台一体化教学,即:实现理论教学与实践教学相互融合,边听边学、边学边练,寓教于学、寓教与做,同时将素质教育融于整个人才培养活动中,重点培养学生的综合职业素质和学生的操作能力与技术服务能力。

●实训要求

掌握项目开发流程,进行需求分析,画出需求分析图示使学生了解系统概要设计的格式内容和撰写方法掌握数据库设计的一般方法,设计系统数据库使学生掌握系统登录界面及其它界面的设计方法根据系统设计进行各部分代码的实现(本阶段与UI设计同步进行)

●主要实训软件 1)东软实训平台

2) 操作系统:Windows 2000,XP;Windows vaster/7 3) 平台:.NET FrameWork3.0,Visual Studio 2005 4) 数据库:SQL Server 2005

第二章 实训内容 1、需求分析

完成时间:2011-2-26 主要内容:

1 系统特性概述

2需求规格

2.1 登录 用例概述

描述了用户登录的完整过程。

基本流程

1. 2. 3. 4.

打开系统登录页 输入用户名和密码 点击"登录"按钮

登录成功,显示"个人首页"

备选流程

1、(基3)用户未找到,提示用户不存在 2、(基3)用户密码不匹配,提示密码错误

3、(基3)离职用户登录,提示"用户已经离职,不能登录"

4、(基3)用户登录前访问某受限页面,登录成功后直接转向受限页面 5、(备4)登录前受限页面,登录后用户权限不足,转向"权限不足提示"页面

2.2 退出

用例概述

描述了用户退出系统的完整过程。

基本流程

1、点击"退出"按钮

2、系统进行退出处理,并转到登录页面

备选流程

2.3修改密码

用例概述

描述了用户修改密码的完整过程。

基本流程

1. 2. 3. 4.

1、选择修改密码功能

2、输入原密码、新密码和确认密码 3、点击"确定"按钮

4、修改密码成功,系统显示成功页面

备选流程

5.

(基3)用户输入的原密码不正确,提示"原密码不正确,修改失败"

6. (基3)用户输入的新密码和确认密码不一致,提示"两次输入的新密码不一致"

2.4模糊查询

用例概述

用户可以根据时间 名称 关键字等进行查询。

基本流程

1、点击时间 2、进行查询

3、点击名称 关键字等 4、进行查询

5、点击删除或修改照片备注 6、点击完成

备选流程 2.5相册管理

用例概述

用户可以新建相册,删除相册,上传照片包括对相片的增删改查,并对照片添加备注。

基本流程

1、点击相册管理

备选流程 2.5.1新建相册 用例概述

用户可以新建相册

基本流程

1、新建相册 2、输入相册名称3、点击新建

备选流程 2.5.2删除相册 用例概述

用户可以删除相册

基本流程

1、删除相册 2、选择相册 3、点击“删除”

备选流程 2.5.3上传照片 用例概述

用户可以上传照片

基本流程

2、点击上传相片 3、选择相册 4、选择上传的照片 5、添加备注(可空)

备选流程

2、系统设计 完成时间:2011-3-05 主要内容:

1系统公用代码设计

1.1页面设置

1.1.1功能描述

对页面及操作进行代码设计。

1.1.2方法描述

using Edu.Sovo.OACF; using System.Text;

public partial class result_report : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e) {

if (Session[Constants.EXECUTE_RESULT] != null) {

//有返回结果

OperationResult or = (OperationResult)Session[Constants.EXECUTE_RESULT];

if (or.IsSuccess) {

//如果是成功情况 //增加自动返回地址

HtmlMeta meta = new HtmlMeta(); meta.HttpEquiv = "refresh";

meta.Content = "4;url=" + Request.ApplicationPath + or.UrlValue[0]; this.Header.Controls.Add(meta);

//设置页面样式

tdTitle.Style.Add(HtmlTextWriterStyle.Color, "red");

tdTitle.Style.Add(HtmlTextWriterStyle.TextAlign, "center"); tdTitle.InnerText = "操作成功";

//设置操作说明

tdMsg.Style.Add(HtmlTextWriterStyle.Padding, "10px");

tdMsg.Style.Add(HtmlTextWriterStyle.BackgroundColor, "#FFFFCC"); tdMsg.Style.Add(HtmlTextWriterStyle.BorderWidth, "1px"); tdMsg.Style.Add(HtmlTextWriterStyle.BorderStyle, "solid"); tdMsg.Style.Add(HtmlTextWriterStyle.BorderColor, "black"); StringBuilder sb = new StringBuilder(); foreach (String msg in or.ResultMsg) {

sb.Append("<li>" + msg + "</li>"); }

ulMsg.InnerHtml = sb.ToString();

//设置返回地址

StringBuilder sb1 = new StringBuilder(); for(int i = 0; i< or.UrlName.Count;i++) {

String value = or.UrlValue[i];

String htmlStr = "<a href='" +Request.ApplicationPath + value + "'>" + or.UrlName[i] + "</a> | ";

sb1.Append(htmlStr); }

//sb1.Remove(sb.Length-1, 1); //去掉最后的|

divReturnURL.InnerHtml = sb1.ToString().Substring(0,sb1.Length - 2);

}

} }。

3、系统实施 完成时间:2011-4-03 主要内容:

1)数据库的设计与实现

2)数据层的设计与应用(详述企业库与OACF) 1.企业库 简介

有Microsoft设计的协助开发人员处理企业开发常见问题的应用程序块的集合

企业库提供的程序块

·缓存应用程序块(Caching)允许开发人员在其他应用程序中集成本地缓存.

·加密应用程序块(Cryptography)允许开发人员在其应用程序中包含机密和哈希功能

·数据访问应用程序块(Data Access)允许开发人员在其应用程序中集成标准的数据库功能

·异常处理应用程序块(Exception Handling)允许开发人员和决策人员针对发生在企业库应用程序体系结构层的异常处理创建一致的策略

·日志和规范应用程序块(Logging Handling)允许开发人员在其应用程序中集成标准的日志和规范功能。

·安全应用程序块(Security Application)允许开发人员在其应用程序中集成安全功能。应用程序可以在多种情况下使用应用程序块,例如,根据数据库验证和授权用户、检索角色和配置文件信息,以及缓存用户配置文件信息等。

使用步骤

·使用Data Access Application Block(DAAB)访问数据库的一般步骤 (1).创建连接字符串

(2).添加Application Block的引用 (3).添加命名空间 (4).创建Database对象

(5).创建DbCommand对象 (6).执行数据库操作 (7).处理结果 2.OACF

OACF是对企业库进行一个类的封装以便于开发人员的应用 3)逻辑层的设计与实现 1.相册管理类

using Microsoft.Practices.EnterpriseLibrary.Data;

using mon.Configuration; using System.Data; using Edu.Sovo.OACF;

namespace Services.AlbumBll {

public class AlbumService {

public AlbumService() { }

private static String SQL_Get_IsAlbumName = @"select * from PHOTO_ALBUMS where ALBUMNAME=@ALBUMNAME";

public static bool albumNameExist(string albumName) {

Dictionary<String, String> nameValueParams = new Dictionary<string, string>(); nameValueParams.Add("ALBUMNAME", albumName);

bool result = DataAccess.IsExisted(SQL_Get_IsAlbumName, nameValueParams); return result; }

private static String SQL_AlbumName = @"select ALBUMID from PHOTO_ALBUMS where ALBUMNAME=@ALBUMNAME";

public static bool ifCanEdit(string AlbumID, string albumName) {

string StrAlbumeID_Old = "";

object ObjAlbumeID_Old = DataAccess.ExecuteScalar(SQL_AlbumName, "ALBUMNAME", albumName);

if (ObjAlbumeID_Old != null) {

StrAlbumeID_Old = ObjAlbumeID_Old.ToString();

if (StrAlbumeID_Old == AlbumID) {

return true; } else {

return false; } } else {

return false; }

}

public static DataSet getAlbums() {

string getalbumlist = "select distinct al.ALBUMNAME,al.ALBUMID,

al.BUILDDATE,count(ph.PHOTOID)AS PHOTONUM from PHOTO_ALBUMS al LEFT outer join PHOTO_PHOTOS ph on al.ALBUMID=ph.ALBUMID group by al.ALBUMID,al.ALBUMNAME, al.BUILDDATE order by al.BUILDDATE desc";

DataSet ds = DataAccess.ExecuteToDataSet(getalbumlist); return ds; }

private static String SQL_DEL_BY_ALBUMID = @"delete from PHOTO_ALBUMS where ALBUMID=@ALBUMID";

public static void deleteAlbum(long albumId) {

bool boresult = DataAccess.ExecuteNonQuery(SQL_DEL_BY_ALBUMID, "ALBUMID", Convert.ToString(albumId)); }

private static String SQL_INSERT_ALBUM = @"insert into

PHOTO_ALBUMS(ALBUMNAME,DESCRIPTION,BUILDDATE) values (@ALBUMNAME,@DESCRIPTION,@BUILDDATE)"; public static bool insertAlbum(Dictionary<string, string> AlbumInfo) {

bool result = DataAccess.ExecuteNonQuery(SQL_INSERT_ALBUM, AlbumInfo, CommandType.Text); return result; }

private static String SQL_UPDA_BY_ALBUMID = @"update PHOTO_ALBUMS set

ALBUMNAME=@ALBUMNAME, DESCRIPTION=@DESCRIPTION where ALBUMID=@ALBUMID"; public static bool updateAlbum(Dictionary<string, string> NewAlbumInfo) {

return DataAccess.ExecuteNonQuery(SQL_UPDA_BY_ALBUMID, NewAlbumInfo); }

private static String SQL_ALBUM_BY_ALBUMID = @"select distinct ALBUMNAME, DESCRIPTION from PHOTO_ALBUMS where ALBUMID=@ALBUMID order by ALBUMNAME";

public static Dictionary<String, String> getAlbum(string albumId) {

return DataAccess.ExecuteToSet(SQL_ALBUM_BY_ALBUMID, "ALBUMID", albumId); } } }

2.照片管理类

using System.Data; using Edu.Sovo.OACF; namespace Services.PhotoBll {

public class PhotoService {

public static DataSet searchPhoto(string PHOTONAME, string ALBUMNAME, string DESCRIPTION, string ALBUMID, string StartTime, string EndTime) {

string SQL_SearchPhoto = "select distinct ph.PHOTOID,ph.PHOTONAME,ph.DESCRIPTION, ph.SCREENDATE from PHOTO_PHOTOS ph inner join PHOTO_ALBUMS al on al.ALBUMID=ph.ALBUMID"; QueryHelper qh = new QueryHelper(SQL_SearchPhoto, "order by ph.SCREENDATE desc"); qh.setParam(QueryHelper.IsNotBlank(PHOTONAME), " PHOTONAME like '%'+@PHOTONAME+'%'", "PHOTONAME", PHOTONAME);

qh.setParam(QueryHelper.IsNotBlank(ALBUMNAME), "al.ALBUMNAME=@ALBUMNAME", "ALBUMNAME", ALBUMNAME);

qh.setParam(QueryHelper.IsNotBlank(DESCRIPTION), "ph.DESCRIPTION=@DESCRIPTION", "DESCRIPTION", DESCRIPTION);

qh.setParam(QueryHelper.IsNotBlank(ALBUMID), "al.ALBUMID=@ALBUMID", "ALBUMID", ALBUMID);

qh.setParam(QueryHelper.IsNotBlank(StartTime),

"datediff(day,Convert(DateTime,@StartTime),ph.SCREENDATE)>=0", "StartTime", StartTime); qh.setParam(QueryHelper.IsNotBlank(EndTime),

"datediff(day,Convert(DateTime,@EndTime),ph.SCREENDATE)<=0", "EndTime", EndTime); return DataAccess.ExecuteToDataSet(qh.getQuerySql(), qh.getParams()); }=

public static DataSet getStatByMonth() {

string PhotoStaticStr = "select

convert(varchar(4),datepart(yy,SCREENDATE))+'-'+convert(varchar(4),datepart(mm,SCREENDATE))a

s TIME,count(*) as COUNT from PHOTO_PHOTOS group by

convert(varchar(4),datepart(yy,SCREENDATE)),convert(varchar(4),datepart(mm,SCREENDATE)) order by TIME desc";

DataSet ds = DataAccess.ExecuteToDataSet(PhotoStaticStr); return ds; }

public static DataSet getAllAlbums() {

string PhotoStaticStr = "select albumname from PHOTO_ALBUMS order by BUILDDATE desc"; DataSet ds = DataAccess.ExecuteToDataSet(PhotoStaticStr); return ds; }

public static bool deletePhoto(string photoId) {

string deleteStr = "delete from PHOTO_PHOTOS where PHOTOID=" + photoId; TransHelper trans = new TransHelper(); trans.AddCommand(deleteStr, null, null); bool result = trans.Execute(); return result; }

private static String SQL_PHOTO_BY_PHOTOID = @"select distinct PHOTONAME, DESCRIPTION from PHOTO_PHOTOS where PHOTOID=@PHOTOID ";

public static Dictionary<String, String> getphoto(string photoId) {

return DataAccess.ExecuteToSet(SQL_PHOTO_BY_PHOTOID, "PHOTOID", photoId); }

private static string updatephoto = "update PHOTO_PHOTOS set PHOTONAME=@PHOTONAME,DESCRIPTION=@DESCRIPTION where PHOTOID=@PHOTOID"; public static bool updatePhoto(Dictionary<string, string> PhotoInfo) {

bool result = DataAccess.ExecuteNonQuery(updatephoto, PhotoInfo); return result; }

public static string GetAlbumid(string albumname) {

String SQL_ALBUMID_BY_ALBUMNAME = "select ALBUMID from PHOTO_ALBUMS where ALBUMNAME='" + albumname + "'";

object albumid = DataAccess.ExecuteScalar(SQL_ALBUMID_BY_ALBUMNAME);

if (albumid == null) {

return ((string)albumid); }

else {

return albumid.ToString(); }

}

private static String SQL_ALBUM_BY_ALBUMID = @"select

PHOTONAME,SCREENDATE,DESCRIPTION,PHOTOID from PHOTO_PHOTOS where ALBUMID=@albumId order by SCREENDATE desc";

public static DataSet getPhotosByAlbumId(string albumId) {

DataSet ds = DataAccess.ExecuteToDataSet(SQL_ALBUM_BY_ALBUMID, "ALBUMID", albumId);

return ds; }

private static String SQL_GetOther_BY_ALBUMID = @"select ALBUMNAME from PHOTO_ALBUMS where ALBUMID!=@ALBUMID";

public static DataSet getAlbumList(string Albumid) {

DataSet ds = DataAccess.ExecuteToDataSet(SQL_GetOther_BY_ALBUMID, "ALBUMID", Albumid);

return ds; }

private static String SQL_GetALBUMNAME_BY_ALBUMID = @"select ALBUMNAME from PHOTO_ALBUMS where ALBUMID=@ALBUMID";

public static string getAlbumNameByAlbumId(string albumId) {

return (string)DataAccess.ExecuteScalar(SQL_GetALBUMNAME_BY_ALBUMID, "ALBUMID", albumId); }

private static String SQL_ADD_PHOTO = @"insert into

PHOTO_PHOTOS(PHOTONAME,ALBUMID,SCREENDATE,DESCRIPTION,PHOTOTYPE)values(@PHOTONAME,@ALBUMID,@SCREENDATE,@DESCRIPTION,@PHOTOTYPE)select scope_identity()";

public static string addPhoto(Dictionary<string, string> PhotoInfo) {

return DataAccess.ExecuteScalar(SQL_ADD_PHOTO, PhotoInfo).ToString();

}

public static bool deletePhotos(ArrayList photoIds) {

string PHOTOID = "";

for (int i = 0; i < photoIds.Count; i++) {

string PID = (string)photoIds[i]; PHOTOID = PHOTOID + PID + ",";

}

PHOTOID = PHOTOID.Remove(PHOTOID.Length - 1);

string SQL_DEL_PHOTOS = "delete from PHOTO_PHOTOS where PHOTOID in (" + PHOTOID + ")";

bool result = DataAccess.ExecuteNonQuery(SQL_DEL_PHOTOS); return result;

}

public static bool updatePhotosAlbumId(string AlbumName, ArrayList photoIds) {

string TrasALm = "update PHOTO_PHOTOS set ALBUMID=(select ALBUMID from PHOTO_ALBUMS where ALBUMNAME='" + AlbumName + "') where PHOTOID in ("; for (int i = 0; i < photoIds.Count; i++) {

string PID = (string)photoIds[i]; TrasALm = TrasALm + PID + ","; }

TrasALm = TrasALm.Remove(TrasALm.Length - 1); TrasALm = TrasALm + ")";

bool result = DataAccess.ExecuteNonQuery(TrasALm); return result; }

public static string GetPhototype(string photoid) {

String SQL_GET_PHOTOTYPE = @"select PHOTOTYPE from PHOTO_PHOTOS where PHOTOID=" + photoid;

string phototype = (string)DataAccess.ExecuteScalar(SQL_GET_PHOTOTYPE); return phototype; } }

}

3.用户管理类 using System.Data; using Edu.Sovo.OACF;

using System.Data.SqlClient;

namespace erBLL

{

public class UserService {

public UserService() { }

private static String SQL_EMP_BY_LOGINNAME =

@"select USERID,USERNAME,PASSWORD from PHOTO_USERS where USERNAME = @USERNAME"; public static Dictionary<String, String> getUserByLoginName(String username) {

return DataAccess.ExecuteToSet(SQL_EMP_BY_LOGINNAME, "USERNAME", username); }

//修改密码

private static String SQL_UPDATEPSW_BY_USERID = @"update PHOTO_USERS set PASSWORD=@PASSWORD where USERID=@USERID";

public static bool UpdatePsw(Dictionary<string, string> userinfo) {

bool result = DataAccess.ExecuteNonQuery(SQL_UPDATEPSW_BY_USERID, userinfo); return result; } }

}

4)表示层的设计与实现 1.default.css设计

.bartype { color: blue;

background-color: green;

} .errormsg { font-size: 12pt; font-family: @宋体; color:Red; }

.barborder { border-style: solid; border-width: 1px; width: 200px;

vertical-align: middle; }

.TextCss { background-color: #56D7A5; color: #FFFFFF; font-family: Arial; font-size: 12pt;

padding: 2px 3px 2px 3px; font-weight: 100;

} body { background: #ffffff; margin: 15;

scrollbar-face-color: #dee3e7; scrollbar-highlight-color: #ffffff; scrollbar-shadow-color: #dee3e7; scrollbar-3dlight-color: #d1d7dc; scrollbar-arrow-color: #006699; scrollbar-track-color: #efefef; scrollbar-darkshadow-color: #98aab1; }

body, table, th, td, input, select, textarea { font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px; } img, form { margin: 0; padding: 0; border: 0;

} a { font-family: Verdana, Arial, Helvetica, sans-serif; text-decoration: none; }

a:link, a:visited { color: #063685; text-decoration: none;

}

a:hover, a:active

color: #FF5500;

text-decoration: underline;

}

table.default { border: 1px solid #0283c5; border-collapse: collapse; }

table.default td, table.default tr.style1 td { padding: 2 5 2 5; height: 26px;

border: 1px solid #ffffff; }

table.default tr.title td, table.default tr.title th { font-weight: bold; text-align: center; background: #20A8F0; color: #ffffff;

border: 1px solid #ffffff; white-space: nowrap; height: 26px; }

table.default td.item { font-weight: bold; color: #333333; text-align: center; vertical-align: top; padding-top: 4px; }

table.explain { margin-top: 5px; margin-bottom: 5px; }

table.explain td { border: 1px solid #333333; background: #D5EFFE; padding: 8px;

line-height: 120%;

.emptyText { } .btn { } { } .tdnormal { }

.tdselected { }

.navtab td {

height: 22px; padding-left: 5px; padding-right: 5px; border: 1px solid white; border-bottom: 0; background: #E1DEDA; padding-left: 5px; padding-right: 5px;

border-bottom: 1px solid white; padding: 5 5 5 2;

border-right: #002D96 1px solid; padding-right: 5px;

border-top: #002D96 1px solid; padding-left: 5px; font-size: 12px;

filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#FFFFFF, border-left: #002D96 1px solid; cursor: hand; color: black; padding-top: 3px;

border-bottom: #002D96 1px solid; width: 20%; display: block; border-width: 1px thin; border-color: Green;

EndColorStr=#9DBCEA);

color: white; font-size: 12px; text-align: center; border: 1px solid black; padding-left: 8px; padding-right: 8px;

}

a.navbar { text-decoration: none; color: #333333;

}

a.navbar:visited { text-decoration: none; color: #333333; }

a.navbar:active { text-decoration: none; color: #333333; }

a.navbar:hover { text-decoration: underline; color: #333333; } .errorBox { border: 1px solid #ff0000; padding: 5px; background: #FFCCCC; } ul { margin-left: 30px; margin-top: 0; margin-bottom: 0;

}

.selectedPage {

border: 1px solid #999999;

background: #ffffcc;

}

color: #000000; padding: 0 3 0 3;

a.navlink { }

font-family: 宋体; height: 25px; font-weight: normal; letter-spacing: 1px; padding: 4 5 0 5; background: #e0e0e0; border: 2px outset; margin-bottom: 5px;

filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff,

EndColorStr=#20A8F0);

第三章 实训心得体会 1、学到了什么

2、遇到了哪些问题,如何解决的 …. 参考文献

[1] 孙培民.王鸿铭.王喜胜.张麦玲.杨韶华. 应用软件开发技术. 北京;高等教育出版社,2008.12

[2] 北京科海. 程序设计教程. 北京;北京科海电子出版社,2009 [3] 吴教育. SQL Server数据库应用实训教程. 北京;中国铁道出版社,2007.8

[4] 王平. C#程序设计语言任务驱动式教程. 北京;北京航空航天大学出版社, 2008.9

本文来源:https://www.bwwdw.com/article/0qt4.html

Top