2017-05-17 6 views
0

学校での学業成績を取得しました。 Streamreader/-writerを使用してWindowsフォームアプリケーションでloginformを作成するはずです。ユーザー名とパスワードは、.txtファイルのprojektにローカルに保存する必要があります。ログイン用にクラスを使用するとします。 質問はこれを設定する方法です。クラスログインにはどのようなメソッドを使用しますか?Streamreader/-writerには2番目のクラスを使用しますか? .txt-fileで暗号化する必要があるため、どこでどのようにユーザー名とパスワードを入力しますか。彼らはあなたがコードの再利用可能になりますGUIからロジックを分離することができ見せたかったようWinformでのログインフォームの作成C#

class Login1 
{ 
    public string userName = "USER"; 
    public string passWord = "PASS"; 
    public int mainKey = 68; 

    string userNameFileText; 
    string passWordFileText; 

    public static string Encrypt(string t, int n) 
    { 
     char ch; 
     String temp = ""; 

     for (int i = 0; i <= t.Length -1 ; i++) 
     { 
      ch = Convert.ToChar(t.Substring(i, 1)); 
      ch = (char)(ch + n); 
      temp += ch; 
     } 

     return temp; 
    } 

    public void WriteToFileUserName() 
    { 
     //string text = userName; 
     //int key = mainKey; 
     string enCryptedUserNameText; 

     enCryptedUserNameText = Encrypt(userName, mainKey); 

     StreamWriter userNameWriteFile = new StreamWriter("username.txt"); 
     userNameWriteFile.WriteLine(enCryptedUserNameText); 
    } 

    public void WriteToFilePassWord() 
    { 
     string text = passWord; 
     int key = mainKey; 
     string enCryptedPassWordText; 

     enCryptedPassWordText = Encrypt(passWord, mainKey); 

     StreamWriter passWordWriteFile = new StreamWriter("password.txt"); 
     passWordWriteFile.WriteLine(enCryptedPassWordText); 
    } 

    public void DeCryptUserName() 
    { 

     string deCryptedUserName; 

     StreamReader userNameReadFile = new StreamReader("username.txt"); 

     while (!userNameReadFile.EndOfStream) 
     { 
      userNameFileText = userNameReadFile.ReadLine(); 
     } 
     userNameReadFile.Close(); 

     deCryptedUserName = Login1.Encrypt(userNameFileText, -mainKey); 
    } 

    private void DeCryptPassWord() 
    { 
     string deCryptedPassWord; 

     StreamReader passWordReadFile = new StreamReader("password.txt"); 

     while (!passWordReadFile.EndOfStream) 
     { 
      passWordFileText = passWordReadFile.ReadLine(); 
     } 
     passWordReadFile.Close(); 

     deCryptedPassWord = Login1.Encrypt(passWordFileText, -mainKey); 

    } 

} 

答えて

1

のは、あなたがSignUpSignInためUserNamePasswordと2 Buttonsのための2 TextBoxを持っていると仮定しましょう。あなたは、登録のロジックを実装し、次のようにサインインすることができます。

Usings: 

using System; 
using System.IO; 
using System.Windows.Forms; 

Forms code: 

public partial class Form1 : Form 
{ 
    private string _filePath = @"c:\Users\Admin\Desktop\logins.txt"; 
    private int encryptNumber = 32; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private string Encrypt(string value) 
    { 
     var result = string.Empty; 
     char[] arr = value.ToCharArray(); 
     for(int i=0;i< arr.Length;i++) 
     { 
      result += (char)(arr[i] + encryptNumber); 
     } 
     return result; 
    } 
    private string Decrypt(string value) 
    { 
     var result = string.Empty; 
     char[] arr = value.ToCharArray(); 
     for (int i = 0; i < arr.Length; i++) 
     { 
      result +=(char)(arr[i] - encryptNumber); 
     } 
     return result; 
    } 

    private void SignUpBtn_Click(object sender, EventArgs e) 
    { 
     if(string.IsNullOrEmpty(loginTxtBox.Text) || string.IsNullOrEmpty(passTxtBox.Text)) 
     { 
      MessageBox.Show("Invalid login/password"); 
      return; 
     } 
     if (CheckLogPass(_filePath)) 
      MessageBox.Show("Invalid login/password"); 
     else 
     { 
      File.AppendAllText(_filePath, "\r\n" + Encrypt(loginTxtBox.Text + "|" + passTxtBox.Text)); 
      MessageBox.Show("Successful SignUp, now you can SignIn"); 
     } 
    } 

    private void SignInBtn_Click(object sender, EventArgs e) 
    { 
     if (string.IsNullOrEmpty(loginTxtBox.Text) || string.IsNullOrEmpty(passTxtBox.Text)) 
     { 
      MessageBox.Show("Invalid login/password"); 
      return; 
     } 
     if(CheckLogPass(_filePath)) 
      MessageBox.Show("Successfully SignIn"); 
     else 
      MessageBox.Show("Invalid login/password"); 
    } 

    private bool CheckLogPass(string path) 
    { 
     if (!File.Exists(_filePath)) 
     { 
      File.Create(_filePath); 
     } 
     using (var fs = File.OpenText(_filePath)) 
     { 
      while (!fs.EndOfStream) 
      { 
       string line = fs.ReadLine(); 
       string decrypted = Decrypt(line); 
       if (decrypted.Contains(loginTxtBox.Text + "|" + passTxtBox.Text)) 
       { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 
} 

あなたはまた、それらを使用する別のフォームを追加しない場合は、別のクラスにファイル書き込み/読み取り部分を取る必要はありません。

+0

Thxのヘルプがありますが、私はSignUpとSignInを理解しているかどうか分かりません。 UserNameとPassWordの2つのテキストボックスと、終了とログインの2つのボタンがあります。私はまた、私はユーザー名とパスワードを設定していない参照してください?申し訳ありませんが、私はこれにはかなり新しいですが、私は事例とすべての助けに本当に感謝しています。 – Tarbh

+0

@Tarbh SignUpはユーザーを登録するために使用され、サインインは同じユーザーの認証です –

+0

uログインに成功すると、「メイン」フォームがMembersite用に開きます。次へ)、ログインフォームが閉じます。 – Tarbh

0

ストリームライターを使用するための別のクラスを作成する必要性を全く続かないよう は、私がアイデアを持っていた、私に聞こえます。たとえば、モバイルアプリを作成した場合は、コードを書き換えなくてもログインクラスを再利用できます。あなたが今まで持っていたものは正しい道にあるようです。 GUIの追加のログインロジックを保持する必要があります。

関連する問題