Реферат Курсовой проект содержит: 50 страниц, 1 рисунок, 5 таблиц, 5 скриншотов, 6 используемых источников, 1 приложение. ПРОГРАММНАЯ ИНЖЕНЕРИЯ, ПРИЛОЖЕНИЕ, ШКОЛЬНЫЙ ЖУРНАЛ, ЯЗЫК ПРОГРАММИРОВАНИЯ… Объектом исследования является приложение. Целью проекта является разработка приложения с использованием методов программной инженерии, позволяющими создание таких приложений, как приложение для школьного журнала. Основные полученные результаты: Было создано приложение, а именно приложение для школьного журнала. Содержание Введение ................................................................................................................... 3 1 Постановка задачи ............................................................................................ 5 2 Алгоритмизация задачи .................................................................................... 5 3 Описание языка С# ........................................................................................... 6 4 Идентификаторы программы ........................................................................... 7 5 Схемы алгоритмов ............................................................................................ 8 6 Процесс работы программы ........................................................................... 10 Заключение ............................................................................................................ 13 Список используемых источников ...................................................................... 14 Код программы ...................................................................................................... 15 Введение Цель работы: «Создать программу на языке программирования С#, которая будет являться приложением для школьного журнала». Тема работы: «Разработка программы на языке С#». На сегодняшний день существует множество различных средств вычислительной техники (в том числе и ЭВМ), позволяющих существенно повысить эффективность деятельности инженеров при решении различных задач. Знание основных методов и приемов программирования нужны не только будущему программисту, но и любому специалисту, использующему компьютер в своей профессиональной деятельности - это способствует развитию строгого “алгоритмического” мышления, пониманию основных принципов устройства и работы компьютера, умению грамотно сформулировать задачу для разработчиков прикладного программного обеспечения . В данной курсовой работе создавалось приложение для школьного журнала. В качестве среды программирования выбрана MS Visual Studio 2022 и язык программирования C# («си шарп»), изучаемый на занятиях по дисциплине “Основы алгоритмизации и программирования”. К достоинствам языка С# следует отнести то, что данный язык имеет 300 000 библиотек разных функций, которые работают с максимальным быстродействием. Алгоритмы и программы, которые представляют интерес для изучения и исследования, исчисляются десятками и сотнями. Одни из них решают конкретные задачи на основе известных методов, другие образуют “системную” основу для огромного большинства прикладных программ. К последней группе алгоритмов можно отнести методы обработки информации, представленной в виде одномерных и двухмерных массивов (матриц). Работа с матрицами - это одна из стандартных функций, возникающих в процессе решения задач самого различного характера . На сегодняшний день математическое программирование - важная составляющая всего программирования. Большие и сложные вычисления благодаря простым программам становятся простыми. 1 Постановка задачи Реализация решения поставленной задачи осуществляется посредством 6 методов: static void Main, public static void GetPositiveNumeric, public static void SortRow, public static void PrintData, public static int[,] inputMatrix, public static void outputMatrix. Ключевое слово static является модификатором. Далее идет тип возвращаемого значения. В данном случае ключевое слово void указывает на то, что метод ничего не возвращает. Такой метод еще называется процедурой. Далее идет название метода. Каждый из методов выполняет свою определенную функцию. Например, в методе «public static void GetPositiveNumeric» мы ищем в столбцах матрицы положительные элементы, и, при их наличии, записываем индексы этих элементов в текстовый файл. Программа предусматривает вывод следующих результатов выполнения: исходная матрица в виде таблицы; сообщение, содержащее информацию о наличии столбцов, имеющих положительный элемент; в случае если такой (-ие) стобец (-ы) имеется (-ются): сообщение о индексах этого (-их) элемента (-ов); результирующая матрица в виде таблицы; в случае если такой (-их) строки (-к) не имеется: в текстовый файл выводится исходная матрица в виде таблицы. Вышеперечисленные результаты работы программы в текстовый файл “output.txt”. 2 Алгоритмизация задачи Суть программы в том, чтобы создать методы, в которых будут производиться основные логические и математические операции. И сделать метод Main таким, что бы в нем не производилось никаких действий кроме ввода и вывода информации. Для решения нашей задачи нам нужно сначала найти в матрице столбец, где есть хотя бы один положительный элемент. Для этого нам нужно проверить каждый элемент всех столбцов. Если в столбце есть таковой элемент, тогда находим его номер и сортируем столбец по возрастанию. В программе будет присутствовать 6 методов. Первый - “Main” создает текстовый файл с конечной матрицей. Второй - “GetPositiveNumeric” ищет положительные элементы в столбцах исходной матрицы, которая находится в текстовом файле “input.txt”, а затем находит индексы этого элемента. Третий “SortRow” сортирует столбцы массива с положительными элементами по возрастанию. Четвертый - “PrintData” выводит матрицу на дисплей. Пятый и шестой - “inputMatrix” и “outputMatrix” производят чтение и запись матрицы из файла / в файл соответственно. В результате работы программы в текстовом файле “output.txt” мы увидим матрицу - это и будет решение задачи. 3 Описание языка С# Главной особенностью языка C# является его ориентированность на платформу Microsoft.NET — создатели C# ставили своей целью предоставление разработчикам естественных средств доступа ко всем возможностям платформы .NET. Видимо, это решение можно считать более или менее вынужденным, так как платформа .NET изначально предлагала значительно большую функциональность, чем любой из существовавших на тот момент языков программирования. Кроме того, создатели С# хотели скрыть от разработчика как можно больше незначительных технических деталей, включая операции по упаковке/распаковке типов, инициализации переменных и сборке мусора. Благодаря этому программист, пишущий на C#, может лучше сконцентрироваться на содержательной части задачи. В процессе решения этой задачи проектировщики C# пытались учесть уроки реализации Visual Basic'а, который достаточно успешен в скрытии деталей реализации, но недостаточно эффективен для написания крупных промышленных систем: создатели C# декларируют, что новый язык обладает мощностью С++ и в то же время простотой Visual Basic'а. Еще одно преимущество создания нового языка программирования по сравнению с расширением существующих заключается в том, что при создании нового языка нет необходимости заботиться о проблемах обратной совместимости, которые обычно заметно затрудняют исправление застарелых проблем и даже внесение новых свойств в стандарт языка (подробное описание трудностей, возникающих при расширении старого языка программирования, можно прочитать в книге Б. Страуструпа "Дизайн и эволюция языка С++", М.: ДМК, 2000). Таким образом, C# представляет собой новый язык программирования, ориентированный на разработку для платформы .NET и пригодный как для быстрого прототипирования приложений, так и для разработки крупномасштабных приложений. 4 Идентификаторы программы Первый метод - «Main», имеет только один идентификатор - mas, который задает массив. Идентификаторы второго метода указаны в Таблице 1. Таблица 1 - Идентификаторы метода «GetPositiveNumeric» Обозначение параметров В формулах В программе arr arr[j, i] i j Смысл параметров Матрица определенной размерности Элемент матрицы Индекс строки Индекс столбца Таблица 2 - Идентификаторы метода «SortRow» Обозначение параметров В формулах В программе newArr sortArr indexRow Смысл параметров Новый массив Сортировка массива Индекс элемента Таблица 3 - Идентификаторы метода «PrintData» Обозначение параметров В формулах В программе arr[j, i] i j Смысл параметров Элементы матрицы Индекс строки Индекс столбца Таблица 4 - Идентификаторы метода «inputMatrix» Обозначение параметров В формулах В программе colsLines elems matrix i j elemMas matrix[i, k] Смысл параметров Количество строк Элементы Матрица Индекс строки Индекс столбца Элемент массива Элементы матрицы “matrix” Таблица 5 - Идентификаторы метода «outputMatrix» Обозначение параметров В формулах В программе i k matrix[i, k] Смысл параметров Индекс строки Индекс столбца Элементы матрицы “matrix” 5 Схемы алгоритмов Схема алгоритмов выполнена в виде структурных схем (схем НассиШнейдермана). Инструмент для создания схем - программа Structorizer. Схемы, созданы в программе Structorizer, экспортированы в формат PNG и далее были обработаны средствами программы Photoshop. Схемы составлялись отдельно для каждой подпрограммы-метода. Схемы отображают алгоритм функционирования программы (Рисунок 1).а Рисунок 1 - Схемы алгоритма программы. 6 Процесс работы программы При запуске программы открывается консоль. В первую очередь необходимо авторизоваться. Для выбора нужного пункта необходимо стрелками «вверх» и «вниз» на клавиатуре установить стрелку на требуемый пункт. Программа запросит ввести логин и пароль. Для входа как администратор, необходимо ввести логин «admin» и пароль «admin_password». После корректного ввода логина и пароля открывается меню, для ввода всей необходимой информации. Добавляется название группы. При зачислении студента в группу сверху будут указаны все имеющиеся учебные группы. И так далее. Заключение В данном курсовом проекте был рассмотрен процесс создания приложения для школьного журнала, с помощью Microsoft Visual Studio 2022 и языка программирования C#. Созданное приложение соответствует всем поставленным ранее задачам. Был изучен необходимый теоретический материал, проведены исследования и написан код программы. Список используемых источников 1. Шустова Л.И., Тараканов О.В. Базы данных: учебник / М.: ИНФРАМ, 2017. – 304 с. URL: http://znanium.com/catalog/product/751611 (дата обращения: 7.01.2020). 2. Кузин А.В., Чумакова Е.В. Основы работы в Microsoft Office 2013: учеб. пособие / М.: Форум, НИЦ ИНФРА-М, 2017. – 160 с. URL: http://znanium.com/catalog/product/561022 (дата обращения: 7.01.2020). 3. Ткаченко Г.И. Компьютерная графика: учеб. пособие / Таганрог: Южный федеральный ун-т, 2016. – 94 с. URL: http://znanium.com/ catalog/product/996346 (дата обращения: 7.01.2020). 4. Партыка Т.Л., Попов И.И. Информационная безопасность: учеб. пособие – 5-е изд., перераб. и доп. / М.: ФОРУМ: ИНФРА-М, 2019. – 432 с. URL: http://znanium.com/catalog/product/987326 (дата обращения: 7.01.2020). 5. Немцова Т.И., Казанкова Т.В., Шнякин А.В. Компьютерная графика и web-дизайн: учеб. пособие / М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2020. – 400 с. URL: http://znanium.com/catalog/product/1039321 (дата обращения: 7.01.2020). 6. Белов В.В., Чистякова В.И. Алгоритмы и структуры данных: учебник / М.: ИНФРА-М, 2016. – 240 с. URL: http://znanium.com/ catalog/product/766771 (дата обращения: 7.01.2020). Код программы using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Threading; using System.Net.Sockets; using System.Text.RegularExpressions; using System.Runtime.InteropServices.ComTypes; namespace eljur { class Admin { static strelki str = new strelki(); static public int ViewMenu(string[] menuText) { Console.Clear(); foreach (var text in menuText) Console.Write(text); int chek = str.CheckerMenu(menuText.Length); Console.Clear(); return chek; } public void Admin_panel() { Console.Clear(); string[] menuText = { "Выберите\n", " 1)Добавить группу\n", " 2)Зачислить студента в группу\n", " 3)Добавить преподавателя\n", " 4)Закрепить группу и преподавателя за дисциплину\n", " 5)Удалить преподавателя или студента\n", " 6)Редактировать данные студентов или преподавателей\n", " 7)Просмотри и редактирование журнала учебной группы\n", " 8)Выход\n" }; Authorization auth = new Authorization(); while (true) { int chek = ViewMenu(menuText); switch (chek) { case 1: AddGroup(); break; case 2: AddStudent(); break; case 3: AddPrepod(); break; case 4: AddSubject(); break; case 5: Delete(); break; case 6: Redact(); break; case 7: Journal(); break; case 8: MenuVibor lol = new MenuVibor(); lol.Vibor(); break; } } } public void AddGroup() { string path11 = Directory.GetCurrentDirectory(); again: Console.Clear(); Console.Write("Введите название группы: "); string gr = Console.ReadLine(); if (gr == "" || gr == null || gr == " " || gr == " " || gr.Length<=1) { Console.WriteLine("Error"); Thread.Sleep(2000); goto again; } if (System.IO.Directory.Exists(path11+@"\Данные\Журналы\" + gr)) { Console.WriteLine("Данная учебная группа уже существует, повторите ввод"); Thread.Sleep(2000); goto again; } else { var directory = new DirectoryInfo(path11 + @"\Данные\Журналы\"); directory.CreateSubdirectory(gr); Console.WriteLine("Группа добавлена!"); Thread.Sleep(2000); Admin_panel(); } } public void AddStudent() { string path11 = Directory.GetCurrentDirectory(); string[] nums = new string[100]; int j = 1; again: Console.WriteLine("Группы: "); DirectoryInfo dir = new DirectoryInfo(path11 + @"\Данные\Журналы\"); foreach (var item in dir.GetDirectories()) { nums[j] = item.Name; Console.WriteLine(" "+nums[j]); j++; } if (j == 1) { Console.WriteLine("Нет групп!"); Thread.Sleep(2000); Admin_panel(); } Console.WriteLine(); Console.Write("Введите группу, куда будет зачислен студент: "); string gr = Console.ReadLine(); if (!System.IO.Directory.Exists(path11 + @"\Данные\Журналы\" + gr)) { Console.WriteLine("Данная учебная группа не существет"); Thread.Sleep(2000); Console.Clear(); goto again; } st: string fam = "", ima = "", otch = " "; Console.Write("Введите фамилию студента: "); fam = Console.ReadLine(); Console.Write("Введите имя студента: "); ima = Console.ReadLine(); Console.Write("Введите отчество студента: "); otch = Console.ReadLine(); if (fam == "" || ima == "" || !Regex.IsMatch(fam, @"^[а-яА-Я]+$") || !Regex.IsMatch(ima, @"^[а-яА-Я]+$") || Regex.IsMatch(fam, @"^[a-zA-Z]+$") || Regex.IsMatch(ima, @"^[a-zA-Z]+$") || fam.Contains(" ") || ima.Contains(" ")) { Console.WriteLine("Вы некорректно ввели данные!"); Thread.Sleep(2000); Console.Clear(); goto st; } string st_login = "", st_pas = ""; r1: Console.Write("Введите логин студенту: "); st_login = Console.ReadLine(); if (st_login == "" || st_login == " " || st_login == null || Regex.IsMatch(st_login, @"^[а-яА-Я]+$") || st_login.Contains(" ") || st_login.Length<2) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r1; } DirectoryInfo dir2 = new DirectoryInfo(path11 + @"\Данные\Студенты"); foreach (var item in dir2.GetFiles()) { if (st_login+".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } dir2 = new DirectoryInfo(path11 +@"\Данные\Преподаватели"); foreach (var item in dir2.GetFiles()) { if (st_login + ".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } r2: Console.Write("Введите пароль студенту: "); st_pas = Console.ReadLine(); if (st_pas == "" || st_pas == " " || st_pas == null || Regex.IsMatch(st_pas, @"^[аяА-Я]+$") || st_pas.Contains(" ") || st_pas.Length < 5) { Console.WriteLine("Error! (Длина пароля должны быть не меньше 5)"); Thread.Sleep(2000); goto r2; } BinaryWriter writer = new BinaryWriter(File.Open(path11 + @"\Данные\Студенты\" + st_login + ".dat", FileMode.OpenOrCreate)); writer.Write(gr); writer.Write(fam); writer.Write(ima); writer.Write(otch); writer.Write(st_login); writer.Write(st_pas); writer.Close(); Directory.CreateDirectory(path11 + @"\Данные\Журналы\" + gr + @"\" + fam + " " + ima+" "+otch); Console.WriteLine("Данные записаны!"); Thread.Sleep(2000); } public void AddPrepod() { string path11 = Directory.GetCurrentDirectory(); st: string fam = "", ima = "", otch = " "; Console.Write("Введите фамилию преподавателя: "); fam = Console.ReadLine(); Console.Write("Введите имя преподавателя: "); ima = Console.ReadLine(); Console.Write("Введите отчество преподавателя: "); otch = Console.ReadLine(); if (fam == "" || ima == "" || !Regex.IsMatch(fam, @"^[а-яА-Я]+$") || !Regex.IsMatch(ima, @"^[а-яА-Я]+$") || Regex.IsMatch(fam, @"^[a-zA-Z]+$") || Regex.IsMatch(ima, @"^[a-zA-Z]+$") || fam.Contains(" ") || ima.Contains(" ")) { Console.WriteLine("Вы не ввели фамилию или имя!"); Thread.Sleep(2000); Console.Clear(); goto st; } string st_login = "", st_pas = ""; r1: Console.Write("Введите логин преподавателя: "); st_login = Console.ReadLine(); if (st_login == "" || st_login == " " || st_login == null || Regex.IsMatch(st_login, @"^[а-яА-Я]+$") || st_login.Contains(" ") || st_login.Length < 2) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r1; } DirectoryInfo dir2 = new DirectoryInfo(path11 + @"\Данные\Преподаватели"); foreach (var item in dir2.GetFiles()) { if (st_login + ".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } dir2 = new DirectoryInfo(path11 + @"\Данные\Студенты"); foreach (var item in dir2.GetFiles()) { if (st_login + ".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } r2: Console.Write("Введите пароль преподавателя: "); st_pas = Console.ReadLine(); if (st_pas == "" || st_pas == " " || st_pas == null || Regex.IsMatch(st_pas, @"^[аяА-Я]+$") || st_pas.Contains(" ") || st_pas.Length < 5) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r2; } BinaryWriter writer = new BinaryWriter(File.Open(path11 + @"\Данные\Преподаватели\" + st_login + ".dat", FileMode.OpenOrCreate)); writer.Write(fam); writer.Write(ima); writer.Write(otch); writer.Write(st_login); writer.Write(st_pas); writer.Close(); Console.WriteLine("Данные записаны!"); Thread.Sleep(2000); } public void AddSubject() { string path11 = Directory.GetCurrentDirectory(); r1: Console.Write("Введите наименование предмета: "); string name = Console.ReadLine(); string[] nums = new string[100]; int j = 1; again: Console.WriteLine("Группы: "); DirectoryInfo dir = new DirectoryInfo(path11 + @"\Данные\Журналы"); foreach (var item in dir.GetDirectories()) { nums[j] = item.Name; Console.WriteLine(" " + nums[j]); j++; } if (j == 1) { Console.WriteLine("Нет групп!"); Thread.Sleep(2000); Admin_panel(); } Console.Write("Введите группу, за которой закреплён предмет: "); string gr = Console.ReadLine(); if (!System.IO.Directory.Exists(path11 + @"\Данные\Журналы\" + gr)) { Console.WriteLine("Данная учебная группа не существет"); Thread.Sleep(2000); Console.Clear(); goto again; } DirectoryInfo dir2 = new DirectoryInfo(path11 + @"\Данные\Журналы\" + gr); foreach (var item in dir2.GetFiles()) { if (name + ".dat" == item.Name) { Console.WriteLine("Данный предмет у данной учебной группы существует уже!"); Thread.Sleep(1500); Console.Clear(); goto r1; } } again1: Console.WriteLine("Преподаватели: "); string[] nums1 = new string[100]; int j1 = 1; DirectoryInfo dir1 = new DirectoryInfo(path11 + @"\Данные\Преподаватели"); foreach (var item in dir1.GetFiles()) { nums[j1] = item.Name; Console.WriteLine(" " + Path.GetFileNameWithoutExtension(nums[j1])); j1++; } if (j1 == 1) { Console.WriteLine("Преподавателей нет!"); Thread.Sleep(2000); Console.Clear(); Admin_panel(); } Console.Write("Введите логин преподавателя, за которым закреплён предмет: "); string rpe = Console.ReadLine(); if (!System.IO.File.Exists(path11 + @"\Данные\Преподаватели\" + rpe+".dat")) { Console.WriteLine("Данный логин не существует"); Thread.Sleep(2000); Console.Clear(); goto again1; } BinaryWriter writer = new BinaryWriter(File.Open(path11 + @"\Данные\Журналы\" + gr+@"\"+ name + ".dat", FileMode.OpenOrCreate)); writer.Write(name); writer.Write(gr); writer.Write(rpe); writer.Close(); Console.WriteLine("Данные записаны!"); Thread.Sleep(2000); } public void Delete() { string path11 = Directory.GetCurrentDirectory(); Console.Clear(); Console.WriteLine("Выберите, кого жалете удалить: "); Console.WriteLine("1. Преподавателя"); Console.WriteLine("2. Студента"); Console.Write("Выбор: "); string vib = Console.ReadLine(); if (vib=="1") { stt: Console.WriteLine("Логины: "); string[] dirs = Directory.GetFiles(path11 + @"\Данные\Преподаватели"); int i = 1; foreach (string s in dirs) { Console.WriteLine(" " + System.IO.Path.GetFileNameWithoutExtension(s)); i++; } if (i == 1) { Console.WriteLine("Преподавателей нет!"); Thread.Sleep(1500); Admin_panel(); } Console.Write("Введите логин преподавателя, который желаете удалить: "); string del_login = Console.ReadLine(); if (!System.IO.File.Exists(path11 + @"\Данные\Преподаватели\" + del_login + ".dat")) { Console.WriteLine("Error"); Thread.Sleep(2000); Console.Clear(); goto stt; } else { System.IO.File.Delete(path11 + @"\Данные\Преподаватели\" + del_login + ".dat"); if (File.Exists(path11 + @"\Данные\Преподаватели\ДР\" + del_login + ".dat")) File.Delete(path11 + @"\Данные\Преподаватели\ДР\" + del_login + ".dat"); Console.WriteLine("Преподаватель удалён!"); Thread.Sleep(2000); } } if (vib == "2") { stt: Console.WriteLine("Логины: "); string[] dirs = Directory.GetFiles(path11 + @"\Данные\Студенты"); int i = 1; foreach (string s in dirs) { Console.WriteLine(" " + System.IO.Path.GetFileNameWithoutExtension(s)); i++; } if (i == 1) { Console.WriteLine("Студентов нет!"); Thread.Sleep(1500); Admin_panel(); } Console.Write("Введите логин студента, который желаете удалить: "); string del_login = Console.ReadLine(); if (!System.IO.File.Exists(path11 + @"\Данные\Студенты\" + del_login + ".dat")) { Console.WriteLine("Error"); Thread.Sleep(2000); Console.Clear(); goto stt; } else { string ima = "", gr = "", fam = "", otch = ""; i = 0; BinaryReader reader = new BinaryReader(File.Open(path11 + @"\Данные\Студенты\" + del_login+".dat", FileMode.Open)); while (reader.PeekChar() > -1) { string name = reader.ReadString(); if (i == 0) gr = name; if (i == 1) fam = name; if (i == 2) ima = name; if (i == 3) otch = name; i++; } reader.Close(); Directory.Delete(path11 + @"\Данные\Журналы\" + gr + @"\" + fam + " " + ima + " " + otch); System.IO.File.Delete(path11 + @"\Данные\Студенты\" + del_login + ".dat"); if (File.Exists(path11 + @"\Данные\Студенты\ДР\" + del_login + ".dat")) File.Delete(path11 + @"\Данные\Студенты\ДР\" + del_login + ".dat"); Console.WriteLine("Студент удалён!"); Thread.Sleep(2000); } } } public void Redact() { string path11 = Directory.GetCurrentDirectory(); Console.Clear(); Console.WriteLine("Выберите, кого жалете изменить: "); Console.WriteLine("1. Преподавателя"); Console.WriteLine("2. Студента"); Console.Write("Выбор: "); string vib = Console.ReadLine(); if (vib == "1") { stt: Console.WriteLine("Логины: "); string[] dirs = Directory.GetFiles(path11 + @"\Данные\Преподаватели"); int i = 1; foreach (string s in dirs) { Console.WriteLine(" " + System.IO.Path.GetFileNameWithoutExtension(s)); i++; } if (i == 1) { Console.WriteLine("Преподавателей нет!"); Thread.Sleep(1500); Admin_panel(); } Console.Write("Введите логин преподавателя, который желаете изменить: "); string red_login = Console.ReadLine(); if (!System.IO.File.Exists(path11 + @"\Данные\Преподаватели\" + red_login + ".dat")) { Console.WriteLine("Error"); Thread.Sleep(2000); Console.Clear(); goto stt; } else { Console.Clear(); st: string fam = "", ima = "", otch = " "; Console.Write("Введите фамилию преподавателя: "); fam = Console.ReadLine(); Console.Write("Введите имя преподавателя: "); ima = Console.ReadLine(); Console.Write("Введите отчество преподавателя: "); otch = Console.ReadLine(); if (fam == "" || ima == "" || !Regex.IsMatch(fam, @"^[а-яА-Я]+$") || !Regex.IsMatch(ima, @"^[а-яА-Я]+$") || Regex.IsMatch(fam, @"^[a-zA-Z]+$") || Regex.IsMatch(ima, @"^[a-zA-Z]+$") || fam.Contains(" ") || ima.Contains(" ")) { Console.WriteLine("Вы не ввели фамилию или имя!"); Thread.Sleep(2000); Console.Clear(); goto st; } string st_login = "", st_pas = ""; r1: Console.Write("Введите логин преподавателя: "); st_login = Console.ReadLine(); if (st_login == "" || st_login == " " || st_login == null || Regex.IsMatch(st_login, @"^[а-яА-Я]+$") || st_login.Contains(" ") || st_login.Length < 2) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r1; } DirectoryInfo dir2 = new DirectoryInfo(path11 + @"\Данные\Преподаватели"); foreach (var item in dir2.GetFiles()) { if (st_login + ".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } dir2 = new DirectoryInfo(path11 + @"\Данные\Студенты"); foreach (var item in dir2.GetFiles()) { if (st_login + ".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } r2: Console.Write("Введите пароль преподавателя: "); st_pas = Console.ReadLine(); if (st_pas == "" || st_pas == " " || st_pas == null || Regex.IsMatch(st_pas, @"^[а-яА-Я]+$") || st_pas.Contains(" ") || st_pas.Length < 5) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r2; } System.IO.File.Delete(path11 + @"\Данные\Преподаватели\" + red_login + ".dat"); if (File.Exists(path11 + @"\Данные\Преподаватели\ДР\"+red_login+".dat")) File.Delete(path11 + @"\Данные\Преподаватели\ДР\" + red_login + ".dat"); BinaryWriter writer = new BinaryWriter(File.Open(path11 + @"\Данные\Преподаватели\" + st_login + ".dat", FileMode.OpenOrCreate)); writer.Write(fam); writer.Write(ima); writer.Write(otch); writer.Write(st_login); writer.Write(st_pas); writer.Close(); } } if (vib == "2") { stt: Console.Clear(); Console.WriteLine("Логины: "); string[] dirs = Directory.GetFiles(path11 + @"\Данные\Студенты"); int i = 1; foreach (string s in dirs) { Console.WriteLine(" " + System.IO.Path.GetFileNameWithoutExtension(s)); i++; } if (i == 1) { Console.WriteLine("Студентов нет!"); Thread.Sleep(1500); Admin_panel(); } Console.Write("Введите логин студента, который желаете изменить: "); string red_login = Console.ReadLine(); if (!System.IO.File.Exists(path11 + @"\Данные\Студенты\" + red_login + ".dat")) { Console.WriteLine("Error"); Thread.Sleep(2000); Console.Clear(); goto stt; } else { Console.Clear(); again: Console.WriteLine("Группы: "); string[] dirs1 = Directory.GetDirectories(path11 + @"\Данные\Журналы"); foreach (string s in dirs1) { int i1 = 1; Console.WriteLine(" " + s); i1++; } Console.WriteLine(); Console.Write("Введите группу, куда будет зачислен студент: "); string gr = Console.ReadLine(); if (!System.IO.Directory.Exists(path11 + @"\Данные\Журналы\" + gr)) { Console.WriteLine("Данная учебная группа не существет"); Thread.Sleep(2000); Console.Clear(); goto again; } st: string fam = "", ima = "", otch = " "; Console.Write("Введите фамилию студента: "); fam = Console.ReadLine(); Console.Write("Введите имя студента: "); ima = Console.ReadLine(); Console.Write("Введите отчество студента: "); otch = Console.ReadLine(); if (fam == "" || ima == "" || !Regex.IsMatch(fam, @"^[а-яА-Я]+$") || !Regex.IsMatch(ima, @"^[а-яА-Я]+$") || Regex.IsMatch(fam, @"^[a-zA-Z]+$") || Regex.IsMatch(ima, @"^[a-zA-Z]+$") || fam.Contains(" ") || ima.Contains(" ")) { Console.WriteLine("Вы не ввели фамилию или имя!"); Thread.Sleep(2000); Console.Clear(); goto st; } string st_login = "", st_pas = ""; r1: Console.Write("Введите логин студента: "); st_login = Console.ReadLine(); if (st_login == "" || st_login == " " || st_login == null || Regex.IsMatch(st_login, @"^[а-яА-Я]+$") || st_login.Contains(" ") || st_login.Length < 2) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r1; } DirectoryInfo dir2 = new DirectoryInfo(path11 + @"\Данные\Студенты"); foreach (var item in dir2.GetFiles()) { if (st_login + ".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } dir2 = new DirectoryInfo(path11 + @"\Данные\Преподаватели"); foreach (var item in dir2.GetFiles()) { if (st_login + ".dat" == item.Name) { Console.WriteLine("Логин уже существует!!"); goto r1; } } r2: Console.Write("Введите пароль студента: "); st_pas = Console.ReadLine(); if (st_pas == "" || st_pas == " " || st_pas == null || Regex.IsMatch(st_pas, @"^[а-яА-Я]+$") || st_pas.Contains(" ") || st_pas.Length < 5) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r2; } if (st_pas.Contains(" ")) { Console.WriteLine("Error!"); Thread.Sleep(2000); goto r2; } string ima1 = "", gr1 = "", fam1 = "", otch1 = ""; i = 0; BinaryReader reader = new BinaryReader(File.Open(path11 + @"\Данные\Студенты\" + red_login+ ".dat", FileMode.Open)); while (reader.PeekChar() > -1) { string name = reader.ReadString(); if (i == 0) gr1 = name; if (i == 1) fam1 = name; if (i == 2) ima1 = name; if (i == 3) otch1 = name; i++; } reader.Close(); Directory.Delete(path11 + @"\Данные\Журналы\" + gr1 + @"\" + fam1 + " " + ima1 + " " + otch1); System.IO.File.Delete(path11 + @"\Данные\Студенты\" + red_login + ".dat"); if (File.Exists(path11 + @"\Данные\Студенты\ДР\" + red_login + ".dat")) System.IO.File.Delete(path11 + @"\Данные\Студенты\ДР\" + red_login + ".dat"); Directory.CreateDirectory(path11 + @"\Данные\Журналы\" + gr + @"\" + fam + " " + ima + " " + otch); BinaryWriter writer = new BinaryWriter(File.Open(path11 + @"\Данные\Студенты\" + st_login + ".dat", FileMode.OpenOrCreate)); writer.Write(gr); writer.Write(fam); writer.Write(ima); writer.Write(otch); writer.Write(st_login); writer.Write(st_pas); writer.Close(); } } } public void Journal() { string path11 = Directory.GetCurrentDirectory(); again: Console.WriteLine("Группы: "); DirectoryInfo dirs1 = new DirectoryInfo(path11 + @"\Данные\Журналы\"); int j = 1; string[] nums3 = new string[100]; foreach (var item in dirs1.GetDirectories()) { nums3[j] = item.Name; Console.WriteLine(" " + nums3[j]); j++; } Console.WriteLine(); string gr = ""; if (j == 1) { Console.WriteLine("Нет групп!"); Thread.Sleep(2000); Admin_panel(); } if (j > 1) { Console.Write("Введите группу, журнал которой надо отобразить: "); gr = Console.ReadLine(); if (!System.IO.Directory.Exists(path11 + @"\Данные\Журналы\" + gr)) { Console.WriteLine("Данная учебная группа не существет"); Thread.Sleep(2000); Console.Clear(); goto again; } } Console.Clear(); Console.WriteLine("Студенты группы:"); int[] checker3 = new int[100]; student: string[] nums = new string[35]; DirectoryInfo dir = new DirectoryInfo(path11 + @"\Данные\Журналы\"+gr); j = 1; foreach (var item in dir.GetDirectories()) { nums[j] = item.Name; Console.WriteLine(j+") "+nums[j]); checker3[j] = j; j++; } int j1 = 0; if (j==1) { Console.WriteLine("У данной учебной группы нет студентов!"); Thread.Sleep(2000); Admin_panel(); } if (j > 1) { Console.Write("Введите номер студента: "); j1 = Convert.ToInt32(Console.ReadLine()); if (nums[j1] == "" || nums[j1] == null) { Console.WriteLine("Error!"); goto student; } } bool flag1 = false; for (int i1 = 0; i1 < j; ++i1) { if (checker3[i1] == j1) { flag1 = true; } } if (flag1 == false) { Console.WriteLine("Error"); Thread.Sleep(2000); goto student; } /*----*/ stud_dis: Console.Clear(); string[] nums2 = new string[35]; Console.WriteLine("Выберите дициплину:"); j = 1; DirectoryInfo dir1 = new DirectoryInfo(path11 + @"\Данные\Журналы\" + gr); foreach (var item in dir1.GetFiles()) { nums2[j] = item.Name; Console.WriteLine(j + ") " + Path.GetFileNameWithoutExtension(nums2[j])); checker3[j] = j; j++; } if (j==1) { Console.WriteLine("У данной учебной группы нет дисциплин!"); Thread.Sleep(2000); Admin_panel(); } int j2 = 0; if (j > 1) { Console.Write("Выбор: "); j2 = Convert.ToInt32(Console.ReadLine()); flag1 = false; for (int i1 = 0; i1 < j; ++i1) { if (checker3[i1] == j2 && checker3[i1] != 0) { flag1 = true; } } if (flag1 == false) { Console.WriteLine("Error"); Thread.Sleep(2000); goto stud_dis; } } /*-------*/ syt: Console.Clear(); Console.WriteLine("Выберите:"); Console.WriteLine("1. Просмотреть оценки студента по всем дисциплинам"); Console.WriteLine("2. Поставить новую оценку студенту по дисциплине "+ Path.GetFileNameWithoutExtension(nums2[j2])); Console.WriteLine("3. Изменить оценку студента"); Console.Write("Выбор: "); string vibor2 = Console.ReadLine(); if (vibor2 == "1") { Console.Clear(); Console.WriteLine("Оценки студента: " + nums[j1]); string path5 = path11 + @"\Данные\Журналы\" + gr + @"\" + nums[j1]; int j3 = 0; string[] nums5 = new string[100]; DirectoryInfo dir5 = new DirectoryInfo(path5); foreach (var item in dir5.GetFiles()) { nums5[j3] = item.Name; j3++; } string otbr1 = "", otbr2 = "", otbr3 = ""; int i = 0; if (j3 != 0) { hhj: BinaryReader reader = new BinaryReader(File.Open(path11 + @"\Данные\Журналы\" + gr + @"\" + nums[j1] + @"\" + nums5[i], FileMode.Open)); int h = 0; while (reader.PeekChar() > -1) { string name = reader.ReadString(); if (h == 0) otbr1 = name; if (h == 1) otbr2 = name; if (h == 2) otbr3 = name; h++; if (h == 3) { Console.WriteLine("По дисциплине " + otbr1 + " оценка " + otbr2 + " за " + otbr3); } } if (i < j3) { i++; if (i >= j3) { reader.Close(); Thread.Sleep(10000); Console.Clear(); Admin_panel(); } else { reader.Close(); goto hhj; } } } if (j3 == 0) { Console.WriteLine("Оценок нет!"); Thread.Sleep(3000); Console.Clear(); Admin_panel(); } } if (vibor2=="2") { starty: Console.Clear(); Console.Write("Введите оценку: "); string otchenka = Convert.ToString(Console.ReadLine()); if (otchenka == "2" || otchenka == "3" || otchenka == "4" || otchenka == "5") { goto lolik; } else { Console.WriteLine("В нашей шараге используется 5-бальная система (от 2 до 5)!"); Thread.Sleep(2000); goto starty; } lolik: Console.Write("Введите дату (если сегодня, то нажмите Enter): "); string data = Console.ReadLine(); DateTime dt = DateTime.Now; if (data == "" || data == null) { data = dt.ToShortDateString(); } Console.WriteLine(); Console.WriteLine("Вы поставили оценку " + otchenka + " по дисциплине " + Path.GetFileNameWithoutExtension(nums2[j2]) + " за " + data+" студенту "+ nums[j1]); string path2 = path11 + @"\Данные\Журналы\"+gr+@"\"+nums[j1]+@"\"+data+" "+ Path.GetFileNameWithoutExtension(nums2[j2])+".dat"; if (File.Exists(path2)) { File.Delete(path2); BinaryWriter writer = new BinaryWriter(File.Open(path2, FileMode.OpenOrCreate)); writer.Write(Path.GetFileNameWithoutExtension(nums2[j2])); writer.Write(otchenka); writer.Write(data); writer.Close(); Thread.Sleep(4500); Admin_panel(); } if (!File.Exists(path2)) { BinaryWriter writer = new BinaryWriter(File.Open(path2, FileMode.OpenOrCreate)); writer.Write(Path.GetFileNameWithoutExtension(nums2[j2])); writer.Write(otchenka); writer.Write(data); writer.Close(); Thread.Sleep(4500); Admin_panel(); } } if (vibor2 == "3") { Console.Clear(); Console.WriteLine("Оценки студента: " + nums[j1]); string path5 = path11 + @"\Данные\Журналы\" + gr + @"\" + nums[j1]; int j3 = 0; string[] nums5 = new string[100]; DirectoryInfo dir5 = new DirectoryInfo(path5); foreach (var item in dir5.GetFiles()) { nums5[j3] = item.Name; j3++; } string otbr1 = "", otbr2 = "", otbr3 = ""; int i = 0; int[] checker1 = new int[100]; int g2 = 0; hhj: BinaryReader reader = new BinaryReader(File.Open(path11 + @"\Данные\Журналы\" + gr + @"\" + nums[j1] + @"\" + nums5[i], FileMode.Open)); int h = 0; while (reader.PeekChar() > -1) { string name = reader.ReadString(); if (h == 0) otbr1 = name; if (h == 1) otbr2 = name; if (h == 2) otbr3 = name; h++; if (h == 3) { Console.WriteLine(i+") По дисциплине " + otbr1 + " оценка " + otbr2 + " за " + otbr3); checker1[g2] = i; g2++; } } if (i < j3) { i++; if (i >= j3) { reader.Close(); agg2: Console.Write("Введите номер оценки, котрый надо изменить: "); int vibb = Convert.ToInt32(Console.ReadLine()); flag1 = false; for (int i1 = 0; i1 < g2; ++i1) { if (checker1[i1] == vibb) { flag1 = true; } } if (flag1 == false) { Console.WriteLine("Error"); Thread.Sleep(2000); goto agg2; } System.IO.File.Delete(path11 + @"\Данные\Журналы\" + gr + @"\" + nums[j1]+@"\"+nums5[vibb]); starty: Console.Clear(); Console.Write("Введите оценку: "); string otchenka = Convert.ToString(Console.ReadLine()); if (otchenka == "2" || otchenka == "3" || otchenka == "4" || otchenka == "5") { goto lolik; } else { Console.WriteLine("В нашей шараге используется 5-бальная система (от 2 до 5)!"); Thread.Sleep(2000); goto starty; } lolik: Console.Write("Введите дату (если сегодня, то нажмите Enter): "); string data = Console.ReadLine(); DateTime dt = DateTime.Now; if (data == "" || data == null) { data = dt.ToShortDateString(); } Console.WriteLine(); Console.WriteLine("Вы поставили оценку " + otchenka + " по дисциплине " + Path.GetFileNameWithoutExtension(nums2[j2]) + " за " + data + " студенту " + nums[j1]); string path2 = path11 + @"\Данные\Журналы\" + gr + @"\" + nums[j1] + @"\" + data + " " + Path.GetFileNameWithoutExtension(nums2[j2]) + ".dat"; if (File.Exists(path2)) { File.Delete(path2); BinaryWriter writer = new BinaryWriter(File.Open(path2, FileMode.OpenOrCreate)); writer.Write(Path.GetFileNameWithoutExtension(nums2[j2])); writer.Write(otchenka); writer.Write(data); writer.Close(); Thread.Sleep(4500); Admin_panel(); } if (!File.Exists(path2)) { BinaryWriter writer = new BinaryWriter(File.Open(path2, FileMode.OpenOrCreate)); writer.Write(Path.GetFileNameWithoutExtension(nums2[j2])); writer.Write(otchenka); writer.Write(data); writer.Close(); Thread.Sleep(4500); Admin_panel(); } } else { reader.Close(); goto hhj; } } } if (vibor2 != "3" || vibor2 != "2" || vibor2 != "1") { Console.WriteLine("Error!"); Thread.Sleep(2500); Console.Clear(); goto syt; } } } }