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


    Model层:(实体层)

    主要是与数据库里面的表做对应,一个实体对应一张表,这样在于数据库进行交互时就可以一一对应,对数据库才可以进行操作。

    DAL层:(数据访问层) 

    主要与数据库进行交互,进行数据处理,依赖于Model层。

    BLL层:(业务逻辑层)

    主要是进行数据的业务逻辑处理,进行逻辑处理,依赖于Model层和DAL层。

    UI层:(表示层)

    主要把客户需要的信息通过三层,展示出来。依赖于BLL层,Model层。

    实现窗体效果图:

    Model层:(实体层)

    DAL层:(数据访问层)

    首先在DAL层建一个SQLHelper类,进行数据库的连接,其次在StudentDAL类中书写一个ISLogin方法,进行与数据库的交互登录。

    BLL层:(业务逻辑层)

    在业务逻辑层进行调用,调用DAL层的登录方法,StudentBLL进行逻辑处理然后传递到UI层。

    UI层:(表示层)

    进行判断后登录到主界面。


    按姓名查询展示效果图:

    首先在DAL层StudentDAL类中写一个GetAllStudent()方法:

    BLL层进行方法调用,逻辑处理后传递到UI,和上面差不多。

    主要说一下UI层,进行窗体绑定。

    调用BLL,用list接收进行方法调用,最后绑定数据进行展示。


    添加学生信息效果图:

    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;
                }
            }
    复制代码

    总结: 

    学生管理系统是我们学习分层以来做的第一个完整的项目,以上展示有不足请谅解,毕竟我还是菜鸟,望提携关照。

  • 相关阅读:
    神武
    position 属性
    C# 工作区和窗口的属性名
    魔兽世界命令行
    Dota2一直 正在登录服务器的解决办法
    dota2交换物品
    Servlet的5种方式实现表单提交(注册小功能)
    JQuery的ajaxFileUpload的使用
    JS日期转换
    Tomcat7后台通过get接收数据处理乱码
  • 原文地址:https://www.cnblogs.com/hq-123/p/5516280.html
Copyright © 2011-2022 走看看