Учет абонементной платы за пользование кабельным телевидением
Основы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм и абстракция. Объектно-ориентированный принцип разработки системы учета абонементной платы за пользование кабельным телевидением. Методы для работы с данными.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.05.2013 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКАИНЫ
ВОСТОЧНОУКРАИНСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ
ИМЕННИ ВЛАДИМИРА ДАЛЯ
Кафедра Компьютерных наук
КУРСОВАЯ РАБОТА
По дисциплине Объектно-ориентированное программирование
Студент Жигалка М. Б.
Группа КТ-183 Вариант 10
Руководитель работы
Терещенко Т.М.
Завдання на курсову роботу
студентові Жигалка Максим Борисович група КТ-183
1. Тема работы Учет абонементной платы за пользование кабельным телевидением
2. Термін здачі курсової роботи _________
3. Вхідні дані до роботи написати програму, в якій реалізовано облік сплати за використання кабельного телебачення користувачами. Ведення інформації про користувачів, їх облік та підрахунок.
4. Зміст пояснювальної записки (перелік розділів, питань, які належить розробити) :1. Ввод; 2. Основна частина; 2.1 Теоретична реалізація; 2.2 Алгоритм рішення; 2.3 Ескіз проекту; 2.4. Практична реалізація; 2.5.Рабочий проект; 2.6 Інтерфейс програми 3. Висновок; 4. Список використаної літератури; 5. Додаток
Студент Жигалка М. Б.
Керівник Терещенко Т. М.
Реферат
Курсовая работа содержит 19 страниц, 6 рисунков, одно приложение.
Целью работы является изучение методов и способов работы с классами и объектами классов, использовать объектно-ориентированный подход программирования.
Курсовая работа представляет собой написание программы для учета оплаты за кабельное телевидение. Курсовая работа предназначена для изучения объектно-ориентированного программирования в языке С++.
Ключевые слова:
Класс, наследование, объект, функция, переменная, алгоритм, структуры, указатели, переменные, цикл, массив, абстрактный класс, конструктор.
Содержание
Введение
1. Теоретическая реализация
1.1 Техническое задание
1.2 Алгоритм решения задачи
1.3 Эскизный проект
2. Практическая реализация
2.1 Рабочий проект
2.2 Интерфейс программы
Заключение
Список литературы
Приложение
Введение
Цель данной курсовой работы - написание программы представляющей систему учёта оплаты за электроэнергию, используя объектно- ориентированный подход.
Компьютер - это прибор, способный производить вычисления и принимать логические решения в миллионы или даже миллиарды раз быстрее человека. Например, многие из современных персональных компьютеров могут выполнять десятки миллионов операций сложения в секунду.
Компьютеры обрабатывают данные под управлением наборов команд, называемых компьютерными программами. Эти компьютерные программы направляют действия компьютера посредством упорядоченных наборов действий, описанных людьми, называемыми компьютерными программистами.
Программисты пишут свои программы на разных языках программирования, некоторые из них непосредственно понятны компьютеру, другие требуют промежуточных шагов трансляции. На сегодня существуют сотни языков программирования. Их можно разделить на три основных типа:
1. Машинные языки
2. Языки ассемблера
3. Языки высокого уровня
По мере повышения популярности компьютеров стало очевидно, что программирование на машинных языках просто слишком медленно и утомительно для большинства программистов. Вместо использования строк чисел, которые компьютер мог бы понимать непосредственно, программисты начали использовать похожие на английский язык аббревиатуры для представления элементарных компьютерных операций. Эти аббревиатуры, напоминающие английский язык, сформировали основу языков ассемблера. Для преобразования программ на языке ассемблера в машинный язык со скоростью компьютера были разработаны программы трансляции, называемые ассемблерами.
Использование компьютеров возросло с появлением языков ассемблера, но эти языки всё ещё требовали много команд для полного описания даже простых задач. Для ускорения процесса программирования были разработаны языки высокого уровня, в которых иногда достаточно написать всего один оператор для решения реальной задачи. Программы трансляции, которые преобразуют программы на языках высокого уровня в машинные коды, называются компиляторами. Языки высокого уровня позволяют программисту писать программы, которые выглядят почти так же, как повседневный английский, и используют общепринятую математическую нотацию.
Очевидно, что языки высокого уровня гораздо удобнее с точки зрения программистов по сравнению с языками ассемблера и с машинными кодами. С и C++ относятся к числу наиболее мощных и наиболее распространнёных языков высокого уровня.
Язык C++ развился из C, который в свою очередь был создан на основе двух предшествующих языков BCPL и B. Язык C был развит из B Денисом Ритчи и первоначально реализован на компьютере в 1972 году. C использует многие важные концепции BCPL и B, а также добавляет типы данных и другие свойства. В течение двух последних десятилетий C стал доступным для большинства компьютеров. C независим от аппаратных средств. При тщательной разработке на C можно написать мобильные программы, переносимые на большинство компьютеров.
С++ был разработан Бьерном Строустропом в начале 80-х годов. C++ обеспечивает возможность объектно-ориентированного программирования. Это явилось революционной идеей в мире программного обеспечения. Быстрое, корректное и экономное создание программного обеспечения остается иллюзорной мечтой и это в то время, когда требуется проектирование нового и всё более мощного программного обеспечения.
Объекты - это эффективные повторно используемые компоненты программного обеспечения, моделирующие элементы реального мира. Разработчики программного обеспечения обнаруживают, что использование достижений модульного, объектно-ориентированного проектирования может значительно повысить продуктивность групп разработки по сравнению с предшествующей популярной технологией программирования, такой, как структурное программирование. Объектно-ориентированные программы легче понимать, корректировать и модифицировать.
Именно поэтому для написания программы был выбран язык C++.
1. Теоретическая реализация
1.1 Техническое задание
Данная курсовая работа рассматривает создание программы «Учет оплаты за кабельное телевидение».
Решение задачи было выполнено на объектно-ориентированном подходе. Такая программа строится в терминах объектов и их взаимосвязей, в процесс добавляется важный этап - разработка иерархии данных.
Перед написанием надо задачу разбить на следующие подзадачи:
1. Описать класс, содержащий основные данные.
2. Описать классы наследники, со своими уникальными данными
3. Описать функции и методы для работы с данными о нагрузках кафедры.
4. Описать функции ввода/вывода данных с клавиатуры/на экран.
Цели, которые преследует программа реализованная в курсовой работе, заключаются в следующем:
1. Сформировать список пользователей
2. Сформировать классы учета пользователей.
3. Ввести учетную информацию;
4. Организовать набор классов для работы программы.
5. Описать главную функцию программы, работающую с объектами описанных классов.
1.2 Алгоритм решения задачи
Алгоритм - точный набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи. Данная программа имеет следующий алгоритм. Алгоритм работы программы показан на рисунке.
Рис.1 Алгоритм работы программы
1.3 Эскизный проект
Программа является консольным приложением, а сам проект относится к Windows Console Application.
Для написания программы используется объектно-ориентированное программирование (ООП) - это подход к разработке программного обеспечения, основанный на объектах, а не на процедурах. Этот подход позволяет максимизировать принципы модульности и "сокрытия информации". Объектно-ориентированное программирование базируется на связывании или инкапсуляции структур данных и процедуры, которая работает с данными в структуре, с модулем.
Объектно-ориентированный принцип разработки дает много преимуществ. Например, каждый объект инкапсулирует его структуру данных с процедурой, используемой для работы с экземплярами структуры данных. Это позволяет устранить в коде программы внутренние зависимости, которые могут быстро привести к тому, что этот код будет трудно обслуживать. Объекты могут также наследовать из порождающего объекта структуры данных и другие характеристики, что позволяет сэкономить усилия и обеспечить прозрачное использование для многих целей больших фрагментов кода.
При написании проекта я использовал такие основы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм и абстракция.
Абстракция -- это придание объекту характеристик, которые отличают его от всех других объектов, четко определяя его концептуальные границы.
Инкапсуляция -- свойство, позволяющее объединить и защитить данные и код в объект и скрыть реализацию объекта от пользователя. При этом пользователю предоставляется только интерфейс объекта.
Сокрытие данных -- свойство, управляющее областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.
Наследование - это возможность создания иерархии классов, когда потомки наследуют все свойства своих предков, могут их изменять и добавлять новые. Свойства при наследовании повторно не описываются, что сокращает объём программы. Выделение общих черт различных классов в один класс-предок является мощным механизмом абстракции.
Полиморфизмом - это возможность использовать в различных классах иерархии одно имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.
При запуске программы, пользователю предоставляется список выбора действий при помощи клавиш-цифр (0..3), остальные клавиши заблокированы. При выборе конкретного пункта, предоставляется возможность совершить описанное действие, далее пользователь может ввести информацию о пользователе кабельного телевидения и его счете либо удалить её. Также предусмотрена возможность просмотреть информацию о всех счетах непрерывным списком. При навигации по меню выбора, всегда высвечивается количество текущих счетов.
Иерархия классов программы
Рис 2. Схема организации классов в программе
2. Практическая реализация
2.1 Рабочий проект
Исходя из задания курсовой работы для написания программы необходимо сформировать пять классов, причем 4 из них связаны наследованием, а два являются абстрактными.
Первый класс Person - абстрактный. Содержит метод ввода данных с клавиатуры для конкретного объекта. Содержит 2 поля, являющиеся общими для всех преподавателей.
class Person
{
public:
//Имя
char name[MAX_PATH];
//Фамилия
char lastname[MAX_PATH];
Person(char* Name, char* LastName)
{
strcpy(name, Name);
strcpy(lastname, LastName);
}
void ShowPerson()
{
cout<<"Имя: "<<name<<endl;
cout<<"Фамилия: "<<lastname<<endl;
}
virtual void GetData() = 0;
};
Второй класс TeleAccount, также абстрактный, необходим для описания счёта за телевидение, что позволяет группировать информацию для более удобного представления и работы.
class TeleAccount
{
public:
//Номер счёта
unsigned int number;
TeleAccount(unsigned int num)
{
number = num;
}
void ShowAccount()
{
cout<<"Номер счёта: "<<number<<endl;
}
virtual void GetData() = 0;
};
Третий класс TeleUser, является упрощённым представлением информации о пользователе телевидения и наследует поля от двух предыдущих классов.
class TeleUser: public Person, public TeleAccount
{
protected:
//Задолженность
double credit;
//Последний месяц выплаты
unsigned int lastMonth;
public:
TeleUser(char* Name, char* LastName,unsigned int num, double cred,unsigned int lmonth):Person(Name,LastName),TeleAccount(num)
{
credit = cred;
lastMonth = lmonth;
}
void GetData()
{
cout<<"Введите имя и фамилию пользователя телевидения->";
cin>>name>>lastname;
cout<<"Введите номер счёта->";
cin>>number;
cout<<"Какова задолженность по счёту->";
cin>>credit;
cout<<"Последний месяц выплаты->";
cin>>lastMonth;
}
void Show()
{
cout<<"...Информация о пользователе...\n";
ShowPerson();
ShowAccount();
cout<<"Задолженность: "<<credit<<endl;
cout<<"Последний месяц выплаты: "<<lastMonth<<endl<<endl<<endl;
}
};
Четвёртый класс TeleUserSystemElement отображает информацию о платежах на конкретного пользователя.
class TeleUserSystemElement : public TeleUser
{
public:
TeleUserSystemElement* next;
инкапсуляция наследование полиморфизм абстракция
TeleUserSystemElement(char* Name, char* LastName,unsigned int num, double cred,unsigned int lmonth)
:TeleUser(Name,LastName,num,cred,lmonth)
{
next = NULL;
}
TeleUserSystemElement():TeleUser("","",0,0.0,0)
{
next = NULL;
}
};
Пятый класс TeleUserSystem, представляет собой главный класс, агрегирующий и наследующий в себе все предыдущие классы. Вызывается и контролируется непосредственно из главной функции и представляет собой весь основной функционал программы.
class TeleUserSystem
{
TeleUserSystemElement* head;
int numberOfActs;
public:
TeleUserSystem()
{
head = NULL;
numberOfActs = 0;
}
void Add()
{
TeleUserSystemElement* temp = new TeleUserSystemElement();
temp->GetData();
temp->next = NULL;
if(numberOfActs==0)
{
head = temp;
}
else
{
TeleUserSystemElement* current = head;
while(current->next != NULL)
{
current = current->next;
}
current->next = temp;
}
numberOfActs++;
}
bool Delete()
{
int actNumber = 0;
cout<<"Введите номер счета для удаления->";
cin>>actNumber;
if(head == NULL)
{
cerr<<"Нечего удалять!!!";
return false;
}
TeleUserSystemElement* current = head;
if(current->number == actNumber)
{
head = current->next;
delete current;
numberOfActs--;
return true;
}
do
{
if(current->next != NULL && current->next->number == actNumber)
{
current->next = current->next->next;
delete current->next;
current = NULL;
numberOfActs--;
return true;
}
current = current->next;
}
while(current != NULL);
return false;
}
void ShowList()
{
TeleUserSystemElement* current = NULL;
if(head != NULL)
current = head;
else
{
cerr<<"Нет счетов в списке!!!"<<endl;
return;
}
do
{
current->Show();
current = current->next;
}
while(current != NULL);
}
int Acts()
{
return numberOfActs;
}
};
Для решения задач поставленных в курсовой работе были написаны вышеизложенные блоки программы.
2.2 Интерфейс программы
При запуске программы появляется следующее консольное окно
Рис. 3 Запуск программы
Если выбрать первую категорию, то пользователю будет предложено ввести данные о пользователе и его счете.
Рис.4 Выбор первой категории
Если выбрать вторую категорию, то пользователю будет предложено ввести номер счёта который следует удалить.
Рис.5 Выбор второй категории
Если выбрать третью категорию, то пользователю будет предложен список счетов пользователей с подробной информацией.
Рис.6 Выбор третьей категории
При выборе нулевой категории программа завершает работу.
Заключение
В ходе выполнения курсовой работы я разработал программу предоставляющую систему учета оплаты за кабельное телевидение. Программа представляет собой консольный интерфейс и может применятся на всех операционных системах и не требует высокой производительности от компьютера.
Во время создания программы, был изучен способ работы с функциями, указателями, классами, файлами и закреплен курс объектно-ориентированного программирования.
Список литературы
Харви Дейтел, Пол Дейтел «Как программировать на С++»
Керниган Б., Ритчи Д. «Язык программирования С++», 1992 г.
Герберт Шилдт. С++ Руководство для начинающих. Второе Издание: Пер. с англ. - М.: Издательский дом «Вильямс», 2005. - 672с.
Фленов М.Е. Программирование на С++ глазами хакера. - Спб.: БХВ-Петербург, 2007.- 336с:ил + CD-ROM
Справочная система языка C++.
Приложение
#include <iostream>
using namespace std;
#include <windows.h>
#include <conio.h>
class Person
{
protected:
//Имя
char name[MAX_PATH];
//Фамилия
char lastname[MAX_PATH];
public:
Person(char* Name, char* LastName)
{
strcpy(name, Name);
strcpy(lastname, LastName);
}
void ShowPerson()
{
cout<<"Имя: "<<name<<endl;
cout<<"Фамилия: "<<lastname<<endl;
}
virtual void GetData() = 0;
};
class TeleAccount
{
public:
//Номер счёта
unsigned int number;
TeleAccount(unsigned int num)
{
number = num;
}
void ShowAccount()
{
cout<<"Номер счёта: "<<number<<endl;
}
virtual void GetData() = 0;
};
class TeleUser: public Person, public TeleAccount
{
protected:
//Задолженность
double credit;
//Последний месяц выплаты
unsigned int lastMonth;
public:
TeleUser(char* Name, char* LastName,unsigned int num, double cred,unsigned int lmonth):Person(Name,LastName),TeleAccount(num)
{
credit = cred;
lastMonth = lmonth;
}
void GetData()
{
cout<<"Введите имя и фамилию пользователя телевидением->";
cin>>name>>lastname;
cout<<"Введите номер счёта->";
cin>>number;
cout<<"Какова задолженность по счёту->";
cin>>credit;
cout<<"Последний месяц выплаты->";
cin>>lastMonth;
}
void Show()
{
cout<<"...Информация о пользователе...\n";
ShowPerson();
ShowAccount();
cout<<"Задолженность: "<<credit<<endl;
cout<<"Последний месяц выплаты: "<<lastMonth<<endl<<endl<<endl;
}
};
class TeleUserSystemElement : public TeleUser
{
public:
TeleUserSystemElement* next;
TeleUserSystemElement(char* Name, char* LastName,unsigned int num, double cred,unsigned int lmonth)
:TeleUser(Name,LastName,num,cred,lmonth)
{
next = NULL;
}
TeleUserSystemElement():TeleUser("","",0,0.0,0)
{
next = NULL;
}
};
class TeleUserSystem
{
TeleUserSystemElement* head;
int numberOfActs;
public:
TeleUserSystem()
{
head = NULL;
numberOfActs = 0;
}
void Add()
{
TeleUserSystemElement* temp = new TeleUserSystemElement();
temp->GetData();
temp->next = NULL;
if(numberOfActs==0)
{
head = temp;
}
else
{
TeleUserSystemElement* current = head;
while(current->next != NULL)
{
current = current->next;
}
current->next = temp;
}
numberOfActs++;
}
bool Delete()
{
int actNumber = 0;
cout<<"Введите номер счета для удаления->";
cin>>actNumber;
if(head == NULL)
{
cerr<<"Нечего удалять!!!";
return false;
}
TeleUserSystemElement* current = head;
if(current->number == actNumber)
{
head = current->next;
delete current;
numberOfActs--;
return true;
}
do
{
if(current->next != NULL && current->next->number == actNumber)
{
current->next = current->next->next;
delete current->next;
current = NULL;
numberOfActs--;
return true;
}
current = current->next;
}
while(current != NULL);
return false;
}
void ShowList()
{
TeleUserSystemElement* current = NULL;
if(head != NULL)
current = head;
else
{
cerr<<"Нет счетов в списке!!!"<<endl;
return;
}
do
{
current->Show();
current = current->next;
}
while(current != NULL);
}
int Acts()
{
return numberOfActs;
}
};
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
TeleUserSystem s;
//Интерактивное меню
char ch = '0';
do
{
cout<<"Кол-во счетов для учета: "<<s.Acts()<<endl;
cout<<"Выберите пункт меню, нажав соответствующую цифру\n";
cout<<"1 - Добавить счет за телевидение\n";
cout<<"2 - Удалить счет за телевидение\n";
cout<<"3 - Посмотреть список\n";
cout<<"0 - Выход\n\n\n";
ch=getch();
switch(ch)
{
case '1':
s.Add();
break;
case '2':
s.Delete();
break;
case '3':
s.ShowList();
break;
case '0':
exit(0);
break;
default:
cerr<<"Неверный ввод!!!"<<endl;
}
cout<<endl;
}
while(ch != '0');
}
Размещено на Allbest.ru
Подобные документы
Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.
контрольная работа [51,7 K], добавлен 22.01.2013Изучение принципов объектно-ориентированного программирования, в котором основными концепциями являются понятия классов и объектов. Свойства этого вида программирования: инкапсуляция, полиморфизм, наследование. Описание класса. Конструкторы и деструкторы.
презентация [74,8 K], добавлен 14.10.2013Свойства объектно-ориентированного языка программирования. Понятия инкапсуляции и наследования. Виртуальные функции и полиморфизм. Инициализация экземпляра объекта с помощью конструктора. Динамическое создание объектов. Совместимость объектных типов.
реферат [17,0 K], добавлен 15.04.2015Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.
контрольная работа [60,1 K], добавлен 17.01.2011Изучение принципов объектно-ориентированного программирования. Понятие класса в Delphi, в основе которых лежат три фундаментальные принципы - инкапсуляция, наследование и полиморфизм. Разработка классов транспортных средств и структур классов (кошки).
курсовая работа [29,7 K], добавлен 29.10.2011Сущность и история развития объектно-ориентированного программирования. Наследование как важнейшее свойство объекта. Экземпляры объектных типов. Поля объектов, методы, полиморфизм. Производительность объектных программ. Пример программного продукта.
курсовая работа [33,3 K], добавлен 25.03.2012Объектно-ориентированное программирование как методология программирования, опирающаяся на инкапсуляции, полиморфизме и наследовании. Общая форма класса. Наследование как процесс, посредством которого один объект получает свойства другого объекта.
презентация [214,9 K], добавлен 26.10.2013Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.
курсовая работа [275,9 K], добавлен 22.12.2011Что такое класс в объектно-ориентированном программировании. Какую структуру имеет модуль в С++. Какими средствами осуществляется консольный ввод данных в языке Си, С++. Инкапсуляция, полиморфизм, наследование. Использование библиотеки "
".
контрольная работа [1,9 M], добавлен 13.11.2016Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.
учебное пособие [1,6 M], добавлен 28.12.2013