Електронний довідник у С++

Розробка ефективних засобів навчання. Виявлення системи, способів, що сприяють підвищенню активності учнів. Призначення та область використання програми електронний довідник. Розробка алгоритму програми. Обґрунтування вибору мови і системи програмування.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 02.06.2014
Размер файла 161,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

getch();

}

//---------------------------------------EXIT----------------------------------

int Exit()

{

clrscr();

printf("\n\n \t\t Дiйсно вийти з програми?");

printf("\n\n <Enter> - вийти в ОС, <Esc> - продовжити роботу з програмою.");

int c;

do

{

c = getch();

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

return c;

}

//---------------------------------------MAIN----------------------------------

int main()

{setlocale (LC_ALL,"Russian");

if(ZastBeg() != 27)

{

int z;

do

{

z = 0;

int p = Menu();

switch(p)

{

case 1: ViewDB(); break;

case 2: CreateDB(); break;

case 3: AddToDB(); break;

case 4: SearchInDB(); break;

case 5: SortDB(); break;

case 6:

if(Exit() == 27)

{

z = 1;

break;

}

else break;

}

}while(z == 1);

}

else ZastEnd();

return 0;

}

//---------------------------------------VIEWDB--------------------------------

void ViewDB()

{setlocale (LC_ALL,"Russian");

FILE *f=fopen("db.txt", "r+t");

FILE *num=fopen("num.txt", "r+t");

if(f == NULL || num == NULL)

{

clrscr();

printf("\n \t Не вдається вiдкрити файл електронного довiдника!");

printf("\n \t Натиснiть будь-яку клавiшу для виходу в меню.");

getch();

}

else

{

struct record recz[100];

int i, kol;

//poluchenie kol-va zapisej

fread((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila

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

{

fseek(f, sizeof(recz[i])*i, 0);

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

}

//prosmotr zapisej iz poluchennogo massiva

int a, k = 0;

do

{

clrscr();

printf("*Перегляд довiдника*");

printf("\n\n Запис № %i", recz[k].num);

printf("\n Визначення: %s - %s ", recz[k].surn, recz[k].name);

printf("\n Номер роздiлу до якого належить визначення -> %i", recz[k].ats);

if(kol == 1) //v baze vsego 1 zapis'

{

printf("\n\n Бiльше записiв не знайдено!");

printf("\n Натиснiть будь-яку клавiшу для виходу в меню.");

getch();

k = 101;

}

else

{

if(k == 0)

{

printf("\n\n Стрiлка вниз - наступний запис");

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 80 && a != 27);

if(a == 80) k++;

else k = 101;

}

else

{

if(k == kol - 1)

{

printf("\n\n Стрiлка вверх - попереднiй запис");

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 72 && a != 27);

if(a == 72) k--;

else k = 101;

}

else

{

if(k > 0 && k < kol)

{

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

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 72 && a != 80 && a != 27);

if(a == 80) k++;

if(a == 72) k--;

if(a == 27) k = 101;

}

}while(k != 101);

}

fclose(f);

fclose(num);

int z;

do

{

z = 0;

int p = Menu();

switch(p)

{

case 1: ViewDB(); break;

case 2: CreateDB(); break;

case 3: AddToDB(); break;

case 4: SearchInDB(); break;

case 5: SortDB(); break;

case 6:

if(Exit() == 27)

{

z = 1;

break;

}

else break;

}

}while(z == 1);

ZastEnd();

}

//--------------------------------------CREATEDB-------------------------------

void CreateDB()

{setlocale (LC_ALL,"Russian");

clrscr();

printf("Ви дiйсно хочете створити новий електронний довiдник?");

printf("\n <Enter> - так, <Esc> - нi");

int d;

do

{

d = getch();

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

if(d == 13)

{

FILE *f=fopen("db.txt", "wb");

FILE *num=fopen("num.txt", "wb");

struct record rec[100];

int i, j;

for(i = 0; i < 100; i++)

{

clrscr();

setlocale (LC_ALL,"Russian");

printf("*Створення довiдника термiнiв*\n\n");

rec[i].num = i+1;

//podtverzhdenniy vvod термыну

printf("\nВведiть термiн -> ");

fscanf(stdin, "%s", &rec[i].surn);

gotoxy(1,wherey()+1);

do

{

gotoxy(1,wherey()-2);

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

printf("\n<Enter> - термiн введено вiрно. ");

do

{

j = getch();

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

if(j != 13)

{

printf("\nВведiть заново ->");

fscanf(stdin, "%s", &rec[i].surn);

fflush(stdin);

}

}while(j == 27);

//podtverzhdenniy vvod визначення

printf("\n\n Введiть визначення -> ");

fscanf(stdin, "%s", &rec[i].name);

gotoxy(1,wherey()+1);

do

{

gotoxy(1,wherey()-2);

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

printf("\n <Enter> - визначення введено вiрно. ");

do

{

j = getch();

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

if(j != 13)

{

printf("\n Введiть заново ->");

fscanf(stdin, "%s", &rec[i].name);

fflush(stdin);

}

}while(j == 27);

//podtverzhdenniy kontrolliruemiy vvod nomera ats

printf("\n\n Введiть номер роздiлу до якого належить дане визначення:(число вiд 1 до 9):");

printf("\n \t 1. Основи мови С++; ");

printf("\n \t 2. Лiнiйнi програми;");

printf("\n \t 3. Розгалуження;");

printf("\n \t 4. Цикли;");

printf("\n \t 5. Масиви;");

printf("\n \t 6. Функцiї;");

printf("\n \t 7. Файли;");

printf("\n \t 8. Рядки;");

printf("\n \t 9. Структури, списки, стеки, черги, об'єднання, графiка.");

printf("\n\n Введiть число вiд 1 до 9: ");

rec[i].ats = Get(1, 9);

gotoxy(1,wherey()+1);

do

{

gotoxy(1,wherey()-2);

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

printf("\n <Enter> - Номер роздiлу введено вiрно. ");

do

{

j = getch();

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

if(j != 13)

{

printf("\n Введiть заново ->");

rec[i].ats = Get(1, 999);

}

}while(j == 27);

fwrite((char*)&rec[i], 1, sizeof(rec[i]), f);

printf("\n\n <Enter> - продовження, <Esc> - вихiд в меню\n");

do

{

j = getch();

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

if(j == 27)

{

int kol = i + 1;

fwrite((int*)&kol, 1, sizeof(kol), num);

break;

}

}

clrscr();

fclose(f);

fclose(num);

}

int z;

do

{

z = 0;

int p = Menu();

switch(p)

{

case 1: ViewDB(); break;

case 2: CreateDB(); break;

case 3: AddToDB(); break;

case 4: SearchInDB(); break;

case 5: SortDB(); break;

case 6:

if(Exit() == 27)

{

z = 1;

break;

}

else break;

}

}while(z == 1);

ZastEnd();

}

//--------------------------------------ADDTODB--------------------------------

void AddToDB()

{setlocale (LC_ALL,"Russian");

clrscr();

printf("\n Ви дiйсно хочете добавити новий запис в електронний довiдник?");

printf("\n <Enter> - так, <Esc> - нi");

int d, z;

do

{

d = getch();

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

if(d == 13)

{

FILE *f=fopen("db.txt", "ab");

FILE *num=fopen("num.txt", "r+b");

int c;

if(num == NULL)

{

fclose(f); //

clrscr();

printf("\n Електронний довiдник не iснує!");

printf("\n <Esc> - Створення довiдника термiнiв, <Enter> - вихiд в меню");

do

{

c = getch();

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

if(c == 27) CreateDB();

}

//esli file s bazoj naiden

else

{

int kol;

fread((int*)&kol, 1, sizeof(kol), num);

if(kol == 100)

{

printf("Електронний довiдник заповнений. Додати визначення неможливо!");

printf("Натиснiть будь-яку клавiшу для виходу в меню!");

getch();

do

{

z = 0;

int p = Menu();

switch(p)

{

case 1: ViewDB(); break;

case 2: CreateDB(); break;

case 3: AddToDB(); break;

case 4: SearchInDB(); break;

case 5: SortDB(); break;

case 6:

if(Exit() == 27)

{

z = 1;

break;

}

}

}while(z == 1);

ZastEnd();

}

struct record newrec;

int j;

clrscr();

printf("*Додавання визначення в електронний довiдник*\n\n");

newrec.num = kol + 1;

//podtverzhdenniy vvod familii

printf("\n Термiн -> ");

fscanf(stdin, "%s", &newrec.surn);

gotoxy(1,wherey()+1);

do

{

gotoxy(1,wherey()-2);

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

printf("\n <Enter> - термiн введений вiрно. ");

do

{

j = getch();

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

if(j != 13)

{

printf("\n Введiть заново ->");

fscanf(stdin, "%s", &newrec.surn);

fflush(stdin);

}

}while(j == 27);

//podtverzhdenniy vvod imeni

printf("\n\n Введiть визначення -> ");

fscanf(stdin, "%s", &newrec.name);

gotoxy(1,wherey()+1);

do

{

gotoxy(1,wherey()-2);

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

printf("\n <Enter> - визначення введено вiрно. ");

do

{

j = getch();

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

if(j != 13)

{

printf("\n Введiть заново ->");

fscanf(stdin, "%s", &newrec.name);

fflush(stdin);

}

}while(j == 27);

//podtverzhdenniy kontrolliruemiy vvod nomera ats

printf("\n\n Введiть номер роздiлу до якого належить дане визначення:(число вiд 1 до 9):");

printf("\n \t 1. Основи мови С++; ");

printf("\n \t 2. Лiнiйнi програми;");

printf("\n \t 3. Розгалуження;");

printf("\n \t 4. Цикли;");

printf("\n \t 5. Масиви;");

printf("\n \t 6. Функцiї;");

printf("\n \t 7. Файли;");

printf("\n \t 8. Рядки;");

printf("\n \t 9. Структури, списки, стеки, черги, об'єднання, графiка.");

printf("\n\n Введiть число вiд 1 до 9: ");

newrec.ats = Get(1, 9);

gotoxy(1,wherey()+1);

do

{

gotoxy(1,wherey()-2);

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

printf("\n <Enter> - номер роздiлу введено вiрно. ");

do

{

j = getch();

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

if(j != 13)

{

printf("\n Введiть заново ->");

newrec.ats = Get(1, 9);

}

}while(j == 27);

fwrite((char*)&newrec, 1, sizeof(newrec), f);

kol++;

fseek(num, 0, 0);

fwrite((int*)&kol, 1, sizeof(kol), num);

fclose(f);

fclose(num);

printf("\n\n Запис добавлений!");

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

getch();

}

}

do

{

z = 0;

int p = Menu();

switch(p)

{

case 1: ViewDB(); break;

case 2: CreateDB(); break;

case 3: AddToDB(); break;

case 4: SearchInDB(); break;

case 5: SortDB(); break;

case 6:

if(Exit() == 27)

{

z = 1;

break;

}

else break;

}

}while(z == 1);

ZastEnd();

}

//-----------------------------------SEARCHINDB--------------------------------

void SearchInDB()

{setlocale (LC_ALL,"Russian");

FILE *f=fopen("db.txt", "r+t");

FILE *num=fopen("num.txt", "r+t");

int j, o;

if(f == NULL || num == NULL)

{

clrscr();

printf("\n Не вдається вiдкрити файл електронного довiдника!");

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

getch();

}

else

{

struct record recz[100];

int i, kol;

fread((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila

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

{

fseek(f, sizeof(recz[i])*i, 0);

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

}

clrscr();

printf("*Пошук записiв по номеру роздiлу*");

int sats; //kluch dlja poiska

printf("\n\n Введiть № роздiлу для пошуку (число вiд 1 до 9)-> ");

sats = Get(1, 9);

gotoxy(1,wherey()+1);

do

{

gotoxy(1,wherey()-2);

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

printf("\n <Enter> - номер роздiлу введено вiрно. ");

do

{

j = getch();

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

if(j != 13)

{

printf("\n Введiть заново ->");

sats = Get(1, 9);

}

}while(j == 27);

struct record srec[100];

int z, s = 0;

for(z=0;z<kol;z++)

{

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

{

srec[s] = recz[z];

s++;

}

}

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

{

clrscr();

printf("\n Записiв з таким номером роздiлу не знайдено!");

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

getch();

}

else

{

int a;

i = 0;

do

{

clrscr();

printf("\n *Пошук записiв з номером роздiлу = %i*", sats);

printf("\n Запис №%i", srec[i].num);

printf("\n Визначення: -> %s - %s ", srec[i].surn, srec[i].name);

printf("\n № роздiлу -> %i", srec[i].ats);

if(s == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska

{

printf("\n\n Бiльше записiв не знайдено");

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

getch();

i = 101;

}

if(i == 0)

{

printf("\n\n Стрiлка вниз - наступний запис");

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 80 && a != 27);

if(a == 80) i++;

else i = 101;

}

else

{

if(i == s - 1)

{

printf("\n\n Стрiлка вверх - попереднiй запис");

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 72 && a != 27);

if(a == 72) i--;

else i = 101;

}

else

{

if(i > 0 && i < s)

{

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

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 72 && a != 80 && a != 27);

if(a == 80) i++;

if(a == 72) i--;

if(a == 27) i = 101;

}

}while(i != 101);

fclose(f);

fclose(num);

}

}

do

{

o = 0;

int o = Menu();

switch(o)

{

case 1: ViewDB(); break;

case 2: CreateDB(); break;

case 3: AddToDB(); break;

case 4: SearchInDB(); break;

case 5: SortDB(); break;

case 6:

if(Exit() == 27)

{

o = 1;

break;

}

}

}while(o == 1);

ZastEnd();

}

//-------------------------------------SORTDB----------------------------------

void SortDB()

{setlocale (LC_ALL,"Russian");

FILE *f=fopen("db.txt", "r+t");

FILE *num=fopen("num.txt", "r+t");

int z;

if(f == NULL || num == NULL)

{

clrscr();

printf("\n Не вдається вiдкрити файл електронного довiдника");

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

getch();

}

else

{

struct record recz[100];

int i, kol;

fread((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila

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

{

fseek(f, sizeof(recz[i])*i, 0);

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

}

int nums[100], atss[100];

for(i=0;i<kol;i++) //sozdanie massiva s nomerami ats iz bazi dannih

{

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

}

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

{

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

}

int j, n, tmp, ch = 0;

//sortirovka massiva s nomerami ats i sootv. peremeschenie nomerov zapisej

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

{

n = i;

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

{

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

{

n = j; //n - nomer min elementa

ch++; //ch - chislo naidennuih zapisej

}

}

tmp = atss[i];

atss[i] = atss[n];

atss[n] = tmp;

tmp = nums[i];

nums[i] = nums[n];

nums[n] = tmp;

}

int a, k = 0;

do

{

n = nums[k]-1;

clrscr();

printf("\n*Вiдсортований довiдник*");

printf("\n\n Запис №%i", recz[n].num);

printf("\n Визначення -> %s - %s ", recz[n].surn, recz[n].name);

printf("\n № роздiлу -> %i", recz[n].ats);

if(ch == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska

{

printf("\n\n Бiльше записiв не знайдено!");

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

getch();

k = 101;

}

else

{

if(k == 0)

{

printf("\n\n Стрiлка вниз - наступний запис");

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 80 && a != 27);

if(a == 80) k++;

else k = 101;

}

else

{

if(k == kol - 1)

{

printf("\n\n Стрiлка вверх - попереднiй запис");

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 72 && a != 27);

if(a == 72) k--;

else k = 101;

}

else

{

if(k > 0 && k < kol)

{

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

printf("\n <Esc> - вихiд в меню");

do

{

a = getch();

}while(a != 72 && a != 80 && a != 27);

if(a == 80) k++;

if(a == 72) k--;

if(a == 27) k = 101;

}

}while(k != 101);

}

fclose(f);

fclose(num);

do

{

z = 0;

int p = Menu();

switch(p)

{

case 1: ViewDB(); break;

case 2: CreateDB(); break;

case 3: AddToDB(); break;

case 4: SearchInDB(); break;

case 5: SortDB(); break;

case 6:

if(Exit() == 27)

{

z = 1;

break;

}

}

}while(z == 1);

ZastEnd();

}

//-------------------------------------GET-------------------------------------

int Get(int min, int max)

{setlocale (LC_ALL,"Russian");

int i = 0;

fscanf(stdin, "%d", &i);

fflush(stdin);

while ((i==0)||(i>max)||(i<min))

{

gotoxy(1,wherey());

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

fscanf(stdin, "%d", &i);

fflush(stdin);

}

return i;

}

Размещено на Allbest.ru


Подобные документы

  • Постановка та описання алгоритму розв’язання задачі про оптимальне призначення, формулювання вимог. Обґрунтування вибору засобів програмування. Розробка структури програми та системи її візуалізації, тестування та верифікація, оцінка ефективності.

    курсовая работа [1,1 M], добавлен 12.05.2013

  • Вибір засобів створення електронної системи. Загальні відомості про електронний підручник. Технології розробки та структурна організація проекту. Метод підготовки тестування при розробці курсу дистанційного навчання. Етапи написання тестової програми.

    курсовая работа [51,9 K], добавлен 20.02.2012

  • Дослідження середовища візуального програмування Delphi. Вивчення процесу створення навчальної програми "Електронний словник". Опис графічного інтерфейсу. Характеристика структури та основних процедур даної програми. Аналіз роботи з програмним кодом.

    курсовая работа [831,2 K], добавлен 01.03.2014

  • Розробка веб-сайту "Електронний довідник запчастин автомобілів". Структура веб-сайту, бази даних. Модулі для читання інформації та коректного її відображення на сторінках порталу. Клієнтська частина сайту, реєстрація користувачів, система адміністрування.

    дипломная работа [2,3 M], добавлен 19.08.2012

  • Вибір середовища програмування Borland Delphi 7.0 для створення електронно-медичного довідника. Формування бази даних для перегляду та пошуку медичних препаратів для лікування. Особливості програмування інтерфейсу програми, інструкція користувача.

    курсовая работа [2,2 M], добавлен 19.09.2012

  • Призначення менеджеру пристроїв. Обґрунтування вибору мови програмування. Розробка структурної схеми і опис діалогового інтерфейсу програми. Блок-схема програмного додатку, основні функції і алгоритм його роботи. Методики і інструкція його тестування.

    курсовая работа [3,4 M], добавлен 17.11.2014

  • Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.

    курсовая работа [991,4 K], добавлен 06.08.2013

  • Дослідження можливостей розробки електронних навчальних матеріалів за допомогою різних програмних засобів залежно від їх дидактичного призначення та особливостей функціонування. Розгляд програми для контролю навчальних досягнень учнів з англійської мови.

    статья [117,2 K], добавлен 24.04.2018

  • Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.

    курсовая работа [1,3 M], добавлен 23.06.2010

  • Теоретичні відомості про язик С++. Розробка програми, що виконує основні арифметичні дії над простими та складними числами на язику С++. Опис алгоритму програми та її код. Інструкція по користуванню. Обгрунтовування вибору та складу технічних засобів.

    курсовая работа [852,8 K], добавлен 30.11.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.