Листинг системы выставление счета за телефонную связь
КУРСОВОЙ ПРОЕКТ
по дисциплине: Объектно-ориентированное программирование
на тему: «Система выставление счета за телефонную связь»
Для специальности 230100
Вариант №7
Выполнил:
Студент 2-го курса
заочного отделения
специальность 230100
шифр 613217
Ильин Никита Александрович
Проверил: старший преподаватель
Исаева Ирина Николаевна
Чебоксары, 2015
СОДЕРЖАНИЕ
ВВЕДЕНИЕ.. 3
1 ЗАДАНИЕ НА КУРСОВОЕ ПРОЕКТИРОВАНИЕ.. 4
2 UML ДИАГРАММА КЛАССОВ.. 5
3 ЛИСТИНГ СИСТЕМЫ ВЫСТАВЛЕНИЕ СЧЕТА ЗА ТЕЛЕФОННУЮ СВЯЗЬ. 7
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ... 11
ЗАКЛЮЧЕНИЕ.. 14
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ... 15
ВВЕДЕНИЕ
Целью курсового проектирования является приобретение практических навыков поэтапной разработки нераспределённых объектно-ориентированных программ на языке С++, разработки собственных классов и применения классов, создания из них объектов и обеспечении требуемого совместного функционирования этих объектов как объектно-ориентированной модели, реализующей поставленную задачу, а также описания разработанного программного продукта как с точки зрения его пользователя, так и с точки зрения разработчика.
ЗАДАНИЕ НА КУРСОВОЕ ПРОЕКТИРОВАНИЕ
Класс Bill представляет собой разовый платёж за телефонный разговор и включает поля: фамилия плательщика, номер телефона, тариф за минуту разговора, скидка в процентах), время начала разговора, время окончания разговора, сумма к оплате. Используя класс Bill, реализовать класс ListPayer. Класс ListPayer содержит список плательщиков за телефонные услуги, дату создания списка, номер списка. Один элемент списка включает информацию о плательщике (класс Bill), статус оплаты, дату платежа, сумму платежа. Реализовать методы добавления плательщиков в список и удаления из него; метод поиска плательщика по номеру телефона и по фамилии, по дате платежа; метод вычисления полной стоимости платежей всего списка. Реализовать операцию объединения и операцию пересечения списков. Реализовать операцию генерации конкретного объекта Group (группа), содержащего список плательщиков, из объекта типа ListPayer. Должна быть возможность выбирать группу плательщиков по признаку оплаты, по дате платежа, по номеру телефона. Дата представляется структурой с тремя полями типа unsigned int: год, месяц, день. Время представляется структурой с тремя полями типа unsigned int: час, минута, секунда.
UML ДИАГРАММА КЛАССОВ
Диаграмма классов (англ. Static Structure diagram) — диаграмма, демонстрирующая классы системы, их атрибуты, методы и взаимосвязи между ними. Входит в UML.
Существует два вида:
- Статический вид диаграммы рассматривает логические взаимосвязи классов между собой;
- Аналитический вид диаграммы рассматривает общий вид и взаимосвязи классов, входящих в систему.
Существуют разные точки зрения на построение диаграмм классов в зависимости от целей их применения:
- Концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;
- Точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;
- Точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).
Рисунок 2.1 – Диаграмма классов «Системы выставление счета за телефонную связь»
Построение диаграммы классов в курсовом проекте осуществлялось автоматически в среде разработки MS Visual Studio 2010.
Рисунок 2.2 – Окно добавление элемента Class Diagram
Для создания диаграммы классов необходимо добавить в проект объект Class Diagram, затем выбрать классы, поля и методы для отображения, среда разработки построит связи наследование классов и покажет тип связи.
ЛИСТИНГ СИСТЕМЫ ВЫСТАВЛЕНИЕ СЧЕТА ЗА ТЕЛЕФОННУЮ СВЯЗЬ
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <string>
#include <locale>
using namespace std;
const int NotUsed = system( "color 70" );
const int N = 5;
class bill
{
std::string number, first_name, last_name;
public:
bill(std::string number, std::string first_name, std::string last_name)
{
this->number = number;
this->first_name = first_name;
this->last_name = last_name;
}
std::string getNumber()
{
return number;
}
std::string getFirst_name()
{
return first_name;
}
std::string getLast_name()
{
return last_name;
}
};
struct list_el
{
std::string number, first_name, last_name, date;
double time_call, tarif, discount, sum;
};
class listPlayer : bill
{
int n;
std::string date;
std::vector<list_el> list;
public:
listPlayer(std::string number, std::string first_name, std::string last_name, int n, int date) : bill(number, first_name, last_name)
{
this->n = n;
this->date = date;
}
void addBill(bill el, std::string date, double time_call, double tarif, double discount, double sum)
{
list_el l;
l.number = el.getNumber();
l.first_name = el.getFirst_name();
l.last_name = el.getLast_name();
l.date = date;
l.time_call = time_call;
l.tarif = tarif;
l.discount = discount;
l.sum = sum;
list.push_back(l);
std::cout<< l.number<<" "<< l.first_name<<" "<< l.last_name<<" "<< l.date<<" "<< l.time_call<<" "<<l.tarif <<" "<< l.discount<<" "<< l.sum;
}
void delBill(int del_bill)
{
if (list.size() >= del_bill)
list.erase(list.begin() + del_bill);
std::cout<<"Информация была удалена";
}
void printBill()
{
for (int i = 0; i < list.size(); i++)
std::cout<<list[i].number<<" "<<list[i].first_name<<" "<<list[i].last_name<<" "<<list[i].date<<" "<<list[i].time_call<<" "<<list[i].tarif<<" "<<list[i].discount<<" "<<list[i].sum<<" ";
}
std::vector<list_el> findNumber(std::string number)
{
std::vector<list_el> v;
for (int i = 0; i < list.size(); i++)
if (list[i].number == number)
{
v.push_back(list[i]);
std::cout<<"Номер найден!";
}
else
{
std::cout<<"Номер отсутствует!";
}
return v;
}
std::vector<list_el> findLastName(std::string last_name)
{
std::vector<list_el> v;
for (int i = 0; i < list.size(); i++)
if (list[i].last_name == last_name)
{
v.push_back(list[i]);
std::cout<<"Фамилия найдена!";
}
else
{
std::cout<<"Фамилия не найдена!";
}
return v;
}
std::vector<list_el> findDate(std::string date)
{
std::vector<list_el> v;
for (int i = 0; i < list.size(); i++)
if (list[i].date == date)
{
v.push_back(list[i]);
std::cout<<"Дата найдена!";
}
else
{
std::cout<<"Дата не найдена!";
}
return v;
}
int sum()
{
int t = 0;
for (int i = 0; i < list.size(); i++)
t += list[i].sum;
return t;
}
};
int main()
{setlocale(LC_ALL,"russian_russia");
listPlayer list(" ", " ", " ", 1, 0000);
std::string number, date, first_name, last_name,faml,numb,fnddate;
double time_call, tarif, sum, discount;
int choose;
while(1)
{
std::cout<<"Что вы хотите сделать?\n";
std::cout<<"Нажмите 1 для создания счета \n";
std::cout<<"Нажмите 2 для удаления счета \n";
std::cout<<"Нажмите 3, чтобы увидить сумму \n";
std::cout<<"Нажмите 4, чтобы найти счет по имени \n";
std::cout<<"Нажмите 5, чтобы найти счет по номеру \n";
std::cout<<"Нажмите 6, чтобы найти счет по дате \n";
std::cout<<"Нажмите 7, чтобы просмотреть список \n";
std::cin>>choose;
switch (choose)
{
case 1:
std::cout<<"Введите номер \n";
std::cin>>number;
std::cout<<"Введите имя \n";
std::cin>>first_name;
std::cout<<"Введите фамилию \n";
std::cin>>last_name;
std::cout<<"Введите дату \n";
std::cin>>date;
std::cout<<"Введите время разговора \n";
std::cin>>time_call;
std::cout<<"Введите тариф \n";
std::cin>>tarif;
std::cout<<"Введите скидку \n";
std::cin>>discount;
sum=(time_call*tarif)-((time_call*tarif)*(discount/100));
list.addBill(bill(number, first_name, last_name), date, time_call, tarif, discount,sum);
std::cout << std::endl;
break;
case 2:
int del_bill;
std::cout<<"Введите порядковый номер, начиная с 0 \n";
std::cin>>del_bill;
list.delBill(del_bill);
std::cout << std::endl;
break;
case 3:
std::cout << "Сумма по счету\n";
std::cout << list.sum();
std::cout << std::endl;
break;
case 4:
std::cout<<"Введите фамилию\n";
std::cin>>faml;
list.findLastName(faml);
std::cout << std::endl;
break;
case 5:
std::cout<<"Введите номер\n";
std::cin>>numb;
list.findNumber(numb);
std::cout << std::endl;
break;
case 6:
std::cout<<"Введите дату\n";
std::cin>>fnddate;
list.findDate(fnddate);
std::cout << std::endl;
break;
case 7:
list.printBill();
std::cout << std::endl;
break;
}
getchar();
system("pause");
}
}
ТЕСТИРОВАНИЕ ПРОГРАММЫ
Тестирование программного обеспечения — процесс исследования, испытания программного продукта, имеющий две различные цели:
- продемонстрировать разработчикам и заказчикам, что программа соответствует требованиям;
- выявить ситуации, в которых поведение программы является неправильным, нежелательным или не соответствующим спецификации.
Рисунок 4.1 – Меню программы
В меню реализована возможность выбора действия:
- Нажмите 1 для создания счета;
- Нажмите 2 для удаления счета;
- Нажмите 3, чтобы увидеть сумму;
- Нажмите 4, чтобы найти счет по имени;
- Нажмите 5, чтобы найти счет по номеру;
- Нажмите 4, чтобы найти счет по дате;
- Нажмите 7, чтобы просмотреть список.
Рисунок 4.2 – Создание счета
Для создания счета необходимо ввести следующие данные:
- Номер телефон;
- Имя;
- Фамилию;
- Дату;
- Время разговора;
- Тариф;
- Скидку.
После чего на экране отобразиться полная информация о занесенных данных.
Рисунок 4.3 – Удаление информации
Для удаления информации достаточно указать идентификатор счета начиная с 0, который генерируется автоматически. В зависимости от результата система выдаст сообщение.
Рисунок 4.4 – Операции поиска
В программе можно выполнять операции поиска по следующим критериям:
- по имени;
- по номеру;
- по дате.
Приводить отдельные тестовые скриншоты по каждому из пунктов (4-6) не имеет смысла, т.к. в конце операции программа выдает информация в режиме Найдено/Не найдено.
Рисунок 4.5 – Вывод суммы по счетам
Программа умеет выводит сумму оплаты по счетам (3), так же вы можете просмотреть все объекты, находящиеся в списках.
ЗАКЛЮЧЕНИЕ
В результате выполнения курсового проекта было сделано:
1. Изучены и применены принципы поэтапной разработки и отладки программ средней сложности.
2. Разработаны собственные классы, из них созданы разнообразные объекты и совместно применены для реализации требуемых алгоритмов функционирования программы.
3. Разработан собственный интерфейс программы.
5. Созданы необходимые события, делегаты и потоки и применены для эффективного параллельного функционирования объектов и их взаимодействия.
6. Разработанный программный продукт описан как с точки зрения его пользователя, отражая его внешнюю сторону, так и с точки зрения программиста, отражая особенности его реализации.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1 Голицына, О. Л. Основы алгоритмизации и программирования [текст] : учебное пособие / О. Л. Голицына, И. И. Попов. - М. : ФОРУМ - ИНФРА-М, 2006. - 432 c.
2 Демидович Е.М. Основы алгоритмизации и программирования. Язык СИ : учебн. Пособие. – СПб.: БХВ-Петербург, 2006.
3 Павловская Т.А. С/С++. Программирование на языке высокого уровня [текст] : учебник / Т. А. Павловская. - СПб. : Питер, 2009. - 460 с.
4 Плохотников К.Э. Методы разработки курсовых работ. Моделирование, вычисления, программирование на С/С++ и МАТLAB, виртуализация, образцы лучших студенческих курсовых работ: учебное пособие. – М.: СОЛОН-ПРЕСС, 2006.
5 Программирование на алгоритмических языках. Лабораторный практикум /Артемьев И.Т./, ЧГУ: Чебоксары, 2005.
6 Пышкин, Е. В. Основные концепции и механизмы объектно-ориентированного программирования. Теория и технология программирования [текст] : учебное пособие / Е. В. Пышкин. - СПб : БХВ-Петербург, 2005.
7 Рихтер, Д. Windows Visual C/C++. Программирование на языке Visual C++ [текст] : пер. с англ. / Д. Рихтер, К. Назар. - М. : Русская Редакция ; СПб. : Питер, 2008. - 878с.
8 Юрагов, Е. А. Объектное моделирование и программирование информационных систем [текст] : учеб. пособие / Е. А. Юрагов. - М. : Изд-во МГОУ, 2011. - 258 с.