C#项目班级管理系统

班级管理系统项目总结

源码下载:https://download.csdn.net/download/weixin_44790046/12034705

1、 项目背景
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。目前,在学校里,随着高校规模的不断扩大和招生人数的不断增加,需要处理大量的学生数据信息。如何更好的组织学生信息,更加快捷的管理学生信息显得尤为的重要。作为计算机应用的一部分,使用计算机对学生信息进行管理,有着手工管理所无法比拟的优点例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生信息管理的效率,也是学校的科学化、正规化管理,与世界接轨的重要条件。我们为此开发了一套学生信息管理系统,本系统面向学校的教务人员,目的是为学校办公管理提供一个快速、简单规范的管理平台,使学院在学生信息管理方面更加规范化,快捷化。

2、 项目介绍
本项目以学校的学生信息管理为依托,结合教务教学管理,设计并开发一个班级信息管理系统,提供一个信息更新快捷、管理方便、功能设置合理的学生信息管理解决方案。针对学校大量的学生信息,就学生管理的几个方面,提供一个互动式的学生管理平台。项目目标如下:
➢通过学生信息管理系统的实现,使学校的学生信息管理更加科学化。
➢提供灵活、方便的操作。
➢节约学生信息管理的成本,提高学校管理的效率。
➢结合了C#WinForm的便捷性和SQL SERVER的方便性。
➢对系统提供必要的权限管理。
➢实现了基本的增、删、改、查功能。
➢本系统还实现了QQ群里的小部分功能如:聊天、群公告等。

3、项目模块学习过程及总结
模块1:制作登录窗口,本窗口用到了Lable、textbox、button等控件,本窗口难度不大,几乎每个人都可以轻松做出来,实现页面如下:
在这里插入图片描述

在编写此页面代码之前需要先做一个公共类,用于数据库的连接,SQL语句的执行,这样写法的好处在于只写一遍就可以了,别的地方如果要用到数据库连接,执行SQL语句,直接调用我们类里定义好的函数就可以了,减少了代码量与复杂度,这两个函数也是我们整天系统中使用最为频繁的两段代码,具体代码如下:

public static DataSet Select(string ss)         //执行查询语句
        {
            try//捕获异常
            {
                stop = false;
SqlConnection conn = new SqlConnection("server=DESKTOP-C3QU57B;integrated security=true;database=classdate");
                SqlDataAdapter da = new SqlDataAdapter(ss, conn);
                DataSet ds = new DataSet();
                if(conn.State==ConnectionState.Closed)
                {
                    conn.Open();
                }
                da.Fill(ds, "表1");
                conn.Close();
                return ds;
            }
            catch(SqlException ex) {

                MessageBox.Show(ex.ToString());
                stop = true;
                return null;
            }
        }
public static void Modify(string ss)        //执行增删改语句
        {
            try
            {
                stop = false;
   SqlConnection conn=new SqlConnection("server=DESKTOP-C3QU57B; integrated security = true; database=classdate");
                SqlCommand com = new SqlCommand(ss,conn);
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                com.ExecuteNonQuery();//执行sql语句
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                stop = true;
            }
        }

定义好公共类之后我们就可以写登录窗体的代码了,这个窗体里的代码实现就比较简单了,就是使用一条查询语句,where后面的查询条件就是你textbox输入的用户名和密码,如果能查到就是数据库里有这个人,即用户名密码正确,反之就弹窗提示密码错误。
之前我们在定义公共类publicData时定义了5个公共字段,这里就用查询出来的5个数据分别赋值公共类publicData定义的5个公共字段,方便我们之后使用,信息都正确后,打开我们的FormMain页面,同时关闭登录窗体。

模块2: 主界面制作,这里我比较深刻的是用到了我之前一直没用过的一个控件
就是menuStrip,(Menustrip 控件是由System.Windows.Forms.Menustrip类提供,取代了以前的MainMenu控件,是应用程序菜单结构的容器,在建立菜单时,要给Menustrip控件添加ToolStripMenu对象,这个操作可在设置时完成,也可在代码中完成。) 可以快速的帮助我们生成一个菜单,整体页面如下:

在这里插入图片描述

此窗体加载事件使用switch选择我们在登录窗体中添加到PublicData.quanzhong中的权重来判断这个用户有什么权限,进而决定他可以管理哪些内容可以用哪些功能。这个窗体还实现了点击某个ToolStripMenuItem就进入指定的窗体,实现一些其他功能,部分代码如下:

private void 学习录入ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PublicData.menu = "学习";
            录入 f = new 录入();
            f.Show();
        }

此段中的代码是当你点击学习->录入时打开的窗口,其他打开窗体的代码与此类似。

textBox2.Text = DateTime.Now.ToString();
这句代码的功能是获取当前系统时间,并显示在textbox2中,这句代码可谓是既简单又实用,以后会经常用到。
模块3:班费查询功能界面的实现,本页面实现了对班级里面的流水账的计算,每一笔收入支出都有详细记录,还提供了索引,可以快速找到其中一笔收入或支出,自动算出余额还有多少,界面如下:

在这里插入图片描述
本段代码比较难理解的地方就在于这个班费余额是怎么做出来的,是怎么实现的呢?先看下面实现代码:

private void Form班费查询_Load(object sender, EventArgs e)
        {
            double sum = 0.0;
            string ss = "select * from 班费";
            DataSet ds = PublicData.Select(ss);
            dataGridView1.DataSource = ds.Tables[0];
            for(int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                if (ds.Tables[0].Rows[i][5].ToString() == "收入")
                {
                    sum = sum + double.Parse(ds.Tables[0].Rows[i][4].ToString());
                }
                else
                {
                    sum = sum - double.Parse(ds.Tables[0].Rows[i][4].ToString());
                }
            }
            label3.Text = "班费余额为:" + sum;
        }

首先执行查询语句,查出里面有多少条记录,并用一个for循环,最大值为查出来的总条数每次+1开始循环,每一次循环都判断如果收支类型为收入那就总金额sum加上这条数据的钱数,否则就减去,最后通过Label3将其显示出来。

模块4:班级聊天室这个功能可能是我最喜欢的功能了,这个功能完全可以作成一款小型的聊天软件,通过注册来登录聊天,只需要一台固定IP的电脑作为服务器,数据库连接语句换成IP访问,然后将软件打包出来,每个安装这个软件的人就可以通过软件远程访问这台服务器,利用数据库的添加、查询操作就可以实现聊天了,很方便。虽然课上没能实现有点小遗憾。窗体样式如下:
在这里插入图片描述
该窗体上面也说了,通过简易的添加、查询即可实现,当然我们也主要是这么做的,具体代码如下

private void Button1_Click(object sender, EventArgs e)
        {
            if (textBox2.Text != "")
            {
   string sql = string.Format("insert into 聊天(昵称,内容,发言时间) values('{0}','{1}','{2}')", PublicData.nicheng, 
textBox2.Text, DateTime.Now.ToString());
                PublicData.Modify(sql);
                textBox2.Clear();
                textBox2.Focus();
            }
        }

这段代码就是当点击发布按钮时将文本框中的信息添加到数据库

private void Timer1_Tick(object sender, EventArgs e)
        {
            string sql = string.Format("select 昵称,内容,发言时间 from 聊天");
            DataSet ds = new DataSet();
            ds = PublicData.Select(sql);
            textBox1.Clear();
            for(int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
  			textBox1.Text += ds.Tables[0].Rows[i][2] + "\r\n" + ds.Tables[0].Rows[i][0] + ":" + ds.Tables[0].Rows[i][1] + "\r\n\r\n";
            }
            textBox1.SelectionStart = textBox1.Text.Length;
            textBox1.ScrollToCaret();
            string ss = "select * from 用户 where 状态='1'";
            ds = PublicData.Select(ss);
            label1.Text = "当前在线人数为:" + ds.Tables[0].Rows.Count;
        }

这里用到了Timer控件(这是一个定时器控件),这段代码也就是你疑问的地方,我们添加到数据库后怎么怎么看到自己发的信息,手动刷新吗,用循环?当然都可以,但不是最优解,我们用微软官方给我们做好的定时器,设定好时间在Tick事件中添加重复执行的代码就可以了,非常便捷。

private void TextBox2_KeyDown(object sender, KeyEventArgs e)//回车键执行按钮功能
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.Button1_Click(sender, e);
            }
        }

这里又用到了获取键盘键位来执行每个事件,我觉得这是这个窗体里最实用的地方了,后面写程序如果可以一定要加上,输入完信息,回车键直接登录,直接发送消息,很方便有木有,在其他各大厂商的软件上大范围应用了这种功能,熟知的QQ,微信等。

模块5:当然了,怎么能少了修改个人信息,修改密码这几个功能呢,由于里面就用了一些数据库里面的一些修改、查询语句,我就不再多讲,很简单,页面实现如下:
在这里插入图片描述
在这里插入图片描述
模块6用户信息管理:这个界面不光集成了增、删、改、查功能,还有许多实用的小功能,这个界面的制作是花费时间最久的,功能最为全面的,也是我记忆最为深刻的,我在此界面上你可以基本实现管理所有用户的信息,包括手动导入一些表格中的信息。页面布局如下:
在这里插入图片描述
部分代码详解:

private void 用户信息管理_Load(object sender, EventArgs e)
        {
            toolStripButton4.Enabled = false;
            toolStripButton5.Enabled = false;
            groupBox1.Enabled = false;
            load();
        }
public void load()          //将查询出来的数据添加到dataGridView中
        {
            string sql = "select * from 用户";
            DataSet ds = PublicData.Select(sql);
            dataGridView1.DataSource = ds.Tables[0];
            label9.Text = "当前共有:" + ds.Tables[0].Rows.Count + "个用户。";
        }

这两段代码共同实现了在窗体加载时,在不单机上方功能按钮的情况下让groupbox里面的控件都不可使用,同时调用load();函数,执行查询语句看里面一共有多少个用户显示在左下角的Lable中。

这两个功能的实现是这么做的,定义一个全局变量flag,当点击添加按钮时在Click事件中将flag赋值为1;当点击修改按钮时在Click事件中将flag赋值为0;然后点击保存按钮然后用if语句判断flog的值,看之前是点击了那个功能按钮,然后进行保存。

private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int a = dataGridView1.CurrentRow.Index;     //获取当前选中的行数
            textBox1.Text = dataGridView1.Rows[a].Cells[0].Value.ToString();
            textBox2.Text = dataGridView1.Rows[a].Cells[1].Value.ToString();
            textBox3.Text = dataGridView1.Rows[a].Cells[3].Value.ToString();
            textBox4.Text = dataGridView1.Rows[a].Cells[4].Value.ToString();
            textBox5.Text = dataGridView1.Rows[a].Cells[5].Value.ToString();
            textBox6.Text = dataGridView1.Rows[a].Cells[6].Value.ToString();
            comboBox1.Text = dataGridView1.Rows[a].Cells[2].Value.ToString();
            comboBox2.Text = dataGridView1.Rows[a].Cells[7].Value.ToString();
            id = textBox1.Text;
        }

这段代码在老师没讲之前我是自己写的,写完之后发现我写的只能是点击里面的数据才能将这一行用户的数据添加到上面的textbox中,于老师实现的效果有点出入,之后通过询问老师,才知道是使用错了事件,之前我用的CellContentClick,这个事件是在点击数据后才触发的,应该是用CellClick这个事件。

猜你喜欢

转载自blog.csdn.net/weixin_44790046/article/details/103562067