winform项目——仿QQ即时通讯程序10:注册、登录功能实现

编程项目2019/12/21 19:29:30阅读:905

上一篇文章分析了如何利用socket通讯,并用示例程序演示了通讯过程,那么今天我们就开始按照用户使用步骤逐渐完善CIM项目。

首先,我们打开CIM项目,熟悉一下项目目录。下图是项目列表,共有六个windows窗体。

目录结构

注册、登录等功能需要进行数据库操作,因此,我们需要封装一个操作数据库的工具类,以便更方便调用。新建一个SqlHelper.cs类,然后对目录结构进行简单的修改,如下图:

新的目录结构

接着我们在SqlHelper类中对数据库操作进行封装。将SqlHelper类中的方法全部写成静态,这样使用的时候直接用类名就可以调用,非常方便。我们根据CIM项目的实际需求进行方法的封装。因为现在还没有涉及到具体的业务逻辑,所以我们先封装两个通用的方法。

首先需要定义一个连接字符串:

public static string connectionString = "server=.;database=CIM;uid=sa;pwd=123456";

注意登录SQLServer数据库的用户名和密码,这里需要根据你的实际情况填写。

通用读取方法:

///


/// 根据sql语句读取数据
///

/// sql语句
/// sqldatareader
public static SqlDataReader ExecuteReader(string strSQL)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(strSQL, connection);
try
{
connection.Open();
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return myReader;
}
catch (SqlException e)
{
throw e;
}
}

通用执行sql语句方法,用于增、删、改:

///


/// 执行sql插入、删除、修改语句
///

///
/// 影响记录的行数
public static int ExecuteSql(string SQLString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (SqlException e)
{
connection.Close();
throw e;
}
}
}
}

目前只写这两个方法就行了。后面如果用到更复杂的再继续添加即可。

实现注册功能

封装好数据库操作类,我们开始实现注册和登录操作。

1.注册按钮的点击事件中实现新用户注册

private void btn_register_Click(object sender, EventArgs e)
{
//简单的数据验证
if(tb_nickName.Text == ""||tb_pwd1.Text == "" || tb_pwd2.Text == "")
{
MessageBox.Show("请将注册信息填写完整!");
return;
}
if(tb_pwd1.Text != tb_pwd2.Text)
{
MessageBox.Show("密码不一致!");
return;
}
//随机分配CIM账号
string register_account = getRandomAccount();
//向Users表中新增数据
int len = SqlHelper.ExecuteSql("insert into Users (Account,Password,Nickname) values

('"+register_account+"','"+tb_pwd1.Text+"','"+tb_nickName.Text+"')");
if(len > 0)
{
MessageBox.Show("注册成功!CIM账号为:"+register_account+",请牢记此账号!");
//注册成功后返回到登录界面
tb_Account.Text = register_account;
panel1.Visible = false;
}
else
{
MessageBox.Show("注册失败!请重试");
}
}
///


/// 随机生成8位账号
///

///
private string getRandomAccount()
{
int account;
//do-while循环验证生成的账号是否已经存在
//如果存在就重新随机生成
do
{
Random r = new Random(int.Parse(DateTime.Now.ToString("HHmmssfff")));
//限制生成的账号为8位数
account = r.Next(00000000, 99999999);
} while (ExitAccount(account));
return account.ToString();
}
///
/// 验证是否已经存在该账号
///

///
///
private bool ExitAccount(int account)
{
SqlDataReader sdr = SqlHelper.ExecuteReader("select * from Users where Account='"+account+"'");
if (sdr.Read())
{
sdr.Close();
return true;
}
else
{
sdr.Close();
return false;
}
}

注意代码中的TextBox控件的Name属性已经修改。可以看到,使用了SqlHelper类进行数据库操作就很简单了。

注册界面

实现登录功能

注册成功后,点击“确定”将从注册界面切换到登录界面。

1.登录按钮的点击事件

///


/// 登录按钮的点击事件
///

///
///
private void button1_Click(object sender, EventArgs e)
{
//简单的数据验证
if (tb_Account.Text == ""|| tb_pwd.Text == "")
{
MessageBox.Show("请正确填写账号和密码!");
return;
}
//判断账号是否存在
if (ExitAccount(int.Parse(tb_Account.Text))){
//判断密码是否正确
if (pwdIsOk(tb_Account.Text,tb_pwd.Text))
{
//隐藏该窗体
this.Visible = false;
//new出主界面
new Major().Show();
}
else
{
MessageBox.Show("密码不正确!");
}
}
else
{
MessageBox.Show("账号不存在");
}
}
///
/// 验证密码是否正确
///

///
///
///
private bool pwdIsOk(string account,string pwd)
{
SqlDataReader sdr = SqlHelper.ExecuteReader("select * from Users where account

='"+account+"' and password='"+pwd+"'");
if (sdr.Read())
{
sdr.Close();
return true;
}
else
{
sdr.Close();
return false;
}
}

到目前为止就可以实现注册和登录了。

登录效果

接下来实现一个记住密码的小功能。

记住密码功能实现

1.在登录成功之前,用文件记录账号和密码

if (checkBox1.Checked == true)
{
if (!File.Exists(userinfopath))
{
File.Create(userinfopath).Close();
File.WriteAllLines(userinfopath, new string[] { tb_Account.Text,tb_pwd.Text } );
}
else
{
File.Delete(userinfopath);
File.Create(userinfopath).Close();
File.WriteAllLines(userinfopath, new string[] { tb_Account.Text, tb_pwd.Text });
}
}
else
{
if (!File.Exists(userinfopath))
{
File.Create(userinfopath).Close();
File.WriteAllLines(userinfopath, new string[] { tb_Account.Text, "" });
}
else
{
File.Delete(userinfopath);
File.Create(userinfopath).Close();
File.WriteAllLines(userinfopath, new string[] { tb_Account.Text, "" });
}
}
this.Visible = false;
new Major().Show();

2.需要添加一个userinfopath字段:

string userinfopath = "user.ini";

3.窗体加载事件回显用户名和密码

if (!File.Exists(userinfopath))
{

}
else
{
string[] data = File.ReadAllLines(userinfopath);
tb_Account.Text = data[0];
tb_pwd.Text = data[1];
checkBox1.Checked = true;
if(data[1] == "")
{
checkBox1.Checked = false;
}
}

这里的checkBox1就是设计界面上的记住密码CheckBox控件。到这里就能够实现记住密码操作了。

好了,本篇文章内容就到这里。下一篇文章将制作服务端程序,并对登录操作添加连接服务端程序的代码。

本文系小博客网站原创,转载请注明文章链接地址