学生选课管理系统的设计与开发
一、项目背景
学生选课管理系统是一个学校不可缺少的部分,传统的人工管理档案的方式存在着很多的缺点,如:效率低、保密性差等,所以开发一套综合教务系统管理软件很有必要,它应该具有传统的手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大的提高学校的管理效率,有助于推进学校的信息化建设。
二、技术选型
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,但是都通过生科学习到的知识或者上网搜索完美的解决了,我从课堂学习的碎片化的知识中整理出比较系统的知识体系,加上自己的理解,最终写出了这个信息管理系统。从中学习到的模板利用以及代码复用的思想让我获益良多,对以后开发别的项目都有极大的好处。
通过这次实验,使我对软件开发有了更深一步的了解。在软件开发中应注意的问题和考虑的问题都能较好的做到。