这是我的代码,它是一个登录系统,非常基本,只需将用户名和密码写入文本文件,然后在另一个表单的登录屏幕上进行比较。这是注册用户代码:
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.IO;
namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
private void Form2_Load(object sender, EventArgs e)
{
pictureBox2.SizeMode = PictureBoxSizeMode.Zoom;
}
public Form2()
{
InitializeComponent();
}
public bool radioButtons()
{
if (!userRadioButton.Checked && !adminRadioButton.Checked)
{
MessageBox.Show("You must select an account type");
return false;
}
else
{
return true;
}
}
public void button1_Click(object sender, EventArgs e)
{
bool a = radioButtons();
if (a == true)
{
string userName = userNameBox.Text;
string password = passwordBox.Text;
var userNames = File.ReadAllLines(@"C:\Other\myFile.txt");
if (checkUsernameValid() && checkUsernameNotExist() && checkPasswordsValid() && checkPasswordsMatch())
{
allOK();
}
}
}
public void mySW()
{
string path = @"C:\Other\myFile.txt";
string userName = userNameBox.Text;
string password = passwordBox.Text;
using (StreamWriter writer = new StreamWriter(path, true))
{
writer.WriteLine("Username and Password: {0} {1}",userName,password);
writer.WriteLine();
writer.Close();
writer.Dispose();
}
MessageBox.Show("Thanks for registering! \n\nYou may now log in!","Registration SuccessFul");
Application.OpenForms[0].Show();
this.Close();
}
public bool checkUsernameValid()
{
if (userNameBox.Text == "")
{
MessageBox.Show("Username cannot be empty", "Invalid Username Entry");
return false;
}
else
return true;
}
public bool checkPasswordsMatch()
{
if (!passwordBox.Text.Equals(repeatPasswordBox.Text))
{
MessageBox.Show("Sorry, your passwords do not match, try again", "Password Error");
passwordBox.Text = "";
repeatPasswordBox.Text = "";
return false;
}
else
return true;
}
public bool checkUsernameNotExist()
{
if (userNameBox.Text.Contains("Username: " + userNameBox.Text))
{
MessageBox.Show("Sorry, that user name is not available, try again", "Invalid Username Entry");
userNameBox.Text = "";
passwordBox.Text = "";
repeatPasswordBox.Text = "";
return false;
}
else
return true;
}
public void allOK()
{
if (!userNameBox.Text.Contains("Username: " + userNameBox.Text) && passwordBox.Text == repeatPasswordBox.Text)
{
mySW();
}
}
public bool checkPasswordsValid()
{
if (passwordBox.Text == "")
{
MessageBox.Show("Password fields cannot be empty", "Password Error");
return false;
}
else
return true;
}
}
}
如果我输入用户名,它会执行所有检查和注册但是,如果用户名已存在,它仍允许我注册用户名
答案 0 :(得分:1)
if (userNameBox.Text.Contains("Username: " + userNameBox.Text))
我很困惑这一行。 (此行给出任何时间相同的结果,如True
)
但我给你一个想法
。将注册值存储在DataBase中,然后第二次用户给出相同的用户名,然后使用sql查询检查用户名是否已存在。
请参阅此prevoius讨论:Checking if username already exists within the databasae
答案 1 :(得分:0)
插入一个名为'userlist'的richtextBox。将visible设置为false,并确保先清除它。
public bool checkUsernameNotExist()
{
string readfile = System.IO.File.ReadAllText(@"C:\file.txt");
userlist.Text = readfile;
for (int i = 0; i < userlist.Lines.Length; i++)
{
string line = userlist.Lines[i];
if (line.Contains("Username: " + userNameBox.Text))
{
MessageBox.Show("Sorry, that user name is not available, try again", "Invalid Username Entry");
userNameBox.Text = "";
passwordBox.Text = "";
repeatPasswordBox.Text = "";
return false;
}
else
return true;
}
您可以通过以下方式加密/解密用户名:
void encrypt()
{
string encrypted = "";
string encryptstr = yourtextBox.Text;
int encryptnum = 15; //The bigger the number, the stronger the encryption
char[] toencrypt = encryptstr.ToCharArray();
for (int i = 0; i < toencrypt.Length; i++)
int num = Convert.ToInt32(toencrypt[i]) + encryptnum;
string output = Convert.ToChar(num).ToString();
encrypted += output;
}
void decrypt()
{
string decrypted = "";
string decryptstr = yourtextBox.Text;
int decryptnum = 15; //This must be the same as you used to encrypt
char[] todecrypt = decryptstr.ToCharArray();
for (int i = 0; i < todecrypt.Length; i++)
int num = Convert.ToInt32(todecrypt[i]) - decryptnum;
string output = Convert.ToChar(num).ToString();
decrypted += output;
}
希望这有帮助