学员管理系统(1)

2022-09-21  本文已影响0人  山猪打不过家猪

1. 项目要求

image.png

2. 项目搭建

2.1 添加两个类库DALModels
image.png
2.2 Models 层添加实体类

实体的字段和类型根据数据库的表一一对应


image.png
namespace Models
{
    class Admin
    {
        public int LoginId { get; set; }
        public string LoginPwd { get; set; }
        public string AdminName { get; set; }
    }
}

2.3 在DAL层添加数据访问类

主要写各个类的sql语句


image.png
    public class SqlHelper
    {
        /// <summary>
        /// 必须和App.config里面的name一致
        /// </summary>
        public static string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();
} 

3.项目内容

3.1 用户登录

FrmUserLogin.cs

            //封装用户信息到用户对象
            Admin objAdmin = new Admin()
            {
                LoginId = Convert.ToInt32(this.txtLoginId.Text.Trim()),
                LoginPwd = this.txtLoginPwd.Text.Trim().ToString(),
            };
objAdmin = objAdminService.AdminLogin(objAdmin); //获取数据库信息,赋值给objAdmin
if (objAdmin == null)
{
    MessageBox.Show("登录账号或密码错误");
}
else
{
    //保存用户对象
    Program.currentAdmin = objAdmin;
    //设置窗体返回值
    this.DialogResult = DialogResult.OK;
    this.Close();
}

**注意:Program.currentAdmin是全局变量,因为登录后以后改密码等操作会用到当前这个admin

//定义一个Admin全局变量,为以后使用该Admin做准备
public static Admin currentAdmin = null;
3.2 窗体的打开和关闭
private void ShowWindow(Form objForm)
{
    //处理窗体重复,每个窗体都需要,所以可以设置成为一个方法
    objForm.TopLevel = false;//将当前子窗体设置成非顶级
    objForm.WindowState = FormWindowState.Maximized; //设置窗口最大化
    objForm.FormBorderStyle = FormBorderStyle.None;
    objForm.Parent = this.panelForm;//指定当前子窗体显示的容器
    objForm.Show();

}
/// <summary>
/// 关闭窗体
/// </summary>
private void CloseWindow()
{
    foreach (Control item in this.panelForm.Controls)
    {
        if (item is Form)
        {
            Form ojbControls = (Form)item;
            ojbControls.Close();
            this.panelForm.Controls.Remove(item);
        }
    }
}
 
3.3 修改密码
  1. 校验旧密码
    这里就体现了前面全局变量currentAdmin的作用
//判断两次新密码是否一致
if (this.txtNewPwd.Text.Trim() != this.txtNewPwdConfirm.Text.Trim())
{
    MessageBox.Show("两次输入密码不同");
    this.txtNewPwdConfirm.Focus();
    this.txtNewPwdConfirm.SelectAll();
    return;
}

  1. 将新密码提交到数据库
    AdminService.cs添加一个修改密码方法
//更新密码
int result = objAdminService.UpdatePwd(this.txtNewPwdConfirm.Text.Trim(), Program.currentAdmin.LoginId);
if (result == 1)
{
    MessageBox.Show("新密码修改成功");
    Program.currentAdmin.LoginPwd = this.txtNewPwdConfirm.Text.Trim();
    this.Close();
}
3.4 使用泛型集合填充下拉框

StudentClassService.cs返回一个包含全部Class的List

 namespace DAL
{
    public class StudentClassService
    {
        public List<StudentClass> GetClass()
        {
            string sql = "select ClassName,ClassId from StudentClass";
            SqlDataReader objReader = SqlHelper.GetReader(sql);
            List<StudentClass> classList = new List<StudentClass>();
            while (objReader.Read())
            {
                classList.Add(
                    new StudentClass()
                    {
                        ClassId = Convert.ToInt32(objReader["ClassId"]),
                        ClassName = objReader["ClassName"].ToString()
                    }
                    ); ;
            }
            objReader.Close();
            return classList;
        }
    }
}

public FrmAddStudent()
{
    InitializeComponent();
    //初始化下拉框
    this.cboClassName.DataSource = ojbSCS.GetAllClass();
    this.cboClassName.DisplayMember = "ClassName";
    this.cboClassName.ValueMember = "ClassId";
}
3.5 实现排序
        //按照姓名降序
        class NameDESC : IComparer<StudentExt>
        {
            public int Compare(StudentExt x, StudentExt y)
            {
                return y.StudentName.CompareTo(x.StudentName);
            }
        }
        //
        class IDDESC : IComparer<StudentExt>
        {
            public int Compare(StudentExt x, StudentExt y)
            {
                return y.StudentId.CompareTo(x.StudentId);
            }
        }

3.6 添加图片
private void btnChoseImage_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    DialogResult result = openFileDialog.ShowDialog();
    if (result == DialogResult.OK)
    {
        this.pbStu.Image = Image.FromFile(openFileDialog.FileName);
    }
}
3.7 添加学员
private void btnAdd_Click(object sender, EventArgs e)
{
    //数据验证
    //学员姓名验证
    if (this.txtStudentName.Text.Trim().Length == 0 && this.txtStudentName.Text.Trim().Length > 18)
    {
        MessageBox.Show("请填写合法学员姓名!", "验证提示");
        this.txtStudentName.Focus();
        return;
    }
    //学员性别
    if (!this.rdoMale.Checked && !this.rdoFemale.Checked)
    {
        MessageBox.Show("请选择性别");
        return;
    }
    //验证省份证号
    if (!DataValidate.IsIdentityCard(this.txtStudentIdNo.Text.Trim()))
    {
        MessageBox.Show("身份证不符合要求", "验证提示");
        this.txtStudentIdNo.Focus();
        this.txtStudentIdNo.SelectAll();
        return;
    }
    //学员信息保存在数据库
    //封装学员对象
    Student objStudent = new Student()
    {
        StudentName = this.txtStudentName.Text.Trim(),
        Birthday = Convert.ToDateTime(this.dtpBirthday.Text),
        Age = DateTime.Now.Year - Convert.ToDateTime(this.dtpBirthday.Text).Year,
        StuImage = this.pbStu.Image == null ? "" : new SerializeObjectToString().SerializeObject(this.pbStu.Image)
    };
    //提交
    int result = objStudentService.AddStudent(ojbStudent);

    //判断是否成功
    if (result == 1)
    {

    }
}
3.7学员班级展示
image.png
public FrmStudentManage()
{
    InitializeComponent();
    //动态填充下拉框
    this.cboClass.DataSource = objStuClassServicec.GetAllClass();
    this.cboClass.DisplayMember = "ClassName";
    this.cboClass.ValueMember = "ClassId";
    this.cboClass.SelectedIndex = -1;
}
namespace Models.Ext
{
    /// <summary>
    /// 学院信息扩展实体
    /// </summary>
    public class StudentExt : Student
    {
        public string ClassName { get; set; }
        public string Csharp { get; set; }
        public string SqlDB { get; set; }
        public DateTime DTime { get; set; }
    }
}

注意:每个类添加完成之后一定要记得加上访问级别public或者private,不然访问不到

namespace DAL
{
    public class StudentService
    {
        public List<StudentExt> getStudentById(string classId)
        {
            string sql = "select StudentId,StudentName,Gender,Birthday,ClassName from Students";
            sql += "inner join StudentClass on Students.ClassId = StudentClass.ClassId";
            sql += "where StudentId =" + classId;
            SqlDataReader objReader =SqlHelper.GetReader(sql);
            List<StudentExt> list = new List<StudentExt>();
            while (objReader.Read())
            {
                list.Add(new StudentExt()
                {
                    StudentId = Convert.ToInt32(objReader["StudengId"]),
                    StudentName = objReader["StudentName"].ToString(),
                    Birthday = Convert.ToDateTime(objReader["Birthday"]),
                    ClassName = objReader["ClassName"].ToString() 
                });
            }
            objReader.Close();
            return list;
        }   
    }
}
//按照班级查询
private void btnQuery_Click(object sender, EventArgs e)
{
    List<StudentExt> list = objStudentService.getStudentById(this.cboClass.SelectedValue.ToString());
    this.dgvStudentList.AutoGenerateColumns = false;//禁止生成不需要的列
    this.dgvStudentList.DataSource = list;
}
上一篇 下一篇

猜你喜欢

热点阅读