人事管理系统

目录
前言 4
1开发工具 4
2运行环境 4
3背景和功能 4
第一章 系统需求分析 5
1.1该系统需要完成如下功能: 5
1.2针对本系统,通过员工管理内容和过程分析,设计的数据项和数据结构如下: 5
1.3本系统开发设计思想有以下几点。 6
1.4功能分析 6
1.5功能模块设计 7
第二章 数据库的设计 7
2.1安装SQL7.0 FOR WIN2K数据库管理系统 7
2.2系统数据模型设计 9
2.2.1关系模型: 9
2.2.2 库概念结构设计 10
2.2.3数据库逻辑结构设计 11
第三章 功能模块设计 14
3.1三层结构 14
3.1.1表示层(common) 14
3.1.2业务逻辑层(BLL) 14
3.1.3数据访问层(DA) 14
3.2登陆程序设计 16
3.3人事管理模块设计 19
3.3.1UML活动关系图 19
3.3.2功能设计 20
3.3.3 机构管理 20
3.4系统管理模块设计 33
第四章 总结 37
致谢 37
参考文献: 38


人事管理系统摘要


摘要:问题定义及内容简介

本系统是人事管理系统,它主要实现管理员如何对普通用户进行授权,如何插入、删除一个员工的信息,用户如何浏览员工的所有信息,以及用户如何查询自己想要的结果,也即是通过输入查询条件,显示符合条件的员工记录以及如何显示这个员工的全部信息。如何对查询或统计出来的符合条件的记录用报表的形式打印出来,窗口打开时的排放顺序,也即是平铺还是重叠,最后得提供一下如何使用这个系统,如何解决用户可能会遇到的问题以及这个系统中的难点和开发技巧等等。系统管理,包括人员编码维护、用户授权和程序定义。输入,包括基本信息、学历信息,照片和工资信息的插入和删除。查看,包括基本信息、学历信息、考勤信息和工资信息的浏览,还有通过输入查询条件查询用户所要的记录,还可以双击某个员工所在列,就可以显示出这个员工的所有信息。维护,包括基本信息、学历信息、考勤信息和工资信息的修改,这个功能只能由管理员来操作,普通用户没这个权力。报表,包括基本信息以及工资信息的查询、统计和打印。
本系统经过测试,运行稳定,已得到认可。

前言
1开发工具
SQL7.0数据开发环境 Microsoft Visual Studio .NET 2003
2运行环境
硬件环境:CPU为赛扬配置以上机型。
软件环境:支持中文的Windows 98、Windows2000、Windows XP各种版本操作平台。
3背景和功能
随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业人事档案的管理势在必行。当前企业信息管理系统正在从C/S结构向B/S结构转移,但是由于安全性等方面的因素,C/S结构的管理信息系统仍然占据企业管理信息系统的主流。
人事管理系统是现代企业管理工作不可缺少的一部分,是适应现代企业制度要求、推动企业劳动人事管理走向科学化、规范化的必要条件。
人事管理系统可以用于支持企业完成劳动人事管理工作,有如下3个方面的目标。
1、 支持企业实现规范化的管理。
2、支持企业高效率完成劳动人事管理的日常业务,包括新员工加入时人事档案的建立,老员工转出、辞职、退休等。
3、支持企业进行劳动人事管理及其相关方面的科学决策,如企业领导根据现有的员工数目决定招聘的人数等。


第一章 系统需求分析
1.1该系统需要完成如下功能:

1、 员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况、考勤信息、工资信息。
2、对用户进行授权。
3、员工各种信息的修改。
4、对于转出、辞职、退休员工信息的删除。
5、按照某种条件,查询统计符合条件的员工信息。
6、对查询、统计的结果输出。
7、人事系统的使用帮助。
1.2针对本系统,通过员工管理内容和过程分析,设计的数据项和数据结构如下:

1、员工基本情况。包括的数据项有员工号、员工姓名、性别、所在部门、身份证号、生日、籍贯、国籍、民族、政治面貌、参加时间、血型、开始工作时间、家庭住址、联系电话、岗位代号。
2、员工学历信息,包括的数据项有员工号、学历、专业、毕业时间、毕业学校、学校类型、外语1、外语1级别、外语2、外语2级别。
3、员工工资信息。包括的数据项有员工号,姓名,底薪,补贴,奖金,加班,代扣养老金,代扣医疗保险,代扣住房公积金,所得税,房贴,房租,实发工资。
4、人员编码信息。包括的数据项有人员编码,人员姓名,密码。
5、用户授权信息。包括的数据项有序号,人员编码,程序号。
1.3本系统开发设计思想有以下几点。
1、尽量采用学校现有软硬件环境,及先进的管理系统开发方案,从而达到充分利用学校现有资源,提高系统开发水平和应用的目的。
2、系统应符合学校人事管理的规定,满足学校日常人事管理工作需要,并达到操作过程中的直观、方便、实用、安全等要求。
3、系统采用C/S体系结构,Client(客户端)负责提供表达逻辑、显示用户界面信息、访问数据库服务器;Server(服务器端)则用于提供数据服务。系统分析等前期工作应尽量详细完善,以便学校以后体系结构的改变,对于一些安全性要求不高的信息可以方便地采用Brower/Server的方式进行访问。
4、系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
5、系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
与数据库之间的访问:


1.4功能分析
本系统主要完成以下几个功能:
。人事管理管理各种信息的输入,包括部门信息、机构信息、人员管理、照片输入等。
。人员管理各种信息的查询、修改和维护。
。企业各部门的人员需求的管理。
。操作日志的管理。
。人员管理系统的使用帮助。
1.5功能模块设计
在系统功能分析的基础上,考虑ASP.net程序编制的特点,得到如图所示的系统功能模块图。


第二章 数据库的设计
2.1安装SQL7.0 for Win2K数据库管理系统
创建数据库:
在Enterprise Manager中打开本地服务器结点,如图所示:

首先选中数据库结点,然后从action菜单或在右面窗口点击鼠标右键,从弹出的菜单中选new database,系统弹出下图:

在name中填上数据库的名字ckgl,在database files选项组中会自动产生此数据库的主文件,然后选择保存的相应路径。在transaction log标签中,对数据库的日志文件进行设置,并保存在相应的路径下。
2.2系统数据模型设计
2.2.1关系模型:

1、员工登陆日志表(日志ID号,用户ID号,登陆时间,登陆是否成功,登出时间,登录主机IP地址,登录打败时间)
员工登陆日志表:

2、员工基本信息(员工号,姓名,所在系号,所在系名,性别,生日,籍贯,国籍,民族,身份证号,婚姻状况,健康状况,政治面貌,参加时间,血型,开始工作时间,家庭住址,电话,岗
位代号)
人员基本信息(MrBaseInf)

3、员工婚姻信息(员工号,爱人代号,爱人姓名,爱人生日,结婚时间,爱人工作,位,爱人政治面貌,爱人工作职务)
4、员工学历信息(员工号,学历,专业,毕业时间,毕业学校,学校类型,外语1,外语1级别,外语2,外语2级别)
5、员工考勤信息(员工号,姓名,日期,本月天数,公休假天数,应出勤天数,请假,节假日加班,其它加班)
6、员工工资信息(员工号,姓名,底薪,补贴,奖金,加班,代扣养老金,代扣医疗保险,代扣住房公积金,所得税,房贴,房租,实发工资)
7、人员编码(人员编码,人员姓名,密码)
8、用户授权(序号,人员编码,程序号)
9、部门基本信息(部门名称,机构,负责人,电话号码1,电话号码2,传真)
部门基本信息(mrDepartment):

2.2.2 库概念结构设计

这一设计阶段是在需求分析的基础上,设计出能够满足企业需求的管理。。
本实例根据上面的设计规划出的实体有人员理实体、日志实体、信息实体、照片实体、部门实体、项目实体。各个实体的E-R图及其关系描述如下。
下图为人事管理实体E-R图。


下图为项目管理实体E-R图:


下图为日志实体E-R图:


2.2.3数据库逻辑结构设计

在上面的实体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。
(共两个关系表)
表一代码:
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
ALTER VIEW sysconstraints AS SELECT
constid = convert(int, id),
id = convert(int, parent_obj),
colid = convert(smallint, info),
spare1 = convert(tinyint, 0),
status = convert(int,
CASE xtype
WHEN ’PK’ THEN 1 WHEN ’UQ’ THEN 2 WHEN ’F’ THEN 3
WHEN ’C’ THEN 4 WHEN ’D’ THEN 5 ELSE 0 END
+ CASE WHEN info != 0 -- CNST_COLUMN / CNST_TABLE
THEN (16) ELSE (32) END
+ CASE WHEN (status & 16)!=0 -- CNST_CLINDEX
THEN (512) ELSE 0 END
+ CASE WHEN (status & 32)!=0 -- CNST_NCLINDEX
THEN (1024) ELSE 0 END
+ (2048) -- CNST_NOTDEFERRABLE
+ CASE WHEN (status & 256)!=0 -- CNST_DISABLE
THEN (16384) ELSE 0 END
+ CASE WHEN (status & 512)!=0 -- CNST_ENABLE
THEN (32767) ELSE 0 END
+ CASE WHEN (status & 4)!=0 -- CNST_NONAME
THEN (131072) ELSE 0 END
+ CASE WHEN (status & 1)!=0 -- CNST_NEW
THEN (1048576) ELSE 0 END
+ CASE WHEN (status & 1024)!=0 -- CNST_REPL
THEN (2097152) ELSE 0 END),
actions = convert(int, 4096),
error = convert(int, 0)
FROM sysobjects WHERE xtype in (’C’, ’F’, ’PK’, ’UQ’, ’D’)
AND (status & 64) = 0
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

表二代玛:
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

ALTER VIEW syssegments (segment, name, status) AS
SELECT 0, ’system’ , 0 UNION
SELECT 1, ’default’ , 1 UNION
SELECT 2, ’logsegment’ , 0
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
第三章 功能模块设计
3.1三层结构
本系统采用3个逻辑层的设计模型,分别为表示层、业务逻辑层和数据访问层,这种模型使系统结构更清楚,分工更明确,有利于后期的维护和升级。

3.1.1表示层(common)

用户表示层为客户端提供应用程序的访问,在本系统中该层用的即是ASP.NET页面。此层在本系统中的Web项目的形式实现。

3.1.2业务逻辑层(BLL)

业务逻辑层实现应用程序的业务功能。本系统中该层用的即是BLL项目的形式实现。

3.1.3数据访问层(DA)

数据访问层为业务逻辑或表示层提供数据服务。本系统中该层用的即是DA项目的形式实现。

这三层之间的相互关系可用图3-3-1来表示。

表示层 业务逻辑层 数据访问层 数据库
图3-3-1
1、数据访问策略
数据访问策略是应用程序用来存储、检索和管理数据的方式。本系统的系统数据访问策略旨在优化性能和可缩放性。主要采用了以下两个策略。
1、 数据访问层对数据库的访问基本上均采用存储过程的方式进行。利用存储过程可以保持应用程序的执行效率并简化数据库,另外可以增加系统设计的灵活性,在数据库发生变化时,有时可以通过改变存储过程语句而无需改变程序代码即可实现。该数据库访问策略有效利用了SQL Server 数据库系统对性能优化的特点。
2、 将数据库资源保留最短的时间。数据库资源稀有且昂贵,本系统所用的系统数据库访问层尽可能推迟分配数据库资源,并尽可能快地释放数据库资源。并使用using 或 try catch finally 块对存储过程进行调用,此模式封装了对不受运行管理的资源的控制,可以尽可能快地释放数据库资源。
2、系统配置
本系统所用的系统配置主要是通过Web应用程序的Web.Config 配置文件实现的。Web.Config 位于本系统的Webs项目的根目录中,它是XML格式的文件,可以使用任何标准文本编辑器或XML分析器编辑该文件,但不能使用Web浏览器远程访问该文件。本系统中的Web.Config 配置文件中有3点要注意的。
1、 保存数据库连接字符串
将数据库连接字符串保存在Web.Config配置文件中appSettings 节中,便于系统的各个页面进行调用。同时,在系统重新部署时,只要修改此处的数据库连接字符串,.NET框架运行时会自动检测Web.Config 中的更改,不必重新启动IIS这些更改即可生效。

要在其他页面中引用数据库连接字符串需要先添加对System..Configuration 命名空间的引用,在System..Configuration 命名空间中含有ConfigurationSettings 类,它提供对指定配置小节中设置的访问,其公共属性 ConfigurationSettions.AppSettings 属性可获取<appSettings>元素配置节中的设置,其读书到的值为String 类型。
2、 系统错误重定向
在Web.Config 配置文件中,通过对<customErrors>节进行设置,可以自定义默认的出错页面。

此节点可设定如下的3种报错模式,默认为RomoteOnly 模式。
① 关闭(Off)模式:一旦发生错误,ASP.NET把默认的报错页面显示给本地和远程用户。
② 开启(On)模式:当报错模式属性被设为“开启”时,ASP.NET 把自定义的出错页面而不是其默认的系统报错页面显示给本地和远程用户。
③ 只有远程启动(RomoteOnly)模式:ASP.NET的报错页面只能被本地用户看到。远程用户用的访问请求,将会显示自定义的出错页面。
“defaultRedirect” 属性的值定义了默认的自定义的错误页面,此外还可以根据不同的出错值,设定不同的出错页面。
在本系统中,通过上面的代码可设置打开自定义出错页面显示,如果发生404错误(找不到页面)时,将转向“error404.aspx” ,发生其他错误时,页面时,页面将转向“errorpage.htm” 默认错误页面。
3、 设置请求和响应编码
在Web.config 配置文件中,通过对<globalization>节设置本系统中的系统请求和响应编码默认为简体中文。

3.2登陆程序设计
登陆程序是人员管理系统运行后首先打开的界面。在这个界面,用户必须输入预先设定好的用户名以及密码才能进入,这样有利于防止他人在没有授权的情况下进入系统,修改系统中的数据,对单位造成不必要的损失。
登陆窗口的界面如图3-3-2所示:

图3-3-2


该窗口中放置了2个文本框TextBox控件,分别显示“帐号”和“密码”。在窗口的下方还放置1个“确认” 按钮控件。

private void btnlogin_Click(object sender, System.EventArgs e)
{
EmpDB AloginUsr=new EmpDB();
String strLoginID= username.Text .Trim ();
String strPassword =password.Text .Trim ();
string strReason;
string strUserID;
string strValid;
string[] NewLogin;
String[] strLoginflag =AloginUsr.Login (strLoginID,strPassword);

if(strLoginflag[0]=="usererror"||strLoginflag[0]=="pwderror"||strLoginflag[0]=="noacount")
{
strUserID = username.Text .Trim ();
strValid= "否";
strReason=strLoginflag[1];
NewLogin=new string []
{
strUserID,
DateTime.Now .ToString (),
strValid,
"",
Request.UserHostAddress .ToString (),
strReason
};
DbManagerLogininfo myclassfologin=new DbManagerLogininfo ();
myclassfologin.insertLoginUser (NewLogin);
Response.Write("<script language=javascript>");
Response.Write("window.alert(’");
Response.Write(strReason);
Response.Write("’);");
Response.Write("</script>");
}
else
{
Response.Cookies["empint"].Value=username.Text;
Response.Cookies["empint"].Expires=DateTime.Now.AddDays(1);

strUserID=username.Text .Trim ();
strValid="是";
strReason="";
strReason=strLoginflag[1];
NewLogin=new string []
{
strUserID,
DateTime.Now .ToString (),
strValid,
"",
Request.UserHostAddress .ToString (),
strReason
};
DbManagerLogininfo myclassfologin=new DbManagerLogininfo ();
myclassfologin.insertLoginUser (NewLogin);
Session["EmpID"]=Int32.Parse(strLoginflag[0]);
Session["username"]=username.Text;
string tt="qminoa = window.open(’"+Request.ApplicationPath+"/index.aspx"+"’"
+",’’,’toolbar=no,menubar=no,titlebar=yes,directories=no,resizable=yes,status=yes,fullscreen=no,top=0;left=0,width=900,height=700’);";
Response.Write("<script language=javascript>");
Response.Write(tt);
Response.Write("qminoa.moveTo(0,0);");
Response.Write("qminoa.resizeTo(screen.availWidth,screen.availHeight);");
Response.Write("window.opener=null;");
Response.Write("window.close();");
Response.Write("</script>");
}
}

该事件以用户输入的帐号和密码来连接数据库,并且提示用户帐号和密码不能为空,如果为空将不能进入系统。当用户输入正确的帐号和密码后,将打开主窗口,并关闭当前的登陆窗口。
技术点总结:
在本系统中用户身份验证的方式是通过session方式实现的,这和以前ASP程序实现用户验证方式比较相近。在ASP.NET中还提供了另外3种验证方法:Windows验证、Passport验证和Cookie验证。
3.3人事管理模块设计
3.3.1UML活动关系图

下面是进入人事管理模块时可使用的活动或选项。在进入每个子模块时都进行权限判断,如果登录用户不具备该子模块的最低操作权限(即读取权限)时,提示越权信息,禁止进入该子模块。当用户进入子模块时,根据用户权限信息开放相应功能,发现越权行为,给出越权警告。活动关系图如3-3-3所示:


图3-3-3 UML活动关系图

3.3.2功能设计

1、 机构信息
该模块面向企业或集团应用,能够添加企业或集团公司的各分支点部门和机构,但只有人力资源管理员相应权限才有权力添加或删改机构信息。此子模块提供信息的基本数据库操作:添加、修改和删除。
2、 部门信息
管理各分支机构的所属的部门信息。包括各部门的负责人、电话号码、传真、地址等。只有人力资源管理员可对部门列表进行浏览、新增、编辑、删除等操作,其他人员只能看到相应权限的栏目。
3、 人员管理
包括员工的基本信息、个人信息、福利待遇、学历信息、履历信息、档案信息、合同信息;并提供简捷明了的按机构、部门、个人名字等条件进行检索、录入和修改。
4、 人员照片
提供以员工照片的形式浏览员工的基本信息,可按机构、部门和单个员工查阅详细信息资料。同时便于新员工、跨部门的员工相互间尽快认识和熟悉起来。

3.3.3 机构管理

1、 机构管理页面BranchInf.aspx
本页面主要包括机构添加模块和机构列表,机构列表实现了机构的修改和删除功能。
● 机构添加模块主要由两个文本控件和验证控件组成。
<TABLE id="Table6" style="WIDTH: 100%; HEIGHT: 20px" cellSpacing="1" cellPadding="1" border="0">
<TR>
<TD class="tttable" style="WIDTH: 69px">机构名称
</TD>
<TD style="WIDTH: 134px" noWrap> 、<asp:textbox id="txtName" runat="server" CssClass="edline" Width="136px"></asp:textbox></TD>
<TD class="tttable" style="WIDTH: 4px">
<asp:requiredfieldvalidator id="valName" runat="server" CssClass="td" ControlToValidate="txtName" ErrorMessage="[机构名称]必须输入!" Font-Size="X-Small">*</asp:requiredfieldvalidator></TD>
<TD class="tttable" style="WIDTH: 55px">机构简称
</TD>
<TD style="WIDTH: 53px" noWrap>
<asp:textbox id="txtSimCode" runat="server" CssClass="edline" Width="72px"></asp:textbox></TD>
<TD noWrap> <asp:requiredfieldvalidator id="valSimCode" runat="server" CssClass="td" ControlToValidate="txtSimCode" ErrorMessage="[机构简称]必须输入!" Font-Size="X-Small">*</asp:requiredfieldvalidator></TD> <TD noWrap> <asp:linkbutton id="cmdAdd" runat="server" CssClass="td" Font-Size="X-Small"><img src="../img/add.gif" border="0" align="absmiddle">添加...</asp:linkbutton></TD> </TR> </TABLE>
● 机构列表由DataGrid 实现,数据源设置为BraTB,它由后台代码提供。
<asp:datagrid id=dgdBranch runat="server" Width="445px" DataSource="<%# BraTB %>" DataKeyField="branchid" BorderWidth="1px" BackColor="#F7F7F7" BorderColor="#F7F7F7" CssClass="table" BorderStyle="Solid" AutoGenerateColumns="False" Font-Size="X-Small"> <SelectedItemStyle BackColor="Transparent"></SelectedItemStyle> <EditItemStyle ForeColor="Black" BackColor="Black"></EditItemStyle>
<AlternatingItemStyle BorderColor="White" BackColor="White"></AlternatingItemStyle>
<ItemStyle CssClass="textcenter" BackColor="#DEDFDE"></ItemStyle>
<HeaderStyle CssClass="headcenter"></HeaderStyle> <FooterStyle CssClass="headcenter"></FooterStyle> <Columns>
<asp:BoundColumn DataField="BranchName" HeaderText="机构名称"></asp:BoundColumn>
<asp:BoundColumn DataField="SimpleCode" HeaderText="机构简称"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="更新机构信息"> <ItemTemplate><asp:LinkButton runat="server" Text="编辑" CommandName="Edit" CausesValidation="false"></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton runat="server" Text="更新" CommandName="Update" CausesValidation="false"></asp:LinkButton>&nbsp;
<asp:LinkButton runat="server" Text="取消" CommandName="Cancel" CausesValidation="false"></asp:LinkButton></EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="删除" ItemStyle-Width="10%">
<ItemTemplate>
<asp:ImageButton CausesValidation="False" id="Imagebutton2" runat="server" ImageUrl="../img/delete.gif" CommandName="delete" AlternateText="删除此项机构"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
● 后台代码主要完成DataGrid 控件数据的绑定,以及机构的3个数据库基本操作;添加、修改和删除。此页面继承系统Web基类PageBase,页面权限管理由基类直接提供,页面根据权限代码控制用户的所有操作。如果用户对此模块不具备最低操作权限(即浏览权限),则禁止用户进入页面,转到登录页面;当用户进入模块后,用户的所有操作都要经过权限判断,不具有操作权限时,则给出提示信息,禁止用户使用。具体的流程如图3-3-4所示:


图3-3-4 WEB 页面权限管理流程

● 继承PageBase 基类。

public class BranchSet : qminoa.Webs.PageBase
{
protected System.Web.UI.WebControls.Label lblBranchID;
protected System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
protected System.Web.UI.WebControls.Label lblErr;
protected System.Web.UI.WebControls.DataGrid dgdBranch;
protected System.Web.UI.WebControls.LinkButton cmdAdd;
protected System.Web.UI.WebControls.RequiredFieldValidator valSimCode;
protected System.Web.UI.WebControls.TextBox txtSimCode;
protected System.Web.UI.WebControls.RequiredFieldValidator valName;
protected System.Web.UI.WebControls.TextBox txtName;
protected System.Web.UI.WebControls.ImageButton ImageButton1;

private void Page_Load(object sender, System.EventArgs e)
{
this.PageBegin("机构管理",true);
if(!Page.IsPostBack)
{
DataBind();
}
}
● 该属性以DataTable 格式返回所有机构的信息
public DataTable BraTB
{
get
{
return (new DepSystem()).GetBraTB();
}
}
● 事件绑定。
private void InitializeComponent()
{
this.cmdAdd.Click += new System.EventHandler(this.cmdAdd_Click);
this.dgdBranch.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgdBranch_CancelCommand);
this.dgdBranch.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgdBranch_EditCommand);
this.dgdBranch.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgdBranch_UpdateCommand);
this.dgdBranch.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgdBranch_DeleteCommand);
this.dgdBranch.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgdBranch_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
● 技术难点
1、禁用检验
在包含验证控件的表单中,执行Web服务控件时,总是需要通过客户端检验脚本的验证后提交到服务器端。不过在包含验证控件的表单中有些Web控件的表单中有些Web控件执行时,不需要验证控件执行验证。在下面的示例中,表单包含一个提交按钮和一个取消按钮。单击提交按钮时,执行验证控件的检验,通过后提交到服务器端;单击取肖按钮时,不执行验证控件的检验,而直接跳转到另一个页面。
<script runat="server" language="c#">
void btnSubmit_Click(sender,System.EventArgs e)
{
if(IsValid)
Response.Redirect("Thank You.aspx");
}
void btnCancel_Click(object sender,System.EventArgs e)
{
Response.Redirect("Cancel.aspx");
}
</script>
<html>
<head><title></title></head>
<body>
<form runat="server">
Enter your first name;
<br>
<asp:TextBox id="txtFirstName" Runat="Server"/>
<asp:RequiredFieldValidator ControlToValidate="txtFirsName" Text="Required!" runat="server"/>
<asp:Button id="btnSubmit" Text="btnSubmit_Click" runat="server"/>
<asp:Button id="btnCancel" Text="Cancel" OnClick="btnCancel_Click" CausesValidation="false" runat="server"/>
</form>
</body>
</html>
● DataGrid 控件数据绑定
数据绑定是指在运行时将值动态地赋给控件的属性的过程。例如,可以使用数据绑定将控件的属性绑定到一个数据源。机构列表使用DataGrid控件,就是使用了数据绑定技术,首先将所有机构的信息读到DataTable中,然后设置DataGrid 控件的DataSource属性,指向包含机构信息的绑定时也非常相似,正确使用数据绑定技术,会使得开发变得非常轻松。
3.3.4 部门管理
1、 本页面主要包括部门列表,实现了部门的删除功能。查看部门详细信息、编辑部门信息和添加部门信息的功能将跳转到其他页面实现。
● 新增部门跳转到其他页面
<asp:HyperLink id="HyperLink2" runat="server" NavigateUrl="./DepNew.aspx" Font-Size="X-Small"><img src="../img/add.gif" border="0" align="absbottom">新增</asp:HyperLink>
● 部门列表DataGrid控件的数据源设置为DepTB,分页,每页8条记录。每条记录的“部门名称”列设置DataNavigateUrlFormatString 属性,使其指向部门详细信息页面。
<ASP:DATAGRID id=dgdDep runat="server" DataKeyField="DepID" Font-Names="Verdana" BorderWidth="1px" BackColor="#F7F7F7" BorderColor="#F7F7F7" CssClass="table" BorderStyle="Solid" width="717px" AutoGenerateColumns="False" HeaderStyle-font-weight="fold" HeaderStyle-BackColor="#d8c8a8" Font-Name="Verdana" CellPadding="3" Height="81px" DataSource="<%# DepTB %>" AllowPaging="True" PageSize="8" >
<SelectedItemStyle BackColor="Transparent"></SelectedItemStyle>
<EditItemStyle ForeColor="Black" BackColor="Black"></EditItemStyle>
<AlternatingItemStyle BorderColor="White" BackColor="White"></AlternatingItemStyle>
<ItemStyle CssClass="textcenter" BackColor="#DEDFDE"></ItemStyle>
<HeaderStyle CssClass="headcenter"></HeaderStyle>
<FooterStyle CssClass="headcenter"></FooterStyle>
<FooterStyle Font-Size="X-Small"></FooterStyle>
<Columns>
<asp:HyperLinkColumn DataNavigateUrlField="DepID" DataNavigateUrlFormatString="./DepUp.aspx?DepID={0}" DataTextField="DepName" HeaderText="部门名称">
<ItemStyle Wrap="False"></ItemStyle>
</asp:HyperLinkColumn> <asp:BoundColumn DataField="simplecode" HeaderText="机构"> <ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn> <asp:BoundColumn DataField="manager" HeaderText="负责人">
<ItemStyle Wrap="False"></ItemStyle> </asp:BoundColumn> <asp:BoundColumn DataField="tel1" HeaderText="电话号码1"> <ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="tel2" HeaderText="电话号码2">
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="fax" HeaderText="传 真">
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="删除" ItemStyle-Width="10%">
<ItemTemplate>
<asp:ImageButton CausesValidation="False" id="Imagebutton2" runat="server" ImageUrl="../img/delete.gif" CommandName="delete" AlternateText="删除当前部门"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</ASP:DATAGRID>
2、 DepInf.aspx 后台代码
后台代码主要完成DataGrid控件数据的绑定,以及部门的删除操作。此页面继承系统Web基类PageBase,页面权限管理由基类直接提供,页面载入时,提供给基类页面模块名称,基类根据模块名称返回权限代码,页面概据权限代码控制用户的所有操作。当用户具备删除部门的权限时,设置“新增”按钮的NavigateUrl属性指向新增页面。当用户具备部门信息浏览权限时,可通过单击每条记录的“部门名称”列查看该部门的详细信息。
● 继承PageBase 基类
public class DepInf : qminoa.Webs.PageBase
{
protected System.Web.UI.WebControls.DataGrid dgdDep;
protected System.Web.UI.WebControls.HyperLink AddDepLink;
● 页面载入事件。
private void Page_Load(object sender, System.EventArgs e)
{
this.PageBegin("部门管理",true);
if(this.EmpRightCode >= 2)
AddDepLink.NavigateUrl="./DepNew.aspx";
DataBind();
}
● 该属性以DataTable 格式返回所有部门的信息。
public DataTable DepTB
{
get
{
return (new DepSystem()).GetDepTB();
}
}
● 事件绑定
private void InitializeComponent()
{
this.dgdDep.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dgdDep_PageIndexChanged);
this.dgdDep.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgdDep_DeleteCommand);
this.dgdDep.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgdDep_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
●DataGrid 控件中每条记录的“删除”按钮单击事件处理方法。
private void dgdDep_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(this.EmpRightCode == 4)
{
int index = e.Item.ItemIndex;
int depID = (int)dgdDep.DataKeys[index];
try
{
if((new DepSystem()).DeleteDep(depID))
{
this.WriteOptLog("删除部门"+depID.ToString()+"信息");
JScript.Alert("删除部门操作成功!");
}
else
{
JScript.Alert("删除部门操作失败!");
return;
}
}
catch
{
JScript.Alert("存在于此部门相关联的信息,不能删除!");
return;
}
dgdDep.DataBind();
}
else
JScript.Alert("您没有权限进行此操作!");
}
● DataGrid控件页码切换事件处理方法。
private void dgdDep_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
dgdDep.CurrentPageIndex = e.NewPageIndex;
dgdDep.DataBind();
}
● 给DataGrid 控件的记录添加Javascript客户端事件,一是实现当鼠标移至不同行时出现不同背景颜色,二是添加删除确认对话框。
private void dgdDep_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType itemType = e.Item.ItemType;
e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor=’#fff7ce’;cursor=’hand’;" ;
if (itemType == ListItemType.Item )
{
e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor=’#dedfde’;";
}
else if( itemType == ListItemType.AlternatingItem)
{
e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor=’#ffffff’;";
}
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
ImageButton button = (ImageButton) e.Item.FindControl("Imagebutton2");
button.Attributes.Add ("onclick",
"return confirm (/"确定要删除此项记录吗?/");");
}
}
}
3、人员管理
本模块涉及到的页面比较多,包括页面和其他各个选项卡页面,限于篇幅,下面重点介绍人员信息管理主页面、人员基本信息选项卡、人员履历信息选项卡以及和这些页面相关联的页面,其他页面的实现方法基本和这些页面很相似。
1。人员信息管理主页面EmpInf.aspx
本页面主要包括人员检索区和人员信息列表区,检索区可实现检索部门人员信息或单个人员的信息,在人员信息列表中单击条目中“停用账号”按钮可实现停用该条目对应账号的功能。下面列出主要实现代码:
下面是检索区的实现代码,机构和部门的下拉列表采用数据绑定技术。
<TABLE class="td" style="WIDTH: 100%; HEIGHT: 92.29%" cellSpacing="0" cellPadding="0" border="0">
<TR>
<TD style="WIDTH: 54px" noWrap>机构名称/TD>
<TD style="WIDTH: 95px">
<asp:dropdownlist id="dropBranch" runat="server" CssClass="td" Width="120px" Height="23px" DataTextField="SimpleCode" DataValueField="BranchID" AutoPostBack="True" DataSource="<%# BraTB %>">
</asp:dropdownlist>
</TD>
<TD style="WIDTH: 32px" noWrap>部门</TD>
<TD style="WIDTH: 72px">
<asp:dropdownlist id="dropDep" runat="server" CssClass="td" Width="142px" Height="23px" DataTextField="DepName" DataValueField="DepID" DataSource="<%# DepTB %>" AutoPostBack="True">
</asp:dropdownlist>
</TD>
<TD style="WIDTH: 59px" noWrap>
姓名/帐号
</TD>
<TD style="WIDTH: 86px">
<asp:textbox id="txtName" runat="server" CssClass="td" Width="84px"></asp:textbox>
</TD>
<TD> &nbsp;<asp:imagebutton id="cmdQuery" runat="server" ImageUrl="../img/button/query.gif"></asp:imagebutton>
</TD>
</TR>
</TABLE>
下面的代码是实现显示列表的总人数,这里使用Label web服务控件实现动态显示后太提供的总人数信息。
<TD class="tttable">人员列表(共〈asp:label id="lblEmpNum" runat="sever" CssClass="tttable"Font-Size="12px"></asp:label>人)
</td>
.这是“新增”链接的代码,注意此链接没有指定链接地址,由后代码根据用户权限给出地址。
<asp:hyperlink id="lnkAdd" runat="server"><img src="../img/add.gif" border="0" agign="absmiddle">新增</asp:hyperlink>
.下面是人员信息列表的实现代码,从DataGid的控件属性可以看出,列表按每8个条目分页,动态绑到EmpTB变量。
<asp:datagrid id="dgEmpInfo" runat="server" Width="100%" BorderWidth="1px" BackColor="#F7F7F7" BorderColor="#F7F7F7" CssClass="table" BorderStyle="Solid" AllowPaging="True" PageSize="8" AutoGenerateColumns="False" DataKeyField="empid" AllowSorting="True" DataSource="<%# EmpTB %>"> <AlternatingItemStyle BorderColor="White" BackColor="White"></AlternatingItemStyle>
<ItemStyle CssClass="textcenter" BackColor="#DEDFDE"></ItemStyle>
<HeaderStyle CssClass="headcenter"></HeaderStyle> <Columns>
<asp:HyperLinkColumn DataNavigateUrlField="EmpID" DataNavigateUrlFormatString="empbase.aspx?empid={0}" DataTextField="EmpName" SortExpression="EmpName" HeaderText="姓名"></asp:HyperLinkColumn>
<asp:BoundColumn DataField="LoginID" SortExpression="loginid" HeaderText="登录帐号"></asp:BoundColumn>
asp:BoundColumn DataField="Email" HeaderText="电子邮件"></asp:BoundColumn><asp:BoundColumn DataField="Officetel" HeaderText="办公电话"></asp:BoundColumn> <asp:BoundColumn DataField="mobile" HeaderText="移动电话"></asp:BoundColumn> <asp:BoundColumn DataField="simplecode" SortExpression="simplecode" HeaderText="机构"></asp:BoundColumn> <asp:BoundColumn DataField="DepName" SortExpression="depname" HeaderText="部门"></asp:BoundColumn><asp:HyperLinkColumn Text="&lt;img src=../img/edit.gif border=0 alt=更改、浏览此人员帐号信息 /&gt;" DataNavigateUrlField="empid"
DataNavigateUrlFormatString="empbase.aspx?empid={0}"></asp:HyperLinkColumn>
<asp:TemplateColumn> <ItemTemplate>
<asp:ImageButton id="Imagebutton2" runat="server" ImageUrl="../img/stoplogin.gif" AlternateText="停用此帐号"
CommandName="delete"></asp:ImageButton> </ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle PageButtonCount="14" Mode="NumericPages"></PagerStyle>
</asp:datagrid>

4、人员照片
1。EmpPhoto.aspx
本页面主要上方检索区和照片显示区,通过方检索区的选择,下方检索区的选择,下方将出现对应的人员照片。
。检索区的实现代码,机构和部门下拉列表通过dropdownlist控件实现,通过数据绑定,并分别设置Data ValueField和DataTexField属性。
<TD style="WIDTH: 54px" noWrap>机构名称
</TD>
<TD style="WIDTH: 95px"><asp:dropdownlist id=dropBranch runat="server" DataSource="<%# BraTB %>" AutoPostBack="True" DataValueField="branchid" DataTextField="simplecode" Height="23px" Width="120px" CssClass="td"></asp:dropdownlist></TD>
<TD style="WIDTH: 32px" noWrap>部门</TD>
<TD style="WIDTH: 72px"><asp:dropdownlist id=dropDep runat="server" DataSource="<%# DepTB %>" DataValueField="depid" DataTextField="DepName" Height="23px" Width="142px" CssClass="td" DESIGNTIMEDRAGDROP="110" AutoPostBack="True"></asp:dropdownlist></TD> <TD style="WIDTH: 59px" noWrap>姓名
</TD>
<TD style="WIDTH: 86px"><asp:textbox id="txtName" runat="server" Width="84px" CssClass="td"></asp:textbox></TD>
<TD>&nbsp;<asp:imagebutton id="cmdQuery" runat="server" ImageUrl="../img/button/query.gif"></asp:imagebutton>
</TD>
照片列表是通过DataGrid控件实现的,数据源设置EmpPhotoTB,分页,每页8条记录,每行显示5张人员照片,这是通过后台数据源进行处理的。ShowHeadER属性设置为false,表示不显示表头
<asp:datagrid id=dgdData runat="server" DataSource="<%# EmpPhotoTB %>" Height="80px" Width="100%" CssClass="td" BorderWidth="1px" BackColor="#F7F7F7" BorderColor="#F7F7F7" BorderStyle="Solid" CellSpacing="2" ShowHeader="False" AllowPaging="True" PageSize="6" AutoGenerateColumns="False">
<Columns><asp:BoundColumn DataField="Content1" ItemStyle-HorizontalAlign=Center>
</asp:BoundColumn><asp:BoundColumn DataField="Content2" ItemStyle-HorizontalAlign=Center>
</asp:BoundColumn>
<asp:BoundColumn DataField="Content3" ItemStyle-HorizontalAlign=Center>
</asp:BoundColumn>
<asp:BoundColumn DataField="Content4" ItemStyle-HorizontalAlign=Center>
</asp:BoundColumn><asp:BoundColumn DataField="Content5" ItemStyle-HorizontalAlign=Center>
</asp:BoundColumn></Columns>
<PagerStyle PageButtonCount="14" Mode="NumericPages"></PagerStyle>
</asp:datagrid>

EmpPhoto.aspx后台代码
后台代码主要完成页面机构下拉列表、部门下拉列表和照片列表控件的绑定。
。使用系统命名空间和业务逻辑层命名空间
using System;
using System.Data;
using qminoa.BLL;
。继承PageBase基类
namespace qminoa.Webs.MR
{
public class EmpPhoto : qminoa.Webs.PageBase
{
protected System.Web.UI.WebControls.DropDownList dropBranch;
protected System.Web.UI.WebControls.DropDownList dropDep;
protected System.Web.UI.WebControls.TextBox txtName;
protected System.Web.UI.WebControls.ImageButton cmdQuery;
protected System.Web.UI.WebControls.DataGrid dgdData;
页面载入处理方法。

private void Page_Load(object sender, System.EventArgs e)
{
this.PageBegin("人员照片",true);
if(!Page.IsPostBack)
{
DataBind();
}
}
该属性以DataTable格式返回所有的信息
public DataTable EmpPhotoTB
{
get
{
string[] array = new string[3];
array[0] = dropBranch.SelectedItem.Value;
array[1] = dropDep.SelectedItem.Value;
array[2] = txtName.Text;
DataTable empTB = (new EmpSystem()).GetEmpPhotoTB_By_QueryStr(array[0],array[1],array[2]);
return empTB ;
}
}

public DataTable BraTB
{
get
{
return (new DepSystem()).GetBraTB();
}
}

public DataTable DepTB
{
get
{
int branchID = Convert.ToInt32(dropBranch.SelectedItem.Value,10);
return (new DepSystem()).GetDepTB_By_BranchID(branchID);
}
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}


3.4系统管理模块设计
1. 登陆日志管理
登陆日志是系统管理的不可缺少的重要组成部分,系统管理员可通过登陆日志查看用户登陆信息,及时发现安全隐患,便于系统维护和管理。
用户通过身份验证进入系统后,单击一级菜单中的“系统管理”项,在其下出现的二级菜单栏,单击二级菜单栏中的“登陆日志”即可进入登陆日志模块,在主操作区将出现登陆日志信息,页面效果如图所示,实现页面是UserLog.aspx。数据访问层是由文件DbManagerLogininfo.cs提供日志信息服务的。涉及的文件有如下几个方面。
DA/sysSecurity/DbManagerLogininfo.cs:在数据访问层中,提供日志服务
Common/data/LogData.cs:在通用层中提供操作日志数据结构。
Common/Jscript.cs:在通用层中,提供利用JavaScript.
Common/StringUtil.cs: 在通用层中,提供字符串操作的函数集。
1.) 登陆日志页面UserLog.apsx
这页面主要是部分是运用一个DataGrid Web 服务控件,用于显示所有信息,一个CheckBox Web服务控件,用于选择当前页面的所有记录,一个ImageButton图象按钮Web服务控件,用于删除登陆日志操作。
从DataGrid控件的属性设置可以看出,此控件允许分页,每页记录数为8。
2.)serLog.apsx后台代码
后台代码主要完成DataGrid控件数据的绑定,选取页面所有记录操作,以及删除选定的记录。
页面的权限管理由基类直接提供,页面载入是,提供给基类页面模块名称,基类根据模块名称返回权限代码,页面根据权限代码控制用户的所有操作。如果用户对此模块不具备最底操作权限,则禁止用户进入页面,转到登陆页面;当用户进入模块后,用户的所有操作都要经过权限判断,不具备操作权限时,则给出提示页面,禁止用户使用。
继承PageBase基类
public class Userlog:qminoa.Webs.PaseBase
{
//web 服务控件声明
protected System.web.UI.WebControls.DataGrid DataGridLogininfo;
protected System.web.UI.WebControls.ImageButton Imgdel;
protected System.web.UI.WebControls.CheckBox CheckBox2;
protected System.web.UI.WebControls.Panl Panel;

2.管理操作日志
系统管理员可通过 操作日志查看数据库关键的记录信息及时的发现安全隐患,便于系统的维护和管理.
用户通过身份验证进入系统后,单击一级菜单中“系统管理“项,在其下出现二级菜单栏,单击二级菜单栏中的”操作日志“即可进入操作日志模块,在主操作区将出现操   作日志西欧年息,页面效果如图所示,实现页面OperationLog.aspx。数据访问层是由文件LogDB.cs提供操作日志信息服务的。

3.模块管理
模块管理是对系统中所有模块进行注册登记,使系统中的每个模块都能进行有效的权限管理.这个模块的每一个操作行为都能对应相应的权限级别,保证系统的安全无漏洞.
用户通过身份验证进入系统后,单击一级菜单中的“系统管理“项,在其下出现二级菜单栏,单击二级菜单中的”模块管理“,在主操作区将出现系统各模块的列表,页面效果如图所示,实现页面是moduleadmin.aspx。
2. 角色管理
该模块主要是对各个用户进行不同级别权限是设置,使用户和模块有机地对应起来,即可以使系统管理员方面简捷地进行管理,又使系统能够稳定安全地远行
用户通过身份验证进入系统后,单击一级菜单中的“系统管理“项,在其先面出现二级菜单栏,单击二级菜单中的”角色管理“即可进入角色管理模块,在主操作区将出现所有角色列表,页面效果如图所示,实现页面是roleadmin.aspx.
3. 用户管理
用户在安全模型的三层结构中处于最底层,向上直接和角色打交道.通过和不同的角色关联,从而获的不同权限.一般来说,每个用户都同时拥有几个不同角色,可以说,用户的权限就是这些不同角色权限的相加。如果同一模块在不同角色中都有权限定义的话,取的他们最高权限。
用户通过身份验证进入系统后,单击一级菜单中的“系统管理“项,在其先面出现二级菜单栏,单击二级菜单中的”用户管理“即可进入管理模块,在主要操作区将出现所有单位的下拉列表、单击下拉列表、单位下的部门列表,以及对应的用户列表,页面效果如图所示,实现页面是Useradmin.aspx.
4. 目录管理

由于办公自动化系统需求是根据应用环境的不同而动态变化的,因此在本系统中各个功能模块具有完全开放的特点,系统所有的二级目录都可以灵活定制.目录管理提供了对所有的二级目录集中管理,包括添加,修改,删除所有的二级目录集.
用户通过身份验证进入系统后,单击一级菜单中的“系统管理“项,在其先面出现二级菜单栏,单击二级菜单中的”目录管理“即可进入目录管理模块,在主操作区将出现目录列表,页面效果如图所示,实现页面是RegCatalog.aspx.

第四章 总结
l 试运行及调试
这个阶段的工作主要是实际运行人事管理系统应用程序,进入人事管理系统登录界面,输入正确的用户名和口令,单击确定进入主菜单。
在前一阶段,虽然也作了性能预测,但是仅仅做了性能估计,且在估计过程中,做了许多简化和假设,忽略了许多次要因素,因而估计是粗糙的,并可能失真。在试运行阶段,必须进行实际测量和评价,测试数据尽可能覆盖现实世界的各种情况。
如果实际测试结果不符合设计目标,则需返回物理设计阶段,修改参数。有时也许还需要返回初始阶段。
毕业设计是我大学毕业的最后一个课题,或许在某个方面是反映我这三年来的所学的成果。在开发这个系统的过程中,碰到很多的问题,有些是大的,而有些是很小的问题,只是自己没有仔细的看清楚,没有注意细节问题。不过在解决了问题后,却是不一样的心情,首先是让我放松了,毕竟是难题解决了。第二是充实了很多,因为在解决了问题的同时,我又学到了一点。
将人事关系作为我毕业设计的课题,是对我几年学习中理论知识和实践相结合的一次综合检验。通过这次毕业设计,开发本系统使我受益匪浅。
通过这次毕业设计,对应用ASP.net开发设计,我付出了大量的时间,但是,我得到的收获远远不是这些时间可以衡量的,它将是我终生的财富,必将给我今后的学习和工作带来更多的收益。通过对此课题的开发,使我对用ASP.net开发系统有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如声音不够清晰、文档组织不合理、帮助文档没有编写,用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请各位教员指导。
致谢
在本系统的开发过程中,得到了学校老师的热心帮助和支持,对系统操作流程提供了宝贵的意见,对系统的分析及程序编写中出现的错误提出了修改意见,给整个系统的开发和论文的写作提供了宝贵意见,使这个系统得以顺利的开发完毕,并完成最后的论文写作。对他们的无私帮助,我表示诚挚的感谢!

参考文献:

《ASP网络开发技术》(第二版)人民邮电出版社
《建设网站宝典》 人民邮电出版社出版发行 主编:李冬
《制作精品网页》 机械工业出版社出版发行 主编:黄明
《ASP程序设计》 中国水利水电出版社发行 主编:梁建武 陈语林

你可能感兴趣的:(数据库,datagrid,server,asp.net,asp,Hyperlink)