C#_会员管理系统:开发八(权限分配)
数据库设计
这里由于增加了普通用户权限值,我们需要对数据库结构稍作修改.这里在MovieAccount表中增加4列内容 分别用于
RightFManager 判断普通用户管理界面权限 RightFRegistration 判断普通用户注册权限
RightFPwdChange 判断普通用户密码修改权限 RightFLog 判断普通用户日志查询权限
详细数据库语句:
use Vip
select * from VipAccount
alter table VipAccount add RightFManager int null
alter table VipAccount add RightFRegistration int null
alter table VipAccount add RightFPwdChange int null
alter table VipAccount add RightFLog int null
登录窗体(VIPLogin.cs)代码修改,详细代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient; namespace 会员管理系统
{
public partial class VIPLogin : Form
{
public VIPLogin()
{
InitializeComponent();
}
//用于连接配置文件App.config
string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
//定义一个全局变量 Uid;
//用于获取登录成功后的用户名
public static string uid;
//定义一个全局变量 time;
//用于获取用户登录时的时间
public static DateTime time;
//定义一个全局变量situation
//用于获取用户的登录状态
public static string situation;
//定义一个全局变量UserType
//用于获取用户权限
public static string UserType;
//定义一个全局变量 数组FRight 来获取登录成功的普通用户功能权限
public static int[] FRight; //登录按钮
private void btnLogin_Click(object sender, EventArgs e)
{
//连接数据库语句
using(SqlConnection con=new SqlConnection(connStr))
{
//操作数据库语句
string sql = "select vuserpwd,usertype,RightFManager,RightFRegistration,RightFPwdChange,RightFLog from vipaccount where vUserName='" + txtName.Text + "'";
using(SqlCommand cmd=new SqlCommand(sql,con))
{
//打开数据库
con.Open();
//使用 SqlDataReader 来 读取数据库
using (SqlDataReader sdr = cmd.ExecuteReader())
{
//SqlDataReader 在数据库中为 从第1条数据开始 一条一条往下读
if (sdr.Read()) //如果读取账户成功(文本框中的用户名在数据库中存在)
{
//则将第1条 密码 赋给 字符串pwd ,并且依次往后读取 所有的密码
//Trim()方法为移除字符串前后的空白
string pwd = sdr.GetString().Trim();
//读取器sdr获取了2列数据 第1列为密码 第2列 即索引为1的是用户类型
string uType = sdr.GetString().Trim() ;
//如果 文本框中输入的密码 ==数据库中的密码
if (pwd == txtPwd.Text)
{
uid = txtName.Text;
time = DateTime.Now;
situation = "登录";
//将登录成功的用户类型 赋给全局变量UserType
//用于获取当前登录 用户的类型
UserType = uType;
/************用户登录成功后 对用户类型进行判断********************/ //用户功能权限索引i 对应的数据读取器sdr里的索引是 是 i+2
//FRight[0] = sdr.GetInt32(2); //RightFManager
//FRight[1] = sdr.GetInt32(3); //RightFRegistration
//FRight[2] = sdr.GetInt32(4); //RightFPwdChange
//FRight[3] = sdr.GetInt32(5); //RightFLog //如果用户为普通用户 则检查 其功能权限 管理员不被检查
if (UserType == "NormalUser")
{
FRight = new int[];
for (int i = ; i < FRight.Length; i++)
{
//如果数据读取器中读到数据库中的权限值为0
if (sdr.GetInt32(i + ) == )
{
//则赋给全局变量0 说明该功能被禁用
FRight[i] = ;
}
//如果 为1
else if (sdr.GetInt32(i + ) == )
{
//赋给全局变量1 该功能可用
FRight[i] = ;
}
else
{
//否则默认为0 该功能不可用
FRight[i] = ;
}
}
}
//说明在该账户下 密码正确, 系统登录成功
MessageBox.Show("登录成功,正在进入主界面......");
//***************新增代码***************
VIPLog vl = new VIPLog();
//添加当前的用户信息到日志中
vl.AddMsg();
//退出程序
//创建新的会员资料管理界面窗体并显示,同时把登录界面隐藏
//VIPManager vm=new VIPManager();
VIPMain vmain = new VIPMain();
vmain.Show();
this.Hide();
//***************新增代码***************
}
else
{
//密码错误
MessageBox.Show("密码错误,请重新输入");
txtPwd.Text = "";
}
}
else
{
//用户名错误
MessageBox.Show("用户名错误,请重新输入!");
txtName.Text = "";
}
}
}
}
} //设置快捷键
private void VIPLogin_KeyDown(object sender, KeyEventArgs e)
{
//如果按下ESC键
if (e.KeyCode == Keys.Escape)
{
//关闭窗体
this.Close();
}
//如果按下F5键
else if (e.KeyCode == Keys.F5)
{
//调用登录按钮单击事件
this.btnLogin_Click(null,null);
}
} //关闭
private void btnClose_Click(object sender, EventArgs e)
{
//彻底的退出
System.Environment.Exit();
} //当登录窗体为活动窗体时
private void VIPLogin_Activated(object sender, EventArgs e)
{
//设置文本框txtName获得焦点
txtName.Focus();
} //获取文本框txtName的快捷键
private void txtName_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
txtPwd.Focus();
txtPwd.SelectAll();
}
} //获取文本框txtPwd的快捷键
private void txtPwd_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnLogin_Click(null, null);
}
}
}
}
主界面(VIPMain.cs)代码修改,详细如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 会员管理系统
{
public partial class VIPMain : Form
{
public VIPMain()
{
InitializeComponent();
//窗体加载的时候 自动获取 并判断普通用户的功能权限 //当用户为普通用户的时候 需要判断下其功能权限 管理员不接受检查
if (VIPLogin.UserType=="NormalUser")
{
//对应的功能权限为1的时候 本功能开放
if (VIPLogin.FRight[] == )
{
btnVIPManager.Enabled = true;
}
//否则 禁用本功能
else
{
btnVIPManager.Enabled = false;
}
//对应的功能权限为1的时候 本功能开放
if (VIPLogin.FRight[] == )
{
btnRegistration.Enabled = true;
}
//否则 禁用本功能
else
{
btnRegistration.Enabled = false;
}
//对应的功能权限为1的时候 本功能开放
if (VIPLogin.FRight[] == )
{
btnPwdChange.Enabled = true;
}
//否则 禁用本功能
else
{
btnPwdChange.Enabled = false;
}
//对应的功能权限为1的时候 本功能开放
if (VIPLogin.FRight[] == )
{
btnLog.Enabled = true;
}
//否则 禁用本功能
else
{
btnLog.Enabled = false;
}
}
} private void btnVIPManager_Click(object sender, EventArgs e)
{
VIPManager vm = new VIPManager();
vm.Show();
this.Hide();
} private void btnVIPLogin_Click(object sender, EventArgs e)
{
VIPLog vipl = new VIPLog();
vipl.GetExitTime();
vipl.AddMsg();
VIPLogin vp = new VIPLogin();
vp.Show();
this.Hide();
} private void btnClose_Click(object sender, EventArgs e)
{
VIPLog vipl = new VIPLog();
vipl.GetExitTime();
vipl.AddMsg();
//彻底的退出
System.Environment.Exit();
} private void btnPwdChange_Click(object sender, EventArgs e)
{
VIPPwdChange vpc = new VIPPwdChange();
vpc.Show();
this.Hide();
} private void VIPMain_Load(object sender, EventArgs e)
{
lblCurrentUser.Text = "当前登录用户为:"+VIPLogin.uid+ " 用户类型:" + VIPLogin.UserType + " 登录时间为:"+VIPLogin.time;
//给当前用户打招呼
//这里通过获取当前用户电脑上的时间 以及判断登录用户的类型 来给不同类型的用户打招呼
// 定义整型变量 intTime 来获取 用户电脑上的具体小时数 然后在如下进行判断
int inttime = VIPLogin.time.Hour;
//获取VIPLogin窗体的全局变量 UserType 用户类型, 用于给不同类型的用户打招呼
string uType = VIPLogin.UserType;
//在凌晨0-6点的时候
if (inttime >= && inttime < )
{
if (uType == "Administrator")
{
lblSayHi.Text = "尊敬的"+ VIPLogin.uid + "您好,现在已夜深,请注意休息!";
}
else if (uType == "NormalUser")
{
lblSayHi.Text = "亲爱的" + VIPLogin.uid + "您好,现在已夜深,请注意休息!";
}
}
//早上6点-中午12点的时候
else if (inttime >= && inttime < )
{
if (uType == "Administrator")
{
lblSayHi.Text = "尊敬的" + VIPLogin.uid + "早上好!";
}
else if (uType == "NormalUser")
{
lblSayHi.Text = "亲爱的" + VIPLogin.uid + "早上好!";
}
}
//中午12点-下午6点的时候
else if (inttime >= && inttime < )
{
if (uType == "Administrator")
{
lblSayHi.Text = "尊敬的" + VIPLogin.uid + "下午好!";
}
else if (uType == "NormalUser")
{
lblSayHi.Text = "亲爱的" + VIPLogin.uid + "下午好!";
}
}
//晚上
else if (inttime >= && inttime < )
{
if (uType == "Administrator")
{
lblSayHi.Text = "尊敬的" + VIPLogin.uid + "晚上好!";
}
else if (uType == "NormalUser")
{
lblSayHi.Text = "亲爱的" + VIPLogin.uid + "晚上好!";
}
}
//否则 默认为
else
{
lblSayHi.Text = "欢迎使用会员管理系统!";
}
////判断用户类型 并给用户设置功能权限
//if (uType == "NormalUser")
//{
// btnRegistration.Enabled = false;
// btnLog.Enabled = false;
//}
} private void btnLog_Click(object sender, EventArgs e)
{
VIPLog vl=new VIPLog();
vl.Show();
this.Hide();
} private void btnRegistration_Click(object sender, EventArgs e)
{
VIPRegistration vrn = new VIPRegistration();
vrn.Show();
this.Hide();
} private void btnVIPUserManger_Click(object sender, EventArgs e)
{
VIPUserManger vum = new VIPUserManger();
vum.Show();
this.Hide();
}
}
}
用户权限功能判断成功之后,我们便要开始写管理员给普通用户分配权限的功能,我们新建一个普通用户管理窗体VIPUserManger.cs(该功能仅限于管理员使用).
窗体设计如下:
详细代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration; namespace 会员管理系统
{
public partial class VIPUserManger : Form
{
public VIPUserManger()
{
InitializeComponent();
}
//定义私有变量-功能权限值 用于获取 radiobutton 被check后的返回值
private int rightFManager = ;
private int rightFRegistration = ;
private int rightFPwdChange = ;
private int rightFLog = ; //strType 用于获取 当前DataGridView 被点中行的用户类型
private string strUType = ""; //经常会调用的数据库语句,放出来方便使用
string connstr = ConfigurationManager.ConnectionStrings["str"].ConnectionString; private void ViewAllUsers()
{
//string connstr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
SqlConnection conn = new SqlConnection(connstr);
string sql = "select * from VipAccount";
SqlCommand cmd = new SqlCommand(sql,conn);
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
dgvUserManger.DataSource = dt;
} private void VIPUserManger_Load(object sender, EventArgs e)
{
//为cboUserType下拉框添加可选值
cboUserType.Items.AddRange(new string[] { "NormalUser", "Administrator" });
//刷新dgvUserManger数据界面
ViewAllUsers();
} private void btnBack_Click(object sender, EventArgs e)
{
VIPMain vm = new VIPMain();
vm.Show();
this.Hide();
} private void btnClose_Click(object sender, EventArgs e)
{
Application.Exit();
} private void dgvUserManger_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//点中DataGridView后,将当前行内容传递给文本框 便于在文本框中修改
txtUserName.Text = dgvUserManger.Rows[e.RowIndex].Cells["vusername"].Value.ToString();
txtPwd.Text = dgvUserManger.Rows[e.RowIndex].Cells["vuserpwd"].Value.ToString();
cboUserType.Text = dgvUserManger.Rows[e.RowIndex].Cells["usertype"].Value.ToString(); //获取用户类型
strUType = cboUserType.Text.Trim();
/************************************************************************************/
//每次点击 DataGridView新的行之前 都要把前一次点击行的 CheckBox 状态调整为系统默认状态 全未选中 并且都可选
//比如 如果之前 点了NormalUser 再点Administer 会保留之前NormalUser的选择项 这里我们需要清空
chkManager.Checked = false;
chkRegistration.Checked = false;
chkPwdChange.Checked = false;
chkLog.Checked = false; txtUserName.Enabled = true;
txtPwd.Enabled = true;
cboUserType.Enabled = true;
chkManager.Enabled = true;
chkRegistration.Enabled = true;
chkPwdChange.Enabled = true;
chkLog.Enabled = true; if (strUType == "NormalUser")
{
//获取当前DataGridView被点中行内容中的用户权限值
rightFManager = Convert.ToInt32(dgvUserManger.Rows[e.RowIndex].Cells["RightFManager"].Value);
rightFRegistration = Convert.ToInt32(dgvUserManger.Rows[e.RowIndex].Cells["RightFRegistration"].Value);
rightFPwdChange = Convert.ToInt32(dgvUserManger.Rows[e.RowIndex].Cells["RightFPwdChange"].Value);
rightFLog = Convert.ToInt32(dgvUserManger.Rows[e.RowIndex].Cells["RightFLog"].Value); //同时判断获取的权限值 并相应的选中Checkbox
if (rightFManager == )
chkManager.Checked = true;
else
chkManager.Checked = false;
if (rightFRegistration == )
chkRegistration.Checked = true;
else
chkRegistration.Checked = false;
if (rightFPwdChange == )
chkPwdChange.Checked = true;
else
chkPwdChange.Checked = false;
if (rightFLog == )
chkLog.Checked = true;
else
chkLog.Checked = false;
}
//当用户类型为管理员的时候,将所有的CheckBox禁用, 管理员功能权限不允许设置
else if (strUType == "Administrator")
{
chkManager.Enabled = false;
chkPwdChange.Enabled = false;
chkRegistration.Enabled = false;
chkLog.Enabled = false; txtUserName.Enabled = false;
txtPwd.Enabled = false;
cboUserType.Enabled = false;
}
} //查询用户信息
private void txtUserQuery_TextChanged(object sender, EventArgs e)
{
string sql = ""; if (txtUserQuery.Text.Trim() == "")
{
//执行查询语句
sql = "select * from VipAccount";
}
else
{
//全局搜索 (通过用户ID 用户名和 用户类型进行模糊查找)
sql = "select * from VipAccount where(vId like'%" + txtUserQuery.Text.Trim() + "%')or(vUserName like'%" + txtUserQuery.Text.Trim() + "%')or(UserType like'%" + txtUserQuery.Text.Trim() + "%')";
}
SqlConnection conn = new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand(sql, conn);
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
dgvUserManger.DataSource = dt; } //调用查看所有用户的方法来刷新当前 DataGridView的内容
private void btnView_Click(object sender, EventArgs e)
{
//点击 "查看所有" 按钮 调用 ViewAllUsers 方法 刷新 并查当前看所有用户
ViewAllUsers();
} //添加用户
private void btnAdd_Click(object sender, EventArgs e)
{
//判断插入的数据是否为空,如果为空,则提示重新插入!
if (txtUserName.Text.Trim() == "" || txtPwd.Text.Trim() == "" || cboUserType.Text == "")
{
MessageBox.Show("插入数据不能为空,请按要求插入数据!");
return;
}
if (cboUserType.Text == "Administrator")
{
MessageBox.Show("暂不开放注册管理员功能!");
return;
} //使用SQL插入数据语句
string sql = "insert into VipAccount(vUserName,vUserPwd,UserType,RightFManager,RightFRegistration,RightFPwdChange,RightFLog) values (@vUserName,@vUserPwd,@UserType,@RightFManager,@RightFRegistration,@RightFPwdChange,@RightFLog)"; //判断 哪些CheckBox 被选中
JudgeChecked(); //向数据库插入参数
SqlParameter[] param ={
new SqlParameter("@vUserName",txtUserName.Text.Trim()),
new SqlParameter("@vUserPwd",txtPwd.Text.Trim()),
new SqlParameter("@UserType",cboUserType.Text.Trim()),
new SqlParameter("@RightFManager",rightFManager),
new SqlParameter("@RightFRegistration",rightFRegistration),
new SqlParameter("@RightFPwdChange",rightFPwdChange),
new SqlParameter("@RightFLog",rightFLog) }; SqlConnection conn = new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand(sql,conn);
conn.Open();
cmd.Parameters.AddRange(param);
int n = cmd.ExecuteNonQuery();
conn.Close(); if (n > )
{
MessageBox.Show("数据插入成功!");
}
else
{
MessageBox.Show("插入失败!");
return;
} //调用ViewAllUsers 方法 用于刷新 在添加完成数据后 自动刷新数据
ViewAllUsers();
}
//判断CheckBox是否被点重或是取消, 用于更新和修改用户权限
private void JudgeChecked()
{
//当相应的功能权限 checkbox 被点中 或者取消 将分别赋值 并传给相应的私有变量 用于数据库添加,更新等操作
if (chkManager.Checked == true)
rightFManager = ;
else
rightFManager = ;
if (chkRegistration.Checked == true)
rightFRegistration = ;
else
rightFRegistration = ;
if (chkPwdChange.Checked == true)
rightFPwdChange = ;
else
rightFPwdChange = ;
if (chkLog.Checked == true)
rightFLog = ;
else
rightFLog = ;
} //保存修改的信息
private void btnSave_Click(object sender, EventArgs e)
{
//在对数据进行修改之前 对文本框的内容做一下检查 是否用户已经输入内容, 如果为空 则提示重新输入
if (txtUserName.Text.Trim() == "" || txtPwd.Text.Trim() == "" || cboUserType.Text.Trim() == "")
{
MessageBox.Show("文本框的输入不能为空!");
return;
}
if (cboUserType.Text == "Administrator")
{
MessageBox.Show("暂不开放注册管理员功能!");
return;
} //判断 哪些CheckBox 被选中
JudgeChecked(); //使用SQL update 更新语句
//获取文本框 和ComboBox 输入的内容, 通过用户的ID(vId) 进行更新(ID为当前鼠标点击行的vId)
string sqlUpdate = "update VipAccount set vUserName = @vUserName, vUserPwd = @vUserPwd,UserType=@UserType,RightFManager=@RightFManager,RightFRegistration=@RightFRegistration,RightFPwdChange=@RightFPwdChange,RightFLog=@RightFLog where vId=@vId"; SqlParameter[] param ={
new SqlParameter("@vUserName",txtUserName.Text.Trim()),
new SqlParameter("@vUserPwd",txtPwd.Text.Trim()),
new SqlParameter("@UserType",cboUserType.Text.Trim()),
new SqlParameter("@RightFManager",rightFManager),
new SqlParameter("@RightFRegistration",rightFRegistration),
new SqlParameter("@RightFPwdChange",rightFPwdChange),
new SqlParameter("@RightFLog",rightFLog),
new SqlParameter("@vId",dgvUserManger.CurrentRow.Cells[].Value),
};
SqlConnection conn = new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand(sqlUpdate, conn);
conn.Open();
cmd.Parameters.AddRange(param);
int n = cmd.ExecuteNonQuery();
conn.Close(); //判定 如果n=0,则说明没有获取到数据,ExecuteNonQuery执行不成功
if (n == )
{
//提示更新失败
MessageBox.Show("更新失败!");
return;// 并且返回
}
else
{
//否则更新成功
MessageBox.Show("恭喜你!更新成功!");
} //保存完以后 调用刷新方法,将更新后的数据 显示在datagridview上面
ViewAllUsers();
} //删除DataGridView里 选中的用户
private void btnDelete_Click(object sender, EventArgs e)
{
//使用sql删除语句
string sqlDelete = null;
//如果datagridview的当前行被选中
if (dgvUserManger.CurrentRow.Selected)
{
//获取当前点中行的vID 并且 将当前行的vID号 赋给SQL 语句
sqlDelete = "delete from VipAccount where vId=@vId";
} SqlParameter[] param = {
new SqlParameter("@vId",Convert.ToInt32(dgvUserManger.CurrentRow.Cells[].Value))
};
SqlConnection conn = new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand(sqlDelete, conn);
conn.Open();
cmd.Parameters.AddRange(param);
int n = cmd.ExecuteNonQuery();
conn.Close();
//如果n>0 说明删除数据成功
if (n > )
{
MessageBox.Show("删除成功!");
}
else //否则失败
{
MessageBox.Show("不存在的ID!");
}
//删除完后 刷新一下当前数据
ViewAllUsers();
}
}
}
最后,由于在数据库中新增了几列普通用户功能权限的字段,我们的用户注册窗体也需要稍作修改(这里普通用户注册是默认禁用其所有功能权限,需要管理员在普通用户管理窗体赋予其相应的功能权限).
详细代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration; namespace 会员管理系统
{
public partial class VIPRegistration : Form
{
public VIPRegistration()
{
InitializeComponent();
} //提交按钮
private void btnOK_Click(object sender, EventArgs e)
{ string connstr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
SqlConnection conn = new SqlConnection(connstr);
string sql = string.Format("select vusername from VipAccount where vUserName='{0}' ", txtName.Text);
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader sda = cmd.ExecuteReader(); //new一个 uType 来获取 radiobutton 点击事件下 触发的用户类型赋值
string uType = ""; int rightFManager = ;
int rightFRegistration = ;
int rightFPwdChange = ;
int rightFLog = ; if (rdoAdministrator.Checked)
{
uType = "Administrator";
rightFManager = ;
rightFRegistration = ;
rightFPwdChange = ;
rightFLog = ;
}
else if (rdoNormalUser.Checked)
{
uType = "NormalUser";
}
else
{
uType = "NormalUser";
} //---------------------------
if (txtName.Text.Trim() == "")
{
lblName.Text = "用户名不能为空";
return;
}
else if (txtPwd.Text.Trim() == "" || txtPwdConfirm.Text.Trim() == "")
{
lblPwd.Text = "密码不能为空";
return;
}
else if (txtPwdConfirm.Text.Trim() != txtPwd.Text.Trim())
{
lblPwdConfirm.Text = "两次密码输入不同,请确认后再输";
return;
}
else if (sda.Read())
{
lblName.Text = "用户名已存在,请重新输入";
return;
}
else
{
conn.Close();
SqlConnection conninsert = new SqlConnection(connstr);
//string insertsql = string.Format("insert into VipAccount(vUserName,vUserPwd) values('{0}','{1}')",txtName.Text,txtPwd.Text);
string insertsql = "insert into VipAccount(vUserName,vUserPwd,UserType,RightFManager,RightFRegistration,RightFPwdChange,RightFLog) values(@vUserName,@vUserPwd,@UserType,@RightFManager,@RightFRegistration,@RightFPwdChange,@RightFLog) ";
//使用1个SQL参数数组 来装载 需要插入的数据
SqlParameter[] param = {
new SqlParameter("@vUserName",txtName.Text),
new SqlParameter("@vUserPwd",txtPwd.Text),
new SqlParameter("@UserType",uType),
new SqlParameter("@RightFManager",rightFManager),
new SqlParameter("@RightFRegistration",rightFRegistration),
new SqlParameter("@RightFPwdChange",rightFPwdChange),
new SqlParameter("@RightFLog",rightFLog)
}; SqlCommand cmdinsert = new SqlCommand(insertsql, conninsert);
conninsert.Open();
cmdinsert.Parameters.AddRange(param);
int n = cmdinsert.ExecuteNonQuery();
if (n == )
{
MessageBox.Show("注册失败,请重新输入");
}
else
{
MessageBox.Show("注册成功");
}
conninsert.Close(); }
//conn.Close();
} //返回主菜单
private void btnBack_Click(object sender, EventArgs e)
{
VIPMain vm = new VIPMain();
vm.Show();
this.Hide();
} private void VIPRegistration_Load(object sender, EventArgs e)
{
lblName.Text = "";
lblPwd.Text = "";
lblPwdConfirm.Text = "";
} }
}
附上源代码:
C#_会员管理系统:开发八(权限分配)的更多相关文章
- C#_会员管理系统:开发七(用户分类)
登录界面(VIPLogin.cs)详细代码: using System; using System.Collections.Generic; using System.ComponentModel; ...
- C#_会员管理系统:开发六(数据搜索)
增加界面中的搜索功能 会员资料管理界面(VIPManager.cs): 详细代码如下: using System; using System.Collections.Generic; using Sy ...
- C#_会员管理系统:开发四(日志查看)
新建一个日志查看窗体: 日志需要的登录时间和登录状态信息由用户刚登录程序时就提供,所以在登录窗体(VIPLogin.cs)中添加代码: //定义一个全局变量 Uid; //用于获取登录成功后的用户名 ...
- C#_会员管理系统:开发一(用户登录)
首先创建数据库: [Vip] 创建三张表: 分别是: [VipInformation](会员信息) [Log](日志) [VipAccount](账户权限) 详细语句: --创建数据库[Vip] cr ...
- C#_会员管理系统:开发五(用户注册)
创建一个新的用户注册窗体(VIPRegistration.cs): 用户注册窗体(VIPRegistration.cs)详细代码如下: using System; using System.Colle ...
- C#_会员管理系统:开发三(修改密码)
为以后多个功能界面考虑,新增一个主界面: 主界面如下: 主界面(VIPMain.cs)详细代码如下: using System; using System.Collections.Generic; u ...
- C#_会员管理系统:开发二(会员资料管理界面的‘增删改查’)
会员资料管理界面: 新建一个窗体,窗体界面和控件如下: 窗体中的控件dgvManager更改FullRowSelect属性(点击选中效果)为:FullRowSelect 会员资料管理界面窗体的详细代码 ...
- C#_会员管理系统
https://www.cnblogs.com/start-from-scratch/p/5420588.html
- SpringSecurity权限管理系统实战—八、AOP 记录用户、异常日志
目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...
随机推荐
- JSTL与EL常用标签(转)
JSTL与EL EL相关概念 JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程 ...
- [Java]编写自己的Matrix矩阵类
用java实现一个简单的矩阵类,可以实现简单的矩阵计算功能. class Matrix 1.向量点乘 public static double dot(double[] x,double[] y) 2 ...
- 《Pointers On C》读书笔记(第五章 操作符和表达式)
1.C语言操作符优先级表 2.算术操作符中%(取模操作符)只适用于整型类型,其余几个操作符(+.-.*./)既适用于整型类型也适用于浮点类型.当/操作符的两个操作数都是整型时,它执行整除运算,其它情况 ...
- Codeforces 430B Balls Game(Two Pointers)
[题目链接] http://codeforces.com/contest/430/problem/B [题目大意] 祖玛游戏,给出一个序列,表示祖玛球的颜色序列,三个或者以上的球碰在一起就会发生消除, ...
- cocos2d-x Touch 事件应用的一个例子
1效果图: 这个是<Cocos2d-X by Example Beginner's Guide>上的第一个例子,我稍微重构了下代码.是一个简单的IPad上的双人游戏,把球射入对方的球门就得 ...
- 基于Proxy思想的Android插件框架
意义 研究插件框架的意义在于下面几点: 减小安装包的体积,通过网络选择性地进行插件下发 模块化升级.减小网络流量 静默升级,用户无感知情况下进行升级 解决低版本号机型方法数超限导致无法安装的问题 代码 ...
- C# 对象拷贝问题 =等同于浅拷贝
大家都知道,在C#中变量的存储分为值类型和引用类型两种,而值类型和引用类型在数值变化是产生的后果是不一样的,值类型我们可以轻松实现数值的拷贝,那么引用类型呢,在对象拷贝上存在着一定的难度. 下 ...
- iOS网络请求基础
这篇是关于网络请求的,结合公司的实际情况编写,如果有不同意见欢迎留言共同讨论. iOS在9.0之后彻底放弃了NSURLConnection,现在已经改用了NSURLSession进行网络请求.一般现在 ...
- 关于TableViewCell高度自适应问题的整理
TableViewCell高度自适应在网上有很多资料,我只想找出最最最简单的一种方法. 首先梳理一下思路.说到TableViewCell我们第一个想到的问题或许就是cell的复用问题. 1. [se ...
- HDU2008-数值统计
描述: 统计给定的n个实数中,负数.零和正数的个数. 代码: #include<stdio.h> #include<string.h> #include<iostream ...