Материал: Лабораторная_работа_5_НикитинаДС

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Period = result.Period;

Score = result.Score;

}

}

catch (Exception e)

{

Console.WriteLine(e);

return false;

}

return true;

}

public static bool Save(string filename, Magazine magazine)

{

try

{

BinaryFormatter formatter = new BinaryFormatter();

using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))

{

formatter.Serialize(fs, magazine);

}

}

catch (Exception e)

{

Console.WriteLine(e);

return false;

}

return true;

}

public static bool Load(string filename, Magazine magazine)

{

try

{

BinaryFormatter formatter = new BinaryFormatter();

using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))

{

Magazine result = (Magazine)formatter.Deserialize(fs);

magazine.Articles = result.Articles;

magazine.Count = result.Count;

magazine.Editions = result.Editions;

magazine.Editors = result.Editors;

magazine.Name = result.Name;

magazine.OutDate = result.OutDate;

magazine.Outdate = result.Outdate;

magazine.Period = result.Period;

magazine.Score = result.Score;

}

}

catch (Exception e)

{

Console.WriteLine(e);

return false;

}

return true;

}

public Edition Editions

{

get

{

return new Edition((string)name.Clone(), outDate, count);

}

set

{

name = (string)value.Name.Clone();

outDate = value.OutDate;

count = value.Count;

}

}

public IEnumerable<Article> ArticlesByRate(double x)

{

foreach (Article a in articles)

{

if (a.Score > x)

yield return (Article)a.DeepCopy();

}

}

public IEnumerable<Article> ArticlesByString(string x)

{

foreach (Article a in articles)

{

if (a.Name.Contains(x))

yield return (Article)a.DeepCopy();

}

}

public IEnumerable<Article> ArticlesByEditors()

{

foreach (Article a in articles)

{

if (editors.LastIndexOf(a.Author) != -1)

yield return (Article)a.DeepCopy();

}

}

public IEnumerable<Person> OnlyEditors()

{

foreach (Person a in editors)

{

bool ans = true;

foreach (Article art in articles)

{

if (art.Author == a)

ans = false;

}

if (ans)

yield return (Person)a.DeepCopy();

}

}

public static new Magazine Scan()

{

Magazine Result = new Magazine();

Result.Editions = Edition.Scan();

Console.WriteLine("Введите переодичность");

Result.period = (Frequency)Frequency.Parse(typeof(Frequency), Console.ReadLine(), true);

Console.WriteLine("Введите количество статей");

long tcount = Convert.ToInt64(Console.ReadLine());

for (int i = 0; i < tcount; i++)

Result.AddArticles(Article.Scan());

Console.WriteLine("Введите количество редакторов");

tcount = Convert.ToInt64(Console.ReadLine());

for (int i = 0; i < tcount; i++)

Result.AddEditors(Person.Scan());

return Result;

}

public IEnumerator GetEnumerator()

{

throw new NotImplementedException();

}

public void OrderByTitle ()

{

articles = articles.OrderBy(x => x.Name).ToList();

}

public void OrderByEditorName ()

{

articles = articles.OrderBy(x => x.Author.LName).ToList();

}

public void OrderByScore ()

{

articles = articles.OrderBy(x => x.Score).ToList();

}

}

}

MagazinesChangedEventArgs.Cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace DashaLabs

{

delegate void MagazinesChangedHandler<TKey> (MagazinesChangedEventArgs<TKey> args);

class MagazinesChangedEventArgs<TKey> : EventArgs

{

public string CollectionName { get; set; }

public ChangeCollectionEventType EventType { get; set; }

public string ChangedProperty { get; set; }

public TKey ElementKey { get; set; }

public MagazinesChangedEventArgs(string collectionName, ChangeCollectionEventType eventType, string changedProperty, TKey elementKey)

{

CollectionName = collectionName;

EventType = eventType;

ChangedProperty = changedProperty;

ElementKey = elementKey;

}

public override string ToString()

{

return string.Format(

"Collection name: {0}\nEvent type: {1}\nChanged property: {2}\nElement key: {3}",

CollectionName,

EventType,

ChangedProperty,

ElementKey.ToString()

);

}

}

}

MagazineCollection.Cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.ComponentModel;

using System.Text;

using System.Threading.Tasks;

namespace DashaLabs

{

delegate TKey KeySelector<TKey>(Magazine mg);

class MagazineCollection<TKey>

{

private Dictionary<TKey, Magazine> magazines;

private Dictionary<TKey, PropertyChangedEventHandler> handlers;

private KeySelector<TKey> keySelector;

public string MagazineCollectionName { get; set; }

public event MagazinesChangedHandler<TKey> Notify;

public MagazineCollection(KeySelector<TKey> keySelector, string collectionName)

{

this.keySelector = keySelector;

MagazineCollectionName = collectionName;

magazines = new Dictionary<TKey, Magazine>();

handlers = new Dictionary<TKey, PropertyChangedEventHandler>();

}

public bool Replace(Magazine mOld, Magazine mNew)

{

if(!magazines.ContainsValue(mOld))

{

return false;

}

Dictionary<TKey, Magazine>.KeyCollection keys = magazines.Keys;

foreach (TKey key in keys)

{

if(Equals(magazines[key], mOld))

{

magazines.Remove(key);

magazines.Add(key, mNew);

PropertyChangedEventHandler handler;

handlers.TryGetValue(key, out handler);

mOld.PropertyChanged -= handler;

handlers.Remove(key);

PropertyChangedEventHandler newHandler = GetHandler(key);

handlers.Add(key, newHandler);

mNew.PropertyChanged += newHandler;

Notify?.Invoke(new MagazinesChangedEventArgs<TKey>(MagazineCollectionName, ChangeCollectionEventType.Replace, "", key));

return true;

}

}

return true;

}

public PropertyChangedEventHandler GetHandler(TKey key)

{

return (sender, args) => Notify?.Invoke(new MagazinesChangedEventArgs<TKey>(MagazineCollectionName, ChangeCollectionEventType.Property, args.PropertyName, key));

}

public void AddDefaults() { }

public void AddMagazines(params Magazine[] magazines)

{

foreach (Magazine entry in magazines)

{

TKey key = keySelector(entry);

Notify?.Invoke(new MagazinesChangedEventArgs<TKey>(MagazineCollectionName, ChangeCollectionEventType.Add, "", key));

PropertyChangedEventHandler handler = GetHandler(key);

handlers.Add(key, handler);

entry.PropertyChanged += handler;

this.magazines.Add(key, entry);

}

}

public override string ToString()

{

string result = "";

foreach (KeyValuePair<TKey, Magazine> entry in magazines)

{

result += entry.Value.ToString() + '\n';

}

return result;

}

public string ToShortString()

{

string result = "";

foreach (KeyValuePair<TKey, Magazine> entry in magazines)

{

result += entry.Value.ToShortString() + '\n';

}

return result;

}

public double MaxScore

{

get

{

return magazines.Max(x => x.Value.AverageScore);

}

}

public IEnumerable<KeyValuePair<TKey, Magazine>> FrequencyGroup(Frequency period)

{

return magazines.Where(x => x.Value.Period == period);

}

public IEnumerable<IGrouping<Frequency, KeyValuePair<TKey, Magazine>>> Groups

{

get

{

return magazines.GroupBy(x => x.Value.Period);

}

}

}

}

MagazineEnumerator.Cs

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace DashaLabs

{

class MagazineEnumerator : IEnumerator

{

Magazine magazine;

object CurrenaArticle;

int ind = 0;

public MagazineEnumerator(Magazine a)

{

magazine = a;

}

public object Current

{

get

{

return CurrenaArticle;

}

}

public bool MoveNext()

{

ind++;

for (int i = ind; i < magazine.Articles.Count; i++)

{

Article article = (Article)magazine.Articles[i];

Person author = article.Author;

if (magazine.Editors.LastIndexOf(author) == -1)

{

CurrenaArticle = magazine.Articles[i];

break;

}

}

return (ind < magazine.Articles.Count);

}

public void Reset()

{

ind = 0;

}

}

}

Person.Cs

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace DashaLabs

{

[Serializable]

class Person

{

private string FirstName;

private string LastName;

private System.DateTime BirthDate;

public Person(string f, string l, DateTime d)

{

FirstName = f;

LastName = l;

BirthDate = d;

}

public Person()

{

FirstName = "Daria";

LastName = "Nikitina";

BirthDate = DateTime.Now;

}

public string FName

{

get

{

return FirstName;

}

set

{

FirstName = value;

}

}

public string LName

{

get

{

return LastName;

}

set

{

LastName = value;

}

}

public DateTime BDate

{

get

{

return BirthDate;

}

set

{

BirthDate = value;

}

}

public int YearBirth

{

get

{

return BirthDate.Year;

}

set

{

BirthDate = new DateTime(value, BirthDate.Month, BirthDate.Day);

}

}

public override string ToString()

{

return "Имя: " + FirstName + "\n" + "Фамилия: " + LastName + "\n" + BirthDate.ToString() + "\n";

}

public virtual string ToShortString()

{

return "Имя: " + FirstName + "\n" + "Фамилия: " + LastName + "\n";

}

public override bool Equals(object obj)

{

Person pobj = (Person)obj;

return (string)this.FirstName.Clone() == (string)pobj.FirstName.Clone() && (string)this.LastName.Clone() == (string)pobj.LastName.Clone() && this.BirthDate == pobj.BirthDate;

}

public override int GetHashCode()

Источник: https://studfile.net/preview/16465819/