connectionString="server=.;database=dbChooseCourse;uid=ChooseCourse;
pwd=ChooseCourse"/>
......
8.6公共类的编写
开发项目中以类的形式来组织、封装一些常用的方法和事件,不仅可以提高代码的复用率,也大大方便了代码的管理。
在学生选课系统中共建了4个公共类,具体如下。
●Alert:
用于管理在项目中用到的多种页面跳转提示框,如直接跳转、提示信息并跳转等。
●Common:
用于管理在项目中用的公共类,如MD5加密,清除脚本等。
●DBBase:
用于管理在项目中对数据库的各种操作,如连接数据库、获取数据表DataTable等。
●RandomImg:
用于管理在项目组用到的获取随机验证码。
因为数据库操作类DBBase类在本书第七章(7.11数据库操作类DBBase简介和使用)中已经进行了详细的介绍。
下面主要介绍RandomImg类、Alert类和Common类的创建过程。
1.类的创建
在创建类时,用户可以在该项目中找到App_Code文件夹,如果项目中没有App_Code文件夹,用户可以在项目上单击鼠标右键,在弹出的菜单中选择“添加ASP.NET文件夹”,添加一个App_Code文件夹。
新建好文件夹后点击鼠标右键,在弹出菜单中选择“添加新项”,在弹出的“添加新项”对话框中选择“类”,并将其命名,单击“添加”按钮即可创建一个新类。
出现得窗口如图8-5所示(此处以创建RandomImg为例)。
图8-5“添加新项”对话框图
2.RamdomImg类(代码位置:
光盘/ElectiveSystem/App_Code/RandomImg.cs)
RamdomImg类主要完成一些与验证码相关的功能,比如生成随机验证码字符串、生成验证码的图片等等,其中主要方法包括GenerateCheckCode()、CreateCheckCodeImage(),下面我们将对这些方法分别进行详细讲解。
●GenerateCheckCode()方法
GenerateCheckCode方法用于在登入页面自动生成随机验证码。
其代码如下:
///
///生成验证码
///
///验证码字符串
publicstaticstringGenerateCheckCode()
{
intnumber;
charcode;
stringcheckCode=String.Empty;
System.Randomrandom=newRandom();
for(inti=0;i<5;i++)
{
number=random.Next();
if(number%2==0)
code=(char)('0'+(char)(number%10));
else
code=(char)('A'+(char)(number%26));
checkCode+=code.ToString();
}
returncheckCode;
}
●CreateCheckCodeImage(stringcheckCode)方法
CreateCheckCodeImage方法用于给生成的随机验证码加上背景图片。
其代码如下:
///
///生成验证码图片
///
///验证码字符串
publicstaticvoidCreateCheckCodeImage(stringcheckCode)
{
if(checkCode==null||checkCode.Trim()==String.Empty)
return;
System.Drawing.Bitmapimage=new
System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*12.5)),22);
Graphicsg=Graphics.FromImage(image);
//生成随机生成器
Randomrandom=newRandom();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for(inti=0;i<25;i++)
{
intx1=random.Next(image.Width);
intx2=random.Next(image.Width);
inty1=random.Next(image.Height);
inty2=random.Next(image.Height);
g.DrawLine(newPen(Color.Silver),x1,y1,x2,y2);
}
Fontfont=newSystem.Drawing.Font("Arial",12,
(System.Drawing.FontStyle.Bold|System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrushbrush=new
System.Drawing.Drawing2D.LinearGradientBrush(newRectangle(0,0,
image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true);
g.DrawString(checkCode,font,brush,2,2);
//画图片的前景噪音点
for(inti=0;i<100;i++)
{
intx=random.Next(image.Width);
inty=random.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);
System.IO.MemoryStreamms=newSystem.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ContentType="image/Gif";
System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
}
3.Alert类(代码位置:
光盘/ElectiveSystem/App_Code/Alert.cs)
Alert类用于管理在项目中用到的多种页面跳转,主要包括Show()方法、FramGo()方法、ShowAndFramGo()方法,下面进行详细介绍。
●Show方法
Show方法用于提示信息并返回原页面。
其代码如下:
///
///提示信息并返回原页面
///
///提示信息
publicstaticvoidShow(stringtext)
{
HttpContext.Current.Response.Write("alert('"+text+
"');window.history.back();");
HttpContext.Current.Response.End();
}
●ShowAndFramGo()方法
ShowAndFramGo()方法用于提示信息并跳转页面(用于框架页)。
其代码如下:
///
///提示信息并跳转页面(用于框架页)
///
///提示信息
///要跳转的目标页面
publicstaticvoidShowAndFramGo(stringtext,stringurl)
{
HttpContext.Current.Response.Write("alert('"+text+
"');window.top.location='"+url+"';");
}
●FramGo()方法
FramGo()方法用于跳转页面(用于框架页)。
其代码如下:
///
///跳转页面
///
///目标页面的路径
publicstaticvoidFramGo(stringurl)
{
HttpContext.Current.Response.Write("");
}
4.Common类(代码位置:
光盘/ElectiveSystem/App_Code/Common.cs)
Common类主要用于管理在项目中用到的公共方法,主要包括MD5()方法、InputText()方法、GetMapPath()方法、UploadPicFile()方法。
下面详细介绍Common类中的方法。
●MD5(stringInput,boolHalf)方法
MD5类用于字符串加密。
其代码如下:
///
///MD5加密字符串处理
///
///加密是16位还是32位;如果为true为16位
///待加密码字符串
///MD5加密结果
publicstaticstringMD5(stringInput,boolHalf)
{
stringoutput=
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Input,
"MD5").ToLower();
if(Half)//16位MD5加密(取32位加密的9~25字符)
output=output.Substring(8,16);
returnoutput;
}
●InputText(stringtext)方法
InputText类用于删除脚本。
其代码如下:
///
///清除所有脚本
///
///输入要进行清除字符串
///返回清除过脚本后的字符串
publicstaticstringInputText(stringtext)
{
if(string.IsNullOrEmpty(text))
returnstring.Empty;
text=Regex.Replace(text,"[\\s]{2,}","");//twoormorespaces
text=Regex.Replace(text,"(<[b|B][r|R]/*>)+|(<[p|P](.|\\n)*?
>)","\n");//
text=Regex.Replace(text,"(\\s*&[n|N][b|B][s|S][p|P];\\s*)+","");//
text=Regex.Replace(text,"<(.|\\n)*?
>",string.Empty);//anyothertags
text=text.Replace("'","''");
returntext;
}
●GetMapPath(stringstrPath)方法
GetMapPath()方法用于获取当前的绝对地址。
其代码如下:
///
///获得当前绝对路径
///
///指定的路径
///绝对路径
publicstaticstringGetMapPath(stringstrPath)
{
if(HttpContext.Current!
=null)
{
returnHttpContext.Current.Server.MapPath(strPath);
}
else//非web程序引用
{
strPath=strPath.Replace("/","\\");
if(strPath.StartsWith("\\"))
{
strPath=strPath.Substring(strPath.IndexOf('\\',1)).TrimStart('\\');
}
returnSystem.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
strPath);
}
}
●UploadPicFile(System.Web.UI.WebControls.FileUploadfileUpload,string
pathDir,stringfirstMark)方法
UploadPicFile()方法用于上传图片。
其代码如下:
///
///图片上传
///
///图片路径
///保存图片路径
///前缀名
///返回上传结果
publicstaticstringUploadPicFile(System.Web.UI.WebControls.FileUploadfileUpload,
stringpathDir,stringfirstMark)
{
stringfileName="";
stringretValue="";
try
{
stringtype=
"image/pjpeg|image/jpeg|image/bmp|image/gif|application/x-shockwave-flash|
image/png|application/msword|application/vnd.ms-excel";
boolallowType=type.Contains(fileUpload.PostedFile.ContentType.ToString());
stringlocalExp=fileUpload.PostedFile.ContentType.ToString().Substring
(fileUpload.PostedFile.ContentType.ToString().LastIndexOf("/")+1);
if(allowType)
{
if((fileUpload.PostedFile.ContentLength/1024)>ImagesMaxSize)
{
retValue="error:
对不起!
你上传的文件大小大于了"+
ImagesMaxSize.ToString()+"KB";
}
else
{
stringexpStr=
fileUpload.PostedFile.FileName.Substring
(fil