高级软件开发技术报告

高级软件开发技术

课程设计报告

题目:学生成绩查询网站

专 业:信息管理与信息系统

学生成绩查询网站

一、网站的功能

设计这个网站的目的是为了方便学生查询成绩和进行个基本人信息注册以方便录入新的成绩,有了这个网站,学生就不用再为没地方查询成绩而发愁,也方便教务处对学生的信息有一个基本的了解。学生成绩查询网站能让有成绩的学生登录,并且登陆之后就能很方便的看到自己的学习成绩。这个网站一共有3个窗体页,主页index.aspx设计为登陆页面,如图1.0所示, result.aspx页设计为成绩查询结果页,如图2.0和图2.1所示,register.aspx页设计为注册页如图3所示。

当学生首次登陆这个网站时,进入的是登陆页面。如果学生已经有账号了,则直接输入用户名和密码,再单击登陆按钮。如果账号和密码正确则进入到成绩查询页面,否则就得重新输入。若果学生好没有账号,就单击注册按钮进行注册,进入的是注册页面。

图1 登录界面

当进入到成绩查询页面时,学生就能看到自己的成绩,成绩以一个成绩表形式呈现数来,标题栏有姓名、课程、成绩、课程性质、学时和学分在页面的左侧有一个欢迎的字样。如果学生有成绩,成绩表就会呈现具体的学生成绩,并在页面的左侧呈现“欢迎您!”后边加上学生的姓名的字样,如果没有成绩,则就会

到成就表为空,页面的左侧只呈现“欢迎您!”的字样。当学生返回到登录页面时,只需要点击“回到登陆页”超链接就可以回去了。

高级软件开发技术报告

高级软件开发技术报告

图2.1 成绩查询无结果

图2.0 成绩查询成功

当进入到注册页面时,学生需要输入一些基本的注册信息,例如:用户名、密码、姓名、年龄、性别、专业、爱好等基本信息,要求用户名、密码和姓名不能为空。在输入用户名时,要求用户名只能由英文字母、数字、下划线组成。输入密码时要求密码框和重复输入密码框必须相同,姓名可以由任意字符注组成,年龄要求在15岁到110岁之间,邮箱要求输入正确的邮箱。若果违反了以上的要求,就会导致无法注册显示错误信息。性别可以选择男或女,专业的下拉列表有很多选项,只需选择其中一个就可以了,爱好这一项选择可以多选。当满足以上要求后,单击注册按钮后就会返回到登录页面。若不想注册了,也可点击页面上的“回到登陆页面”超链接返回到登陆页。

图3 学生信息注册

二、控件的属性

1、index.aspx页面控件

该页面可以从数据库中提取数据来匹配学生输入的用户名和密码,匹配失败显示“用户名或密码错误,请重新输入”。登陆界面可以实现和数据库的连接交互,该页面一共用到3种控件,有文本、文本框和按钮控件。两个按钮共编写了

高级软件开发技术报告

高级软件开发技术报告

两个事件,登录事件编写的是和数据库进行简单的连接交互事件,将用户输入的

登录信息与数据库中的表信息进行匹配,匹配成功则转入result.aspx页,匹配失败则弹出错误信息警告框。

该页为登录页面,页面中的所有控件都有id和runat两个属性,runat的属性值为“server”固定不变。页面中的文本控件的Text属性为“学生登录”,id属性为“Label1”。页面中有两个文本框控件,第一个文本框控件用来输入用户名,控件的id属性值为“stu_id”,控件的是width属性值为“101px”,第二个文本框控件用来输入密码,控件的id属性值为“stu_pwd”,TextMode属性值为“Password”控件的是width属性值为“101px”。页面中登录按钮控件的id属性值为“btnLogin”,控件的onclick属性值为“btnLogin_Click”。页面中登录按钮控件的id属性值为“btnCancel”,控件的onclick属性值为“btnCancel_Click”。该页面的主要代码如下:

<head runat="server">

<title>学生成绩查询</title>

<style type="text/css">

.style2

{

height: 64px;

}

.style4

{

height: 48px;

}

.style5

{

height: 49px;

}

.style6

{

height: 48px;

width: 377px;

}

.style7

{

height: 64px;

width: 377px;

}

.style9

{

height: 58px;

}

</style>

</head>

<body>

<form id="form1" runat="server">

<div>

<table style="width: 800px; font-size: 10pt; background-image: url(images/bg.jpg)" border="0" align="center">

<tr style="font-weight:bold; font-size:12pt">

<td

</tr>

<tr>

<td align="right" class="style6">用户名:</td>

<td class="style4" ><asp:TextBox ID="stu_id" runat="server" Width="101px"></asp:TextBox></td>

</tr>

<tr >

<td align="right" class="style7" >

密 &nbsp;码:

</td>

<td class="style2" >

<asp:TextBox

</td>

</tr>

<tr>

<td align="right" class="style9" >

<asp:Button ID="btnLogin" runat="server" Text="登录" onclick="btnLogin_Click" /></td>

colspan="2" align="center" class="style5" ><asp:Label ID="Label1" runat="server" Text="学生登陆"></asp:Label></td> ID="stu_pwd" runat="server" TextMode="Password" Width="101px"></asp:TextBox>

<td

CausesValidation="False" style=" height: 58px; text-align:center" > &nbsp;&nbsp;&nbsp;<asp:Button ID="btnCancel" runat="server" Text="注册"

onclick="btnCancel_Click" />

</td>

</tr>

</table>

</div>

</form>

</body>

2、register.aspx页面控件

学生信息注册界面和数据库进行了简单的增加交互,该页面能够实现将用户输入的信息录入到数据的stu_login登录表中,表中有用户的基本注册的信息。该页面包含7种控件,有文本框、表单、下拉列表、单选按钮列表、多选按钮列表、按钮和验证控件。该页面编写了一个注册按钮控件应发事件,即将写入的数据插入到数据库当中。

该页面为注册学生信息的页面,该页面包含5种控件,每个控件都有两个属性,一个为用来唯一标识每个web服务器控件的id属性,另一个是runat属性,其值为“server”表示该控件要在服务器上运行。第一个文本框控件用来输入用户名,控件的id属性值为“TextBox1”,与该控件相关联的有两个验证控件,第一个验证控件为RequiredFieldValidator控件,该控件的ErrorMessage属性值为“注册账号不能为空”,ControlToValidate属性值为“TextBox1”,EnableTheming属性值为“true”表示将在应用程序的主题目录中搜索要应用的控件外观,如果主题目录中不存在用于特定控件的外观,则不应用外观,Display 属性值为“None”表示从不内联显示的验证程序内容,EnableViewState 属性值为“false” 表示视图状态为未选中;第二个验证控件为RegularExpressionValidator控件,该控件的 ErrorMessage 的属性值为“必须是数字和字母”,ControlToValidate 属性值为“TextBox1” ValidationExpression =的属性值为“^[A-Za-z0-9]+$ ”,Display 的属性值为“none”。

第二个文本框控件用来输入密码, TextMode 的属性值为“password"”与该控件相关联的有两个验证控件,第一个验证控件为RequiredFieldValidator控件,第二个为CompareValidator控件,该控件的ControlToCompare属性值为“TextBox2”即输入密码文本框,ControlToValidate 的属性值为“TextBox3”即重复输入密码文本框,ErrorMessage属性值为“密码和重复密码不匹配”,Display 属性值为“none”。第三个文本框控件用来重复输入密码,TextMode 的属性值为“password”,RequiredFieldValidator控件用来控制该文本框不能为空。第四个文本框控件用来重复输入姓名,RequiredFieldValidator控件用来控制该文本框不能为空。

第五个文本框控件用来输入用户年龄,RangeValidator用来控制输入的年龄必

须在15-110岁之间,MaximumValue 属性值为“110”,MinimumValue 属性值为“15”,Type 属性值为“Integer”表示输入的数值需为整形,Display 属性值为“none”。页面中有两个radiobutton单选按钮,两个按钮为一组,以便用户不能够同时都勾选,两个按钮的text属性值分别为“男”和“女”。第六文本框输入用来输入邮箱地址,与之关联的验证控件为RegularExpressionValidator控件,该控件的 ErrorMessage 的属性值为“请输入正确的邮箱地址”,ValidationExpression 的属性值为“\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*”。页面有一个验证总结控件,这个控件将会把以上所有控件显示的错误信息集中在一个地方显示出来。

页面中有两个控件绑定,分别是下拉列表和复选框按钮列表。两个控件绑定的数据源是同一个,即AccessDataSource1,控件上显示的内容和传给服务器的值均为关联字段的取值。页面有一个按钮控件,控件的OnClick属性值为“Button1__Click”,text属性值为“注册”。绑定控件代码如下:

<tr>

<td align = "right">专&nbsp;&nbsp;业:</td>

<td align = "left" colspan = "2"> &nbsp;

<asp:DropDownList

ID="majior" runat="server"

DataSourceID="AccessDataSource1" DataTextField="专业" DataValueField="专业">

</asp:DropDownList> </td>

</tr>

<tr>

<td align = "right">爱&nbsp;&nbsp;好:</td>

<td align = "left" colspan = "2"> <asp:CheckBoxList ID="habit" runat="server" RepeatDirection="Horizontal"

DataSourceID="AccessDataSource1" DataTextField="love" DataValueField="love">

</asp:CheckBoxList>

<asp:AccessDataSource

ID="AccessDataSource1" runat="server"

DataFile="~/stu.mdb"

SelectCommand="SELECT * FROM [love]"></asp:AccessDataSource>

</td>

</tr>

3、result.aspx页面控件

成绩查询界面可以和数据库进行简单的连接和查询交互,并将查询到的数据动态地以表格的形式显示在页面上,一共用到3种控件,有图片、文本和表格控件。编写了一个Page_Load事件,页面加载时执行动态生成成绩单的动作。数据

库里如果有登录用户的成绩信息,则以表格的形式显示出来;否则显示空白。

该页面一共有三个控件,文本、图片和表格控件,三个控件都有id和ruanat属性。文本控件的text属性值为“欢迎您”用来向用户打招呼,图片控件的ImageUrl属性值为“images/bt.png”表示图片存放的地址,表格为动态生成,所以只有两个基本属性,页面部分代码如下:

<form id="form1" runat="server">

<center><asp:Image ID="Image1" ImageUrl="images/bt.png" runat="server" /></center>

<div>

<table style="width:836; border:2px " align="center">

<tr style="width:836; border:2px; text-align:center; ">

<td width="70">姓名</td>

<td width="280">课程</td>

<td width="100">成绩</td>

<td width="130">课程性质</td>

<td width="80">学时</td>

<td width="60">学分</td>

</tr>

</table>

<asp:Label ID="Label1" runat="server" Text="欢迎您!"></asp:Label> <asp:Table ID="Table1" runat="server">

</asp:Table>

</div>

<br /> <br /> <br />

<center><a href="index.aspx">回到登陆页</a></center>

</form>

三、控件的事件

1、index.aspx.cs页面事件

btnLogin_Click事件为登录按钮的单击事件,在这个事件中先获取用户输入的数据,编写根据输入的用户名和密码从数据库的表里取全部数据的sql语句,编写数据库连接并打开数据库,设置一个从数据库读取数据的对象,从而来判断从数据库读取到的数据条数。如果读取到数据,则进入到result.aspx页面,并传递本页面的用户名的参数;如果没有数据记录,则弹出错误信息警告框,具体实现代码如下:

protected void btnLogin_Click(object sender, EventArgs e)

{

string name = stu_id.Text.Trim();

string pwd = stu_pwd.Text.Trim();

string Name = "";

string sql = "select * from stu_login where stu_id = '" + name + "' and stu_pwd = '" +pwd + "'";

string ConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"D:\mzl\Stu_check\stu.mdb";

OleDbConnection con = new OleDbConnection(ConStr);

con.Open();

OleDbCommand cmd = new OleDbCommand(sql, con);

OleDbDataReader dr = cmd.ExecuteReader();

dr.Read();

if (dr.HasRows)

{

Response.Redirect("result.aspx?Name=" + name);

}

else

{

this.ClientScript.RegisterStartupScript(this.GetType(), "",

"<script>alert('用户名或密码输入错误,请重新输入!')</script>");

}

}

btnCancel_Click事件:主要实现从本面跳转到register.aspx页,具体实现代码如下:

protected void btnCancel_Click(object sender, EventArgs e)

{

Response.Redirect("register.aspx");

}

2、register.aspx.cs页面事件

Button1__Click事件为登录按钮的单击事件,在这个事件中先定义与性别、专业、爱好相关的字符串变量,根据radiobutton的选择情况决定性别的取值,“专业”用的dropdownlist控件,次控件只能单选,将选择的内容赋值给专业即可,“爱好”用的是复选框按钮,遍历所有的选择情况一边给“爱好”追加赋值,编写相应的sql插入语句,将已赋值的变量写入到数据库中,打开数据库连

接。如果插入操作影响行数大于0,则跳转回登录页面,如果失败则弹出登录失败警告框,具体实现代码如下:

protected void Button1__Click(object sender, EventArgs e)

{

//性别 专业 爱好

string sex, stu_majior;

string stu_habit = "";

//性别

if (RadioButton1.Checked)

{

sex = "男";

}

else

{

sex = "女";

}

//专业

stu_majior = majior.SelectedValue;

//爱好

foreach(ListItem list in habit.Items )

{

if(list.Selected)

{

stu_habit += list.Text.ToString() + " ";

}

}

string

TextBox1.Text + "','"

+ TextBox2.Text + "','" + TextBox4.Text + "','" + sex +"','"+ TextBox5.Text + "','" + stu_majior + "','"

sql = "insert into stu_login (stu_id,stu_pwd,stu_name,stu_sex,stu_age,stu_majior,stu_habit,stu_email) values ('" +

+ stu_habit+ "','" + TextBox6.Text + "')";

//连接语句

string ConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"D:\mzl\Stu_check\stu.mdb";

OleDbConnection con = new OleDbConnection(ConStr);

con.Open();

OleDbCommand cmd = new OleDbCommand(sql, con);

int rows =cmd.ExecuteNonQuery();

con.Close();

Response.Write(rows);

if (rows > 0)

{

Response.Redirect("index.aspx");

}

else

{

this.ClientScript.RegisterStartupScript(this.GetType(), "",

"<script>alert('注册失败~')</script>");

}

}

3、result.aspx.cs页面事件

Page_Load事件一开始判断如果页面是第一次加载,则连接数据库。编写根据字段stu_name联合连接stu_login表和stu_grade表的sql语句,打开数据库连接,将查询得到的数据存放到一个虚拟的“stu”的内存表里。如果没有查询到数据,则弹出没有成绩警告框;如果次有超过0条数据,则往label1的text属性值追加到学生姓名字符串,设置表格位置为居中,表格宽为836像素,创建动态表格,编写两个for循环设置行和列边框宽度2个像素,内循环负责生成列,并将stu表里的数据挨个显示在生成的列里,外循环负责生成行,有行有列的表格就形成了。具体实现代码如下:

protected void Page_Load(object sender, EventArgs e)

{

if (!this.IsPostBack)

{

string sql

= "select s.stu_name,

s1.stu_ke,s1.stu_grade,s1.ke_kind,s1.study_time,s1.credit from stu_login s "

+ " inner join stu_grade s1 on s.stu_name=s1.stu_name where s.stu_id = '" + Request.QueryString["Name"] + "' ";

string ConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"D:\mzl\Stu_check\stu.mdb";

OleDbConnection con = new OleDbConnection(ConStr);

con.Open();

OleDbDataAdapter myAdapter = new OleDbDataAdapter(sql, con); DataSet myDataSet = new DataSet();

myAdapter.Fill(myDataSet,"stu");

OleDbCommand cmd = new OleDbCommand(sql, con);

OleDbDataReader dr = cmd.ExecuteReader();

dr.Read();

if (!dr.HasRows)

{

this.ClientScript.RegisterStartupScript(this.GetType(), "",

"<script>alert('对不起!您目前没有成绩')</script>");

con.Close();

}

else

{

Label1.Text += myDataSet.Tables["stu"].Rows[0][0];

Table1.HorizontalAlign = HorizontalAlign.Center;

Table1.Width = 836;

for (int i = 0; i < myDataSet.Tables["stu"].Rows.Count; i++) {

TableRow row = new TableRow();

row.BorderWidth = 2;

for (int cell = 0; cell myDataSet.Tables["stu"].Columns.Count; cell++)

{

TableCell myCell = new TableCell();

myCell.BorderWidth = 2;

myCell.Text

< =

myDataSet.Tables["stu"].Rows[i][cell].ToString();

row.Cells.Add(myCell);

}

Table1.Rows.Add(row);

}

}

}

}

四、数据库的设计

本次后台用的数据库是access数据库库,数据库stu.mdb一共有三个表,表名分别为love,stu_login和stu_grade。如图4所示,love表里一共有两个字段,一个是作为主键的文本型love字段,另一个是文本型的专业字段,这两个字段用于与register.aspx页面的专业和爱好两个控件连接,以便将表里的数据显示在页上。

图4 love表

如图5所示,stu_login表里有用户的基本信息,一共有9个字段,自动编号型id字段,用来记录用户的信息的条数,记录用户名的文本型stu_id字段,记录学生姓名的文本型stu_name字段,记录用户密码的文本型stu_pwd字段,记录学生性别的文本型stu_sex字段,记录学生年龄的文本型stu_age字段,记录学生专业的文本型stu_majior字段,记录学生爱好的文本型stu_habit字段,记录学生邮箱地址的文本型stu_email字段。

图5 stu_login表

如图6所示,stu_grade

高级软件开发技术报告

高级软件开发技术报告

表用于记录学生的成绩,一共有七个字段,记录信息

条数的自动编号型id字段,记录学生姓名的文本型stu_name字段,记录学生上课

课程名字的文本型stu_ke字段,记录学生该课成绩的文本型stu_grade字段,记录课程性质的文本型ke_kind字段,记录课程学时的文本型study_time字段,记录课程学分的文本型credit字段。

图6 stu_grade表

五、心得体会

相比上一次老师您的课程设计,这次的asp.net更具挑战性,因为课程设计的时间很短,所以这次基本上是加班加点整出来的,不过在写报告这块却是得感激上次的报告了,起码在格式方面不用劳心费力。

其实一个具备强大的功能的网站才是真正的成功,我这次课程设计做的网站只能算作是大虾中的小虾米,是不能够与之媲美的。虽然如此,但是我仍旧为我取得的成功感到高兴和骄傲。经过这次课设,我知道了完成的过程越困难,时间越紧迫,取得成功时的喜悦时就越大。我做的这个网站有两个明显的特点,那就是能够进行登录和注册,能将从数据库取得的数据已动态表格的形式显示在页面上。

这次之所以选择学生成绩查询网站是因为成绩为我们所熟知,且考试完毕时,我们也会经常登录学校的综合教务系统进行成绩查询,也许成绩查询更适合做成一个系统,但是我觉得如果能把系统以一个网站的形式,也未尝不可。我喜欢挑战,但是也喜欢平静。当我编写完一段C#语言的代码是,我往往会变得很激动,总是迫不及待的想知道这段代码能起到什么样的效果,也会默默祈祷不要出现什么问题才好。结果不是总能让人如意的,就像在写连接数据库要用到的sql语句时,总是会出现标点符号不正确、拼写错误等问题,偏偏在当我进行检查的时候怎么看怎么对,越是心慌,越是觉得错误不在这儿,觉得它肯定在其他的地方。但是,当我决心冷静下来,将sql语句分开来看时,却一眼就能发现错误的地方,这时总会无奈地摇头。这就是教训,心急吃不了热豆腐。

连接数据库来动态显示表格这块儿,基本上花费了我一晚上的时间,症结就出在sql语句上,这真正让我觉得细节决定成败是真理。感谢这次课设给我的教训和启发,我也非常感谢老师能够不厌其烦地给我们答疑,虽然我没怎么问,但

高级软件开发技术报告

是我能感觉到老师您的热情!这次的课程设计虽然是单独做的,但是其中也得到

过不少同学的帮助,这让我觉得我和他们的关系又进了一步,所以这次我不仅收获了成绩经验和教训,更重要的是友谊,知道了有朋友是美好的,而我需要它。

相关推荐