学生管理系统(分层开发)



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 [email protected]";
            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 [email protected],[email protected],[email protected] where [email protected]";
            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;
            }
        }

总结: 

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

时间: 2024-10-18 18:17:57

学生管理系统(分层开发)的相关文章

学生管理系统----(分层开发)

一:分层架构 搭建DAL层(数据访问层).UI层(表示层).BLL层(业务逻辑层)以及Model层(实体层) 各层的引用关系: DAL.UI.BLL层引用Model层 UI层引用BLL层 BLL层引用DAL层 二:实现登录功能 DAL层:(为了防止sql注入需要使用SqlParameter) //登录 public bool LoginStudent(Student stu) { bool flag = false; string sql = "select count(1) from Stud

Servlet实例开发---学生管理系统

Servlet总结 本程序采用Servlet开发技术,MVC分层,所有程序在设计时都要接口为操作的标准,主要逻辑操作只有增删改查. 具体实现操作请看源代码. 本程序采用的是MYSQL数据库,需加入相应的jar包 目录结构 首先贴上底层数据层: 连接数据库 package com.student.dbc ; import java.sql.* ; public class DatabaseConnection { private static final String DBDRIVER = "or

Java 图形界面开发--图文并茂建立学生管理系统

图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作. 这是本人在学习java图形界面开发阶段一步一步实现的超级简易的学生管理系统.虽然说不入大神法眼,但这确实是费了自己不少心血.对于我这样的菜鸟来说,考虑不周到,一不小心就Exception,然后就是自己调呀调.在此分享出来希望对和我一样的菜鸟有帮助. 程序完整代码下载地址见: https://github.com/chaohuangtianjie994/The-Sys

【IOS开发笔记02】学生管理系统

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度

【IOS开发笔记01】学生管理系统(上)

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度

python开发的学生管理系统

python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管理系统 ") print(" 1.添加学生的信息") print(" 2.删除学生的信息") print(" 3.修改学生的信息") print(" 4.查询学生的信息") print(" 5.遍历所有学生的信

基于struts2框架开发的学生管理系统

学生管理系统采用struts2框架作为后台开发框架,jsp实现页面数据的展示,数据库采用mysql.功能介绍:包含学生信息管理,班级信息管理,年级信息管理,系统信息管理等功能.数据库模型设置如下:CREATE TABLE t_class (classId int(11) NOT NULL auto_increment,className varchar(20) default NULL,gradeId int(11) default NULL,classDesc text,PRIMARY KEY

学生管理系统(jsp+mysql)

1.实验目的 通过使用 Java Web 技术设计一个简单的数据库管理系统,了解前台页面和后 台编辑页面的区别,掌握 Web 服务器与 MySQL 数据库的连接和数据库操作的方 法,掌握使用 JSP 编写后台代码的方法. 2.实验内容和要求 开发一个学生管理系统,完成学生信息的查看.增加.删除和修改等功能. 对于客户端增加和修改信息页面,要使用 javascript 进行必要的数据的非空验证. 自行添加一些 css,使得页面和字体更加美观. 3.实验步骤及实验结果 (1)打开 MySQL,新建一

基于双向循环链表的学生管理系统

基于双向循环链表实现的学生管理系统,包括初始化,插入,删除,查抄,保存,自动按照姓名排序功能,退出并保存功能. 实现思想是将程序的各个部分划分为三个层次.主函数为界面层,即客户端层:其中后缀为Student的一般是某个功能的调度函数,属于逻辑层的内容:在调度函数之下有相应的被调度的函数,也就是相应功能的实现函数,一般后缀名为Node,意思就是这个函数直接操作链表中的结点,可以简单的划分为实现层: 这样分层实现呢有利于代码维护和个功能之间对包含或者重叠功能的直接调用,从而提高代码重用度,而降低代码