机房重构之添加用户

添加用户也是用到了七层,说来也简单,先分为两部分,首先要对添加的数据加一个判断,看数据库里是否有重复的数据,然后在添加数据。我这里是用卡号来判断是否重复的。如下:

IDAL

DataTable Select(Entity.AddStudent user);//判断是否有相同数据

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IDAL
{
    public interface IAddstudent
    {
        DataTable Select(Entity.AddStudent user);//判断是否有相同数据
       int  AddStudent(Entity.AddStudent user);//添加数据
    }
}

DAL

DAL层,也称为数据访问层,是应用程序中负责与数据库进行交互的部分。它封装了数据库操作,提供了数据持久化的能力,并提供了对数据的增删改查(CRUD)操作。

以下是对DAL层的总结:

  1. 数据库交互:DAL层的主要职责是与数据库进行交互。它通过连接数据库,执行SQL查询和更新语句,以及处理事务等操作来实现与数据库的通信。

  2. 数据持久化:DAL层负责将应用程序中的数据持久化到数据库中。它通过将业务逻辑层(BLL)传递过来的数据转换成适合数据库存储的格式,并将其存储到数据库中,保证数据的可靠性和持久性。

  3. 封装数据库操作:DAL层封装了底层数据库的细节,屏蔽了数据库操作的复杂性,提供了简单易用的接口供上层的业务逻辑层使用。这样,业务逻辑层可以专注于业务规则的实现,而不需要直接与数据库打交道。

  4. 查询和更新操作:DAL层提供了对数据的查询和更新操作的方法。这些方法可以根据业务需求,执行复杂的SQL查询,获取所需的数据,并且能够执行数据的插入、更新和删除操作。

  5. 数据库连接管理:DAL层负责数据库连接的管理,包括连接的建立、释放和连接池的管理。它需要确保在需要时可以有效地创建数据库连接,并在使用完毕后及时释放,以提高系统的性能和资源利用率。

  6. 安全性和数据校验:DAL层需要考虑数据安全性和数据校验的问题。它可以通过参数化查询、防止SQL注入攻击、权限控制等技术手段来保护数据的安全性,并验证输入数据的合法性,防止不符合规范的数据进入数据库。

综上所述,DAL层承担了与数据库交互的功能,封装了数据库操作,提供了持久化能力,并完成了数据的查询、更新和连接管理等任务。它通过良好的抽象和封装,使得应用程序的其他层(如BLL层和UI层)能够更加专注于业务逻辑和用户界面的开发,保证了应用程序的可维护性和可扩展性。

 public class Add: IDAL.IAddstudent
    {

        #region 判断是否有重复数据
        public DataTable Select(Entity.AddStudent user)
        {
            SQLHelper sqlhelper = new SQLHelper();//实例化SQLhelp
                                                  //定义一个bool型变量,用来接收返回数据
                                                  //bool flag;
            string sql = "select * from student_info where cardno=@cardno";//查询卡号是否重复
            SqlParameter[] sqlpar =
            {
                new SqlParameter("@cardno", user.cardno ),
            };

            //DataTable tabel =sqlhelper .ExecuteQuery(sql,sqlpar)
            DataTable tabel = sqlhelper.ExecuteQuery(sql, sqlpar, CommandType.Text);
            return tabel;
        }
        #endregion

Facade

 public class Addstudent
    {
        #region 判断数据是否重复
        public bool select(Entity .AddStudent user)
        {
            BLL.Addstudent userbll = new BLL.Addstudent();
            bool falg;
            falg = userbll.flag(user );

            return falg;
        }
        #endregion

BLL

namespace BLL
{
    public class Addstudent
    {
        #region 判断是否有重复数据
        public bool flag(Entity.AddStudent user)
        {
            Factory.AddStudent fact = new Factory.AddStudent();//实例化工厂
            IDAL.IAddstudent idal = fact.Addstudent();
            DataTable table = idal.Select(user);
            bool flag;
            if (flag= table.Rows.Count == 0)//判断数据库里面是否有重复的数据,如果=0说明没有重复的数据行
            {
                flag = true;

            }
            else
            {
                flag = false;
                
            }

            return flag;
        }
层级功能示例
DAL (数据访问层)提供与数据库交互的功能,封装数据库操作,提供数据持久化能力。执行 SQL 查询和更新语句,连接数据库,处理 CRUD 操作。
Dacade (数据接口层)定义与数据层交互的接口,对外暴露数据访问方法。包含接口定义,声明数据库访问方法,定义数据传输对象(DTO)。
BLL (业务逻辑层)实现业务逻辑,处理业务规则和流程,对外暴露可调用的业务方法。处理业务规则,调用 DAL 层进行数据操作,实现特定的业务功能。
Entity (实体)层定义系统中使用的实体对象,用于封装数据和业务逻辑。表示数据库中的表,包含属性和方法,用于数据的传输和封装逻辑。

这个二维表提供了每个层级的功能描述和应有的职责。DAL层负责与数据库进行交互,处理CRUD操作;Dacade层定义了与数据层交互的接口,提供数据访问方法,并定义数据传输对象;BLL层负责实现业务规则和流程,调用DAL层进行数据操作,实现特定的业务功能;Entity层定义了系统中使用的实体对象,用于封装数据和业务逻辑。

这种分层结构可以提供良好的代码组织和可维护性,将不同领域的功能分离开来,使得代码更加清晰、可扩展和可测试。同时,它还能够促进团队的协作和开发效率,因为不同层级的职责被明确定义,开发人员可以专注于各自的任务,并且在需要时可以更换或更新某个层级而不影响其他层级。

值得注意的是,这个二维表只是一个概念上的简化示例,实际应用中可能存在不同的命名和职责划分,具体的架构设计应根据项目需求和团队约定进行调整和优化。

第二步    往数据库里面添加数据

Entity

namespace Entity
{
    public class AddStudent
    {
        public int  studentID { get; set; }
        public string studentName { get; set; }
        public string pwd { get; set; }
        public string QRpwd { get; set; }
        public string grade { get; set; }
        public string department { get; set; }
        public string classs { get; set; }
        public string money { get; set; }
        public string sex { get; set; }
        public string cardno { get; set; }
       
    }

IDAL

int  AddStudent(Entity.AddStudent user);//添加数据

namespace IDAL
{
    public interface IAddstudent
    {
        DataTable Select(Entity.AddStudent user);//判断是否有相同数据
       int  AddStudent(Entity.AddStudent user);//添加数据
    }
}

DAL

 public int AddStudent(Entity.AddStudent user)
        {

            SQLHelper sqlhelper = new SQLHelper();//实例化SQLhelp
                             
            SqlParameter[] sqlpar =
            {
                    new SqlParameter("@txtStudentID",user.studentID),
                    new SqlParameter("@txtStudentName",user.studentName),
                    new SqlParameter("@txtPassword",user.pwd),
                    //new SqlParameter("@txtQRpassword",user.pwd),
                    new SqlParameter("@comGrade",user.grade),
                    new SqlParameter("@comDeparment",user.department),
                    new SqlParameter("@comClass",user.classs),
                    new SqlParameter("@txtMoney",user.money),
                    new SqlParameter("@comSex",user.sex),
                    new SqlParameter ("@txtcardno",user.cardno)
                    
        };//定义需要传递的参数      
            string sql = @"insert into student_info(cardno,studentNo,studentName,sex,cash,class,department,grade,password)values(@txtcardno,@txtStudentID,@txtStudentName,@comSex,@txtMoney,@comClass,@comDeparment,@comGrade,@txtPassword)";
            //string sql = "insert into student_info(cardno, studentNo, studentName, sex, cash, UserID, status, Ischeck, date, time, type,class,department,grade,password)values(@cardno,44,4,44,53,3,3,3,'2021-04-21','19:49:31',3,5,6,4,2)"
            //DataTable table  = sqlhelper.ExecuteQuery(sql, sqlpar, CommandType.Text);

            int table = sqlhelper.ExecuteNonQuery(sql, sqlpar, CommandType.Text);
            
            return table ;

        }
    }

Factory

namespace Factory
{
    public class AddStudent
    {
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
        public IAddstudent Addstudent()
        {
            string ClassName = StrDB + "." + "Add";
           
            return (IAddstudent)Assembly.Load(StrDB).CreateInstance(ClassName);
           
        }
    }
}

BLL

public int  addstudent(Entity.AddStudent user)//添加数据
        {
            Factory.AddStudent fact = new Factory.AddStudent();//实例化工厂
            IDAL.IAddstudent idal = fact.Addstudent();

           
            int  flag = idal.AddStudent(user);

            return flag;

        }

Facade

public int  addstudent(Entity.AddStudent user)
        {
            
            BLL.Addstudent userbll = new BLL.Addstudent();
            int  flag = userbll.addstudent(user);

            return flag;
        }

UI

 private void button1_Click(object sender, EventArgs e)
        {
            if (txtStudentID.Text =="")
            {
                MessageBox.Show("学号不能为空!", "提示");
            }
            else if (txtStudentName.Text =="")
            {
                MessageBox.Show("姓名不能为空!", "提示");
            }
            else if (txtPassword.Text =="")
            {
                MessageBox.Show("密码不能为空!", "提示");
            }
            else if (txtQRpassword.Text =="")
            {
                MessageBox.Show("确认密码不能为空!", "提示");
            }
            else if (comGrade.Text =="")
            {
                MessageBox.Show("请选择您所在的年级!", "提示");
            }
            else if (comDeparment.Text =="")
            {
                MessageBox.Show("请选择您所在的系别!", "提示");
            }
            else if (comClass.Text =="")
            {
                MessageBox.Show("请选择您所在的班级!", "提示");
            }
            else if (txtMoney.Text =="")
            {
                MessageBox.Show("请输入您要充值的金额,最小金额不能少于3元!", "提示");
            }
            else if (txtPassword.Text != txtQRpassword.Text )
            {
                MessageBox.Show("密码和确认密码不一致,请您再次确认!", "提示");
            }

            else
            {
                Facade.Addstudent facade = new Facade.Addstudent();
                Entity.AddStudent entity = new Entity.AddStudent();
                
                entity.studentID = Convert.ToInt32(txtStudentID.Text.Trim());
                entity.studentName = txtStudentName.Text.Trim();
                entity.pwd = txtPassword.Text.Trim();
                entity.QRpwd = txtQRpassword.Text.Trim();
                entity.grade = comGrade.Text.Trim();
                entity.classs = comClass.Text.Trim();
                entity.department = comDeparment.Text.Trim();
                entity.sex = comSex.Text.Trim();
                entity.money = txtMoney.Text.Trim();
                entity.cardno = txtcardno.Text.Trim();

                bool falg = facade.select(entity);

                if (falg ==false)//与B层的判断关联
                {
                 
                    MessageBox.Show("已有此卡号,请重新输入!","提示");
                }
                else
                {
                    facade.addstudent(entity);
                    MessageBox.Show("添加成功","提示");
                    
                }
          
            }
           
        }

UI层,也称为用户界面层,是指应用程序中负责展示和呈现用户界面的部分。它通常是用户和应用程序交互的主要窗口,包括了视图、控制器、模板等组件,并负责将用户输入转换为应用程序可以处理的动作或数据请求。

以下是对UI层的总结:

  1. 提供用户界面:UI层的主要职责是提供用户友好的界面,使用户能够方便地使用应用程序。UI层需要根据用户需求和交互方式设计相应的视图和控制器,使得用户界面与操作流程尽可能地一致,并符合用户的期望。

  2. 实现用户交互:UI层需要处理用户输入,并将其转换为应用程序可以处理的数据或动作请求。通常,UI层会定义事件处理器、回调函数等组件,通过这些组件来响应用户操作,将用户行为转化为应用程序可以理解的操作。

  3. 呈现数据和状态:UI层需要将应用程序的数据状态呈现给用户,以便用户了解当前的系统状态。这需要UI层具有数据绑定和渲染的能力,能够将数据与视图进行绑定,并在数据发生变化时动态地更新界面。

  4. 支持跨平台和自适应:UI层需要支持不同的操作系统、浏览器和设备,以便应用程序适应各种不同的用户环境。同时,UI层还需要具有自适应和响应式布局的能力,以便在不同屏幕尺寸和分辨率下保持界面一致性和可用性。

  5. 提供用户反馈:UI层需要向用户提供反馈,以便用户了解自己的操作是否被成功执行。例如,在输入错误时,UI层需要及时提示用户并提供修正方案,以便用户快速纠正错误。

  6. 优化性能和用户体验:UI层需要考虑到性能和用户体验方面的问题,以便提高应用程序的可用性和响应速度。优化性能可以采用异步刷新、懒加载等技术,而优化用户体验可以通过动画效果、转场等方式来增强交互体验。

综上所述,UI层是应用程序中至关重要的一部分,负责提供用户界面、实现用户交互、呈现数据和状态、支持跨平台和自适应、提供用户反馈以及优化性能和用户体验。UI层的设计和开发需要结合具体的应用需求和用户期望,尽可能地提供简洁、易用、美观、高效的用户体验。

注意:

  1. 安全性:在添加用户时,要注意账号和密码的安全性。密码要求强度高,不可使用弱密码。账号要求唯一性,避免重复。

  2. 权限控制:在为用户分配权限时,要根据用户的角色和职责进行合理的权限控制。避免将过高权限分配给普通用户,以防止滥用和安全风险。

  3. 访问控制:在配置访问控制策略时,要确保用户只能访问其被授权的资源。定期审查和更新访问控制策略,确保安全性和合规性。

  4. 测试和培训:在添加用户后,要进行测试和培训,确保用户账号和权限设置正确。及时解决用户反馈的问题,并提供技术支持和培训。

  5. 审计和监控:添加用户后,要进行审计和监控,跟踪用户的活动和资源访问情况。及时发现异常行为和安全事件,并采取相应的措施。

总结:

在机房重构过程中,添加用户是一个重要的环节。通过确定用户需求、创建用户账号、分配权限、配置访问控制、测试用户账号和进行用户通知和培训等步骤,可以有效地添加用户并确保其安全和合规性。同时,要注意账号和密码的安全性、合理的权限控制、访问控制的配置、测试和培训的进行以及审计和监控的实施。希望本文对你在机房重构过程中添加用户方面有所帮助。

通过添加用户功能,机房重构项目为机房管理系统增加了更灵活、可扩展的权限管理能力。管理员可以创建不同角色的用户,并为每个用户分配特定的权限,以实现对机房资源和功能的精细化控制。这样做有以下几个优点:

  1. 安全性提升:通过用户认证和授权机制,可以有效防止未经授权的访问和操作,保障机房系统及其中的数据安全。

  2. 权限管理灵活:通过创建不同角色的用户,并为每个用户分配特定权限,可以灵活控制用户对机房资源和功能的访问范围。

  3. 操作审计跟踪:通过用户身份识别和操作日志记录,可以追踪用户的操作记录,以便发现异常行为和进行后续审计。

  4. 便捷的团队协作:通过添加用户功能,可以支持多人协作,不同团队成员可以拥有各自的账号,并进行合理的权限划分,方便共同管理机房资源。

在完成机房重构中添加用户功能后,项目团队还应进行全面的测试和验证,确保该功能与现有系统的其他模块无缝集成,并且能够满足用户需求。此外,应该为用户提供清晰明确的使用指南和培训,以便他们能够熟练使用新功能。

总而言之,通过机房重构中添加用户功能,可以提升机房管理系统的安全性和灵活性,实现精细化的权限管理,并为用户提供更好的资源和功能控制。这将为机房管理带来更高的效率和便利性,从而提升整个机房运营的水平和质量。

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷艳爽faye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值