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