C# 做一种数据库,用户在其中输入id名称等,然后当用户输入id时,他可以向该用户添加课程
我遇到了如下问题:当我添加一个新用户时,它工作正常,但当我添加第二个用户时,它忘记了第一个用户。它总是忘记前面添加的用户。代码如下:C# 做一种数据库,用户在其中输入id名称等,然后当用户输入id时,他可以向该用户添加课程,c#,collections,console,C#,Collections,Console,我遇到了如下问题:当我添加一个新用户时,它工作正常,但当我添加第二个用户时,它忘记了第一个用户。它总是忘记前面添加的用户。代码如下: static List<Students> stud = new List<Students>(); static Courses regcor = new Courses(0,""); static void Main(string[] args) { Students regstud =
static List<Students> stud = new List<Students>();
static Courses regcor = new Courses(0,"");
static void Main(string[] args)
{
Students regstud = new Students("", "", "", 0);
string idselec = "";
string selec = "";
do
{
Console.WriteLine("1.Register new student.");
Console.WriteLine("2.Add course.");
Console.WriteLine("3.All information.");
Console.WriteLine("4.Exit.");
selec = Console.ReadLine();
if (selec == "1")
{
do
{
Console.Clear();
Console.WriteLine("Enter ID");
idselec = Console.ReadLine();
if (checkid(idselec))
{
Console.WriteLine("Id already excsists");
Console.ReadLine();
}
}
while (checkid(idselec));
regstud.ID = idselec;
Console.WriteLine("Enter Name");
regstud.name = Console.ReadLine();
Console.WriteLine("Enter Surname");
regstud.surname = Console.ReadLine();
Console.WriteLine("Enter Age");
regstud.age = Convert.ToInt32(Console.ReadLine());
stud.Add(regstud);
}
else if (selec == "2")
{
Console.WriteLine("Enter ID");
idselec = Console.ReadLine();
check(idselec);
}
else if (selec == "3")
{
Console.Clear();
writeall();
}
}
while (selec != "4");
}
static bool checkid(string id)
{
return stud.Any(u => u.ID == id);
}
static void check(string ID)
{
int i = 0;
bool found = false;
do
{
if (stud[i].ID == ID )
{
Console.WriteLine("Hello " + stud[i].name+" "+ stud[i].surname) ;
Console.WriteLine("Enter code");
int code =Convert.ToInt32( Console.ReadLine());
Console.WriteLine("Enter Name");
string name = Console.ReadLine();
regcor.CourID = code;
regcor.courname = name;
stud[i].cour(regcor);
found = true;
}
i++;
}
while ((i < stud.Count) && !(found));
}
static void writeall()
{
int i = 0, y=0, sub=0,sub3=0;
string sub2="";
do
{
Console.WriteLine(stud[i].ID);
Console.WriteLine(stud[i].name);
Console.WriteLine(stud[i].surname);
Console.WriteLine(stud[i].age);
sub3 = stud[i].cour3();
do
{
sub = stud[i].cour1(y);
sub2 = stud[i].cour2(y);
Console.WriteLine(sub);
Console.WriteLine(sub2);
y++;
}
while (y < sub3);
i++;
}
while (i < stud.Count);
}
}
}
这是我们班的学生
public int age = 0;
public string name = "", surname = "", ID = "";
List<Courses> cours = new List<Courses>();
public Students(string name, string surname,string ID, int age)
{
this.ID = ID;
this.surname = surname;
this.age = age;
this.name = name;
}
public void cour(Courses c)
{
cours.Add(c);
}
public int cour1(int i)
{
return cours[i].CourID;
}
public string cour2(int i)
{
return cours[i].courname;
}
public int cour3()
{
return cours.Count;
}
}
public int age=0;
公共字符串名称=”,姓氏=”,ID=”;
List cours=新列表();
公立学生(字符串名称、字符串姓氏、字符串ID、整数年龄)
{
this.ID=ID;
this.姓氏=姓氏;
这个。年龄=年龄;
this.name=名称;
}
公共图书馆(课程c)
{
课程增补(c);
}
公共int cour1(int i)
{
return-cours[i].CourID;
}
公共字符串cour2(int i)
{
return-cours[i].古尔奈;
}
公共int cour3()
{
返回课程计数;
}
}
}您当前只创建一个学生,然后覆盖他的属性 动议如下:
Students regstud = new Students("", "", "", 0);
进入实际创建新学员的do循环:
if (selec == "1")
{
Students regstud = new Students("", "", "", 0);
...
}
更好的做法是,只有在学生的所有属性就绪后才创建学生对象:
if (selec == "1")
{
...
Console.WriteLine("Enter Name");
string name = Console.ReadLine();
Console.WriteLine("Enter Surname");
string surname = Console.ReadLine();
Console.WriteLine("Enter Age");
int age = Convert.ToInt32(Console.ReadLine());
Students regstud = new Students(name, surename, id, age);
...
}
除此之外,在我看来,您的代码就像是石器时代和Futurama的组合:一方面使用带有单独索引变量的古老循环结构,另一方面使用泛型和LINQ。尽量使用更高的抽象-如果使用
ForEach()
etc,可以避免使用大多数循环变量-这将使代码更清晰、更易于阅读。我不确定数据库标记在这里是否有用。你做的一切都在记忆中,不是吗?使用数据库标签可以让人们回答这些类型的问题,我不知道这是怎么回事。哦,好的,thx,我刚开始c#3个月前,我16岁:)
if (selec == "1")
{
...
Console.WriteLine("Enter Name");
string name = Console.ReadLine();
Console.WriteLine("Enter Surname");
string surname = Console.ReadLine();
Console.WriteLine("Enter Age");
int age = Convert.ToInt32(Console.ReadLine());
Students regstud = new Students(name, surename, id, age);
...
}