我有兩個物件:學生和課程:
public Student(string StudentID, string Name, string Status, Enum StudentMajor, Dictionary<Courses, Grade[]> CompletedCourses)
public Courses(string courseName, string courseCode, string passingGrade, int numOfCredits, List<Courses> prerequisites)
這是我在 Main 類中創建的物件
//Courses
Courses ITEC_120 = new("Introduction to Computer Hardware", "ITEC 120", "C", 3, new List<Courses> {});
Courses ITEC_122 = new("Introduction to Operating Systems", "ITEC 122", "C", 3, new List<Courses> { ITEC_120 });
//Student
Student student1 = new("00069110", "Antony Dos Santos", "Full-time", Majors.Computer_Information_Systems, new Dictionary<Courses, Grade[]>()
{
{ ITEC_120, new[] { Grade.F, Grade.B, Grade.Not_Taken } },
{ ITEC_122, new[] { Grade.A, Grade.Not_Taken, Grade.Not_Taken }
},
});
如您所見,課程有一個名為的變數credit,每個Student物件都有一個字典,其中包含 aCourse和 aGrade
所以student1有兩門課程,每門課程都有3個學分。在這種情況下,我將如何遍歷 Dictionary 以獲得所有課程的總數,CoursesCompleted它應該是 6。
每個物件都被添加到一個串列中
//List for Courses objects
List<Courses> CompulsoryCourses = new List<Courses>();
CompulsoryCourses.Add(ITEC_120);
CompulsoryCourses.Add(ITEC_122);//Adding the two courses to the List
List for Student objects
List<Student> students = new List<Student>();
students.Add(student1);
foreach(var stu in students)
{
var GPA = 0.0;
var CourseCredits = 0;
Console.WriteLine("\nStudent Information");
foreach (KeyValuePair<Courses, Grade[]> item in stu.CompletedCourses)
{
var TotalCredits = CourseCredits item.Key.numOfCredits;
Console.WriteLine("\nName: " item.Key.courseName ", Credits: " item.Key.numOfCredits);
GPA = stu.calGPA(CourseCredits);
Console.WriteLine("Total Credits: " TotalCredits);
}
Console.WriteLine(stu.Name ": GPA = " GPA);
}
在上面的 foreach 回圈中,我正在遍歷學生串列,然后我使用另一個 foreach 回圈來迭代 Dictionary 以獲取Key在這種情況下numOfCredits類似于:的內容item.Key.numOfCredits,并將它們相互添加。
目前它只是將其添加numOfCredits到自身而不是字典中的其他課程。
uj5u.com熱心網友回復:
您可以將LINQ用于這樣的事情。如果您有汽車清單并且只想總結價格,您可以這樣做:
var cars = new List<Car>
{
new Car{ BrandName = "Lamborghini", Model = "Huracan", Price = 300000M },
new Car{ BrandName = "Porsche", Model = "Gt3rs", Price = 200000M },
new Car{ BrandName = "Vauxhall", Model = "Corsa", Price = 20000M }
};
var totalPrice = cars.Sum(car => car.Price);
Console.WriteLine($"Total Price: {totalPrice}");
“汽車”看起來像這樣:
public class Car
{
public string BrandName { get; set; }
public string Model { get; set; }
public decimal Price { get; set; }
}
uj5u.com熱心網友回復:
不確定你到底要什么。但是加上我假設的汽車“價格”的總和。
您可以創建一個串列,其中添加了所有汽車以及所有新車。然后你可以做什么來創建一個 for 回圈,這就是那個特定串列的長度。并通過該回圈添加所有值。看起來像這樣:
類創建
class Car
{
public string name;
public int price;
public Car(string name, int price)
{
this.name = name;
this.price = price;
}
}
然后用于創建串列并添加一些汽車。
Car car1 = new Car("blue-car", 15);
Car car2 = new Car("red-car", 15);
List<Car> cars = new List<Car>() { car1, car2 };
最后我們計算總和。
int totalprice = 0;
for (int i = 0; i < cars.Count; i )
{
totalprice = totalprice cars[i].price;
}
uj5u.com熱心網友回復:
輸出
如果只有Student和Course類(為了簡化)并且想要這個
Name: Andy
Credits: 4
GPA: 2.25
Course Credits Grade P/F
ITEC 100 1 C Fail
ITEC 100 1 B Pass
ITEC 122 3 C Pass
Name: Jill
Credits: 4
GPA: 3.75
Course Credits Grade P/F
ITEC 100 1 B Pass
ITEC 120 3 A Pass
Name: Peter
Credits: 4
GPA: 2.5
Course Credits Grade P/F
ITEC 100 1 A Pass
ITEC 122 3 C Pass
Name: Rosy
Credits: 4
GPA: 2.25
Course Credits Grade P/F
ITEC 100 1 B Pass
ITEC 122 3 F Fail
ITEC 122 3 D Fail
ITEC 122 3 C Pass
但是有了跟蹤通過和/或下降類的附加邏輯,以及重新注冊到類等的限制,然后看下面的例子:
程式
下面的測驗程式定義了 3 個班級和 5 個學生。然后將學生注冊到班級并分配成績。最后,它遍歷每個學生和學生所參加的每個班級,以列舉他們的成績,并計算 GPA
static class Program
{
static void Main(string[] args)
{
var courses = new List<Course>
{
new Course("ITEC 100", "Introduction to Project Managment", 1, Grade.B),
new Course("ITEC 122", "Introduction to Operating Systems", 3, Grade.C),
new Course("ITEC 120", "Introduction to Computer Hardware", 3, Grade.D),
};
var students = new List<Student>
{
new Student("Andy"),
new Student("Jill"),
new Student("Peter"),
new Student("Rosy"),
};
students[0].EnrolledInClass(courses[0], Grade.C); // fail
students[0].EnrolledInClass(courses[0], Grade.B); // pass
students[0].EnrolledInClass(courses[1], Grade.C); // pass
students[1].EnrolledInClass(courses[0], Grade.B);
students[1].EnrolledInClass(courses[2], Grade.A);
students[2].EnrolledInClass(courses[0], Grade.A);
students[2].EnrolledInClass(courses[1], Grade.C);
students[3].EnrolledInClass(courses[0], Grade.B);
students[3].EnrolledInClass(courses[1], Grade.F); // fail
students[3].EnrolledInClass(courses[1], Grade.D); // fail
students[3].EnrolledInClass(courses[1], Grade.C); // fail
foreach (var student in students)
{
Console.WriteLine($"Name: {student.Name}");
Console.WriteLine($"Credits: {student.TotalCredits}");
Console.WriteLine($"GPA: {student.GPA}");
Console.WriteLine($" {"Course", -9} {"Credits",-8} {"Grade",-5} {"P/F",-5}");
foreach ((Course course, Grade grade) in student.Courses)
{
string pass = course.IsPassing(grade) ? "Pass" : "Fail";
Console.WriteLine($" {course.Code, -9} {course.Credits,-8} {grade,-5} {pass,-5}");
}
Console.WriteLine();
}
}
}
邏輯
大多數邏輯都在Courses檢查特定等級以查看其是否通過的類中,它計算獎勵學分和獎勵學分等級。
這些資料存盤在List<(Course,Grade)>每個學生的私人檔案中,并且存在檢查您是否可以注冊和注冊學生以及計算學分和 GPA 的方法。
public enum Grade
{
F = 0,
D,
C,
B,
A,
}
public class Student
{
private readonly List<(Course course, Grade grade)> _courses;
public Student(string name)
{
Name = name;
_courses = new List<(Course, Grade)>();
}
public string Name { get; }
public IReadOnlyList<(Course course, Grade grade)> Courses => _courses;
public int FirstIndexOf(Course course)
{
for (int i = 0; i < Courses.Count; i )
{
var item = Courses[i];
if (item.course == course)
{
return i;
}
}
return -1;
}
public int LastIndexOf(Course course)
{
for (int i = Courses.Count - 1; i >= 0; i--)
{
var item = Courses[i];
if (item.course == course)
{
return i;
}
}
return -1;
}
public bool HasTakenCourse(Course course)
{
return FirstIndexOf(course) >= 0;
}
public bool HasPassedCourse(Course course)
{
int index = LastIndexOf(course);
if (index >= 0)
{
var item = Courses[index];
return course.IsPassing(item.grade);
}
return false;
}
public bool CanEnrollInCourse(Course course)
{
int takenCount = 0;
for (int i = 0; i < Courses.Count; i )
{
var item = Courses[i];
if (item.course == course)
{
if (course.IsPassing(item.grade))
{
// Cannot enroll twice in same class with passing grade
return false;
}
takenCount ;
if (takenCount > 3)
{
// Cannot enroll in class > 3 times
return false;
}
}
}
return true;
}
public bool EnrolledInClass(Course course, Grade grade)
{
if (CanEnrollInCourse(course))
{
_courses.Add((course, grade));
return true;
}
return false;
}
public int TotalCredits
{
get
{
return Courses.Sum((item) => item.course.GetCredits(item.grade));
}
}
public float GPA
{
get
{
float creditGrades = Courses.Sum((item) => item.course.GetCreditGrade(item.grade));
return creditGrades / TotalCredits;
}
}
}
public class Course
{
public Course(string code, string description, int credits, Grade passingGrade = Grade.D)
{
Code = code;
Description = description;
Credits = credits;
PassingGrade = passingGrade;
}
public string Code { get; }
public string Description { get; }
public int Credits { get; }
public Grade PassingGrade { get; }
public bool IsPassing(Grade grade) => grade >= PassingGrade; // check if grade is passing
public int GetCredits(Grade grade) => IsPassing(grade) ? Credits : 0; // only credit passing grades
public float GetCreditGrade(Grade grade) => GetCredits(grade) * (int)grade; // combine credit hours with grades, or zero for fail
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520871.html
標籤:C#目的整数
下一篇:訪問嵌套的物件陣列
