学生管理系统<分层开发>
一:分层架构
搭建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 > )
{
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>)
            {
                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?"":"";
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>)
{
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[].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[, index].Selected = true;
dgvList.CurrentCell=dgvList[,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>)
{
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[].Cells["Column2"].Value);
stu.StudentName = dgvList.SelectedRows[].Cells["name"].Value.ToString();
stu.Gender = dgvList.SelectedRows[].Cells["Column3"].Value.ToString();
stu.Birthday = Convert.ToDateTime(dgvList.SelectedRows[].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;
}
}
学生管理系统<分层开发>的更多相关文章
- Servlet实例开发---学生管理系统
		Servlet总结 本程序采用Servlet开发技术,MVC分层,所有程序在设计时都要接口为操作的标准,主要逻辑操作只有增删改查. 具体实现操作请看源代码. 本程序采用的是MYSQL数据库,需加入相应 ... 
- 【IOS开发笔记02】学生管理系统
		端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ... 
- 【IOS开发笔记01】学生管理系统(上)
		端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ... 
- python开发的学生管理系统
		python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管 ... 
- Java 图形界面开发--图文并茂建立学生管理系统
		(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客) 图形用户界面(Graphics U ... 
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
		知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ... 
- 学生管理系统开发代码分析笔记:jsp+java bean+servlet技术
		1 序言 学习java web的时候很渴望有一份完整的项目给我阅读,而网上的大部分项目拿过来都无法直接用,好不容易找到了一个学生管理系统也是漏洞百出.在此,我将边修改边学习这份代码,并且加上完全的注释 ... 
- Java开发学生管理系统
		Java 学生管理系统 使用JDBC了链接本地MySQL 数据库,因此在没有建立好数据库的情况下没法成功运行 (数据库部分, Java界面部分, JDBC部分) 资源下载: http://downlo ... 
- jsp学习之基于mvc学生管理系统的编写
		mvc开发模式:分别是 model层 view层 Control层 在学生管理系统中,model层有学生实体类,数据访问的dao层,view层主要是用于显示信息的界面,Control层主要是servl ... 
随机推荐
- [deviceone开发]-数据绑定示例
			一.简介 这个示例详细介绍了do平台数据bind的灵活使用方式.所有UI组件都支持binddata的方式,可以绑定到do_HashData,do_ListData对象.初学者推荐. 二.效果图 三.相 ... 
- 定制Eclipse IDE之插件篇(一)
			上文回顾:定制Eclipse IDE之功能篇(二) 在这篇文章中,我会将我定制eclipse用到的其他插件罗列出来. 一.汉化插件 Eclipse本身是英文显示的,我们能够通过插件汉化. 1. 选择 ... 
- jquery原型方法map的使用和源码分析
			原型方法map跟each类似调用的是同名静态方法,只不过返回来的数据必须经过另一个原型方法pushStack方法处理之后才返回,源码如下: map: function( callback ) { re ... 
- 探究TCP
			OSI OSI是Open System Interconnection的缩写,意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信 ... 
- Hbase Java API详解
			HBase是Hadoop的数据库,能够对大数据提供随机.实时读写访问.他是开源的,分布式的,多版本的,面向列的,存储模型. 在讲解的时候我首先给大家讲解一下HBase的整体结构,如下图: HBase ... 
- React Native学习笔记之1
			1:运行React Native报连接错误解决 解决方式: 在终端进入项目文件里,然后执行:(cd Pods/React; npm run start) 2:组件生命周期介绍 创建阶段 1. getD ... 
- 【代码笔记】iOS-带索引的tableView
			一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ... 
- Xcode常见错误汇总
			1.error: macro names must be identifiers YourProject_prefix.pch 原因: 因为你弄脏了预处理器宏,在它处于<Multiple Val ... 
- Web应用程序系统的多用户权限控制设计及实现-页面模块【9】
			前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的基本模块-页面模块.页面模块涉及到的数据表为页面表. 1.1页面域 为了更规范和方便后期系统的二次开发和维护 ... 
- Ubuntu下面su初始密码设置
			rcm@rcm:~$ sudo passwd 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码 
