摘 要
本设计就很好的解决了上面的问题,它不但能实现毕业生论文的在线提交;还能给教师一定的权限,以在线的方式对自己指导的学生的论文进行审核;并且管理员还可以方便的将每个学生的论文信息按统一的论文排版本格式导出成word文档等。
本论文共分为五大部分,分别是:一、介绍选题背景及意义和相关系统的发展现状;二、介绍数据库技术、面向对象技术和基于B/S结构的WEB程序设计技术;三、对系统进行需求分析并提出解决方案;四、根据解决方案对系统进行设计;五、对毕业论文提交系统进行测试并得到测试结果。
关键词:在线提交;审核;导出;Word文档;B/S结构
4.1 系统总体架构
在线毕业论文提交系统的基本功能主要有论文提交、论文查询、论文审核及后台数据管理五大部分,其功能模块图如图1所示:
图1 毕业论文提交系统功能模块图
4.3 系统功能模块设计
4.3.1 首页
毕业论文提交系统的首页,实际上是一个本系统的使用帮助页面,实现非常简单,不会用到数据库方面的信息,其界面如图3所示:
图3 首页
由于这个页面只是一个简单的静态页面,这里就不对它的代码进行详细的分析,我们只对页面上乃至以后系统工程每个页面都会用到的两个用户自定义控件加以说明,这两个控件文件分别是用于页面头部的top.ascx和用于页面底部的bottom.ascx,其定义的方法很简单,前面也已经讲过,这里我们来看一下在每个页面中怎么使用它们。
在每个页面中调用top.ascx的语句:
<%@Register TagPrefix="Top" TagName="myTop" Src="top.ascx" %>
//TagPrefix用来标记前缀,定义控件的命名空间;TagName 标记名指向所使用控件的名字(这里指向myTop);Src 指向控件的资源文件 ;
<Top:myTop runat="server"/> //调用为名myTop的用户控件
|
4.3.2 论文提交
本页面主要实现将学生正确输入到textBox中的学生信息与论文信息提交到SQL数据库中的lwtj表,当用户输入的信息不正确时,页面上为提示“输入信息不正确”的错误信息,并以在每个出错的textbox后面给出错误的提示,若学生重复的提交以前已经提交了的信息,页面就会发生跳转并提示“你不能重复提交你的论文”的提示信息。在检查用户输入的信息是否合法时,用到的是asp.net中的“验证控件”,在判断用户是否已经提交过论文的方法是,在每个学生在单击“提交”按钮后,就先在lwtj表中查询是否已经有了该学生的号,如果有了就表示已经提交过了。
当完整的输入了学生的基本信息及论文信息后,单击“论文提交”页面中的“提交”按钮后,要触发到的submit_Click()函数:
|
|
private void submit_Click(object sender, System.EventArgs e)
{if(IsValid==true) //判断页面上所有控件是否都合乎输入要求
{// 定义连接字符串
string SqlConn="data Source=127.0.0.1;Database=lwtjdb;User Id=sa;pwd=";
SqlConnection Conn=new SqlConnection(SqlConn); // 创建一个名为Conn的新连接
Conn.Open(); //打开连接
//下面的插入语句是将所有在前台textbox中输入的值和一个“未审核”的初始值插入到lwtj表 string SqlStr="insert into
lwtj(stuName,stuNo,password,stuZy,stuTel,email,teacherName,teacherNo,…,lwT
ite,lwText,isPass) values('"+this.stuName.Text+"', …………,'"+this.stuNo.Text+"','"+
this.Text.Text.Replace("\r\n" , "<br>").Replace(" "," ")+"','未审核')";
// lwBody.Text.Replace("\r\n" , "<br>").Replace(" "," "):表示将lwBody
内容中的回车换行替换为“<br>”,将空格替换为“ ”一并存入到数据表中
…………
|
|
4.3.3 论文查询
本页面主要实现当学生成功提交论文后对自己论文审核情况的查询;若还未审核,学生便可以看到类似论文提交时的那个页面,并显示出学生提交到数据库的信息,学生可以在这里进行相应的编辑,并点击“更新”按钮进行更新;若已经审核,学生登录后看到的将是“已审核”的提示页面.本页主要用到的数据表还是lwtj表,界面如图4所示:
图4 提交查询界面
当用户单击了“查询”按钮后调用下面的查询语句:
|
|
…………
string SqlStr="select * from lwtj where stuNo='"+stuNo.Text+"' and password='"+password.Text+"'"; //查询lwtj表上是否有用户刚才输入的账号和密码
SqlCommand Comm=new SqlCommand(SqlStr,Conn);
SqlDataReader dr=Comm.ExecuteReader(); //执行查询
// 下面的if语句判断是否查找到,若找到,则将记录中的每个值赋给一个相应的Session变量
if(dr.Read())
{ dr.Close();
Conn.Close();
Response.Redirect("cxjg.aspx"); //转到查询结果页
}
else
message.Text="输入不正确!";
…………
|
|
当用户输入正确的学号和密码后,执行下面的页面事件:
|
|
private void Page_Load(object sender, System.EventArgs e)
{
if(IsPostBack==false) //如果是第一次加载本页面,就执行下面的语句
{
…………
string SqlStr="select * from lwtj where isPass='未审核' and stuNo='"+Session["theno"].ToString()+"'"; //查询此学号的论文是否已经审核
SqlCommand Comm=new SqlCommand(SqlStr,Conn);
SqlDataReader dr=Comm.ExecuteReader();
if(dr.Read()) //如果上面的条件成立,则将上个页面保存的所有的Session的值传到相应的textbox中,若不成立,就自动跳转到“已审核”提示页
{
stuName.Text=Session["thename"].ToString();
stuNo.Text=Session["theno"].ToString();
password1.Text=Session["thepwd"].ToString();
…………
}
else
Response.Redirect("isPass.aspx"); // 转到“已审核”提示页面
}
}
|
|
当用户单击了页面中的“更新”按钮后调用下面的update_Click()函数:
|
|
private void update_Click(object sender, System.EventArgs e)
{
if(IsValid==true) //判断页面上所有控件是否都合乎输入要求
{
…………
string SqlStr="Update lwtj set
stuNo='"+stuNo.Tex +"',stuName='"+ stuName.Text+"',password='"+password
1 .Text+"',stuZy='"+stuZy.T ext+"',stuTel='"+stuTel.Text+"',email='"+mail. Text+"',teacher Name='"+teacherName.Text+"',teacherNo='"+teacherNo.Text+"',lwTitle='"+lwTitle.Text+"',lwBody='"+lwBody.Text.Replace("\r\n" , "<br>").Replace(" "," ")+"' where stuNo="+Sessi on["theno"]; //更新学生的基本信息
SqlCommand Comm=new SqlCommand(SqlStr,Conn);
Comm.ExecuteNonQuery(); //执行UpDate语句
Conn.Close();
message.Text="恭喜你!更新成功!"; //提示更新成功
}
else
{message.Text="发生错误,请按照文本框后的提示信息重新输入正确信息!";}
…………
|
|
4.3.4 论文审核
老师首先进入“教师”登录页面,当输入正确的teacherNo与teacherPassword后,进入“教师审核论文页面”(界面如图5),在这个页面主要显示的是该老师所带的所以学生的学生及论文信息,老师可以在这里审阅学生的论文,若合格,可点出“审核”按钮进行审核,还可以点击“导出”按钮导出学生的论文信息到word文档,该页面上方还有个“教师修改个人信息”的功能选项,在老师首次登录后使用它来修改自己的密码及个人信息(界面如图6)。
图5 老师审核论文界面
图6 教师信息修改界面
老师登录的主要源码如下:
|
|
public void jsdl_Click(object sender, System.EventArgs e)
{
…………
string SqlStr="select * from teacher where teacherNo='"+teacherNo.Text+"' and
teacherpassword='"+password.Text+"'"; //查询teacher中是否有该老师的信息
SqlCommand Comm=new SqlCommand(SqlStr,Conn);
SqlDataReader dr=Comm.ExecuteReader(); 执行查询
if (dr.Read()) //如查询到,将该教师的工号与姓名存分别暂存到Session变量中
{
Session["teano"]=teacherNo.Text;
Session["teaname"]=dr["teacherName"].ToString();
Response.Redirect("lwsh.aspx"); //跳转到论文审核主页面
}
else
message.Text="输入不正确!"; //密码不正确的提示
…………
|
|
老师成功登录后,下面是datagrid中的Click_Grid()事件:
|
|
public void Click_Grid(object sender, DataGridCommandEventArgs E)
{
if(E.CommandName=="daochu") //判断是否单击了“导出”按钮
{
//前面利用DataKeyField=stuNo设置了学号关键字段,所以下面的语句可以获取
某行的stuNo,并把结果传给Session["stuno"]
Session["stuno"]=dg1.DataKeys[(int)E.Item.ItemIndex];
Response.Redirect("tealwdc.aspx"); //转到教师导出论文的页面
}
Else //若单击了“审核”按钮
{
…………
string SqlUpDate="Update lwtj Set isPass='已审核'
where stuNo="+dg1.DataKeys[(int)E.Item.ItemIndex]; //只更新当前行
SqlCommand Comm=new SqlCommand(SqlUpDate,Conn);
Comm.ExecuteNonQuery(); //执行更新语句
BindData(); //重新调用绑定数据函数
}
}
|
|
老师导出论文的代码与后面管理员导出论文的代码差不多,这里就不给出,后面将有详细的介绍。
4.3.5 论文导出
管理员页面所实现的主要功能是对学生及论文信息的管理,以及论文的导出,还有对老师基本信息的初始添加(界面如图8)和对老师信息的管理,其中在登录管理员首页的时候有个管理员的身份验证,若输入正确才能登录到管理平台,进入这个平台后便会看到“学生信息及论文信息的管理”( 界面如图7)和“老师信息管理”这两个子功能,我们可以单击它进行相应的管理,下分别介绍各个页面的界面及主要实现价码。
图7 学生信息管理界面
图8 添加老师信息界面
管理登录,当用户单击登录按钮的时候调用gldl_Click()处理方法,用来进行管理员的身份验证:如果用户存在,则让用户进入管理页面;如果用户不存在,则给出错误提示信息。
管理员登录的源码与教师登录的源码差不多一样,仅仅是它们所要用到的数据表不同而已,这里不再给出管理员登录的源码。
学生信息管理,Sort_Grid()方法的作用是,当用户单击DataGrid控件中的stuNo关键字后,按这些关键字进行排序,以方便管理的查询。
|
|
public void Sort_Grid(object sender, DataGridSortCommandEventArgs E)
{
…………
//按学号升弃排序,并将结果绑定到DataSet控件上
string SqlStr="select * from lwtj order by stuNo";
SqlDataAdapter da=new SqlDataAdapter(SqlStr,Conn);
DataSet ds=new DataSet(); //创建DataSet控件ds
da.Fill(ds,"lwtj"); //调用Fill方法将表lwtj放在DataSetc对象中
dg1.DataSource=ds.Tables["lwtj"].DefaultView;
dg1.DataBind(); //绑定数据
}
|
|
ChangePage()方法,实现分页的功能用:
|
|
public void ChangePage(object sender,DataGridPageChangedEventArgs E)
{
//利用E.NewPageIndex获得新的页数
dg1.CurrentPageIndex=E.NewPageIndex;
BindData();//重新绑定数据
}
|
|
。
|
|
public void Click_Grid(object sender, DataGridCommandEventArgs E)
{ if (E.CommandName=="daochu") //判断是否单击了“导出”按钮
{ Session["stuno"]=dg1.DataKeys[(int)E.Item.ItemIndex]; //取当前行的学号,并存到Session["stuno"]中
Response.Redirect("adminlwdc.aspx"); //跳转到管理员导出论文页面
}
else if(E.CommandName=="delete") //是否单击了“删除”按钮,若是,先建立数据库连接,然后执行删除操作
{ …………
string Sqldel="delete from lwtj
where stuNo="+dg1.DataKeys[(int)E.Item.ItemIndex]; //定义删除语句
SqlCommand Comm=new SqlCommand(Sqldel,Conn);
Comm.ExecuteNonQuery(); //执行
BindData(); //重新绑定数据 …………
} …………
}
|
|
当管理员进入了添加教师页面并单击了“添加”按钮后,调用下面的处理方法,将新的教师信息入库:
private void submit_Click(object sender, System.EventArgs e)
{
…………
//定义插入教师信息的Insert语句
StringSqlStr="insert into
teacher(teacherNo,teacherName,teacherPassword,teacherZc,teacherTel,teacherEmail)
values('"+this.teacherNo.Text+"','"+this.teacherName.Text+"','"+this.password1.Text+"','"+this.teacherZc.Text+"','"+this.teacherTel.Text+"','"+this.email.Text+"')";
SqlCommand Comm=new SqlCommand(SqlStr,Conn);
Comm.ExecuteNonQuery(); //执行insert语句
Conn.Close(); //关闭连接
message.Text="恭喜你!添加成功!若不再继续添加,请单击<返回上页>返回!";
}
|
|
删除教师信息的实现方法与删除学生及论文信息的方法一样,前面已经介绍过,这里不在给出相关代码。
导出学生论文信息到word文档的主要实现原理是:当用户单击 “导出”按钮后,系统转到导出论文的页面,建立数据库的连接,并把数据库中合乎条件的记录的值取出传给相应的label,而前台的Html页中已经以论文模板的形式设置好了各个label的位置,最后调用一个将html页转换成word文档的方法即可。
|
|
private void Page_Load(object sender,System.EventArgs e)
{…………
BindData(); //调用数据绑定函数
Response.Charset="GB2312";//设置输出流为简体中文 Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出文件类型为 word类型
Response.ContentType="application/ms-word "; //用来保存为word文件的文件名
Response.AddHeader( "Content-Disposition","inline;filename="+stuNo.Text+”.doc"); //"filename="+stuNo.Text+”.doc",表示以学号为文件名保存为word文档
}
|
|
BindData()方法,它首先连接到lwtj表,然后查询出用户要导出的学生的信息,并把这些信息的值传给对应的Label,主要代码如下:
|
|
private void BindData()
{
//定义连接字符串,建立数据库连接
string SqlConn="data Source=127.0.0.1;Database=lwtjdb;User Id=sa;pwd=";
SqlConnection Conn=new SqlConnection(SqlConn);
Conn.Open();
//定义查询语句
string SqlStr="select * from lwtj where stuNo="+Session["stuno"];
SqlCommand Comm=new SqlCommand(SqlStr,Conn);
SqlDataReader dr=Comm.ExecuteReader(); //执行
//如果查找到,将记录中的各个值赋相应的给label
if (dr.Read())
{ stuno.Text=dr["stuNo"].ToString();
stuname.Text=dr["stuName"].ToString();
stuzy.Text=dr["stuZy"].ToString();
teaname.Text=dr["teacherName"].ToString();
lwtitle.Text=dr["lwTitle"].ToString();
lwbody.Text=dr["lwBody"].ToString();
…………
}
}
|
|