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();
}
}
}
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()
);
}
}
}
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);
}
}
}
}
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;
}
}
}
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()