Exemple #1
0
        private void DockPanel_ActiveContentChanged(object sender, DockContentEventArgs e)
        {
            if (!_contents.Contains(e.Content))
            {
                return;
            }

            if (e.Content == VisibleContent)
            {
                VisibleContent.Focus();
                return;
            }

            VisibleContent = e.Content;

            foreach (CrownDockContent content in _contents)
            {
                content.Visible = content == VisibleContent;
            }

            VisibleContent.Focus();

            EnsureVisible();
            Invalidate();
        }
        private void AddExamGradesView()
        {
            Console.Clear();
            Console.Title = "---ADD EXAM GRADES---";
            Console.WriteLine("Choose a student's ID");
            ListOfStudentsView();
            int.TryParse(Console.ReadLine(), out var studentId);
            if (Students.All(x => x.ID != studentId))
            {
                return;
            }
            Console.WriteLine($"You have chosen: {Students.FirstOrDefault(x => x.ID == studentId)?.FirstName} " +
                              $"{Students.FirstOrDefault(x => x.ID == studentId)?.LastName}");
            Console.WriteLine("Grade student's exam");

            while (!AddGrade(studentId, true))
            { /*Simply go till u have a grade*/
            }
            VisibleContent = VisibleContent.MainMenu;
        }
        private void RemoveStudentView()
        {
            Console.Clear();
            Console.Title = "---REMOVE STUDENT---";
            Console.WriteLine("Choose a student's ID");
            Console.WriteLine("Type 'STOP' to return to main menu");
            ListOfStudentsView();
            var result = Console.ReadLine();

            if (result?.ToUpper() == "STOP")
            {
                VisibleContent = VisibleContent.MainMenu;
                return;
            }
            int.TryParse(result, out var studentId);
            if (Students.All(x => x.ID != studentId))
            {
                return;
            }
            Console.WriteLine($"Are you sure you want to remove: " +
                              $"{Students.FirstOrDefault(x => x.ID == studentId)?.FirstName} " +
                              $"{Students.FirstOrDefault(x => x.ID == studentId)?.LastName}");
            Console.WriteLine("Y - yes\nN - no");
            var delete = false;

            while (true)
            {
                if (!IsAcceptOrDecline(Console.ReadLine(), out var answer))
                {
                    continue;
                }
                delete = answer;
                break;
            }

            if (delete)
            {
                Students.Remove(Students.FirstOrDefault(x => x.ID == studentId));
            }
            VisibleContent = VisibleContent.MainMenu;
        }
        private void ListOfStudentsView(bool showAverages = false)
        {
            if (showAverages)
            {
                Console.Clear();
                Console.WriteLine("---LIST OF STUDENTS---");
                Console.WriteLine($"{TextFormatter.TabulatedText("Vardas")}" +
                                  $"{TextFormatter.TabulatedText("Pavarde")}" +
                                  $"{TextFormatter.TabulatedText("Galutinis (vid.)")}" +
                                  $"{TextFormatter.TabulatedText("Galutinis (med.)")}");
                foreach (var student in Students.OrderBy(x => x.FirstName).ThenBy(x => x.LastName))
                {
                    var stAverage     = Math.Round(student.Average, 2);
                    var studentGrades = new List <double>(student.HomeworkGrades)
                    {
                        student.ExamGrade
                    };
                    studentGrades = studentGrades.OrderBy(x => x).ToList();
                    var gradeCount = studentGrades.Count;

                    var stMedian = gradeCount % 2 == 0
                        ? (studentGrades[gradeCount / 2] + studentGrades[(gradeCount / 2) + 1]) / 2
                        : studentGrades[gradeCount / 2];

                    Console.Write($"{TextFormatter.TabulatedText(student.FirstName)}" +
                                  $"{TextFormatter.TabulatedText(student.LastName)}" +
                                  $"{TextFormatter.TabulatedText(stAverage.ToString(CultureInfo.InvariantCulture))}" +
                                  $"{TextFormatter.TabulatedText(stMedian.ToString(CultureInfo.InvariantCulture))}\n");
                }
                Console.WriteLine("Press enter to go back");
                Console.ReadLine();
                VisibleContent = VisibleContent.MainMenu;
            }
            else
            {
                foreach (var student in Students)
                {
                    Console.Write($"{TextFormatter.TabulatedText(student.ID.ToString())}{TextFormatter.TabulatedText(student.FirstName)}{TextFormatter.TabulatedText(student.LastName)}\n");
                }
            }
        }
        private void AddStudentView()
        {
            Console.Title = "Add student";
            Console.Clear();
            Console.WriteLine($"\n---ADD STUDENT---");
            Console.WriteLine($"Type in a student's name and surname to add it to the list\nTo stop - type 'STOP'\n");

            var input = Console.ReadLine();

            if (string.IsNullOrEmpty(input))
            {
                return;
            }

            if (input?.ToUpper() == "STOP")
            {
                VisibleContent = VisibleContent.MainMenu;
                return;
            }

            var inputSplit = input?.Split(" ");

            if (inputSplit.Length <= 1)
            {
                return;
            }

            if (string.IsNullOrEmpty(input?.Split(" ")?[0]) ||
                string.IsNullOrEmpty(input?.Split(" ")?[1]))
            {
                return;
            }

            AddStudent(input?.Split(" ")?[0], input?.Split(" ")?[1], out var exists);
            if (!exists)
            {
                return;
            }
            Console.WriteLine($"Student with such first name and last name already exists.");
            Console.ReadLine();
        }
        private void AddHomeworkGradesView()
        {
            Console.Clear();
            Console.Title = "---ADD HOMEWORK GRADES---";
            Console.WriteLine("Choose a student's ID");
            Console.WriteLine("Type 'STOP' to return to main menu");
            ListOfStudentsView();
            var response = Console.ReadLine();

            if (response?.ToUpper() == "STOP")
            {
                VisibleContent = VisibleContent.MainMenu;
                return;
            }
            int.TryParse(response, out var studentId);
            if (Students.All(x => x.ID != studentId))
            {
                return;
            }
            Console.WriteLine($"You have chosen: {Students.FirstOrDefault(x => x.ID == studentId)?.FirstName} " +
                              $"{Students.FirstOrDefault(x => x.ID == studentId)?.LastName}");
            Console.WriteLine("Grade student's homework");
            var result = "";

            while ((result = Console.ReadLine()?.ToLower()) != "stop")
            {
                if (double.TryParse(result, out var grade))
                {
                    if (grade >= 1 && grade <= 10)
                    {
                        Students.FirstOrDefault(x => x.ID == studentId)?.HomeworkGrades.Add(grade);
                    }
                }
            }
            VisibleContent = VisibleContent.MainMenu;
        }
        private void GenerateStudentsView()
        {
            Console.Clear();
            Console.Title = "---GENERATE STUDENTS---";
            Console.WriteLine("Choose a number of student's to generate\nType 'STOP' to exit");

            Console.WriteLine("1. 1 000");
            Console.WriteLine("2. 10 000");
            Console.WriteLine("3. 100 000");
            Console.WriteLine("4. 1 000 000");
            Console.WriteLine("5. 10 000 000");

            var select = Console.ReadLine();

            if (select?.ToLower() == "stop")
            {
                VisibleContent = VisibleContent.MainMenu;
                return;
            }

            if (!int.TryParse(select, out var selectedNo))
            {
                GenerateStudentsView();
            }

            var directoryInfo = Directory
                                .GetParent(Directory.GetParent(Directory.GetCurrentDirectory()).FullName).Parent;

            if (directoryInfo == null)
            {
                return;
            }
            var studGenerator = StudentsGenerator.New(Path.Combine(directoryInfo.FullName, "data"));

            Console.WriteLine("Do you wish to order the full file using different methods? Y/N");
            var orderText = Console.ReadLine();

            Console.WriteLine("Do you wish to split and order the full file using different methods? Y/N");
            var splitAndOrderText = Console.ReadLine();
            var selectedCount     = 0;

            switch (selectedNo)
            {
            case 1:
                studGenerator.GenerateStudents(1000);
                selectedCount = 1000;
                break;

            case 2:
                studGenerator.GenerateStudents(10000);
                selectedCount = 10000;
                break;

            case 3:
                studGenerator.GenerateStudents(100000);
                selectedCount = 100000;
                break;

            case 4:
                studGenerator.GenerateStudents(1000000);
                selectedCount = 1000000;
                break;

            case 5:
                studGenerator.GenerateStudents(10000000);
                selectedCount = 10000000;
                break;
            }

            if (orderText?.ToLower() == "y")
            {
                var stopwatch = new Stopwatch();
                stopwatch.Start();
                FilesManager.OrderStudentsWithList(Path.Combine(directoryInfo.FullName, "data"), StudentsGenerator.AllStudentsFileName, selectedCount);
                stopwatch.Stop();
                Console.WriteLine($"Ordering with list took: {stopwatch.Elapsed}");
                stopwatch.Reset();
                stopwatch.Start();
                FilesManager.OrderStudentsWithLinkedList(Path.Combine(directoryInfo.FullName, "data"), StudentsGenerator.AllStudentsFileName, selectedCount);
                stopwatch.Stop();
                Console.WriteLine($"Ordering with linked list took: {stopwatch.Elapsed}");
                stopwatch.Reset();
                stopwatch.Start();
                FilesManager.OrderStudentsWithQueue(Path.Combine(directoryInfo.FullName, "data"), StudentsGenerator.AllStudentsFileName, selectedCount);
                stopwatch.Stop();
                Console.WriteLine($"Ordering with queue took: {stopwatch.Elapsed}");
            }

            if (splitAndOrderText?.ToLower() == "y")
            {
                var stopwatch = new Stopwatch();
                stopwatch.Start();
                FilesManager.SplitStudentsWithList(Path.Combine(directoryInfo.FullName, "data"), StudentsGenerator.AllStudentsFileName, selectedCount);
                stopwatch.Stop();
                Console.WriteLine($"Split with list took: {stopwatch.Elapsed}");
                stopwatch.Reset();
                stopwatch.Start();
                FilesManager.SplitStudentsWithLinkedList(Path.Combine(directoryInfo.FullName, "data"), StudentsGenerator.AllStudentsFileName, selectedCount);
                stopwatch.Stop();
                Console.WriteLine($"Split with linked list took: {stopwatch.Elapsed}");
                stopwatch.Reset();
                stopwatch.Start();
                FilesManager.SplitStudentsWithQueue(Path.Combine(directoryInfo.FullName, "data"), StudentsGenerator.AllStudentsFileName, selectedCount);
                stopwatch.Stop();
                Console.WriteLine($"Split with queue took: {stopwatch.Elapsed}");
            }

            Console.ReadLine();
            VisibleContent = VisibleContent.MainMenu;
        }
        private void ImportStudentsView()
        {
            try
            {
                var directoryInfo = Directory
                                    .GetParent(Directory.GetParent(Directory.GetCurrentDirectory()).FullName).Parent;
                if (directoryInfo == null)
                {
                    return;
                }

                var workingDirectory = directoryInfo.FullName;
                var dataFolder       = Path.Combine(workingDirectory, "data");
                var studentsFile     = Path.Combine(dataFolder, "students.txt");


                var studentsFileLines = File.ReadLines(studentsFile).ToList();
                var firstRow          = true;
                var columns           = new List <string>();
                foreach (var line in studentsFileLines)
                {
                    if (firstRow)
                    {
                        columns  = TextFormatter.FormatLineFromFile(line);
                        firstRow = false;
                        continue;
                    }

                    var stColumns = TextFormatter.FormatLineFromFile(line);

                    var studId = AddStudent(stColumns[0], stColumns[1], out var exists);
                    if (exists)
                    {
                        foreach (var student in Students.Where(student => student.ID == studId))
                        {
                            student.HomeworkGrades = new List <double>();
                            student.ExamGrade      = double.NaN;
                        }
                    }

                    foreach (var column in columns.Where(x => x.Contains("ND")))
                    {
                        try
                        {
                            AddGrade(studId, false, double.Parse(stColumns[columns.IndexOf(column)]));
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine($"\nGenerated message:\n{e.Message}");
                            Console.WriteLine($"\nStack trace:\n{e.StackTrace}");


                            Console.WriteLine("\n\nContinue with skipping this grade? Y/N");
                            var answer = Console.ReadLine();
                            if (answer?.ToLower() != "y")
                            {
                                Students = Students.Where(student =>
                                {
                                    return(!studentsFileLines.Any(stLine =>
                                    {
                                        var stLineFormatted = TextFormatter.FormatLineFromFile(stLine);
                                        return stLineFormatted[0] == student.FirstName &&
                                        stLineFormatted[1] == student.LastName;
                                    }));
                                }).ToList();
                                throw;
                            }
                            else
                            {
                                continue;
                            }
                        }
                    }

                    var examIndex = columns.IndexOf("Egzaminas");
                    AddGrade(studId, true, double.Parse(stColumns[examIndex]));
                }
            }
            catch (Exception e)
            {
                e.Data.Add("ImportStudents",
                           "Error possibly due to the directory not having the correct document, or it being incorrect itself");
                var directoryInfo = Directory.GetParent(Directory.GetParent(Directory.GetCurrentDirectory()).FullName).Parent;
                if (directoryInfo != null)
                {
                    e.Data.Add("Requirements",
                               $"a folder called 'data' withing working directory (currently {directoryInfo.FullName}) with a file" +
                               $" called 'students.txt'");
                }
                else
                {
                    e.Data.Add("Requirements",
                               $"a folder called 'data' withing working directory  with a file called 'students.txt'");
                }
                throw;
            }
            finally
            {
                VisibleContent = VisibleContent.MainMenu;
            }
        }
 public StudentsManager()
 {
     Working        = true;
     VisibleContent = VisibleContent.MainMenu;
     Students       = new List <Student>();
 }
Exemple #10
0
        private void MainMenuView()
        {
            Console.Title = $"Main Menu";
            Console.Clear();
            Console.WriteLine($"\n---MAIN MENU---");
            // Console.WriteLine($"Program automatically adds 3 students by default. Comment out line 33 in StudentsManager.cs to prevent it from doing it.\n");

            Console.WriteLine($"Write a number and press enter to change the view\n");
            Console.WriteLine($"1. Add student(-s)");
            Console.WriteLine($"2. Add homework grades for a student");
            Console.WriteLine($"3. Add an exam grade for a student");
            Console.WriteLine($"4. List students with their averages");
            Console.WriteLine($"5. Remove student(-s)");
            Console.WriteLine($"6. Import students from file");
            Console.WriteLine($"7. Generate students");
            Console.WriteLine($"0. Exit");

            if (!int.TryParse(Console.ReadLine(), out int choice))
            {
                VisibleContent = VisibleContent.MainMenu;
                return;
            }

            switch (choice)
            {
            case 1:
                VisibleContent = VisibleContent.AddStudent;
                break;

            case 2:
                VisibleContent = VisibleContent.AddGradesHomework;
                break;

            case 3:
                VisibleContent = VisibleContent.AddGradesExam;
                break;

            case 4:
                VisibleContent = VisibleContent.ListOfStudents;
                break;

            case 5:
                VisibleContent = VisibleContent.RemoveStudent;
                break;

            case 6:
                VisibleContent = VisibleContent.StudentImport;
                break;

            case 7:
                VisibleContent = VisibleContent.StudentsGenerator;
                break;

            case 0:
                Working = false;
                break;

            default:
                VisibleContent = VisibleContent.MainMenu;
                break;
            }
        }