예제 #1
0
        public void AuthorizationAdmin(BD dateBase, VictorinaProgram Victorina)
        {
            try
            {
                string _login, _password;
                Write("\tВведите логин: ");
                _login = ReadLine();
                Write("\tВведите пароль: ");
                _password = ReadLine();

                List <string> mas = new List <string>();
                mas = dateBase.ReadDate("admin.txt");
                string[] word = mas[0].Split(' ');
                if (_login == word[0] && _password == word[1])
                {
                    Clear();
                    MenuAdmin(Victorina);
                }
                else
                {
                    throw new Exception("Вы ввели неверный пароль!");
                }
            }
            catch (Exception ex)
            {
                WriteLine(ex.Message);
                Write("\tПовторить попытку, нажмите любую клавишу");
                ReadKey();
                Clear();
                AuthorizationAdmin(dateBase, Victorina);
            }
        }
예제 #2
0
        void ShowTop(VictorinaProgram Victorina)
        {
            WriteLine("Укажите викторину, по которой хотите посмотреть ТОП!");
            foreach (Topic t in Victorina._topic)
            {
                WriteLine(t.name);
            }
            string tema = ReadLine();

            List <Lider> _Lid = new List <Lider>();

            foreach (User u in Victorina._user)
            {
                foreach (Rezult r in u.rez)
                {
                    if (r.NameTopic == tema)
                    {
                        _Lid.Add(new Lider(u.Login, r));
                    }
                }
            }
            _Lid.Sort();
            int k = 1;

            foreach (Lider a in _Lid)
            {
                WriteLine($"{a.top.Mark}% {a.name} {a.top.TimeTest.ToShortDateString()}");
                k++;
                if (k > 20)
                {
                    break;
                }
            }
        }
예제 #3
0
파일: BD.cs 프로젝트: gellanv/victorina
        public void ReadAllInfo(VictorinaProgram Vic)
        {
            //Считываем все данные с файлов
            List <string> mas = new List <string>();

            //Считываем с файла перечень тем
            ReadTopic(Vic, "topic.txt");

            //Считываем с файла пользователей и информацию по кажому из них
            mas = ReadDate("users.txt");
            foreach (string item in mas)
            {
                string[] word = item.Split(' ');
                Vic._user.Add(new User(word[0], word[1], Convert.ToInt32(word[2]), Convert.ToInt32(word[3]), Convert.ToInt32(word[4])));
            }
            //Считываем с файла достижения по каждому пользователю
            foreach (User use in Vic._user)
            {
                mas = ReadDate(use.Login + ".txt");
                foreach (string item in mas)
                {
                    string[] word = item.Split(' ');
                    use.rez.Add(new Rezult(word[0], Convert.ToInt32(word[1]), Convert.ToInt32(word[2]), Convert.ToInt32(word[3]), Convert.ToInt32(word[4])));
                }
            }

            //Считываем с файла вопросы ответы по каждой викторине
            ReadQuestionAnsver(Vic, "");
        }
예제 #4
0
        public void MenuAdmin(VictorinaProgram Victorina)
        {
            Clear();
            Write("\tВы авторизовались как админ: ");
            WriteLine("\n\n1. Добавить новую викторину\n" +
                      "2. Редактировать существующую викторину\n");
            int chose2 = Convert.ToInt32(ReadLine());

            switch (chose2)
            {
            case 1:
                AddNewVictorin(Victorina);
                WriteLine("Нажмите любую клавишу, чтобы вернуться к МЕНЮ:");
                ReadKey();
                MenuAdmin(Victorina);
                break;

            case 2:
                EditVictorin(Victorina);
                WriteLine("Нажмите любую клавишу, чтобы вернуться к МЕНЮ:");
                ReadKey();
                MenuAdmin(Victorina);
                break;

            default:
                WriteLine("Вы ввели неверный пункт меню!");
                WriteLine("Нажмите любую клавишу, чтобы повторить попытку");
                ReadKey();
                MenuAdmin(Victorina);
                break;
            }
        }
예제 #5
0
파일: BD.cs 프로젝트: gellanv/victorina
        //Считываем с файла список тем
        public void ReadTopic(VictorinaProgram Vic, string arg)
        {
            List <string> mas = new List <string>();

            mas = ReadDate(arg);
            foreach (string item in mas)
            {
                Vic._topic.Add(new Topic(item));
            }
        }
예제 #6
0
        public void MenuUser(VictorinaProgram Victorina)
        {
            Clear();
            WriteLine($"Вы авторизовались как - {Login}\n\tМЕНЮ:");
            WriteLine("1. Начать новую викторину\n" +
                      "2. Ваши предыдущие результаты\n" +
                      "3. Топ-20\n" +
                      "4. Изменить данные учетной записи\n" +
                      "5. Выход\n");
            int chose2 = Convert.ToInt32(ReadLine());

            switch (chose2)
            {
            case 1:
                StartNewVictorin(Victorina);
                WriteLine("Нажмите любую клавишу, чтобы вернуться к МЕНЮ:");
                ReadKey();
                MenuUser(Victorina);
                break;

            case 2:
                ShowRezalt();
                WriteLine("Нажмите любую клавишу, чтобы вернуться к МЕНЮ:");
                ReadKey();
                MenuUser(Victorina);
                break;

            case 3:
                ShowTop(Victorina);
                WriteLine("Нажмите любую клавишу, чтобы вернуться к МЕНЮ:");
                ReadKey();
                MenuUser(Victorina);
                break;

            case 4:
                ChangeDate(Victorina);
                WriteLine("Нажмите любую клавишу, чтобы вернуться к МЕНЮ:");
                ReadKey();
                MenuUser(Victorina);
                break;

            case 5:
                throw new Exception("Вы вышли из программы!");

            default:
                WriteLine("Вы ввели неверный пункт меню!");
                WriteLine("Нажмите любую клавишу, чтобы повторить попытку");
                ReadKey();
                MenuUser(Victorina);
                break;
            }
        }
예제 #7
0
        void StartNewVictorin(VictorinaProgram Victorina)
        {
            WriteLine("\nДоступные викторины:");
            foreach (Topic t in Victorina._topic)
            {
                WriteLine(t.name);
            }
            WriteLine("\nУкажите Тему викторины или \"1\" если вы хотите играть в смешанную викторину:");
            string   tema      = ReadLine();
            Topic    tempTopic = Victorina._topic.Find(x => x.name.Contains(tema));
            DateTime dt        = DateTime.Now;

            if (tempTopic != null)
            {
                int r = tempTopic.VictorinaOpros();//записываем кол-во правильных ответов в переменную
                rez.Add(new Rezult(tema, (r * 100 / 20), dt.Year, dt.Month, dt.Day));
                BD.WriteChangeUserRezult(this);
                Write($"\n\t\tВаш РЕЗУЛЬТАТ  - {r * 100 / 20}%\n");
            }
            else
            if (Convert.ToInt32(tema) == 1)
            {
                List <QuestionAnswer> SmeshQA = new List <QuestionAnswer>();
                foreach (Topic t in Victorina._topic)
                {
                    SmeshQA.AddRange(t._questionAnswers);
                }
                int    len       = SmeshQA.Count();
                Topic  Smeshanuy = new Topic("Смешанный");
                Random rand      = new Random();
                for (int i = 0; i < 20; i++)
                {
                    int k = rand.Next(0, len);
                    if ((Smeshanuy._questionAnswers.Find(x => x.Question.Contains(SmeshQA[k].Question))) != null)//если такой вопрос уже есть в списке то берем другой
                    {
                        i--; continue;
                    }
                    else
                    {
                        Smeshanuy._questionAnswers.Add(SmeshQA[k]);
                    }
                }
                int r = Smeshanuy.VictorinaOpros();    //записываем кол-во правильных ответов в переменную
                rez.Add(new Rezult("Смешанный", (r * 100 / 20), dt.Year, dt.Month, dt.Day));
                BD.WriteChangeUserRezult(this);
                Write($"\n\t\tВаш РЕЗУЛЬТАТ  - {r * 100 / 20}%\n");
            }
            else
            {
                WriteLine("Тема указана неверно!!!");
            }
        }
예제 #8
0
        static void Main(string[] args)
        {
            VictorinaProgram Victorina = new VictorinaProgram();
            BD dateBase = new BD();

            dateBase.ReadTopic(Victorina, @"..\..\..\Victorina\bin\Debug\topic.txt");
            dateBase.ReadQuestionAnsver(Victorina, @"..\..\..\Victorina\bin\Debug\");

            Utilita Utl = new Utilita();

            WriteLine("Чтобы изменить данные в викторине нужно авторизоваться!!!");
            Utl.AuthorizationAdmin(dateBase, Victorina);
        }
예제 #9
0
        public void WriteChangeTopic(VictorinaProgram Victorina)//Перезаписываем изменения в файле перечня Викторин
        {
            string filePath = @"..\..\..\Victorina\bin\Debug\topic.txt";

            using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                using (StreamWriter sw = new StreamWriter(fs, Encoding.Unicode))
                {
                    foreach (Topic top in Victorina._topic)
                    {
                        sw.WriteLine(top.name);
                    }
                }
            }
        }
예제 #10
0
파일: BD.cs 프로젝트: gellanv/victorina
        public static void WriteChangeUser(VictorinaProgram Victorina)//Перезаписываем изменения в файле пользователей
        {
            string filePath = "users.txt";

            using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                using (StreamWriter sw = new StreamWriter(fs, Encoding.Unicode))
                {
                    foreach (User us in Victorina._user)
                    {
                        sw.WriteLine(us);
                    }
                }
            }
        }
예제 #11
0
        public void EditVictorin(VictorinaProgram Victorina)
        {
            foreach (Topic t in Victorina._topic)
            {
                WriteLine(t.name);
            }
            WriteLine("Укажите викторину, которую нужно отредактировать:\n");
            string tempNameTopic = ReadLine();
            Topic  tempTopic     = Victorina._topic.Find(x => x.name.Contains(tempNameTopic));

            tempTopic.Show1();
            WriteLine("Укажите номер вопроса, который нужно отредактировать:\n");
            int tempQuestion = Convert.ToInt32(ReadLine());

            tempTopic._questionAnswers[tempQuestion - 1].Show();

            WriteLine("Введите новый вопрос:");
            string QuestionNew = ReadLine();

            WriteLine("Количество верных ответов:");
            int CountAnsNew = Convert.ToInt32(ReadLine());
            Dictionary <string, int> tempDicNew = new Dictionary <string, int>();

            WriteLine("Варианты ответов (Вариант-0/1) О-лож, 1-истина");
            string Ansver1  = ReadLine();
            int    _Ansver1 = Convert.ToInt32(ReadLine());

            tempDicNew.Add(Ansver1, _Ansver1);

            string Ansver2  = ReadLine();
            int    _Ansver2 = Convert.ToInt32(ReadLine());

            tempDicNew.Add(Ansver2, _Ansver2);

            string Ansver3  = ReadLine();
            int    _Ansver3 = Convert.ToInt32(ReadLine());

            tempDicNew.Add(Ansver3, _Ansver3);
            QuestionAnswer tempQA = new QuestionAnswer(QuestionNew, CountAnsNew, tempDicNew);

            tempTopic._questionAnswers[tempQuestion - 1] = tempQA;
            WriteLine("\t\tИзменения внесены:\n");
            tempTopic._questionAnswers[tempQuestion - 1].Show();
            WriteChangeTopicView(tempTopic, tempTopic.name);
        }
예제 #12
0
        void ChangeDate(VictorinaProgram Victorina)
        {
            WriteLine("Какие данные вы хотите изменить: 1- Пароль; 2 - Дату рождения.");
            int chose3 = Convert.ToInt32(ReadLine());

            switch (chose3)
            {
            case 1:
                WriteLine("Введите новый пароль:");
                Password = ReadLine();
                BD.WriteChangeUser(Victorina);
                WriteLine("Ваш пароль был изменен!!!");
                break;

            case 2:
                WriteLine("Введите дату рождения в формате 1985.12.31");
                bool fl = false;
                do
                {
                    Write($"Текущая дата: {GetBirthDay()}");
                    string DataPattern = @"^[1-2]{1}[0-9]{3}\.[0,1]{1}[0-9]{1}\.[0-9]{2}$";    //Шаблон 4 символа+ 1 цифра вконце
                    Write("\tВведите дату: ");
                    string _data = ReadLine();
                    Regex  regex = new Regex(DataPattern);
                    if (regex.IsMatch(_data))
                    {
                        string[] d = _data.Split('.');
                        SetBirthDay(Convert.ToInt32(d[0]), Convert.ToInt32(d[1]), Convert.ToInt32(d[2]));
                        BD.WriteChangeUser(Victorina);
                        WriteLine("Изменения внесены!");
                        fl = true;
                    }
                    else
                    {
                        WriteLine("Вы ввели неверный формат даты");
                    }
                }while (fl == false);
                break;

            default:
                break;
            }
        }
예제 #13
0
파일: BD.cs 프로젝트: gellanv/victorina
        //Считываем с файла вопросы-ответы по каждой викторине
        public void ReadQuestionAnsver(VictorinaProgram Vic, string arg)
        {
            List <string> mas = new List <string>();

            foreach (Topic top in Vic._topic)
            {
                string temp = arg + top.name + ".txt";
                mas = ReadDate(temp);
                foreach (string item in mas)
                {
                    string[] word  = item.Split('?');
                    string[] word2 = word[1].Trim().Split('|');
                    Dictionary <string, int> Answer = new Dictionary <string, int>();
                    for (int i = 1; i < 4; i++)
                    {
                        string[] word3 = word2[i].Split('-');
                        Answer.Add(word3[0], Convert.ToInt32(word3[1]));
                    }
                    top._questionAnswers.Add(new QuestionAnswer(word[0], Convert.ToInt32(word2[0]), Answer));
                }
            }
        }
예제 #14
0
        static void Main(string[] args)
        {
            VictorinaProgram Victorina = new VictorinaProgram();
            //Считываем все данные с файлов
            BD dateBase = new BD();

            dateBase.ReadAllInfo(Victorina);

            //Меню Авторизации/регистрации
            bool fl = false;

            do
            {
                try
                {
                    WriteLine("1 - Авторизоваться; 2- Пройти регистрацию");
                    int chose1 = Convert.ToInt32(ReadLine());
                    if (chose1 == 1)
                    {
                        Victorina.Authorization(Victorina);
                        fl = true;
                    }
                    else if (chose1 == 2)
                    {
                        VictorinaProgram.Registration(Victorina);
                        fl = true;
                    }
                    else
                    {
                        throw new Exception("Вы ввели неверный пункт меню");
                    }
                }
                catch (Exception ex)
                {
                    WriteLine(ex.Message);
                }
            }while (fl == false);
        }
예제 #15
0
        public void Authorization(VictorinaProgram Victorina)
        {
            string _login, _password;

            Write("\tВведите логин: ");
            _login = ReadLine();
            Write("\tВведите пароль: ");
            _password = ReadLine();
            User temp = Victorina._user.Find(x => x.Login.Equals(_login));

            if (temp == null)
            {
                throw new Exception("Пользователь под таким логином не зарегистрирован!");
            }
            if (temp.Password != _password)
            {
                throw new Exception("Вы ввели неверный пароль!");
            }
            else
            {
                Clear();
                temp.MenuUser(Victorina);
            }
        }
예제 #16
0
        public void AddNewVictorin(VictorinaProgram Victorina)
        {
            WriteLine("Введите название новой викторины: ");
            string name = ReadLine();

            WriteLine("Количество вопросов: ");
            int   CountQ = Convert.ToInt32(ReadLine());
            Topic temp   = new Topic(name);

            for (int i = 0; i < CountQ; i++)
            {
                WriteLine("Введите вопрос:");
                string Question = ReadLine();
                WriteLine("Количество верных ответов:");
                int CountAns = Convert.ToInt32(ReadLine());
                Dictionary <string, int> tempDic = new Dictionary <string, int>();
                WriteLine("Варианты ответов (Вариант-0/1) О-лож, 1-истина");
                string Ansver1  = ReadLine();
                int    _Ansver1 = Convert.ToInt32(ReadLine());
                tempDic.Add(Ansver1, _Ansver1);

                string Ansver2  = ReadLine();
                int    _Ansver2 = Convert.ToInt32(ReadLine());
                tempDic.Add(Ansver2, _Ansver2);

                string Ansver3  = ReadLine();
                int    _Ansver3 = Convert.ToInt32(ReadLine());
                tempDic.Add(Ansver3, _Ansver3);
                QuestionAnswer tempQA = new QuestionAnswer(Question, CountAns, tempDic);
                temp._questionAnswers.Add(tempQA);
            }
            Victorina._topic.Add(temp);
            WriteChangeTopic(Victorina);
            WriteChangeTopicView(temp, name);
            temp.Show1();
        }
예제 #17
0
        public static void Registration(VictorinaProgram Victorina)
        {
            string _login, _password;
            bool   fl = false;

            do
            {
                string LoginPattern = @"^[a-z0-9_-]{4}[0-9]{1}$";//Шаблон 4 символа+ 1 цифра вконце
                Write("\tВведите логин: ");
                _login = ReadLine();
                Regex regex = new Regex(LoginPattern);
                if (regex.IsMatch(_login))
                {
                    WriteLine("Логин Ок!");
                    fl = true;
                }
                else
                {
                    WriteLine("Вы ввели неверный формат для логина");
                }
            }while (fl == false);

            fl = false;
            do
            {
                string PasswodPattern = @"^[a-z0-9_-]{4}[0-9]{1}$";//Шаблон 4 символа+ 1 цифра вконце
                Write("\tВведите пароль: ");
                _password = ReadLine();
                Regex regex = new Regex(PasswodPattern);
                if (regex.IsMatch(_password))
                {
                    WriteLine("Пароль Ок!");
                    fl = true;
                }
                else
                {
                    WriteLine("Вы ввели неверный формат для пароля");
                }
            }while (fl == false);

            fl = false;
            string[] d = new string[3];//массив для записи даты рождения
            do
            {
                string DataPattern = @"^[1-2]{1}[0-9]{3}\.[0,1]{1}[0-9]{1}\.[0-9]{2}$";
                Write("\tВведите дату в формате 1985.12.31: ");
                string _data = ReadLine();
                Regex  regex = new Regex(DataPattern);
                if (regex.IsMatch(_data))
                {
                    d  = _data.Split('.');
                    fl = true;
                }
                else
                {
                    WriteLine("Вы ввели неверный формат даты");
                }
            }while (fl == false);
            Victorina._user.Add(new User(_login, _password, Convert.ToInt32(d[0]), Convert.ToInt32(d[1]), Convert.ToInt32(d[2])));
            User temp = Victorina._user[Victorina._user.Count - 1];

            BD.CreatDoc(temp);
            BD.WriteChangeUser(Victorina);
            Clear();
            temp.MenuUser(Victorina);
        }