一、实训概要
1、实训内容
在将近一个月的时间内,本人和项目组其他成员一起,完成了一个基于微软.net技术的网络办公自动化系统(简称oa系统),该系统主要包括以下五个模块:考勤管理;短信管理;邮件管理;联系人管理和客户管理。
2、担任角色
本人在团队中担任页面美工和程序员的角色,主要制作了母板页和短信管理模块的全部页面,并且制作了与之相关的类图、用例图和数据库表,成功完成了短信模块的编程开发工作。
3、实训结果
通过本次实训,主要培养了自己的规范研发能力,学习了企业项目开发的整个过程和团队项目开发经验,并且加强了.net新技术的学习,熟练掌握了常用的软件开发工具(如visual
studio 2005) 的操作规程。
二、技术收获
1、系统企业架构
在研发的开始阶段,先学习了petshop 4.0的系统架构,系统掌握了规范开发中的架构体系,为开发顺利进行打下基础。该系统采用常见的分层架构模式,一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。
(1)数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数据表的select,insert,update,delete的操作。在petshop的数据访问层中,由于没有使用orm,从而导致了代码量的增加,可以看作是整个设计实现中的一大败笔。
(2)业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关。以petshop为例,业务逻辑层的相关设计,均和网上宠物店特有的逻辑相关,例如查询宠物,下订单,添加宠物到购物车等等。如果涉及到数据库的访问,则调用数据访问层。
(3)表示层:是系统的ui部分,负责使用者与整个系统的交互。在这一层中,理想的状态是不应包括系统的业务逻辑。表示层中的逻辑代码,仅与界面元素有关。在petshop中,是利用asp.net来设计的,因此包含了许多web控件和相关逻辑。
2、页面相关技术
(1)asp.net页面的处理顺序:
asp.net页面是由事件来驱动的,首先执行的是init事件,在代码中,系统自动增加了一个oninit的重载函数,从而在页面init的时候就执行这个oninit函数。在这个函数中,会执行initializecomponent函数,这个函数里就有很多控件事件的代理函数。页面在执行完init之后,就是load事件,对应的代码就是page_load。 然后就是引起页面返回的事件的代码,当然,如果页面是第一次运行的话,就没有这一步了。 也就是说,页面每次刷新的时候都会执行page_load函数,这也就是为什么有些代码要写在
if (!page.ispostback)
{ ... }
中的原因。比如有一个文本框,如果在page_load中设置初始值,放在哪儿呢?如果放在if外面,那每次刷新的时候都会执行这个赋值语句,即使在页面中修改了文本框的值,在返回之后仍然会消失,但是如果放在if之中,那就可以了,返回之后文本框中仍然是先前的值。很多次实验中datagrid无法获取编辑后的值,也可能就是这个原因。
(2)javascript在页面中的应用:
虽然asp.net采用新的运行机制,但是最后生成的还是能被一般浏览器识别的html和javascript代码,在页面中,仍然可以通过response.write来写出一段js代码,比如要弹出一个新的浏览器窗口,可以用response.write(@"");在web控件中,attributes属性集合也和js联系紧密。新增加的一个attributes元素就对应web控件最后生成的html代码的一个属性或者事件。
(3)web控件
有几个控件是我们应该有很深的理解的:datagrid、datalist。这两个控件在显示数据上为我们提供了极大的方便,它们的各种用法,需要我们在实践中不断摸索、不断总结。另外,自定义控件也是一个比较重要的范围。在自定义控件的类型选择上,如果你只是一般的显示一些固有的控件,而不作属性、事件的操作,那写成user control会简单一点,这样的自定义控件相当于asp中通过include执行的代码。如果你想在设计、运行中修改控件内部的属性、得到控件的某些事件,那最好写成一个dll文件,也就是写成一个类,这样的控件可以像一般的web控件一样,用鼠标拖动大小,设置属性,获取事件等。
3、数据处理相关
(1)将缓存信息绑定到datagrid上
private void bindcache()
{
string str = this.textbox1.text.trim();
datatable table = new datatable();
table.columns.add("cachename", typeof(string));
table.columns.add("cachetype", typeof(string));
idictionaryenumerator enumerator = httpruntime.cache.getenumerator();
int num = 0;
while (enumerator.movenext())
{
bool flag = true;
if ((str != "") && (enumerator.key.tostring().indexof(str)
{
flag = false;
}
if (flag)
{
num++;
datarow row = table.newrow();
row["cachename"] = enumerator.key;
row["cachetype"] = enumerator.value.gettype();
table.rows.add(row);
}
}
this.label1.text = num.tostring().trim();
this.datagrid1.datasource = table;
this.datagrid1.databind();
}
(2)清除指定的缓存
private void datagrid1_deletecommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
{
string text = e.item.cells[0].text;
if (base.cache[text] != null)
{
base.cache.remove(text);
this.bindcache();
}
}
三、经验教训
1、编译错误和警告处理
警告: 不能将项目xxxxx中的依赖项“xxx, version=1.0.1777.21016, culture=neutra,复制到运行目录,因为它将改写引用“xxx, version=1.0.1777.23397, culture=neutral”。”
分析:
a是一个公用的类库,很多其它的项目都会引用到它。
b是一个项目,其中就引用到了a.dll
c也是一个项目,不过c要引用a和b
问题就是:当a重新编译了之后,b并没有重新编译,这个时候如果编译c就会有上面那样的警告。这是因为如果一个项目引用了一个库,那么编译该项目的时候,编译器默认是要把这个库复制到该项目的输出目录下的(当然你可以修改这个设置)。对这个例子来说就是要把a.dll和b.dll复制到c的输出目录下。先说a.dll,首先会把a.dll复制到c的输出目录下;再说b.dll,因为b引用了a,所以会把b目录下的b.dll和a.dll一起复制到c的输出目录下,这个时候就出问题了。因为b没有重新编译,所以b目录下的a.dll的版本就比c目录下的已经有了的a.dll版本要低,编译器就会报那个错误了。
错误:当生成 visual c# .net 应用程序时,可能会在编译器中收到以下错误信息:
error cs0518: the predefined type 'type' is not defined or imported(未定义或导入预定义类型“type”)
原因:可能在命令行编译器上指定了 /nostdlib 选项; 程序可能包含对不正确的 mscorlib.dll 文件的引用; 可能没有正确地将 visual studio .net 或 .net 框架软件开发工具包 (sdk) 安装在系统上; 系统上可能有早先安装的 .net 框架 sdk 的残留组件,而这些组件与最新的安装版本不兼容。
解决方案:若要解决这一问题,可以按照下列步骤操作: 确保不在命令行编译器中指定 /nostdlib 选项。确保项目引用正确的 mscorlib.dll 文件。 如果第 1 步和第 2 步都不能解决这个问题,则重新安装 .net 框架 sdk。
2、页面美化经验
内容,尤其是表格当中上下两单元格的图片连不到一块,即总是在两个图片之间出现一些不希望有的空隙时,将两个单元格中再分别嵌入一个表格再将两图片分别放入其中。则可以解决些问题。
热区的建立代码:
图片当做为链接时有时会出现奇怪的边框,解决方法,将图片的border手动设为0.
设计页面时的顺序最好是:首先设计出网页图片,然后将网页图片做成网页,最后在此基础上加入动态控制的东西。
四、展望及建议
1、开发前景展望
在本次实训中,我们仅仅实现了最基本的网络办公功能,但是,在网络办公领域出现的新技术和新功能我们都没有涉及。鉴于这些缺陷,我想应该从以下两个方面改进:功能完善和技术领先。
(1)功能完善
网络办公系统发展到今天,在功能方面已经很完善了。除了我们开发的考勤,邮件等宫恩年个以外,还有与手机等现代通讯体系相关的一些核心功能。例如:可以兼容短信,移动网络和短距离网络通信等多种通信方式,可以工作在各种基于mobile的智能手机平台,能够提供短信的分发、后处理,数据流传送、文件分发、通信,移动设备与固定终端的同步、互动及一体化的功能。
(2)技术领先
通过学习惠普的新技术,把网络打印、网络复印、网络传真、网络扫描等功能有机地整合在一起,实现真正的远程自动化办公。
2、实训建议
1、加强校内实训室的建设与管理,保证实训时间灵活;
实训室是开展实训教学的场所,是实训教学的基本保证,因此必须加强建设。
(1)完善与规范项目实训室,我们现有实训室在实训中已发挥了重要作用。但是
实训室的管理存在问题,比如开放时间和日常管理方面(2)根据实训内容及时更新与调整配置新的设备,以满足实训之需。
2、规范专业实训体系,制定正规实训大纲。
(1)根据国家标准,制订有专业特色的实训大纲。规范教学大纲和明确具体的考核标准:学生实训守则、学生实训成绩考核办法、实训安排(内容、学时分配等)、实训考核评分标准等。这些要提前让我们知道;
(2)实训组织、过程设计。实训设计组织应遵循:合理性、准确性、可行性、简洁性原则。应由专任教师根据实际情况制定;
(3)实训结果评价,要求指导教师对我们所做作品进行收集、保存、评价或现场评价;
(4)进行分层次、分组实训教学。进行分组分层实训,并在分组中形成快中慢班。这种做法,切合学生的实际,更符合学生的要求,因材施教,可培养一批基础好,肯钻研的技能高手,满足各层次操作技能的学习。
(5)注重技能考核,促实训教学质量。每个实训教学阶段结束后,学校应组织学生参加各种国家劳动技能考核。一方面促进了学生的学习,另一方面也考核了学校实训教学效果。
相关内容扩展
C#.NET图书管理系统实习报告 2014年10月19日
为期两个星期的c#图书管理系统实习终于结束了,总算松了一口气,在这短短的两周时间内承受了很大的压力现在终于能够得到“释放”了,感觉到很轻松。回顾这两周所做过的工作和努力,感觉到收获不少,这里面除了实习本省的内容外,还包括许许多多超乎实习本身意…
.net网络办公自动化系统实习报告 2014年10月19日
一、实训概要1、实训内容在将近一个月的时间内,本人和项目组其他成员一起,完成了一个基于微软.net技术的网络办公自动化系统(简称oa系统),该系统主要包括以下五个模块:考勤管理;短信管理;邮件管理;联系人管理和客户管理。2、担任角色本人在团队中担任…
.NET,C#软件公司实习报告 2014年10月19日
时间过的真快,一眨眼时间我在朗嘉公司为期三个多月的实习生活就要结束了,而我也从学校拿到了毕业证书和学位证书,我的学生生涯要暂时告一段落。回顾这三个多月在公司的工作生活,我感到很庆幸和满意。庆幸的是我比其它一部分同学多了三个月在软件公司工作的…
金工实习报告范文 2014年10月19日
一、实习时间:实习地点:邵阳学院机械实习工厂实习单位:电气工程系12级电气工程及其自动化实习目的:此次金工实习可使学生理论联系实践,学以致用,使学生在金工具体操作过程中,对机械制造过程有一个完整的感性认识,为学习有关的后续课程和将来从事相关的…
法律专业大学生实习报告 2014年10月19日
一、实习目的及意义1.实习目的:通过实习,将在大学期间所学的理论与法律实习相结合,巩固知识,发现不足,以求积累经验、指导学习和学以致用;在实习中,培养独立发现问题、分析问题和解决问题的能力;通过实习培养社会适应能力和人际交往能力,并不断提高自身法律…
大学生工厂生产实习报告 2014年10月19日
一、实习目的:生产实习是教学与生产实际相结合的重要实践性教学环节。在生产实习过程中,学校也以培养学生观察问题、解决问题和向生产实际学习的能力和方法为目标。培养我们的团结合作精神,牢固树立我们的群体意识,即个人智慧只有在融入集体之中才能最大限…
一、实训概要
1、实训内容
在将近一个月的时间内,本人和项目组其他成员一起,完成了一个基于微软.net技术的网络办公自动化系统(简称oa系统),该系统主要包括以下五个模块:考勤管理;短信管理;邮件管理;联系人管理和客户管理。
2、担任角色
本人在团队中担任页面美工和程序员的角色,主要制作了母板页和短信管理模块的全部页面,并且制作了与之相关的类图、用例图和数据库表,成功完成了短信模块的编程开发工作。
3、实训结果
通过本次实训,主要培养了自己的规范研发能力,学习了企业项目开发的整个过程和团队项目开发经验,并且加强了.net新技术的学习,熟练掌握了常用的软件开发工具(如visual
studio 2005) 的操作规程。
二、技术收获
1、系统企业架构
在研发的开始阶段,先学习了petshop 4.0的系统架构,系统掌握了规范开发中的架构体系,为开发顺利进行打下基础。该系统采用常见的分层架构模式,一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。
(1)数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数据表的select,insert,update,delete的操作。在petshop的数据访问层中,由于没有使用orm,从而导致了代码量的增加,可以看作是整个设计实现中的一大败笔。
(2)业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关。以petshop为例,业务逻辑层的相关设计,均和网上宠物店特有的逻辑相关,例如查询宠物,下订单,添加宠物到购物车等等。如果涉及到数据库的访问,则调用数据访问层。
(3)表示层:是系统的ui部分,负责使用者与整个系统的交互。在这一层中,理想的状态是不应包括系统的业务逻辑。表示层中的逻辑代码,仅与界面元素有关。在petshop中,是利用asp.net来设计的,因此包含了许多web控件和相关逻辑。
2、页面相关技术
(1)asp.net页面的处理顺序:
asp.net页面是由事件来驱动的,首先执行的是init事件,在代码中,系统自动增加了一个oninit的重载函数,从而在页面init的时候就执行这个oninit函数。在这个函数中,会执行initializecomponent函数,这个函数里就有很多控件事件的代理函数。页面在执行完init之后,就是load事件,对应的代码就是page_load。 然后就是引起页面返回的事件的代码,当然,如果页面是第一次运行的话,就没有这一步了。 也就是说,页面每次刷新的时候都会执行page_load函数,这也就是为什么有些代码要写在
if (!page.ispostback)
{ ... }
中的原因。比如有一个文本框,如果在page_load中设置初始值,放在哪儿呢?如果放在if外面,那每次刷新的时候都会执行这个赋值语句,即使在页面中修改了文本框的值,在返回之后仍然会消失,但是如果放在if之中,那就可以了,返回之后文本框中仍然是先前的值。很多次实验中datagrid无法获取编辑后的值,也可能就是这个原因。
(2)javascript在页面中的应用:
虽然asp.net采用新的运行机制,但是最后生成的还是能被一般浏览器识别的html和javascript代码,在页面中,仍然可以通过response.write来写出一段js代码,比如要弹出一个新的浏览器窗口,可以用response.write(@"");在web控件中,attributes属性集合也和js联系紧密。新增加的一个attributes元素就对应web控件最后生成的html代码的一个属性或者事件。
(3)web控件
有几个控件是我们应该有很深的理解的:datagrid、datalist。这两个控件在显示数据上为我们提供了极大的方便,它们的各种用法,需要我们在实践中不断摸索、不断总结。另外,自定义控件也是一个比较重要的范围。在自定义控件的类型选择上,如果你只是一般的显示一些固有的控件,而不作属性、事件的操作,那写成user control会简单一点,这样的自定义控件相当于asp中通过include执行的代码。如果你想在设计、运行中修改控件内部的属性、得到控件的某些事件,那最好写成一个dll文件,也就是写成一个类,这样的控件可以像一般的web控件一样,用鼠标拖动大小,设置属性,获取事件等。
3、数据处理相关
(1)将缓存信息绑定到datagrid上
private void bindcache()
{
string str = this.textbox1.text.trim();
datatable table = new datatable();
table.columns.add("cachename", typeof(string));
table.columns.add("cachetype", typeof(string));
idictionaryenumerator enumerator = httpruntime.cache.getenumerator();
int num = 0;
while (enumerator.movenext())
{
bool flag = true;
if ((str != "") && (enumerator.key.tostring().indexof(str)
{
flag = false;
}
if (flag)
{
num++;
datarow row = table.newrow();
row["cachename"] = enumerator.key;
row["cachetype"] = enumerator.value.gettype();
table.rows.add(row);
}
}
this.label1.text = num.tostring().trim();
this.datagrid1.datasource = table;
this.datagrid1.databind();
}
(2)清除指定的缓存
private void datagrid1_deletecommand(object source, system.web.ui.webcontrols.datagridcommandeventargs e)
{
string text = e.item.cells[0].text;
if (base.cache[text] != null)
{
base.cache.remove(text);
this.bindcache();
}
}
三、经验教训
1、编译错误和警告处理
警告: 不能将项目xxxxx中的依赖项“xxx, version=1.0.1777.21016, culture=neutra,复制到运行目录,因为它将改写引用“xxx, version=1.0.1777.23397, culture=neutral”。”
分析:
a是一个公用的类库,很多其它的项目都会引用到它。
b是一个项目,其中就引用到了a.dll
c也是一个项目,不过c要引用a和b
问题就是:当a重新编译了之后,b并没有重新编译,这个时候如果编译c就会有上面那样的警告。这是因为如果一个项目引用了一个库,那么编译该项目的时候,编译器默认是要把这个库复制到该项目的输出目录下的(当然你可以修改这个设置)。对这个例子来说就是要把a.dll和b.dll复制到c的输出目录下。先说a.dll,首先会把a.dll复制到c的输出目录下;再说b.dll,因为b引用了a,所以会把b目录下的b.dll和a.dll一起复制到c的输出目录下,这个时候就出问题了。因为b没有重新编译,所以b目录下的a.dll的版本就比c目录下的已经有了的a.dll版本要低,编译器就会报那个错误了。
错误:当生成 visual c# .net 应用程序时,可能会在编译器中收到以下错误信息:
error cs0518: the predefined type 'type' is not defined or imported(未定义或导入预定义类型“type”)
原因:可能在命令行编译器上指定了 /nostdlib 选项; 程序可能包含对不正确的 mscorlib.dll 文件的引用; 可能没有正确地将 visual studio .net 或 .net 框架软件开发工具包 (sdk) 安装在系统上; 系统上可能有早先安装的 .net 框架 sdk 的残留组件,而这些组件与最新的安装版本不兼容。
解决方案:若要解决这一问题,可以按照下列步骤操作: 确保不在命令行编译器中指定 /nostdlib 选项。确保项目引用正确的 mscorlib.dll 文件。 如果第 1 步和第 2 步都不能解决这个问题,则重新安装 .net 框架 sdk。
2、页面美化经验
内容,尤其是表格当中上下两单元格的图片连不到一块,即总是在两个图片之间出现一些不希望有的空隙时,将两个单元格中再分别嵌入一个表格再将两图片分别放入其中。则可以解决些问题。
热区的建立代码:
图片当做为链接时有时会出现奇怪的边框,解决方法,将图片的border手动设为0.
设计页面时的顺序最好是:首先设计出网页图片,然后将网页图片做成网页,最后在此基础上加入动态控制的东西。
四、展望及建议
1、开发前景展望
在本次实训中,我们仅仅实现了最基本的网络办公功能,但是,在网络办公领域出现的新技术和新功能我们都没有涉及。鉴于这些缺陷,我想应该从以下两个方面改进:功能完善和技术领先。
(1)功能完善
网络办公系统发展到今天,在功能方面已经很完善了。除了我们开发的考勤,邮件等宫恩年个以外,还有与手机等现代通讯体系相关的一些核心功能。例如:可以兼容短信,移动网络和短距离网络通信等多种通信方式,可以工作在各种基于mobile的智能手机平台,能够提供短信的分发、后处理,数据流传送、文件分发、通信,移动设备与固定终端的同步、互动及一体化的功能。
(2)技术领先
通过学习惠普的新技术,把网络打印、网络复印、网络传真、网络扫描等功能有机地整合在一起,实现真正的远程自动化办公。
2、实训建议
1、加强校内实训室的建设与管理,保证实训时间灵活;
实训室是开展实训教学的场所,是实训教学的基本保证,因此必须加强建设。
(1)完善与规范项目实训室,我们现有实训室在实训中已发挥了重要作用。但是
实训室的管理存在问题,比如开放时间和日常管理方面(2)根据实训内容及时更新与调整配置新的设备,以满足实训之需。
2、规范专业实训体系,制定正规实训大纲。
(1)根据国家标准,制订有专业特色的实训大纲。规范教学大纲和明确具体的考核标准:学生实训守则、学生实训成绩考核办法、实训安排(内容、学时分配等)、实训考核评分标准等。这些要提前让我们知道;
(2)实训组织、过程设计。实训设计组织应遵循:合理性、准确性、可行性、简洁性原则。应由专任教师根据实际情况制定;
(3)实训结果评价,要求指导教师对我们所做作品进行收集、保存、评价或现场评价;
(4)进行分层次、分组实训教学。进行分组分层实训,并在分组中形成快中慢班。这种做法,切合学生的实际,更符合学生的要求,因材施教,可培养一批基础好,肯钻研的技能高手,满足各层次操作技能的学习。
(5)注重技能考核,促实训教学质量。每个实训教学阶段结束后,学校应组织学生参加各种国家劳动技能考核。一方面促进了学生的学习,另一方面也考核了学校实训教学效果。
相关内容扩展
C#.NET图书管理系统实习报告 2014年10月19日
为期两个星期的c#图书管理系统实习终于结束了,总算松了一口气,在这短短的两周时间内承受了很大的压力现在终于能够得到“释放”了,感觉到很轻松。回顾这两周所做过的工作和努力,感觉到收获不少,这里面除了实习本省的内容外,还包括许许多多超乎实习本身意…
.net网络办公自动化系统实习报告 2014年10月19日
一、实训概要1、实训内容在将近一个月的时间内,本人和项目组其他成员一起,完成了一个基于微软.net技术的网络办公自动化系统(简称oa系统),该系统主要包括以下五个模块:考勤管理;短信管理;邮件管理;联系人管理和客户管理。2、担任角色本人在团队中担任…
.NET,C#软件公司实习报告 2014年10月19日
时间过的真快,一眨眼时间我在朗嘉公司为期三个多月的实习生活就要结束了,而我也从学校拿到了毕业证书和学位证书,我的学生生涯要暂时告一段落。回顾这三个多月在公司的工作生活,我感到很庆幸和满意。庆幸的是我比其它一部分同学多了三个月在软件公司工作的…
金工实习报告范文 2014年10月19日
一、实习时间:实习地点:邵阳学院机械实习工厂实习单位:电气工程系12级电气工程及其自动化实习目的:此次金工实习可使学生理论联系实践,学以致用,使学生在金工具体操作过程中,对机械制造过程有一个完整的感性认识,为学习有关的后续课程和将来从事相关的…
法律专业大学生实习报告 2014年10月19日
一、实习目的及意义1.实习目的:通过实习,将在大学期间所学的理论与法律实习相结合,巩固知识,发现不足,以求积累经验、指导学习和学以致用;在实习中,培养独立发现问题、分析问题和解决问题的能力;通过实习培养社会适应能力和人际交往能力,并不断提高自身法律…
大学生工厂生产实习报告 2014年10月19日
一、实习目的:生产实习是教学与生产实际相结合的重要实践性教学环节。在生产实习过程中,学校也以培养学生观察问题、解决问题和向生产实际学习的能力和方法为目标。培养我们的团结合作精神,牢固树立我们的群体意识,即个人智慧只有在融入集体之中才能最大限…