diff --git a/012_foreach_array_2/012_csharp.md b/012_foreach_array_2/012_csharp.md
index 2ae0408..6487c79 100644
--- a/012_foreach_array_2/012_csharp.md
+++ b/012_foreach_array_2/012_csharp.md
@@ -16,4 +16,265 @@ array data based on an updated feature specification.
the code branches and calculations required to satisfy an updated feature
specification.
-##
+## Introduction
+
+End users often ask developers to add new features to an application. User
+requests indicate that your application is being used, and more importantly,
+that the customer plans to continue using your application. The customer just
+wants some features updated. The ability to update an existing application
+based on user requests is very important. A successful update will preserve
+the integrity of the original application while providing the user with the
+improved experience that they requested.
+
+Suppose you're a teacher's assistant at a school and that you developed an
+application to automate the grading process. The application uses arrays to
+store student names and graded assignments. The application also implements a
+combination of iteration and selection statements to calculate and report each
+student's final grade. Your application even differentiates between exam
+assignments and extra credit assignments when calculating student grades.
+Although the application does everything that the teacher asked for, you've
+received a request for new features. The teacher has asked you to update the
+grading report to show exam and extra credit assignment scores separately from
+the final numeric score and letter grade.
+
+This module challenges you to add new capabilities to your Student Grading
+application.
+
+In short, you need to use the teacher's updated grading report specification
+to:
+
+- update the iteration and selection code to calculate separate final scores
+for exams, extra credit assignments, and the overall grade.
+- update the code that writes the grading report to the console.
+
+By the end of this module, you'll have an updated version of the Student Grading application that's able to calculate and report student grades in accordance with the teacher's updated requirements.
+
+> Note
+> This is a challenge project module where you’ll complete an end-to-end
+project from a specification. This module is intended to be a test of your
+skills; there’s little guidance and no step-by-step instructions .
+
+### Learning Objectives
+
+- In this module, you'll demonstrate your ability to:
+
+- Use Visual Studio Code to revise a C# console application based on an updated feature specification.
+- Update the variables and if statements in a C# console application to create the code branches and calculations required to satisfy an updated feature specification.
+#### Prerequisites
+
+- Experience using Visual Studio Code to develop, build, and run C# console
+applications that include console I/O and access the methods of .NET classes.
+- Experience using `if` statements in C# application to evaluate expressions and
+branch code accordingly.
+- Experience using a `foreach` loop to access elements of array variables.
+
+---
+
+## Prepare
+
+In this guided project, you'll use Visual Studio Code to develop portions of a
+C# console application. You'll begin by writing the code that performs various
+numeric calculations. All calculations must be completed within the existing
+iteration and selection structures. This Prepare unit provides you with the
+overall goals of the project and the requirements for your application. The
+Setup section describes how to set up your development environment, including
+a "Starter" code project.
+
+### Project specification
+
+The Starter code project for this module is a C# console application that
+implements the following code features:
+
+- Uses arrays to store student names and assignment scores.
+
+- Uses a `foreach` statement to iterate through the student names as an outer
+program loop.
+
+- Uses an `if` statement within the outer loop to identify the current student
+'s name and access that student's assignment scores.
+
+- Uses a `foreach` statement within the outer loop to iterate through the
+assignment scores array and sum the values.
+
+- Uses an algorithm within the outer loop to calculate the average exam score
+for each student.
+
+- Use an `if-elseif-else` construct within the outer loop to evaluate the
+average exam score and assign a letter grade automatically.
+
+- Integrates extra credit scores when calculating the student's final score and
+ letter grade as follows:
+
+ - Detects extra credit assignments based on the number of elements in the
+ student's scores array.
+ - Applies a 10% weighting factor to extra credit assignments before adding
+ extra credit scores to the sum of exam scores.
+
+Your goal in this challenge is to implement the coding updates required to
+produce the teacher's requested score report.
+
+The current score report lists the student's name followed by the calculated
+overall grade and letter grade. Here is the existing report format:
+
+```txt
+Student Grade Letter Grade
+
+Sophia 95.6 A
+Andrew 91.6 A-
+Emma 89.2 B+
+Logan 93 A
+```
+
+In addition to the student's final numeric score and letter grade, the teacher
+wants the updated report to include the exam score and the impact that extra
+credit work has on the student's final grade. The format of the updated score
+report should appear as follows:
+
+```txt
+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)
+```
+
+### Setup
+
+Use the following steps to prepare for the Challenge project exercises:
+
+To download a zip file containing the Starter project code, select the
+following link:
+[Lab Files](https://github.com/MicrosoftLearning/Challenge-project-foreach-if-array-CSharp/archive/refs/heads/main.zip).
+
+#### Unzip the download files.
+
+> Note
+> If a folder named ChallengeProject already exists, you can select Replace
+the files in the destination to complete the copy operation.
+
+You're now ready to begin the Challenge project exercises. Good luck!
+
+---
+
+## Exercise
+
+### Update your formatted output
+
+The Student Grading application is used to calculate and report student grades
+based on their graded exam and extra credit assignments. Your goal in this
+challenge is to update the code that generates a score report in accordance
+with the teacher's updated requirements.
+
+### Specification
+
+In this first challenge exercise, you need to instantiate the variables that
+are required for the updated score report, and then update the
+`Console.WriteLine()` statement that writes student grades to the console.
+
+Your updated application must:
+
+- use the existing arrays and array values for all student grade calculations.
+- use the nested structure provided by the existing `foreach` and `if`
+statements.
+- declare and initialize any other integer variables that are required for
+calculating sums.
+- declare and initialize any other decimal variables that are required for
+calculations and/or score report values.
+
+The format of the update score report is:
+
+```txt
+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)
+```
+
+> Note
+> Since this exercise does not include updating calculations, the score report
+will show 0 for the new fields as shown above.
+
+### Check your work
+
+To validate that your code satisfies the specified requirements for this
+exercise, complete the following steps:
+
+- build and run your app.
+- Verify that your application creates the following output:
+
+```txt
+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)
+```
+
+---
+
+## Exercise
+
+### Update your calculated values
+
+The Student Grading application is used to calculate and report student grades
+based on their graded exam and extra credit assignments. Your goal in this challenge is to update the code that calculates student grades in accordance with the teacher's updated requirements.
+
+### Specification
+
+In this second challenge exercise, you need to instantiate the variables that
+are required for the updated score report, complete the required calculations,
+and then update the `Console.WriteLine()` statement that writes student grades
+to the console.
+
+Your updated application must:
+
+- use the existing arrays and array values for all student grade calculations.
+- use the nested structure provided by the existing foreach and if statements.
+- calculate the sum of exam and extra credit assignment scores using variables
+from the first exercise or the original code.
+- calculate the average for exam scores and extra credit scores using
+variables from the first exercise or the original code.
+- calculate the final numeric score as follows: add 10% of the extra credit
+score sum to the exam score sum, and then divide that value by the number of
+exams.
+- calculate the extra credit points earned as follows: divide 10% of the extra
+credit score sum by the number of exams.
+
+> Tip
+> You will need to use (decimal) casting in your equations to preserve the
+fractional component during your calculations.
+
+The required score report format is:
+
+```txt
+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)
+```
+
+### Check your work
+
+To validate that your code satisfies the specified requirements, complete the
+following steps:
+
+- Build and run your app.
+
+- Verify that your application creates the following output:
+
+```txt
+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)
+```
+
+Congratulations if you succeeded in this challenge!
diff --git a/012_foreach_array_2/ChallengeProject/Final/Final.csproj b/012_foreach_array_2/ChallengeProject/Final/Final.csproj
new file mode 100644
index 0000000..91b464a
--- /dev/null
+++ b/012_foreach_array_2/ChallengeProject/Final/Final.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/012_foreach_array_2/ChallengeProject/Final/Program.cs b/012_foreach_array_2/ChallengeProject/Final/Program.cs
new file mode 100644
index 0000000..3a26828
--- /dev/null
+++ b/012_foreach_array_2/ChallengeProject/Final/Program.cs
@@ -0,0 +1,144 @@
+/*
+This C# console application is designed to:
+- Use arrays to store student names and assignment scores.
+- Use a `foreach` statement to iterate through the student names as an outer program loop.
+- Use an `if` statement within the outer loop to identify the current student name and access that student's assignment scores.
+- Use a `foreach` statement within the outer loop to iterate though the assignment scores array and sum the values.
+- Use an algorithm within the outer loop to calculate the average exam score for each student.
+- Use an `if-elseif-else` construct within the outer loop to evaluate the average exam score and assign a letter grade automatically.
+- Integrate extra credit scores when calculating the student's final score and letter grade as follows:
+ - detects extra credit assignments based on the number of elements in the student's scores array.
+ - divides the values of extra credit assignments by 10 before adding extra credit scores to the sum of exam scores.
+- use the following report format to report student grades:
+
+Student Exam Score Overall Grade Extra Credit
+
+Sophia 92.2 95.88 A 92 (3.68 pts)
+
+*/
+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 = "";
+
+// display the header row for scores/grades
+Console.Clear();
+Console.WriteLine("Student\t\tExam Score\tOverall Grade\tExtra Credit\n");
+
+/*
+The outer foreach loop is used to:
+- iterate through student names
+- assign a student's grades to the studentScores array
+- calculate exam and extra credit sums (inner foreach loop)
+- calculate numeric and letter grade
+- write the score report information
+*/
+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 gradedAssignments = 0;
+ int gradedExtraCreditAssignments = 0;
+
+ int sumExamScores = 0;
+ int sumExtraCreditScores = 0;
+
+ decimal currentStudentGrade = 0;
+ decimal currentStudentExamScore = 0;
+ decimal currentStudentExtraCreditScore = 0;
+
+ /*
+ the inner foreach loop:
+ - sums the exam and extra credit scores
+ - counts the extra credit assignments
+ */
+ foreach (int score in studentScores)
+ {
+ gradedAssignments += 1;
+
+ if (gradedAssignments <= examAssignments)
+ {
+ sumExamScores = sumExamScores + score;
+ }
+
+ else
+ {
+ gradedExtraCreditAssignments += 1;
+ sumExtraCreditScores += score;
+ }
+ }
+
+ currentStudentExamScore = (decimal)(sumExamScores) / examAssignments;
+ currentStudentExtraCreditScore = (decimal)(sumExtraCreditScores) / gradedExtraCreditAssignments;
+
+ currentStudentGrade = (decimal)((decimal)sumExamScores + ((decimal)sumExtraCreditScores / 10)) / 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 Exam Score Overall Grade Extra Credit
+ // Sophia 92.2 95.88 A 92 (3.68 pts)
+
+ Console.WriteLine($"{currentStudent}\t\t{currentStudentExamScore}\t\t{currentStudentGrade}\t{currentStudentLetterGrade}\t{currentStudentExtraCreditScore} ({(((decimal)sumExtraCreditScores / 10) / examAssignments)} pts)");
+}
+
+// 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();
diff --git a/012_foreach_array_2/ChallengeProject/LICENSE b/012_foreach_array_2/ChallengeProject/LICENSE
new file mode 100644
index 0000000..2080d95
--- /dev/null
+++ b/012_foreach_array_2/ChallengeProject/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Microsoft Learning
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/012_foreach_array_2/ChallengeProject/README.md b/012_foreach_array_2/ChallengeProject/README.md
new file mode 100644
index 0000000..b555e6f
--- /dev/null
+++ b/012_foreach_array_2/ChallengeProject/README.md
@@ -0,0 +1,2 @@
+# Challenge-project-foreach-if-array-CSharp
+Starter and Solution code for the Challenge project: "Develop foreach and if-elseif-else structures to process array data in C#" from the Microsoft Learn collection "Getting started with C#"
diff --git a/012_foreach_array_2/ChallengeProject/Starter/Program.cs b/012_foreach_array_2/ChallengeProject/Starter/Program.cs
new file mode 100644
index 0000000..929e66a
--- /dev/null
+++ b/012_foreach_array_2/ChallengeProject/Starter/Program.cs
@@ -0,0 +1,122 @@
+/*
+This C# console application is designed to:
+- Use arrays to store student names and assignment scores.
+- Use a `foreach` statement to iterate through the student names as an outer
+program loop.
+- Use an `if` statement within the outer loop to identify the current student
+name and access that student's assignment scores.
+- Use a `foreach` statement within the outer loop to iterate though the
+assignment scores array and sum the values.
+- Use an algorithm within the outer loop to calculate the average exam score
+for each student.
+- Use an `if-elseif-else` construct within the outer loop to evaluate the
+average exam score and assign a letter grade automatically.
+- Integrate extra credit scores when calculating the student's final score and
+letter grade as follows:
+ - detects extra credit assignments based on the number of elements in the
+ student's scores array.
+ - divides the values of extra credit assignments by 10 before adding extra
+ credit scores to the sum of exam scores.
+- use the following report format to report student grades:
+
+ 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\tExam Score\tOverall\tGrade\tExtra Credit\n");
+
+/*
+The outer foreach loop is used to:
+- iterate through student names
+- assign a student's grades to the studentScores array
+- sum assignment scores (inner foreach loop)
+- calculate numeric and letter grade
+- write the score report information
+*/
+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;
+ int sumExamScore = 0;
+ int extraCredit = 0;
+ // the inner foreach loop sums assignment scores
+ // extra credit assignments are worth 10% of an exam score
+ foreach (int score in studentScores){
+ gradedAssignments += 1;
+ if (gradedAssignments <= examAssignments){
+ sumAssignmentScores += score;
+ sumExamScore = sumAssignmentScores;
+ } else {
+ sumAssignmentScores += score / 10;
+ extraCredit += score / 10;
+ }
+ }
+ decimal examScore = (decimal)(sumExamScore)/examAssignments;
+ currentStudentGrade = (decimal)sumAssignmentScores / examAssignments;
+ decimal extraCreditPts = (decimal)(extraCredit) / examAssignments;
+
+ currentStudentLetterGrade = getLetterGrade(currentStudentGrade);
+ Console.Write($"{currentStudent}\t\t");
+ Console.Write($"{examScore}\t\t");
+ Console.Write($"{currentStudentGrade}\t");
+ Console.Write($"{currentStudentLetterGrade}\t");
+ Console.WriteLine($"{extraCredit} ({extraCreditPts} pts)");
+}
+
+string getLetterGrade(decimal score){
+ string grade;
+ if (score < 60){
+ grade = "F";
+ } else if (score < 63){
+ grade = "D-";
+ } else if (score < 67){
+ grade = "D";
+ } else if (score < 70){
+ grade = "D+";
+ } else if (score < 73){
+ grade = "C-";
+ } else if (score < 77){
+ grade = "C";
+ } else if (score < 80){
+ grade = "C+";
+ } else if (score < 83){
+ grade = "B-";
+ } else if (score < 87){
+ grade = "B";
+ } else if (score < 90){
+ grade = "B+";
+ } else if (score < 93){
+ grade = "A-";
+ } else if (score < 97){
+ grade = "A";
+ } else {
+ grade = "A+";
+ }
+ return grade;
+}
diff --git a/012_foreach_array_2/ChallengeProject/Starter/Starter.csproj b/012_foreach_array_2/ChallengeProject/Starter/Starter.csproj
new file mode 100644
index 0000000..91b464a
--- /dev/null
+++ b/012_foreach_array_2/ChallengeProject/Starter/Starter.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+