Cоздание телефонного справочника "Telephone reference book" посредством Borland C

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Курсовая

Cоздание телефонного справочника «Telephone reference book» посредством Borland C

Введение

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

Интерес к персональным компьютерам постоянно растет, а круг их пользо-вателей непрерывно расширяется. В число пользователей ПЭВМ вовлекаются как новички в компьютерном деле, так и специалисты по другим классам ЭВМ.

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

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

Основой информатизации является использование электронно-вычислительной техники для сбора, накопления, обработки и передачи информации. ЭВМ-комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач.

Чтобы компьютер выполнил решение какой-либо задачи, ему необходимо получить от человека инструкции, как её решать. Набор таких инструкций для компьютера, направленный на решение конкретной задачи, называется компьютерной программой.

Для написания для написания таких инструкций программисты используют языки программирования. Все языки программирования делятся на языки низкого (ассемблер), высокого (Си, Бейсик, Паскаль, Фортран, C++) и сверхвысокого (Алгол-67, Пролог) уровня.

Язык С++ - универсальный язык общего назначения, область приложений которого — программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах. Реализация С++ осуществлена для машин в диапазоне от самых простых персональных компьютеров до самых мощных суперкомпьютеров и для всех операционных систем.

Целью курсовой работы является создание телефонного справочника «Telephone reference book» посредством Borland C.

Необходимо написать программу которая позволяет найти нужные сведения в телефонном справочнике, в качестве базы данных которого используется файл (base. txt). Программа должна осуществлять поиск по фамилии, телефону и адресу. Если некоторые из данных совпадают то программа должна вывести список всех людей которые прошли выборку.

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

Для достижения поставленной цели были определены следующие задачи:

1. Изучить литературу по работе с файлами.

2. Научится работать с файлами.

3. Ознакомиться с понятиями графики.

4. Научиться работать в графическом режиме.

I. Теоретический раздел

Бумажные телефонные справочники давно изжили своё и на данный момент перестали быть актуальными. На смену им пришли электронные справочники, которые позволяют хранить большие объёмы данных, а также позволяют осуществлять быстрый поиск по этим данным.

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

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

Первый вопрос который возник при разработке программы касался того, где и как хранить данные? Было представлено два варианта:

1. Использовать для хранения информации СУБД.

2. Использовать обычный текстовый файл.

После недолгих размышлений первый вариант был отвергнут, потому

как СУБД — являются очень громоздкими и ресурсоёмкими приложениями. Нам же нужен лёгкий и быстрый справочник который бы запустился даже на очень слабой машине.

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

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

II. Технологический раздел

2.1 Структурная схема работы приложения

2.2 Структурная схема работы с данными

2.3 Использование стандартных библиотечных функций

В данной курсовой работе использовались следующие библиотеки:

1. graphics. h

2. conio. h

3. stdlib. h

4. dos. h

5. string. h

6. fstream. h

7. iostream. h

< iostream. h> -- заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++. Название образовано от Input/Output Stream («поток ввода-вывода»). В языке C++ и его предшественнике, языке программирования Си, нет встроенной поддержки ввода-вывода, вместо этого используется библиотека функций. iostream управляет вводом-выводом, как и stdio. h в Cи. iostream использует объекты cin, cout, cerr и clog для передачи информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно. Являясь частью стандартной библиотеки C++, эти объекты также являются частью стандартного пространства имён -- std.

< stdlib. h> -- заголовочный файл стандартной библиотеки языка Си, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие. Заголовок вполне совместим с C++ и известен в нём как cstdlib. Название «stdlib» расшифровывается как «standard library» (стандартная библиотека).

< stdio. h> (от англ. standard input/output header -- стандартный заголовочный файл ввода/вывода) заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода. Функциональность унаследована от «портативного пакета ввода/вывода» («portable I/O package»), написанного Майком Леском из Bell Labs в начале 1970-х. C++ ради совместимости, также использует stdio. h наряду со схожим по функциональности заголовочным файлом cstdio.

< conio. h> (от англ. console input-output -- консольный ввод-вывод) -- заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS. Этот заголовочный файл объявляет несколько библиотечных функций для работы с «консольным вводом и выводом» программы

< string. h> -- заголовочный файл стандартной библиотеки языка Си, содержащий функции для работы с нуль-терминированными строками и различными функциями работы с памятью. Функции объявленные в string. h широко используются, так как являясь частью стандартной библиотеки, они гарантированно работают на всех платформах, поддерживающих Си. Кроме этого, строковые функции работают только с набором символов ASCII или его совместимыми расширениями, такими как ISO-8859−1; многобайтовые кодировки такие как UTF-8 будут работать, с отличием, что «длина» строки будет определяться как число байтов, а не число символов Юникода, которым они соответствуют < fstream. h> - заголовочный файл из стандартной библиотеки C++, включающий набор классов, методов и функций, которые предоставляют интерфейс для чтения/записи данных из/в файл. Для манипуляции с данными файлов используются объекты, называемые потоками («stream»).

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

ifstream in (char *c) — функция создаёт объект in для работы с входным потоком данных.

ofstream out (char *c) — функция создаёт объект out для работы с выходным потоком данных.

getline (char* buffer, streamsize num, char delim) — функция используется с потоками ввода. Версия функции без ограничителя delim ставит ограничитель на символ новой строки.

Графический модуль используется для работы с графикой под ОС MS-DOS.

Для инициализации модуля требуется подключить, так называемый, заголовочный файл (#include < graphics. h>). В этом файле описаны все функции, которые требуются для написания программы работающей с «графикой».

void initgraph (& grdriver, & grmode, «path»); - функция инициализации графического режима, где & grdriver, & grmode, «path» — параметры загружаемого режима;

grdriver и grmode — переменные типа integer;

«path» — путь к загружаемому драйверу графического режима.

void closegraph (void); - данная функция без каких либо параметров и закрывает текущий графический режим.

void fillpoly (int numpoints, int *polypoints) — функция рисует и закрашивает заданным цветом полигон.

void settextstyle (int font, int direction, int charsize) — Устанавливает характеристики текста: стиль, положение (горизонтальное или вертикальное), размер шрифта.

void outtextxy (int x, int y, char far *textstring) — Выводит строку в графическом режиме предварительно перейдя в точку с координатами (x, y).

void cleardevice (void) — функция очищает экран в графическом режиме и возвращает текущую позицию указателя в точку с координатами (0; 0).

void setbkcolor (int color) — Устанавливает цвет фона по его номеру заданному переменной color.

void line (int x0, int y0, int x1, int y1) — Функция рисует линию от точки с координатами x0, y0 до точки с координатами x1, y1. Не обновляет текущую позицию.

void setcolor (int color) — функция, устанавливающая цвет линий и текста по его номеру заданному переменной color.

int getpixel (int x, int y) — функция, возвращающая цвет пикселя в точке (x; y).

int getch (void) — функция, возвращающая код нажатой клавиши.

2.4 Стандартные типы данных

В данной программе используются следующие стандартные типы данных:

— int целочисленный знаковый тип данных, диапозон от −32 768…−32 767. Размер 1 байт

— char символьный тип данных, предназначенный для хранения одного символа в определённой кодировке. Если char определён как signed (знаковый), то его диапазон значений составляет от ?127 до 127 (на единицу больше в положительную или отрицательную сторону, в зависимости от реализации). Если он определён как unsigned (беззнаковый), то его значения могут составлять от 0 до 255. Значение, содержащееся в этом типе, можно всегда безопасно привести к значению типа int. В Си нет примитивных типов для работы со строками, поэтому для работы с ними используется указатель char *.

— double вещественный тип данных с плавающей точкой и двойной точностью. Диапозон 1,7е-308…1,7е+308. Размер 8 байт.

2.5 Описание пользовательских функций

void readFile () — функция осуществляем форматированное чтение из файла (base. txt).

void searchByNumb () — функция осуществляет поиск по номеру, с учётом частичного совпадения символов.

void searchByFio () — функция осуществляет поиск по фамилии, с учётом частичного совпадения символов.

void searchByAdr () — функция осуществляет поиск по адресу, с учётом частичного совпадения символов.

void sortByFio () — функция производит сортировку данных структуры в формате (А-я).

void sortByFioZa () — функция производит сортировку данных структуры в формате (Я-а).

void printBooks () — функция выводит на экран все контакты из телефонной книги.

void addUser () — функция осуществляющая добавление нового контакта в базу данных.

void init_Graph () — функция инициализации графики, которая используется для прорисовки меню.

void one_Menu (int x, int y) — функция которая рисует один элемент меню, входные параметры координаты по х и y.

void paint_Menu (int x, int y, int count) — функция которая рисует всё меню, count параметр отвечающий за количество элементов.

int move_Menu (int x, int y, int count) — функция передвижения по элементам меню, возвращает номер активного элемента меню.

void paint_Menu_Text (int x, int y, int count, char *name_Menu[]) — данная функция отвечает за прорисовку названий элементов меню, названия элементов хранятся в char *name_Menu[].

void printAbout () — данная функция выводит на экран текст со сведениями о названии и версии программы.

void searchMenu () — данная функция отвечает за прорисовку меню поиска.

void sortMenu () — данная функция отвечает за прорисовку меню сортировки.

void mainMenu () — данная функция отвечает за прорисовку гравного меню.

int main () — главная функция, которая является точкой входа в прогррамму.

2.6 Описание работы программы

После своей загрузки программа осуществляет вывод на экран меню программы:

Навигация по меню осуществляется при помощи клавиш UP, DOWN, ENTER и ESC. При нажатии клавиши Enter на одном из элементов списка, на экран будет вызвано одно из дочерних меню.

При выборе пунктов меню пользователь может: добавить новый элемент в список, произвести поиск абонента по нужному ему критерию, произвести сортировку списка, просмотреть весь список.

При вызове пункта меню Look будет осуществлён вывод на экран всего списка контактов:

При вызове пункта меню Search будет осуществлён поиск по списку контактов:

При вызове пункта меню Sort будет осуществлена сортировка по списка контактов, а на экран выведется сообщение о состоянии проведения операции:

При вызове пункта меню Exit произойдет выход из программы.

Заключение

программа телефонный справочник borland

Данная программа продемонстрировала хорошую работоспособность. Имеет интуитивно понятный интерфейс и не должна вызывать затруднений в работе конечного пользователя. Для корректной работы программы файл base должен находиться в каталоге book, который в свою очередь должен находится в каталоге, где установлен язык программирования Borland C++.

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

1. Была изучена литература, необходимая для работы c файлами.

2. Были рассмотрены понятия графики, их принципы и методы работы.

3. Была разработана программа.

Литература

1. http: //ru. wikipedia. org/wiki/Fstream

2. Справочная служба среды BorlandC

3. Программирование на языке высокого уровня СИ. Часть II: практикум/ Сост. О. В. Шестопал, О. В. Сташкова. — Тирасполь, 2010. — 83 с.

4. Абрамов С. А. Начала информатики, — М.: Наука, 2005

5. Гусева А. И. Учимся информатике: задачи и методы их решения, — М.: Диалог МИФИ, 1998

6. Корриган Джон Компьютерная графика: Секреты и решения: Пер с англ. -М.: Энтроп, 2008. — 352 с.

7. Бьярн Страуструп. Язык программирования С++, в двух частях. Пер. с англ. Киев: «ДиаСофт», 2003. -296 с. ,

Приложение

Файл MAIN. CPP

#include < conio. h>

#include< iostream. h>

#include < graphics. h>

#include < stdio. h>

#include < dos. h>

#include < stdlib. h>

#include < string. h>

#include < fstream. h>

int len;

int e = 4;

struct refBook {

char num[19];

char fio[50];

char adr[50];

} book[1000];

// Функция осуществляющая чтение из файла

void readFile () {

ifstream in («base1. txt»);

int i = 0;

if (in) {

while (!in. eof ()) {

in. getline (book[i]. num, 11, '/');

in. getline (book[i]. fio, 50, '/');

in. getline (book[i]. adr, 50, 'n');

if (!in. eof ())

i++;

}

len = i;

}

else cout< <"nError file is not found";

in. close ();

}

// Функция осуществляющая поиск по номеру, частичное совпадение

void searchByNumb () {

char data[19];

int n=0;

cout< <"Please enter number for search — «;

gets (data);

clrscr ();

cout< <"Result of search: n";

for (int i = 0; i < len; i++) {

if (!strncmp (data, book[i]. num, 5)) {

printf («t%s %s %sn», book[i]. fio, book[i]. num, book[i]. adr);

n = 1;

}

}

if (!n) {

clrscr ();

cout< <"nttAt the request of '"< <data<<"' it’s found nothing!";

}

}

// Функция для поиска по ФИО, частичное совпадение

void searchByFio () {

char data[50];

int n = 0;

cout< <"Please enter FIO for search — «;

gets (data);

for (int i = 0; i < len; i++) {

if (strspn (data, book[i]. fio) > e) {

cout< <"Result of search: n";

printf («t%s %s %sn», book[i]. fio, book[i]. num, book[i]. adr);

}

}

if (!n) {

clrscr ();

cout< <"nttAt the request of '"< <data<<"' it’s found nothing!";

}

}

// Функция для поиска по Адресу, частичное совпадение

void searchByAdr () {

char data[50];

int n = 0;

cout< <"Please enter address for search — «;

gets (data);

for (int i = 0; i < len; i++) {

if (strspn (data, book[i]. adr) > e) {

cout< <"nResult of search: n";

printf («t%s %s %sn», book[i]. adr, book[i]. num, book[i]. fio);

}

}

if (!n) {

clrscr ();

cout< <"nttAt the request of '"< <data<<"' it’s found nothing!";

}

}

// Функция для сортировки по ФИО А-я

void sortByFio () {

int i, j;

char temp[50];

char temp2[50];

char temp3[50];

for (i = 0; i< len-1; i++) {

for (j = i+1; j< len; j++) {

if (book[i]. fio[0] > book[j]. fio[0]) {

strcpy (temp, book[i]. fio);

strcpy (book[i]. fio, book[j]. fio);

strcpy (book[j]. fio, temp);

strcpy (temp2,book[i]. num);

strcpy (book[i]. num, book[j]. num);

strcpy (book[j]. num, temp2);

strcpy (temp3, book[i]. adr);

strcpy (book[i]. adr, book[j]. adr);

strcpy (book[j]. adr, temp3);

}

}

}

cout< <"ntttThe book is successfully sorted!";

}

// Функция для сортировки по ФИО Я-а

void sortByFioZa () {

int i, j;

char temp[50];

char temp2[50];

char temp3[50];

for (i = 0; i< len-1; i++) {

for (j = i+1; j< len; j++) {

if (book[i]. fio[0] < book[j]. fio[0]) {

strcpy (temp, book[i]. fio);

strcpy (book[i]. fio, book[j]. fio);

strcpy (book[j]. fio, temp);

strcpy (temp2,book[i]. num);

strcpy (book[i]. num, book[j]. num);

strcpy (book[j]. num, temp2);

strcpy (temp3, book[i]. adr);

strcpy (book[i]. adr, book[j]. adr);

strcpy (book[j]. adr, temp3);

}

}

}

cout< <"ntttThe book is successfully sorted!";

}

// Функция для вывода всего справочника на экран

void printBooks () {

char c;

int k=-2;

_setcursortype (0);

cout. width (50);

cout< <"Press Enter for look list!";

while (c ≠ 27) {

c =getch ();

if (c == 13) {

k++;

clrscr ();

for (int i = 1; i <= 10; i++) {

cout< <endl;

printf («%20s %20s %25sn», book[i+k]. num, book[i+k]. fio, book[i+k]. adr);

}

gotoxy (30,24);

cout< <"Enter — view more";

gotoxy (30,25);

cout< <"Esc — back to home";

}

}

}

void mainMenu ();

// Функция добавления нового пользователя

void addUser () {

char num[19], fio[50], adr[50];

ofstream out («e: base1. txt», ios: app);

if (out) {

cout< <"Please enter number — «;

gets (num);

cout< <"nPlease enter FIO — «;

gets (fio);

cout< <"nPlease enter address — «;

gets (adr);

out< <num<<'/';

out< <fio<<'/';

out< <adr<<'n';

out. close ();

readFile ();

cout< <"nThe user is successfully added in base";

}

else {

clrscr ();

cout< <"nnnttttFile is not open!";

}

}

// Функции для реализации меню

void init_Graph (){

int gdriver = DETECT;

int gmode;

initgraph (& gdriver,&gmode,"c:\turboc3\bgi");

}

// Функция прорисовки одного элемента меню

void one_Menu (int x, int y) {

rectangle (x, y, x+95,y+30);

}

// Функция прорисовки всего меню

void paint_Menu (int x, int y, int count){

setcolor (3);

for (int i = 0; i < count; i++)

one_Menu (x, y + i * 30);

}

// Функция передвижения по меню

int move_Menu (int x, int y, int count) {

int count_menu = 0;

char c=0;

count--;

setcolor (14);

one_Menu (x, y);

while (c≠13){

c = getch ();

if (!c) c+=getch ();

switch© {

case 80:{ if (count_menu == count) count_menu = 0;

else count_menu++;

setcolor (3);

one_Menu (x, y);

setcolor (14);

y = count_menu*30+10;

one_Menu (x, y);

break;

} //down

case 72: {

if (count_menu == 0) count_menu = count;

else count_menu--;

setcolor (3);

one_Menu (x, y);

setcolor (14);

y = count_menu*30+10;

one_Menu (x, y);

break;

}//up

}

}

return count_menu;

}

// Функция прорисовки названий элементов меню

void paint_Menu_Text (int x, int y, int count, char *name_Menu[]){

setcolor (15);

settextstyle (8,0,2);

for (int i =0; i< count; i++)

outtextxy (x+10,y+i*30−2,name_Menu[i]);

}

// Выводим текст для About

void printAbout () {

cleardevice ();

setcolor (7);

settextstyle (8,0,4);

char *s;

sprintf (s,"%s","Referens book");

outtextxy (200,100,s);

sprintf (s,"%s","Version 1. 0″);

outtextxy (230,135,s);

sprintf (s,"%s","by Karlik Dmitry");

outtextxy (170,170,s);

sprintf (s,"%s","2013″);

outtextxy (280,205,s);

}

// Меню поиска

void searchMenu () {

int x=270,y=10;

int count = 4;

char *name_Menu[]={"Name", «Phone»,"Addr","Back"};

int count_menu;

init_Graph ();

paint_Menu (x, y, count);

paint_Menu_Text (x, y, count, name_Menu);

count_menu = move_Menu (x, y, count);

readFile ();

switch (count_menu) {

case 0: { closegraph (); searchByFio (); getch (); mainMenu (); break; }

case 1: { closegraph (); searchByNumb (); getch (); mainMenu (); break; }

case 2: { closegraph (); searchByAdr (); getch (); mainMenu (); break; }

case 3: { mainMenu (); break; }

}

closegraph ();

}

// Меню сортировки

void sortMenu () {

int x=270,y=10;

int count = 3;

char *name_Menu[]={"A-z", «Z-a»,"Back"};

int count_menu;

init_Graph ();

paint_Menu (x, y, count);

paint_Menu_Text (x, y, count, name_Menu);

count_menu = move_Menu (x, y, count);

switch (count_menu) {

case 0: { closegraph (); sortByFio (); getch (); mainMenu (); break; }

case 1: { closegraph (); sortByFioZa (); getch (); mainMenu (); break; }

case 2: { mainMenu (); break; }

}

closegraph ();

}

//Главное меню

void mainMenu () {

int x=270,y=10;

int count = 6;

char *name_Menu[]={"Look", «Search»,"Sort","Add","About","Exit"};

int count_menu;

init_Graph ();

paint_Menu (x, y, count);

paint_Menu_Text (x, y, count, name_Menu);

count_menu = move_Menu (x, y, count);

switch (count_menu) {

case 0: { closegraph (); printBooks (); mainMenu (); break; }

case 1: { searchMenu (); break; }

case 2: { sortMenu (); break; }

case 3: { closegraph (); addUser (); readFile (); getch (); mainMenu (); break; }

case 4: { printAbout (); getch (); mainMenu (); break; }

case 5: { exit (0); break; }

}

closegraph ();

}

int main (){

readFile ();

mainMenu ();

getch ();

return 0;

}

ПоказатьСвернуть
Заполнить форму текущей работой