添加用户也是用到了七层,说来也简单,先分为两部分,首先要对添加的数据加一个判断,看数据库里是否有重复的数据,然后在添加数据。我这里是用卡号来判断是否重复的。如下:
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层的总结:
-
数据库交互:DAL层的主要职责是与数据库进行交互。它通过连接数据库,执行SQL查询和更新语句,以及处理事务等操作来实现与数据库的通信。
-
数据持久化:DAL层负责将应用程序中的数据持久化到数据库中。它通过将业务逻辑层(BLL)传递过来的数据转换成适合数据库存储的格式,并将其存储到数据库中,保证数据的可靠性和持久性。
-
封装数据库操作:DAL层封装了底层数据库的细节,屏蔽了数据库操作的复杂性,提供了简单易用的接口供上层的业务逻辑层使用。这样,业务逻辑层可以专注于业务规则的实现,而不需要直接与数据库打交道。
-
查询和更新操作:DAL层提供了对数据的查询和更新操作的方法。这些方法可以根据业务需求,执行复杂的SQL查询,获取所需的数据,并且能够执行数据的插入、更新和删除操作。
-
数据库连接管理:DAL层负责数据库连接的管理,包括连接的建立、释放和连接池的管理。它需要确保在需要时可以有效地创建数据库连接,并在使用完毕后及时释放,以提高系统的性能和资源利用率。
-
安全性和数据校验: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层的总结:
-
提供用户界面:UI层的主要职责是提供用户友好的界面,使用户能够方便地使用应用程序。UI层需要根据用户需求和交互方式设计相应的视图和控制器,使得用户界面与操作流程尽可能地一致,并符合用户的期望。
-
实现用户交互:UI层需要处理用户输入,并将其转换为应用程序可以处理的数据或动作请求。通常,UI层会定义事件处理器、回调函数等组件,通过这些组件来响应用户操作,将用户行为转化为应用程序可以理解的操作。
-
呈现数据和状态:UI层需要将应用程序的数据状态呈现给用户,以便用户了解当前的系统状态。这需要UI层具有数据绑定和渲染的能力,能够将数据与视图进行绑定,并在数据发生变化时动态地更新界面。
-
支持跨平台和自适应:UI层需要支持不同的操作系统、浏览器和设备,以便应用程序适应各种不同的用户环境。同时,UI层还需要具有自适应和响应式布局的能力,以便在不同屏幕尺寸和分辨率下保持界面一致性和可用性。
-
提供用户反馈:UI层需要向用户提供反馈,以便用户了解自己的操作是否被成功执行。例如,在输入错误时,UI层需要及时提示用户并提供修正方案,以便用户快速纠正错误。
-
优化性能和用户体验:UI层需要考虑到性能和用户体验方面的问题,以便提高应用程序的可用性和响应速度。优化性能可以采用异步刷新、懒加载等技术,而优化用户体验可以通过动画效果、转场等方式来增强交互体验。
综上所述,UI层是应用程序中至关重要的一部分,负责提供用户界面、实现用户交互、呈现数据和状态、支持跨平台和自适应、提供用户反馈以及优化性能和用户体验。UI层的设计和开发需要结合具体的应用需求和用户期望,尽可能地提供简洁、易用、美观、高效的用户体验。
注意:
-
安全性:在添加用户时,要注意账号和密码的安全性。密码要求强度高,不可使用弱密码。账号要求唯一性,避免重复。
-
权限控制:在为用户分配权限时,要根据用户的角色和职责进行合理的权限控制。避免将过高权限分配给普通用户,以防止滥用和安全风险。
-
访问控制:在配置访问控制策略时,要确保用户只能访问其被授权的资源。定期审查和更新访问控制策略,确保安全性和合规性。
-
测试和培训:在添加用户后,要进行测试和培训,确保用户账号和权限设置正确。及时解决用户反馈的问题,并提供技术支持和培训。
-
审计和监控:添加用户后,要进行审计和监控,跟踪用户的活动和资源访问情况。及时发现异常行为和安全事件,并采取相应的措施。
总结:
在机房重构过程中,添加用户是一个重要的环节。通过确定用户需求、创建用户账号、分配权限、配置访问控制、测试用户账号和进行用户通知和培训等步骤,可以有效地添加用户并确保其安全和合规性。同时,要注意账号和密码的安全性、合理的权限控制、访问控制的配置、测试和培训的进行以及审计和监控的实施。希望本文对你在机房重构过程中添加用户方面有所帮助。
通过添加用户功能,机房重构项目为机房管理系统增加了更灵活、可扩展的权限管理能力。管理员可以创建不同角色的用户,并为每个用户分配特定的权限,以实现对机房资源和功能的精细化控制。这样做有以下几个优点:
-
安全性提升:通过用户认证和授权机制,可以有效防止未经授权的访问和操作,保障机房系统及其中的数据安全。
-
权限管理灵活:通过创建不同角色的用户,并为每个用户分配特定权限,可以灵活控制用户对机房资源和功能的访问范围。
-
操作审计跟踪:通过用户身份识别和操作日志记录,可以追踪用户的操作记录,以便发现异常行为和进行后续审计。
-
便捷的团队协作:通过添加用户功能,可以支持多人协作,不同团队成员可以拥有各自的账号,并进行合理的权限划分,方便共同管理机房资源。
在完成机房重构中添加用户功能后,项目团队还应进行全面的测试和验证,确保该功能与现有系统的其他模块无缝集成,并且能够满足用户需求。此外,应该为用户提供清晰明确的使用指南和培训,以便他们能够熟练使用新功能。
总而言之,通过机房重构中添加用户功能,可以提升机房管理系统的安全性和灵活性,实现精细化的权限管理,并为用户提供更好的资源和功能控制。这将为机房管理带来更高的效率和便利性,从而提升整个机房运营的水平和质量。