Перейти к основному содержимому

Общее задание

Введение

Конечные пользователи часто просят разработчиков добавить в приложение новые функции. Запросы пользователей указывают на то, что ваше приложение используется, и, что более важно, что клиент планирует продолжать использовать ваше приложение. Клиент просто хочет обновить некоторые функции. Возможность обновления существующего приложения на основе запросов пользователей очень важна. Успешное обновление сохранит целостность исходного приложения и одновременно предоставит пользователю улучшенные возможности.

Предположим, вы - помощник учителя в школе и разработали приложение для автоматизации процесса выставления оценок. В приложении используются массивы для хранения имен учеников и оцененных заданий. В приложении также реализована комбинация операторов итерации и выбора, чтобы вычислить и сообщить итоговую оценку каждого студента. Ваше приложение даже различает экзаменационные и дополнительные задания при подсчете оценок. Хотя приложение делает все, что просил учитель, вы получили запрос на новые функции. Учитель попросил вас обновить отчет оценок, чтобы оценки за экзамены и дополнительные задания отображались отдельно от итоговой числовой и буквенной оценки.

В этом модуле вам предстоит добавить новые возможности в приложение для выставления оценок студентам.

Вкратце, вам нужно использовать обновленную спецификацию отчета об оценке преподавателя, чтобы:

  • обновить код итерации и выбора для расчета отдельных итоговых оценок за экзамены, дополнительные задания и общую оценку.
  • обновить код, который записывает отчет об оценке в консоль.

К концу этого модуля у вас будет обновленная версия приложения Student Grading, способная вычислять и сообщать оценки учеников в соответствии с обновленными требованиями преподавателя.

Цели обучения

В этом модуле вы продемонстрируете свои способности:

  • использовать Visual Studio для редактирования консольного приложения C# на основе обновленной спецификации функции.
  • обновлять переменные и операторы if в консольном приложении C# для создания ветвей кода и вычислений, необходимых для удовлетворения обновленной спецификации функции.

Подготовка

В этом проекте вы будете использовать Visual Studio Code для разработки части консольного приложения на C#. Вы начнете с написания кода, выполняющего различные числовые вычисления. Все вычисления должны выполняться в рамках существующих структур итерации и выбора. В этом разделе "Подготовка" вы узнаете об общих целях проекта и требованиях к вашему приложению. В разделе Setup описано, как настроить среду разработки, включая стартовый проект кода.

Спецификация проекта

Проект стартового кода для этого модуля представляет собой консольное приложение на C#, в котором реализованы следующие возможности кода:

  • Использование массивов для хранения имен студентов и баллов за задания.

  • Используется оператор foreach для перебора имен студентов в качестве внешнего цикла программы.

  • Использует оператор if во внешнем цикле для определения имени текущего студента и доступа к его оценкам за задания.

  • С помощью оператора foreach во внешнем цикле выполните итерацию по массиву баллов за задания и просуммируйте их значения.

  • Использует алгоритм во внешнем цикле для вычисления среднего балла за экзамен для каждого студента.

  • Используйте конструкцию if-elseif-else во внешнем цикле для оценки среднего экзаменационного балла и автоматического присвоения буквенной оценки.

  • Интегрирует баллы за дополнительные зачеты при вычислении итогового балла и буквенной оценки студента следующим образом:

    • Определяет дополнительные зачетные задания по количеству элементов в массиве оценок студента.
    • Применяет 10-процентный весовой коэффициент к дополнительным зачетным заданиям перед добавлением дополнительных зачетных баллов к сумме экзаменационных оценок.

Ваша цель в этой задаче - реализовать обновления кода, необходимые для создания требуемого учителем отчета об оценках.

В текущем отчете об оценках указано имя ученика, затем вычисленная общая оценка и буквенная оценка. Вот существующий формат отчета:

Student         Grade   Letter Grade

Sophia 95.6 A
Andrew 91.6 A-
Emma 89.2 B+
Logan 93 A

Помимо итоговой числовой и буквенной оценки, учитель хочет, чтобы в обновленном отчете были указаны экзаменационные баллы и влияние дополнительных зачетов на итоговую оценку ученика. Формат обновленного отчета должен выглядеть следующим образом:

Student         Exam Score      Overall Grade   Extra Credit

Sophia 92.2 95.88 A 92 (3.68 pts)
Andrew 89.6 91.38 A- 89 (1.78 pts)
Emma 85.6 90.94 A- 89 (5.34 pts)
Logan 91.2 93.12 A 96 (1.92 pts)

Стартовый код

/* 
Это консольное приложение на C# предназначено для того что бы:
- Использовать массивы для хранения имен студентов и баллов за задания.
- Использовать оператор `foreach` для перебора имен студентов в качестве внешнего цикла программы.
- Используйте оператор `if` во внешнем цикле, чтобы определить имя текущего студента и получить доступ к его оценкам за задания.
- Используйте оператор `foreach` во внешнем цикле для перебора массива баллов за задания и суммирования значений.
- Используйте алгоритм во внешнем цикле для вычисления среднего балла за экзамен для каждого студента.
- Используйте конструкцию `if-elseif-else` во внешнем цикле для оценки среднего экзаменационного балла и автоматического присвоения буквенной оценки.
- Интегрируйте баллы за дополнительные задания при вычислении итогового балла и буквенной оценки студента следующим образом:
- определяет дополнительные зачетные задания по количеству элементов в массиве баллов студента.
- делит значения дополнительных зачетных заданий на 10, прежде чем добавить дополнительные зачетные баллы к сумме экзаменационных оценок.
- Используйте следующий формат отчета для отображения оценок студентов:

Student Grade

Sophia: 92.2 A-
Andrew: 89.6 B+
Emma: 85.6 B
Logan: 91.2 A-
*/
int examAssignments = 5;

string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };

int[] sophiaScores = new int[] { 90, 86, 87, 98, 100, 94, 90 };
int[] andrewScores = new int[] { 92, 89, 81, 96, 90, 89 };
int[] emmaScores = new int[] { 90, 85, 87, 98, 68, 89, 89, 89 };
int[] loganScores = new int[] { 90, 95, 87, 88, 96, 96 };

int[] studentScores = new int[10];

string currentStudentLetterGrade = "";

// отобразить строку заголовка для баллов/оценок
Console.Clear();
Console.WriteLine("Student\t\tGrade\tLetter Grade\n");

/*
Внешний цикл foreach используется для:
- перебора имен студентов
- присвоения оценок студента массиву studentScores
- суммирования оценок за задания (внутренний цикл foreach)
- вычислить числовые и буквенные оценки
- записать информацию в отчет об оценках
*/
foreach (string name in studentNames)
{
string currentStudent = name;

if (currentStudent == "Sophia")
studentScores = sophiaScores;

else if (currentStudent == "Andrew")
studentScores = andrewScores;

else if (currentStudent == "Emma")
studentScores = emmaScores;

else if (currentStudent == "Logan")
studentScores = loganScores;

int sumAssignmentScores = 0;

decimal currentStudentGrade = 0;

int gradedAssignments = 0;

/*
Внутренний цикл foreach суммирует баллы за задания
Дополнительные задания оцениваются в 10% от экзаменационного балла
*/
foreach (int score in studentScores)
{
gradedAssignments += 1;

if (gradedAssignments <= examAssignments)
sumAssignmentScores += score;

else
sumAssignmentScores += score / 10;
}

currentStudentGrade = (decimal)(sumAssignmentScores) / examAssignments;

if (currentStudentGrade >= 97)
currentStudentLetterGrade = "A+";

else if (currentStudentGrade >= 93)
currentStudentLetterGrade = "A";

else if (currentStudentGrade >= 90)
currentStudentLetterGrade = "A-";

else if (currentStudentGrade >= 87)
currentStudentLetterGrade = "B+";

else if (currentStudentGrade >= 83)
currentStudentLetterGrade = "B";

else if (currentStudentGrade >= 80)
currentStudentLetterGrade = "B-";

else if (currentStudentGrade >= 77)
currentStudentLetterGrade = "C+";

else if (currentStudentGrade >= 73)
currentStudentLetterGrade = "C";

else if (currentStudentGrade >= 70)
currentStudentLetterGrade = "C-";

else if (currentStudentGrade >= 67)
currentStudentLetterGrade = "D+";

else if (currentStudentGrade >= 63)
currentStudentLetterGrade = "D";

else if (currentStudentGrade >= 60)
currentStudentLetterGrade = "D-";

else
currentStudentLetterGrade = "F";

// Student Grade
// Sophia: 92.2 A-

Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t{currentStudentLetterGrade}");
}

// required for running in VS Code (keeps the Output windows open to view results)
Console.WriteLine("\n\rPress the Enter key to continue");
Console.ReadLine();

Упражнение - Обновление отформатированного вывода

Приложение Student Grading используется для расчета и формирования отчета об оценках студентов на основе их оценок за экзамен и дополнительные задания. Ваша цель в этой задаче - обновить код, который генерирует отчет об оценках в соответствии с обновленными требованиями преподавателя.

Спецификация

В этом первом задании вам нужно инстанцировать переменные, необходимые для обновленного отчета об оценках, а затем обновить оператор Console.WriteLine(), который выводит оценки учеников на консоль.

Ваше обновленное приложение должно:

  • использовать существующие массивы и значения массивов для всех вычислений оценок учеников.
  • использовать вложенную структуру, обеспечиваемую существующими операторами foreach и if.
  • Объявить и инициализировать любые другие целочисленные переменные, необходимые для вычисления сумм.
  • Объявить и инициализировать любые другие десятичные переменные, необходимые для вычислений и/или значений отчета об оценках.

Формат отчета о результатах обновления следующий:

Student         Exam Score      Overall Grade   Extra Credit

Sophia 0 95.8 A 0 (0 pts)
Andrew 0 91.2 A- 0 (0 pts)
Emma 0 90.4 A- 0 (0 pts)
Logan 0 93 A 0 (0 pts)
примечание

Поскольку это упражнение не включает в себя обновление вычислений, в отчете о результатах будет показан 0 для новых полей, как показано выше.

Упражнение - Обновление рассчитанных значений

Приложение Student Grading используется для вычисления и отображения оценок студентов на основе их оценок за экзамен и дополнительные задания. Ваша цель в этой задаче - обновить код, который вычисляет оценки студентов в соответствии с обновленными требованиями преподавателя.

Спецификация

В этом втором задании вам нужно инстанцировать переменные, необходимые для обновленного отчета об оценках, выполнить необходимые вычисления, а затем обновить оператор Console.WriteLine(), который записывает оценки учеников на консоль.

Ваше обновленное приложение должно:

  • использовать существующие массивы и значения массивов для всех вычислений оценок учеников.
  • использовать вложенную структуру, обеспечиваемую существующими операторами foreach и if.
  • вычислять сумму баллов за экзамены и дополнительные задания, используя переменные из первого упражнения или исходный код.
  • Вычислите среднее значение баллов за экзамен и дополнительные зачеты, используя переменные из первого упражнения или исходного кода.
  • вычислите итоговую цифровую оценку следующим образом: прибавьте 10 % от суммы баллов за дополнительные задания к сумме баллов за экзамены, а затем разделите это значение на количество экзаменов.
  • Вычислите дополнительные кредитные баллы следующим образом: разделите 10 % от суммы дополнительных кредитных баллов на количество экзаменов.
подсказка

Чтобы сохранить дробную составляющую при вычислениях, в уравнениях нужно использовать (decimal) запись.

Требуемый формат отчета о результатах:

Student         Exam Score      Overall Grade   Extra Credit

Sophia 92.2 95.88 A 92 (3.68 pts)
Andrew 89.6 91.38 A- 89 (1.78 pts)
Emma 85.6 90.94 A- 89 (5.34 pts)
Logan 91.2 93.12 A 96 (1.92 pts)

Заключение

Ваша задача состояла в том, чтобы обновить приложение, добавив в него новые функции на основе отзывов пользователей.

Реализовав предложенные учителем обновления таким образом, чтобы сохранить целостность исходного приложения, вы смогли удовлетворить запросы пользователей наилучшим образом.

Умение интерпретировать и применять отзывы пользователей таким образом, чтобы избежать значительных переделок, является важной частью поддержки и обновления приложений.