學生選課管理系統的設計與開發
一、項目背景
學生選課管理系統是一個學校不可缺少的部分,傳統的人工管理檔案的方式存在著很多的缺點,如:效率低、保密性差等,所以開發一套綜合教務系統管理軟件很有必要,它應該具有傳統的手工管理所無法比擬的優點,如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優點能夠極大的提高學校的管理效率,有助于推進學校的信息化建設。
二、技術選型
C#的窗體程序開發
本系統未采用C#實現MDI——多文檔窗口,因為考慮到C#的該技術與java類似,而暑期java實訓時,曾用過類似的方法做過停車場管理系統,所以想為這次的系統注入一點新鮮的血液,所以本系統設計的主題采用了了C#的C#TreeView 實現。
Sql server數據庫
三、需求分析
本系統只有一類用戶:管理員。管理員可以通過系統來添加管理員信息、修改管理員信息、添加學生信息、修改學生信息;開設課程、查詢課程等。
3.1 管理員角色擁有的功能
管理員信息管理
- 添加管理員信息;
- 管理員可以添加其他的管理員信息。
- 修改管理員信息;
- 管理員可以刪除其他的管理員信息。
課程管理
- 開設課程;
- 管理員可以錄入課程信息,學生就可以瀏覽到這些課程信息,從而選課。
- 查詢課程;
- 可以通過學期查詢課程,或通過學期和課程結合的方式查詢課程。
四、數據庫設計
4.1 完成系統中數據表的結構設計
管理員信息表
用戶表:UserInfo | ||||
字段名稱 | 數據類型 | 可空 | 默認值 | 說明 |
id | nvarchar(20) | 不可 | 主鍵,管理員id | |
name | nvarchar(20) | 不可 | 管理員姓名 | |
pwd | nvarchar(50) | 不可 | 管理員密碼 | |
sex | nvarchar(5) | 不可 | 管理員性別 |
學生選課信息表
管理員信息表:CourseInfo | ||||
字段名稱 | 數據類型 | 可空 | 默認值 | 說明 |
id | int | 不可 | 自動增長 | 主鍵,課程id |
name | nvarchar(100) | 不可 | 課程名稱 | |
kcms | nvarchar(500) | 不可 | 課程描述 | |
xkrq | DATETIME | 不可 | 學生選課日期 | |
xkxs | nvarchar(20) | 不可 | 選課學生 |
五、界面設計
登錄界面:
注冊界面:
5.1 管理員角色
管理員界面:
管理員賬號添加界面:
選課信息查詢界面:
添加選課信息界面:
六、關鍵技術的介紹
使用模板來搭建框架,減少每個頁面的代碼量,同時方便修改
具體代碼如下:
Site1.Master
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="MySite.Site1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><title>溫州理工學院學生選課管理信息系統</title><asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder><style type="text/css">.auto-style1 {height: 90px;}</style></head><body bgcolor="#c0c0c0"><center><form id="form1" runat="server"><div><table width="780" bgcolor="#FFFFFF" border="0" cellpadding="0" cellspacing="0"><tr><td><img src="images/01.gif" width="780" height="120" alt=""></td></tr><tr><td><table border="0" width="100%" cellspacing="0" cellpadding="0" background="images/02.gif"><tr><td height="40" width="180" align="center"><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td><td class="ClassTitle"><asp:Label runat="server" Text="歡迎進入溫州理工學院學生選課管理信息系統"></asp:Label>|<asp:Label ID="lbId" runat="server" Text="Label"></asp:Label></td></tr></table></td></tr></table><table width="780" bgcolor="#FFFFFF" border="1" cellpadding="0" cellspacing="0"><tr><td height="450" width="180" valign="top" align="center"><table border="0" width="170" cellspacing="0" cellpadding="0" class="auto-style1"><tr><td><a href="Index.aspx">信息系統用戶管理</a></td></tr><tr><td><a href="AddUser.aspx">添加用戶</a></td></tr><tr><td><a href="Index2.aspx">學生選課查詢</a></td></tr><tr><td><a href="AddSafe.aspx">添加選課信息</a></td></tr></table></td><td height="450px" valign="top" style="padding-top:10px" align="center"><asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder></td></tr></table><table border="0" width="780" cellspacing="0" cellpadding="0"><tr><td background="images/04.gif" height="29" align="center" class="ClassTitle">聯系我們 <a href="login.aspx">管理員登錄</a></td></tr></table></div></form></center>
</body>
</html>Site1.Master.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;namespace MySite
{public partial class Site1 : System.Web.UI.MasterPage{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){ Label1.Text = DateTime.Today.Date.ToString("yyyy年MM月dd日");if (Session["Id"]!=null){lbId.Text = Session["Id"].ToString();}}}}
}
使用自創類來處理每個頁面的數據庫訪問操作
包括:數據庫連接、構建數據庫查找字符串、對搜索數據進行分類判斷、返回封裝好的數據對象、對異常數據的沖突處理等
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;namespace MySite
{public class SiteDAL{private SqlConnection sqlcon;private SqlCommand sqlcom;private string strCon = "server=(local);uid=lqc;pwd=123;database=SCMS";public DataSet GetUser(string id, string name ,string sex){string sqlstr = "select * from UserInfo where 1=1 ";if (id != "" && id != null){sqlstr = sqlstr + " And (Id = '" + id + "')";}else{if (name != "" && name != null){sqlstr = sqlstr + " And (Id like '%" + name + "%' Or name like '%" + name + "%')";}}if (sex != "全部"){sqlstr = sqlstr + " And Sex='" + sex + "'";}sqlcon = new SqlConnection(strCon);SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);DataSet myds = new DataSet();sqlcon.Open();myda.Fill(myds, "user"); sqlcon.Close();return myds;}internal int DeleteSafe(string Id){string sqlstr = "delete from CourseInfo where Id='" + Id + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}internal DataSet GetSafe(string id ,string name, DateTime? xkrq){string sqlstr = "select * from CourseInfo where 1=1 ";if (!string.IsNullOrEmpty(id)){sqlstr = sqlstr + " And (Id = " + id + ")";}else{if (name != "" && name != null){sqlstr = sqlstr + " And (Name like '%" + name + "%')";}if (xkrq!=null){sqlstr = sqlstr + " And (xkrq = '" + xkrq.Value.ToString("yyyy-MM-dd") + "')";}}sqlcon = new SqlConnection(strCon);SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);DataSet myds = new DataSet();sqlcon.Open();myda.Fill(myds, "food");sqlcon.Close();return myds;}public int DeleteUser(string Id){string sqlstr = "delete from UserInfo where Id='" + Id + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result= sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int UpdateUser(string id, string name, string pwd ,string sex){string sqlstr = "update UserInfo set name='" + name + "',Pwd='" + pwd + "',Sex='" + sex + "' where Id='" + id + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int AddUser(string id, string name, string pwd, string sex){string sqlstr = "insert into UserInfo(Id,Name,Pwd,Sex)values('" + id + "','" + name + "','" + pwd + "','" + sex + "')";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int UpdateSafe(int id, string name, string kcms, DateTime xkrq, string xkxs){string sqlstr = "update CourseInfo set Name='" + name + "',kcms='" + kcms + "',xkrq='" + xkrq.ToString("yyyy-MM-dd")+ "',xkxs='" + xkxs + "' where Id=" + id;sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int AddSafe(string name, string kcms, DateTime xkrq, string xkxs){string sqlstr = "insert into CourseInfo(name,kcms,xkrq,xkxs)values('" + name + "','" + kcms + "','" + xkrq.ToString("yyyy-MM-dd") + "','" + xkxs + "')";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}}
}
七、完成情況總結
經過一周的努力,從一開始不知道從什么地方下手到項目最終成功運行起來,我完成了學生選課信息管理系統的開發與設計。然而我只是設計出了主要的功能,項目還有很多地方可以優化,比如優化數據庫的訪問速度、增加學生數據庫和課程數據庫來分別存儲不同類型的數據信息等。
在這次大作業項目的開發過程中,我遇到了數不勝數的BUG,但是都通過生科學習到的知識或者上網搜索完美的解決了,我從課堂學習的碎片化的知識中整理出比較系統的知識體系,加上自己的理解,最終寫出了這個信息管理系統。從中學習到的模板利用以及代碼復用的思想讓我獲益良多,對以后開發別的項目都有極大的好處。
通過這次實驗,使我對軟件開發有了更深一步的了解。在軟件開發中應注意的問題和考慮的問題都能較好的做到。