Filipenya_Katerina / Отчёт 1
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение Образования
«Белорусский Государственный Университет Информатики и Радиоэлектроники»
кафедра информатики
Инструменты и средства программирования
Отчёт по лабораторной работе №1
Выполнила: студентка гр. 152002
Филипеня Екатерина Дмитриевна
Проверил:
Тычко Дмитрий Николаевич
Минск 2013
Задание
1. Разработать функциональные требования к выбранному Проекту – определить список возможностей, которые будут реализованы программой.
2. Разработать общую архитектуру Проекта.
3. Создать слой доступа к данным, используя в качестве хранилищ текстовые файлы, двоичные файлы, XML (на выбор).
4. Создать слой бизнес-логики.
5. Протестировать DAL и бизнес-логику, написав консольное приложение.
Листинг
namespace BEntities
{
public abstract class Entity
{
public Guid _ID { get; set; }
}
}
namespace BEntities
{
public class Film :Entity, IEquatable<Film>
{
public string _Name { get; set; }
public Guid _GenreID { get; set; }
public TimeSpan _Duration { get; set; }
public Guid _DirectorID { get; set; }
public int _Rating { get; set; }
public Film()
{
_ID = Guid.NewGuid();
}
public Film(string name, Genre genre, TimeSpan duration, Director director,int rating)
{
_ID = Guid.NewGuid();
_Name = name;
_GenreID = genre._ID;
_Duration = duration;
_DirectorID = director._ID;
if (rating <= 0)
{
_Rating = 0;
}
else
{
if (rating >= 10)
{
_Rating = 10;
}
else
{
_Rating = rating;
}
}
}
public bool Equals(Film other)
{
if (other == null)
return false;
if (this._ID == other._ID)
return true;
else
return false;
}
public override bool Equals(Object obj)
{
if (obj == null)
return false;
Film filmObj = obj as Film;
if (filmObj == null)
return false;
else
return Equals(filmObj);
}
public override int GetHashCode()
{
return this._ID.GetHashCode();
}
public static bool operator ==(Film f1, Film f2)
{
if ((object)f1 == null || ((object)f2) == null)
return Object.Equals(f1, f2);
return f1.Equals(f2);
}
public static bool operator !=(Film f1, Film f2)
{
if (f1 == null || f2 == null)
return !Object.Equals(f1, f2);
return !(f1.Equals(f2));
}
}
}
namespace BEntities
{
public class Genre:Entity,IEquatable<Genre>
{
public string _Genre { get; set; }
public Genre(string genre)
{
_Genre = genre;
_ID = Guid.NewGuid();
}
public Genre()
{
_ID = Guid.NewGuid();
}
public bool Equals(Genre other)
{
if (other == null)
return false;
if (this._ID == other._ID)
return true;
else
return false;
}
public override bool Equals(Object obj)
{
if (obj == null)
return false;
Genre genreObj = obj as Genre;
if (genreObj == null)
return false;
else
return Equals(genreObj);
}
public override int GetHashCode()
{
return this._ID.GetHashCode();
}
public static bool operator ==(Genre g1, Genre g2)
{
if ((object)g1 == null || ((object)g2) == null)
return Object.Equals(g1, g2);
return g1.Equals(g2);
}
public static bool operator !=(Genre g1, Genre g2)
{
if (g1 == null || g2 == null)
return !Object.Equals(g1, g2);
return !(g1.Equals(g2));
}
}
}
namespace BEntities
{
public class Director:Entity,IEquatable<Director>
{
public string _Name { get; set; }
public string _Surname { get; set; }
public Director()
{
_ID = Guid.NewGuid();
}
public Director(string name, string surname)
{
_ID = Guid.NewGuid();
_Name = name;
_Surname = surname;
}
public bool Equals(Director other)
{
if (other == null)
return false;
if (this._ID == other._ID)
return true;
else
return false;
}
public override bool Equals(Object obj)
{
if (obj == null)
return false;
Director directorObj = obj as Director;
if (directorObj == null)
return false;
else
return Equals(directorObj);
}
public override int GetHashCode()
{
return this._ID.GetHashCode();
}
public static bool operator ==(Director d1, Director d2)
{
if ((object)d1 == null || ((object)d2) == null)
return Object.Equals(d1, d2);
return d1.Equals(d2);
}
public static bool operator !=(Director d1, Director d2)
{
if (d1 == null || d2 == null)
return !Object.Equals(d1, d2);
return !(d1.Equals(d2));
}
}
}
namespace BComponents
{
interface IBComponents
{
void Create(Entity e);
void Update(Guid id, Entity newe);
void Update(Entity olde, Entity newe);
void Delete(Guid id);
void Delete(Entity e);
}
}
namespace BComponents
{
public class FilmComponents:IBComponents
{
private DACFilm dacfilm;
private const int TopNumber = 3;
public FilmComponents()
{
dacfilm = new DACFilm();
}
public void Create(Entity f)
{
dacfilm.Create(f);
}
public Film Read( Guid id)
{
return dacfilm.Read(id);
}
public void Update(Guid id, Entity newfilm)
{
dacfilm.Update(id, newfilm);
}
public void Update(Entity oldfilm, Entity newfilm)
{
dacfilm.Update(oldfilm._ID, newfilm);
}
public void Delete(Guid id)
{
dacfilm.Delete(id);
}
public void Delete(Entity f)
{
dacfilm.Delete(f._ID);
}
public IEnumerable<Film> ReadAll()
{
return dacfilm.ReadAll();
}
public IEnumerable<Film> TopFilms()
{
return dacfilm.ReadAll().OrderByDescending(film => film._Rating).Take(TopNumber);
}
public IEnumerable<Film> Rating()
{
return dacfilm.ReadAll().OrderByDescending(film => film._Rating);
}
public IEnumerable<Film> ChoiceByDirector(Director director)
{
return dacfilm.ReadAll().Where(film => film._DirectorID == director._ID);
}
public IEnumerable<Film> ChoiceByGenre(Genre genre)
{
return dacfilm.ReadAll().Where(film => film._GenreID == genre._ID);
}
public IEnumerable<Film> Search(string name)
{
return dacfilm.ReadAll().Where(film => film._Name.ToLower() == name.ToLower());
}
}
namespace BComponents
{
public class GenreComponents : IBComponents
{
private DACGenre dacgenre;
public GenreComponents()
{
dacgenre = new DACGenre();
}
public void Create(Entity g)
{
dacgenre.Create(g);
}
public Genre Read(Guid id)
{
return dacgenre.Read(id);
}
public void Update(Guid id, Entity newgenre)
{
dacgenre.Update(id, newgenre);
}
public void Update(Entity oldgenre, Entity newgenre)
{
dacgenre.Update(oldgenre._ID, newgenre);
}
public void Delete(Guid id)
{
dacgenre.Delete(id);
}
public void Delete(Entity g)
{
dacgenre.Delete(g._ID);
}
public IEnumerable<Genre> ReadAll()
{
return dacgenre.ReadAll();
}
public Genre Search(string genre)
{
var genres = dacgenre.ReadAll();
var selected = genres.Where(g => g._Genre.ToLower() == genre.ToLower());
if (selected.Count() != 0)
{
return selected.ElementAt(0);
}
else return null;
}
}
}
namespace BComponents
{
public class DirectorComponents:IBComponents
{
private DACDirector dacdirector;
public DirectorComponents()
{
dacdirector = new DACDirector();
}
public void Create(Entity d)
{
dacdirector.Create(d);
}
public Director Read(Guid id)
{
return dacdirector.Read(id);
}
public void Update(Guid id, Entity newdirector)
{
dacdirector.Update(id, newdirector);
}
public void Update(Entity olddirector, Entity newdirector)
{
dacdirector.Update(olddirector._ID, newdirector);
}
public void Delete(Guid id)
{
dacdirector.Delete(id);
}
public void Delete(Entity d)
{
dacdirector.Delete(d._ID);
}
public IEnumerable<Director> ReadAll()
{
return dacdirector.ReadAll();
}
public Director Search(string directorname, string directorsurname)
{
var directors = dacdirector.ReadAll();
var selected = directors.Where(director => director._Surname == directorsurname).
Where(director => director._Name == directorname);
if (selected.Count() != 0)
{
return selected.ElementAt(0);
}
else return null;
}
}
}
namespace DataAccessComponents
{
interface IDataAccessComponents
{
void Create(Entity entity);
void Update(Guid id, Entity newentity);
void Delete(Guid id);
}
}
namespace DataAccessComponents
{
public class DACGenre : IDataAccessComponents
{
public void Create(Entity g)
{
var genre = g as Genre;
string adr = string.Concat(@"C:\Users\user\Desktop\genres\", genre._ID.ToString(), @".txt");
var file = new FileInfo(adr);
using (FileStream fs = file.Open(FileMode.Create,
FileAccess.ReadWrite, FileShare.ReadWrite))
{
var sw = new StreamWriter(fs);
sw.WriteLine(genre._ID);
sw.WriteLine(genre._Genre);
sw.Flush();
}
}
public Genre Read(Guid id)
{
string adr = string.Concat(@"C:\Users\user\Desktop\genres\", id.ToString(), @".txt");
using (FileStream fs = File.OpenRead(adr))
{
var sr = new StreamReader(fs);
Genre genre = new Genre();
genre._ID = Guid.Parse(sr.ReadLine());
genre._Genre = sr.ReadLine();
return genre;
}
}
public void Update(Guid id, Entity newg)
{
var newgenre = newg as Genre;
Delete(id);
Create(newgenre);
}
public void Delete(Guid id)
{
string adr = string.Concat(@"C:\Users\user\Desktop\genres\", id.ToString(), @".txt");
var file = new FileInfo(adr);
file.Delete();
}
public IEnumerable<Genre> ReadAll()
{
string adr = @"C:\Users\user\Desktop\genres";
var dir = new DirectoryInfo(adr);
List<Genre> genres = new List<Genre>();
FileInfo[] files = dir.GetFiles("*.txt", SearchOption.TopDirectoryOnly);
foreach (var file in files)
{
var g = Read(Guid.Parse(file.Name.Remove(file.Name.Count() - 4)));
genres.Add(g);
}
return genres;
}
}
}
namespace DataAccessComponents
{
public class DACFilm :IDataAccessComponents
{
public void Create(Entity f)
{
var film = f as Film;
string adr = string.Concat(@"C:\Users\user\Desktop\films\", film._ID.ToString(), @".txt");
var file = new FileInfo(adr);
using (FileStream fs = file.Open(FileMode.Create,
FileAccess.ReadWrite, FileShare.ReadWrite))
{
var sw = new StreamWriter(fs);
sw.WriteLine(film._ID);
sw.WriteLine(film._Name);
sw.WriteLine(film._DirectorID);
sw.WriteLine(film._Rating);
sw.WriteLine(film._Duration);
sw.WriteLine(film._GenreID);
sw.Flush();
}
}
public Film Read(Guid id)
{
string adr = string.Concat(@"C:\Users\user\Desktop\films\", id.ToString(), @".txt");
using (FileStream fs = File.OpenRead(adr))
{
var sr = new StreamReader(fs);
Film film = new Film();
film._ID = Guid.Parse(sr.ReadLine());
film._Name = sr.ReadLine();
film._DirectorID = Guid.Parse(sr.ReadLine());
film._Rating = Int32.Parse(sr.ReadLine());
film._Duration = TimeSpan.Parse(sr.ReadLine());
film._GenreID = Guid.Parse(sr.ReadLine());
return film;
}
}
public void Update(Guid id, Entity newf)
{
var newfilm = newf as Film;
Delete(id);
Create(newfilm);
}
public void Delete(Guid id)
{
string adr = string.Concat(@"C:\Users\user\Desktop\films\", id.ToString(),@".txt");
var file = new FileInfo(adr);
file.Delete();
}
public IEnumerable<Film> ReadAll()
{
string adr = @"C:\Users\user\Desktop\films";
var dir = new DirectoryInfo(adr);
List<Film> catalogue = new List<Film>();
FileInfo[] files = dir.GetFiles("*.txt", SearchOption.TopDirectoryOnly);
foreach (var file in files)
{
var film = Read(Guid.Parse(file.Name.Remove(file.Name.Count() - 4)));
catalogue.Add(film);
}
return catalogue;
}
}
}
namespace DataAccessComponents
{
public class DACDirector : IDataAccessComponents
{
public void Create(Entity d)
{
var director = d as Director;
string adr = string.Concat(@"C:\Users\user\Desktop\directors\", director._ID.ToString(), @".txt");
var file = new FileInfo(adr);
using (FileStream fs = file.Open(FileMode.Create,
FileAccess.ReadWrite, FileShare.ReadWrite))
{
var sw = new StreamWriter(fs);
sw.WriteLine(director._ID);
sw.WriteLine(director._Name);
sw.WriteLine(director._Surname);
sw.Flush();
}
}
public Director Read(Guid id)
{
string adr = string.Concat(@"C:\Users\user\Desktop\directors\", id.ToString(), @".txt");
using (FileStream fs = File.OpenRead(adr))
{
var sr = new StreamReader(fs);
Director director = new Director();
director._ID = Guid.Parse(sr.ReadLine());
director._Name = sr.ReadLine();
director._Surname = sr.ReadLine();
return director;
}
}
public void Update(Guid id, Entity newd)
{
var newdirector = newd as Director;
Delete(id);
Create(newdirector);
}
public void Delete(Guid id)
{
string adr = string.Concat(@"C:\Users\user\Desktop\directors\", id.ToString(), @".txt");
var file = new FileInfo(adr);
file.Delete();
}
public IEnumerable<Director> ReadAll()
{
string adr = @"C:\Users\user\Desktop\directors";
var dir = new DirectoryInfo(adr);
List<Director> directors = new List<Director>();
FileInfo[] files = dir.GetFiles("*.txt", SearchOption.TopDirectoryOnly);
foreach (var file in files)
{
var director = Read(Guid.Parse(file.Name.Remove(file.Name.Count() - 4)));
directors.Add(director);
}
return directors;
}
}
}
namespace First_Lab
{
class Program
{
static void Main(string[] args)
{
User user = new User();
user.ShowMenu();
}
}
}
namespace First_Lab
{
class User
{
public FilmComponents _FilmComponents { get; set; }
public User()
{
_FilmComponents = new FilmComponents();
}
public void ShowMenu()
{
bool userDone = false;
string userCommand = "";
//запросы пользовательких команд, пока не будет нажата клавиша <Q>
try
{
ShowInstructions();
do
{
Console.Write("\n Введите команду: ");
userCommand = Console.ReadLine();
Console.WriteLine();
switch (userCommand.ToUpper())
{
case "L":
LookFilms();
break;
case "S":
ShowInstructions();
break;
case "I":
GetInfo();
break;
case "T":
TopFilms();
break;
case "G":
Genres();
break;
case "D":
Directors();
break;
case "Q":
userDone = true;
break;
default:
Console.WriteLine("Неверно! Попробуйте ещё раз");
break;
}
} while (!userDone);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void ShowInstructions()
{
Console.WriteLine("L - вывод каталога фильмов");
Console.WriteLine("S - вывод этих инструкций");
Console.WriteLine("I - вывод информации о фильме");
Console.WriteLine("T - вывод лучших фильмов");
Console.WriteLine("G - поиск фильмов по жанру");
Console.WriteLine("D - поиск фильмов по режиссёру");
Console.WriteLine("Q - завершение работы");
}
private void LookFilms()
{
Console.WriteLine("Каталог фильмов: ");
foreach (var f in _FilmComponents.ReadAll())
{
Console.WriteLine(f._Name);
}
}
private void TopFilms()
{
Console.WriteLine("Топ-3 лучших фильмов: ");
foreach (var f in _FilmComponents.TopFilms())
{
Console.WriteLine();
Console.WriteLine(f._Name);
for (int i = 1; i <= f._Rating; i++)
{
Console.Write("*");
}
}
}
private void GetInfo()
{
Console.WriteLine("Введите название фильма: ");
string name = Console.ReadLine();
IEnumerable<Film> films = _FilmComponents.Search(name);
if (films.Count() == 0)
{
Console.WriteLine("К сожалению, данного фильма в каталоге нет!");
}
else
{
foreach (var f in films)
{
DirectorComponents directorcomponents = new DirectorComponents();
Director director = directorcomponents.Read(f._DirectorID);
GenreComponents genrecomponents = new GenreComponents();
Genre genre = genrecomponents.Read(f._GenreID);
string filmattributes;
filmattributes = string.Concat("Фильм - ", f._Name, " (режиссёр - ", director._Name,
" ", director._Surname, ") ,жанр - ",
genre._Genre.ToString(), ", ", "\n", "продолжительность - ", f._Duration.ToString(), "\n");
for (int i = 1; i <= f._Rating; i++)
{
filmattributes = string.Concat(filmattributes, "*");
}
Console.WriteLine(filmattributes);
}
}
}
private void Directors()
{
Console.WriteLine("Введите имя режиссёра: ");
string name = Console.ReadLine();
Console.WriteLine("Введите фамилию режиссёра: ");
string surname = Console.ReadLine();
DirectorComponents dc = new DirectorComponents();
Director director = dc.Search(name, surname);
if (director != null)
{
var fs = _FilmComponents.ChoiceByDirector(director);
if (fs.Count() != 0)
{
foreach (var f in fs)
{
Console.WriteLine(f._Name.ToString());
}
}
}
else
{
Console.WriteLine("К сожалению, фильмов режиссёра {0} {1} нет в каталоге."
, name, surname);
}
}
}
}