Advertisement
mrAnderson33

Untitled

May 31st, 2017
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.70 KB | None | 0 0
  1. /*
  2. кр 2 си шарп тз:
  3. Определить класс Student, который имеет
  4.  
  5. · закрытое поле типа Person, в котором хранятся данные студента(фио, возраст).
  6.  
  7. · закрытое поле типа Education(перечисление – бюджет/платное) для информации о форме обучения;
  8.  
  9. · закрытое поле типа int для номера группы;
  10.  
  11. · закрытое поле типа string для информации об экзаменах, которые сдал студент.
  12.  
  13. В классе Student определить конструкторы:
  14.  
  15. · конструктор c параметрами типа Person, Education, int для инициализации соответствующих полей класса;
  16.  
  17. · конструктор без параметров, инициализирующий поля класса значениями по умолчанию.
  18.  
  19. В классе Student определить свойства c методами get и set:
  20.  
  21. · свойство типа Person для доступа к полю с данными студента;
  22.  
  23. · свойство типа Education для доступа к полю с формой обучения;
  24.  
  25. · свойство типа int для доступа к полю с номером группы;
  26.  
  27. ·свойство Exam типа Exam(поля Дата, название, оценка) для доступа к полю со списком экзаменов.
  28.  
  29.  
  30. В новые версии классов добавить экземплярные методы
  31.  
  32. · T DeepCopy() для создания полной копии объекта с использованием сериализации;
  33.  
  34. · bool Save(string filename) для сохранения данных объекта в файле с помощью сериализации;
  35.  
  36. · bool Load(string filename) для инициализации объекта данными из файла с помощью десериализации;
  37.  
  38. · bool AddFromConsole() для добавления в один из списков класса нового элемента, данные для которого вводятся с консоли; и статические методы
  39.  
  40. · static bool Save(string filename, T obj) для сохранения объекта в файле с
  41. */
  42.  
  43. using System;
  44. using System.Collections.Generic;
  45. using System.IO;
  46. using System.Linq;
  47. using System.Text;
  48. using System.Runtime.Serialization.Formatters.Binary;
  49. using System.Xml.Serialization;
  50. using System.Runtime.Serialization;
  51.  
  52. namespace KR2
  53. {
  54.     struct Person {
  55.         public string sur, nam, pat;
  56.         public int age;
  57.     }
  58.     enum Education { budjet, platnoe };
  59.     struct Exam {
  60.         public string data, name;
  61.         public int value;
  62.     }
  63.  
  64.     [Serializable]
  65.     class Student
  66.     {
  67.         private Person data;
  68.         private Education pay;
  69.         private int group;
  70.         private List<Exam> pass_ex;
  71.         public Student(Person info, Education pay, int number) {
  72.             data.sur = info.sur;
  73.             data.nam = info.nam;
  74.             data.pat = info.pat;
  75.             data.age = info.age;
  76.             this.pay = pay;
  77.             group = number;
  78.         }
  79.         public Student() {
  80.             data.sur = "";
  81.             data.nam = "";
  82.             data.pat = "";
  83.             data.age = 0;
  84.             this.pay = 0;
  85.             group = 0;
  86.         }
  87.         //Person Data { get { return data; } set { data = value; } }
  88.         Education Pay { get { return pay; } set { pay = value; } }
  89.         int Group { get { return group; } set { group = value; } }
  90.         string Sur { get { return data.sur; } set { data.sur = value; } }
  91.         string Nam { get { return data.nam; } set { data.nam = value; } }
  92.         string Pat { get { return data.pat; } set { data.pat = value; } }
  93.         int Age { get { return data.age; } set { data.age = value; } }
  94.         List<Exam> Exam { get { return pass_ex; } set { pass_ex = value; } }
  95.  
  96.         public Student DeepCopy() {
  97.             var bf = new BinaryFormatter();
  98.             var ms = new MemoryStream();
  99.             bf.Serialize(ms, this);
  100.             return bf.Deserialize(ms) as Student;
  101.         }
  102.         public bool Save(string filename) {
  103.             using (var fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
  104.             {
  105.                 var bf = new BinaryFormatter();
  106.                 try { bf.Serialize(fs, this); }
  107.                 catch { Console.WriteLine("Сериализация завершилась не удачно");
  108.                     fs.Close();
  109.                     return false;
  110.                 }
  111.                 fs.Seek(0, SeekOrigin.Begin);
  112.                 fs.Close();
  113.                 return true;
  114.             }
  115.         }
  116.         public bool Load(string filename) {
  117.             using (var fs = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite))
  118.             {
  119.                 if (fs.CanRead)
  120.                 {
  121.                     var bf = new BinaryFormatter();
  122.                     fs.Seek(0, SeekOrigin.Begin);
  123.                     Student res;
  124.                     try { res = bf.Deserialize(fs) as Student; }
  125.                     catch {
  126.                         Console.WriteLine("Загрузка не выполнена.");
  127.                         fs.Close();
  128.                         return false;
  129.                     }
  130.                     data = res.data;
  131.                     pay = res.pay;
  132.                     pass_ex = res.pass_ex;
  133.                     group = res.group;
  134.                     fs.Close();
  135.                     return true;
  136.                 }
  137.                 else { fs.Close(); return false; }
  138.             }
  139.         }
  140.         public bool AddFromConsole() {
  141.             string text;
  142.             int count = 0;
  143.             string part = "", one = "", two = "", three ="";
  144.             Student res = new Student();
  145.             Console.WriteLine("Input: Surname, Name, Patronymic, Age, Education, Number Of Group, Exams(data(dd.mm.yyyy)|name of exam|value)");
  146.             Console.Write("Input: ");
  147.             text = Console.ReadLine();
  148.             for (int i = 0; i < text.Length; ++i) {
  149.                 if (text[i] == ' ') continue;
  150.                 else if (text[i] != ',') part = part + text[i];
  151.                 else {
  152.                     if (count == 0) { res.data.sur = part; count++; }
  153.                     else if (count == 1) { res.data.nam = part; count++; }
  154.                     else if (count == 2) { res.data.pat = part; count++; }
  155.                     else if (count == 3) { if (!int.TryParse(part, out res.data.age)) return false; else count++; }
  156.                     else if (count == 4) { if (part == "budjet") res.pay = Education.budjet; else if (part == "platnoe") res.pay = Education.platnoe; else return false; count++; }
  157.                     else if (count == 5) { if (!int.TryParse(part, out res.group)) return false; else count++; }
  158.                     else {
  159.                         for (int flag = 0; i < part.Length; ++i) {
  160.                             if (char.IsLetterOrDigit(part[i]))
  161.                             {
  162.                                 if (flag == 0) one += part[i];
  163.                                 else if (flag == 1) two += part[i];
  164.                                 else three += part[i];
  165.                             }
  166.                             else flag++;
  167.                         }
  168.                         Exam obj  = new Exam();
  169.                         obj.data = one;
  170.                         obj.name = two;
  171.                         obj.value = Convert.ToInt16(three);
  172.                         res.pass_ex.Add(obj);
  173.                         one = two = three = "";
  174.                     }
  175.                     part = "";
  176.                 }
  177.             }
  178.             data = res.data;
  179.             pay = res.pay;
  180.             pass_ex = res.pass_ex;
  181.             group = res.group;
  182.             return true;
  183.         }
  184.     }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement