<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; y19870621</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/y19870621/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 14:23:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>基于VC的色温图效果的实现（二）</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/04/19/vc-4/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/04/19/vc-4/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 08:00:20 +0000</pubDate>
		<dc:creator>y19870621</dc:creator>
				<category><![CDATA[图形和视觉计算]]></category>
		<category><![CDATA[开放源代码]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/04/19/vc-4/</guid>
		<description><![CDATA[本文接着“基于VC的色温图效果的实现（一）”继续讨论实现色温图的第二种方法 二 排序法 排序法不需要对数据作任何的加减运算，也不需要求出数据的最大值和最小值，而是仅仅对无序的数据进行排序，然后将RGB值0-255按数据从大到小进行映射，之后再将数据恢复压来的无序状态，但这时每个数据已经有对应的RGB值了，最后按数组的索引值依次画出。 在具体实现的时候，关键的一点是除了保存数值以外，还要保存排序前后每个数值所对应的数组索引值，因为排序的目的仅仅是为了映射RGB值方便，最终，还是要恢复原来数组的顺序，所以保存索引值是关键。 笔者在实现过程中使用了一个二维数组Temp[2][*]，Temp[0][*]中存储数据，而Temp[1][*]中存储Temp[0][*]对应的索引值。主要代码如下： sort(int x[], int n) //排序并记录排序前后的索引值 { int i,j,t0,t1,isChange=0; int temp[2][Num]={0}; //Num为数据的个数 for (i=0;i&#60; Num;i++) { temp[0][i]=i; temp[1][i]=x[i]; } for (i=0;i&#60;n-1;i++) { for (j=i+1;j&#60;n;j++) { if (temp[1][i]&#60;temp[1][j]) { t0=temp[0][i]; t1=temp[1][i]; temp[0][i]=temp[0][j]; temp[1][i]=temp[1][j]; temp[0][j]=t0; temp[1][j]=t1; record[0][i]=temp[0][i]; isChange=1; } } if (isChange==0) { record[0][i]=temp[0][i]; } isChange=0; if (i==n-2) { record[0][i+1]=temp[0][i+1]; } record[1][i]=temp[1][i]; [...]]]></description>
			<content:encoded><![CDATA[<p>本文接着“基于VC的色温图效果的实现（一）”继续讨论实现色温图的第二种方法<br />
二 排序法<br />
排序法不需要对数据作任何的加减运算，也不需要求出数据的最大值和最小值，而是仅仅对无序的数据进行排序，然后将RGB值0-255按数据从大到小进行映射，之后再将数据恢复压来的无序状态，但这时每个数据已经有对应的RGB值了，最后按数组的索引值依次画出。<br />
在具体实现的时候，关键的一点是除了保存数值以外，还要保存排序前后每个数值所对应的数组索引值，因为排序的目的仅仅是为了映射RGB值方便，最终，还是要恢复原来数组的顺序，所以保存索引值是关键。<br />
笔者在实现过程中使用了一个二维数组Temp[2][*]，Temp[0][*]中存储数据，而Temp[1][*]中存储Temp[0][*]对应的索引值。主要代码如下：<br />
sort(int x[], int n)   //排序并记录排序前后的索引值<br />
{<br />
int i,j,t0,t1,isChange=0;<br />
int temp[2][Num]={0}; //Num为数据的个数<br />
for (i=0;i&lt; Num;i++)<br />
{<br />
temp[0][i]=i;<br />
temp[1][i]=x[i];<br />
}<br />
for (i=0;i&lt;n-1;i++)<br />
{<br />
for (j=i+1;j&lt;n;j++)<br />
{<br />
if (temp[1][i]&lt;temp[1][j])<br />
{<br />
t0=temp[0][i];<br />
t1=temp[1][i];<br />
temp[0][i]=temp[0][j];<br />
temp[1][i]=temp[1][j];<br />
temp[0][j]=t0;<br />
temp[1][j]=t1;<br />
record[0][i]=temp[0][i];<br />
isChange=1;<br />
}</p>
<p>}<br />
if (isChange==0)<br />
{<br />
record[0][i]=temp[0][i];<br />
}<br />
isChange=0;<br />
if (i==n-2)<br />
{<br />
record[0][i+1]=temp[0][i+1];<br />
}<br />
record[1][i]=temp[1][i];<br />
}<br />
}<br />
MapColor(int n)   //映射RGB值<br />
{<br />
int temp=n/256;</p>
<p>for (int i=0;i=256)<br />
{<br />
record[1][i]=255;<br />
}<br />
else<br />
{<br />
record[1][i]=i/temp;<br />
}</p>
<p>}<br />
}<br />
resort(int n)  //重新排序<br />
{<br />
int i,j,t0,t1;</p>
<p>for (i=0;i&lt;n-1;i++)<br />
{<br />
for (j=i+1;jrecord[0][j])<br />
{<br />
t0=record[0][i];<br />
t1=record[1][i];<br />
record[0][i]=record[0][j];<br />
record[1][i]=record[1][j];<br />
record[0][j]=t0;<br />
record[1][j]=t1;<br />
}<br />
}<br />
}<br />
}<br />
实现效果<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2011/02/clip_image0022.gif"><img class="aligncenter size-full wp-image-400006830" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2011/02/clip_image0022.gif" alt="" width="553" height="375" /></a><br />
三 两种方法的比较：<br />
差值法存在一定的误差，细化空间的分辨率可以减小此误差，但效果不明显。本质在于数据向像素映射的方法存在根本缺陷。差值法的误差与数据有密切关系，如果数据是均匀分布的，则画出色温图的误差会大大减低，并且有可能避免；但是，如果计算出的数据分布过于密集并且不均匀，则误差会随数据不均匀的程度的增加而增加；排序法可以有效的改进差值法，对于不均匀的数据有一定的处理能力，不过实现起来差值法比较直观且容易实现，而排序法比较抽象实现起来稍显复杂。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/04/19/vc-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于VC的色温图效果的实现（一）</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/09/16/vc-2/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/09/16/vc-2/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 03:34:37 +0000</pubDate>
		<dc:creator>y19870621</dc:creator>
				<category><![CDATA[图形和视觉计算]]></category>
		<category><![CDATA[开放源代码]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/09/16/vc-2/</guid>
		<description><![CDATA[在实际生活中，常常会遇到需要处理大量数据的情况，而且很多时候我们并不关心每一个数据是怎样的，仅仅只关心这些数据的变化趋势。为了能够更加直观地反映出数据的变化趋势，人们会用某一种颜色的渐变过程来代表数据的渐变过程，比如在地理课本中经常看到的气压图，或是天气预报中的温差图等等。最近，笔者也是在做一个VC的项目时，体会到用色温图来反映数据变化的优势之处，在这里把用VC实现色温图的方法做一总结。 我们就以天气预报中的温差图为例。假设已经获得了某市区A及其周边地区的天气温度的数据，并存放在数组Temp中。现在不关心某个具体的位置的气温值，，而是想要从整体上统计气温的分布状况，所以可以用色温图来描述。在具体的实现过程中，笔者使用两种方法，差值法和排序法，这两种方法各有利弊。首先介绍第一种方法。 一 差值法 在VC中，每种颜色的RGB值的取值范围为0-255，也就是说颜色的渐变有256种选择，对于大量的数据而言，显然256是远远不够用的，差值法可以弥补这个缺陷，它的主要思想就是： 首先找出数组Temp中的最大值Max和最小值Min，然后求出两者的差值D=Max-Min，将D分成255等份，每一份就是我们要求的间隔Interval=D/255。得到Interval后，就可以将Temp中的每一个数据映射称为RGB值，如果两个数据相差很小，那么将被映射为同一个RGB值。具体的做法是将Temp中的值遍历一遍，每次都用（Data-Min）/Interval得到的就是RGB值 主要代码： 第一步，找出Max和Min 相信学过C语言的人对于这一步一定驾轻就熟，找出数组中的最大值和最小值有很多方法，比如冒泡法、插入法等，笔者使用下面的方法获得最大值和最小值 PMax=Temp[0]; for (i=0;iPMax) { PMax= Temp[i]; } } PMin= Temp[0]; for (i=0;i&#60; Num;i++) { if (Temp[i]&#60;PMin) { PMin= Temp[i]; } } 第二步，映射RGB值 for ( i=0;iFillRect(&#38;rect,&#38;brush); } 实现效果]]></description>
			<content:encoded><![CDATA[<p>在实际生活中，常常会遇到需要处理大量数据的情况，而且很多时候我们并不关心每一个数据是怎样的，仅仅只关心这些数据的变化趋势。为了能够更加直观地反映出数据的变化趋势，人们会用某一种颜色的渐变过程来代表数据的渐变过程，比如在地理课本中经常看到的气压图，或是天气预报中的温差图等等。最近，笔者也是在做一个VC的项目时，体会到用色温图来反映数据变化的优势之处，在这里把用VC实现色温图的方法做一总结。<br />
我们就以天气预报中的温差图为例。假设已经获得了某市区A及其周边地区的天气温度的数据，并存放在数组Temp中。现在不关心某个具体的位置的气温值，，而是想要从整体上统计气温的分布状况，所以可以用色温图来描述。在具体的实现过程中，笔者使用两种方法，差值法和排序法，这两种方法各有利弊。首先介绍第一种方法。<br />
一 差值法<br />
在VC中，每种颜色的RGB值的取值范围为0-255，也就是说颜色的渐变有256种选择，对于大量的数据而言，显然256是远远不够用的，差值法可以弥补这个缺陷，它的主要思想就是：<br />
首先找出数组Temp中的最大值Max和最小值Min，然后求出两者的差值D=Max-Min，将D分成255等份，每一份就是我们要求的间隔Interval=D/255。得到Interval后，就可以将Temp中的每一个数据映射称为RGB值，如果两个数据相差很小，那么将被映射为同一个RGB值。具体的做法是将Temp中的值遍历一遍，每次都用（Data-Min）/Interval得到的就是RGB值<br />
主要代码：<br />
第一步，找出Max和Min<br />
相信学过C语言的人对于这一步一定驾轻就熟，找出数组中的最大值和最小值有很多方法，比如冒泡法、插入法等，笔者使用下面的方法获得最大值和最小值<br />
PMax=Temp[0];<br />
for (i=0;iPMax)<br />
{<br />
PMax= Temp[i];<br />
}<br />
}<br />
PMin= Temp[0];<br />
for (i=0;i&lt; Num;i++)<br />
{<br />
if (Temp[i]&lt;PMin)<br />
{<br />
PMin= Temp[i];<br />
}<br />
}<br />
第二步，映射RGB值<br />
for (  i=0;iFillRect(&amp;rect,&amp;brush);<br />
}<br />
实现效果<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/17.jpg"><img class="aligncenter size-full wp-image-400005882" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/17.jpg" alt="" width="554" height="376" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/09/16/vc-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>自动提款机模拟软件</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/09/09/400005717/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/09/09/400005717/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 02:50:22 +0000</pubDate>
		<dc:creator>y19870621</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[开放源代码]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/09/09/400005717/</guid>
		<description><![CDATA[学习编程语言，最好的方法就是多实践，在实践中发现问题，并逐渐熟练语言的使用。最近又做了一个小软件，练习对C#.NET和SQL Sever的使用。这个软件是仿照银行ATM的运行界面，凭正确的卡号和密码进入系统（若输入密码错误次数达到上限，锁定帐号），并具有取款、存款、转账、查询余额、修改密码等功能；除客户以外，还要有管理员可以进入系统，并可以进行一定的管理操作（包括开户、销户、修改密码等操作）。 1 拓扑图 系统的主体是由客户系统和管理员系统组成，在这两个系统中分别设计了若干模块，以实现预定的功能。 客户和管理员都必须凭借正确的帐号和密码才能进入系统，他们分别拥有不同的使用权限。客户可以在ATM系统享受存款、转帐、取款、修改密码、查询余额等服务，而管理在ATM系统中可以进行开户、销户、修改密码等操作。模拟现实生活中的ATM取款机，为保证安全性，客户在取款时是有时间限制的，如果超过30秒客户没有取走现金，系统将自动收回现金并同时退出系统。 2 模块流程图 2.1客户系统模块 2.2管理员系统模块 3 数据库设计 因为设计的主要部分是客户系统和管理员系统，为保存客户及管理员的各项信息，需要建立一个数据库。在这个数据中要建立两张表，即客户基本信息表(Customer)和管理员基本信息表(Customer)。表中包含的信息及类型如下所示 3.1 客户基本信息 3..2 管理员基本信息 4 主要代码设计 4.1登陆界面的代码 private void button1_Click(object sender, EventArgs e) { tran = CusId.Text; string sql = "SELECT * FROM Customer WHERE CusID='" + CusId.Text.Trim() + "'AND Password='" + CusPwd.Text.Trim() + "'"; if (OperateDB.ExecuteReader(sql)) { Sname = CusId.Text; int [...]]]></description>
			<content:encoded><![CDATA[<p>学习编程语言，最好的方法就是多实践，在实践中发现问题，并逐渐熟练语言的使用。最近又做了一个小软件，练习对C#.NET和SQL Sever的使用。这个软件是仿照银行ATM的运行界面，凭正确的卡号和密码进入系统（若输入密码错误次数达到上限，锁定帐号），并具有取款、存款、转账、查询余额、修改密码等功能；除客户以外，还要有管理员可以进入系统，并可以进行一定的管理操作（包括开户、销户、修改密码等操作）。<br />
1 拓扑图<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/拓扑图1.bmp"><img class="aligncenter size-full wp-image-400005714" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/拓扑图1.bmp" alt="" /></a><br />
系统的主体是由客户系统和管理员系统组成，在这两个系统中分别设计了若干模块，以实现预定的功能。<br />
客户和管理员都必须凭借正确的帐号和密码才能进入系统，他们分别拥有不同的使用权限。客户可以在ATM系统享受存款、转帐、取款、修改密码、查询余额等服务，而管理在ATM系统中可以进行开户、销户、修改密码等操作。模拟现实生活中的ATM取款机，为保证安全性，客户在取款时是有时间限制的，如果超过30秒客户没有取走现金，系统将自动收回现金并同时退出系统。<br />
2 模块流程图<br />
2.1客户系统模块<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/客户系统.bmp"><img class="aligncenter size-full wp-image-400005715" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/客户系统.bmp" alt="" /></a><br />
2.2管理员系统模块<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/管理员.bmp"><img class="aligncenter size-full wp-image-400005716" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/管理员.bmp" alt="" /></a><br />
3 数据库设计<br />
因为设计的主要部分是客户系统和管理员系统，为保存客户及管理员的各项信息，需要建立一个数据库。在这个数据中要建立两张表，即客户基本信息表(Customer)和管理员基本信息表(Customer)。表中包含的信息及类型如下所示<br />
3.1 客户基本信息<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/1.bmp"><img class="aligncenter size-full wp-image-400005718" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/1.bmp" alt="" /></a><br />
3..2 管理员基本信息<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/2.bmp"><img class="aligncenter size-full wp-image-400005719" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/09/2.bmp" alt="" /></a><br />
4 主要代码设计<br />
4.1登陆界面的代码<br />
private void button1_Click(object sender, EventArgs e)<br />
{<br />
tran = CusId.Text;<br />
string sql = "SELECT * FROM Customer WHERE CusID='" + CusId.Text.Trim() +<br />
"'AND Password='" + CusPwd.Text.Trim() + "'";<br />
if (OperateDB.ExecuteReader(sql))<br />
{<br />
Sname = CusId.Text;<br />
int d = Convert.ToInt32(CusId.Text.Trim());<br />
Ma = d;<br />
int c = Convert.ToInt32(CusPwd.Text.Trim());<br />
a = c;<br />
CtmServers frmTmp = new CtmServers();<br />
frmTmp.Show();<br />
this.Hide();<br />
}<br />
else<br />
{<br />
MessageBox.Show("用户名或密码不正确，请重试！", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);<br />
}<br />
}<br />
4.2取款界面代码<br />
private void button3_Click(object sender, EventArgs e)<br />
{<br />
string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\AgrATM.mdf;Integrated Security=True;User Instance=True";<br />
SqlConnection conn = new SqlConnection(connString);<br />
conn.Open();<br />
string d = "SELECT Money FROM Customer WHERE CusID='" + CustomersLogin.Sname + "'";<br />
xianshi = textBox1.Text;<br />
timer1.Enabled = true;<br />
SqlCommand cmd = new SqlCommand(d, conn);<br />
SqlDataReader dr = cmd.ExecuteReader();<br />
if (dr.Read())<br />
{<br />
decimal yue = Convert.ToDecimal(dr[0]);<br />
decimal je = Convert.ToDecimal(textBox1.Text.Trim());<br />
dr.Close();<br />
if (yue &gt;= je)<br />
{<br />
decimal moneyLeft = yue - je;<br />
string ssql = "Update Customer set Money='" + moneyLeft + "'where CusID='" + CustomersLogin.Sname + "'";<br />
SqlCommand q = new SqlCommand(ssql, conn);<br />
int i = q.ExecuteNonQuery();<br />
if (i == 1)<br />
{<br />
jine = textBox1.Text;<br />
//30秒倒几倒计时<br />
textBox2.Text = "30";<br />
timer1.Enabled = true;<br />
MessageBox.Show("取钱成功。");<br />
//弹出窗体<br />
this.Visible = false;<br />
new TakeMoney().Show();<br />
int t = Convert.ToInt32(textBox2.Text);<br />
if (t &lt;= 1)<br />
{<br />
decimal moneyLeft2 = yue;<br />
string jishi = "Update Customer set Money='" + moneyLeft2 + "'where CusId='" + CustomersLogin.Sname + "'";<br />
SqlCommand tt = new SqlCommand(jishi, conn);<br />
MessageBox.Show("您已经超过时间，系统收回取款，将自动关闭。");</p>
<p>Application.Exit();<br />
}<br />
}<br />
else<br />
{<br />
MessageBox.Show("您的输入有误，请重试！", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);<br />
}<br />
this.Visible = false;<br />
new TakeMoney().Show();<br />
}<br />
else<br />
{<br />
MessageBox.Show("您的余额不足，请重新操作。", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);<br />
textBox1.Text = "";<br />
}<br />
}<br />
}<br />
else<br />
{<br />
MessageBox.Show("您的输入有误，请重试！", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);<br />
}<br />
this.Visible = false;<br />
new TakeMoney().Show();<br />
}<br />
else<br />
{<br />
MessageBox.Show("您的余额不足，请重新操作。", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);<br />
textBox1.Text = "";<br />
}<br />
}<br />
}</p>
<p>private void timer1_Tick(object sender, EventArgs e)<br />
{<br />
textBox2.Text =Convert.ToString(Convert.ToInt32(textBox2.Text) - 1);<br />
}<br />
}<br />
4.3 修改密码代码<br />
int b = Convert.ToInt32(textBox1.Text.Trim());<br />
if (b == CustomersLogin.a)<br />
{<br />
if (textBox2.Text.Trim() == textBox3.Text.Trim())<br />
{<br />
if (OperateDB.ExecuteNonQuery("UPDATE Customer SET Password='" + textBox2.Text.Trim() + "' WHERE CusID='" + CustomersLogin.Sname + "'") == 1)<br />
{<br />
MessageBox.Show("密码修改成功！");<br />
}<br />
}<br />
else<br />
{<br />
MessageBox.Show("两次输入的密码不一致！");<br />
textBox1.Text = "";<br />
textBox2.Text = "";<br />
textBox3.Text = "";<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/09/09/400005717/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于.NET的考试报名系统的设计与实现</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/09/01/net/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/09/01/net/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 03:53:21 +0000</pubDate>
		<dc:creator>y19870621</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[可管理性]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[英特尔® 软件网络 2.0]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/09/01/net/</guid>
		<description><![CDATA[摘要：针对时下大学生参加各种各样的考试，大量报名信息迅速增长的问题，为便于管理这些数据，运用ASP.NET技术和Microsoft SQL Server2005设计开发了考试报名系统，帮助缓解高校教务管理的压力。该系统主要包括用户模块和管理员模块，可以完成对报名信息的录入、查询、修改、统计和打印等功能。用户注册成功后便可使用系统的主要功能完成个人的考试报名工作。]]></description>
			<content:encoded><![CDATA[<p>摘要：针对时下大学生参加各种各样的考试，大量报名信息迅速增长的问题，为便于管理这些数据，运用ASP.NET技术和Microsoft SQL Server2005设计开发了考试报名系统，帮助缓解高校教务管理的压力。该系统主要包括用户模块和管理员模块，可以完成对报名信息的录入、查询、修改、统计和打印等功能。用户注册成功后便可使用系统的主要功能完成个人的考试报名工作。<br />
关键词：考试报名系统  ASP.NET  Microsoft SQL Server2005<br />
Design and Implementation of Examination Register System Based on .NET<br />
Abstract: At present,the college students participate in various kinds of test, and lots of registration information are increasing faster and faster, to manage these data conveniently, applying ASP.NET technology and Microsoft SQL Server2005 design and develop the Examination Register System, it can help ease the pressure of college educational administration management. This system ,mainly including user module and manager module, , can complete these functions as follows:. After successfully registered, users can use the main function of the system to completed individual.<br />
Keywords: Examination Register System  ASP.NET  Microsoft SQL Server2005<br />
0引言<br />
当今社会，各式各样的考试琳琅满目，托福、大学英语四六级考试（CET）、全国计算机等级考试（NCRE）、会计师资格认证等，通过参加考试可以获得相应的资格证书。而随着信息时代的高速发展，职场竞争越演越烈，当今高校毕业生面临着巨大的就业压力，大学生们都自嘲：毕业就等于失业。为了使自己能够在人山人海的招聘会中脱颖而出，很多学生选择在校期间参加各类认证考试来提升自己的价值，因而，随之带来的是大量的考试报名信息迅速增长，增加了高效教务管理的繁重程度，而且现在许多考试，如英语四六级、计算机等考等，在校学生都可以多次参加，但学生的报名信息基本不变，所以冗余信息量也成倍的增长。考试报名系统（Examination Register System，以下简称ERS）很好的解决了这一现状，使各种考试报名工作变得高效、便捷。<br />
1系统概述<br />
ERS采用面向对象的ASP.NET技术搭建B/S体系结构，使用户在有网络的地方，登陆网页就可以方便使用该系统完成报名工作。同时，结合关系型数据库管理系统MS SQL Server2005作为管理和存储数据的数据库。SQL Server2005可以提供完整的用户解决方案，并且可以很好地支持B/S模式，同时，也将.NET Framework CLR集成到数据库引擎中，使其在.NET平台上开发具有更高的效率。该系统主要解决当前考试报名的人数多，信息量大，管理复杂的问题，并旨在为用户提供一个友好的界面，使报名和管理工作相对轻松。用户使用之前需要先注册用户名和密码，然后登陆系统填写报名信息，具体流程如图：<br />
2系统运行环境<br />
服务器端：<br />
操作系统 Windows Server 2003 SP1或更高版本<br />
数据库：Microsoft SQL Server2005<br />
Internet信息服务：IIS6.0及以上版本<br />
客户机端：<br />
操作系统 Windows XP SP2或更高版本<br />
浏览器：IE6.0及以上或其他浏览器<br />
3数据库设计<br />
3.1需求分析：<br />
考试报名系统数据库（ERSDB.mdf）中需要存储两类信息，即用户信息和管理员信息。用户信息又细分为注册信息和报名信息。对目前考试报名工作中所需的信息进行调查和统计，用户需要向数据库提供姓名、性别、身份证号、照片、联系方式等个人信息，同时，学校为了便于统计和管理，以及便于日后准考证的派发工作，又需要考生提供学号，专业，班级等信息。而管理员信息与用户信息类型基本相似，也需要管理员提供编号、姓名、性别、部门等信息。<br />
3.2概念模型<br />
根据需求分析，该系统中存在两个实体：管理员和用户，并结合两个实体各自的属性以及它们之间的关系，由此确定数据库的E-R关系图，如图<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名1.bmp"><img class="aligncenter size-full wp-image-400005029" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名1.bmp" alt="" /></a><br />
3.3数据表结构<br />
为了避免数据库产生插入异常、删除异常和数据冗余，所设计的数据表至少要满足第三范式（3NF），因此，在ERSDB.mdf中，需要构建三张表：注册信息表（表1）、报名信息表（表2）和管理员信息表（表3），分别存储相应的数据。<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名2.bmp"><img class="aligncenter size-full wp-image-400005030" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名2.bmp" alt="" /></a><br />
4系统设计<br />
4.1系统结构设计<br />
按照使用者权限的不同，考试报名系统分为两个模块，一个用户模块，一个管理员模块。在用户模块中又分为注册模块、报名模块和个人信息管理模块。用户模块完成了考试报名的主要功能，是该系统的核心模块。系统的功能模块结构如图：<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名3.bmp"><img class="aligncenter size-full wp-image-400005031" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名3.bmp" alt="" /></a><br />
4.2用户模块设计<br />
4.2.1注册模块<br />
注册模块主要是面向第一次使用考试报名系统的用户。新用户需要向数据库提交用户名、密码、邮箱、密码提示问题、答案等一些简单信息，当用户忘记密码时可以通过密码提示问题找回忘记的密码。完成注册后便可以使用系统的功能。用户注册流程如图：<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名4.bmp"><img class="aligncenter size-full wp-image-400005032" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/未命名4.bmp" alt="" /></a><br />
4.2.2报名管理模块<br />
考试报名的主要工作都在此模块中完成。用户如果是首次报名，将需要填写一份完整的报名信息表，包括姓名、性别，身份证号，照片等各项信息，用户填写完报名信息表，点击预览按钮，系统会在预览模式下生成一张虚拟信息表，这与将来需要打印的报表格式相同（如图），如果用户确认无误，便可以提交给数据库完成报名工作，这时系统会按照递增顺序产生一个报名号，以方便日后考生缴费使用，并有利于管理员统计报名人数。如果发现信息有错误，可以返回报名信息表重新填写。倘若用户在已经提交数据后才发现所填信息有遗漏或是错误，可以登录系统后在查询页面核对信息表，在编辑页面里修改信息，确认后重新提交数据库，这样可以方便用户多次核对信息和修改信息，以确保报名信息准确无误。首次报名提供的信息表同时可以作为报名其它考试的基本信息，以后再次使用该系统报名，用户不必再次填写重复信息，只需从数据库中调取查看已有的信息记录，仅修改考试类型、联系方式等相对上次报名有变化的信息即可，然后再次提交数据库，便可以完成新一轮的报名工作，这样既节省时间又减少信息冗余。报名模块流程如图：<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/图3.bmp"><img class="aligncenter size-full wp-image-400005033" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/图3.bmp" alt="" /></a><br />
4.2.3个人信息管理模块<br />
为了确保用户报名信息的安全性，每个用户都有自己用户名和密码，必须通过登陆验证才可以查询和编辑自己的报名信息，其它任何用户（除管理员），在非授权的情况下，无法查询他人的报名信息。用户可以在个人信息模块中不定期的修改用户名和密码，以确保安全性。个人信息管理模块流程如图：<br />
<a href="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/图4.bmp"><img class="aligncenter size-full wp-image-400005034" src="http://software.intel.com/zh-cn/blogs/wordpress/wp-content/uploads/2010/08/图4.bmp" alt="" /></a><br />
4.3管理员模块<br />
管理员模块是分配给教务管理人员使用的。同样，管理员凭借合法的账号和密码登录系统，然后可以发布考试信息和相关规定，并可以查看所有学生的报名情况，对其进行统计和打印报表工作。在管理员模块中也有类似于用户模块中的个人信息管理模块，管理员也可以随时修改用户名和密码来确保安全性。<br />
5结束语<br />
为了方便高校管理各类考试报名信息，设计并实现了考试报名系统。管理人员可以在该系统上及时发布考试信息和注意事项，同时可以完成对报名信息的统计工作，而学生可以利用该系统完成报名、查询信息、修改信息等，从而极大的提高了信息收集的管理的效率，同时也减少了教务管理的压力。</p>
<p>参考文献<br />
[1] Michael Otey  Denielle Otey（美）著  高猛 译  Microsoft SQL Server2005开发指南[M] 清华大学出版社 北京 2007.1<br />
[2] 廖信彦  ASP.net交互式Web数据库程序设计[M] 中国铁道出版社 北京 2003<br />
[3] 杨凌云 基于.Net的毕业论文选题系统的设计与实现[J]  计算机时代  2010年第3期<br />
[4] 赖麟 石永革 苏志伟  基于.NET平台的电信宽带障碍预处理系统[J]  计算机与现代化  2010年第4期<br />
[5] 周长发 C#面向对象编程[M]  电子工业出版社 北京2007.7<br />
[6] 唐玉芳 张永胜  基于.NET的学生信息管理系统的设计与实现[J]  计算机技术与发展  2010年第4期<br />
[7] 张惠茹 周姝 栾永华 学生信息管理系统的设计与实现[J] 计算机与网络 2010.3.26<br />
[8] 程云志，张帆，崔翔等 数据库原理与SQL Server 2005应用教程[M] 机械工业出版社 2006.8</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/09/01/net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

