Домашняя библиотека. 3
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГОУ
ВПО «Чувашский Государственный
Университет им. И.Н. Ульянова»
ФАКУЛЬТЕТ
ИНОРМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
КАФЕДРА МАТЕМАТИЧЕСКОГО И АППАРАТНОГО ОБЕСПЕЧЕНИЯ
ИНФОРМАЦИОННЫХ СИСТЕМ
Курсовая работа
по
дисциплине: Программирование на ЯВУ
Вариант 25
«Домашняя
библиотека»
Выполнил студент
группы ИВТ-11-08
Столяров Е. Г.
Проверил преподаватель:
Ильина
Л.А
Чебоксары 2009
Оглавление
Введение 3
Постановка задачи 4
Описание класса 5
Описание полей класса 5
Описание методов класса 6
Работа со строками 12
Используемые компоненты 13
Форма 13
StringGrid 14
MainMenu 16
Выводы 17
Список литературы 18
Приложение А. Текст программы 19
Введение
Объектно-ориентированное программирование - это подход к разработке программного обеспечения, основанный на объектах. Программы, разрабатываемые на основе концепций объектно-ориентированного программирования, реализуют алгоритмы, описывающие взаимодействие между объектами.
Одним
из центральных понятий в
В
данной курсовой работе реализован класс
«Домашняя библиотека». В качестве
средства разработки выбрана платформа
Borland C++ Builder 6. Используется объектно-ориентированный
язык программирования – С++.
Постановка задачи
Задача данной курсовой работы состоит в реализации класса «Домашняя библиотека».
В программе необходимо предусмотреть возможность работы с произвольным числом книг, поиск книги по какому-либо признаку, добавление книги в библиотеку, удаление книг из нее. Сортировка книг по разным полям.
Программа должна содержать меню, позволяющее осуществить проверку всех функций класса.
Данные должны храниться в файле.
Описание класса
Класс «Домашняя библиотека» объявлен следующим образом:
class HomeBibl{
public:
char *avtor;
char *name;
int year;
HomeBibl();
void SearchBook();
void SortBooks(int mode, bool HighLow);
void DelBook(int idx);
void DelAllBooks();
void AddBook();
void EditBook(int idx);
~HomeBibl(){};
};
Все методы и поля объявлены как public. Доступ к таким членам класса можно получить из любой части программы, они доступны любым объектам любых классов.
Далее объявлен массив объектов типа «класс»:
HomeBibl ob [Max_Num_Books];
Описание полей класса
Для хранения таких данных как ФИО автора и название книги используется тип данных – строка. Год издания хранится в переменной типа «целое число».
Строки рассматриваются как массив символов, оканчивающиеся нулевым символом (‘\0’). Функции работы со строками описаны в стандартном заголовочном файле "string.h".
Строку можно объявить как массив символов или как переменную типа char*. В данной работе используется второй вариант.
char *avtor;
Данное поле предназначено для хранения данных об авторе: ФИО автора. Используется тип данных – строка.
char *name;
Данное поле предназначено для хранения данных о названии книжки. Используется тип данных – строка.
int year;
Данное поле предназначено для хранения данных о годе издания книжки. Тип данных – целое число (int).
Описание методов класса
void SearchBook()
Метод предназначен для поиска книги в библиотеке. Алгоритм поиска выглядит следующим образом:
//сохраняем данные книги, которую надо найти
book.avtor = avtor;
book.name = name;
book.year = year;
// цикл по всем книгам
for (int i=0; i<Num;i++) {
//ищем книгу с заданными параметрами
if (book.avtor = book[i]. avtor) &&
(book.name = book[i]. name) &&
(book.year = book[i]. year) then Ok
}
Результат работы:
void AddBook()
Метод предназначен для добавления книги в библиотеку. Алгоритм поиска выглядит следующим образом:
//записываем данные о новой книге в конец файла
Add(file);
//увеличиваем число книг в библиотеке
numRecords++;
//добавляем данные о новой книге в массив
ob[numRecords].avtor = this->avtor;
ob[numRecords].name = this->name;
ob[numRecords].year = this->year;
Результат работы:
void
DelAllBooks()
Метод предназначен для удаления всех книг из библиотеки. Алгоритм удаления книг выглядит следующим образом:
//цикл по всем книгам
for(int i = 0; i<numRecords; i++){
//присваиваем данным о книге пустые значения
ob[i].avtor = "";
ob[i].name = "";
ob[i].year = 0;
};
// очистить файл с данными о книгах
Del(file);
Результат работы:
void
DelBook (int idx)
Метод
предназначен для удаления книги из
библиотеки. Метод содержит один параметр
– индекс удаляемой книги в массиве книг.
Алгоритм удаления книги выглядит следующим
образом:
//цикл по всем книгам
for (int i = 0; i < numRecords; i++){
// перемещяем данные о книге
ob[idx+i].avtor = ob[idx+i+1].avtor;
ob[idx+i].name = ob[idx+i+1].name;
ob[idx+i].year = ob[idx+i+1].year;
}
//уменьшаем число книг в библиотеке
numRecords--;
//удаляем книгу в файле
Del(file, book)
Результат
работы:
void
EditBook (int idx)
Метод
предназначен для редактирования книги
из библиотеки. Алгоритм редактирования
книги выглядит следующим образом:
//сохраним данные о редактируемой книге в переменную
HomeBibl book;
//найдем книгу и изменим ее данные
ob[idx].avtor = this->avtor;
ob[idx].name = this->name;
ob[idx].year = this->year;
//записываем данные в файл
Write(book, file)
Результат
работы:
void
SortBooks(int mode, bool HighLow)
Метод
предназначен для сортировки книг из
библиотеки. Метод содержит два параметра:
mode – режим сортировки (1 – по названию,
2 – по автору, 3 – по году издания); HighLow
– может принимать два значения true – сортировка
по возрастанию, false – сортировка по убыванию.
Алгоритм сортировки книг выглядит следующим
образом:
//цикл по всем книжкам
for (i = 0; i<numRecords; i++) {
switch (mode) {
case 1: s1 = ob[i].avtor;
case 2: s1 = ob[i].name;
case 3: s1 = ob[i].year;
}
//цикл по всем книжкам
for (j = i+1; j<numRecords; j++) {
case 1: s2 = ob[j].avtor;
case 2: s2 = ob[j].name;
case 3: s2 = ob[j].year;
if (HighLow)
//если в первой строке символ больше чем во второй то меняем местами имена
if (s1 > s2) change = true; else change = false;
else
//если в первой строке символ больше чем во второй то меняем местами имена
if (s1 < s2) change = true; else change = false;
}
if (change) {
//меняем местами элементы
t1 = s1; s1 = s2; s2 = t1;
}
change = false;
}
}
Результат
работы:
Работа со строками
Стандартная библиотека предоставляет средства вычисления длины строки, копирования, сравнения, поиска вхождений одной строки в другую и т.д.. Функции описаны в стандартном заголовочном файле "string.h".
Для работы со строками в программе используются следующие функции:
Определение длины строки:
size_t strlen(const char *s);
Копирование строк:
char *strcpy(char *dst, const char *src); копировать строку src в строку dst;
Сравнение строк:
int
strcmp(const char *s1, const char *s2);
- лексикографическое сравнение строк
s1 и s2. Результат нулевой, если строки равны,
отрицательный, если первая строка меньше
второй, и положительный, если первая строка
больше второй;
Прежде
чем работать со строкой необходимо
после ее объявления выделить для
нее память. Для этого используются
функции:
Используемые компоненты
Все компоненты в C++Builder создаются при помощи классов. Каждому компоненту соответствует класс. Множество визуальных компонентов составляют иерархию классов.
Основными понятиями при работе с визуальными компонентами являются свойства, события и методы компонентов.
Свойства компонентов хранят характеристики компонента, такие как размер, цвет, положение на экране, шрифт и т.д.
Методы компонента – методы класса, от которого образован компонент. Методы компонентов обычно служат для работы со свойствами данного компонента.
События в C++Builder служат для управления работой программы при помощи функций. Эти функции называются обработчиками событий. Они задают действие программы на такие события как создание окна, манипуляции мышью, нажатие клавиш и т.д. Некоторые события могут быть вызваны действиями пользователя, другие – программно.
Форма
Форма
является основным компонентом приложений.
На формах располагаются все остальные
компоненты. Первая форма приложения
является главной. По умолчанию при
запуске программы только первая
форма будет видимой. При закрытии
главной формы завершается
Как и любой визуальный компонент, форма содержит свойства и методы, а также «умеет» обрабатывать события.
Некоторые свойства формы:
- Align – задаёт выравнивание формы на экране.
- AutoScroll – разрешает или запрещает автоскроллирование.
- AutoSize – разрешает автоизменение размеров окна для того, чтобы оно умещало все компоненты.
- Caption – заголовок окна. Отображается в верхней части окна.
- ClientHeight и ClientWidth – высота и ширина клиентской части окна.
- Color – цвет окна.
- Font – шрифт по умолчанию для компонентов формы..
- Height – высота окна.
- HorzScrollBar – задаёт внешний вид и параметры горизонтальной линейки прокрутки.
- Menu – задаёт главное меню формы.
- Name – имя компонента.
- VertScrollBar – задаёт внешний вид и параметры вертикальной линейки прокрутки.
- Visible – разрешает или запрещает показ окна на экране.
- Width – ширина окна.
StringGrid
Предназначен для представления текстовых данных в табличной форме.
Каждая ячейка таблицы имеет ассоциированную с ней текстовую строку. Если ячейки не умещаются в пределах окна, то можно использовать линейки прокрутки для перемещения по таблице.
Можно
назначить фиксированные
При помощи обработчиков событий можно управлять обработкой вводимых данных и отображением ячеек таблицы.
Основные свойства:
- Cells – двухмерный массив, содержащий строки таблицы;
- Cols – массив указателей на объекты TStringList, хранящие данные столбцов;
- Rows – массив указателей на объекты TStringList, хранящие данные строк;
- Col – столбец, в которой находится курсор;
- ColCount – количество столбцов в таблице;
- FixedCols – количество столбцов, которые не скроллируются;
- FixedRows – количество фиксированных строк;
- Options –набор флагов, задающих режимы таблицы;
- Row – строка, в которой находится курсор;
- RowCount – число строк в таблице;
- RowHeights – массив, содержащий значения высоты каждой строки таблицы;
- ScrollBars – задаёт наличие линеек прокрутки;
Особые обработчики событий:
- OnColumnMoved – при перемещении столбца (свойство Options должно содержать goRowMoving);
- OnGetEditText – задаёт текст для редактирования ячейки; вызывается при переходе в режим редактирования;
- OnRowMoved – при перемещении строки;
- OnSelectCell – вызывается перед выбором ячейки таблицы; возможен запрет выбора произвольных ячеек или другие операции в зависимости от выбранной ячейки;
- OnSetText – вызывается, когда пользователь редактирует содержимое ячеек; можно задать дополнительные проверки при изменении текста;
MainMenu
Главное меню является стандартным элементом программ Windows.
Главное меню располагается в верхней части окна программы и обычно служит для стандартизированного выполнения всех действий в программе. Кроме того, главное меню позволяет назначать «горячие клавиши»
Основные свойства:
- Action – позволяет назначать действие из списка действий ActionList.
- Caption – заголовок пункта меню.
- Enabled – разрешение. Принимает булевские значения. При Enabled=false пункт меню становится заблокирован, и не может быть выбран.
- GroupIndex – номер группы. Можно сгруппировать элементы меню. Это можно использовать, например, для задания группы переключателей.
- Name – имя компонента.
- Shortcut – «горячая клавиша».
- Visible – видимость.
Основным
событием элементов меню является событие
OnClick. Оно определяет реакцию программы
на выбор того или иного пункта меню.
Также
в программе используются кнопки,
метки и радиокнопки.
Выводы
В
ходе выполнения данной курсовой работы
я ознакомился со средством разработки
Borland C++ Biulder 6. Изучил свойства объектно-ориентированного
программирования. Закрепил навыки программирования
при работе с классами, а также навыки
работы с файлами и со строками.
Список литературы
1. Архангельский А.Я. Программирование в C++ Builder 6. – М.: «Издательство БИНОМ», 2003г. – 1152с.
2. Карпов Б., Баранов Т. С++: специальный справочник – СПБ: Питер, 2001. – 48с.
3. Программирование:
лаб. Практикум / сост. И.Т.Артемьев,
Д.В.Ильин, Л.А. Ильина; Чуваш. Ун-т.
Чебоксары. 2009.96с.
Приложение А. Текст программы
Bibl.h
const Max_Num_Books = 2000;
const Max_Num_EqBooks = 5;
class HomeBibl{
public:
char *avtor;
char *name;
int year;
//конструктор
HomeBibl();
//поиск книги
void SearchBook();
//сортировка книги
void SortBooks(int mode, bool HighLow);
//удаление книги
void DelBook(int idx);
//удаление всех книг
void DelAllBooks();
//добавление книги
void AddBook();
void EditBook(int idx);
//деструктор
~HomeBibl(){};
};
class Records{
public:
int idx;};
Records arr[Max_Num_EqBooks];
HomeBibl ob [Max_Num_Books];
const char* const BiblFile = "bibl.txt";
int numRecords=0;
int numFindRecords=0;
Bibl.cpp
#include <vcl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "Bibl.h"
#include "MainFormUnit.h"
#pragma hdrstop
//********** Конструктор *****************
HomeBibl::HomeBibl(){
year = 0;
}
//********** Загружаем книжки из файла*****************
int LoadBooks(){
char line[256]; // Буфер для ввода строки
int i;
FILE *f = fopen(BiblFile, "r");
numRecords = 0;
int len=0;
while (fgets(line, 256, f) != 0) {
len = strlen(line);
char *avtor;
char *name;
int year;
char *t;
// Удалим разделители строк
if (len > 0 && line[len - 1] == '\n') {
line[len - 1] = 0; --len;
}
// Запомним имя
avtor = (char *) malloc((len) +1);
strcpy(avtor, line);
// Считаем строку
if (fgets(line, 256, f) != 0) {
len = strlen(line);
if (len > 0 && line[len - 1] == '\n') {
line[len - 1] = 0; --len;
}
name = (char *) malloc((len) + 1);
strcpy(name, line);

- Домашняя библиотека
- Домашняя библиотека
- Домашняя библиотека
- Дом быта "Гамаюн"
- Доменная печь
- Доменная печь
- Доменное производство
- Домашние хозяйства как субъект микроэкономики
- Домашние хозяйства как субъект экономики
- Домашние хозяйства РБ
- Домашний арест
- Домашний арест, как мера пресечения
- Домашний учебный труд школьника как форма организации обучения
- Домашнэ насильство: сутнiсть проблеми та шляхи подолання