1.使用到的软件Microsoft Visual Studio(用来设计和编写WindowsForms程序)、Microsoft SQL Server(用来储存员工的信息并且与Microsoft Visual Studio进行连接进行增删查改的操作)。
2.项目由三层架构的设计方式来编写代码UI(表现层)、BLL:(业务逻辑层)、DAL:(数据访问层)、(Model)作为数据传递的载体。
实现效果图
一
第一步
下载Microsoft SQL Server连接到数据库
如果连接失败看看电脑里面的服务选项,看看这个三个服务是否在运行,没有的话手动打开即可。
打开后默认选项就行,然后进行连接
注:服务器名称一定要记住要不然Microsoft Visual Studio会连接不上服务器
连接成功后
在数据库新建数据库,名称为PersonDataBase,创建成功后打开数据库在表中分别建立三个表。
Admin Department Person
Admin表结构为
Department表结构为
Person表结构为
以上弄好之后第一步就完成了。
二
第二步下载Microsoft Visual Studio并打开并新建立C#窗体程序
一共有4个层我们先从UL层开始,创建窗体程序之后命名为UL
三
第一个界面也就是登录界面LoginForm
设计界面为
打开属性窗口将用户名的文本框将文本框控件名称设计为TB_UserName
同理密码文本框设计为
同理登录和退出的(Name)设置为Bth_Login 、Bth_Exit
点击空白区域看下名字是否为LoginForm
然后右键查看代码
LoginForm的代码为
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UI
{
public partial class LoginForm : Form
{
BLL.AdminManager am = new BLL.AdminManager();
public LoginForm()
{
InitializeComponent();
}
private void Bth_Login_Click(object sender, EventArgs e)
{
//获得用户名和密码
string userName = TB_UserName.Text.Trim();
string password = TB_Password.Text.Trim();
//进行判断
if (userName == "")
{
MessageBox.Show("账号不能为空");
return;
}
if (password == "")
{
MessageBox.Show("密码不能为空!");
return;
}
MODEL.Admin admin = am.GetAdmin(userName, password);
if (admin != null)
{
//MessageBox.Show("欢迎管理员"+admin.UserName);
MainForm mainForm = new MainForm(admin);
mainForm.Show();
this.Visible = false;
}
else
{
MessageBox.Show("登陆失败!");
}
}
private void Bth_Exit_Click(object sender, EventArgs e)
{
this.Close();
}
//MODEL.Admin admin = am.GetAdmin(userName, password);
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
MainXForm mainxForm = new MainXForm();
mainxForm.ShowDialog();
}
}
}
三
第二步在UL创建一个新的窗体
名称为MainXForm.cs
设计为
同理(1)姓名、(2)用户名、(3)密码、(4)确认密码、(5)邮箱、(6)超级管理员的复选框、(7)确认注册、(8)退出的控件名称分别设置为
(1)TBox_PersonName
(2)TBox_UserName
(3)TBox_Password1
(4)TBox_Password2
(5)TBox_Email
(6)CBox_IsSuperAdmin
(7)Btn_Res
(8)button2
MainXForm.cs的代码为
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace UI
{
public partial class MainXForm : Form
{
BLL.AdminManager am = new BLL.AdminManager();
public MainXForm()
{
InitializeComponent();
}
private void MainXForm_Load(object sender, EventArgs e)
{
}
private void Btn_Res_Click(object sender, EventArgs e)
{
//1.先获得输入的注册信息
string personName = TBox_PersonName.Text.Trim();
string userName = TBox_UserName.Text.Trim();
string password1 = TBox_Password1.Text.Trim();
string password2 = TBox_Password2.Text.Trim();
string email = TBox_Email.Text.Trim();
bool isSuperAdmin=CBox_IsSuperAdmin.Checked;
//2.判断输入的信息是否齐全
if (personName == "" || userName == ""|| password1 == "" || password2 == "")
{
MessageBox.Show("信息没补全!", "提示");
return;
}
//3.1,判断用户名是否已经存在
if (am.ExistUserName(userName))
{
MessageBox.Show("用户名已经存在,无法注册", "提示");
return;
}
//3.2,判断两个密码是否一样
if (password1 != password2)
{
MessageBox.Show("两次密码要一致!", "提示");
return;
}
//4.将输入信息存到管理员对象
MODEL.Admin admin = new MODEL.Admin();
admin.PersonName = personName;
admin.UserName = userName;
admin.Password = password1;
if (email == "")
admin.Email = "未录入";
else
admin.Email = email;
if (isSuperAdmin == true)
admin.IsSuperAdmin = "是";
else
admin.IsSuperAdmin = "否";
if (am.Register(admin))
{
MessageBox.Show("注册成功,将返回登陆窗口", "提示");
this.Close();
}
else {
MessageBox.Show("注测失败", "提示");
}
}
private void button2_Click(object sender, EventArgs e)
{
System.Environment.Exit(0);
}
}
}
四
新建窗体为MainForm.cs
拖入一个menuStrip1的控件
设计为
MainForm.cs的代码为
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UI
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
public MainForm(MODEL.Admin admin)
{
InitializeComponent();
this.Text = "欢迎您,"+admin.PersonName;
}
private void MainForm_Load(object sender, EventArgs e)
{
//System.Environment.Exit(0);
}
//关闭事件
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
System.Environment.Exit(0);
}
private void 员工管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
//员工管理窗体
ManagerForm mf = new ManagerForm();
mf.MdiParent = this;
mf.Show();
}
}
}
第五步
创建新的窗体名称为ManagerForm.cs
设计为
拖入一个叫DataGView的控件
还有一个叫CBBOX的控件
在CBBOX中设置文本为
并且在CBBOX的事件(属性上的小闪电标志)设置为
然后右键编辑DataGView
添加以下属性
员工ID
员工姓名
性别
年龄
住址
电话
部门
身份证
ManagerForm.cs的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UI
{
public partial class ManagerForm : Form
{
BLL.PersonManager pm = new BLL.PersonManager();
public ManagerForm()
{
InitializeComponent();
}
private void ManagerForm_Load(object sender, EventArgs e)
{
//给员工插入数据
DataGView_Person.DataSource = pm.GetAllPerson();
CBBox_IsDel.SelectedIndex = 0;
}
private void CBBox_IsDel_SelectedIndexChanged(object sender, EventArgs e)
{
if (CBBox_IsDel.SelectedIndex == 0)
{
DataGView_Person.DataSource = pm.GetAllPerson();
}
else
{
DataGView_Person.DataSource = pm.GetAllPerson(true);
}
}
}
}
目前UL层已经全部设计完毕了。
六
编辑BLL:(业务逻辑层)
在解决方案中,右键新建项目
新建一个类库名称为BLL
在新建的类库中添加两个类AdminManager.cs、PersonManager.cs
AdminManager.cs的代码为
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLL
{
public class AdminManager
{
DAL.AdminService ads = new DAL.AdminService();
//登陆的方法
public bool Login(string userName, string password) {
return ads.Login(userName,password) > 0;
}
//获得管理员对象的方法
public MODEL.Admin GetAdmin(string userName, string password)
{
return ads.GetAdmin(userName, password);
}
//注册的方法
public bool Register(MODEL.Admin admin)
{
return ads.Register(admin) > 0;
}
//用户名判存的方法
public bool ExistUserName(String userName)
{
return ads.ExistUserName(userName) > 0;
}
}
}
PersonManager.cs的代码为
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLL
{
public class PersonManager
{
DAL.PersonService ps = new DAL.PersonService();
//获取所有员工的方法
public List<MODEL.Person> GetAllPerson(bool isDel = false)
{
return ps.GetAllPerson(isDel);
}
}
}
目前BLL层已经全部设计完毕了。
七
建立DAL的类库同理第二步
AdminService中的代码为
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
//数据层
namespace DAL
{
public class AdminService
{
//登陆的方法
public int Login(string userName, string password)
{
//SQL语句
//count函数是获取结果的行数
string sql = "Select count(*) From Admin Where UserName=@username and Passsword=@password";
//SQL参数
SqlParameter[] ps = new SqlParameter[]
{
new SqlParameter("username",userName),
new SqlParameter("password",password)
};
//执行SQL语句
return SqlHelper.ExecuteScalaer(sql, ps);
}
/* public void GerAdmin(string userName, string password)
{
//SQL语句
string sql = "Select conn(*) From Admin Where UserName=@username and Passsword=@password";
//SQL参数
SqlParameter[] ps = new SqlParameter[]
{
new SqlParameter("username",userName),
new SqlParameter("password",password)
};
//调用SQLHeloer中获取数据库中详细信息的方法
DataTable dt = SqlHelper.ExecuteTable(sql, ps);
}*/
//获取管理员的详细信息
public MODEL.Admin GetAdmin(string userName, string password)
{
//SQL语句
string sql = "Select * From Admin Where UserName=@username and Password=@password";
//SQL参数
SqlParameter[] ps = new SqlParameter[]
{
new SqlParameter("username",userName),
new SqlParameter("password",password)
};
//调用SQLHeloer中获取数据库中详细信息的方法
DataTable dt = SqlHelper.ExecuteTable(sql, ps);
//
if (dt.Rows.Count == 0)
return null;
MODEL.Admin admin = RowDataToAdminObj(dt.Rows[0]);
//
return admin;
}
//将数据库的详细信息转换成类的对象的数据
MODEL.Admin RowDataToAdminObj(DataRow row)
{
//先创建一个管理员对象
MODEL.Admin admin = new MODEL.Admin();
//然后再将数据库的一行中的每个数据一个一个的进行转换
admin.PersonID = row["PersonID"].ToString().Trim();
admin.PersonName = row["PersonName"].ToString().Trim();
admin.UserName = row["UserName"].ToString().Trim();
admin.Password = row["Password"].ToString().Trim();
admin.Email = row["Email"].ToString().Trim();
admin.IsSuperAdmin = row["IsSuperAdmin"].ToString().Trim();
//返回管理员对象
return admin;
}
//注册
public int Register(MODEL.Admin admin) {
string sql="Insert Into Admin Values(@personName,@userName,@password,@email,@isSuperAdmin)";
SqlParameter[] ps=new SqlParameter[]{
new SqlParameter("personName",admin.PersonName),
new SqlParameter("userName",admin.UserName),
new SqlParameter("password",admin.Password),
new SqlParameter("email",admin.Email),
new SqlParameter("isSuperAdmin",admin.IsSuperAdmin)
};
return SqlHelper.ExecuteNonQuery(sql,ps);
}
//用户名判存的方法
public int ExistUserName(string userName)
{
string sql = "Select count(*) From Admin Where UserName=@username";
SqlParameter[] ps=new SqlParameter[]{
new SqlParameter("username",userName)
};
return SqlHelper.ExecuteScalaer(sql,ps);
}
}
}
PersonService.cs中的代码为
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace DAL
{
public class PersonService
{
//获得所有在职的员工信息
public List<MODEL.Person> GetAllPerson(bool isDel = false)
{
//编写查询所有在职员工信息的sql命令
string sql = "Select * From Person Where IsDel = @isDel";
//SQL参数
SqlParameter[] ps=new SqlParameter[]{
new SqlParameter("isDel",isDel)
};
//获取带有所以员工信息的数据表
DataTable dt = SqlHelper.ExecuteTable(sql,ps);
//判断数据表是否有数据
if (dt.Rows.Count == 0)
return null;
//遍历数据表的每一行,将每一行的员工数据转换成员工对象
List<MODEL.Person> personList = new List<MODEL.Person>();
for (int i = 0; i < dt.Rows.Count;i++)
{
MODEL.Person person = RowDataToPersonObj(dt.Rows[i]);
personList.Add(person);
}
//返回员工列表
return personList;
}
//将行数据转换成员工对象的方法
MODEL.Person RowDataToPersonObj(DataRow row)
{
//先创建一个员工对象
MODEL.Person person = new MODEL.Person();
//然后再将数据库的一行中的每个数据一个一个的进行转换
person.PersonID = row["PersonID"].ToString().Trim();
person.PersonName = row["PersonName"].ToString().Trim();
person.Gender = row["Gender"].ToString().Trim();
person.Age = int.Parse(row["Age"].ToString().Trim());
person.Adress = row["Adress"].ToString().Trim();
person.PhoneNum = row["PhoneNum"].ToString().Trim();
person.DepartmentName = row["DepartmentName"].ToString().Trim();
person.IsDel = (bool)row["IsDel"];
person.IdNum = row["IdNum"].ToString().Trim();
//返回员工对象
return person;
}
}
}
SqlHelper.cs中的代码为
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace DAL
{
//数据库帮助类
public class SqlHelper
{
//数据库链接字符串
static readonly string connStr = "Data Source=legion拯救者;Initial Catalog=PersonDataBase;Integrated Security=True"; //这里输入的是你链接数据库链接的名字
public static int ExecuteScalaer(string sql, params SqlParameter[] ps)
{
//新建一个数据库渠道
using (SqlConnection conn = new SqlConnection(connStr))
{
//打开数据库渠道
conn.Open();
//实例化数据库命令对象
SqlCommand command = new SqlCommand(sql, conn);
//添加参数
command.Parameters.AddRange(ps);
//执行数据库语句
return (int)command.ExecuteScalar();
}
}
public static DataTable ExecuteTable(string sql, params SqlParameter[] ps)
{
//
SqlDataAdapter da = new SqlDataAdapter(sql, connStr);
//
da.SelectCommand.Parameters.AddRange(ps);
//
DataTable dt = new DataTable();
//
da.Fill(dt);
return dt;
}
public static int ExecuteNonQuery(string sql, params SqlParameter[] ps)
{
//新建一个数据库渠道
using (SqlConnection conn = new SqlConnection(connStr))
{
//打开数据库渠道
conn.Open();
//实例化数据库命令对象
SqlCommand command = new SqlCommand(sql, conn);
//添加参数
command.Parameters.AddRange(ps);
//执行数据库语句
return (int)command.ExecuteNonQuery();
}
}
}
}
注意注意
其中
这串代码需要注意前面的legion拯救者要和你当初的数据库名字一样,就是最开始连接数据库的那一步
static readonly string connStr = "Data Source=legion拯救者;Initial Catalog=PersonDataBase;Integrated Security=True";
八
建立MODEL层的类库同理
Admin中的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MODEL
{
public class Admin
{
//声明了管理员的字段(类的成员变量)
//属性,封装字段的手段 快捷键 Ctrl+R Ctrl+E
string personID;
public string PersonID
{
get { return personID; }
set { personID = value; }
}
string personName;
public string PersonName
{
get { return personName; }
set { personName = value; }
}
string userName;
public string UserName
{
get { return userName; }
set { userName = value; }
}
string password;
public string Password
{
get { return password; }
set { password = value; }
}
string email;
public string Email
{
get { return email; }
set { email = value; }
}
string isSuperAdmin;
public string IsSuperAdmin
{
get { return isSuperAdmin; }
set { isSuperAdmin = value; }
}
}
}
Person中的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MODEL
{
public class Person
{
string personID;
public string PersonID
{
get { return personID; }
set { personID = value; }
}
string personName;
public string PersonName
{
get { return personName; }
set { personName = value; }
}
string gender;
public string Gender
{
get { return gender; }
set { gender = value; }
}
int age;
public int Age
{
get { return age; }
set { age = value; }
}
string adress;
public string Adress
{
get { return adress; }
set { adress = value; }
}
string phoneNum;
public string PhoneNum
{
get { return phoneNum; }
set { phoneNum = value; }
}
string departmentName;
public string DepartmentName
{
get { return departmentName; }
set { departmentName = value; }
}
bool isDel;
public bool IsDel
{
get { return isDel; }
set { isDel = value; }
}
string idNum;
public string IdNum
{
get { return idNum; }
set { idNum = value; }
}
}
}
以上就全部设计完成了
最后要将这些数据层互相引用
右键BLL
同理DAL
MODEL
UL
最后一步将Microsoft Visual Studio连接至数据库
名字一定要是一样的,然后选择我们最开始创建的PersonDataBase数据库就完成了。
最后我们就可以在Microsoft Visual Studio中看到我们的数据库了
版权归原作者 Ant_Tri 所有, 如有侵权,请联系我们删除。