Разработка программного приложения читальный зал

Содержание

Слайд 2

Цель и задачи курсовой работы Цель курсовой работы: разработка программного приложения

Цель и задачи курсовой работы

Цель курсовой работы: разработка программного приложения

«Читальный зал»
Для достижения цели необходимо выполнить следующие задачи:
проанализировать предметную область, построить модель;
описать классы, методы, алгоритмы взаимодействия;
разработать структурную схему интерфейса;
разработать классы;
разработать интерфейс приложения;
разработать тест-кейсы;
провести тестирование.
Слайд 3

Анализ предметной области В читальном зале хранится огромное количество печатных изданий,

Анализ предметной области

В читальном зале хранится огромное количество печатных изданий, его

посещают довольно много людей, так как чтение является одним из самых популярных способов проведения досуга.
Для повышения качества обслуживания посетителей и упрощения работы персонала необходимо разработать программное приложение «Читальный зал», которое позволит персоналу читального зала намного быстрее находить, выдавать и принимать печатные издания, осуществлять контроль за выданными печатными изданиями, получать информацию о задолженностях.
Разработка предполагаемого приложения обеспечит контроль за эксклюзивными и антикварными печатными изданиями, чтобы ни одно из них не было утеряно.
Слайд 4

Анализ предметной области Приложение должно иметь следующие функции: функция добавления нового

Анализ предметной области

Приложение должно иметь следующие функции:
функция добавления нового печатного

издания в каталог;
функцию изменения данных в случае, если изначально информация была введена неверно;
функцию добавления и удаления печатных изданий для обновления каталога;
функцию поиска печатных изданий по различным критериям.
Слайд 5

Анализ предметной области Объект: печатное издание. Действия: просмотр каталога доступных и

Анализ предметной области

Объект: печатное издание.
Действия: просмотр каталога доступных и «просроченных» печатных

изданий, поиск, удаление и добавление печатных изданий, а также изменение информации.
Объект: посетитель.
Действия: добавление и вывод информации.
Слайд 6

Описание классов и методов Класс: Книги Атрибуты класса: название; фамилия автора;

Описание классов и методов

Класс: Книги
Атрибуты класса:
название;
фамилия автора;
имя автора;
отчество автора;
жанр/дисциплина/тематика
издательство;
год издания;
количество страниц;
описание

книги.
изображение обложки.
Методы класса:
вывод информации о печатном издании;
изменение информации о печатном издании;
удаление печатного издания;
отображение даты выдачи и сдачи печатного издания;
возвращение в главное меню.
Слайд 7

Описание классов и методов Класс: Посетитель Атрибуты класса: фамилия взявшего посетителя;

Описание классов и методов

Класс: Посетитель
Атрибуты класса:
фамилия взявшего посетителя;
имя взявшего посетителя;
отчество взявшего

посетителя;
дата, когда посетитель взял печатное издание;
срок хранения книги у взявшего посетителя;
дата, когда взявший книгу посетитель должен вернуть печатное издание.
Методы класса:
вывод информации об объекте;
возможность взять печатное издание;
возврат печатного издания.
Слайд 8

Структурная схема приложения

Структурная схема приложения

Слайд 9

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 10

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 11

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 12

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 13

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 14

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 15

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 16

Структурная схема интерфейса

Структурная схема интерфейса

Слайд 17

Разработка программного кода приложения public class Book { public string title;

Разработка программного кода приложения

public class Book
{
public string title; //

название печатного издания
public FIO author = new FIO(); // автор
public string genre; // жанр
public string publisher; // издательство
public string year; // год издания
public string pageCount; // количество страниц
public string imagePath; // путь к изображению обложки
public string description; // описание
public int status; // статус в наличие / не в наличие
public visitor visitor = new visitor();

public string info()
{
return title + "\n" + author.info() + genre + "\n" +
publisher + "\n" + year + "\n" + pageCount + "\n" + imagePath + "\n" + description + "\n"
+ status + "\n" + visitor.info();
}
}
Слайд 18

Разработка программного кода приложения public class visitor { public FIO name

Разработка программного кода приложения

public class visitor
{
public FIO name

= new FIO();
public string dateFrom; // когда посетитель взял печатное издание
public int storageTime; // срок хранения
public string dateTo; // когда посетитель должен вернуть печатное издание
...
public string info()
{
return name.info() + dateFrom + "\n" + storageTime.ToString() + "\n" +
dateTo + "\n";
}
}
Слайд 19

Разработка программного кода приложения private int search(string fileName) // поиск в

Разработка программного кода приложения


private int search(string fileName) // поиск

в файле
{
StreamReader sr = File.OpenText(fileName); // открываем нужный файл
bool found = false; // найдено ли печатное издание
while (!sr.EndOfStream) // пока файл не закончился
{
Book book = new Book(); // переменная для считывания
// считываем все параметры
bookRead(book, sr);
// проверка на совпадения
if (book.title == textBox1.Text || book.genre == textBox1.Text
|| book.publisher == textBox1.Text || book.year == textBox1.Text || book.pageCount == textBox1.Text
|| (textBox1.Text.Contains(book.author.authorFirstName) && textBox1.Text.Contains(book.author.authorSecondName)
&& textBox1.Text.Contains(book.author.authorThirdName)))
{
found = true; // флаг, что найдено
string typeBook = "";
if (fileName == "books.txt")
{
typeBook = "Книги";
}
else if (fileName == "newspapers.txt")
{
typeBook = "Журналы и газеты";
}
else if (fileName == "textbooks.txt")
{
typeBook = "Учебники";
}
// открываем форму с найденной книгой
BookView bookView = new BookView(this, book, typeBook);
bookView.Show();
this.Hide();
break;
}
}
Слайд 20

Переход из главного меню в раздел книги/журналы и газеты/учебники описан в

Переход из главного меню в раздел книги/журналы и газеты/учебники описан в

методе openBookMenu.
private void openBookMenu(object sender, EventArgs e) // три кнопки, книги/журналы/учебники
{
// у всех кнопок одна функция, которая передаёт в новую форму название
// в зависимости от него форма будет меняться
Page page = new Page(((Button)sender).Text, this);
page.Show();
this.Hide();
}

Разработка интерфейса

Слайд 21

public Page(string name, Menu menu) { this.name = name; this.menu =

public Page(string name, Menu menu)
{
this.name = name;
this.menu =

menu;
InitializeComponent();
label1.Text = name;
if(name == "Книги")
{
button1.Text += "книг";
button2.Text += "книгу";
button3.Text += "книгу";
button4.Text += "книге";
button5.Text += "книг";
button6.Text += "книги";
} else if (name == "Журналы и газеты")
{
button1.Text += "печатных изданий";
button2.Text += "печатное издание";
button3.Text += "печатное издание";
button4.Text += "печатном издании";
button5.Text += "печатных изданий";
button6.Text += "печатного издания";
} else if (name == "Учебники")
{
button1.Text += "учебников";
button2.Text += "учебник";
button3.Text += "учебник";
button4.Text += "учебнике";
button5.Text += "учебников";
button6.Text += "учебника";
}
}

Разработка интерфейса

Слайд 22

public Edit(Page page, bool newBook, string typeBook) { this.page = page;

public Edit(Page page, bool newBook, string typeBook)
{
this.page =

page; // ссылка на предыдущую форму
this.newBook = newBook; // флаг - создать новую / изменить старую
this.typeBook = typeBook; // название категории
InitializeComponent();
if (newBook) // если создать новую
{
button1.Text = "Добавить"; // название кнопки
button3.Visible = false; // делаем невидимой кнопку поиска
} else
{
button1.Text = "Изменить информацию о печатном издании"; // название кнопки
button3.Visible = true; // делаем видимой кнопку поиска
}

Разработка интерфейса

Слайд 23

Разработка интерфейса

Разработка интерфейса

Слайд 24

// каждая функция для поиска работают одинаково private void button1_Click(object sender,


// каждая функция для поиска работают одинаково
private

void button1_Click(object sender, EventArgs e)
{
if(textBox1.Text == "")
{
MessageBox.Show("Введите данные");
return;
}
StreamReader sr = File.OpenText(fileName); // открываем файл
bool found = false; // флаг, что найдена
while (!sr.EndOfStream)
{
Book book = new Book(); // переменная для считывания
bookRead(book, sr); // считываем печатное издание
// проверяем, что именно оно нам нужно
if (textBox1.Text.Contains(book.author.authorFirstName)
&& textBox1.Text.Contains(book.author.authorSecondName)
&& textBox1.Text.Contains(book.author.authorThirdName))
{
found = true; // флаг, что нашли
openBookInfo(book); // открываем информацию о печатном издании
break;
}
}

Разработка интерфейса

Слайд 25

public Catalog(Page page, string typeBook) { ... if(typeBook == "Книги") {

public Catalog(Page page, string typeBook)
{
...
if(typeBook == "Книги")

{
sr = File.OpenText("books.txt");
} else if (typeBook == "Журналы и газеты")
{
sr = File.OpenText("newspapers.txt");
}
else if (typeBook == "Учебники")
{
sr = File.OpenText("textbooks.txt");
}
}

Разработка интерфейса

Слайд 26

public DeleteBook(Page page, string typeBook) { this.page = page; InitializeComponent(); //

public DeleteBook(Page page, string typeBook)
{
this.page = page;
InitializeComponent();

// в зависимости от категории выбираем файл с которым работать
if (typeBook == "Книги")
{
fileName = "books.txt";
}
else if (typeBook == "Журналы и газеты")
{
fileName = "newspapers.txt";
}
else if (typeBook == "Учебники")
{
fileName = "textbooks.txt";
}
...
// открываем нужный файл
StreamReader sr = File.OpenText(fileName);

Разработка интерфейса

Слайд 27

Разработка интерфейса

Разработка интерфейса

Слайд 28

bool found = false; // флаг, нашли ли печатное издание //

bool found = false; // флаг, нашли ли печатное издание

// считываем до конца файла
while (!sr.EndOfStream)
{
Book book = new Book();
bookRead(book, sr);
// проверка что нужное печатное издание
if (book.title == textBox1.Text)
{
found = true; // флаг, что нашли
} else
{
books.Add(book); // сохраняем другие печатные издания
} }
sr.Close();
// если нашли печатное издание, то сохраняем в файл все, кроме него
if (found)
{
File.Delete(fileName);
foreach(Book b in books)
{
File.AppendAllText(fileName, b.info());
}
MessageBox.Show(«Печатное издание удалено");
} else
{
MessageBox.Show(«Печатное издание не найдено");
}
}

Разработка интерфейса

Слайд 29

Разработка интерфейса

Разработка интерфейса

Слайд 30

public partial class BookView : Form { ... label11.Text = b.title;

public partial class BookView : Form
{
...
label11.Text = b.title;
label12.Text

= b.author.authorFirstName;
label13.Text = b.author.authorSecondName;
label14.Text = b.author.authorThirdName;
label15.Text = b.genre;
label16.Text = b.publisher;
label17.Text = b.year;
label18.Text = b.pageCount;
pictureBox1.Image = Image.FromFile(b.imagePath);
label24.Text = b.description;
...
if(textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" ||
textBox4.Text == "")
{
MessageBox.Show("Введите данные");
return;
}
b.visitor.name.authorFirstName = textBox1.Text;
b.visitor.name.authorSecondName = textBox2.Text;
b.visitor.name.authorThirdName = textBox3.Text;
b.visitor.storageTime = int.Parse(textBox4.Text);
DateTime today = DateTime.Now;
b.visitor.dateFrom = today.ToString();
b.visitor.dateTo = today.AddDays(b.visitor.storageTime).ToString();
StreamReader sr = File.OpenText(fileName);
...
}
private void bookRead(Book book, StreamReader sr)
{
book.title = sr.ReadLine(); // имя
book.author.authorFirstName = sr.ReadLine();
book.author.authorSecondName = sr.ReadLine();
book.author.authorThirdName = sr.ReadLine();
book.genre = sr.ReadLine();
book.publisher = sr.ReadLine();
book.year = sr.ReadLine();
book.pageCount = sr.ReadLine();
book.imagePath = sr.ReadLine();
book.description = sr.ReadLine();
book.status = int.Parse(sr.ReadLine());
book.visitor.name.authorFirstName = sr.ReadLine();
book.visitor.name.authorSecondName = sr.ReadLine();
book.visitor.name.authorThirdName = sr.ReadLine();
book.visitor.dateFrom = sr.ReadLine();
book.visitor.storageTime = int.Parse(sr.ReadLine());
book.visitor.dateTo = sr.ReadLine();
}

Разработка интерфейса

Слайд 31

Разработка интерфейса

Разработка интерфейса

Слайд 32

public BookTaken(Form page, Book book, string fileName) { ... label12.Text =

public BookTaken(Form page, Book book, string fileName)
{
...
label12.Text =

book.visitor.name.authorFirstName;
label13.Text = book.visitor.name.authorSecondName;
label14.Text = book.visitor.name.authorThirdName;
label15.Text = book.visitor.dateFrom;
label1.Text = book.visitor.storageTime.ToString();
label7.Text = book.visitor.dateTo;
}
private void button1_Click(object sender, EventArgs e)
{
StreamReader sr = File.OpenText(fileName);
books.Clear();
while (!sr.EndOfStream)
{
Book book = new Book(); // переменная для считывания
bookRead(book, sr);
if (book.title != b.title)
{
books.Add(book);
}
}
sr.Close();
b.status = 1;
File.Delete(fileName);
foreach (Book b2 in books)
{
File.AppendAllText(fileName, b2.info());
}
// !! status всегда 1
File.AppendAllText(fileName, b.info());
MessageBox.Show("Печатное издание возвращено");
...
}

Разработка интерфейса

Слайд 33

Тестирование приложения

Тестирование приложения

Слайд 34

Тест-кейс №1 «Добавление книги (позитивный)»

Тест-кейс №1 «Добавление книги (позитивный)»

Слайд 35

Тест-кейс №2 «Добавление книги (негативный)»

Тест-кейс №2 «Добавление книги (негативный)»

Слайд 36

Тест-кейс №6 «Просмотр каталога доступных книг»

Тест-кейс №6 «Просмотр каталога доступных книг»

Слайд 37

Тест-кейс №9 «Удаление книги (позитивный)»

Тест-кейс №9 «Удаление книги (позитивный)»

Слайд 38

Тест-кейс №20 «Работа кнопки «Назад»

Тест-кейс №20 «Работа кнопки «Назад»

Слайд 39

Тест-кейс №27 «Оформление печатного издания (учебника) на посетителя»

Тест-кейс №27 «Оформление печатного издания (учебника) на посетителя»

Слайд 40

Тест-кейс №28 «Оформление возврата печатного издания (учебника)»

Тест-кейс №28 «Оформление возврата печатного издания (учебника)»

Слайд 41

Тест-кейс №32 «Проверка корректности введенных данных в раздел «Поиск книги»

Тест-кейс №32 «Проверка корректности введенных данных в раздел «Поиск книги»

Слайд 42

Тест-кейс №34 «Поиск печатного издания»

Тест-кейс №34 «Поиск печатного издания»

Слайд 43

Исправление выявленных дефектов Замена функции checkNumber на checkLetterWithSpace private void checkLetterWithSpace(object

Исправление выявленных дефектов

Замена функции checkNumber на checkLetterWithSpace
private void checkLetterWithSpace(object sender, KeyPressEventArgs

e)
{
if (e.KeyChar == 8)
{
return;
}
if (!(Char.IsLetter(e.KeyChar) || Char.IsWhiteSpace(e.KeyChar)))
{
e.Handled = true;
}
}
Слайд 44

Исправление выявленных дефектов Исправление синтаксической ошибки – в функции поиска по

Исправление выявленных дефектов

Исправление синтаксической ошибки – в функции поиска по издательству

отсутствовало else перед частью кода, отвечающей за всплывающее окно. Добавив else, ошибка была устранена.
if (found)
{
this.Close();
}
else
{
MessageBox.Show("Не найдено");
}
}
Слайд 45

Результаты проведения тестирования По результатам проведения тестирования программное приложение 4 тест-кейса

Результаты проведения тестирования

По результатам проведения тестирования программное приложение 4 тест-кейса

из 34 были провалены.
В ходе тестирования программного приложения применялись разные виды тестирования, как негативное тестирование (например, ввод цифр в те поля ввода, где цифры не должны вводиться), так и позитивное (ввод корректных данных в поля ввода).
Были выявлены следующие дефекты:
неправильное написание элементов формы в каталоге, для дальнейшей ссылки на них;
отсутствие проверок написаний в меню поиска;
несоответствие компьютерных путей к изображению обложки печатного издания с реальным ее расположением на ПК пользователя;
синтаксические ошибки, например, отсутствие else для корректности вывода всплывающего окна.
Слайд 46

Заключение В ходе выполнения работы было разработано программное приложение «Читальный зал».

Заключение

В ходе выполнения работы было разработано программное приложение «Читальный зал».
В результате

курсовой работы были выполнены следующие задачи:
проанализирована предметная область, построена модель;
описаны классы, методы, алгоритмы взаимодействия;
разработана структурная схема интерфейса;
разработаны классы;
разработан интерфейс приложения;
разработаны тест-кейсы;
проведено тестирование, исправлены выявленные дефекты/
Таким образом, поставленные задачи выполнены, цель достигнута.