C#面向对象的注册登录winform窗口程序什么意思?

得过且过的路人 2021-02-22 04:04:04
领导要求用VS和c#设计一个注册登录窗口程序,我完成了。
然后说这次依然是注册登录winform窗口程序,“把用户提出来作为一个类”“面向对象”
这句话是什么意思?以下是我最先设计的代码
namespace APP
{
public partial class Form1 : Form//form1是继承form的一个类
{
public Form1() //构造函数不能私有
{
InitializeComponent(); //初始化窗体
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)//触发事件为button1_click
{
if (string.IsNullOrEmpty(textBox1.Text+textBox2.Text))//判断是否为空值
MessageBox.Show("输入用户名和密码", "警告");
else
{
SqlConnection conn = new SqlConnection("Data source=(local);Initial Catalog=log;Integrated Security=True"); //实例化conn变量,指定连接的数据库参数,不需要用户名和密码,即windows身份验证模式
conn.Open(); //打开conn连接的数据库
SqlCommand cmd = new SqlCommand("select * from log where 用户名='" + textBox1.Text.Trim() + "'and 密码='" + textBox2.Text.Trim() + "'", conn);//sqlcommand对象允许指定在数据库上执行增删改查,数据库连接对象,执行数据库语句
SqlDataReader sdr = cmd.ExecuteReader();//使用ExecuteReader方法创建SqlDataReader类型对象
sdr.Read();//从数据库里读数据
if (sdr.HasRows)//使用HasRows属性判断结果中是否有数据
MessageBox.Show("登陆成功", "提示");
else
MessageBox.Show("用户名或密码有误", "警告");
conn.Close();
}
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void label1_Click(object sender, EventArgs e)
{

}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)//默认为true
{
textBox2.PasswordChar = '\0';
}
else
{
textBox2.PasswordChar = '*';
}
}

private void textBox2_TextChanged(object sender, EventArgs e)
{

}

private void button2_Click(object sender, EventArgs e)
{
string str1 = textBox1.Text; //读取用户名和密码
string str2 = textBox2.Text;
int a = 0; //检验用户名、密码复杂度
int b = 0;
int c = 0;
int x= 0;
int y = 0;
int z = 0;
int i = textBox1.Text.Length;
int j = textBox2.Text.Length;
for (int m = 0; m < str1.Length; m++)
{
char cha1=str1[m];
if (char.IsLetter(cha1)) //是否为字母
{
a++;
}
else
{
if (char.IsDigit(cha1)) //是否为数字
{
b++;
}
else
if(char.IsPunctuation(cha1))//是否为标点符号
{
c++;
}
}
}
for (int n = 0; n < str2.Length;n++ )
{
char cha2 = str2[n];
if (char.IsLetter(cha2))
{
x++;
}
else
if(char.IsDigit(cha2))
{
y++;
}
else
if (char.IsPunctuation(cha2))
{
z++;
}
}
if (a==0 || b==0 || c==0 || x==0 || y==0 || z==0 ||i < 6 || i > 15 || j < 10 || j > 15 || Regex.IsMatch(str1 + str2, "[^a-zA-Z0-9_]")) //正则表达式用来检查字符串是否和指定的表达式匹配
{
MessageBox.Show("用户名长度在6-15位,密码长度在10-15位。\n仅限数字、字母、下划线。\n用户名和密码必须包含数字、字母、下划线。", "警告");
}
else
{
SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=log;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand("select * from log where 用户名='" + textBox1.Text.Trim() + "'", conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
if (sdr.HasRows)
{
MessageBox.Show("该用户名已存在", "警告");
}
else
{
sdr.Close();
string myInsert = "insert into log(用户名,密码) values('" + textBox1.Text + "','" + textBox2.Text + "')";
SqlCommand myCom = new SqlCommand(myInsert, conn);//创建一个SqlCommand类型对象
myCom.ExecuteNonQuery();
conn.Close();
conn.Dispose(); //关闭并释放对象,下次调用时重新创建conn
MessageBox.Show("注册成功");
}
}
}
private void button3_Click(object sender, EventArgs e) //关闭程序
{
Close();
}
}

}
还请大佬详细解答一下,我对c#并不熟,最好代码说明,谢谢
...全文
237 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
强行中文名 2021-02-24
  • 打赏
  • 举报
回复
整体项目的结构应该是分层的吧,里面有没有用户的类,而且一般界面里是不含数据库操作的,可以参考三层结构
ziqi0716 2021-02-23
  • 打赏
  • 举报
回复
面向对象就是为了更加形象理解世间万物而提出的,所以它非常容易理解,容易到大家不知不觉中已经在用了,却没有感觉到,就像呼吸一样自然! 知乎上搜下:如何理解面向对象
  • 打赏
  • 举报
回复
引用 7 楼 兔子党逍遥 的回复:
如果我是你领导,这会儿就找编码规范去了,TextBox1,cha2,这种变量命名…
已经重命名了,除了那些变量。您肯定看出来我不懂面向对象编码了。真心想问一下面向对象的话,我那串大量变量的代码该怎么输入呢?大佬您可以教教我吗 namespace APP { public partial class Form1 : Form//form1是继承form的一个类 { public Form1() //构造函数不能私有 { InitializeComponent(); //初始化窗体 } private void Form1_Load(object sender, EventArgs e) { } private void land_Click(object sender, EventArgs e)//触发事件为button1_click { if (string.IsNullOrEmpty(user.Text+password.Text))//判断是否为空值 MessageBox.Show("输入用户名和密码", "警告"); else { SqlConnection conn = new SqlConnection("Data source=(local);Initial Catalog=log;Integrated Security=True"); //实例化conn变量,指定连接的数据库参数,不需要用户名和密码,即windows身份验证模式 conn.Open(); //打开conn连接的数据库 SqlCommand cmd = new SqlCommand("select * from log where 用户名='" + user.Text.Trim() + "'and 密码='" + password.Text.Trim() + "'", conn);//sqlcommand对象允许指定在数据库上执行增删改查,数据库连接对象,执行数据库语句 SqlDataReader sdr = cmd.ExecuteReader();//使用ExecuteReader方法创建SqlDataReader类型对象 sdr.Read();//从数据库里读数据 if (sdr.HasRows)//使用HasRows属性判断结果中是否有数据 MessageBox.Show("登陆成功", "提示"); else MessageBox.Show("用户名或密码有误", "警告"); conn.Close(); } } private void user_TextChanged(object sender, EventArgs e) { } private void label1_Click(object sender, EventArgs e) { } private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (显示密码.Checked)//默认为true { password.PasswordChar = '\0'; } else { password.PasswordChar = '*'; } } private void password_TextChanged(object sender, EventArgs e) { } private void reg_Click(object sender, EventArgs e) { string str1 = user.Text; //读取用户名和密码 string str2 = password.Text; int a = 0; //检验用户名、密码复杂度 int b = 0; int c = 0; int x= 0; int y = 0; int z = 0; int i = user.Text.Length; int j = password.Text.Length; for (int m = 0; m < str1.Length; m++) { char cha1=str1[m]; if (char.IsLetter(cha1)) //是否为字母 { a++; } else { if (char.IsDigit(cha1)) //是否为数字 { b++; } else if(char.IsPunctuation(cha1))//是否为标点符号 { c++; } } } for (int n = 0; n < str2.Length;n++ ) { char cha2 = str2[n]; if (char.IsLetter(cha2)) { x++; } else if(char.IsDigit(cha2)) { y++; } else if (char.IsPunctuation(cha2)) { z++; } } if (a==0 || b==0 || c==0 || x==0 || y==0 || z==0 ||i < 6 || i > 15 || j < 10 || j > 15 || Regex.IsMatch(str1 + str2, "[^a-zA-Z0-9_]")) //正则表达式用来检查字符串是否和指定的表达式匹配 { MessageBox.Show("用户名长度在6-15位,密码长度在10-15位。\n仅限数字、字母、下划线。\n用户名和密码必须包含数字、字母、下划线。", "警告"); } else { SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=log;Integrated Security=True"); conn.Open(); SqlCommand cmd = new SqlCommand("select * from log where 用户名='" + user.Text.Trim() + "'", conn); SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read(); if (sdr.HasRows) { MessageBox.Show("该用户名已存在", "警告"); } else { sdr.Close(); string myInsert = "insert into log(用户名,密码) values('" + user.Text + "','" + password.Text + "')"; SqlCommand myCom = new SqlCommand(myInsert, conn);//创建一个SqlCommand类型对象 myCom.ExecuteNonQuery(); conn.Close(); conn.Dispose(); //关闭并释放对象,下次调用时重新创建conn MessageBox.Show("注册成功"); } } } private void quit_Click(object sender, EventArgs e) //关闭程序 { Close(); } } }
  • 打赏
  • 举报
回复
引用 7 楼 兔子党逍遥 的回复:
如果我是你领导,这会儿就找编码规范去了,TextBox1,cha2,这种变量命名…
虽然你没解答我的疑问,不过你确实提醒我了,而且我现在属于在职转岗,我目前的工作和代码没关系,领导在审查我。
兔子-顾问 2021-02-22
  • 打赏
  • 举报
回复
如果我是你领导,这会儿就找编码规范去了,TextBox1,cha2,这种变量命名…
Godgod丶C 2021-02-22
  • 打赏
  • 举报
回复
类与对象,类提供字段属性方法,实例化的对象可以用这些属性。。。。。。。。。。。
楠小南 2021-02-22
  • 打赏
  • 举报
回复
引用 2 楼 得过且过的路人 的回复:
[quote=引用 1 楼 楠小南 的回复:]就是叫你搞对象了
面向对象的描述我已经看得能背下来了,但是现在依然一头雾水。是让我把已经输入的代码整合成各个独立的区域,然后直接调用? 我也不知道怎么说了[/quote] 就是封装,将用户的各种信息(数据库字段)给封装起来,下次你查询的时候直接就new 一个用户然后填充,然后就可以传来传去了使用了。 类的用户信息有了,那也可以直接在里面弄个方法保存到数据库了。有属性有方法- 这不就是面向对象了吗?
shawn_yang 2021-02-22
  • 打赏
  • 举报
回复
抽象化
如何把一个具体的事物,抽象化

举例,张三
抽象化为一个人
人的属性有 姓名,性别....
人的事件有 跑,说....
The 祺℡ 2021-02-22
  • 打赏
  • 举报
回复
“把用户提出来作为一个类”“面向对象”这个的意思不是说让你跟用户去搞对象。

考虑:
1. 自己Class一个EndClient的类出来。
2. 把用户名,密码,性别,年龄等各种信息作为类的基本成员函数。
3. 把登录或者其他一些列操作作为类的基本方法。
  • 打赏
  • 举报
回复
引用 1 楼 楠小南 的回复:
就是叫你搞对象了
面向对象的描述我已经看得能背下来了,但是现在依然一头雾水。是让我把已经输入的代码整合成各个独立的区域,然后直接调用? 我也不知道怎么说了
楠小南 2021-02-22
  • 打赏
  • 举报
回复
就是叫你搞对象了

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧