Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по курсовой работе. Головнева.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
757.25 Кб
Скачать

Заключение

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

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

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

Список использованных источников

1 Егорова Е.В. Программирование на языке высокого уровня: Учебное пособие / Алт. госуд. технич. ун-т им. И.И. Ползунова. – Барнаул: 2009. – 166 с.

2 Шилдт Г. Полный справочник по С. - М.: Вильямс, 2002. - 704 с.

3 Поляков К. Программирование на языке Си [Электронный ресурс] / - Режим доступа http://kpolyakov.narod.ru, свободный.

Приложение а Текст программы

#include<stdio.h>

#include<string.h>

#include<windows.h>

#include<stdlib.h>

#include<conio.h>

#include<time.h>

void Rus (char *str) // пп для пчати русского текста на экран

{

char message[200];

CharToOem(str,message);

printf ("%s",message);

}

void zagolovok(); //пп печати заголовка на экран

int menu(); //пп выбора меню работы

int prosmotr (); //подпрограмма для печати словаря на экран

int poisk(); // поиск перевода определенного слова

int rabota_slovar(); // пп выбора режима работы со словарем

int kolvo_strok(char name[]); // пп подсчета количества строк в файле

int trenazer(int flk); // пп режима тренажер пользовательского меню

int korr_temi(); // пп для корректировки заданной темы

int kolvo_tem(); // пп подсчета количества тем

void generator_input(); // пп генерирования из тем монолитного файла

int ud_temi(); // пп удаления темы

int kolic_tem; //глобальная переменная, отвечает за количество тем

const int dobav = 5; // константа - добавления

void generator_rus(); // пп для генерирования русско-английского словаря

int vibor_polz_rezima (); //пп выбора пользовательского режима

int parol(); //пп ввода пароля для доступа к режиму администратора

int vibor_adm(); //пп выбора режима работы администратора

int sozd_temi(); // пп создания новой темы

int administrator(); // пп режима администратора

int naxodka_stroki (int nomer,char str[100]); // находит строку с № nomer, считает, что "!\n" не является строкой

void zagolovok() //пп печати заголовка на экран

{

printf ("***********************************************************************");

printf ("\n");

Rus ("* Обучающая и тестирующая система <Лексика английского языка> *");

printf ("\n");

printf ("***********************************************************************");

printf ("\n\n");

}

int menu()//пп выбора меню работы

{

system("cls");

zagolovok();

Rus ("Выберете режим работы:\n");

Rus ("1 <- Режим <Администратор>\n2 <- Режим <Пользователь>\n3 <- Выход из системы\n");

int vibor;

int pro;

do {

Rus ("Ваш выбор - ");

fflush(stdin);

pro = scanf ("%d",&vibor);

if (!pro || vibor<1 || vibor>3) Rus ("Неверный ввод. Повторите...\n");

} while (!pro || vibor<1 || vibor>3);

return vibor;

}

int vibor_polz_rezima () //пп выбора пользовательского режима

{

int rezim1;

int f;

printf ("\n\n");

Rus ("Выберете режим работы:\n1 <- Работа со словарем\n2 <- Тренажер\n3 <- Тест\n4 <- Возврат в главное меню\n");

do {

Rus ("Ваш выбор - ");

f = scanf ("%d",&rezim1);

fflush(stdin);

if (!f || rezim1 < 1 || rezim1 > 4) Rus ("Неверный ввод. Повторите\n");

} while (!f || rezim1 < 1 || rezim1 > 4);

return rezim1;

}

int parol() //пп ввода пароля для доступа к режиму администратора

{

char *key;

key="golovneva";

Rus ("\nДля доступа к режиму введите пароль: ");

char vvod[10];

int i, j=0;

int tem[3];

do{

i=0;

do {

ex: fflush(stdin);

vvod[i]=getch();

if (vvod[i] == 13) {vvod[i] = '\0'; break;} //если ввели Enter

if (vvod[i] == 8) // если ввели backspace

{

if (i == 0) goto ex;

system("cls");

zagolovok();

Rus ("\nДля доступа к режиму введите пароль: ");

int jk;

if (j == 1)

{ for (jk = 0 ; jk<tem[0] ; jk++)

printf ("*");

Rus ("\nВы ввели неверный пароль! Повторите... ");

}

if (j == 2)

{

for (jk = 0 ; jk<tem[0] ; jk++)

printf ("*");

Rus ("\nВы ввели неверный пароль! Повторите... ");

for (jk = 0 ; jk<tem[1] ; jk++)

printf ("*");

Rus ("\nВы ввели неверный пароль! Повторите... ");

}

i--;

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

printf ("*");

}

else {

i++;

printf ("*");

}

} while (1);

tem[j]=i;

if (stricmp(key,vvod) != NULL)

{

if (j == 2) return 0;

Rus ("\nВы ввели неверный пароль! Повторите... ");

j++;

}

else return 1;

} while (j>0 && j<3);

}

int vibor_adm() //пп выбора режима работы администратора

{

system("cls");

zagolovok();

int rezim1;

int f;

Rus ("Выберете режим работы:\n1 <- Создание новой темы\n2 <- Корректировка уже сущесвующей темы\n3 <- Удаление темы\n4 <- Возврат в главное меню\n");

do {

Rus ("Ваш выбор - ");

f = scanf ("%d",&rezim1);

fflush(stdin);

if (!f || rezim1 < 1 || rezim1 > 4) Rus ("Неверный ввод. Повторите\n");

} while (!f || rezim1 < 1 || rezim1 > 4);

return rezim1;

}

int sozd_temi() // пп создания новой темы

{

Rus ("Если желаете вернуться в предыдущее меню, нажмите 'Esc', иначе любую клавишу...\n\n");

if (getch() == 27) return 5;

FILE *ved;

char name[10]; // имя темы в формате t_.txt

name[0]='t';

name[2]='.';

name[3] = 't';

name[4] = 'x';

name[5] = 't';

name[6] = '\0';

char zn;

int i,fl=0;

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

{

zn = i;

zn=zn + '0';

name[1] = zn;

ved = fopen(name,"r");

if (ved == NULL) {fl = 1; break;}

}

fclose(ved);

if (fl) name[1] = zn;

else {

zn = kolic_tem++;

zn=zn + '0';

name[1] = zn;

}

ved = fopen(name,"w");

Rus ("Введите название темы для файла "); printf ("%s",name);

Rus (" в формате: \nСлово на английском языке - соответствующее слово на русском языке\n");

int prov;

char new_tem[100];

char *s;

do{

fflush(stdin);

gets(new_tem);

s = strchr(new_tem,'-');

if (s == NULL) Rus("При вводе Вы пропустили символ '-'; повторите ввод...\n");

} while (s == NULL);

prov = fputs(new_tem,ved);

int f;

do {

f=0;

Rus("\nЕсли желаете ввести новое слово нажмите 'ENTER'");

if (getch() == 13)

{

Rus ("\nВведите строку в формате: \nСлово на английском языке - соответствующее слово на русском языке\n");

do{

fflush(stdin);

gets(new_tem);

s = strchr(new_tem,'-');

if (s == NULL) Rus("При вводе Вы пропустили символ '-'; повторите ввод...\n");

} while (s == NULL);

fputc('\n',ved);

prov = fputs(new_tem,ved);

f=1;

}

} while (f);

if (prov != EOF) Rus ("\n\n * Файл успешно создан\n");

fclose(ved);

return 0;

}

int administrator() // пп режима администратора

{

do{

int rezim;

rezim = vibor_adm();

int y;

switch(rezim)

{

case 1:

{

system("cls");

zagolovok();

Rus (" Вы работаете в режиме Администратора\n");

Rus (" Создание новой темы\n\n");

y = sozd_temi();

break;

}

case 2:

{

system("cls");

zagolovok();

Rus (" Вы работаете в режиме Администратора\n");

Rus(" Корректировка уже сущесвующей темы\n\n");

y = korr_temi();

break;

}

case 3:

{

system("cls");

zagolovok();

Rus (" Вы работаете в режиме Администратора\n");

Rus(" Удаление темы\n\n");

y = ud_temi();

break;

}

case 4:

{

generator_input();

return 0;

}

}

if (rezim != 4 && y != 5) {Rus("Нажмите любую клавишу для возврата в главное меню администратора..."); getch();}

generator_input();

} while (1);

}

int ud_temi() // пп удаления темы

{

Rus ("Если желаете вернуться в предыдущее меню, нажмите 'Esc', иначе любую клавишу...\n\n");

if (getch() == 27) return 5;

FILE *ved;

char name[7];

name[0]='t';

name[2]='.';

name[3] = 't';

name[4] = 'x';

name[5] = 't';

name[6] = '\0';

char stroka[100];

int i;

int j=0;

char mas_str[kolic_tem+dobav];

for (i=0 ; i<kolic_tem+dobav ; i++)

{

char zn=i;

zn=zn + '0';

name[1] = zn;

ved = fopen(name,"r");

if (ved != NULL)

{

fgets (stroka,100,ved);

printf ("%c <- ",zn+1);

printf("%s",stroka);

int len = strlen(stroka);

if (stroka[len-1] != '\n')

printf("\n");

mas_str[j] = zn+1; j++; // в массиве mas_str номера тем, которые печатаются

}

fclose(ved);

}

int f,asd=0;

int nom_temi;

do {

Rus("\nВведите номер темы для удаления: ");

f = scanf ("%d",&nom_temi);

fflush(stdin);

for (int gh = 0; gh<j ; gh++)

if (nom_temi+'0' == mas_str[gh]) asd=1;

if (!f || !asd) Rus ("Неверный ввод. Повторите");

} while (!f || !asd);

nom_temi--;

char zn = nom_temi;

zn = zn+'0';

name[1] = zn;

remove(name);

Rus ("\n * Тема успешно удалена\n");

kolic_tem--;

return 0;

}

int kolvo_tem() // пп подсчета количества тем

{

FILE *ved;

char name[10];

name[0]='t';

name[2]='.';

name[3] = 't';

name[4] = 'x';

name[5] = 't';

name[6] = '\0';

int flag = 0;

int i;

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

{

char zn = i;

zn=zn + '0';

name[1] = zn;

ved = fopen(name,"r");

if (ved != NULL) flag++;

fclose(ved);

}

return flag;

}

int korr_temi() // пп для корректировки заданной темы

{

Rus ("Если желаете вернуться в предыдущее меню, нажмите 'Esc', иначе любую клавишу...\n\n");

if (getch() == 27) return 5;

FILE *ved;

char name[10];

name[0]='t';

name[2]='.';

name[3] = 't';

name[4] = 'x';

name[5] = 't';

name[6] = '\0';

char stroka[100];

char *s;

int i;

int j=0;

char mas_str[kolic_tem+dobav];

for (i=0 ; i<kolic_tem+dobav ; i++)

{

char zn=i;

zn=zn + '0';

name[1] = zn;

ved = fopen(name,"r+");

if (ved != NULL)

{

fgets (stroka,100,ved);

printf ("%c <- ",zn+1);

printf("%s",stroka);

int len = strlen(stroka);

if (stroka[len-1] != '\n')

printf("\n");

mas_str[j] = zn+1; j++; // в массиве mas_str номера тем, которые печатаются

}

fclose(ved);

}

int f,asd=0;

int nom_temi;

do {

Rus("\nВведите номер темы для корректировки: ");

f = scanf ("%d",&nom_temi);

fflush(stdin);

for (int gh = 0; gh<j ; gh++)

if (nom_temi+'0' == mas_str[gh]) {asd=1; break;}

if (!f || !asd) Rus ("Неверный ввод. Повторите");

} while (!f || !asd);

nom_temi--;

char zn = nom_temi;

zn = zn+'0';

name[1] = zn;

ved = fopen(name,"r");

Rus("\n\nСодержимое файла "); printf ("%s",name); //печать файла на экран

printf ("\n");

i=1;

while (!feof(ved))

{

fgets (stroka,100,ved);

printf ("%d) %s",i,stroka);

i++;

}

fclose(ved);

printf ("\n\n");

Rus ("1 <- Запись новой строки\n2 <- Корректировка отдельной строки\n3 <- Удаление отдельной строки\n4 <- Возврат в меню\n");

int rezim22;

do {

Rus("Ваш выбор: ");

f = scanf ("%d",&rezim22);

fflush(stdin);

if (!f || rezim22 < 1 || rezim22 > 4) Rus ("Неверный ввод. Повторите\n");

} while (!f || rezim22 < 1 || rezim22 > 4);

switch(rezim22)

{

case 1: // запись строки в конец файла

{

Rus ("\nВведите строку в формате: \nСлово на английском языке - соответствующее слово на русском языке\n");

char nov_str[100];

do{

fflush(stdin);

gets(nov_str);

s = strchr(nov_str,'-');

if (s == NULL) Rus("При вводе Вы пропустили символ '-'; повторите ввод...\n");

} while (s == NULL);

ved = fopen(name,"a+");

fprintf(ved,"\n%s",nov_str);

fclose(ved);

Rus ("\n * Строка успешно добавлена\n");

break;

}

case 2: // корректировка отдельного поля

{

Rus ("\n\nВведите номер строки для корректировки: ");

int nom_dl_kor;

int lll;

do {

f = scanf ("%d",&nom_dl_kor);

fflush(stdin);

lll = kolvo_strok(name);

if (!f || nom_dl_kor < 1 || nom_dl_kor > lll) Rus ("Неверный ввод. Повторите\n");

} while (!f || nom_dl_kor < 1 || nom_dl_kor > lll);

nom_dl_kor--;

char new_str[100];

Rus ("\nВведите строку в формате: \nСлово на английском языке - соответствующее слово на русском языке\n");

do{

fflush(stdin);

gets(new_str);

s = strchr(new_str,'-');

if (s == NULL) Rus("При вводе Вы пропустили символ '-'; повторите ввод...\n");

} while (s == NULL);

FILE *ved1;

ved1 = fopen("temp.txt","w");

ved = fopen (name,"r");

int ii=0;

int f1;

char str12[100];

while (fgets(str12,100,ved) != NULL)

{

if (ii != nom_dl_kor) fputs(str12,ved1);

else { f1 = fputs(new_str,ved1);

if (ii != lll-1) fputs("\n",ved1);}

ii++;

}

fclose(ved);

fclose(ved1);

ved = fopen(name,"w");

ved1 = fopen("temp.txt","r");

while (fgets(str12,100,ved1) != NULL)

fputs(str12,ved);

fclose(ved);

fclose(ved1);

remove("temp.txt");

if (f1 != EOF)Rus ("\n * Строка успешно заменена\n");

else Rus ("\n * Ошибка!\n");

break;

}

case 3:

{ //удаление отдельной строки списка

Rus ("\n\nВведите номер строки для удаления: ");

int nom_dl_udal;

int lll;

do {

f = scanf ("%d",&nom_dl_udal);

fflush(stdin);

lll = kolvo_strok(name);

if (!f || nom_dl_udal < 1 || nom_dl_udal > lll) Rus ("Неверный ввод. Повторите\n");

} while (!f || nom_dl_udal < 1 || nom_dl_udal > lll);

nom_dl_udal--;

FILE *ved1;

ved = fopen(name,"r");

ved1 = fopen("temp.txt","w");

int iii=0;

int f11;

char str45[100];

fflush(stdin);

while (fgets(str45,100,ved) != NULL)

{

if (iii!=nom_dl_udal)

{

int kk=0;

int len;

len = strlen(str45);

if (iii == lll-2 && nom_dl_udal == lll-1)

{while (kk != len-1)

{fflush(stdin); fputc(str45[kk],ved1); kk++;}

fputs("\0",ved1);

}

if (nom_dl_udal < lll-1 && iii == lll-1)

{while (kk != len-1)

{fflush(stdin); fputc(str45[kk],ved1); kk++;}

fputs("\0",ved1);

}

fflush(stdin);

if (kk == 0) f11 = fputs(str45,ved1);

}

iii++;

}

if (f11 != EOF) Rus("\n * Строка успешно удалена\n");

fclose(ved);

fclose(ved1);

ved = fopen(name,"w");

ved1 = fopen("temp.txt","r");

fflush(stdin);

while (fgets(str45,100,ved1) != NULL)

fputs(str45,ved);

fclose(ved);

fclose(ved1);

remove("temp.txt");

break;

}

default: {return 5; break;}

}

ved = fopen(name,"r");

long poz,poz2;

int del=0;

poz = ftell(ved);

fseek(ved,0L,2);

poz2 = ftell(ved);

if (poz2-poz == 0) del = 1;

fclose (ved);

if (del) remove(name);

printf ("\n");

return 0;

}

void generator_input() // пп генерирования из тем монолитного файла

{

FILE *ved;

FILE *ved1;

char name[10];

name[0]='t';

name[2]='.';

name[3] = 't';

name[4] = 'x';

name[5] = 't';

name[6] = '\0';

char stroka[100];

ved1 = fopen("eng-rus.txt","w+");

int i;

int f[2];

for (i=0 ; i<kolic_tem+dobav ; i++)

{

char zn = i;

zn=zn + '0';

name[1] = zn;

ved = fopen(name,"r");

if (ved != NULL)

{

while (f[0] = fgets(stroka,100,ved) != NULL)

f[1] = fputs(stroka,ved1);

fputs("\n!\n",ved1);

}

fclose(ved);

}

fclose(ved1);

}

int main()

{

//вызов главного меню

kolic_tem = kolvo_tem();

generator_input();

int rezim;

int rezim_polz;

do {

rezim = menu();

switch (rezim)

{

case 1: { //режим администратора

system("cls");

zagolovok();

int key;

key = parol();

if (key == 1) administrator();

else { Rus ("\n\nУвы, у Вас нет доступа для работы в данном режиме\n");

system("pause"); }

break;

}

case 2: { //режим пользователя

do {

system("cls");

zagolovok();

Rus ("Вы работаете в режиме Пользователя");

rezim_polz = vibor_polz_rezima();

switch (rezim_polz)

{

case 1: {

rabota_slovar();

break;

}

case 2: {

trenazer(1);

break;

}

case 3: {

trenazer(2);

break;

}

}

} while (rezim_polz != 4);

break;

}

case 3: { //выход из системы

system("cls");

zagolovok();

Rus ("Вы действительно хотите выйти? Нажмите ENTER для подтверждения...");

if (getch() == 13)

{

system("cls");

zagolovok();

Rus ("Спасибо за внимание!");

return 0;

}

break;

}

}

if (rezim_polz == 2) {Rus ("\n\nНажмите любую клавишу для возрата в главное меню..."); getch();}

} while (1);

}

int kolvo_strok(char name[]) // пп подсчета количества строк в файле

{

FILE *slovar;

slovar = fopen(name,"r");

if (slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}

char stroka[100];

char *uk;

int flag=0;

fgets(stroka,100,slovar);

do {

uk = strchr (stroka, '-');

if (uk != NULL) flag++;

} while (fgets(stroka,100,slovar));

fclose(slovar);

return flag;

}

int trenazer(int flk) // пп режима тренажер пользовательского меню

{

clock_t a,b; //для подсчета времени тетирования

a = clock();

system("cls");

zagolovok();

if (flk == 1) Rus ("Вы работаете в режиме <Тренажер>");

else Rus ("Вы работаете в режиме <Тест>");

Rus ("\nПожалуйста, введите количество проверяемых слов: ");

int pro;

int kolvo_slov;

int kolvo1 = kolvo_strok("eng-rus.txt"); //kolvo1 = количество строк в текстовике

do {

fflush(stdin);

pro = scanf("%d",&kolvo_slov);

if (!pro || kolvo_slov < 0 ) Rus ("Неверный ввод. Повторите\n");

else if (kolvo_slov > kolvo1) Rus("Вы ввели слишком много. Повторите\n");

} while(!pro || kolvo_slov < 0 || kolvo_slov > kolvo1);

//ввели количество слов для тестирования

int bnm;

int pravilno=0; //правильных ответов

int neverno=0; //неправильных ответов

printf("________________________________________________________________");

for (bnm=0 ; bnm<kolvo_slov ; bnm++ ) //повтор kolvo_slov раз

{

int dl_perevoda;

dl_perevoda = rand()%kolvo1; //случайное слово для проверки от 0 до kolvo1

char str[100];

char str1[100];

naxodka_stroki (dl_perevoda,str1);

// в итоге у нас в str нужная строка

int i;

int ff=1;

Rus("\n\nСлово для перевода: ");

for (i=0 ; ff ; i++ )

{

if (str1[i] != '-') printf("%c",str1[i]);//печать исходника для перевода

else ff=0;

}

int ii,jj=0;

char str2[100]; //здесь конец str

for (ii=i+1 ; str1[ii]!='\n'; ii++)

{str2[jj] = str1[ii]; jj++;}

str2[jj]='\0';

Rus ("\n\nВарианты ответов:\n");

const int kolvo_var_otv = 6; //константа - количество вариантов ответов

int mesto = rand()%kolvo_var_otv; // место правильного ответа в списке

int mmest[kolvo_var_otv]; //массив содержит номера печатаемых строчек

mmest[0] = dl_perevoda;

i=1;

char strr[100];

for (int j=0 ; j<kolvo_var_otv ; j++) //печать вариантов ответов

{

printf ("%d <- ",j+1);

int k;

if (j == mesto) printf("%s",str2);

else {

int flagok;

int neww; // номер печатаемой строчки

do {

flagok=1;

neww = rand()%kolvo1;

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

if (mmest[k] == neww) {flagok=0; break;}

} while (!flagok);

naxodka_stroki(neww,str);

for (k=0 ; str[k] != '-' ; k++);

k=k+2;

int chr=0;

for (int jk=k ; str[jk] != '\n' ; jk++)

{strr[chr] = str[jk];chr++;}

strr[chr] = '\0'; //в этом массиве печатаемый вариант

mmest[i]=neww;

i++;

printf ("%s",strr);

}

printf ("\n");

}

//напечатан список ответов

int flag=0;

do {

Rus ("\n * По вашему мнению, правильный ответ - ");

int otv;

int prov;

do{

prov = scanf ("%d",&otv);

fflush(stdin);

if (!prov || otv<0 || otv>kolvo_var_otv) Rus ("Такого варианта ответа не существует. Повторите ввод...\n");

} while (!prov || otv<0 || otv>kolvo_var_otv);

if (otv-1 == mesto) {

if (flk == 1)Rus ("Правильно");

pravilno++;

flag=0;

}

else {

if (flk == 1)

{if (flag == 2 ) Rus ("Неверно...");

else Rus ("Неверно, попробуйте еще раз!...");

flag++;

}

else neverno++;

}

} while (flag>0 && flag<3 && flk == 1);

if (flag == 3) {neverno++; Rus(" * Правильный ответ - "); printf ("%d",mesto+1);}

if (flk == 1) printf ("\n\n *** *** ***");

}

printf("\n_____________________________________________________________________________");

Rus ("\nРезультаты тестирования:\nБыло дано слов - ");

printf ("%d",kolvo_slov);

Rus ("\nСреди них правильных - ");printf ("%d",pravilno);

Rus (", и неправильных - ");printf ("%d",neverno);

printf ("\n");

b = clock();

int t;

t = (b-a)/CLOCKS_PER_SEC;

int sec,min;

sec = t%60;

min = t/60;

Rus ("Тест был пройден за ");printf ("%d",min); Rus(" минут(ы) и "); printf ("%d",sec); Rus(" секунд(ы)");

printf ("\n\n");

system("pause");

}

int naxodka_stroki (int nomer,char str[100]) // находит строку с № nomer, считает, что "!\n" не является строкой

{

FILE *slovar;

slovar = fopen("eng-rus.txt","r");

char *s;

int f1=0;

do {

fgets(str,100,slovar);

s = strchr(str,'-');

if (s != NULL) f1++;

} while (f1-1 < nomer);

}

int rabota_slovar() // пп выбора режима работы со словарем

{

int rezim11;

do {

system("cls");

zagolovok();

Rus ("Вы работаете в режиме пользователя. Работа со славарем\n\n");

int f=1;

Rus("Выберете режим работы: \n1 <- Просмотр словаря\n2 <- Поиск перевода для определенного слова\n3 <- Возврат в пользовательское меню\n");

do {

Rus ("Ваш выбор - ");

f = scanf ("%d",&rezim11);

fflush(stdin);

if (!f || rezim11 < 1 || rezim11 > 3) Rus ("Неверный ввод. Повторите\n");

} while (!f || rezim11 < 1 || rezim11 > 3);

printf ("\n\n");

switch (rezim11)

{

case 1: {

prosmotr ();

break;

}

case 2: {

poisk();

break;

}

}

if (rezim11 != 3) {Rus ("\n\nНажмите любую клавишу для возврата в подменю ..."); getch();}

} while (rezim11 != 3);

}

int poisk() // поиск перевода определенного слова

{

generator_rus();

do{

system("cls");

zagolovok();

FILE *slovar;

const int n=100;

char vvod[n];

Rus ("Работа со словарем \n1 <- англо-русский\n2 <- русско-английский\n");

int vvib;

int f;

do {

Rus ("Ваш выбор - ");

f = scanf ("%d",&vvib);

fflush(stdin);

if (!f || vvib < 1 || vvib > 2) Rus ("Неверный ввод. Повторите\n");

} while (!f || vvib < 1 || vvib > 2);

if (vvib == 1)

{

slovar = fopen("eng-rus.txt","r");

if (slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}

do {

Rus ("\nВведите слово для перевода(на английском): ");

fflush (stdin);

gets(vvod);

if (vvod[0]<'a' && vvod[0]>'z') Rus ("Неверный ввод. Повторите\n");

} while (vvod[0]<'a' && vvod[0]>'z');

}

else

{

slovar = fopen("rus-eng.txt","r");

if (slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}

do {

Rus ("\nВведите слово для перевода(на русском): ");

fflush (stdin);

gets(vvod);

if (vvod[0]<'а' && vvod[0]>'я') Rus ("Неверный ввод. Повторите\n");

} while (vvod[0]<'а' && vvod[0]>'я');

}

int fq=1;

char s1[n];

char s[n];

printf ("\n");

printf("%s",vvod);

printf (" - ");

while (fgets(s,n,slovar) != NULL && fq)

{

int i=0;

while (s[i] != '-')

{s1[i] = s[i];

i++;}

i--;

s1[i] = '\0';

if ( strcmp(vvod,s1) == NULL )

{

int j;

char s2[n];

int k=0;

for (j=i+3 ; s[j] != '\n' ; j++)

{s2[k] = s[j]; k++;}

s2[k] = '\0';

fq=0;

printf("%s",s2);

}

}

if (fq) Rus("К сожалению, такого слова не найдено\n");

Rus ("\nЕсли желаете перевести еще одно слово, нажмите 'ENTER'\n\n");

fclose(slovar);

} while (getch() == 13);

}

int prosmotr () //подпрограмма для печати словаря на экран

{

system ("cls");

zagolovok();

Rus("Организуем просмотр словаря");

printf ("\n\n");

Rus ("Просмотр словаря 1 <- целиком, или 2 <- по темам\n");

int vvib;

int f;

do {

Rus ("Ваш выбор - ");

f = scanf ("%d",&vvib);

fflush(stdin);

if (!f || vvib < 1 || vvib > 2) Rus ("Неверный ввод. Повторите\n");

} while (!f || vvib < 1 || vvib > 2);

FILE *slovar;

slovar = fopen("eng-rus.txt","r");

if (slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}

const int n=100;

char s[n];

char *fl;

switch (vvib)

{

case 1: // целиком

{

printf ("\n*** *** ***\n\n");

fl = fgets(s,n,slovar);//ссчитали 1 строку в s

do

{

int fq=1;

while (fl != NULL && strcmp(s,"!\n") != NULL)

{

if (fq) {Rus ("Тема: "); printf ("%s\n",s); fq=0;}

else printf ("%s",s);

fl = fgets(s,n,slovar);

}

printf ("\n\n");

} while ( (fl = fgets(s,n,slovar)) != NULL);

break;

}

case 2: //по темам

{

Rus ("Темы на выбор:\n\n");

int uk_tem[15];

int j=0;

uk_tem[0] = 0;

int chch=1; // просто счетчик

char *s;

char str[100];

int kolstr = kolvo_strok("eng-rus.txt");

do {

fgets(str,100,slovar);

s = strchr(str,'!');

if (s == NULL) j++; //если строка не содержит "!", то считываем следующую, если есть "!", то j++ и сей номер - номер строки темы

else { j++;uk_tem[chch] = j-chch; chch++;}

} while (j < kolstr+chch-1);

// в итоге в массиве uk_tem хранятся номера строк, содержащие темы, распечатаем их

for (j=0 ; j<chch ; j++)

{

printf ("%d <- ",j+1);

naxodka_stroki (uk_tem[j],str);

printf ("%s",str);

}

do {

Rus ("\nВаш выбор - ");

f = scanf ("%d",&vvib);

fflush(stdin);

if (!f || vvib < 1 || vvib > chch) Rus ("Неверный ввод. Повторите\n");

} while (!f || vvib < 1 || vvib > chch);

Rus ("\n*** *** ***\nПечать выбранной темы: ");

rewind(slovar);

int fj=0;

do {

fgets(str,100,slovar);

s = strchr(str,'-');

if (s != NULL) fj++;

} while (fj-1 < uk_tem[vvib-1]);

printf ("%s",str);

printf ("\n");

fl = fgets(str,n,slovar);

s = strchr(str,'!');

do {

printf ("%s",str);

fl = fgets(str,n,slovar);

s = strchr(str,'!');

}

while (fl != NULL && s == NULL);

break;

}

} // закрыли switch

fclose(slovar);

}

void generator_rus() // пп для генерирования русско-английского словаря

{

FILE *ved;

FILE *ved1;

ved = fopen("eng-rus.txt","r");

ved1 = fopen("rus-eng.txt","w");

char stroka[100];

int i,j;

while (!feof(ved))

{

fgets(stroka,100,ved);

if (!feof(ved))

{

if (strcmp(stroka,"!\n") == NULL) fputs(stroka,ved1);

else

{

for (i=0 ; stroka[i] != '-' ; i++);

for (j = i+2 ; stroka[j]!='\0'; j++)

if (stroka[j]!= '\n') fputc(stroka[j],ved1);

fputs(" - ",ved1);

for (i=0 ; stroka[i+1]!= '-'; i++)

fputc(stroka[i],ved1);

if (!feof(ved)) fputc('\n',ved1);

}

}

}

fclose(ved);

fclose(ved1);

}