Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- кр 2 си шарп тз:
- Определить класс Student, который имеет
- · закрытое поле типа Person, в котором хранятся данные студента(фио, возраст).
- · закрытое поле типа Education(перечисление – бюджет/платное) для информации о форме обучения;
- · закрытое поле типа int для номера группы;
- · закрытое поле типа string для информации об экзаменах, которые сдал студент.
- В классе Student определить конструкторы:
- · конструктор c параметрами типа Person, Education, int для инициализации соответствующих полей класса;
- · конструктор без параметров, инициализирующий поля класса значениями по умолчанию.
- В классе Student определить свойства c методами get и set:
- · свойство типа Person для доступа к полю с данными студента;
- · свойство типа Education для доступа к полю с формой обучения;
- · свойство типа int для доступа к полю с номером группы;
- ·свойство Exam типа Exam(поля Дата, название, оценка) для доступа к полю со списком экзаменов.
- В новые версии классов добавить экземплярные методы
- · T DeepCopy() для создания полной копии объекта с использованием сериализации;
- · bool Save(string filename) для сохранения данных объекта в файле с помощью сериализации;
- · bool Load(string filename) для инициализации объекта данными из файла с помощью десериализации;
- · bool AddFromConsole() для добавления в один из списков класса нового элемента, данные для которого вводятся с консоли; и статические методы
- · static bool Save(string filename, T obj) для сохранения объекта в файле с
- */
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Xml.Serialization;
- using System.Runtime.Serialization;
- namespace KR2
- {
- struct Person {
- public string sur, nam, pat;
- public int age;
- }
- enum Education { budjet, platnoe };
- struct Exam {
- public string data, name;
- public int value;
- }
- [Serializable]
- class Student
- {
- private Person data;
- private Education pay;
- private int group;
- private List<Exam> pass_ex;
- public Student(Person info, Education pay, int number) {
- data.sur = info.sur;
- data.nam = info.nam;
- data.pat = info.pat;
- data.age = info.age;
- this.pay = pay;
- group = number;
- }
- public Student() {
- data.sur = "";
- data.nam = "";
- data.pat = "";
- data.age = 0;
- this.pay = 0;
- group = 0;
- }
- //Person Data { get { return data; } set { data = value; } }
- Education Pay { get { return pay; } set { pay = value; } }
- int Group { get { return group; } set { group = value; } }
- string Sur { get { return data.sur; } set { data.sur = value; } }
- string Nam { get { return data.nam; } set { data.nam = value; } }
- string Pat { get { return data.pat; } set { data.pat = value; } }
- int Age { get { return data.age; } set { data.age = value; } }
- List<Exam> Exam { get { return pass_ex; } set { pass_ex = value; } }
- public Student DeepCopy() {
- var bf = new BinaryFormatter();
- var ms = new MemoryStream();
- bf.Serialize(ms, this);
- return bf.Deserialize(ms) as Student;
- }
- public bool Save(string filename) {
- using (var fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
- {
- var bf = new BinaryFormatter();
- try { bf.Serialize(fs, this); }
- catch { Console.WriteLine("Сериализация завершилась не удачно");
- fs.Close();
- return false;
- }
- fs.Seek(0, SeekOrigin.Begin);
- fs.Close();
- return true;
- }
- }
- public bool Load(string filename) {
- using (var fs = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite))
- {
- if (fs.CanRead)
- {
- var bf = new BinaryFormatter();
- fs.Seek(0, SeekOrigin.Begin);
- Student res;
- try { res = bf.Deserialize(fs) as Student; }
- catch {
- Console.WriteLine("Загрузка не выполнена.");
- fs.Close();
- return false;
- }
- data = res.data;
- pay = res.pay;
- pass_ex = res.pass_ex;
- group = res.group;
- fs.Close();
- return true;
- }
- else { fs.Close(); return false; }
- }
- }
- public bool AddFromConsole() {
- string text;
- int count = 0;
- string part = "", one = "", two = "", three ="";
- Student res = new Student();
- Console.WriteLine("Input: Surname, Name, Patronymic, Age, Education, Number Of Group, Exams(data(dd.mm.yyyy)|name of exam|value)");
- Console.Write("Input: ");
- text = Console.ReadLine();
- for (int i = 0; i < text.Length; ++i) {
- if (text[i] == ' ') continue;
- else if (text[i] != ',') part = part + text[i];
- else {
- if (count == 0) { res.data.sur = part; count++; }
- else if (count == 1) { res.data.nam = part; count++; }
- else if (count == 2) { res.data.pat = part; count++; }
- else if (count == 3) { if (!int.TryParse(part, out res.data.age)) return false; else count++; }
- else if (count == 4) { if (part == "budjet") res.pay = Education.budjet; else if (part == "platnoe") res.pay = Education.platnoe; else return false; count++; }
- else if (count == 5) { if (!int.TryParse(part, out res.group)) return false; else count++; }
- else {
- for (int flag = 0; i < part.Length; ++i) {
- if (char.IsLetterOrDigit(part[i]))
- {
- if (flag == 0) one += part[i];
- else if (flag == 1) two += part[i];
- else three += part[i];
- }
- else flag++;
- }
- Exam obj = new Exam();
- obj.data = one;
- obj.name = two;
- obj.value = Convert.ToInt16(three);
- res.pass_ex.Add(obj);
- one = two = three = "";
- }
- part = "";
- }
- }
- data = res.data;
- pay = res.pay;
- pass_ex = res.pass_ex;
- group = res.group;
- return true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement