public void InsertAssignmentPerStudentPerCourse() { //Όλα τα assignments. Φυσικά τα θέλω >0 το πλήθος. var queryAss = from c in dbContext.Assignments select c; if (!dbContext.Assignments.Any()) { Console.WriteLine("No assignments to connect to courses."); return; } //Όλα τα μαθήματα. Φυσικά τα θέλω >0 το πλήθος. var queryCr = from c in dbContext.Courses select c; if (!dbContext.Courses.Any()) { Console.WriteLine("No courses to assign the trainers to."); return; } //Τυπώνω assignments και μαθήματα για να ξέρει ο χρήστης αυτά που έχει στη διάθεση του. Console.WriteLine("The available assignments are the following:"); foreach (var assInfo in queryAss) { Console.WriteLine("{0}. Title: {1}.", assInfo.id, assInfo.title); } Console.WriteLine(); Console.WriteLine("The available courses are the following:"); foreach (var crInfo in queryCr) { Console.WriteLine("{0}: {1}", crInfo.id, crInfo.title); } Console.WriteLine(); Console.WriteLine("Type a valid assignment id and a valid course id to assign that assignment to that course. Take note that:\n" + "The two ID ust be given in that order.\n" + "The two ID must be separated by one or more spaces.\n" + "In case the assignment is already given at that course, no changes will occur."); string inputa, inputb; if (!ConsoleRead.ReadTwoIntegers(out inputa, out inputb)) { Console.WriteLine("Wrong input."); return; } //Η ReadTwoIntegers έχει εξασφαλίσει ότι το Parse πορεί να συμβεί int ida = int.Parse(inputa); int idb = int.Parse(inputb); /*Ορίζω και αρχικοποιώ μια μεταβλητή assignment και μαθήματος. Είμαι σίγουρος ότι κι οι δυο πίνακες έχουν * τουλάχιστον ένα στοιχείο οπότε τους αρχικοποιώ με το πρώτο - δεν έχει σημασία, απλά για να μη χτυπάει παρακάτω * ο κώδικας - καθώς οι τιμές τους στη πραγματικότητα δίνονται εντός if.*/ Assignment wAss = queryAss.First(); Course wCr = queryCr.First(); //Ελέγχει αν το id assignment είναι υπαρκτό bool found = false; foreach (var assInfo in queryAss) { if (assInfo.id == ida) { found = !found; wAss = assInfo; break; } } if (!found) { Console.WriteLine("Given assignment id doesn't exist."); return; } //Ελέγχει αν το id μαθήματος είναι υπαρκτό found = false; foreach (var crInfo in queryCr) { if (crInfo.id == idb) { found = !found; wCr = crInfo; break; } } if (!found) { Console.WriteLine("Given course id doesn't exist."); return; } //Διατρέχω το πίνακα Course_has_Assignment για ήδη υπάρχουσα αντιστοίχηση. if (dbContext.Course_has_Assignment.Any(a => a.Assignment_id == ida && a.Course_id == idb)) { Console.WriteLine("Given assignment already belongs to given course."); return; } //Αντιστοιχώ assignment-μάθημα στη περίπτωση που όλα πήγαν καλά. Course_has_Assignment cr_assNew = new Course_has_Assignment() { Assignment_id = ida, Course_id = idb }; dbContext.Course_has_Assignment.Add(cr_assNew); cr_assNew.Course = wCr; cr_assNew.Assignment = wAss; //Τώρα θα αναθέσω σε όλους τους μαθητές του μαθήματος το assignment αυτό. foreach (var std in wCr.Students) { Student_gets_Assignment i = new Student_gets_Assignment() { Student_id = std.id, Course_id = cr_assNew.Course_id, Assignment_id = cr_assNew.Assignment_id, //Ο μαθητής δεν έχει ακόμη παραδώσει το assignment για να πάρει βαθμούς totalMark = null, oralMark = null }; dbContext.Student_gets_Assignment.Add(i); i.Student = std; i.Course_has_Assignment = cr_assNew; } dbContext.SaveChanges(); }
public void InsertTrainerPerCourse() { //Όλοι οι εκπαιδευτές. Φυσικά τους θέλω >0 το πλήθος. var queryTr = from c in dbContext.Trainers select c; if (!dbContext.Trainers.Any()) { Console.WriteLine("No trainers to connect to courses."); return; } //Όλα τα μαθήματα. Φυσικά τα θέλω >0 το πλήθος. var queryCr = from c in dbContext.Courses select c; if (!dbContext.Courses.Any()) { Console.WriteLine("No courses to assign the trainers to."); return; } //Τυπώνω εκπαιδευτές και μαθήματα για να ξέρει ο χρήστης αυτά που έχει στη διάθεση του. Console.WriteLine("The available trainers are the following:"); foreach (var trInfo in queryTr) { Console.WriteLine("{0}: {1} {2}", trInfo.id, trInfo.firstName, trInfo.lastName); } Console.WriteLine(); Console.WriteLine("The available courses are the following:"); foreach (var crInfo in queryCr) { Console.WriteLine("{0}: {1}", crInfo.id, crInfo.title); } Console.WriteLine(); Console.WriteLine("Type a valid trainer id and a valid course id to assign that trainer to that course. Take note that:\n" + "The two ID ust be given in that order.\n" + "The two ID must be separated by one or more spaces.\n" + "In case the trainer already teaches at that course, no changes will occur."); string inputa, inputb; if (!ConsoleRead.ReadTwoIntegers(out inputa, out inputb)) { Console.WriteLine("Wrong input."); return; } //Η ReadTwoIntegers έχει εξασφαλίσει ότι το Parse πορεί να συμβεί int ida = int.Parse(inputa); int idb = int.Parse(inputb); /*Ορίζω και αρχικοποιώ μια μεταβλητή εκπαιδευτή και μαθήματος. Είμαι σίγουρος ότι κι οι δυο πίνακες έχουν * τουλάχιστον ένα στοιχείο οπότε τους αρχικοποιώ με το πρώτο - δεν έχει σημασία, απλά για να μη χτυπάει παρακάτω * ο κώδικας - καθώς οι τιμές τους στη πραγματικότητα δίνονται εντός if.*/ Trainer wTr = queryTr.First(); Course wCr = queryCr.First(); //Ελέγχει αν το id εκπαιδευτή είναι υπαρκτό bool found = false; foreach (var trInfo in queryTr) { if (trInfo.id == ida) { found = !found; wTr = trInfo; break; } } if (!found) { Console.WriteLine("Wrong input."); return; } //Ελέγχει αν το id μαθήματος είναι υπαρκτό found = false; foreach (var crInfo in queryCr) { if (crInfo.id == idb) { found = !found; wCr = crInfo; break; } } if (!found) { Console.WriteLine("Wrong input."); return; } //Διατρέχω τα μαθήματα του δωσμένου εκπαιδευτή για ήδη υπάρχουσα αντιστοίχηση. foreach (var crInfo in wTr.Courses) { if (crInfo.id == idb) { Console.WriteLine("That trainer is already teaching at given course."); return; } } //Αντιστοιχώ εκπαιδευτή-μάθημα στη περίπτωση που όλα πήγαν καλά. wTr.Courses.Add(wCr); //wCr.Trainers.Add(wTr); //το ανάποδο γίνεται αυτόματα(;) dbContext.SaveChanges(); }