zoukankan      html  css  js  c++  java
  • 学生管理系统--分层开发

    一:分层架构

    搭建DAL层(数据访问层)、UI层(表示层)、BLL层(业务逻辑层)以及Model层(实体层)

    各层的引用关系:

    DAL、UI、BLL层引用Model层

    UI层引用BLL层

    BLL层引用DAL层

    二:实现登录功能

    StudentDAL层

    定义一个bool变量,将Student对象作为参数,使用SqlParameter对象进行填充,判定count值,若大于0.返回真

    //01.写一个用于登录的方法
            public bool IsLogin(Student stu)
            {
    
                bool flag = false;
    
                //string sql = "select count(1) from student where studentname='" + stu.StudentName + "' and loginpwd='" + stu.LoginPwd + "'";
    
                string sql = "select count(1) from student where studentname=@name and LoginPwd=@pwd";
    
                SqlParameter[] para ={
                               
                             new SqlParameter("@name",stu.StudentName),
                             new SqlParameter("@pwd",stu.LoginPwd)
      
                                   };
                //02.将sql语句交给SQL服务器执行
                int count = Convert.ToInt32(SQLHelper.ExecuteScalar(sql,para));
                if (count > 0)
                {
                    flag = true;
                }
                return flag;
    
             
            }

    StudentBLL层  数据传递

      StudentDAL dal = new StudentDAL();
    
         //登录
         public bool isLogin(Student stu)
         {
             bool result = dal.IsLogin(stu);
             return result;
         
         }

    UI层  

    获取两个文本框的值,定义bool变量,拿到登录的方法,传入参数

     //登录
            private void btnLogin_Click(object sender, EventArgs e)
            {
                StudentBLL bll = new StudentBLL();
                Student stu=new Student();
                stu.StudentName = txtName.Text;
                stu.LoginPwd = txtPwd.Text;
    
               bool result= bll.isLogin(stu);
                if (result)
                {
                    frmMain frm = new frmMain();
                    this.Hide();
                    frm.Show();
                   
                }

    三 实现新增学生用户

    StudentDAL层

       //添加学生
    
            public bool AddStudent(Student  stu)
            {
                bool flag = false;
                string sql = "insert into Student Values(@LoginPwd,@StudentName,@Gender,@GradeId,@Phone,@Address,@Birthday,@Email)";
                SqlParameter []para=
                {
                new SqlParameter("@LoginPwd",stu.LoginPwd),
                new SqlParameter("@StudentName",stu.StudentName),
                new SqlParameter("@Gender",stu.Gender),
                new SqlParameter("@GradeId",stu.GradeId),
                new SqlParameter("@Phone",stu.Phone),
                new SqlParameter("@Address",stu.Address),
                new SqlParameter("@Birthday",stu.Birthday),
                new SqlParameter("@Email",stu.Email),
                
                };
    
                int count = SQLHelper.ExecuteNonQuery(sql,para);
                if(count>0)
                {
                    flag = true;
                
                }
                return flag;
            
            }

    StudentBLL层

    //添加学生
         public bool AddStudent(Student stu)
         {
             bool result = dal.AddStudent(stu);
             return result;
         
         }

     UI层

     //保存
            private void btnEdit_Click(object sender, EventArgs e)
            {
                //从界面获取各个值
                Student stu = new Student();
                stu.LoginPwd = txtPwd.Text;
                stu.StudentName = txtName.Text;
                stu.Gender = rbtnFemale.Checked?"0":"1";
                stu.Phone = txtPhone.Text;
                stu.Address = txtAddress.Text;
                stu.Email = txtEmail.Text;
                //出生日期
                stu.Birthday = dpBirthday.Value;
                //年级编号
                stu.GradeId = Convert.ToInt32(cboGrade.SelectedValue);
       
                bool result = studal.AddStudent(stu);
    
                if (result)
                {
                    MessageBox.Show("添加成功!");
                }
                else 
                {
                    MessageBox.Show("添加失败!");
                }
            }

    四 加载学生信息<查询>

    DAL层

    返回的是泛型集合、可使用MyTool工具类或者foreach遍历

     //泛型
            public List<Student> GetAllStudent()
            {
               // List<Student> list = new List<Student>();
    
                string sql = "select * from Student";
    
                DataTable dt= SQLHelper.ExecuteDataTable(sql);
    
                MyTool tool = new MyTool();
    
                List<Student> list = tool.DataTableToList<Student>(dt);
    
    
                //foreach (DataRow item in dt.Rows)
                //{
                //    Student stu = new Student();
                //    stu.StudentName = item["StudentName"].ToString();
                //    stu.StudentNo = Convert.ToInt32(item["StudentNo"]);
                //    stu.LoginPwd =item["LoginPwd"].ToString();
    
                //    list.Add(stu);
                //}
    
    
                return list;
            
            }

    BLL层

     //泛型
         public List<Student> GetAllStudent()
         {
             List<Student> list = dal.GetAllStudent();
             return list;    
         
         }

    UI层

     StudentBLL stuBll = new StudentBLL();
            GradeBLL GBll = new GradeBLL();
    
            //主窗体
            private void FrmSearchByGrade_Load(object sender, EventArgs e)
            {
                //删除英文列
                dgvList.AutoGenerateColumns = false;
    
               List<Student>list= stuBll.GetAllStudent();
               dgvList.DataSource = list;
    
               List<Grade> glist = GBll.GetAllGrade();
                //绑定年级下拉框值
              cboGrade.ValueMember = "GradeId";
              cboGrade.DisplayMember = "GradeName";
              cboGrade.DataSource = glist;
            }
    
            //查询
            private void btnSearch_Click(object sender, EventArgs e)
            {
                int gradeid =Convert.ToInt32(cboGrade.SelectedValue);
    
                //使用BLL层
                List<Student> list = stuBll.ByGradeId(gradeid);
                dgvList.DataSource = list;
               
            }

    五 删除学生信息

    DAL层

    //删除
            public bool Delete(int stuNo)
            {
                bool flag = false;
                string sql="delete from Student where StudentNo=@No";
                SqlParameter para = new SqlParameter("@No",stuNo);
                int count = SQLHelper.ExecuteNonQuery(sql,para);
            if(count>0)
            {
                flag = true;
            }
            return flag;
            }

    BLL层

      //删除
         public bool Delete(int stuNo)
         {
             return dal.Delete(stuNo);
    
         }

    UI层 

    注:光标位置

    记录选中行的索引值 定义变量index、光标回到index-1

     //删除
            private void tsmi_del_Click(object sender, EventArgs e)
            {
                int stuno = Convert.ToInt32(dgvList.SelectedRows[0].Cells["Column2"].Value);
    
                //记录选中行的索引值
                int index = dgvList.CurrentRow.Index;
    
                //MessageBox.Show(index.ToString());
    
                bool flag = stuBll.Delete(stuno);
    
                if(flag)
                {
                    MessageBox.Show("删除成功!");
                    List<Student> list = stuBll.GetAllStudent();
                    dgvList.DataSource = list;
    
                    //光标回到index-1
                    dgvList[0, index].Selected = true;
                    dgvList.CurrentCell=dgvList[0,index];
                }
            }

    六 修改学生信息

    DAL层

    //修改
            public bool UpdateInfo(Student stu)
            {
                bool flag = false;
                string sql = "update Student set StudentName=@stuName,Gender=@gender,Birthday=@birthday where StudentNo=@No";
                SqlParameter[] para =
                {
                new SqlParameter("@stuName",stu.StudentName),
                new SqlParameter("@gender",stu.Gender),
                new SqlParameter("@birthday",stu.Birthday),
                new SqlParameter("@No",stu.StudentNo)
                };
                int count = SQLHelper.ExecuteNonQuery(sql,para);
                if(count>0)
                {
                    flag = true;
                }
                return flag;
            }

    BLL层:

     //修改
         public bool UpdateInfo(Student stu)
         {
             return dal.UpdateInfo(stu);
         }

    窗体的关联:

    private void tsmi_update_Click(object sender, EventArgs e)
            {
                FrmUpdate frm = new FrmUpdate();
                frm.dgvList = dgvList;
                frm.Show();
            }

    UI层  Load事件中实现窗体的传值

    StudentBLL stubll = new StudentBLL();
            public DataGridView dgvList;
            Student stu = new Student();
    
            private void FrmUpdate_Load(object sender, EventArgs e)
            {
    
                stu.StudentNo = Convert.ToInt32(dgvList.SelectedRows[0].Cells["Column2"].Value);
                stu.StudentName = dgvList.SelectedRows[0].Cells["name"].Value.ToString();
                stu.Gender = dgvList.SelectedRows[0].Cells["Column3"].Value.ToString();
                stu.Birthday = Convert.ToDateTime(dgvList.SelectedRows[0].Cells["Column4"].Value);
    
               // MessageBox.Show(stu.StudentName.ToString());
                this.txtNo.Text = stu.StudentNo.ToString();
                this.txtName.Text = stu.StudentName;
                this.txtGender.Text = stu.Gender;
                this.txtBirthday.Text = stu.Birthday.ToString();
            }
    
            private void btnUpdate_Click(object sender, EventArgs e)
            {
    
                stu.StudentName = txtName.Text;
                stu.Gender = txtGender.Text;
                stu.Birthday = Convert.ToDateTime(txtBirthday.Text);
                bool flag = stubll.UpdateInfo(stu);
                if(flag)
                {
                    MessageBox.Show("修改成功!!");
                    List<Student> list = stubll.GetAllStudent();
                    dgvList.DataSource = list;
                }
            }
  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/Zhangmin123/p/5516597.html
Copyright © 2011-2022 走看看