예제 #1
0
        private static string TryMark(int parametersCount, CommandParameters commandParameters, ref string modificationCompletedStatement)
        {
            modificationCompletedStatement = null;

            if (parametersCount < 1)
            {
                return("Chcesz `dodać` czy `wyświetlić` oceny? Wpisz odpowiednią komendę...");
            }

            string addToSubject = null;

            if (parametersCount > 1)
            {
                addToSubject = commandParameters.Parameters[1];
            }

            if (new Regex("(dodaj)|d$").IsMatch(commandParameters.Parameters[0].Trim()))
            {
                if (parametersCount < 4)
                {
                    return("Brakuje jednego z argumentów. Pamietaj o `nazwie` i `wadze` przedmiotu!");
                }

                if (!float.TryParse(commandParameters.Parameters[2], out float ocena))
                {
                    return("Problem z castowaniem `oceny`");
                }

                if (!sbyte.TryParse(commandParameters.Parameters[3], out sbyte waga))
                {
                    return("Problem z castowaniem `wagi oceny`");
                }

                if (_subjects.ContainsKey(addToSubject))
                {
                    _subjects[addToSubject].AddNewMark(ocena, waga);
                    modificationCompletedStatement = "Poprawnie dodano ocene!";

                    return("Dodawanie oceny...");
                }
                else
                {
                    return("Taki przedmiot nie istnieje");
                }
            }
            else if (new Regex("(wy[s|ś]wietl)|w$").IsMatch(commandParameters.Parameters[0].Trim()))
            {
                if (addToSubject != null)
                {
                    if (!_subjects.ContainsKey(addToSubject))
                    {
                        return("Brak poprawnego przedmiotu do wyświetlenia");
                    }
                }

                StringBuilder resultToSend = new StringBuilder();

                foreach (var subject in _subjects)
                {
                    Subject currentSubject = subject.Value;

                    if (addToSubject == null)
                    {
                        resultToSend.Append($"{currentSubject.ShowSubjectDetails(true)}");
                    }
                    else
                    {
                        if (subject.Key == addToSubject)
                        {
                            return(currentSubject.ShowSubjectDetails());
                        }
                    }
                }

                if (resultToSend.Length > 2000)
                {
                    return("Nie można wyświetlić wszystkich ocen ze względu na ograniczenia ilości znaków");
                }
                else if (resultToSend.Length == 0)
                {
                    return("Brak ocen do wyświetlenia");
                }

                return(resultToSend.ToString());
            }
            else if (new Regex("(archiwum)|a$").IsMatch(commandParameters.Parameters[0].Trim()))
            {
                if (parametersCount > 1)
                {
                    if (new Regex("(semestry)|s$").IsMatch(commandParameters.Parameters[1].Trim()))
                    {
                        StringBuilder toReturn = new StringBuilder();

                        foreach (var subject in _subjects)
                        {
                            toReturn.AppendLine($"Dla przedmiotu: {subject.Key} {subject.Value.GetAllTerms()}");
                        }

                        return(toReturn.ToString());
                    }

                    if (parametersCount > 3)
                    {
                        if (!Int32.TryParse(commandParameters.Parameters[2], out int yearNo))
                        {
                            return("Problem z castowaniem `numeru roku`");
                        }

                        if (!Int32.TryParse(commandParameters.Parameters[3], out int termNo))
                        {
                            return("Problem z castowaniem `numeru semestru`");
                        }


                        if (new Regex("(wyswietl)|w$").IsMatch(commandParameters.Parameters[1].Trim()))
                        {
                            StringBuilder toReturn = new StringBuilder();

                            foreach (var subject in _subjects)
                            {
                                toReturn.Append(_subjects[subject.Key].GetArchivizedMarks(new Term(yearNo, termNo)));
                            }

                            return(toReturn.ToString());
                        }
                        else if (new Regex("(archiwizuj)|a$").IsMatch(commandParameters.Parameters[1].Trim()))
                        {
                            bool isSomethingArchived = false;

                            foreach (var subject in _subjects)
                            {
                                if (_subjects[subject.Key].IsTermArchived(new Term(yearNo, termNo)))
                                {
                                    modificationCompletedStatement += $"Przedmiot {subject.Key} już został zarchiwizowany dla takiego semestru! \n";
                                    continue;
                                }

                                _subjects[subject.Key].ArchivizeMarks(yearNo, termNo);
                                isSomethingArchived = true;
                            }

                            if (isSomethingArchived)
                            {
                                modificationCompletedStatement += "\n\nZarchiwizowano!";
                            }
                            else
                            {
                                modificationCompletedStatement += "\n\nNie było czego archiwizować!";
                            }

                            return("Archiwizacja ocen...\n\n");
                        }
                    }
                    else
                    {
                        return("Podano za mało parametrów! Template: *a w/a <numer_roku> <numer_semestru>");
                    }
                }
                else
                {
                    return("Nie podano pocji dla *archiwum*");
                }
            }

            return("Nieznany błąd *TryMark()*");
        }