Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Filipenya_Katerina / Отчёт 1

.docx
Скачиваний:
8
Добавлен:
11.05.2015
Размер:
53.06 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение Образования

«Белорусский Государственный Университет Информатики и Радиоэлектроники»

кафедра информатики

Инструменты и средства программирования

Отчёт по лабораторной работе №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);

}

}

}

}

Соседние файлы в папке Filipenya_Katerina