软件开发生产
实习报告
信息科学与工程学院
2012 年 05 月 12日
软件开发生产实习报告
1. 实习目的
1.1使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本素质和技术能力要求。
1.2 使学生掌握ASP.net及C#基本编程技术,能够综合运用SQL server数据库及visual studio .NET2008开发环境进行小型项目的开发。
1.3 重点培养学生的团队精神和协作意识,提高其口头和书面的沟通能力。
1.4使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决问题的能力
1.5重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编程习惯。
2. 实习计划
2.1项目成员
a.组长:房微微
b.组员:张婷婷 郭威
2.2任务分工
a.共同任务:用户登录、员工基本信息添加及变更、删除
b.各自任务: 张婷婷-------工程评价及新增
房微微-------公司评价及新增
郭 威-------招聘管理
c.额外任务: 房微微-------在籍者移动信息查询
2.3 时间安排
a.基础学习
4月30——5月6日 在老师的指导下进行基础学习 内容包括用户登录、登录验证、选择项设置、控件使用、页面浏览量统计等技术,为以后的项目设计做基础。
b.项目设计:
5月7日——5月12日 自行设计项目模块
按照小组分工及个人对整体的把握,编辑相应模块。
c.实训答辩:5月13日 对实训结果检测
3. 实习过程
3.1基础学习
3.1.1时间规划
时间为期一周,每天老师每隔2小时会有40分钟的授课时间,通过广播的方式交给我们如何使用控件、如何通过编程实现我们要实现的效果。之后我们要在规定的时间学会授课的方式并制作出相应成品。如果不能按时完成在茶余饭后要自己加班,基础学习阶段相对任务较轻,没有太大压力,加班时间及强度相比于项目制作期要小。
3.1.2教学模式
采用公司环境、广播授课、两天一例会的方式。
a. 工作间
类似于在普通的IT企业使用的工作台,同学们遇到问题方便交流,给人一种积极学习的动力。
b. 广播授课
很喜欢这种授课方式,个人很支持推广这种授课方式。因为传统的教学即使通过多媒体,由于视线不清楚很多同学把握不住细节。即使是上机学习一会看老师的思路,一会遇到问题跟不上老师的思路,或者纯上机的时候同学们更多的是效率低下。
c. 两天一例会制度
由小组成员及老师参与,学生提问,老师回答。及早发现学生在学习上存在的问题,对教学方式的建议以便及时改正提高授课效率及效果。也是实训中感觉一个很好的制度,尤其是又一次专门叫每个组中编程相对比较弱的同学开例会,对学习中存在的问题进行提问,对教学存在的问题提出建议,有利于教学的有效进行。平时的老师授课中也可以及时了解同学的授课的反应,有利于教学整体水平的提高
3.1.3基础学习期代码
基础学习中学到很多,在这里选择其中几项代码说明(主要是自己在项目中没有用到,在学习期间学习到得技术)。由于我在项目中做的为工程评价,没有涉及选择项的知识,在这里较多介绍了选项的使用。
a. 登陆验证
登陆验证用于用户登陆权限
b. 选择项控件使用
控件截图:
选择项主要的使用主要是在属性中设置。
>>1 单项选择 提交按键代码
protected void Button1_Click(object sender, EventArgs e)
{
if (RadioButton1.Checked == false & RadioButton2.Checked == false & RadioButton3.Checked == false & RadioButton4.Checked == false)
Label1.Text = "请输入您的选项";
else
{
if (RadioButton1.Checked == true)
Label1.Text = RadioButton1.Text;
else
{
if (RadioButton2.Checked == true)
Label1.Text = RadioButton2.Text;
else
{
if (RadioButton3.Checked == true)
Label1.Text = RadioButton3.Text;
else
{
if (RadioButton3.Checked == true)
Label1.Text = RadioButton4.Text;
}
}
}
}
}
>>2 Dropdownlist按键代码
protected void Button7_Click(object sender, EventArgs e)
{
Label1.Text = DropDownList1.SelectedValue;
}
>>3 Listbox 页面代码(含按键)
public partial class ListBox : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (ListBox1.SelectedIndex == 0)
ListBox2.SelectionMode = ListSelectionMode.Single;
else
ListBox2.SelectionMode = ListSelectionMode.Multiple;
}
protected void Button7_Click(object sender, EventArgs e)
{
Label1.Text = "";
foreach (ListItem li in ListBox2.Items)
{
if (li.Selected == true)
Label1.Text += li.Text;
}
}
}
>>4 单项列表按键代码
protected void Button1_Click(object sender, EventArgs e)
{
//if (!IsPostBack)
//{
// RadioButtonList1.Items.
//}
Label1.Text = string.Empty;
Label1.Text = RadioButtonList1.SelectedItem.Text;
}
>>5 多项选择提交按键
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = string.Empty;
if (CheckBox1.Checked == true)
Label1.Text += CheckBox1.Text;
if (CheckBox2.Checked == true)
Label1.Text += CheckBox2.Text;
if (CheckBox3.Checked == true)
Label1.Text += CheckBox3.Text;
if (CheckBox4.Checked == true)
Label1.Text += CheckBox4.Text;
if (CheckBox5.Checked == true)
Label1.Text += CheckBox5.Text;
}
>>6 多项列表提交按键
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = string.Empty;
foreach(ListItem li in CheckBoxList1.Items)
{
if (li.Selected == true)
Label1.Text +=li.Text;
}
}
c. 页面刷新次数统计
使用控件
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int cnt;
if (!IsPostBack)
{
TextBox1.Text = "0";
}
else
{
cnt = Convert.ToInt16(TextBox1.Text);
cnt++;
TextBox1.Text = cnt.ToString();
}
}
d.跳转页面代码
Response.Redirect("~/Default2.aspx");
Session["username"] = TextBox1.Text;
Session["password"] = TextBox2.Text;
Label3.Text = Session["username"].ToString();
3.2项目实践
3.2.1时间规划
时间为期一周,3天自己做项目,2天完善项目,1天系统测试,最后一天答辩。老师偶尔真题计提问题进行广播指正,通过广播的方式交给我们改正缺陷,实现我们要实现的效果。有了自己的任务,自己需要完成的模块,如果不能按时完成在茶余饭后要自己加班,相对任务较多,追求个人完美,加班时间及强度相比于学习期要大。
3.2.2项目规划
详见项目介绍
4. 项目介绍
4.1 技术准备
a. C# 编程规范
b. .net七大内置对象
c. ADO.NET与数据库概述
d. ADO.NET类和对象概述
e. ADO.NET基本数据库编程
f. MVC三层架构
以上技术大多是以前没有接触或很少接触,但是可以基于从前的知识较快简单掌握的,比如三层架构,可以讲代码多次利用,利于项目改进,虽然已开始感觉比较烦,其实对整体的改进还是很好的。
4.2 项目实施
4.2.1 功能需求
a.功能设计
工程评价,工程评价新增,公司评价,公司评价新增,招聘管理,在籍移动查询。
b.工程评价:
b1.根据员工查询条件,生成员工信息一览表
b2.对各员工进行“评价”操作
b3.报表打印
c.工程评价新增
c1.新增员工工程评价信息
c2.一览员工工程评价履历信息
d.公司评价
d1.根据条件检索员工的公司评价相关信息
d2.根据检索的结果查看员工的公司评价的明细信息或对员工 进行评价
d3.新增员工的公司评价信息
e.公司评价新增
e1.新建员工公司评价信息
e2.一览员工公司评价履历信息
f.招聘管理
f1.根据条件检索应聘员工的基本信息
f2.为应聘员工设定应聘是否合格
f3.导入招工表
f4.打印报表
g.在籍者移动查询
g1.查询公司人员流动情况
g2.导出在籍者移动信息表
4.2.2 总体设计
4.2.3 详细设计与编码——工程评价
a. 查询 button:
protected void btnQuery_Click(object sender, EventArgs e) { }
//条件查询
DataSet ds = new Emps().GetEvalution(engineer);
//调用business层的Emps类的GetEvalution(engineer)方法查询符合条件的记录
b. 代码添加空白项
protected void selTime_DataBound(object sender, EventArgs e)
{ selTime.Items.Insert(0, "");
selTime.SelectedIndex = 0; }
//给选项添加一个空白项,代码方法
c. 新增linkbutton:
LinkButton lnkAddNew = (LinkButton)e.Row.FindControl("lnkAddNew");
lnkAddNew.Attributes.Add("onclick", "fPopUpPj_E('" + e.Row.Cells[0].Text + "')"); //添加新评价
d. 打印button,当打印表为空时进行提醒
问题描述:
这个问题在答辩时老师提出,这个功能只是下载,并不是打印,与打印还有本质的区别。
protected void lnkPrint_Click(object sender, EventArgs e)
{
if (GridView1.Rows.Count > 0) { Response.Redirect("~/ExportToExcel.aspx?ds=empinfo&template=" + "engineerEvaluate");//调用已有的ExportToExcel.aspx文件,输出查询结果
}
else
ClientScript.RegisterStartupScript(GetType(), null, "<script language=\"javascript\">alert('报表为空');</script>");
}//对报表是否为空的检验
e. 比较评价时间与当前时间,如果大于当前时间则不能评价
if (!IsPostBack)//判断日期不能大于当前日期
{
CompareValidator1.ValueToCompare = DateTime.Now.ToShortDateString();//比较当前日期
}
f. 评价人姓名带入,不可以匿名或代替他人评价
问题描述:
在工程评价中,评价人是否可以自己随便输入,即评价人是否要带回登录人的Name。带回登录人则可以避免他人恶意评价,但也同样给评价人不敢按照真实意愿来评价。
方案:
1、可以不带回登录人姓名,给评价人自由评价的权力
2、带回登录人姓名,避免恶意评价。
我在做最后的项目的时候选择将登陆姓名直接带入,设为只读,代码如下:
txtEmpName.Text = Convert.ToString(Session["userCd"]);
//将用户名带入作为评价人,将用户名带入评价人,且不可更改。允许用户评价,并将评价信息由gridview显示
txtEmpName.Attributes.Add("readonly", "readonly");//设为只读
g.查询实例_评价历史信息是否在评价前可见:
问题描述:
在工程评价中,只有在评价后才可以看到其他人对该员工的评价,这样的结果好处是不受其他人意见的参考,不好的地方无法单纯的看别人对此人多的评价。
方案:
1、可以继续这样,不受他人评价的干扰
2、在Page_Load中添加一次查询代码,将要评价的员工编号传入,在数据库中查出历史评价信息,由gridview显示。
在执行查询后,在查询一次,这样就可以看到他人的评价,也可以即时刷新自己的评价。
我在做项目的时候开始时评价后才可以看到其他人的评价信息,之后添加了代码,将功能改为评价前也可以看到其他人的评价。
上图为功能是评价前看到其他人评价的截图
上图为评价钱不可以看到其他人的评价信息截图。
protected void Page_Load(object sender, EventArgs e)
{
Evaluation evaluation = new Evaluation();
ContractRecord con = new ContractRecord();
Emps emps = new Emps();
evaluation.Emp_cd = Request.QueryString["emp_cd"];
DataSet ds = new DataSet();
ds = new Emps().GetEvaluationByEmp_cd(Request.QueryString["emp_cd"]);
GridView1.DataSource = ds;
GridView1.DataKeyNames = new string[] { "evaluation_date" };
GridView1.DataBind();
//获取评价人的编号信号,从数据库中获取对应的评价人、评价时间、备注信息,Gridview列表与数据库绑定,将数据库信息在列表中显示。
h.数据库即时刷新,方便用户使用
//刷新
DataSet ds = new DataSet();
ds = new Emps().GetEvaluationByEmp_cd(Request.QueryString["emp_cd"]);
i. 多余页面弹出问题
问题描述
在书写网页时,经常会弹出一些不需要的页面,多为空白页,可以通过在源文件中加入<base target=“_self”/>,来解决。
知识链接——Base (基链接)
插入网页基链接属性
Base href=“http://www.A.net/” target=“_blank”>
网页上的所有相对路径在链接时都将在前面加上“http://www.a.com/”。其中target=“_blank”是链接文件在新的窗口中打开,你可以做其他设置。
将“_blank”改为“_parent”是链接文件将在当前窗口的父级窗口中打开;改为“_self”链接文件在当前窗口(帧)中打开;改为“_top”链接文件全屏显示。
4.2.4 测试
测试Excel有详细介绍
4.总结与建议
4.1总结
4.1.1 三层架构
代码高效利用,将模块化。
4.1.2 利用各种资源
不会的可以自己上网搜、看书、问同学,问老师。在实训中感谢周围的同学,他们很主动的帮助相对较弱的同学。让我们在学习的过程中体会到互助的快乐。
4.1.3 多练多总结
实训只要有时间,就喜欢用文字记录我们走过的点点滴滴,包括今天又学习了什么控件。什么功能可以不写代码用属性实现,什么函数又包含什么内容,很有意义的总结。现在在后他看那10篇日记,20几页的功能总结,很享受的感觉。
4.2 建议
4.2.1 式样书
有部分错误,如果每次实训都有的话,对实训效果有影响。可以让每届实训学生将式样书改善。
4.2.2 例会制度
感觉一个很好的制度,由小组成员及老师参与,学生提问,老师回答。及早发现学生在学习上存在的问题,对教学方式的建议以便及时改正提高授课效率及效果。尤其是又一次专门叫每个组中编程相对比较弱的同学开例会,对学习中存在的问题进行提问,对教学存在的问题提出建议,有利于教学的有效进行。
在我们自己做项目的时候我认为例会制度也是很好的选择,可以及早的知道同学们在自己锻炼的过程中有哪些地方欠缺。平时的老师授课中也可以及时了解同学的授课的反应,有利于教学整体水平的提高。
4.2.3 实训时间
可以提前,比如大三上,这样可以让同学们及早接触这样的氛围,有利于同学们学习态度的改善及能力的提高。
4.2.4 广播授课
这种广播的方式克服了传统课堂教学、多媒体教学的缺点,实训之后我就一直在想,我们的机房为什么不添加这样的设备来支持广播教学来提高课堂效率?广播教学可以自行视频录制,效果很好,方便同学复习,难道是成本过高的原因吗。
4.2.5 经验分享
每期的同学都会有这样或那样的总结经验,希望有平台可以分享。比如广播授课的时候一开始我们只是用笔记录需要的内容,往往把老师上课的重点给放过去了,影响挺快效果。后来我们发现有截屏软件,可以全程把老师上课的内容录制下来(屏幕分辨率高的情况下更好)。还有好多小小的分享,比如对实训的态度,我们很期待,也很认真,我们对知识渴求,对功能的实现向往。因为一个专业我们一起订餐、一起吃饭、一起加班、一起晚归,让实训更加值得留念。
一直想,如果实训时间提前,我们会成长更多,我们会有机会抓住更多机遇,会有更多的时间与实践让自己成长。