C#编程学习31:学生信息管理系统项目实战-上(VS2010+SQL server 2008)

目录

 

1 界面搭建

1.1 修改默认的Form1窗体为frmMain

1.2 添加MenuStrip、ToolStrip和StatusStrip控件

1.3 为不同控件设置相同的方法

2 数据维护窗体开发

2.1 创建数据集

2.2 frmDepartment.cs界面设计

2.3 班级数据库的维护

2.4 学生表的维护

2.5 课程表界面设计

3 登陆界面设计

3.1 创建frmLogin窗体

3.2 全局类

3.3 登录代码

3.4 在主窗体前启动登录窗体

4 小结


 

1 界面搭建

1.1 修改默认的Form1窗体为frmMain

上述操作会自动修改启动窗体,优于将原生的Form1窗体删除,然后通过新建窗体的方式

1.2 添加MenuStrip、ToolStrip和StatusStrip控件

构建如下界面:

1.3 为不同控件设置相同的方法

工具条和菜单栏的退出执行相同的代码,都是退出系统

对于菜单栏的退出,添加点击事件代码:

        private void tsmi_exitSystem_Click(object sender, EventArgs e)
        {
            Close();
        }

对于工具条的退出事件,直接选择菜单栏的退出函数即可

2 数据维护窗体开发

2.1 创建数据集

单击项目,添加新项;选择【数据】--【数据集】,命名为dsXK.xsd,【添加】

单击【服务器资源管理器】超链接

添加Xk数据库

添加Department数据表,设置主键为DepartNo

   

拖入到dsXk.xsd中

2.2 frmDepartment.cs界面设计

(1)显示数据源,并下拉设置为DataGirdView

 

(2)拖放Department至frmDepartment中

(3)点击DataGirdView右上小三角,编辑列

(4)主窗体中添加启动frmDepartment的代码

        private void 系部信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmDepartment fdt = new frmDepartment();
            fdt.MdiParent = this;
            fdt.Show();
        }

2.3 班级数据库的维护

(1)创建主外键关系图

 

(2)班级信息维护界面设计

  • 显示数据源,并下拉设置为DataGirdView
  • 拖放Class表至frmClass窗体中
  • 点击DataGirdView右上小三角,编辑列
  • 班级ID和班级名称设置同上,对系部ID列,将其与Department表绑定,如下图

2.4 学生表的维护

(1)创建学生表

(2)拖拽,显示【详细信息】

(3)将ClassNo的TextBox换成ComnoBox

    

(4)对性别的操作,先将TextBox换成ComnoBox;

  

2.5 课程表界面设计

(1)定义课程表

(2)重写新增、保存、编辑、删除、放弃按钮

先将gbEdit、tsbDelete和tsbConcel的Enabled属性设置为false

        private void ChangedEnabledState()
        {
            courseBindingNavigator.Enabled = !courseBindingNavigator.Enabled;
            gpEdit.Enabled = !gpEdit.Enabled;
            foreach (ToolStripButton tsb in tsControl.Items)
            {
                tsb.Enabled = !tsb.Enabled;
            }
        }
private void tsbInsert_Click(object sender, EventArgs e)
        {
            ChangedEnabledState();
            courseBindingSource.AddNew();
            txtCouNo.Focus();
        }

        private void tsbEdit_Click(object sender, EventArgs e)
        {
            ChangedEnabledState();
            couNameTextEdit.Focus();
        }

        private void tsbDelete_Click(object sender, EventArgs e)
        {
            if (courseBindingSource.Current != null)
            {
                if (MessageBox.Show("确定删除吗?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    courseBindingSource.RemoveCurrent();
                    this.tableAdapterManager.UpdateAll(this.xkDataSet1);
                }
            }
        }

        private void tsbSave_Click(object sender, EventArgs e)
        {
            ChangedEnabledState();
            this.Validate();
            this.courseBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.xkDataSet1);
        }

        private void tsbConcel_Click(object sender, EventArgs e)
        {
            ChangedEnabledState();
            this.courseBindingSource.CancelEdit();
        }

3 登陆界面设计

3.1 创建frmLogin窗体

3.2 全局类

如果数据表中设置的数据类型Text类型,Add函数不能使用SqlDbType.Text,出现类型转换错误,此处存疑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Xk
{
    class CPublic
    {
        public static bool IsManager;
        public static DataRow LoginInfo;
        public static void CheckUsers(string UserID, string UserPwd)
        {
            SqlConnection cn = new SqlConnection(Properties.Settings.Default.XkConnectionString);
            SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Users WHERE UserID=@UserID AND UserPwd=@UserPwd", cn);
            da.SelectCommand.Parameters.Add("@UserID", SqlDbType.NVarChar, 10).Value = UserID;
            da.SelectCommand.Parameters.Add("@UserPwd", SqlDbType.NVarChar, 10).Value = UserPwd;
            //
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                LoginInfo = ds.Tables[0].Rows[0];
                IsManager = true;
            }
            else
            {
                LoginInfo = null;
            }

        }
        public static void CheckStudent(int StuNo, string ClassNo)
        {
            SqlConnection cn = new SqlConnection(Properties.Settings.Default.XkConnectionString);
            SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Student WHERE StuNo=@StuNo AND ClassNo=@ClassNo", cn);
            da.SelectCommand.Parameters.Add("@StuNo", SqlDbType.Int).Value = StuNo;
            da.SelectCommand.Parameters.Add("@ClassNo", SqlDbType.Int).Value = ClassNo;
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                LoginInfo = ds.Tables[0].Rows[0];
                IsManager = false;
            }
            else
            {
                LoginInfo = null;
            }
        }
    }
}

3.3 登录代码

        private void btnLogin_Click(object sender, EventArgs e)
        {
            if (cbIsManeger.Checked)
            {
                CPublic.CheckUsers(txtID.Text, txtPwd.Text);
            }
            else
            {
                int stuID = int.Parse(txtID.Text);
                CPublic.CheckStudent(stuID, txtPwd.Text);
            }
            if (CPublic.LoginInfo == null)
            {
                MessageBox.Show("密码错误", "登录", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                Close();
            }
        }

3.4 在主窗体前启动登录窗体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Xk
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmLogin());  
 
            if (CPublic.LoginInfo != null)
            {
                Application.Run(new frmMain());
            }
        }
    }
}

 

4 小结

 

(1)建立数据库的主键和外键的之间的关系时,必须设置好主键【数据库小白,刚开始没搞明白,折腾了好久】

(2)多个按钮可以共享同一个点击事件,设置完第一个后,剩余的直接选择第一个点击事件的函数就可以了

(3)对原生的Form1.cs文件,右键属性,更改【文件名】,然后接受重命名操作;vs将会自动的更改因重命名导致的变更,特别的,run函数中的也会被更改掉;这种方式优于直接将原生Form1删掉的,然后再更改run的方法

(4)数据--显示数据源,左边的图标包括DataGridView和详细信息两种方式,如果要展示全部数据选用前者;若展示,选用后者

(5)将数据源拖拽到窗体中,会自动创建以下四个控件【*为表格名称】:

  • *BindSource
  • *TableAdapter
  • tableAdapterManager
  • *BindongNavigator:导航器控件

(6)对于DataGridView控件

HeaderText属性设置显示出来的列标题;DataProperityName实际决定那一列数据会被显示

ColumnType用于指示列的显示形式;

(7)ComboBoxColumn控件

若DataGridView的ColumnType指定为DataGridViewComboBoxColumn,则需指定数据源、显示数据和选定值等信息:【建议DisployStyle设置为Nothing】

若自己【使用数据项绑定】,需指定以下值:

若自定义序列,编辑项,自己手动输入:

(8)自定义数据库的增删改操作

 

 

 

 

  • 11
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值