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.pswp.cn/web/13041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13041.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高并發-線程池面試

文章目錄 高并發-線程池2024心得好的博客必會面試題為什么使用線程池線程池的實現原理線程池的拒絕策略阻塞隊列已滿&#xff0c;在提交任務會發生什么問題threadlocal原理和使用多線程配置 高并發-線程池2024 心得 面試都是圍繞著三高展開&#xff0c;高并發&#xff0c;高可…

洗衣洗鞋店做小程序有什么優勢?

互聯網洗衣洗鞋小程序閃亮登場&#xff0c;想知道這款小程序有何魅力嗎&#xff1f; 如今&#xff0c;眾多商家紛紛推出預約上門洗鞋服務&#xff0c;&#x1f481;?♀?并傾力打造洗鞋小程序&#xff0c;旨在拓展線上銷售渠道。&#x1f31f;那么&#xff0c;這款洗鞋小程序究…

Oracle數據庫的CURRENT SCN

數據庫的CURRENT SCN是Oracle當前最大的SCN&#xff0c;可以通過多種方法獲取該SCN&#xff1a; 1、直接從內存中獲取。由于當前最大SCN存儲在fixed sga中&#xff0c;因此可以通過Oracle debug工具DUMP kcsgscn結構體獲取內存中的最大SCN。在下面的程序中&#xff0c;BA371為1…

網絡配置的加密存儲

隨著數據泄露事件的增加&#xff0c;擾亂了公司的正常工作周期&#xff0c;企業遭受了損失。事實上&#xff0c;數據泄露可以通過存儲加密來控制&#xff0c;存儲加密是防止黑客對網絡數據庫造成嚴重破壞的最有效方法之一。在網絡配置管理器中&#xff0c;存儲加密可用于存儲設…

SpringBoot解析MyBatis預編譯SQL

pom.xml <profile><!-- 開發環境 --><id>dev</id><activation><!-- 默認激活 --><activeByDefault>true</activeByDefault></activation><properties><spring.profiles.active>dev</spring.profiles.ac…

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…

字符串解析-KMP魔改

題目 已知存在一種字符串解析語法&#xff0c;其中的語法元素如下 N:用于匹配單個數字(0-9) A:用于匹配單個字母(a-z,A-Z) n():用于表示一個分組&#xff0c;分組中至少有一個N語法元素或者A語法元素&#xff0c;n為一個數值&#xff0c;表示匹配n次&#xff0c;1<n< 20…

歡迎光臨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&…

【js獲取月份最后一天】

功能 獲取月份最后一天 代碼 function getLastDay(year, month) {//返回月份最后一天&#xff0c;不寫參數默認返回本月最后一天var date new Date(),date2, day;if (year undefined) year date.getFullYear(); //獲取今年年份if (month undefined) month date.getMont…

Linux- cron調度進程

cron 是一個 Unix 類操作系統中的時間調度守護進程&#xff0c;用于在特定的時間或間隔運行指定的命令或腳本。它非常適合自動化系統管理和維護任務&#xff0c;如備份、日志輪轉、系統監控等。以下是 cron 守護進程的詳細介紹。 cron 守護進程的工作原理 crontab 文件&#x…

上海市計算機學會競賽平臺2022年5月月賽丙組三數排序

題目描述 給定三個整數 &#x1d44e;,&#x1d44f;,&#x1d450;a,b,c&#xff0c;請將它們以從小到大的順序排序后輸出。 輸入格式 單獨一行&#xff1a;三個整數表示 &#x1d44e;,&#x1d44f;,&#x1d450;a,b,c。 輸出格式 單獨一行&#xff1a;表示按升序排列…

匯聚榮:拼多多長期沒有流量如何提高?

在電商的海洋中&#xff0c;拼多多以其獨特的團購模式吸引了眾多消費者的目光。然而&#xff0c;隨著市場競爭的加劇和消費者需求的多樣化&#xff0c;一些商家發現自家店鋪的流量持續低迷&#xff0c;銷售業績難以突破。面對這樣的挑戰&#xff0c;如何有效提升拼多多店鋪的客…

【Python】學生管理系統

為了了解Json以及在python中如何處理Json數據&#xff0c;我在這里整理了一段全面詳細的 Python 代碼&#xff0c;演示了如何加載、處理和操作 JSON 數據。該代碼包括讀取 JSON 數據、查詢學生信息、添加新學生、更新課程信息等操作。 示例代碼 import json# 示例 JSON 數據 …

深視 線掃相機 獲取點云數據

Qt hello - 專注于Qt的技術分享平臺 最近項目上用到了深視的線掃相機&#xff0c;集成了三天才搞定&#xff0c;分享下代碼。 順便吐槽一下&#xff0c;想用相機取圖&#xff0c;這么簡單的功能&#xff0c;搞得如此麻煩。 1&#xff0c;文檔有三份&#xff0c;就不能集成到…

【計算機畢業設計】springboot反詐科普平臺的設計與實現

相比于以前的傳統手工管理方式&#xff0c;智能化的管理方式可以大幅降低反詐科普平臺的運營人員成本&#xff0c;實現了反詐科普平臺的 標準化、制度化、程序化的管理&#xff0c;有效地防止了反詐科普平臺的隨意管理&#xff0c;提高了信息的處理速度和精確度&#xff0c;能夠…