ASP.NET在线毕业论文提交系统的设计与实现

摘  要

本设计就很好的解决了上面的问题,它不但能实现毕业生论文的在线提交;还能给教师一定的权限,以在线的方式对自己指导的学生的论文进行审核;并且管理员还可以方便的将每个学生的论文信息按统一的论文排版本格式导出成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(" ","&nbsp;")+"','未审核')"; 

// lwBody.Text.Replace("\r\n" , "<br>").Replace(" ","&nbsp;"):表示将lwBody

内容中的回车换行替换为“<br>”,将空格替换为“&nbsp;”一并存入到数据表中

…………

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(" ","&nbsp;")+"' 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();

       …………

      }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洗衣洗鞋店做小程序有什么优势?

互联网洗衣洗鞋小程序闪亮登场&#xff0c;想知道这款小程序有何魅力吗&#xff1f; 如今&#xff0c;众多商家纷纷推出预约上门洗鞋服务&#xff0c;&#x1f481;‍♀️并倾力打造洗鞋小程序&#xff0c;旨在拓展线上销售渠道。&#x1f31f;那么&#xff0c;这款洗鞋小程序究…

网络配置的加密存储

随着数据泄露事件的增加&#xff0c;扰乱了公司的正常工作周期&#xff0c;企业遭受了损失。事实上&#xff0c;数据泄露可以通过存储加密来控制&#xff0c;存储加密是防止黑客对网络数据库造成严重破坏的最有效方法之一。在网络配置管理器中&#xff0c;存储加密可用于存储设…

Unity 模拟放大镜局部放大UI 效果实现

UI 放大实现 RectTransformUtility.ScreenPointToLocalPointInRectangle(rectScale, eventData.position, eventData.pressEventCamera, out localPos); 使用IPointerDownHandler 获取鼠标点击时的有效负载&#xff0c;并将鼠标坐标转成对应的UI 坐标&#xff0c;rectScale 为…

【Win】一键恢复IE11工具:让旧版浏览器在新系统中重生

微软在2020年8月的时候就已经公告IE11的生命周期终点&#xff0c;多次提醒将在2022年6月15日起不再支持IE 11&#xff0c;呼吁用户尽快转换到Chromium-based Microsoft Edge。微软也陆续终止旗下服务支持这个旧式浏览器。2021年3月&#xff0c;Chrome浏览器已不支持旧IE App。2…

欢迎光临Java中的客“栈”

就目前而言&#xff0c;相信大家对数组、链表还有栈都基本已经有了一些了解&#xff0c;本篇文章将以栈为主体&#xff0c;探究栈和数组&#xff0c;栈和链表之间的一些联系。 当然在开始对栈的学习之前&#xff0c;我们先回顾有关数组、链表的基础知识点。 学习代码就是一个…

四川景源畅信:如何更好的为抖音小店做引流?

在数字化营销的浪潮中&#xff0c;抖音小店作为新兴的电商形态&#xff0c;正以其独特的社交属性和流量优势吸引着众多商家的目光。如何为抖音小店引流&#xff0c;成为许多店主心中的疑问。本文将深入探讨有效提升店铺流量的策略&#xff0c;助你在抖音平台上快速崛起。 一、内…

代码随想录算法训练营第二十五天:树的最后学习

代码随想录算法训练营第二十五天&#xff1a;树的最后学习 如果不对递归有深刻的理解&#xff0c;本题有点难 单纯移除一个节点那还不够&#xff0c;要修剪&#xff01; #669. 修剪二叉搜索树 力扣题目链接(opens new window) 给定一个二叉搜索树&#xff0c;同时给定最小边界…

shell脚本之sort,uniq,tr,cut,sphit,paste,ecal与正则表达式

sort命令 uniq命令 tr命令 cut命令 sphit命令 paste命令 ecal命令 正则表达式 sort命令 sort命令---以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序…

通过java将数据导出为PDF,包扣合并单元格操作

最近项目中需要将查询出来的表格数据以PDF形式导出&#xff0c;并且表格的形式包含横向行与纵向列的单元格合并操作&#xff0c;导出的最终效果如图所示&#xff1a; 首先引入操作依赖 <!--导出pdf所需包--><dependency><groupId>com.itextpdf</groupId&…

汇聚荣:拼多多长期没有流量如何提高?

在电商的海洋中&#xff0c;拼多多以其独特的团购模式吸引了众多消费者的目光。然而&#xff0c;随着市场竞争的加剧和消费者需求的多样化&#xff0c;一些商家发现自家店铺的流量持续低迷&#xff0c;销售业绩难以突破。面对这样的挑战&#xff0c;如何有效提升拼多多店铺的客…

【计算机毕业设计】springboot反诈科普平台的设计与实现

相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低反诈科普平台的运营人员成本&#xff0c;实现了反诈科普平台的 标准化、制度化、程序化的管理&#xff0c;有效地防止了反诈科普平台的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够…

[vue] nvm

nvm ls // 看安装的所有node.js的版本nvm list available // 查显示可以安装的所有node.js的版本可以在可选列表里。选择任意版本安装&#xff0c;比如安装16.15.0 执行&#xff1a; nvm install 16.15.0安装好了之后。可以执行&#xff1a; …

25考研英语长难句Day03

25考研英语长难句Day03 【a.词组】【b.断句】 多亏了电子学和微力学的不断小型化&#xff0c;现在已经有一些机器人系统可以进行精确到毫米以下的脑部和骨骼手术&#xff0c;比技术高超的医生用手能做到的精确得多。 【a.词组】 词组翻译thanks to多亏了&#xff0c;由于cont…

【JavaEE进阶】 Bean的作用域与生命周期

文章目录 &#x1f343;Bean的作用域&#x1f6a9;作用域的使用&#x1f6a9;观察Bean的作用域&#x1f388;单例作用域&#x1f388;多例作用域&#x1f388;请求作用域&#x1f388;会话作⽤域&#x1f388;Application作⽤域 &#x1f384;Bean的⽣命周期⭕总结 &#x1f34…

win11家庭中文版安装docker,报错 Docker Engine stopped

先引一下这位博主的链接超详细Windows11家庭中文版系统安装Docker-20230401_windows11安装docker-CSDN博客&#xff0c;我到前五步(跳出页面重启)和博主都是一样的&#xff0c;但是第六步我并没有报错&#xff0c;直接跳出docker界面 记录一下我的解决办法&#xff0c;首先按照…

金价又双叒涨了!现货黄金什么比较好

虽然近期有新闻显示&#xff0c;国内的实物黄金价格出现大幅的下跌&#xff0c;但是从整体看&#xff0c;多个黄金投资品种的长期上升趋势还是比较稳定的&#xff0c;因此我们会看到&#xff0c;很多投资者会趁现在这波下跌重新入场做多。那么投资黄金买什么比较好呢&#xff1…

如何向全国各大新闻网站投稿?

在信息爆炸的时代,新闻媒体的投稿工作对于单位的信息宣传员来说,既是一项重要的职责,也是一项充满挑战的任务。作为一名信息宣传员,我负责着单位的对外信息宣传投稿工作,每个月都需要在各大媒体上发表文章,以展示单位的成果和风采。 然而,刚开始的投稿之路并不顺畅。我习惯性地…

4种企业防泄密的办法,强烈推荐第二种

4种企业防泄密的办法&#xff0c;强烈推荐第二种 企业信息泄密常见的原因有内部人员、黑客、违规收集信息、第三方合作商&#xff0c;以下将为你详细分析这些泄密原因以及应对的方法。 1、内部人员泄密 内部员工由于能够接触到敏感数据&#xff0c;成为主要的泄露数据群体。这…

2024最新洗地机推荐,洗地机怎么选?热门品牌哪个最好用?

在现代生活中&#xff0c;忙碌的日常让家庭清洁变得更加繁重和耗时。然而&#xff0c;洗地机的引入彻底改变了这一状况。凭借其强大的清洁效果和简便的使用方式&#xff0c;洗地机能够迅速清除地面上的各种污垢&#xff0c;使清洁工作变得轻松自如。正因为如此&#xff0c;洗地…

JWT生成token工具类实现

JWT简介 JWT定义 JWT全称为Json web token&#xff0c;也就是 Json 格式的 web token JWT数据结构 1.JWT由三段字符串组成&#xff0c;中间用.分隔 Project_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiZXhwIjoxNzE2MzcwMTM0LCJpYXQiOjE3MTU3NjUzMzQsImp0aSI6IjllO…