Проектирование базы данных абонентов телефонной сети

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    359,25 Кб
  • Опубликовано:
    2013-03-18
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Проектирование базы данных абонентов телефонной сети

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

.        СОСТАВ И СТРУКТУРА ПРОГРАММЫ

.        ФУНКЦИИ И АЛГОРИТМЫ ФУНКЦИЙ

.1 Функция main( )

.2 Функция rec()

.3 Функция load()

.4 Функция basa()

.5 Функция delet()

.6 Функция print()

.7 Функция inform

.8 Функция informtime()

.9 Функция convert()

.10 Функция sort()

.11 Функция change()

.12 Функция printik()

.        РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

ПРИЛОЖЕНИЕ 1. ЛИСТИНГ

ПРИЛОЖЕНИЕ 2. ФАЙЛ ТАБЛИЦЫ БАЗЫ ДАННЫХ

ПРИЛОЖЕНИЕ 3. ФАЙЛЫ С РЕЗУЛЬТАТОМ ВЫПОЛНЕНИЯ ЗАПРОСОВ

ЗАКЛЮЧЕНИЕ

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

введение


Задача данной работы состоит в создании базы данных и системы управления ей. Для этого предпочтительно использовать динамическую информационную структуру, а именно двунаправленный список. Он обладает следующими важными преимуществами, необходимыми при работе с базами данных: простой доступ к его элементам, возможность их легко удалять и добавлять. Нужно обеспечить достаточно простую систему управления базой данных, понятную рядовому пользователю и включающую в себя:

) Создание файла, содержащего сведения об абонентах телефонной сети. Каждая запись содержит следующую информацию: фамилия, имя, отчество абонента, номер телефона, год установки, сведения о наличии задолженности по оплате. Количество записей произвольное.

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

1.      Состав и структура программы


Алгоритм программы выполнен на языке С++. Программа состоит из двенадцати функций: main( ), Add ( ), SaveBaz ( ), LoadBaz ( ), Print ( ), Dolschnik ( ), Install ( ), converting ( ), Sort ( ), Udal ( ), change ( ), Poisk ( ), DeleteAll( ).

Главная функция main( ) осуществляет диалог с пользователем посредством системного меню. Так же она вызывает все остальные функцию

Для обработки информации в базе данных используются следующие функции: add( ) - позволяет добавить новую запись; DeleteAll ( ) - позволяет удалить всю базу данных. Используются функция поиска: Poisk( ). Позволяют найти абонента телефонной сети по его номеру, выводят данные на экран. Функция sort( ) производит сортировку данных поля «Задолженность» в порядке возрастания методом Шелла. Дополнительно с функцией sort() используется вспомогательная функция converting() для перевода списка в массив и наоборот. Для правки имеющихся данных используется функция change(). Функция print( ) выводит на экран всю базу данных.

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

2.      Функции и алгоритмы функций

 

.1 Функция main( )


Данная функция является основной функцией программы. С этой функции начинается выполнение всей программы. Функция main( ) не возвращает никакого значения. Данная функция вызывает все остальные функции, описанные в программе.

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

Управляющая конструкция switch передает управление к тому из помеченных с помощью case операторов, для которого значение константного выражения совпадает со значением переменной menu. Если значение переменной menu не совпадает ни с одним из константных выражений, то выполняется переход к оператору, помеченному меткой default.

Блок-схема функции main() представлена на рисунке 1.

Рисунок 1 - Блок-схема функции main()

2.2 Функция SaveBaz ()


Функция используется для записи базы данных в файл. Предусматривается загрузка базы из этого же файла. Данные записываются через пробел, что облегчает считывание при загрузке.

Работа функции начинается с проверки условия открытия файла. Если файл не существует, он автоматически создается, если существует, то данные, имеющиеся в файле, стираются. Запись данных в файл осуществляется через цикл последовательной проверки всех элементов. Как только указатель на следующий узел равен NULL, на экран выводится сообщение об успешном сохранении базы данных.

Блок-схема функции SaveBaz () представлена на рисунке 2.

Рисунок 2 - Блок-схема функции rec()

2.3 Функция LoadBaz( )


Функция загружает базу данных из файла. Предварительно удаляет уже имеющуюся в памяти базу. Затем файл проверяется на ошибку, если таковая существует, то на экран выводится сообщение об ошибке и происходит возврат в главное меню. Считывание из файла производится через цикл, условием выхода из которого является конец файла. По окончании выводится сообщение об успешной загрузке данных.

Блок-схема функции LoadBaz( ) представлена на рисунке 3.

Рисунок 3 - Блок-схема функции load()

2.4 Функция Add ( )


Функция осуществляет добавление нового узла с данными в начало списка. Для этого динамически выделяется память под новый узел, затем пользователю предлагается осуществить набор данных. После ввода осуществляется выбор: выход в главное меню или продолжение ввода. Продолжение ввода осуществляется через цикл, который повторяется только при вводе соответствующего значения переменной j: при 1 цикл продолжается, при любом другом значении осуществляется выход из цикла и из функции.

Блок-схема функции basa() представлена на рисунке 4.

Рисунок 4 - Блок-схема функции basa()

 

2.5 Функция DeleteAll( )


Данная функция создает новые пустые базы данных (или удаляет уже существующие). В данной функции открывается файл содержащий базу данных и удаляется все ее содержимое, затем закрывается.

В результате на экран выводится сообщение об успешном удалении и производится выход из функции.

Блок-схема функции delet() представлена на рисунке 5.

Рисунок 5 - Блок-схема функции delet()

база данные файл список

2.6 Функция Install()


Функция производит поиск по базе данных всех абонентов с введенным годом установки телефона. Поиск осуществляется путем сравнения введенного значения со всеми значениями данного поля базы данных. Данные выводятся на экран и одновременно печатаются в файл.

Блок-схема функции inform() представлена на рисунке 7.

Рисунок 7 - Блок-схема функции inform()

 

2.7 Функция Dolschnik()


Функция аналогична функции Dolschnik() только производит поиск абонентов, чья задолженность превышает введенное значение . Такимже образом как и в предыдущей функции осуществляется поиск данных путем сравнения значений.

Блок-схема функции informtime() представлена на рисунке 8.

Рисунок 8 - Блок-схема функции informtime()

 

2.8 Функция converting()


Функция используется как вызываемая функцией sort(). Перед сортировкой функция конвертирует базу данных из списка в массив, по завершении сортировки происходит обратное действие.

Если значение переданное функции равно нулю, то перевод осуществляется в направлении «список->массив структур», в противном случае в направлении «массив структур->список». При переводе списка в массив сперва определяется количество узлов в списке, под количество которых выделяется динамически память. Затем в элемент структуры записывается узел списка.

При переводе массива структур в список началу списка присваивается указатель на первый элемент массива. Затем элементы массива структур записываются в узлы списка.

Блок-схема функции converting() представлена на рисунке 9.

Рисунок 9 - Блок-схема функции convert()

 

2.9 Функция sort()


Функция сортирует данные по возрастанию задолженности абонента при помощи метода «Шелла»». В программе описаны три цикла, с помощью которых происходит сортировка массива структур. Внешний цикл while выполняется до тех пор, пока массив структур не отсортирован полностью. Во внутреннем цикле for происходит переход на следующий уровень сортировки данным методом. В следующем цикле while происходит сравнение элементов по данному условию. В случае выполнения условия элементы массива меняются местами, в противном случае остаются без изменения. При выходе из функции выдается сообщение об успешно отсортировке.

Блок-схема функции sort() представлена на рисунке 10.

2.10 Функция change()


Функция используется для изменения данных об абоненте. Для этого осуществляется поиск введенного пользователем номера в базе данных. Как только данные поля совпадают с введенными пользователем, на экран выводится информация по данному абоненту и предложение изменения данных, удаление данных или выход в главное меню. При выборе пункта «Изменение данных» программа переходит на функцию change(). Изменение данных производится таким же образом как и при вводе данных.

Блок-схема функции change() представлена на рисунке 11.

Рисунок 11 - Блок-схема функции change()

2.11 Функция print()


Функция выводит базу данных на экран. Удобно использовать для отслеживания изменений в базе.

Блок-схема функции print() представлена на рисунке 12

Рисунок 12 - Блок-схема функции print()

3. Руководство пользователя


Главное меню программы:


В поле «Выберите пункт меню» вводится код нужного действия.

Загруженная из файла база данных (просмотр при нажатие «2», загрузка производилась нажатием кода «4»):


Отсортированная база данных по задолженности абонента(сортировка - код «8»):


Изменение значений записей:

Ввести номер телефона абонента. На экран выведутся данные про абонента, затем по очереди будут выводиться поля, в которых следует набрать нужные данные.


Контроль над проведением операций над базой данных осуществляется командой «Вывод базы данных на экран», код - «2».

По завершении работы каждого действия выходом в главное меню служит нажатие любой клавиши.

ПРИЛОЖЕНИЕ 1. ЛИСТИНГ


#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>telephone

{surname[15]; //фамилияname[10];          //имяlastname[15];      //отчествоnumber[12];  //номер телефонаyear[5];              //год установкиscore;                    //задолженность по счетамtelephone *prev; //указатель на предыдущую структуруtelephone *next; //указатель на следующую структуру

};abonent

{*surname;score;abonent *prev;abonent *next;

};n; //кол-во записейtelephone **a; //указатель на массив указателей на структуру telephonetelephone *f1=NULL; //начало спискаtelephone *f2=NULL; //последняя запись спискаabonent *s1=NULL; //начало спискаabonent *s2=NULL; //последняя запись списка

/***** Функция добавления новых абонентов телефонной сети *****/Add()

{telephone *f;j=1;();("cls");(j!=2)

{("cls");=(struct telephone*)malloc(sizeof(struct telephone));

//Распределение памяти под один узел списка("Ввелите фамилию абонента: ");(f->surname);("Его имя: ");(f->name);("И отчество: ");(f->lastname);("Номер телефона: ");(f->number);("Год установки телефона: ");(f->year);("Задолженность абонента: ");("%d",&f->score);("Вы хотите добавить ещё абонента? (1 - да/2 - нет) \n");("%d",&j);();(f1==NULL)

{

(*f).next=NULL;

(*f).prev=NULL;=f;=f;

}

{

(*f).next=NULL;

(*f).prev=f2;

(*f2).next=f;=f;

}

}("запись успешно добавлена, можно продолжать...\n");();();

}

/***** Функция сохранения базы данных *****/SaveBaz()

{*ff;telephone *f;("cls");=f1; //начать с начала списка( (ff=fopen("datebase.db","w"))!=NULL) //если файл нормально открылся для записи

{(ff, "\n");( f->next!=NULL )

{(f->surname, ff);(ff, "\t");(f->name, ff);(ff, "\t");(f->lastname, ff);(ff, "\t");(f->number, ff);(ff, "\t");(f->year, ff);(ff, "\t");(ff,"%d",f->score);(ff,"\n");=f->next;

}

//запись в файл последнего узла(f->surname, ff);(ff, "\t");(f->name, ff);(ff, "\t");(f->lastname, ff);(ff, "\t");(f->number, ff);(ff, "\t");(f->year, ff);(ff, "\t");(ff,"%d",f->score);(ff, "\0"); //"\0" - конец строки("База данных сохранена! Поздравляю!...\n");(ff);

}("Ошибочка datebase.db!\n");();();

}

/***** Функция считывания базы данных из файла *****/LoadBaz()

{*ff;telephone *f;("cls");=NULL;( (ff=fopen("datebase.db","r"))!=NULL)

{( fgetc(ff)!=EOF )

{=(struct telephone*)malloc(sizeof(struct telephone));(ff, "%s", &(f->surname));(ff, "%s", &(f->name));(ff, "%s", &(f->lastname));(ff, "%s", &(f->number));(ff, "%s", &(f->year));(ff, "%d", &(f->score));(f1==NULL)

{

(*f).next=NULL;

(*f).prev=NULL;=f;=f;

}

{

(*f).next=NULL;

(*f).prev=f2;

(*f2).next=f;=f;

}

}("Абоненты успешно загружены. \n");(ff);

}("Ошибочка вышла с файлом datebase.db!\n");();();

}

/***** Функция вывода базы данных на экран *****/Print()

{telephone *f; //*f - указатель на структуру("cls");=f1; //начать с начала списка(f==NULL) //если список отсутствует("База данных еще не заполнена.\n");(f!=NULL)

{("|%15s", f->surname);("|%12s", f->name);("|%15s", f->lastname);("|%12s", f->number);("|%6s", f->year);("|%6d", f->score);("|\n");=f->next; //переход на следующую запись

}

}();();

}

/***** Ведомость задолженности по оплате *****/Dolschnik()

{telephone *f;dolg;*ff;=fopen("Dolschnik.txt", "w"); //открыть пустой файл для записи("cls");=f1; //на начало списка(f==NULL) //если список отсутствует("База данных еще не заполнена.\n");(f!=NULL)

{("Абоненты, задолженность которых составила выше какой суммы необходимо вывести?\nДолг>");("%d",&dolg);(" Ведомость задолженности по оплате \n");(" Абоненты с задолженностью выше %d \n", dolg);("| Фамилия | Имя | Долг |");(ff," Ведомость задолженности по оплате \n");(ff," Абоненты с задолженностью выше %d \n", dolg);(ff,"| Фамилия | Имя | Долг |");( f->next!=NULL ) //пока не закончится список

{(f->score>dolg)

{        printf("\n");("|%15s", f->surname);("|%12s", f->name);("|%6d|", f->score);(ff,"\n");(ff,"|%15s", f->surname);(ff,"|%12s", f->name);(ff,"|%6d|", f->score);

}=f->next;

}(f->score>dolg)

{        printf("\n");("|%15s", f->surname);("|%12s", f->name);("|%6d|", f->score);(ff,"\n");(ff,"|%15s", f->surname);(ff,"|%12s", f->name);(ff,"|%6d", f->score);

}(ff, "\0"); //"\0" - конец строки("\n\nБаза данных сохранена! Поздравляю!...\n");(ff);

}();();

}

/***** Ведомость установки телефонов *****/Install()

{telephone *f;years;*ff;=fopen("install.txt", "w"); //открыть пустой файл для записи("cls");=f1; //на начало списка(f==NULL) //если список отсутствует("База данных еще не заполнена.\n");(f!=NULL)

{("Ведомость установки телефонов за какой год вывести?\n Год: ");("%d",&years);(" Ведомость установки телефонов за %d год: \n", years);("| Фамилия | Имя | Отчество |");(ff," Ведомость установки телефонов за %d год: \n", years);(ff,"| Фамилия | Имя | Отчество |");( f->next!=NULL ) //пока не закончится список

{(atoi(f->year)==years)

{        printf("\n");("|%15s", f->surname);("|%12s", f->name);("|%10s|", f->lastname);(ff,"\n");(ff,"|%15s", f->surname);(ff,"|%12s", f->name);(ff,"|%10s|", f->lastname);

}=f->next;

}(atoi(f->year)==years)

{        printf("\n");("|%15s", f->surname);("|%12s", f->name);("|%10s|", f->lastname);(ff,"\n");(ff,"|%15s", f->surname);(ff,"|%12s", f->name);(ff,"|%10s", f->lastname);

}(ff, "\0"); //"\0" - конец строки("\n\n Ведомость сохранена! Поздравляю!...\n");(ff);

}();();

}

/***** Функция преобразования списка *****/converting(int b)

{telephone *p;i, k=0;=f1;(b==0)

{=f1;=1;((p->next)!=NULL)

{=p->next;++;

}=(struct telephone**)malloc(n*sizeof(struct telephone*));

*a=f1;=f1;(i=0; i<n; i++)

{[i]=p;=p->next;

}

}

{=*a;

(*a)->prev=NULL;(n>1)

(*a)->next=a[0];(i=0; i<n-1; i++)

(a[i])->next=a[i+1];(n>1)

(a[n-1])->prev=a[n-2];

(a[n-1])->next=NULL;=a[n-1];

}

}

/***** Функция сортировки базы данных *****/Sort()

{telephone *shell;i,j,incr;("cls");clrscr();(f1==NULL) printf("Таблица пуста");

{(0);=n/2;(incr>0)

{(i=incr;i<n;i++)

{=i-incr;(j>=0)(a[j]->score > (a[j+incr]->score))

{=a[j];[j]=a[j+incr];[j+incr]=shell;=j-incr;

}j=-1;

}=incr/2;

}(1);("База успешна отсортирована...");

}();();("cls");

}

/***** Функция удаления записи *****/Udal (char fst[15])

{system("cls");telephone *p, *q, *r, *h;fcon[10];clrscr();(f1==NULL) printf("Таблица пуста\n");

{=f1;(h!=NULL)

{=h;(strcmp((*p).number,fst)==0)

{((p->prev!=NULL)&&(p->next!=NULL))

{=p->prev;=p->next;>next=r;>prev=q;(p);

}((p->prev==NULL)&&(p->next!=NULL))

{=p->next;>prev=NULL;(p);=q;

}((p->prev==NULL)&&(p->next==NULL))

{(p);=NULL;

}((p->next==NULL)&&(p->prev!=NULL))

{=p->prev;>next=NULL;(p);

};

}=h->next;

}

}

{system("cls");telephone *f;clrscr();=f1;(f!=NULL)

{        if (strcmp((*f).number,fst)==0)

{();("Ввелите фамилию абонента: ");(f->surname);("Его имя: ");(f->name);("И отчество: ");(f->lastname);("Номер телефона: ");(f->number);("Год установки телефона: ");(f->year);("Задолженность абонента: ");("%d",&f->score);

}=f->next;

}

}

/***** Функция поиска записи *****/Poisk()

{char s[15];telephone *f;ch, flag=0;("cls");clrscr();=f1; //начать с начала списка(f==NULL) //если список отсутствует

{printf("База данных еще не заполнена.\n");();();

}

{        printf("Введите номер телефона: ");("%s",s);(" База данных абонентов телефонной сети \n");("| Фамилия | Имя | Отчество | Номер | Год | Долг |\n");(f!=NULL) //до тех пор пока список не закончится

{(strcmp((*f).number,s)==0)

{("|%15s", f->surname);("|%12s", f->name);("|%15s", f->lastname);("|%12s", f->number);("|%6s", f->year);("|%6d", f->score);("|\n");=f->next; //переход на следующую запись++;

}f=f->next;

}(flag==0) {system("cls"); printf("Запись не найдена..."); getchar(); getchar();}

{("\nДальнейшия действия?\n(1 - Удалить запись, 2 - Изменить запись, 3 - Возврат в меню): ");("%d",&ch);(ch)

{1: Udal(s);2: change(s);3: system("cls");

}

}

}

}

/***** Функция удаления базы данных *****/DeleteAll()

{*ff;("cls");=fopen("datebase.db", "w");(ff);=NULL; //обнуляется указатель на начало списка("База данных успешно удалена.\n");();();

}

/***** Основная функция *****/main()

{menu;("chcp 1251");("cls");(1)

{("chcp 1251");("cls");("\n\n\n\n");("\t\t1) - Ввод данных абонентов телефонной сети \n");("\t\t2) - Вывод данных абонентов на экран \n");("\t\t3) - Сохранение базы данных \n");("\t\t4) - Загрузка базы данных \n");("\t\t5) - Удаление баз данных \n");("\t\t6) - Ведомость установки телефонов \n");("\t\t7) - Ведомость задолженности по оплате \n");("\t\t8) - Сортировка по задолженности \n");("\t\t9) - Поиск по номеру телефона абонента \n");("\t\t10) - Выход \n");("\n\n\n Выберите пункт меню: ");("%d", &menu);(menu) //оператор выбора

{1: Add(); //Функция добавления новых абонентов телефонной сети;2: Print(); // Функция вывода базы данных на экран;3: SaveBaz(); // Функция сохранения базы данных;4: LoadBaz(); // Функция считывания базы данных из файла;5: DeleteAll(); // Функция удаления базы данных;6: Install(); // Ведомость установки телефонов;7:         Dolschnik(); // Ведомость задолженности по оплате;8:      Sort(); // Сортировка по задолженности;9:         Poisk(); // Сортировка по задолженности;10: exit(1);:

{("chcp 1251");("cls");("Вы ошиблись со значением\n");("Нажмите любую клавишу...");();();

};

}

}

}

приложение 2

 

файл таблицы базы данных



приложение 3

файлы с результатом выполнения запросов

Файл, содержащий информацию о задолженности выше введенного значения:


Файл, содержащий информацию о абонентах, установивших телефон в заданный год:

Заключение


В ходе курсовой работы была создана база данных, содержащая данные об абонентах телефонной сети. База содержит информацию об имени, фамилии и отчестве абонента, номер телефона, год установки телефона, задолженность абонента. Работа с базой осуществляется через меню (доступное и простое).

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

Библиографический список


.        Лафоре Р. Объектно-ориентированное программирование в С++ / Р. Лафоре - 4-е изд. - Питер.: 2004. - 654 с.

.        Давыдов В.Г. Технологии программирования. С++ / В. Г. Давыдов - Санкт-Петербург: БХВ-Петербург, 2005. - 432 с.

.        Касюк С.Т. Конспект лекций по дисциплине «Информатика» / С. Т. Касюк - Челябинск: ЮУрГУ, 2005. - 212 с.

Похожие работы на - Проектирование базы данных абонентов телефонной сети

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!