C#实战系列—学生信息管理系统(二)源码分析

Wesley13
• 阅读 437

C#实战系列—学生信息管理系统(二)源码分析

对部分核心源代码进行分析,项目已开源,查看完整代码,文章底部有链接。


学生信息管理系统分为三个部分

  • [ ] 项目展示
  • [x] 源码分析
  • [ ] 项目打包

现在展示的是对原有系统进行二次开发的结果。为2.0版本。


一、界面设计

1、新建项目

新建项目的时候选择Windows窗体应用程序

C#实战系列—学生信息管理系统(二)源码分析

2、工具箱的使用

使用Windows窗体应用程序,界面的代码不用自己写。直接将工具箱里面的控件拖过来进行搭配即可。比较简单。

C#实战系列—学生信息管理系统(二)源码分析

3、控件的属性设置

每个控件都有很多的属性,可以针对不同的场景进行不同的属性设置。

C#实战系列—学生信息管理系统(二)源码分析

可以先将所有的界面都设计好再进行逻辑部分的编程

二、代码分析

1、数据库的链接代码

因为系统的所有数据都是存储在数据库,所以先进行数据库的链接。有两种链接方式:

(1)、直接在触发事件里面写数据库链接语句(数据库存放在Debug文件夹下)

string wa;
OleDbConnection a1 = new OleDbConnection();
OleDbCommand a2 = new OleDbCommand();
//数据库连接语句
a1.ConnectionString = "Provider=Microsoft.ace.OLEDB.12.0;Data Source= 学生信息管理数据库.accdb";
a1.Open();

(2)、进行数据库连接的集成,使用的时候直接调用文件即可

新建一个,命名为data.cs,用来存放数据库连接语句

C#实战系列—学生信息管理系统(二)源码分析

data.cs文件代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    class data
    {
        //进行数据库连接集成,后续就不用每个From都写数据库连接语句
        public static string mystr = "provider =microsoft.ace.oledb.12.0;data source=学生信息管理数据库.accdb";
    }
}
需要调用的时候这样写:
string wa;
OleDbConnection a1 = new OleDbConnection();
OleDbCommand a2 = new OleDbCommand();
a1.ConnectionString = data.mystr; //调用data文件,获取数据库连接代码
a1.Open();

2、进行查询操作(以登录为例)

用户进行登录其实也是一个查询的过程。用户输入用户名、密码和角色,首先对数据进行查询是否真实。然后在按照角色来判断应该跳转到学生端、教师端还是后台管理。首页代码如下:
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.OleDb;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /*
         *登录按钮触发事件
         */
        private void button1_Click(object sender, EventArgs e)
        {
            string wa;
            OleDbConnection a1 = new OleDbConnection();
            OleDbCommand a2 = new OleDbCommand();
            //数据库连接
            a1.ConnectionString = "Provider=Microsoft.ace.OLEDB.12.0;Data Source= 学生信息管理数据库.accdb";
            a1.Open();
            //在数据库中查找对应 的用户名和密码
            wa = "Select * from 用户表 where 用户名='" + textBox1.Text.Trim() + "'and 密码='" + textBox2.Text.Trim() + "'and 角色='" + comboBox1.Text.Trim() + "'";
            a2.CommandText = wa;
            a2.Connection = a1;
            a2.ExecuteScalar();
            //获取到数据证明输入账号正确
            if (null != a2.ExecuteScalar())
            {
                //判断账户类型是否为学生
                if (comboBox1.Text == "学生")
                {
                    MessageBox.Show("欢迎进入信息管理系统学生端!", "登录成功!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Visible = false;
                    Form2 f2 = new Form2();   //Form2为学生端主界面
                    f2.ShowDialog();
                    this.Visible = true;
                }
                else
                {
                    //判断账户类型是否为老师
                    if (comboBox1.Text == "老师")
                    {
                        MessageBox.Show("欢迎进入信息管理系统教师端!", "登录成功!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Visible = false;
                        Form4 f3 = new Form4();  //Form4为教师端主界面
                        f3.ShowDialog();
                        this.Visible = true;
                    }
                    else
                    {
                        //判断账户类型是否为管理员
                        MessageBox.Show("欢迎进入后台管理模式!", "登录成功!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Visible = false;
                        Form16 f4 = new Form16();  //Form2为后台管理主界面
                        f4.ShowDialog();
                        this.Visible = true;

                    }
                }
            }
            else  //账户或者密码错误
            {
                MessageBox.Show("登录失败!请输入正确的用户名、密码和角色!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               
            }
        }

        /*
       *注册按钮触发事件
       */
        private void button2_Click(object sender, EventArgs e)
        {
            Form32 f2 = new Form32();  //Form32为注册界面
            f2.ShowDialog();
        }

        /*
       *取消按钮触发事件
       */
        private void button3_Click(object sender, EventArgs e)
        {
            //清空数据
            textBox1.Text = "";  
            textBox2.Text = "";
            comboBox1.Text = "";

        }

        /*
       *底部版权超链接
       */
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
           linkLabel1.LinkVisited = true;
            //使用IE浏览器打开
           System.Diagnostics.Process.Start("IExplore", "https://www.cztcms.cn");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

3、添加操作(以注册为例)

用户注册涉及查询和添加。首先进行查询是否存在这个用户,如果不存在则可以注册。注册界面代码:
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.OleDb;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form32 : Form
    {
        public Form32()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            { MessageBox.Show("请输入用户名!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
            else
                if (textBox2.Text == "")
                { MessageBox.Show("请输入用户密码!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                else
                    if (comboBox1.Text == "")
                    { MessageBox.Show("请选择用户角色!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }

                    else
                        if (textBox2.Text == textBox3.Text)
                        {


                            string wa;
                            OleDbConnection a1 = new OleDbConnection();
                            OleDbCommand a2 = new OleDbCommand();
                            a1.ConnectionString = "Provider=Microsoft.ace.OLEDB.12.0;Data Source= 学生信息管理数据库.accdb";
                            a1.Open();
                            wa = "Select * from 用户表 where 用户名='" + textBox1.Text.Trim() + "'";
                            a2.CommandText = wa;
                            a2.Connection = a1;
                            a2.ExecuteScalar();
                            if (null != a2.ExecuteScalar())
                            {
                                MessageBox.Show("注册失败,该用户名已经存在!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                            }
                            else
                            {
                            //向数据库添加数据
                                wa = "INSERT into 用户表 values(" + "'" + textBox1.Text.Trim() + "','" + textBox2.Text.Trim() + "','" + comboBox1.Text.Trim() + "')";
                                a2.CommandText = wa;
                                a2.Connection = a1;
                                a2.ExecuteNonQuery();
                                MessageBox.Show("用户注册成功,请进行登录!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                               Application.OpenForms["form32"].Close();
                              

                            }
                        }
                        else
                        {
                            MessageBox.Show("两次输入的密码不一样!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                        }


        }

        private void label5_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

        private void Form32_Load(object sender, EventArgs e)
        {

        }
    }
}

4、修改操作(以修改密码为例)

  private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            { MessageBox.Show("请输入用户名!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
            else
                if (textBox2.Text == "")
                { MessageBox.Show("请输入用户密码!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                else
                    if (textBox3.Text == "")
                    { MessageBox.Show("请再次输入密码!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                    else

                        if (textBox2.Text == textBox3.Text)
                        {
                            string wa;
                            OleDbConnection a1 = new OleDbConnection();
                            OleDbCommand a2 = new OleDbCommand();
                            a1.ConnectionString = "Provider=Microsoft.ace.OLEDB.12.0;Data Source= 学生信息管理数据库.accdb";
                            a1.Open();


                            string sql = "select * from 用户表 where 用户名='" + textBox1.Text.Trim() + "'";
                            a2.CommandText = sql;
                            a2.Connection = a1;
                            OleDbDataReader a3 = a2.ExecuteReader();
                            if (a3.Read() == false)
                            { MessageBox.Show("系统不存在此信息!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                            else
                            {
                                MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
                                DialogResult dr = MessageBox.Show("确定要修改此信息吗!", "修改信息", messButton, MessageBoxIcon.Information);
                                if (dr == DialogResult.OK)
                                {
                                    a3.Close();
                                    wa = "update 用户表 set 密码='" + textBox2.Text.Trim() + "' where 用户名='"+textBox1 .Text .Trim ()+"'";
                                    a2.CommandText = wa;
                                    a2.Connection = a1;
                                    a2.ExecuteNonQuery();
                                    MessageBox.Show("信息修改成功!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }

                            }
                        }
else
                            {
                                MessageBox.Show("两次密码不一样!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            }


                        }

5、删除操作

  private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            { MessageBox.Show("请输入用户名!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
            else
                if (textBox2.Text == "")
                { MessageBox.Show("请先查询用户信息!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                else

                    if (comboBox1.Text == "")
                    { MessageBox.Show("请先查询用户信息!", "警告!", MessageBoxButtons.OK, MessageBoxIcon.Warning); }

                    else
                    {
                        OleDbConnection a1 = new OleDbConnection();
                        OleDbCommand a2 = new OleDbCommand();
                        a1.ConnectionString = data.mystr;
                        a1.Open();
                        MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
                        DialogResult dr = MessageBox.Show("确定要删除此用户吗!", "删除用户", messButton, MessageBoxIcon.Information);
                        if (dr == DialogResult.OK)
                        {
                            string wa;
                            wa = "delete * from 用户表 where 用户名='" + textBox1.Text.Trim() + "' and 密码='" + textBox2.Text.Trim() + "'and 角色='" + comboBox1.Text.Trim() + "' ";
                            a2.CommandText = wa;
                            a2.Connection = a1;
                            a2.ExecuteNonQuery();

                            { MessageBox.Show("用户删除成功!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information); }
                        }
                    }
        }

6、添加图片

在添加个人信息的时候需要进行个人照片的添加,有两个难点。一个是需要可以获取本机文件,另一个是上传图片的格式获取。首先在主类(Program)里面添加如下代码,注意:不是入口类Main
 //定义添加图片的成员变量
 public static string Imagefile;
 public static string FileName;
然后在添加图片的控件里面写如下代码:
OpenFileDialog dr = new OpenFileDialog();
dr.ShowDialog();
dr.Filter = "image file (*.bmp;*.jpg)|*.bmp;*.jpg";
string imagefile = dr.FileName;
pictureBox1.ImageLocation = imagefile;
Program.Imagefile = imagefile;

7、将数据库的数据显示在dataGridView控件上

dataGridView控件可以以表格的方式显示数据,对课程信息、成绩等等显示效果非常好。主要代码如下:
//查询整个表的内容
string sql1 = "select * from  学生信息表 ";
OleDbDataAdapter ad1 = new OleDbDataAdapter(sql1, a1);
DataSet ds1 = new DataSet();
ad1.Fill(ds1);
//将数据以列表的形式显示出来
dataGridView1.DataSource = ds1.Tables[0];
MessageBox.Show("检索成功!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
其实整个系统的功能都是围绕对数据的增删查改来开展。整个系统有非常多的漏洞。例如登录与注册时的数据限制,尤其是安全与角色权限这一部分。一大堆漏洞。不过在当时基本没有什么编程能力的前提下,写出了这样一个系统还是挺不错了。这次也只是记录一下自己的C#编程经历。至于系统就不会再去更新维护了。

下一篇进行项目的打包与安装,敬请期待!

项目开源地址(仅供学习参考)

C#实战系列—学生信息管理系统(二)源码分析                 C#实战系列—学生信息管理系统(二)源码分析

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
C#实战系列—学生信息管理系统(三)项目打包
!image(https://www.cztcms.cn/wpcontent/uploads/2020/05/c特色图片.png)学生信息管理系统分为三个部分\\项目展示\
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这