Курсовая работа (т): Електронний довідник у С++

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

.        Фаронов В.В. Турбо Паскаль 7.0. Начальный курс: Учеб.пособие. - М.: Нолидж, 2010. -612с.

.        Фаронов В.В. Турбо Паскаль 7.0.Практика программирования: Учеб.пособие. - / М.: Нолидж, 2013. -429 с.

.        Хэнкок Л.,/ Кригер М. Введение в программирование на языке Си.- / М.: Радио и связь, 2006.-220с.

.        Шикова О.М. Основи програмування мовою С++ у прикладах і завданнях: навч. посібник / Шикова О. М. - / К.: МАУП, 2004. - 112 с.

Додаток А

Код пронрами

// k5.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <stdio.h>

#include <conio.h>

#ifdef WIN32

#include <windows.h>

#endif

//prototipyi functsiyZastBeg();ViewDB();CreateDB();AddToDB();SearchInDB();SortDB();Exit();ZastEnd();Get(int min, int max);record

{num;surn[20];name[300];ats;

};

//------------------------------------------MENU-------------------------------

#ifdef WIN32wherey (void)

{_SCREEN_BUFFER_INFO conScrBufInfo;(GetStdHandle(STD_OUTPUT_HANDLE), &conScrBufInfo);conScrBufInfo.dwCursorPosition.Y - conScrBufInfo.srWindow.Top;

}gotoxy(short x, short y) {hConsoleOutput;Cursor_Pos = {x, y};= GetStdHandle(STD_OUTPUT_HANDLE);(hConsoleOutput, Cursor_Pos);

}clrscr(void) {_SCREEN_BUFFER_INFO csbi;hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);coord = {0, 0};count;(hStdOut, &csbi);(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count);(hStdOut, coord);

}

#endifMenu()

{ setlocale (LC_ALL,"Russian");();("*Mеню*");("\n-> Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\n Перемiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");p = 1;m = getch();(m == 13) ViewDB();{(m == 80) p++;(m == 72) p--;{(p<=0) p = p+6;

}while (p<=0);{(p>=7) p = p-6;

}while (p>=7);(p == 1){();("*Mеню*");("\n-> Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 3){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n-> Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 4){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n-> Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 5){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n-> Сортування даних у довіднику по роздiлах");("\n Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}(p == 6){();("*Меню*");("\n Перегляд довiдника");("\n Створення довiдника термiнiв");("\n Додати визначення в довiдник");("\n Пошук визначення по розділах");("\n Сортування даних у довіднику по роздiлах");("\n-> Вихiд iз програми");("\n\n\nПеремiщення - стрiлки вверх i вниз");("\n Вибiр пункту меню - <Enter>");= getch();

}

}while(m!=13);p;

}

//---------------------------------------ZAST_BEG------------------------------ZastBeg()

{("\n\n\n\n\n \t\t\t\t Курсова робота");("\n \t\t\t з дисциплiни 'Програмування'");("\n \t\t\t\t на тему:");("\n \t‘Створення електронного довідника дисципліни 'Програмування'’");("\n \t\t\t виконав студент групи ОКСМ-21");("\n \t\t\t\t Ковдра Василь");("\n\n\n\n \t <Esc> - вихiд, продовжити роботу - будь-яка iнша клавiша \n\n\n\n\n\n\n\n\n");c = getch();c;

}

//--------------------------------------ZAST_END-------------------------------ZastEnd()

{();("\n\n\n\n\n \t Електронний довiдник з дисциплiни ‘Програмування’");("\n \t успiшно закритий. Дякую за його використання!");("\n\n\n\n \t Для виходу з програми натиснiть будь-яку клавiшу.");();

}

//---------------------------------------EXIT----------------------------------Exit()

{();("\n\n \t\t Дiйсно вийти з програми?");("\n\n <Enter> - вийти в ОС, <Esc> - продовжити роботу з програмою.");c;

{= getch();

}while(c!= 13 && c != 27);c;

}

//---------------------------------------MAIN----------------------------------main()

{setlocale (LC_ALL,"Russian");(ZastBeg() != 27)

{z;

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);

}ZastEnd();0;

}

//---------------------------------------VIEWDB--------------------------------ViewDB()

{setlocale (LC_ALL,"Russian");*f=fopen("db.txt", "r+t");*num=fopen("num.txt", "r+t");(f == NULL || num == NULL)

{();("\n \t Не вдається вiдкрити файл електронного довiдника!");("\n \t Натиснiть будь-яку клавiшу для виходу в меню.");();

}

{record recz[100];i, kol;

//poluchenie kol-va zapisej((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila(i=0;i<kol;i++)

{(f, sizeof(recz[i])*i, 0);((char*)&recz[i], 1, sizeof(recz[i]), f);

}

//prosmotr zapisej iz poluchennogo massivaa, k = 0;

{();("*Перегляд довiдника*");("\n\n Запис № %i", recz[k].num);("\n Визначення: %s - %s ", recz[k].surn, recz[k].name);("\n Номер роздiлу до якого належить визначення -> %i", recz[k].ats);(kol == 1) //v baze vsego 1 zapis'

{("\n\n Бiльше записiв не знайдено!");("\n Натиснiть будь-яку клавiшу для виходу в меню.");();= 101;

}

{(k == 0)

{("\n\n Стрiлка вниз - наступний запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 80 && a != 27);(a == 80) k++;k = 101;

}

{(k == kol - 1)

{("\n\n Стрiлка вверх - попереднiй запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 27);(a == 72) k--;k = 101;

}

{(k > 0 && k < kol)

{("\n\n Стрiлки вверх/вниз - перегляд записiв: попереднiй/наступний");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 80 && a != 27);(a == 80) k++;(a == 72) k--;(a == 27) k = 101;

}

}while(k != 101);

}(f);(num);

z;

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);

();

}

//--------------------------------------CREATEDB-------------------------------CreateDB()

{setlocale (LC_ALL,"Russian");();("Ви дiйсно хочете створити новий електронний довiдник?");("\n <Enter> - так, <Esc> - нi");d;

}while(d != 13 && d != 27);(d == 13)

{*f=fopen("db.txt", "wb");*num=fopen("num.txt", "wb");record rec[100];i, j;(i = 0; i < 100; i++)

{();(LC_ALL,"Russian");("*Створення довiдника термiнiв*\n\n");[i].num = i+1;

//podtverzhdenniy vvod термыну("\nВведiть термiн -> ");(stdin, "%s", &rec[i].surn);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели термiн: '%s'. <Esc> - повторiть ввiд. ", rec[i].surn);("\n<Enter> - термiн введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\nВведiть заново ->");(stdin, "%s", &rec[i].surn);(stdin);

}

}while(j == 27);

//podtverzhdenniy vvod визначення("\n\n Введiть визначення -> ");(stdin, "%s", &rec[i].name);(1,wherey()+1);

{(1,wherey()-2);("Ви ввели визначення: '%s'. <Esc> - повторiть ввiд. ", rec[i].name);("\n <Enter> - визначення введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");(stdin, "%s", &rec[i].name);(stdin);

}

}while(j == 27);

//podtverzhdenniy kontrolliruemiy vvod nomera ats("\n\n Введiть номер роздiлу до якого належить дане визначення:(число вiд 1 до 9):");("\n \t 1. Основи мови С++; ");("\n \t 2. Лiнiйнi програми;");("\n \t 3. Розгалуження;");("\n \t 4. Цикли;");("\n \t 5. Масиви;");("\n \t 6. Функцiї;");("\n \t 7. Файли;");("\n \t 8. Рядки;");("\n \t 9. Структури, списки, стеки, черги, об’єднання, графiка.");("\n\n Введiть число вiд 1 до 9: ");[i].ats = Get(1, 9);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели № розділу: '%d'. <Esc> - повторний ввiд. ", rec[i].ats);("\n <Enter> - Номер роздiлу введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");[i].ats = Get(1, 999);

}

}while(j == 27);((char*)&rec[i], 1, sizeof(rec[i]), f);("\n\n <Enter> - продовження, <Esc> - вихiд в меню\n");

{= getch();

}while(j != 13 && j != 27);(j == 27)

{kol = i + 1;((int*)&kol, 1, sizeof(kol), num);;

}

}();(f);(num);

}z;

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);();

}

//--------------------------------------ADDTODB--------------------------------AddToDB()

{setlocale (LC_ALL,"Russian");();("\n Ви дiйсно хочете добавити новий запис в електронний довiдник?");("\n <Enter> - так, <Esc> - нi");d, z;

{= getch();

}while(d != 13 && d != 27);(d == 13)

{*f=fopen("db.txt", "ab");*num=fopen("num.txt", "r+b");c;(num == NULL)

{(f); //();("\n Електронний довiдник не iснує!");("\n <Esc> - Створення довiдника термiнiв, <Enter> - вихiд в меню");

{= getch();

}while(c != 13 && c != 27);(c == 27) CreateDB();

}

//esli file s bazoj naiden

{kol;((int*)&kol, 1, sizeof(kol), num);(kol == 100)

{("Електронний довiдник заповнений. Додати визначення неможливо!");("Натиснiть будь-яку клавiшу для виходу в меню!");();

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}

}

}while(z == 1);();

}record newrec;j;();("*Додавання визначення в електронний довiдник*\n\n");.num = kol + 1;

//podtverzhdenniy vvod familii("\n Термiн -> ");(stdin, "%s", &newrec.surn);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели термiн: '%s'. <Esc> - повторний ввiд. ", newrec.surn);("\n <Enter> - термiн введений вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");(stdin, "%s", &newrec.surn);(stdin);

}

}while(j == 27);

//podtverzhdenniy vvod imeni

("\n\n Введiть визначення -> ");(stdin, "%s", &newrec.name);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели визначення: '%s'. <Esc> - повторний ввiд. ", newrec.name);("\n <Enter> - визначення введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");(stdin, "%s", &newrec.name);(stdin);

}

//podtverzhdenniy kontrolliruemiy vvod nomera ats("\n\n Введiть номер роздiлу до якого належить дане визначення:(число вiд 1 до 9):");("\n \t 1. Основи мови С++; ");("\n \t 2. Лiнiйнi програми;");("\n \t 3. Розгалуження;");("\n \t 4. Цикли;");("\n \t 5. Масиви;");("\n \t 6. Функцiї;");("\n \t 7. Файли;");("\n \t 8. Рядки;");("\n \t 9. Структури, списки, стеки, черги, об’єднання, графiка.");("\n\n Введiть число вiд 1 до 9: ");.ats = Get(1, 9);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели № роздiлу: '%d'. <Esc> - повторний ввiд. ", newrec.ats);("\n <Enter> - номер роздiлу введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");.ats = Get(1, 9);

}

}while(j == 27);((char*)&newrec, 1, sizeof(newrec), f);++;(num, 0, 0);((int*)&kol, 1, sizeof(kol), num);(f);(num);("\n\n Запис добавлений!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

}

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}break;

}

}while(z == 1);

();

}

//-----------------------------------SEARCHINDB--------------------------------SearchInDB()

{setlocale (LC_ALL,"Russian");*f=fopen("db.txt", "r+t");*num=fopen("num.txt", "r+t");j, o;(f == NULL || num == NULL)

{();("\n Не вдається вiдкрити файл електронного довiдника!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

{record recz[100];i, kol;((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila(i=0;i<kol;i++)

{(f, sizeof(recz[i])*i, 0);((char*)&recz[i], 1, sizeof(recz[i]), f);

}();("*Пошук записiв по номеру роздiлу*");sats; //kluch dlja poiska("\n\n Введiть № роздiлу для пошуку (число вiд 1 до 9)-> ");= Get(1, 9);(1,wherey()+1);

{(1,wherey()-2);("\n Ви ввели № роздiлу: '%i'. <Esc> - повторний ввiд. ", sats);("\n <Enter> - номер роздiлу введено вiрно. ");

{= getch();

}while(j != 13 && j != 27);(j != 13)

{("\n Введiть заново ->");= Get(1, 9);

}

}while(j == 27);record srec[100];z, s = 0;(z=0;z<kol;z++)

{(recz[z].ats == sats)

{[s] = recz[z];++;

}

}(s == 0) //esli ne naideno ni odnoj zapisi

{();("\n Записiв з таким номером роздiлу не знайдено!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

{a;= 0;

{();("\n *Пошук записiв з номером роздiлу = %i*", sats);("\n Запис №%i", srec[i].num);("\n Визначення: -> %s - %s ", srec[i].surn, srec[i].name);("\n № роздiлу -> %i", srec[i].ats);(s == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska

{("\n\n Бiльше записiв не знайдено");("\n Натиснiть будь-яку клавiшу для виходу в меню");();= 101;

}(i == 0)

{("\n\n Стрiлка вниз - наступний запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 80 && a != 27);(a == 80) i++;i = 101;

}

{(i == s - 1)

{("\n\n Стрiлка вверх - попереднiй запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 27);(a == 72) i--;i = 101;

}

{(i > 0 && i < s)

{("\n\n Стрiлки вверх/вниз - перегляд записiв: попереднiй/наступний");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 80 && a != 27);(a == 80) i++;(a == 72) i--;(a == 27) i = 101;

}

}while(i != 101);(f);(num);

}

}

{= 0;o = Menu();(o)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}

}

}while(o == 1);();

}

//-------------------------------------SORTDB----------------------------------SortDB()

{setlocale (LC_ALL,"Russian");*f=fopen("db.txt", "r+t");*num=fopen("num.txt", "r+t");z;(f == NULL || num == NULL)

{();("\n Не вдається вiдкрити файл електронного довiдника");("\n Натиснiть будь-яку клавiшу для виходу в меню");();

}

{record recz[100];i, kol;((int*)&kol, 1, sizeof(kol), num);

{(f, sizeof(recz[i])*i, 0);((char*)&recz[i], 1, sizeof(recz[i]), f);

}nums[100], atss[100];(i=0;i<kol;i++) //sozdanie massiva s nomerami ats iz bazi dannih

{[i] = recz[i].ats;

}(i=0;i<kol;i++)

{[i] = recz[i].num;

}j, n, tmp, ch = 0;

//sortirovka massiva s nomerami ats i sootv. peremeschenie nomerov zapisej(i=0;i<kol;i++)

{= i;(j=i+1;j<kol;j++)

{(atss[j] < atss[n])

{= j; //n - nomer min elementa++; //ch - chislo naidennuih zapisej

}

}= atss[i];[i] = atss[n];[n] = tmp;= nums[i];[i] = nums[n];[n] = tmp;

}a, k = 0;

{= nums[k]-1;();("\n*Вiдсортований довiдник*");("\n\n Запис №%i", recz[n].num);("\n Визначення -> %s - %s ", recz[n].surn, recz[n].name);("\n № роздiлу -> %i", recz[n].ats);(ch == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska

{("\n\n Бiльше записiв не знайдено!");("\n Натиснiть будь-яку клавiшу для виходу в меню");();= 101;

}

{(k == 0)

{ ("\n\n Стрiлка вниз - наступний запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 80 && a != 27);(a == 80) k++;k = 101;

}

{(k == kol - 1)

{ ("\n\n Стрiлка вверх - попереднiй запис");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 27);(a == 72) k--;k = 101;

}

{(k > 0 && k < kol)

{("\n\n Стрiлки вверх/вниз - перегляд записiв: попереднiй/наступний");("\n <Esc> - вихiд в меню");

{= getch();

}while(a != 72 && a != 80 && a != 27);(a == 80) k++;(a == 72) k--;(a == 27) k = 101;

}

}while(k != 101);

}(f);(num);

{= 0;p = Menu();(p)

{1: ViewDB(); break;2: CreateDB(); break;3: AddToDB(); break;4: SearchInDB(); break;5: SortDB(); break;6:(Exit() == 27)

{= 1;;

}

}

}while(z == 1);();

}

//-------------------------------------GET-------------------------------------Get(int min, int max)

{setlocale (LC_ALL,"Russian");i = 0;(stdin, "%d", &i); (stdin);((i==0)||(i>max)||(i<min))

{(1,wherey());("Невiрний ввiд, повторiть спробу (%d - %d): ", min,max);(stdin, "%d", &i);(stdin);

}i;

}