美文网首页
12-三层架构

12-三层架构

作者: D丝学编程 | 来源:发表于2024-02-25 17:34 被阅读0次

三层架构将整个业务应用划分为:(1)界面UI层;(2)业务逻辑层;(3)数据访问层。

对于复杂的系统分层可以让结构更加清晰,模块更加独立,便于维护。


0077.png

各层的任务:

(1)数据访问层:负责数据库的操作。

(2)业务逻辑层:实现功能模块的业务逻辑。

(3)界面UI层:绘制界面,以及负责界面相关代码。

(4)实体类:将数据库中的表转化为面向对象思想中的类。

一、案例需求和资料准备

搜索:

0078.PNG
添加学生:
0079.PNG
编辑学生信息:
0080.PNG
统计人数:
0081.PNG
案例需求:使用三层架构实现学生信息管理,包括学生信息搜索,信息新增,信息删除,信息编辑修改等。

资料准备:

--专业分类(1)哲学;(2)经济学;(3)法学;(4)教育学;(5)文学;(6)历史学;(7)理学;(8)工学;(9)农学;(10)医学;(11)军事学;(12)管理学;(13)艺术学
create table MajorType
(
    MajorTypeId int primary key identity(1,1), --编号
    MajorTypeName varchar(50) not null --专业分类名称
)
insert into MajorType(MajorTypeName) values('工学')
insert into MajorType(MajorTypeName) values('艺术学')

--专业
create table Major
(
    MajorId int primary key identity(1,1), --编号
    MajorTypeId int not null,  --类型编号
    MajorName varchar(50) not null --专业名称
)
insert into Major(MajorTypeId,MajorName) values(1,'计算机科学与应用')
insert into Major(MajorTypeId,MajorName) values(1,'建筑学')
insert into Major(MajorTypeId,MajorName) values(2,'美术学')
insert into Major(MajorTypeId,MajorName) values(2,'戏剧与影视学')

--学生
create table Student
(
    StudentId int primary key identity(1,1), --编号
    MajorId int not null, --专业编号
    StudentName varchar(50) not null, --学生姓名
    StudentSex varchar(50) not null, --学生性别
    StudentPhone varchar(50) not null, --电话
    StudentMail varchar(50) not null --邮箱
)
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(1,'刘备','男','13554878965','liubei@qq.com')
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(1,'关羽','男','15389874521','guanyu@qq.com')
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(2,'张飞','男','18987542525','zhangfei@qq.com')
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(2,'赵云','男','13696896547','zhaoyun@qq.com')
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(3,'黄忠','男','13778777888','huangzhong@qq.com')
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(3,'马超','男','13221212325','machao@qq.com')
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(4,'魏延','男','13996147455','weiyan@qq.com')
insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail)
values(4,'周仓','男','13437522241','zhoucang@qq.com')

二、项目结构

(1)创建一个空白解决方案。

(2)在解决方案中创建类库项目MyEntity代表"实体类"。

(3)在解决方案中创建类库项目MyDAL代表"数据访问层"。

(4)在解决方案中创建类库项目MyBLL代表"业务逻辑层"。

(5)在解决方案中创建网站程序MyUI代表"界面UI层"。


0012.PNG

三、实体类编写

namespace MyEntity
{
    //专业类型
    public class MajorTypeEntity
    {
        public int MajorTypeId { get; set; } //编号
        public string MajorTypeName { get; set; }//专业分类名称
    }
}
namespace MyEntity
{
    //专业
    public class MajorEntity
    {
        public int MajorId { get; set; } //编号
        public int MajorTypeId { get; set; } //类型编号
        public string MajorName { get; set; } //专业名称
    }
}
namespace MyEntity
{
    //学生
    public class StudentEntity
    {
        public int StudentId { get; set; } //编号
        public int MajorId { get; set; } //专业编号
        public string StudentName { get; set; } //学生性别
        public string StudentSex { get; set; } //学生性别
        public string StudentPhone { get; set; } //学生电话
        public string StudentMail { get; set; } //学生邮箱

        //添加对象方便查询
        public MajorTypeEntity typeEntity { get; set; } //专业类型对象
        public MajorEntity majorEntity { get; set; } //专业对象
    }
}

四、数据访问层编写

(1)由于数据访问层需要使用实体类,所以需要添加实体类的引用。

即在MyDAL项目上右键-->添加-->引用-->项目,在项目中勾选MyEntity项目。

(2)将之前封装好的DBHelper文件复制到MyDAL项目中,并通过添加现有项,将DBHelper加入项目

备注:DBHelper参照第一章内容

namespace MyDAL
{
    public class MajorTypeDAL
    {
        DBHelper db = new DBHelper();
        #region 添加专业类型
        public int Add(MajorTypeEntity entity)
        {
            string sql = "insert into MajorType(MajorTypeName) values(@MajorTypeName)";
            db.PrepareSql(sql);
            db.SetParameter("MajorTypeName", entity.MajorTypeName);
            return db.ExecNonQuery();
        }
        #endregion

        #region 删除专业类型
        public int Delete(int MajorTypeId)
        {
            string sql = "delete from MajorType where MajorTypeId = @MajorTypeId";
            db.PrepareSql(sql);
            db.SetParameter("MajorTypeId", MajorTypeId);
            return db.ExecNonQuery();
        }
        #endregion

        #region 修改专业类型
        public int Update(MajorTypeEntity entity)
        {
            string sql = "update MajorType set MajorTypeName=@MajorTypeName where MajorTypeId=@MajorTypeId";
            db.PrepareSql(sql);
            db.SetParameter("MajorTypeName", entity.MajorTypeName);
            db.SetParameter("MajorTypeId", entity.MajorTypeId);
            return db.ExecNonQuery();
        }
        #endregion

        #region 查询所有专业类型
        public List<MajorTypeEntity> List()
        {
            string sql = "select * from MajorType";
            db.PrepareSql(sql);
            SqlDataReader reader = db.ExecDataReader();
            List<MajorTypeEntity> list = new List<MajorTypeEntity>();
            while (reader.Read())
            {
                MajorTypeEntity entity = new MajorTypeEntity();
                entity.MajorTypeId = int.Parse(reader["MajorTypeId"].ToString());
                entity.MajorTypeName = reader["MajorTypeName"].ToString();
                list.Add(entity);
            }
            reader.Close();
            return list;
        }
        #endregion

        #region 查询一个专业类型详情
        public MajorTypeEntity Detail(int MajorTypeId)
        {
            string sql = "select * from MajorType where MajorTypeId=@MajorTypeId";
            db.PrepareSql(sql);
            db.SetParameter("MajorTypeId", MajorTypeId);
            DataTable dt = new DataTable();
            dt = db.ExecQuery();
            if (dt.Rows.Count == 0)
                return null;
            MajorTypeEntity entity = new MajorTypeEntity();
            entity.MajorTypeId = int.Parse(dt.Rows[0]["MajorTypeId"].ToString());
            entity.MajorTypeName = dt.Rows[0]["MajorTypeName"].ToString();
            return entity;
        }
        #endregion


    }
}
namespace MyDAL
{
    public class MajorDAL
    {
        DBHelper db = new DBHelper();

        #region 添加专业
        public int Add(MajorEntity entity)
        {
            string sql = "insert into Major(MajorTypeId,MajorName) values(@MajorTypeId,@MajorName)";
            db.PrepareSql(sql);
            db.SetParameter("MajorTypeId", entity.MajorTypeId);
            db.SetParameter("MajorName", entity.MajorName);
            return db.ExecNonQuery();
        }
        #endregion

        #region 删除专业
        public int Delete(int MajorId)
        {
            string sql = "delete from Major where MajorId = @MajorId";
            db.PrepareSql(sql);
            db.SetParameter("MajorId", MajorId);
            return db.ExecNonQuery();
        }
        #endregion

        #region 修改专业
        public int Update(MajorEntity entity)
        {
            string sql = "update Major set MajorTypeId=@MajorTypeId,MajorName=@MajorName where MajorId=@MajorId";
            db.PrepareSql(sql);
            db.SetParameter("MajorTypeId", entity.MajorTypeId);
            db.SetParameter("MajorName", entity.MajorName);
            db.SetParameter("MajorId", entity.MajorId);
            return db.ExecNonQuery();
        }
        #endregion

        #region 查询所有专业
        public List<MajorEntity> List()
        {
            string sql = "select * from Major";
            db.PrepareSql(sql);
            SqlDataReader reader = db.ExecDataReader();
            List<MajorEntity> list = new List<MajorEntity>();
            while (reader.Read())
            {
                MajorEntity entity = new MajorEntity();
                entity.MajorId = int.Parse(reader["MajorId"].ToString());
                entity.MajorTypeId = int.Parse(reader["MajorTypeId"].ToString());
                entity.MajorName = reader["MajorName"].ToString();
                list.Add(entity);
            }
            reader.Close();
            return list;
        }
        #endregion

        #region 查询一个专业详情
        public MajorEntity Detail(int MajorId)
        {
            string sql = "select * from Major where MajorId=@MajorId";
            db.PrepareSql(sql);
            db.SetParameter("MajorId", MajorId);
            DataTable dt = new DataTable();
            dt = db.ExecQuery();
            if (dt.Rows.Count == 0)
                return null;
            MajorEntity entity = new MajorEntity();
            entity.MajorId = int.Parse(dt.Rows[0]["MajorId"].ToString());
            entity.MajorTypeId = int.Parse(dt.Rows[0]["MajorTypeId"].ToString());
            entity.MajorName = dt.Rows[0]["MajorName"].ToString();
            return entity;
        }
        #endregion
    }
}

namespace MyDAL
{
    public class StudentDAL
    {
        DBHelper db = new DBHelper();

        #region 添加学生
        public int Add(StudentEntity entity)
        {
            string sql = "insert into Student(MajorId,StudentName,StudentSex,StudentPhone,StudentMail) values(@MajorId,@StudentName,@StudentSex,@StudentPhone,@StudentMail)";
            db.PrepareSql(sql);
            db.SetParameter("MajorId", entity.MajorId);
            db.SetParameter("StudentName", entity.StudentName);
            db.SetParameter("StudentSex", entity.StudentSex);
            db.SetParameter("StudentPhone", entity.StudentPhone);
            db.SetParameter("StudentMail", entity.StudentMail);
            return db.ExecNonQuery();
        }
        #endregion

        #region 删除学生
        public int Delete(int StudentId)
        {
            string sql = "delete from Student where StudentId = @StudentId";
            db.PrepareSql(sql);
            db.SetParameter("StudentId", StudentId);
            return db.ExecNonQuery();
        }
        #endregion

        #region 修改学生
        public int Update(StudentEntity entity)
        {
            string sql = "update Student set MajorId=@MajorId,StudentName=@StudentName,StudentSex=@StudentSex,StudentPhone=@StudentPhone,StudentMail=@StudentMail where StudentId=@StudentId";
            db.PrepareSql(sql);
            db.SetParameter("MajorId", entity.MajorId);
            db.SetParameter("StudentName", entity.StudentName);
            db.SetParameter("StudentSex", entity.StudentSex);
            db.SetParameter("StudentPhone", entity.StudentPhone);
            db.SetParameter("StudentMail", entity.StudentMail);
            db.SetParameter("StudentId", entity.StudentId);
            return db.ExecNonQuery();
        }
        #endregion

        #region 查询所有学生
        public List<StudentEntity> List()
        {
            string sql = "select * from Student";
            db.PrepareSql(sql);
            SqlDataReader reader = db.ExecDataReader();
            List<StudentEntity> list = new List<StudentEntity>();
            while (reader.Read())
            {
                StudentEntity entity = new StudentEntity();
                entity.StudentId = int.Parse(reader["StudentId"].ToString());
                entity.MajorId = int.Parse(reader["MajorId"].ToString());
                entity.StudentName = reader["StudentName"].ToString();
                entity.StudentSex = reader["StudentSex"].ToString();
                entity.StudentPhone = reader["StudentPhone"].ToString();
                entity.StudentMail = reader["StudentMail"].ToString();
                list.Add(entity);
            }
            reader.Close();
            return list;
        }
        #endregion

        #region 查询一个学生详情
        public StudentEntity Detail(int StudentId)
        {
            string sql = "select * from Student where StudentId=@StudentId";
            db.PrepareSql(sql);
            db.SetParameter("StudentId", StudentId);
            DataTable dt = new DataTable();
            dt = db.ExecQuery();
            if (dt.Rows.Count == 0)
                return null;
            StudentEntity entity = new StudentEntity();
            entity.StudentId = int.Parse(dt.Rows[0]["StudentId"].ToString());
            entity.MajorId = int.Parse(dt.Rows[0]["MajorId"].ToString());
            entity.StudentName = dt.Rows[0]["StudentName"].ToString();
            entity.StudentSex = dt.Rows[0]["StudentSex"].ToString();
            entity.StudentPhone = dt.Rows[0]["StudentPhone"].ToString();
            entity.StudentMail = dt.Rows[0]["StudentMail"].ToString();
            return entity;           
        }
        #endregion

        //--------------------------------------------------------------------------------------------------
        #region 搜索学生
        public List<StudentEntity> Search(StudentEntity searchEntity,int pageSize, int pageIndex, out int recordCount)
        {
            //搜索条件处理
            string sqlWhere = "";
            if (searchEntity.StudentName != null && searchEntity.StudentName.Length != 0)
                sqlWhere += " and StudentName like '%" + searchEntity.StudentName + "%'";
            //求总记录数量
            string sqlCount = "select count(*) from Student left join Major on Student.MajorId = Major.MajorId left join MajorType on Major.MajorTypeId = MajorType.MajorTypeId where 1 = 1 " + sqlWhere;
            db.PrepareSql(sqlCount);
            recordCount = (int)db.ExecScalar();
            //重新计算pageIndex
            pageIndex = PageHelper.ComputeCurrPage(pageIndex, pageSize, recordCount);
            string sql = "select * from (select ROW_NUMBER() over(order by StudentId desc) RowId,Student.*,Major.MajorTypeId,Major.MajorName,MajorType.MajorTypeName from Student left join Major on Student.MajorId = Major.MajorId left join MajorType on Major.MajorTypeId = MajorType.MajorTypeId where 1 = 1 "+sqlWhere+") Temp where RowId between @Start and @End ";
            db.PrepareSql(sql);
            db.SetParameter("Start", (pageIndex - 1) * pageSize + 1);
            db.SetParameter("End", pageIndex * pageSize);
            SqlDataReader reader = db.ExecDataReader();
            List<StudentEntity> list = new List<StudentEntity>();
            while (reader.Read())
            {
                StudentEntity entity = new StudentEntity();
                entity.StudentId = int.Parse(reader["StudentId"].ToString());
                entity.MajorId = int.Parse(reader["MajorId"].ToString());
                entity.StudentName = reader["StudentName"].ToString();
                entity.StudentSex = reader["StudentSex"].ToString();
                entity.StudentPhone = reader["StudentPhone"].ToString();
                entity.StudentMail = reader["StudentMail"].ToString();
                entity.majorEntity = new MajorEntity();
                entity.majorEntity.MajorId = int.Parse(reader["MajorId"].ToString());
                entity.majorEntity.MajorName = reader["MajorName"].ToString();
                entity.majorEntity.MajorTypeId = int.Parse(reader["MajorTypeId"].ToString());
                entity.typeEntity = new MajorTypeEntity();
                entity.typeEntity.MajorTypeId = int.Parse(reader["MajorTypeId"].ToString());
                entity.typeEntity.MajorTypeName = reader["MajorTypeName"].ToString();
                list.Add(entity);
            }
            reader.Close();
            return list;
        }
        #endregion

        #region 根据专业类型分组统计学生人数
        public List<object> GetCountByType()
        {
            string sql = "select MajorTypeName,COUNT(*) StuCount from Student ";
            sql += " left join Major on Student.MajorId = Major.MajorId ";
            sql += " left join MajorType on Major.MajorTypeId = MajorType.MajorTypeId ";
            sql += " group by MajorType.MajorTypeId,MajorTypeName ";
            db.PrepareSql(sql);
            DataTable dt = new DataTable();
            dt = db.ExecQuery();
            List<object> list = new List<object>();
            foreach (DataRow dr in dt.Rows)
            {
                var obj = new { TypeName = dr["MajorTypeName"].ToString(), StuCount = dr["StuCount"].ToString() };
                list.Add(obj);
            }
            return list;
        }
        #endregion
    }
}

数据访问层添加了一个工具PageHelper辅助分页功能,此工具也可以单独建立项目来实现。

namespace MyDAL
{
    /// <summary>
    ///PageHelper 的摘要说明
    /// </summary>
    public class PageHelper
    {
        #region 计算总页数
        public static int GetTotalPage(int totalRecord, int pageSize)
        {
            int totalPage = 0;
            if (totalRecord % pageSize == 0)
                totalPage = totalRecord / pageSize;
            else
                totalPage = totalRecord / pageSize + 1;
            return totalPage;
        }
        #endregion

        #region 计算当前页
        public static int ComputeCurrPage(int currPage, int totalPage)
        {

            if (currPage < 1)
                currPage = 1;
            if (currPage > totalPage)
                currPage = totalPage;
            return currPage;
        }
        public static int ComputeCurrPage(int pageIndex, int pageSize, int recordCount)
        {
            int pageCount = recordCount % pageSize == 0 ? recordCount / pageSize : recordCount / pageSize + 1;
            if (pageIndex < 1)
                pageIndex = 1;
            if (pageIndex > pageCount)
                pageIndex = pageCount;
            return pageIndex;
        }
        #endregion
    }
}

五、业务逻辑层编写

(1)由于业务逻辑层需要使用实体类,所以需要添加实体类的引用。

即在MyBLL项目上右键-->添加-->引用-->项目,在项目中勾选MyEntity项目。

(2)由于业务逻辑层需要调用数据访问层,所以需要添加数据访问层的引用。

即在MyBLL项目上右键-->添加-->引用-->项目,在项目中勾选MyDAL项目。

namespace MyBLL
{
    public class MajorTypeBLL
    {
        MajorTypeDAL dal = new MajorTypeDAL();

        #region 添加专业类型
        public int Add(MajorTypeEntity entity)
        {
            return dal.Add(entity);
        }
        #endregion

        #region 删除专业类型
        public int Delete(int MajorTypeId)
        {
            return dal.Delete(MajorTypeId);
        }
        #endregion

        #region 修改专业类型
        public int Update(MajorTypeEntity entity)
        {
            return dal.Update(entity);
        }
        #endregion

        #region 查询所有专业类型
        public List<MajorTypeEntity> List()
        {
            return dal.List();
        }
        #endregion

        #region 查询一个专业类型详情
        public MajorTypeEntity Detail(int MajorTypeId)
        {
            return dal.Detail(MajorTypeId);
        }
        #endregion

    }
}
namespace MyBLL
{
    public class MajorBLL
    {
        MajorDAL dal = new MajorDAL();

        #region 添加专业
        public int Add(MajorEntity entity)
        {
            return dal.Add(entity);
        }
        #endregion

        #region 删除专业
        public int Delete(int MajorId)
        {
            return dal.Delete(MajorId);
        }
        #endregion

        #region 修改专业
        public int Update(MajorEntity entity)
        {
            return dal.Update(entity);
        }
        #endregion

        #region 查询所有专业
        public List<MajorEntity> List()
        {
            return dal.List();
        }
        #endregion

        #region 查询一个专业详情
        public MajorEntity Detail(int MajorId)
        {
            return dal.Detail(MajorId);
        }
        #endregion
    }
}
namespace MyBLL
{
    public class StudentBLL
    {
        StudentDAL dal = new StudentDAL();

        #region 添加学生
        public int Add(StudentEntity entity)
        {
            return dal.Add(entity);
        }
        #endregion

        #region 删除学生
        public int Delete(int StudentId)
        {
            return dal.Delete(StudentId);
        }
        #endregion

        #region 修改学生
        public int Update(StudentEntity entity)
        {
            return dal.Update(entity);
        }
        #endregion

        #region 查询所有学生
        public List<StudentEntity> List()
        {
            return dal.List();
        }
        #endregion

        #region 查询一个学生详情
        public StudentEntity Detail(int StudentId)
        {
            return dal.Detail(StudentId);
        }
        #endregion

        //----------------------------------------------------------------
        #region 搜索学生
        public List<StudentEntity> Search(StudentEntity searchEntity, int pageSize, int pageIndex, out int recordCount)
        {
            return dal.Search(searchEntity, pageSize, pageIndex, out recordCount);
        }
        #endregion

        #region 根据专业类型分组统计学生人数
        public List<object> GetCountByType()
        {
            return dal.GetCountByType();
        }
        #endregion
    }
}

六、界面UI层编写

(1)由于界面UI层需要使用实体类,所以需要添加实体类的引用。

即在MyUI项目上右键-->添加-->引用-->项目,在项目中勾选MyEntity项目。

(2)由于界面UI层需要调用业务逻辑层,所以需要添加业务逻辑层的引用。

即在MyUI项目上右键-->添加-->引用-->项目,在项目中勾选MyBLL项目。

学生搜索查询及删除代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>首页-学生列表</title>
    <style type="text/css">
        #search{ text-align:center; height:30px; line-height:30px;}
        #mylist table{ margin:10px auto;}
    </style>
    <link href="reveal/reveal.css" rel="stylesheet" type="text/css" />
    <script src="reveal/jquery-1.4.4.min.js" type="text/javascript"></script>
    <script src="reveal/jquery.reveal.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $(".update").click(function () {
                //alert(this.id);
                $("#EditFrame").attr("src", "Update.aspx?StudentId=" + this.id.split("_")[1]);
            })
        })
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="search">
        请输入姓名:<asp:TextBox ID="key" runat="server" ClientIDMode="Static"></asp:TextBox>
        <asp:Button ID="btSearch" runat="server" Text="立即搜索" onclick="btSearch_Click" />
        <a href="#"  data-reveal-id="AddModal" data-animation="none">添加学生</a>
        <a href="Group.aspx" target="_blank">统计人数</a>
    </div>
    <div id="mylist">
        <asp:GridView ID="gvStudent" runat="server" DataKeyNames="StudentId" AutoGenerateColumns="False" 
            CellPadding="4" ForeColor="#333333" GridLines="None" Width="912px" 
            onrowdeleting="gvStudent_RowDeleting">
            <AlternatingRowStyle BackColor="White" />
            <Columns>
                <asp:BoundField DataField="typeEntity.MajorTypeName" HeaderText="专业类型" />
                <asp:BoundField DataField="majorEntity.MajorName" HeaderText="专业名称" />
                <asp:BoundField DataField="StudentName" HeaderText="学生姓名" />
                <asp:BoundField DataField="StudentSex" HeaderText="学生性别" />
                <asp:BoundField DataField="StudentPhone" HeaderText="电话" />
                <asp:BoundField DataField="StudentMail" HeaderText="邮箱" />
                <asp:TemplateField>
                    <HeaderTemplate>操作</HeaderTemplate>
                    <ItemTemplate>
                        <a href="#"  data-reveal-id="EditModal" data-animation="none" class="update" id="a_<%#Eval("StudentId")%>">编辑</a>
                        <asp:LinkButton  ID="lbDelete" runat="server" CommandName="delete" OnClientClick="return confirm('确定要删除吗?');">删除</asp:LinkButton>                  
                    </ItemTemplate>  
                </asp:TemplateField>
            </Columns>
            <EditRowStyle BackColor="#2461BF" />
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#EFF3FB" />
            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#F5F7FB" />
            <SortedAscendingHeaderStyle BackColor="#6D95E1" />
            <SortedDescendingCellStyle BackColor="#E9EBEF" />
            <SortedDescendingHeaderStyle BackColor="#4870BE" />
        </asp:GridView>
    </div>
    <div>
        <uc1:NumPage ID="MyPage" runat="server" OnPageIndexChanged="MyPage_PageIndexChanged"   />
    </div>
    </form>
</body>
</html>
<%--由于插件样式表中left:50%,所以将margin-left设置成width的一半实现居中--%>
<div id="AddModal" class="reveal-modal" style=" width:520px; margin-left:-260px; height:320px;">
    <iframe src="Add.aspx" frameborder="0" width="520" height="320"></iframe>
    <a class="close-reveal-modal">&#215;</a>
</div>
<div id="EditModal" class="reveal-modal" style=" width:520px; margin-left:-260px; height:320px;">
    <iframe src="" frameborder="0" width="520" height="320" id="EditFrame"></iframe>
    <a class="close-reveal-modal">&#215;</a>
</div>

其中使用了Jquery和reveal插件,插件见实际项目。

namespace MyUI
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindData();
            }
        }

        #region 绑定数据到控件
        private void BindData()
        {
            //计算当前页
            int PageIndex = this.MyPage.GetPageIndex();
            //页码大小
            int PageSize = 3;
            //设置搜索条件给数据查询
            StudentEntity entity = new StudentEntity();
            entity.StudentName = this.key.Text;
            StudentBLL bll = new StudentBLL();
            int RecordCount = 0;
            List<StudentEntity> list = new List<StudentEntity>();
            list = bll.Search(entity, PageSize, PageIndex, out RecordCount);
            //绑定数据到控件
            this.gvStudent.DataSource = list;
            this.gvStudent.DataBind();
            //显示分页控件
            this.MyPage.ShowControl(PageSize, RecordCount);
        }
        #endregion

        protected void btSearch_Click(object sender, EventArgs e)
        {
            this.MyPage.SetPageIndex(1);
            BindData();
        }

        #region 删除学生信息
        protected void gvStudent_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            StudentBLL bll = new StudentBLL();
            bll.Delete(int.Parse(e.Keys["StudentId"].ToString()));
            BindData();
        }
        #endregion

        #region 分页
        protected void MyPage_PageIndexChanged(object sender, EventArgs e)
        {
            BindData();
        }
        #endregion

    }
}

学生新增代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>添加学生</title>
    <style type="text/css">
        body,div{ margin:0px; padding:0px;}
        #addTitle{ font-size:16px; font-weight:bold; text-align:center; background-color:#f3f3f3; height:30px; line-height:30px;}
        #myTable{ width:500px; margin:10px auto;}
        #myTable td{ height:30px; line-height:30px;}
        .lefttd{ width:100px; text-align:right;}
        .rightrd{ width:400px; text-align:left;}
        .errInfo{ color:Red;}
    </style>
    <script src="jquery/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
        var jsonType = <%=ViewState["listType"] %>;
        var jsonMajor = <%=ViewState["listMajor"]%>;
        //绑定专业类型
        function BindType()
        {
            $("#ddlType").append("<option value=''>--请选择--</option>");
            for(var i = 0;i< jsonType.length;i++)
            {
                $("#ddlType").append("<option value='"+jsonType[i].MajorTypeId+"'>"+jsonType[i].MajorTypeName+"</option>");
            }
        }
        //绑定专业
        function BindMajor()
        {
            $("#ddlMajor").append("<option value=''>--请选择--</option>");
        }
        //检查专业类型
        function CheckType()
        {
            if($("#ddlType").val() == "")
            {
                $("#spanType").html("请选择专业类型");
                return false;
            }
            else
            {
                $("#spanType").html("");
                return true;              
            }
        }
        //检查专业
        function CheckMajor()
        {
            if($("#ddlMajor").val() == "")
            {
                $("#spanMajor").html("请选择专业类型");
                return false;
            }
            else
            {
                $("#spanMajor").html("");
                return true;              
            }
        }
        //检查姓名
        function CheckName()
        {
            if($("#txtName").val() == "")
            {
                $("#spanName").html("姓名不能为空");
                return false;
            }
            else
            {
                $("#spanName").html("");
                return true;              
            }
        }
        //检查性别
        function CheckSex()
        {
            if($(":checked[name=sex]").length == 0)
            {
                $("#spanSex").html("性别不能为空");
                return false; 
            }
            else
            {
                $("#spanSex").html("");
                return true;    
            }
        }
        //检查电话
        function CheckPhone()
        {
            var exp = /^(13|15|18)\d{9}$/;
            if(!exp.test($("#txtPhone").val()))
            {
                $("#spanPhone").html("手机号码为空或者格式不正确");
                return false;
            }
            else
            {
                $("#spanPhone").html("");
                return true;                    
            }     
        }
        //检查邮箱
        function CheckMail()
        {
            var exp = /^\w+@\w+(\.[a-zA-Z]{2,3}){1,2}$/;
            if(!exp.test($("#txtMail").val()))
            {
                $("#spanMail").html("邮箱为空或者格式不正确");
                return false;
            }
            else
            {
                $("#spanMail").html("");
                return true;                    
            }           
        }


        $(function(){
            BindType();
            BindMajor();
             //选择专业类型的时候切换专业
            $("#ddlType").change(function(){
                $("#ddlMajor").html("");
                $("#ddlMajor").append("<option value=''>--请选择--</option>");
                if($("#ddlType").val() == "")
                    return;
                for(var i = 0;i< jsonMajor.length;i++)
                {
                    if(jsonMajor[i].MajorTypeId == $("#ddlType").val())
                        $("#ddlMajor").append("<option value='"+jsonMajor[i].MajorId+"'>"+jsonMajor[i].MajorName+"</option>");
                }       
            }) 
            

            //表单提交验证
            $("#form1").submit(function(){
                if(CheckType()==true & CheckMajor()==true & CheckName()==true & CheckSex()==true & 
                CheckPhone() == true & CheckMail() == true)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            })

            $("#ddlType").blur(function(){
                CheckType();
            })
            $("#ddlMajor").blur(function(){
                CheckMajor();
            })
            $("#txtName").blur(function(){
                CheckName();
            })
            $("[name=sex]").blur(function(){
                CheckSex();
            })
            $("#txtPhone").blur(function(){
                CheckPhone();
            })
            $("#txtMail").blur(function(){
                CheckMail();
            })
        })
    </script>
</head>
<body>
    <form id="form1" runat="server" clientidmode="Static">
    <div>
        <div id="addTitle">添加学生信息</div>
        <table id="myTable">
            <tr>
                <td class="lefttd">专业类型:</td>
                <td class="rightrd">
                    <asp:DropDownList ID="ddlType" runat="server" ClientIDMode="Static">
                    </asp:DropDownList>
                    <span id="spanType" class="errInfo"></span>                   
                </td>
            </tr>
            <tr>
                <td class="lefttd">专业:</td>
                <td class="rightrd">
                    <asp:DropDownList ID="ddlMajor" runat="server" ClientIDMode="Static">
                    </asp:DropDownList>
                    <span id="spanMajor" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">姓名:</td>
                <td class="rightrd">
                    <asp:TextBox ID="txtName" runat="server" ClientIDMode="Static"></asp:TextBox>
                    <span id="spanName" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">性别:</td>
                <td class="rightrd">
                    <asp:RadioButton ID="rbBoy" runat="server" Text="男" Checked="false" GroupName="sex" ClientIDMode="Static" />
                    <asp:RadioButton ID="rbGirl" runat="server" Text="女" Checked="false" GroupName="sex"  ClientIDMode="Static" />
                    <span id="spanSex" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">电话:</td>
                <td class="rightrd">
                    <asp:TextBox ID="txtPhone" runat="server" ClientIDMode="Static"></asp:TextBox>
                    <span id="spanPhone" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">邮箱:</td>
                <td class="rightrd">
                    <asp:TextBox ID="txtMail" runat="server" ClientIDMode="Static"></asp:TextBox>
                    <span id="spanMail" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">&nbsp;</td>
                <td class="rightrd">
                    <asp:Button ID="btAdd" runat="server" ClientIDMode="Static" Text="添加学生" onclick="btAdd_Click" />
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>
namespace MyUI
{
    public partial class Add : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindData();
        }

        #region 绑定类型和专业
        private void BindData()
        {
            List<MajorTypeEntity> listType = new List<MajorTypeEntity>();
            MajorTypeBLL typeBll = new MajorTypeBLL();
            listType = typeBll.List();
            ViewState["listType"] = MyJson.ToJsJson(listType);

            List<MajorEntity> listMajor = new List<MajorEntity>();
            MajorBLL majorBll = new MajorBLL();
            listMajor = majorBll.List();
            ViewState["listMajor"] = MyJson.ToJsJson(listMajor);
        }
        #endregion

        #region 添加学生信息
        protected void btAdd_Click(object sender, EventArgs e)
        {
            StudentBLL bll = new StudentBLL();
            StudentEntity entity = new StudentEntity();
            entity.MajorId = int.Parse(Request["ddlMajor"]);
            entity.StudentName = this.txtName.Text;
            entity.StudentSex = this.rbBoy.Checked == true ? "男" : "女";
            entity.StudentPhone = this.txtPhone.Text;
            entity.StudentMail = this.txtMail.Text;
            bll.Add(entity);
            Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "<script>alert('添加成功');window.parent.location.reload();</script>");
        }
        #endregion
    }
}

学生编辑修改代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>修改学生</title>
    <style type="text/css">
        body,div{ margin:0px; padding:0px;}
        #addTitle{ font-size:16px; font-weight:bold; text-align:center; background-color:#f3f3f3; height:30px; line-height:30px;}
        #myTable{ width:500px; margin:10px auto;}
        #myTable td{ height:30px; line-height:30px;}
        .lefttd{ width:100px; text-align:right;}
        .rightrd{ width:400px; text-align:left;}
        .errInfo{ color:Red;}
    </style>
    <script src="jquery/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
        var jsonType = <%=ViewState["listType"] %>;
        var jsonMajor = <%=ViewState["listMajor"]%>;
        //检查专业类型
        function CheckType()
        {
            if($("#ddlType").val() == "")
            {
                $("#spanType").html("请选择专业类型");
                return false;
            }
            else
            {
                $("#spanType").html("");
                return true;              
            }
        }
        //检查专业
        function CheckMajor()
        {
            if($("#ddlMajor").val() == "")
            {
                $("#spanMajor").html("请选择专业类型");
                return false;
            }
            else
            {
                $("#spanMajor").html("");
                return true;              
            }
        }
        //检查姓名
        function CheckName()
        {
            if($("#txtName").val() == "")
            {
                $("#spanName").html("姓名不能为空");
                return false;
            }
            else
            {
                $("#spanName").html("");
                return true;              
            }
        }
        //检查性别
        function CheckSex()
        {
            if($(":checked[name=sex]").length == 0)
            {
                $("#spanSex").html("性别不能为空");
                return false; 
            }
            else
            {
                $("#spanSex").html("");
                return true;    
            }
        }
        //检查电话
        function CheckPhone()
        {
            var exp = /^(13|15|18)\d{9}$/;
            if(!exp.test($("#txtPhone").val()))
            {
                $("#spanPhone").html("手机号码为空或者格式不正确");
                return false;
            }
            else
            {
                $("#spanPhone").html("");
                return true;                    
            }     
        }
        //检查邮箱
        function CheckMail()
        {
            var exp = /^\w+@\w+(\.[a-zA-Z]{2,3}){1,2}$/;
            if(!exp.test($("#txtMail").val()))
            {
                $("#spanMail").html("邮箱为空或者格式不正确");
                return false;
            }
            else
            {
                $("#spanMail").html("");
                return true;                    
            }           
        }

        $(function(){
            $("#ddlType").change(function(){
                $("#ddlMajor").html("");
                $("#ddlMajor").append("<option value=''>--请选择--</option>");
                if($("#ddlType").val() == "")
                    return;
                for(var i = 0;i< jsonMajor.length;i++)
                {
                    if(jsonMajor[i].MajorTypeId == $("#ddlType").val())
                        $("#ddlMajor").append("<option value='"+jsonMajor[i].MajorId+"'>"+jsonMajor[i].MajorName+"</option>");
                }                 
            })


            //表单提交验证
            $("#form1").submit(function(){
                if(CheckType()==true & CheckMajor()==true & CheckName()==true & CheckSex()==true & 
                CheckPhone() == true & CheckMail() == true)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            })

            $("#ddlType").blur(function(){
                CheckType();
            })
            $("#ddlMajor").blur(function(){
                CheckMajor();
            })
            $("#txtName").blur(function(){
                CheckName();
            })
            $("[name=sex]").blur(function(){
                CheckSex();
            })
            $("#txtPhone").blur(function(){
                CheckPhone();
            })
            $("#txtMail").blur(function(){
                CheckMail();
            })

        })

    </script>
</head>
<body>
    <form id="form1" runat="server" clientidmode="Static">
    <div>
        <div id="addTitle">添加学生信息</div>
        <table id="myTable">
            <tr>
                <td class="lefttd">专业类型:</td>
                <td class="rightrd">
                    <asp:DropDownList ID="ddlType" runat="server" ClientIDMode="Static">
                    </asp:DropDownList>
                    <span id="spanType" class="errInfo"></span>                   
                </td>
            </tr>
            <tr>
                <td class="lefttd">专业:</td>
                <td class="rightrd">
                    <asp:DropDownList ID="ddlMajor" runat="server" ClientIDMode="Static">
                    </asp:DropDownList>
                    <span id="spanMajor" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">姓名:</td>
                <td class="rightrd">
                    <asp:TextBox ID="txtName" runat="server" ClientIDMode="Static"></asp:TextBox>
                    <span id="spanName" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">性别:</td>
                <td class="rightrd">
                    <asp:RadioButton ID="rbBoy" runat="server" Text="男" Checked="false" GroupName="sex" ClientIDMode="Static" />
                    <asp:RadioButton ID="rbGirl" runat="server" Text="女" Checked="false" GroupName="sex"  ClientIDMode="Static" />
                    <span id="spanSex" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">电话:</td>
                <td class="rightrd">
                    <asp:TextBox ID="txtPhone" runat="server" ClientIDMode="Static"></asp:TextBox>
                    <span id="spanPhone" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">邮箱:</td>
                <td class="rightrd">
                    <asp:TextBox ID="txtMail" runat="server" ClientIDMode="Static"></asp:TextBox>
                    <span id="spanMail" class="errInfo"></span>
                </td>
            </tr>
            <tr>
                <td class="lefttd">&nbsp;</td>
                <td class="rightrd">
                    <asp:Button ID="btUpdate" runat="server" ClientIDMode="Static" Text="修改学生" 
                        onclick="btUpdate_Click" />
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>
namespace MyUI
{
    public partial class Update : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindData();
        }

        #region 学生信息
        private void BindData()
        {            
            //获取学生详情
            StudentEntity stuEntity = new StudentEntity();
            StudentBLL stuBll = new StudentBLL();
            stuEntity = stuBll.Detail(int.Parse(Request["StudentId"].ToString()));
            if (stuEntity == null)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "<script>alert('找不到该学生信息');window.parent.location.reload();</script>");
                return;
            }
            //通过学生信息获取专业信息,从专业信息中才能获取专业类型编号,因为学生表中没有专业类型编号
            MajorEntity majorEntity = new MajorEntity();
            MajorBLL majorBll = new MajorBLL();
            majorEntity = majorBll.Detail(stuEntity.MajorId);

            //绑定专业类型下拉框
            List<MajorTypeEntity> listType = new List<MajorTypeEntity>();
            MajorTypeBLL typeBll = new MajorTypeBLL();
            listType = typeBll.List();
            this.ddlType.DataSource = listType;
            this.ddlType.DataValueField = "MajorTypeId";
            this.ddlType.DataTextField = "MajorTypeName";
            this.ddlType.DataBind();
            this.ddlType.Items.Insert(0, new ListItem("--请选择--", ""));
            this.ddlType.SelectedValue = majorEntity.MajorTypeId.ToString();           
            ViewState["listType"] = MyJson.ToJsJson(listType);

            //绑定专业下拉框
            List<MajorEntity> listMajor = new List<MajorEntity>();
            listMajor = majorBll.List();
            ViewState["listMajor"] = MyJson.ToJsJson(listMajor);
            listMajor = listMajor.Where(p=>p.MajorTypeId == majorEntity.MajorTypeId).ToList();
            this.ddlMajor.DataSource = listMajor;
            this.ddlMajor.DataValueField = "MajorId";
            this.ddlMajor.DataTextField = "MajorName";
            this.ddlMajor.DataBind();
            this.ddlMajor.Items.Insert(0, new ListItem("--请选择--", ""));
            this.ddlMajor.SelectedValue = stuEntity.MajorId.ToString(); 
            

            //绑定表单其它元素
            this.txtName.Text = stuEntity.StudentName;
            this.txtPhone.Text = stuEntity.StudentPhone;
            this.txtMail.Text = stuEntity.StudentMail;
            if (stuEntity.StudentSex.Equals("男")) this.rbBoy.Checked = true;
            if (stuEntity.StudentSex.Equals("女")) this.rbGirl.Checked = true;
        }
        #endregion

        #region 修改学生信息
        protected void btUpdate_Click(object sender, EventArgs e)
        {
            StudentEntity entity = new StudentEntity();
            StudentBLL bll = new StudentBLL();
            entity = bll.Detail(int.Parse(Request["StudentId"].ToString()));
            if (entity == null)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "<script>alert('找不到该学生信息');window.parent.location.reload();</script>");
                return;
            }
            entity.MajorId = int.Parse(this.ddlMajor.SelectedValue.ToString());
            entity.StudentName = this.txtName.Text;
            entity.StudentSex = this.rbBoy.Checked == true ? "男" : "女";
            entity.StudentPhone = this.txtPhone.Text;
            entity.StudentMail = this.txtMail.Text;
            bll.Update(entity);
            Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "<script>alert('修改成功');window.parent.location.reload();</script>");
        }
        #endregion
    }
}

扩展:按照专业类型统计学生人数

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="gvGroup" runat="server" AutoGenerateColumns="false">
            <Columns>
                <asp:BoundField HeaderText="专业类型" DataField="TypeName" />
                <asp:BoundField HeaderText="学生人数" DataField="StuCount" />
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>
namespace MyUI
{
    public partial class Group : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindData();
        }

        #region 绑定数据
        private void BindData()
        {
            List<object> list = new List<object>();
            StudentBLL bll = new StudentBLL();
            list = bll.GetCountByType();
            this.gvGroup.DataSource = list;
            this.gvGroup.DataBind();
        }
        #endregion
    }
}

相关文章

  • 12-三层架构

    三层架构将整个业务应用划分为:(1)界面UI层;(2)业务逻辑层;(3)数据访问层。 对于复杂的系统分层可以让结构...

  • 软件设计的三层架构

    1:三层架构是什么? 三层架构是一个分层式的软件体系架构设计理念。 把软件架构分为三层; 1:UI层 (user ...

  • MyBatis框架学习:

    框架概述 软件开发常用结构 三层架构三层架构包含的三层:界面层(User Interface layer)、业务逻...

  • 1 C#WinForm开发权限管理历程之三层架构

    0 C#WinForm开发权限管理历程之权限管理概述 1.1三层架构 权限管理计划用三层架构设计,三层架构包括DA...

  • SpringMVC 学习笔记

    三层架构 和 MVC模型 三层架构:我们在Servlet 学习笔记讲过,当前 Web 应用体系主要为 C/S架构 ...

  • SpringMVC知识 day01 SpringMVC概述&入门

    一、SpringMVC 的基本概念 1.1 关于三层架构和 MVC 1.1.1 三层架构: 我们的开发架构一般...

  • MyBatis从前世到今生一网打尽(全网最全,建议收藏)

    一、框架概述 1.1 软件开发常用结构 1.1.1、三层架构 三层架构包含的三层: 界面层(User Interf...

  • 2017.09.21

    一直以为 MVC 和三层架构是同一个东西,直到今天才明确的知道:MVC 是 MVC,三层架构是三层架构, 它们之间...

  • iOS中的架构及设计模式

    iOS中的三层架构、四层架构 三层架构 界面层 (MVC、MVP、MVVM) 业务层 数据层(网络数据&本地数据)...

  • Spring MVC高级框架

    Spring MVC应用 Spring MVC介绍 MVC体系结构 三层架构在B/S架构中,系统标准的三层架构包括...

网友评论

      本文标题:12-三层架构

      本文链接:https://www.haomeiwen.com/subject/xqpaadtx.html