基于ASP.NET的士兵档案管理系统的设计开发
2010-09-07郑州市消防支队代凤华李光明宋恩杰
郑州市消防支队 代凤华 李光明 宋恩杰 白 伟
基于ASP.NET的士兵档案管理系统的设计开发
郑州市消防支队 代凤华 李光明 宋恩杰 白 伟
士兵档案管理是一项耗时、繁琐且又严谨的工作,笔者所在单位的计算机和办公网络已非常普及,但急需一款兵员档案管理软件,依托地方公司开发软件开发周期长费用高,且不一定符合部队的实际情况。受单位委托,笔者主持了网络版士兵档案管理系统的设计和开发工作,用于记录士兵的基本信息、奖惩、训练和量化考核等数据,已能够满足警务和战训工作需要。
一、系统开发关键技术
系统设计基于B/S模式,ASP.NET构架由Microsoft Visual Studio 2005环境开发,编程语言使用C#.Net 1.0,数据库使用Microsoft sql server 2000,界面编辑使用Macromedia dreamware V8.0,图片编辑软件使用Macromedia photoshop 8.01。
1.Browser/Server模式。B/S采用三层体系结构,即表示层Browser、功能层Web service和数据库服务层DataBase service。使用IIS架设Web站点。ASP.Net通过ADO.Net访问数据库,数据库的访问和应用程序的执行均在Web服务器端完成,客户端无须安装任何软件,通过浏览器即可访问Web服务器并运行程序。采用这种体系结构的系统可以充分利用服务器资源,提供跨平台、简单一致的应用环境,实现开发环境与应用环境的分离,减少系统开发和维护的工作量。
2.ASP.NET。ASP.NET是创建动态WEB的一种强大的服务器端技术,其建立于通用语言编译执行的程序构架,通用语言的基本库、消息机制、数据接口的处理都能无缝整合到ASP.NET的WEB应用中,克服了ASP依靠服务器对脚本解释执行造成的代码逻辑混乱、可重用性差和潜在的出错可能。作为设计动态网站和开发B/S模式的应用软件,ASP.NET是一个很好的选择。
3.C#.NET。C#编程语言是由微软公司专门为.NET平台设计的语言,由C、C++和Java发展而来,能快捷和方便地开发数据库、Windows应用程序、Web应用程序、图形设计、图像处理以及多媒体技术等内容。
二、系统主要功能模块
开发士兵档案管理系统的目的,是建立一个具有良好人机交互界面的平台,可高效地管理兵员档案信息。开发成功后的系统界面如图1所示。
1.设置模块。
(1)权限设置。设置系统登录账户、密码和操作权限。登录账户分超级账户和普通账户,超级账户具有绝对的操作权限,可管理所有单位的士兵档案,普通账户只能管理本单位的士兵档案信息。如A单位的管理账户只能对属于A单位的兵员信息进行管理和查询,对B、C、D等单位的士兵档案则无权查看。
(2)属性设置。设置士兵档案的所有基本信息项目,包括士兵姓名、籍贯、入伍时间、个人简历、培训记录、奖惩记录和训练成绩等,由超级账户根据需要定制士兵档案具体项目组成,并可结合实际进行添加、修改和删除操作,非常的智能和便捷。且此功能的实现也是该系统开发时的一个难点所在。
(3)成绩设置。用于添加士兵训练项目,系统管理员根据不同时期士兵的训练内容,添加相应的项目信息,由普通账户添加本单位的士兵训练成绩,超级管理员可随时调阅和统计。
2.管理模块。
超级账户和普通账户除了可以对士兵档案内的基本信息进行管理外,系统还设计了以下一些功能。
(1)工作调动。如一名士兵从A单位调动到B单位,由超级账户操作完成,并在该士兵的档案内产生一个调动记录。
(2)训练成绩。记录士兵不同时间段的训练情况,超级账户负责设置训练项目,由普通账户负责录入训练成绩。
(3)退伍管理。由系统管理员对退出现役的士兵进行归类,并从所属单位中删除,被删除的士兵信息归入专门项目、可供查询。
(4)外借管理。记录士兵探亲、休假、因公外出等的情况。
(5)量化管理。记录士兵每月的量化考核成绩,由普通账户输入,超级账户可查询、统计和修改。
3.查询设置。
(1)基本信息查询。用于查询符合某一类或几类项目信息的士兵情况。如查询支队所有河南籍士兵人数只需要在籍贯查询栏目内输入河南,点击查询即可得到符合条件的所有士兵。如查询同时符合河南籍、B型血、三级士官的士兵,在相应的项目输入和选择后点击查询即可得到相应的结果。
(2)退伍信息查询。查询已退出现役的士兵信息。
(3)外借信息查询。查询探亲、休假、因公外出的士兵信息及起止时间。
(4)量化考核查询。查询士兵年、月量化考核成绩并评定档次。
(5)训练成绩查询。查询单个士兵某个时间段的训练成绩或某个项目所有士兵的训练成绩。
(6)档案信息查询。查询系统内记录的士兵实体档案和文件信息等。
(7)打印查询信息。对符合某一条件或某些条件的查询结果,可生成Excel文件进行打印。
三、关键技术的实例代码
1.数据库行转列功能的实现。开发士兵档案管理系统的技术难点在于模拟数据库行转列,在数据库中,一行是一条记录,而一列是多条记录,为使数据库表的设计具有属性设置的功能,实现士兵档案属性字段的动态添加、修改、删除操作,把数据库表中字段的增加转化为记录条数的增加。设计思路为建表net_filed(见表1)和表net_mans(见表2),表net_filed记录字段属性,表net_mans记录士兵档案属性。表net_filed中每添加一条记录,表net_mans中就相应添加一个字段,满足士兵的信息属性按需添加、修改、删除,并且也可以根据字段所属(toclass字段)
表1 net_filed
表2 net_mans
上级关系进行级联操作。
程序代码如下:
switch(Request.QueryString("filedtype"))//根据要添加字段的类型,选择不同的addsql语句
{
case 0:
addsql="alter tablenet_mans add "& Request.QueryString("enfiled")&"varchar(50)";
break;
case 1:
addsql="alter table net_mans add "& Request.QueryString("enfiled")&" datetime";
break; case 2:
addsql="alter table net_mans add "& Request.QueryString("enfiled")&" int";
break;
case 3
addsql="alter table net_mans add "& Request.QueryString("enfiled")&" varchar(255)" ;
break;
}
根据选择字段条件的不同,分别对文本、日期、整数、多文本等类型进行添加字段。
2.对行转列生成的表进行查询。由于士兵档案的项目是可以随时添加、修改和删除的,所以项目的属性是不固定的,搜索的sql语句也不相同。解决办法是把net_filed表中的字段全部罗列出来,将request中的变量及值全部记入session中。如果session(request变量)的值不为空,则sql语句追加该项。代码如下:
String sesql="";//初始sql语句
string mySel=" select * from net_filed order by rank asc ";
DbCommand myCmd1=new DbCommand(mySel,myConn);
myCmd1.Connection.Open();
DbDataReaderDr1;
Dr1=myCmd1.ExecuteReader();
I(fDr1.Read()){//从net_filed中取出士兵属性字段
while(Dr1.Read()){
i(fsession(""&rs(t"enfiled")&"")!=””){//如果form中的选项不为空,就表示该项有搜索条件。
switch(Dr1["filedtype"]){//根据字段的文本、日期、数字等不同的属性,生成不同的sql语句。
case 0
sesql=sesql+""&rst("enfiled")&"like '%"&session(""&rst("enfiled")&"")&"%'and "
break;
case 1
sesql=sesql+""&rst("enfiled")&" = "&session(""&rst("enfiled")&"")&" and "
break;
case 2
i(fsession(""&rs(t"enfiled")&"")<>0){
sesql=sesql+""&rst("enfiled")&" = "&session(""&rst("enfiled")&"")&" and ";
}
break;
……
}
}
}
};
sesql=sesql.Trim();
3.对行转列生成的表进行添加操作。添加士兵档案代码,与查询代码设计思路大体相同,Form中的项目与net_mans中的字段项目相同,有内容即添加,无内容则不操作。
book=358,ebook=358