0%

C#简易电影记录管理系统:开发三[密码修改]

本期概述

上一期我们实现了对电影记录的数据操作(增删改查).这一期,我们一起来实现下针对用户的密码修改功能.

原理简介

原理很简单,系统获取用户输入的用户名,执行select语句从数据库中获取该用户名下的密码,再与用户输入的旧密码进行匹配,若相同则允许输入新密码,然后执行Update语句将新密码保存到数据库.

由于系统功能逐渐增多,我们需要创建一个主界面窗体,来方便使用各个功能.

新建一个窗体 name:FrmMain

img

我们在主窗体创建一个ToolStrip工具栏,用于后期功能窗体的切换.

img

然后,右键在ToolStrip上添加 Button 按钮.

img

将Button按钮的显示模式改成Text 文本显示.

img

设置完管理界面按钮后,同理设置 密码修改 返回登陆界面 直接退出 功能按钮.

ToolStrip按钮 管理界面name:tsbManager 密码修改name:tsbPwdChange 重新登录name:tsbLogin 退出系统name:tsbExit

img

主界面FrmMain.cs里的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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;

/*******************************************************

** 作者: SoFlash - 博客园 http://www.cnblogs.com/longwu

** 描述: FrmMain.cs 主窗体 用于衔接各项功能窗体

******************************************************/

namespace 电影记录管理系统
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}

private void tsbManager_Click(object sender, EventArgs e)
{
//new一个Manger窗体的对象
FrmManager manager = new FrmManager();
//转入FrmManager窗体
manager.Show();
//隐藏当前窗体
this.Hide();
}

private void tsbPwdChange_Click(object sender, EventArgs e)
{
//同理
FrmPwdChange pwdChange = new FrmPwdChange();
pwdChange.Show();
this.Hide();
}

private void tsbLogin_Click(object sender, EventArgs e)
{
//同理
FrmLogin login = new FrmLogin();
login.Show();
this.Hide();
}

private void tsbExit_Click(object sender, EventArgs e)
{
//直接退出应用程序
Application.Exit();
}

}
}

同样,由于登录成功后的跳转界面换了,所以我们需要修改下登录后跳转界面的代码.

在登录窗体类FrmLogin.cs中修改(如下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//如果 文本框中输入的密码 ==数据库中的密码
if (pwd == txtPwd.Text)
{
//获取登陆成功后的用户ID
Uid = txtName.Text;
//说明在该账户下 密码正确, 系统登录成功
MessageBox.Show("系统登录成功,正在跳转主页面...");
//FrmManager manager = new FrmManager();
//manager.Show();
//this.Hide();

FrmMain main = new FrmMain();
main.Show();
this.Hide();
}

然后,电影记录管理窗体也稍作修改, 添加一个 返回主界面 按钮.

返回主界面name: btnBack

img

代码如下

1
2
3
4
5
6
7
private void btnBack_Click(object sender, EventArgs e)
{
//返回主界面
FrmMain main = new FrmMain();
main.Show();
this.Close();
}

再增加一个直接 退出系统 按钮, name:btnExit.

img

代码如下:

1
2
3
4
5
6
//直接退出系统
private void btnExit_Click(object sender, EventArgs e)
{
//直接退出系统
Application.Exit();
}

之后 我们开始设计密码修改窗体(如下图)

窗体name: FrmPwdChange

文本框 用户名name:txtUsername 旧密码name:txtOldPwd 新密码name:txtNewPwd 再次输入新密码name:txtNewPwdConfirm

按钮 修改name:btnOK 返回name:btnBack

img

窗体创建完成我们运行看下.

img

当用户成功登录系统的以后,我们需要获取成功登录后的用户名,并将其传入到密码修改界面的用户名文本框中,为此在登录窗体类FrmLogin.cs中我们需要做一点修改

1.定义一个全局变量 Uid; 用于获取登录成功的用户名.

public static string Uid; (添加到如下代码中)

1
2
3
4
5
6
7
//首先 设置 连接到配置文件组建 App.config 
//当然 这里的 ConfigurationManager 系统是默认不使用其命名空间的 因此需要解析
string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;

//定义一个全局变量 Uid;
//用于获取登录成功后的用户名
public static string Uid;

2.在判断登录成功后,获取当前文本框中输入的用户名.

Uid = txtName.Text;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//如果 文本框中输入的密码 ==数据库中的密码
if (pwd == txtPwd.Text)
{
//获取登陆成功后的用户ID
Uid = txtName.Text;
//说明在该账户下 密码正确, 系统登录成功
MessageBox.Show("系统登录成功,正在跳转主页面...");
//FrmManager manager = new FrmManager();
//manager.Show();
//this.Hide();

FrmMain main = new FrmMain();
main.Show();
this.Hide();
}

3.在密码修改窗体FrmPwdChange加载时候,自动获取登录窗体FrmLogin的Uid属性,并赋给密码修改窗体FrmPwdChange的文本框txtUsername (代码如下)

1
2
3
4
5
6
7
8
//获取登录窗体的用户名
private void FrmPwdChange_Load(object sender, EventArgs e)
{
//获取登录窗体登录成功后的公共变量 Uid
string currentUser = FrmLogin.Uid;
//将获取的字符串 currentUser 赋给txtUsername文本框
txtUsername.Text = currentUser;
}

这样,每当我们登录成功后,跳转到密码修改窗体,用户名文本框就会直接显示我们当前登录的用户名了. :)

运行看下, 我们使用admin1帐号登录.

img

来到密码修改窗体,此时,用户名admin1 已经自动出现到了用户名所在的文本框中.

img

接下来我们实施下密码修改窗体的完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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;
using System.Configuration;

/*******************************************************

** 作者: SoFlash - 博客园 http://www.cnblogs.com/longwu

** 描述: FrmPwdChange.cs 密码修改窗体 用于管理员和普通用户修改个人密码

******************************************************/

namespace 电影记录管理系统
{
public partial class FrmPwdChange : Form
{
public FrmPwdChange()
{
InitializeComponent();
}

//连接字符串 获取配置文件里的连接路径
static string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;

//修改密码
private void btnOK_Click(object sender, EventArgs e)
{
//使用Sql连接对象获取连接字符串
SqlConnection conn = new SqlConnection(connStr);
//使用sql语句获取当前用户名下的密码
string sql = "select MUserPwd from MovieAccount where MUserName ='" + txtUsername.Text + "'";
//使用SQLcommand指令来装载SQL连接字符串和conn连接对象
SqlCommand cmd = new SqlCommand(sql, conn);
//打开conn连接
conn.Open();
//使用sql数据读取器来 获取cmd指令中的读到的数据
SqlDataReader sdr = cmd.ExecuteReader();
//如果sql数据读取器 读到了数据
if (sdr.Read())
{
//将读到的用户名下的密码赋给字符串oldPwd
string oldPwd = sdr.GetString(0).Trim();
//如果文本框中输入的密码等于从数据库中读到的字符串oldPwd
if (oldPwd == txtOldPwd.Text)
{
//如果新密码为空
if (txtNewPwd.Text.Trim()==""||txtNewPwdConfirm.Text.Trim()=="")
{
//弹出提示
MessageBox.Show("新密码确认不能为空!");
return;
}
//继续判断 如果2次新密码不相同
else if(txtNewPwd.Text.Trim() != txtNewPwdConfirm.Text.Trim())
{
//弹出提示 2次新密码不相同,请重新输入
MessageBox.Show("2次输入的新密码不一样,请重新输入!");
//新密码和再次证明密码提示框都清空
txtNewPwd.Text = "";
txtNewPwdConfirm.Text = "";
return;
}
else
{
//如果2次新密码相同,关闭SqlDataReader连接
sdr.Close();
//执行sql语句
string sqlUpdate = "update MovieAccount set MUserPwd ='" + txtNewPwdConfirm.Text +
"' where MUserName ='" + txtUsername.Text + "'";
//new一个数据库更新指令
SqlCommand cmdUp = new SqlCommand(sqlUpdate,conn);
// 如果cmdUp获取的行数为0 则说明系更新指令出现异常
if (cmdUp.ExecuteNonQuery() == 0)
{
//系统报错
MessageBox.Show("未知错误!");
return;
}
else
{
//否则 更新成功
MessageBox.Show("恭喜你!密码修改成功!");
}

}
}
else
{
//弹出提示框 旧密码不能为空或错误
MessageBox.Show("旧密码错误或者不能为空");
//旧密码,新密码,新密码验证 同时清空
txtOldPwd.Text = "";
txtNewPwd.Text = "";
txtNewPwdConfirm.Text = "";
return;
}
}
else
{
//如果没读到用户名,提示用户名不存在!
MessageBox.Show("用户名不存在,请重新输入!");
//用用户名,旧密码,新密码,新密码验证 都清空
txtUsername.Text = "";
txtOldPwd.Text = "";
txtNewPwd.Text = "";
txtNewPwdConfirm.Text = "";
return;

}
//关闭数据库连接
conn.Close();

}

//返回主窗体
private void btnBack_Click(object sender, EventArgs e)
{
//new 一个主框体的对象
FrmMain main = new FrmMain();
main.Show();
this.Close();
}
//获取登录窗体的用户名
private void FrmPwdChange_Load(object sender, EventArgs e)
{
//获取登录窗体登录成功后的公共变量 Uid
string currentUser = FrmLogin.Uid;
//将获取的字符串 currentUser 赋给txtUsername文本框
txtUsername.Text = currentUser;
}
}
}

效果测试:

首先使用admin1账户来登录系统 密码为666666

img

当我们输入错误的旧密码时,系统弹出提示”旧密码错误或者不能为空”.

img

输入正确的密码,但新密码和新密码确认为空,弹出提示”新密码不能为空”.

img

只在新密码框中输入密码, 再次输入新密码框为空,同样弹出”新密码不能为空”.

img

输入的新密码和新密码确认不一样,弹出提示”2次新密码不一样”.

img

当新密码和新密码确认相同的时候,点修改,弹出提示框”修改成功”.

img

如果需要把密码输入框设置为不可见 用*号代替

可以通过 设置文本框的 PasswordChar属性 在里面添加*号 就行了

如图

img

效果展示

img

这样电影记录管理系统的主界面和密码修改界面就完成了,下一期我们来一起学习下如何记录并查看用户的历史登录和退出情况(日志查看).

附上源代码

MovieRecordManagementSystem03.zip

转自:https://www.cnblogs.com/longwu/archive/2011/10/03/2198276.html