Автор: Пользователь скрыл имя, 18 Декабря 2011 в 13:44, курсовая работа
Программа обеспечивает возможность создания файла и хранения в нем информации о вызываемом городе, заказываемом номере телефона, ФИО заказчика, номере телефона заказчика и длительности оплаченного разговора а также выполнение требуемых функций по работе с этими данными. Курсовая содержит руководство пользователя, описание разработанных функций, листинг и тестирование программы, блок-схемы алгоритмов всех используемых функций и тестирование программы.
Введение………………………………………………………………….…… 3
Глава 1. Выбор метода реализации……………………...………………... 5
1.1 Обоснование выбора языка программирования………………………... 5
Техническое описание языка программирования……………………… 6
1.3 Технические требования к компьютеру для решения задачи …………. 7
Глава 2. Теоретические основы……………………...…………………… 8
2.1Динамические массивы …………………………………………………... 8
2.2Динамическое распределение памяти …………………………………… 9
2.3 Классы …………………………………………………………………….. 9
2.4 Структуры ……………………...…………………………………………. 10
Глава 3. Руководство программиста……………………...……………… 12
Глава 4. Руководство пользователя ……………………...………………. 15
Глава 5. Математическое и программное обеспечение ………………. 16
5.1.Математическое обеспечение……………………...………………………................................. 16
5.2.Спецификация функций ……………………...………………………….. 19
Глава 6. Тестирование программы ……………………...……………….. 25
Заключение…………………………………………………...………………. 31
Список литературы………………………
void indexing() {
elem * tmp;
unsignedint id = 0;
tmp = head;
// проход по всему списку и изменение нумерации
while (tmp) {
tmp->index = id++;
tmp = tmp->next;
}
}
// получение указателя на элемент в списке по его номеру в списке
elem * getElem(unsignedint index) {
elem * tmp = head;
// если индекс не корректный, возвращаем NULL
if (index >= N || index < 0)
return NULL;
// ищем в списке элемент
while (tmp) {
if (index == tmp->index) // если нашли, возвращаем указатель на него
return tmp;
tmp = tmp->next;
}
return NULL;
}
// добавление элемента в список
void addElem(elem * element) {
unsignedint
id = 0;
elem
* f = NULL;
if (N && element->index == UINT_MAX/* максимальное значение беззнакового целого */) { // вставляем в конец непустого списка
element->prev = tail;
tail->next = element;
tail = element;
}
elseif (!N) { // вставляемвпустойсписок
head = tail = element;
}
elseif (N && !element->index) { // вставляем в начало непустого списка
element->next = head;
head->prev = element;
head = element;
}
else { // вставляем в середину списка
/*if (!(f = getElem(element->index)))
throw new exception("index is not valid");*/
element->prev = f->prev;
element->next = f;
f->prev->next = element;
f->prev = element;
}
indexing(); // проводим индексацию элементов
N++;
}
/* поиск элемента, содержащего указанный город назначения
параметры - строка поиска, с какого элемента начинать поиск
возвращает
указатель на элемент в списке*
elem * findCity(constchar * const city, unsignedint& id) {
elem
* tmp = NULL;
//if (!id)
//tmp = head;
//else
tmp = getElem(id);
while (tmp) {
if (!strcmp(tmp->city, city)) {
id = tmp->index;
return tmp;
}
tmp = tmp->next;
}
id = 0;
return NULL;
}
public:
// конструкторсписка
list() {
head = tail = NULL;
N = 0;
}
// деструкторсписка
~list() {
elem
* tmp = NULL;
// проход по всем элементам списка и их удаление
while (head) {
tmp = head->next;
delete head;
head = tmp;
}
N = 0;
}
// добавление элемента
// параметры
// телефон
для вызова, телефон абонента, ФИО,
вызываемый город, время
void add(constchar * const teleph, constchar * const tel, constchar * const name, constchar * const city, constunsignedint time, constunsignedint index) {
elem
* tmp = NULL;
if ((index > 1 && index >= N) || index < 0)
cout <<"неверныйномер!";
/* if (!teleph || !tel || !name || !city)
cout << "параметры
заданы неполностью или
if (time <= 0)
cout <<"время указано неверно";
// создаем
новый элемент списка и
tmp = new elem();
strcpy(tmp->teleph, teleph);
strcpy(tmp->tel, tel);
strcpy(tmp->name, name);
strcpy(tmp->city, city);
tmp->time = time;
tmp->index = index - 1;
addElem(tmp);
}
// удаление из списка элемента по его индексу
void remove(constunsignedint index) {
// if (index > N || index <= 0)
// cout << "неверноуказанномер!";
elem
* tmp = NULL,
* tmp2 = NULL;
if (!(tmp = getElem(index-1)));
cout
<<"неттакогономера!";
if (tmp->prev != NULL) {
tmp2 = tmp->prev;
tmp2->next = tmp->next;
}
else {
head = tmp->next;
}
if (tmp->next != NULL) {
tmp2 = tmp->next;
tmp2->prev = tmp->prev;
}
else {
tail = tmp->prev;
}
delete tmp;
indexing();
N--;
}
// перегрузка оператора вывода списка
friend ostream &operator<< (ostream & stream, list & ls) {
elem
* tmp = ls.head;
stream << setiosflags(ios::left); // устанавливаемвыравниваниеслева
// выводим табличкой данные
stream <<"\n-------------------------
stream << setw(7) <<"№"<< setw(15) <<"ФИО"<< setw(15) <<"Город"<< setw(15) <<"С номера"<< setw(15) <<"На номер"<< setw(7) <<"Время"<<"Ед.";
stream <<"\n-------------------------
while (tmp) {
stream << setw(7) << tmp->index + 1 << setw(15) << tmp->name << setw(15) << tmp->city << setw(15) << tmp->tel << setw(15) << tmp->teleph << setw(7) << tmp->time <<"сек.\n";
tmp = tmp->next;
}
stream <<"---------------------------
return stream;
}
// сортировка списка по времени разговора
void sortTime() {
elem
* f = NULL,
* t = NULL,
srt,
* tmp = NULL,
* tmp2 = NULL;
f = head;
if (!f)
return;
while (f->next) {
tmp = f;
t = f->next;
while (t) {
tmp2 = t;
if (tmp->time > tmp2->time) {
// здесь происходит копирование данных, сортировка пузырьком
srt = *tmp;
*tmp = *tmp2;
*tmp2 = srt;
}
t = t->next;
}
f = f->next;
}
}
//
// вывод на консоль элементов списка, содержащих указанный город
void printCallsToCity(constchar * const city) {
unsignedint
i = 0,
id = 0;
elem
* tmp
= NULL;
if (!city)
cout <<"нет такого города";
tmp = findCity(city, id);
cout << setiosflags(ios::left);
cout <<"\n-------------------------
cout << setw(7) <<"N"<< setw(15) <<"ФИО"<< setw(15) <<"Город"<< setw(15) <<"Сномера"<< setw(15) <<"Наномер"<< setw(7) <<"Время"<<"Ед.";