在我的程序中,我有一个标记列表和一个存储studentId的字典。我希望用户输入studentId,根据该ID,它将指向标记列表。我想我正在错误地实施它。有人可以帮助我实现它。感谢
public class Student() {
private string name;
private string surname;
private string dob;
private string address;
private int id;
public Student()
{
}
public Student(string year,string name, string surname, string dob, string address)
{
this.name = name;
this.surname = surname;
this.dob = dob;
this.address = address;
this.year = year;
}
public string Name
{
get { return name; }
set { name = value; }
}
public string Surname
{
get { return surname; }
set { surname = value; }
}
public string DOB
{
get { return dob; }
set { dob = value; }
}
public string Addr
{
get { return address; }
set { address = value; }
}
public int Id
{
get { return id; }
set { id = value; }
}
private string year;
public string Year
{
get { return year; }
set { year = value; }
}
public Student(string s)
{
string[] splitted = s.Split(',');
name = splitted[0];
surname = splitted[1];
dob = splitted[2];
address = splitted[3];
// id = splitted[4];
}
public Dictionary<int,List<Marks>> dictionary= new Dictionary<int,List<Marks>>();
public List<Marks> Mathematics = new List<Marks>();
public List<Marks> English = new List<Marks>();
public List<Marks> Maltese = new List<Marks>();
public List<Marks> ReligiousStudies = new List<Marks>();
public List<Marks> SocialStudies = new List<Marks>();
public Dictionary<int, List<Marks>> dictionar = new Dictionary<int, List<Marks>>();
public void AddMarks(int hyexam, int anexam)
{
{
Console.WriteLine("enter id of student to input marks to:");
string id = Console.ReadLine();
if (dictionar.ContainsKey(Id).Equals(id))
{
Mathematics.Add(new Marks(hyexam, anexam));
English.Add(new Marks(hyexam, anexam));
Maltese.Add(new Marks(hyexam, anexam));
ReligiousStudies.Add(new Marks(hyexam, anexam));
SocialStudies.Add(new Marks(hyexam, anexam));
dictionar.Add(id, (Mathematics)); //dont know how to implement it
}
else
{
Console.WriteLine("id not found");
}
}
}
public class Marks
{
private int hyexam;
private int anexam;
private string id;
public int HYEXAM
{
get { return hyexam; }
set { hyexam = value; }
}
public int ANEXAM
{
get { return anexam; }
set { anexam = value; }
}
public string Id
{
get { return id; }
set { id = value; }
}
public Marks(int hyexam, int anexam)
{
this.hyexam = hyexam;
this.anexam = anexam;
}
public Marks(string id)
{
this.id = id;
}
public double OverallExam()
{
return (0.4 * hyexam) + (0.6 * anexam);
}
}
}
答案 0 :(得分:4)
我说主要问题是你的建模。您已将Dictionary<int, List<Marks>>
列为Student
中的字段。这意味着每个 Student
对象都有一个字典。这没有任何意义 - 因为字典的关键是学生ID,对吗?
对于每个Student
对象来说,你可能已经获得了标记列表(尽管不是公共字段,IMO)。鉴于这些信息,你真的需要一个Dictionary
去标记吗?在某个Dictionary<int, Student>
类({em>不在Student
类中 - 可能在School
类中?)将每个学生ID映射到一个Student
不是更清晰吗? Student
,您可以从Marks
?
认真思考你想要实现的目标,以及数据真正属于何处。根据我的经验,当您正确地进行数据建模时,代码通常会以干净的方式进行。
(我也会在名称和设计方面质疑你的ExamResult
课程。这些属性意味着什么?在考试中它不是真正的单一标记吗?也许{{1}会更清楚吗?它真的需要是可变的吗?)
答案 1 :(得分:1)
我同意Jon的观点,这绝对是一个建模问题(基于OP的其他帖子)。如果您是面向对象编程的新手,首先需要确定需要创建哪些对象来解决问题。
什么是学生?学生有姓名,身份证,职务,课程年份等。对于学生拥有的每个属性,您需要设置一个字段或属性。
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime DoB { get; set; }
... etc ...
}
什么是马克?根据您的描述,马克有主题,考试中期分数和年度考试成绩。
public class Mark
{
public string Subject { get; set; }
public int MidScore { get; set; }
public int FinalScore { get; set; }
}
学生和马克之间的关系是什么?学生有一个与他们相关的商标列表。这最好用List&lt;&gt;来描述。对象
public class Student() // continued
{
public List<Mark> Marks { get; set; }
}
一旦为对象设置了基础知识,就可以更轻松地过滤掉您不需要的内容,并更轻松地回答您的问题。 :)
答案 2 :(得分:0)
我的建议:
您的“Mark”类必须具有标识主题的内容(可以是名为Subject的枚举,或字符串,或者如果您将其存储在数据库中,则包含主题ID的int)
然后你可以:
Console.WriteLine("enter id of student to input marks to:");
string id = Console.ReadLine();
var marks = new Dictionary<int, List<Mark>>();
if (UserExists(id))
{
Console.WriteLine("mark for subject1:");
string s1 = Console.ReadLine();
Console.WriteLine("mark for subject2:");
string s2 = Console.ReadLine();
var list = new List<Mark>();
list.Add(new Mark { Subject = SubjectEnum.Subject1, Value = Convert.ToDecimal(s1), });
list.Add(new Mark { Subject = SubjectEnum.Subject2, Value = Convert.ToDecimal(s2), });
marks.Add(Convert.ToInt32(id), list)
}
else
{
Console.WriteLine("id not found");
}
希望这有帮助。