数据库系统及应用——班级管理系统

我的GitHub网址

数据库技术

在本次设计中,用SQL Server建了六个表用来存储基本信息,分别为Tb_Student (学生信息表)、Tb_Course(课程信息表)、Tb_Course2(选修课程表)、Tb_ScoreSt(学生成绩表)、Tb_Slogin(学生登录表)、Tb_Admin(管理员信息表)。建立一个存储过程,Change_Student实现对学生表增加、更新信息、删除信息。建立一个触发器Slogin,监听学生信息表,如果有新的学生信息插入,则自动给学生登录表添加学生以及默认密码000.。一个视图,用于查看学生成绩(选修和非选修结合)。

C#技术

采用Visual Studio 2015新建项目Windows窗体应用程序,进行界面设计,本程序主要用到了Button、DataGridView、Label、Menustrip、TextBox、RadioButton。
引用using System.Data.SqlClient来进行数据库连接,要存取数据源内的属性,首先要建立程序和数据源之间的连接,利用Connection对象提供与数据源的连接。使用Command对象可以访问用于返回数据、修改数据,运行存储过程以及发送或检索参数信息的数据库命令,调用DataAdapter对象的Fill()方法填充DataSet对象等。

功能需求描述

(1)系统应符合班级管理制度的规定,满足班级日常管理的需要。
(2)基于现有成绩,可展示某学年某学期的成绩,以及对应的获得绩点。
(3)数据录入时,要保证数据的真实性以及合理性,不可出现无关数据。
(4)通过学校给于的综合测评计算方法,在数据库端实现相应的存储过程,方便每个学期结束时,统计德育分总和,品行表现分,学业成绩以及综合成绩和排名情况。
(5)按照奖学金分发的流程,实现自动对奖学金进行评定,减轻工作负担,评定后不合理处可以更改。
(6)操作简单,易懂,方便,能及时按需求进行增、删、改、查。
(7)实现后台的监控功能。

系统运行环境

系统在Windows10开发环境下,利用Visual Studio 2015 开发工具,并使用SQL Server2012作为数据库管理系统,来现班级管理系统的各个功能。

系统功能结构图及功能模块简介

系统功能结构图

主要表的结构

数据库名称为课设,共有6个表,只展示一个,完整项目可以到我的GitHub查看。

Tb_Student(学生信息表),用于保存学生的基本信息,
表3-1	学生信息表

前端界面设计

主登录界面
详细界面设计在GitHub中可以看到

视图

	用于学生查看个人成绩,由于选修课程表和非选修课程表表结构有差异,因此创建虚字段视图,用union all将数据连接起来
create view ScoreSearch 
as 
select S.Sno as SNO,C.Cno as CNO,Cname as CNAME,Cyear as CYEAR,Cterm as CTERM,Ccredit as CCREDIT,Cnature as CNATURE,Score as SCORE
from Tb_Course C,Tb_ScoreSt S
where C.Cno=S.Cno
union all
select C2.Sno_C AS SNO,C2.Cno as CNO,Cname as CNAME,Cyear  as CYEAR,Cterm as CTERM ,Ccredit as CCREDIT , null  as CNATURE, CScore as SCORE
from Tb_Course2 C2,Tb_Student S2
where C2.Sno_C=S2.Sno

存储过程

本系统的存储过程主要用于学生信息更新或者添加时候,避免前端设计时候的语句重复性,造成运行缓慢,因此写到数据库端
create procedure Insert_Student @Sno char(16),@Sname varchar(8),@Ssex char(2) ,@Saddress varchar(50),@Stell char(11),@Sqq char(16) ,@rtn int output
as
declare 
	@tmpSno char(16),
	@tmpSname varchar(8),
	@tmpSsex char(2) ,
	@tmpSaddress varchar(50),
	@tmpStell char(11),
	@tmpSqq char(16)
	if exists(select * from Tb_Student where Sno=@Sno)
		if @@OPTIONS=0
			delete from Tb_Student where Sno=@Sno
		else if @@OPTIONS=1
		begin 
			select @tmpSno=Sno,@tmpSname=Sname,@tmpSsex=Ssex,@tmpSaddress=Saddress,@tmpStell=Stell,@tmpSqq=Sqq
			from Tb_Student
			where Sno=@Sno
			if (@tmpSno=@Sno and @tmpSname=@Sname and @tmpSsex=@Ssex and  @tmpSaddress=@Saddress  and @tmpStell=@Stell and @tmpSqq=@Sqq )
				begin
					set @rtn=0
				end
			else 
				begin
					update Tb_Student set Sno=@Sno,Sname=@Sname,Ssex=@Ssex,Saddress=@Saddress,Stell=@Stell,Sqq=@Sqq
					where Sno=@Sno
					set @rtn=2
				end
		end
	else
		begin
			insert into Tb_Student(Sno,Sname,Ssex,Saddress,Stell,Sqq) values(@Sno,@Sname,@Ssex,@Saddress,@Stell ,@Sqq)
			set @rtn=1    --没有相同的数据,进行插入处理
		end

触发器

触发器用于管理员添加一个学生个人信息后,向学生登录信息表中添加账户姓名以及默认密码
create trigger Slogin
on Tb_Student 
for insert
as 
declare @sno char(16),@sname varchar(8);
begin 
		select @sno=Sno,@sname=Sname from inserted
		insert into Tb_SLogin values (@sno,@sname,'000')
end

登陆界面

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

using System.Text.RegularExpressions;

namespace WindowsFormsApplication1
{
    public partial class Login : Form
{
//静态变量传参,限定修改密码时候只能修改自己的
        static public string IDnew;
        static public string name;
        static public string pass;
        static public string welcome;
        public Login()
        {
            //Login.ID = null;
            InitializeComponent();
        }
        private void btnLogin_Click(object sender, EventArgs e)
        {
            string strsql_query = "";
            if (IDBox.Text != string.Empty && passwdBox.Text != string.Empty)
            {
                string ID2 = IDBox.Text.Trim().ToString();
                string passwd = passwdBox.Text.Trim().ToString();
                string strcon = "Data Source=(local);Initial Catalog=课设;Integrated Security=True";
                SqlConnection conn = new SqlConnection(strcon);
                conn.Open();
                if (stuButton.Checked)
                {
                    strsql_query = string.Format("select * from Tb_SLogin where  Sno='{0}' and Spassword='{1}'", ID2, passwd);
                }
                else if (adminButton.Checked)
                {
                    strsql_query = string.Format("select * from Tb_Admin where  id='{0}' and Password='{1}'", ID2, passwd);
                }
                SqlCommand cmd_query = new SqlCommand(strsql_query, conn);
                SqlDataReader dr = cmd_query.ExecuteReader();
                if (dr.HasRows)
                {
                    dr.Read();
                    if (stuButton.Checked)
                    {
                        Login.name = dr["Sname"].ToString();
                       
                        welcome = "欢迎  " + name + "  同学登录本系统";
                    }
                    else if (adminButton.Checked)
                    {
                        Login.name = dr["id"].ToString();
                    }
                    dr.Close();
                    if (stuButton.Checked)
                    {
                        StudentPage stu = new StudentPage();
                        pass = passwd;
                        IDnew = ID2;
                        MessageBox.Show(welcome);
                        stu.Show();
                    }
                    else
                    {
                        adminPage main = new adminPage();
                        main.Show();
                    }
                    Visible = false;
                }
                else
                {
                    MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    passwdBox.Focus();
                }
            }
            else
            {
                MessageBox.Show("用户名或密码不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void reBtn_Click(object sender, EventArgs e)
        {
            IDBox.Text = "";
            passwdBox.Text = "";
        }
        private void Login_Load(object sender, EventArgs e)//光标TAB换行
        {
            IDBox.TabIndex = 0;
            passwdBox.TabIndex = 1;
        }
        public void clear_passwd_ID(Login l)
        {
            l.passwdBox.Text = "";
            l.IDBox.Text = "";
        }
    }
}

学生个人界面

namespace WindowsFormsApplication1
{
    public partial class StudentPage : Form
    {
       // bool One = false;
        Login login = new Login();
        SCoreSt scst;
        PasswordChange pc;
  
        public StudentPage()
        {
            InitializeComponent();
            this.IsMdiContainer = false;
        }
        public void CloseFrom()
        {
        }
        private void 注销ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("确定注销吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
            if (r == DialogResult.Yes)
            {
                Login login = new Login();
                login.Visible = true;
                login.clear_passwd_ID(login);
                Close();
            }
        }
        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("确定退出吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
            if (r == DialogResult.Yes)
            {
                Close();
            }
        }
        private void 成绩查询ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.CloseFrom();
            scst = new SCoreSt();
            scst.Show();
        }
        private void 修改密码ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.CloseFrom();
            pc = new PasswordChange();
            pc.Show(); 
        }
        private void btnChange_Click(object sender, EventArgs e)
        {
            int clickTimes;
            object tag = this.btnChange.Tag;
            if (tag == null)
            {
                clickTimes = 0;
            }
            else
            {
                clickTimes = Convert.ToInt32(tag);
            }
            this.btnChange.Tag = ++clickTimes;
            if ((clickTimes % 2) == 1)
            {
                string word = "保存";
                btnChange.Text = word.ToString();
                SaddressBox.ReadOnly = false;
                StellBox.ReadOnly = false;
                SqqBox.ReadOnly = false;
            }
            else
            {
                //SnoBox.ReadOnly = false;
                string a = SnoBox.Text.Trim().ToString();
                //SnameBox.ReadOnly = false;
                string b = SnameBox.Text.Trim().ToString();
                //SexBox.ReadOnly = false;
                string c = SexBox.Text.Trim().ToString();
                //Char[] cc = c.ToCharArray();
                //由于数据库端对于Ssex列添加check('男','女')的约束,导致存储时出现问题,于是将该约束删去。
                string d = SaddressBox.Text.Trim().ToString();
                string g = StellBox.Text.Trim().ToString();
                string f = SqqBox.Text.Trim().ToString();
                string sql = "Insert_Student";
                string strcon2 = "Data Source=(local);Initial Catalog=课设;Integrated Security=True";
                //存储过程调用及传参
                SqlConnection conStr = new SqlConnection(strcon2);
                SqlCommand INs = new SqlCommand(sql, conStr);
                INs.CommandType = CommandType.StoredProcedure;
                INs.Parameters.Add("@Sno", SqlDbType.Char).Value = a;
                INs.Parameters.Add("@Sname", SqlDbType.VarChar).Value = b;
                INs.Parameters.Add("@Ssex", SqlDbType.Char).Value = c;
                INs.Parameters.Add("@Saddress", SqlDbType.VarChar).Value = d;
                INs.Parameters.Add("@Stell", SqlDbType.Char).Value = g;
                INs.Parameters.Add("@Sqq", SqlDbType.Char).Value = f;
                INs.Parameters.Add("@rtn", SqlDbType.Int).Value = 2;
                conStr.Open();
                SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter(INs);
                DataTable DT = new DataTable();
                SqlDataAdapter1.Fill(DT);
                conStr.Close();
                MessageBox.Show("修改成功!");
                string word = "修改";
                btnChange.Text = word.ToString();
                SaddressBox.ReadOnly = true;
                StellBox.ReadOnly = true;
                SqqBox.ReadOnly = true;
            }
        }
        private void StudentPage_Load(object sender, EventArgs e)
        {
            string Sno = Login.IDnew;
            //MessageBox.Show(Sno);//测试有没有传过来
            string strcon = "Data Source=(local);Initial Catalog=课设;Integrated Security=True";
            SqlConnection conn = new SqlConnection(strcon);
            conn.Open();
            SnoBox.Text = Login.IDnew;
            string strsql1 = string.Format("select Sname from Tb_Student where Sno='{0}'", Sno);
            SqlCommand SNAME = new SqlCommand(strsql1, conn);
            SnameBox.Text = SNAME.ExecuteScalar().ToString().Trim();
            string strsql2 = string.Format("select Ssex from Tb_Student where Sno='{0}'", Sno);
            SqlCommand SEX = new SqlCommand(strsql2, conn);
            SexBox.Text = SEX.ExecuteScalar().ToString().Trim();
            string strsql3 = string.Format("select Saddress from Tb_Student where Sno='{0}'", Sno);
            SqlCommand SAD = new SqlCommand(strsql3, conn);
            SaddressBox.Text = SAD.ExecuteScalar().ToString().Trim();
            string strsql4 = string.Format("select Stell from Tb_Student where Sno='{0}'", Sno);
            SqlCommand STEL = new SqlCommand(strsql4, conn);
            StellBox.Text = STEL.ExecuteScalar().ToString().Trim();
            string strsql5 = string.Format("select Sqq from Tb_Student where Sno='{0}'", Sno);
            SqlCommand SQQ = new SqlCommand(strsql5,conn);
            SqqBox.Text = SQQ.ExecuteScalar().ToString().Trim();
            conn.Close();
        }
    }
}

没用更多的篇幅去讲解这个系统,在GitHub中有详细的说明

部分结果展示

在这里插入图片描述

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值