public static Competition GetInstance() { if (instance == null) instance = new Competition(); return instance; }
/// <summary> /// Funkcija koja proglašava pobjednike i stvara datoteku rezultata /// </summary> /// <param name="competition">Singleton natječaja iz kojeg se vuku podaci</param> void VictoryProclamation(Competition competition) { ArgumentHandler arguments = ArgumentHandler.GetInstance(); string resultFileName = (string)arguments.GetArgument("ResultFile"); string directoryLocation = DirectoryLocator.GetDirectory("Results", Directory.GetCurrentDirectory(), 0, 3); string resultFile = directoryLocation + "\\" + resultFileName; List<string> listOfCategories = competition.DownloadCategories(); List<Theme> listOfThemes = competition.DownloadThemess(); List<Registration> listOfRegistrations = competition.DownloadRegistrations(); List<Competitor> listOfCompetitors = competition.DownloadCompetitors(); using (StreamWriter sw = new StreamWriter(resultFile)) { #region Pobjednici po temama unutar kategorija sw.WriteLine("Pobjednici po temama unutar kategorija".ToUpper()); foreach (string category in listOfCategories) { sw.WriteLine(Indent(0) + "KATEGORIJA " + category + ":"); foreach(Theme theme in listOfThemes) { sw.WriteLine(Indent(1) + "TEMA " + theme.Name + ":"); List<Registration> disqualifiedRegistrations = new List<Registration>(); Dictionary<string, float> victoryCandidatesPerTheme = new Dictionary<string, float>(); foreach(Registration registration in listOfRegistrations) { if (!string.Equals(registration.Category, category) || !string.Equals(registration.Theme.Name, theme.Name)) continue; if (registration.IsDisqualified()) { disqualifiedRegistrations.Add(registration); continue; } sw.Write(Indent(2) + "NATJECATELJ " + registration.Competitor.Name); sw.Write(Indent(1) + registration.ID); foreach(KeyValuePair<string, int> score in registration.GetAllScores()) sw.Write(Indent(1) + score.Key + ": " + score.Value.ToString()); sw.WriteLine(Indent(1) + "UKUPNO: " + registration.FinalScore.ToString()); victoryCandidatesPerTheme.Add(registration.Competitor.Name, registration.FinalScore); } Dictionary<string, float> victorsPerTheme = VictoryHandler.GetVictors(victoryCandidatesPerTheme); Console.WriteLine("\nPobjednici u temi " + theme.Name + ", kategorija " + category + ": "); foreach (KeyValuePair<string, float> score in victorsPerTheme) Console.WriteLine(score.Key + ": " + score.Value.ToString()); sw.WriteLine(Indent(3) + "DISKVALIFICIRANE PRIJAVE"); foreach (Registration disqualifiedRegistration in disqualifiedRegistrations) { sw.Write(Indent(4) + disqualifiedRegistration.Competitor.Name); sw.WriteLine(Indent(1) + disqualifiedRegistration.ID); } } } #endregion #region Pobjednici po kategorijama sw.WriteLine(); sw.WriteLine("Pobjednici po kategorijama".ToUpper()); foreach (string category in listOfCategories) { sw.WriteLine(Indent(0) + "KATEGORIJA " + category + ":"); Dictionary<string, float> victoryCandidatesPerCategory = new Dictionary<string, float>(); foreach (Competitor competitor in listOfCompetitors) { sw.WriteLine(); sw.WriteLine(Indent(1) + "NATJECATELJ " + competitor.Name + ":"); float totalScore = 0; foreach (Registration registration in listOfRegistrations) { if (registration.IsDisqualified() || !string.Equals(registration.Category, category) || !string.Equals(registration.Competitor.Name, competitor.Name)) continue; sw.Write(Indent(2) + "TEMA " + registration.Theme.Name); sw.Write(Indent(2) + "PRIJAVA " + registration.ID); sw.WriteLine(Indent(2) + "UKUPNI BODOVI " + registration.GetFinalScore().ToString()); totalScore += registration.GetFinalScore(); } sw.WriteLine(Indent(1) + "UKUPNI BODOVI SVIH PRIJAVA: " + totalScore.ToString()); victoryCandidatesPerCategory.Add(competitor.Name, totalScore); } Dictionary<string, float> victorsPerCategory = VictoryHandler.GetVictors(victoryCandidatesPerCategory); Console.WriteLine("\nPobjednici u kategoriji " + category + ": "); foreach (KeyValuePair<string, float> score in victorsPerCategory) Console.WriteLine(score.Key + ": " + score.Value.ToString()); } #endregion #region Ukupni pobjednik sw.WriteLine(); sw.WriteLine("Ukupno".ToUpper()); Dictionary<string, float> victoryCandidates = new Dictionary<string, float>(); foreach (Competitor competitor in listOfCompetitors) { sw.WriteLine(); sw.WriteLine(Indent(0) + "NATJECATELJ " + competitor.Name + ":"); float globalScore = 0; foreach(string category in listOfCategories) { float totalScore = 0; foreach (Registration registration in listOfRegistrations) { if (!registration.IsDisqualified() && string.Equals(registration.Category, category) && string.Equals(registration.Competitor.Name, competitor.Name)) totalScore += registration.GetFinalScore(); } sw.Write(Indent(2) + category); sw.WriteLine(Indent(2) + "UKUPNI BODOVI: " + totalScore.ToString()); globalScore += totalScore; } sw.WriteLine(Indent(1) + "UKUPNI BODOVI NATJECATELJA: " + globalScore.ToString()); victoryCandidates.Add(competitor.Name, globalScore); } Dictionary<string, float> victors = VictoryHandler.GetVictors(victoryCandidates); Console.WriteLine("\nUkupni pobjednici: "); foreach (KeyValuePair<string, float> score in victors) Console.WriteLine(score.Key + ": " + score.Value.ToString()); #endregion } }