Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2018, 19:32   #1
mrKrog
Пользователь
 
Регистрация: 20.01.2017
Сообщений: 12
По умолчанию Ошибка при сравнении элементов двух массивов

Задача следующая: организовать авторизацию пользователей. Имена и пароли пользователей хранятся в файлах.
Сделал класс для чтения количества пользователей и заполнения массивов именами и паролями. По идее при авторизации должно сравниваться значение из массива и значение в поле (Windows Form). Ошибка именно на этапе записи строк из файла в массив. Переписывал код неоднократно... пока бестолку(
Класс User (вариант первый)
Код:
class User
    {
        public void Schetchik(int chislo_polzovatelei)
        {
            StreamReader st = new StreamReader(@"D:\Users.txt", Encoding.Default);
            String line2 = st.ReadLine();
            chislo_polzovatelei = 0;
            while (line2 != null)
            {
                chislo_polzovatelei++;
            }
            st.Close();
        }
        public void Parol(List<string> password) /*массив с паролями*/
        {
            StreamReader st = new StreamReader(@"D:\Passwords.txt", Encoding.Default);
            String line2 = st.ReadLine();
            int chislo_polzovatelei = 0;
            Schetchik(chislo_polzovatelei);
 
            password = new List<string>(chislo_polzovatelei);
            while (line2 != null)
            {
                for (int i = 0; i < chislo_polzovatelei; i++)
                {
                    password[i] = line2;
                }
            }
            st.Close();
        }
        public void Polzovatel(List<string> users)
        {
            StreamReader sr = new StreamReader(@"D:\Users.txt", Encoding.Default);
            String line = sr.ReadLine();
            int chislo_polzovatelei = 0;
            Schetchik(chislo_polzovatelei);
 
            users = new List<string>(chislo_polzovatelei);
            while (line != null)
            {
                for (int i = 0; i < chislo_polzovatelei; i++)
                {
                    users[i] = line;
                }
            }
            sr.Close();
        }
 
        
    }
Класс User (вариант второй)

Код:
class User
    {
        public void Schetchik(int chislo_polzovatelei)
        {
            //StreamReader st = new StreamReader(@"D:\Users.txt", Encoding.Default);
            string[] CH = File.ReadAllLines(@"D:\Users.txt", Encoding.Default);
            //String line2 = st.ReadLine();
            int i = 1;
            while (CH[i] != null)
            {
                i++;
                chislo_polzovatelei++;
            }
            /*chislo_polzovatelei = 0;
            int i = 0;
            while (CH[i] != null)
            {
                chislo_polzovatelei++;
                i++;
            }
            st.Close();*/
        }
        public void Parol(string[] PS) /*массив с паролями*/
        {
            //StreamReader st = new StreamReader(@"D:\Passwords.txt", Encoding.Default);
            //String line2 = st.ReadLine();
            PS = File.ReadAllLines(@"D:\Passwords.txt", Encoding.Default);
            /*int chislo_polzovatelei = 0;
            Schetchik(chislo_polzovatelei);

            password = new List<string>(chislo_polzovatelei);
            while (line2 != null)
            {
                for (int i = 0; i < chislo_polzovatelei; i++)
                {
                    password[i] = line2;
                }
            }
            st.Close();*/
        }
        public void Polzovatel(string[] US)
        {
            US = File.ReadAllLines(@"D:\Users.txt", Encoding.Default);
            /*StreamReader sr = new StreamReader(@"D:\Users.txt", Encoding.Default);
            String line = sr.ReadLine();
            int chislo_polzovatelei = 0;
            Schetchik(chislo_polzovatelei);

            users = new List<string>(chislo_polzovatelei);
            while (line != null)
            {
                for (int i = 0; i < chislo_polzovatelei; i++)
                {
                    users[i] = line;
                }
            }
            sr.Close();*/
        }


    }
Метод авторизации:
Код:
public void Autorization()
        {
            int chislo_polzovatelei = 0;
            User schet = new User();
            schet.Schetchik(chislo_polzovatelei);
 
            List<string> parol = new List<string>(chislo_polzovatelei);
            List<string> polzovatel = new List<string>(chislo_polzovatelei);
            User pass = new User();
            pass.Parol(parol);
            User log = new User();
            log.Polzovatel(polzovatel);
                   
 
            if ((login != null) && (password != null))
            {
                for (int i = 0; i < chislo_polzovatelei; i++)
                {
                    if ((login.Text == polzovatel[i]) && (password.Text == parol[i]))
                    {
                        Form2 frm = new Form2();
                        frm.Show();
                        Hide();
                    }
                }
                MessageBox.Show("Не верно введено имя пользователя или пароль!", "Ошибка идентификации!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Не введено имя пользователя или пароль!", "Ошибка входа!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
mrKrog вне форума Ответить с цитированием
Старый 13.08.2018, 16:20   #2
RyV_9
 
Регистрация: 11.08.2018
Сообщений: 3
По умолчанию

К теме: http://www.programmersforum.ru/showthread.php?t=321604
консольный вариант - для краткости

Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace ЛогинПарольФорум
{
    class Program
    {
        static void Main(string[] args)
        {
            User Autor = new User();

            /* Для проверки методов
            int chislo = 0;
            Autor.Schetchik(ref chislo);
            Console.WriteLine(chislo.ToString());
            List<string> password = new List<string>();
            Autor.Parol(password);
            List<string> users = new List<string>();
            Autor.Polzovatel(users);
            */
            string login;
            string password;
            Console.Write("логин: ");
            login=Console.ReadLine();
            Console.Write("пароль: ");
            password= Console.ReadLine();

            Autor.Autorization(login, password);
            Console.ReadKey();
        }
    }
    class User
    {
        // счетчик пользователей
        public void Schetchik(ref int chislo_polzovatelei)
        {
            StreamReader st = new StreamReader(@"D:\Users.txt", Encoding.Default);
            String line2 = st.ReadLine();
            chislo_polzovatelei = 0;
            while (line2 != null)
            {
                line2 = st.ReadLine();
                chislo_polzovatelei++;
            }
            st.Close();
        }
        // список паролей
        public void Parol(List<string> password) /*массив с паролями*/
        {
            StreamReader st = new StreamReader(@"D:\Passwords.txt", Encoding.Default);
            String line2 = st.ReadLine();
            while (line2 != null)
            {
                password.Add(line2);
                line2 = st.ReadLine();
            }
            st.Close();
        }
        // список пользователей
        public void Polzovatel(List<string> users)
        {
            StreamReader st = new StreamReader(@"D:\Users.txt", Encoding.Default);
            String line2 = st.ReadLine();
            while (line2 != null)
            {
                users.Add(line2);
                line2 = st.ReadLine();
            }
            st.Close();
        }
        // авторизация
        public void Autorization(string login, string password)
        {
            int chislo_polzovatelei = 0;
            Schetchik(ref chislo_polzovatelei);
            List<string> parol = new List<string>();
            Parol(parol);
            List<string> polzovatel = new List<string>();
            Polzovatel(polzovatel);
            // проверка
            bool b = false;
            if ((login != "") && (password != ""))
            {
                for (int i = 0; i < chislo_polzovatelei; i++)
                {
                    if ((login == polzovatel[i]) && (password == parol[i]))
                    {
                        b = true;   
                        break;      
                        //  Form2 frm = new Form2();
                        //  frm.Show();
                        //  Hide();
                    }
                }
                if (b)
                    Console.WriteLine("Авторизация выполнена!"); // Вместо перехода на Форму 2
                else
                    Console.WriteLine("Не верно введено имя пользователя или пароль!", "Ошибка идентификации!");
            }
            else
                Console.WriteLine("Не введено имя пользователя и/или пароль!", "Ошибка входа!");
        }
    }  
}
RyV_9 вне форума Ответить с цитированием
Старый 14.08.2018, 07:39   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

mrKrog, в первом варианте из файлов считывается только первая строка, потом идёт бесконечный цикл. ReadLine() должен быть в теле цикла тоже.
Не увидел записи в файлы, посему непонятно в чём именно проблема
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод нужного значения при сравнении данных двух ячеек sjkz Microsoft Office Excel 14 21.08.2013 14:26
Ошибка при сравнении элементов массива three_cats Общие вопросы C/C++ 1 24.02.2013 20:05
Проблема при сравнении двух таблиц Sergepro Microsoft Office Excel 4 11.09.2012 11:04
Деление элементов двух массивов при зад. условиях Leona_L Microsoft Office Excel 6 03.04.2009 20:52
Поиск лишнего/иного символа при сравнении двух строк Bezdar Microsoft Office Excel 5 13.11.2008 13:07