Разработка программного обеспечения для обучающей и тестирующей системы "Лексика английского языка"

 














Пояснительная записка к курсовой работе

по дисциплине «Основы программирования»

Разработка программного обеспечения для обучающей и тестирующей системы «Лексика английского языка»


Введение


В современном обществе для продуктивного обучения и успешной карьеры просто необходимо знание иностранных языков, в первую очередь - английского. Но мало кто владеет им в совершенстве, поэтому каждому из нас рано или поздно приходит в голову идея более детального изучения языка. И в чем же состоит его изучение?.. Конечно, нужно читать книги на английском, разговаривать на нем, учить грамматику, но и самое главное - учить новые слова. Для многих этот пункт вырастает в настоящую проблему. Несомненно придумано множество путей ее решения - и всевозможные карточки, и электронные словари, и метод графического изображения слов... Но, согласитесь, когда нас кто-то или что-то контролирует, мы относимся к себе более строже. Предложенная мною обучающе-тестирующая система поможет Вам решить эту проблему. Программа предлагает широкий спектр возможностей. Работа в двух режимах - администратора и пользователя; возможность работы со словарем: его просмотр целиком или по темам, поиск перевода определенного слова, причем как в направлении английский - русский, так и обратное; режимы тестирования: обучающий, который указывает правильные ответы, и режим самоконтроля. В режиме администратора - возможность редактирование словаря.

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

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


1. Постановка задачи


Разработать программное обеспечение для обучающей и тестирующей системы «Лексика английского языка»

В режиме "Администратора" идет работа с набором файлов, каждый и которых представляет собой обособленную тему. Таким образом каждый файл содержит список строк вида: слово на английском языке - его перевод на русском.

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

Функции системы:

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

создание новой темы

корректировка уже существующей темы (запись новой строки, корректировка строки, удаление строки)

удаление темы

просмотр списка слов по темам либо в едином режиме

поиск определенного слова

тестирование (с сообщением итоговой информации о тесте)

тренажер (с сообщением итоговой и промежуточной информации)


2. Решение задачи


2.1 Алгоритм решения


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


.2 Структура данных


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


3. Описание программного обеспечения


.1 Общий подход к программной реализации


Программа написана на языке Си. Этот язык выбран по причине своей гибкости, понятности и удобства.

Данная программа работает в консольном текстовом режиме. Программа имеет модульную структуру (всего 18 подпрограмм). Набор подпрограмм для режима администратора используется совокупность файлов-тем, для режима пользователя - 1 общий файл, в которой уже записаны все темы. Большая часть данных объявлена через локальные переменные, через глобальные объявлены переменная, отвечающая за количество используемых тем, и вторая - константа, отвечающая за приращение аргумента.


.1.1 Данный программный продукт предусматривает наличие следующих файлов: VocabularyOfEnglish.exe, eng-rus.txt, rus-eng.txt (при отсутствии создается автоматически) и набор файлов тем вида: t0.txt.


.1.2 Объем разработанного программного обеспечения: VocabularyOfEnglish.exe - 763 Кб, eng-rus.txt, rus-eng.txt по 3 Кб, и 4 стартовые темы, в сумме 3 Кб. Всего - 772 Кб


.1.3 Общие требования к компьютеру и системному программному обеспечению:

Microsoft Windows 2000/XP/Vista

Процессор Pentium II 266MHz или выше

RAM10 Мб

Жесткий диск2 Мб свободного пространства

3.2 Укрупненный алгоритм программы


На рисунке 1 представлен укрупненный алгоритм программы. Причем каждый из этапов (модулей) программы подразумевает помимо основных функций еще защиту от некорректного ввода.



3.3 Модульная структура программы


В программном продукте реализована следующая иерархия модулей (Рисунок 2).



.4 Состав программы

() - главная подпрограмма, реализующая связь и взаимодействие остальных подпрограмм.

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

1.Подпрограммы, реализующие диалог с пользователем (выбор пунктов меню):

oint menu(); - подпрограмма выбора главного меню работы;

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

oint administrator(); - подпрограмма управления режимом администратора;

oint vibor_adm(); - подпрограмма выбора режима работы администратора;

oint rabota_slovar(); - подпрограмма выбора режима работы со словарем;

2.Подпрограммы, отвечающие за реализацию основных модулей раздела "Администратор":

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

oint ud_temi(); - подпрограмма для удаления темы;

oint sozd_temi(); - подпрограмма для создания новой темы;

3.Подпрограммы, отвечающие за реализацию основных модулей раздела "Пользователь":

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

oint poisk(); - подпрограмма для поиск перевода определенного слова;

oint trenazer(int flk); - подпрограмма для осуществления тестирования(параметр - 1 передается при режиме тренажер, 2 - при режиме теста);

4.Подпрограммы, реализующие вспомогательные функции:

ovoid Rus (char *str); - подпрограмма печати русскоязычного текста (параметр - строка для печати);

ovoid zagolovok(); - подпрограмма печати заголовка на экран;

oint kolvo_strok(char name[]); - подпрограмма подсчета количества строк в файле (параметр - имя файла);

oint kolvo_tem(); - подпрограмма подсчета количества тем;

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

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

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

oint naxodka_stroki (int nomer,char str[100]); - подпрограмма нахождения строки с заданным номером(параметры - номер строки, и, собственно, сама возвращаемая строка с заданным номером);


Заключение


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

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

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

файл модульный лексика английский

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


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

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

Поляков К. Программирование на языке Си, 2008.


Приложение А


Текст программы


#include<stdio.h>

#include<string.h>

#include<windows.h>

#include<stdlib.h>

#include<conio.h>

#include<time.h>


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

{message[200];(str,message);("%s",message);

}

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

int menu(); //пп выбора меню работыprosmotr (); //подпрограмма для печати словаря на экранpoisk(); // поиск перевода определенного словаrabota_slovar(); // пп выбора режима работы со словаремkolvo_strok(char name[]); // пп подсчета количества строк в файлеtrenazer(int flk); // пп режима тренажер пользовательского менюkorr_temi(); // пп для корректировки заданной темыkolvo_tem(); // пп подсчета количества темgenerator_input(); // пп генерирования из тем монолитного файлаud_temi(); // пп удаления темыkolic_tem; //глобальная переменная, отвечает за количество темint dobav = 5; // константа - добавленияgenerator_rus(); // пп для генерирования русско-английского словаряvibor_polz_rezima (); //пп выбора пользовательского режимаparol(); //пп ввода пароля для доступа к режиму администратораvibor_adm(); //пп выбора режима работы администратораsozd_temi(); // пп создания новой темыadministrator(); // пп режима администратораnaxodka_stroki (int nomer,char str[100]); // находит строку с № nomer, считает, что "!\n" не является строкой

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

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

}

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

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

int vibor;pro;{("Ваш выбор - ");(stdin);= scanf ("%d",&vibor);(!pro || vibor<1 || vibor>3) Rus ("Неверный ввод. Повторите...\n");

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

return vibor;

}

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

{rezim1;f;("\n\n");

Rus ("Выберете режим работы:\n1 <- Работа со словарем\n2 <- Тренажер\n3 <- Тест\n4 <- Возврат в главное меню\n");{("Ваш выбор - ");= scanf ("%d",&rezim1);(stdin);(!f || rezim1 < 1 || rezim1 > 4) Rus ("Неверный ввод. Повторите\n");

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

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

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

char vvod[10];i, j=0;tem[3];{=0;{: fflush(stdin);[i]=getch();(vvod[i] == 13) {vvod[i] = '\0'; break;} //если ввели Enter(vvod[i] == 8) // если ввели backspace

{(i == 0) goto ex;("cls");

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

int jk;(j == 1)

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

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

}(j == 2)

{

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

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

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

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

}-;

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

}{++;("*");


}

} while (1);[j]=i;(stricmp(key,vvod) != NULL)

{(j == 2) return 0;("\nВы ввели неверный пароль! Повторите... ");++;

}return 1;

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

}

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

{("cls");();rezim1;

int f;("Выберете режим работы:\n1 <- Создание новой темы\n2 <- Корректировка уже сущесвующей темы\n3 <- Удаление темы\n4 <- Возврат в главное меню\n");{("Ваш выбор - ");= scanf ("%d",&rezim1);(stdin);(!f || rezim1 < 1 || rezim1 > 4) Rus ("Неверный ввод. Повторите\n");

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

}

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

{

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

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

*ved;

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

name[0]='t';[2]='.';[3] = 't';[4] = 'x';[5] = 't';[6] = '\0';zn;i,fl=0;(i=0 ; i<kolic_tem ; i++)

{= i;=zn + '0';[1] = zn;= fopen(name,"r");(ved == NULL) {fl = 1; break;}

}(ved);(fl) name[1] = zn;{= kolic_tem++;=zn + '0';[1] = zn;

}= fopen(name,"w");

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

int prov;new_tem[100];*s;

{(stdin);(new_tem);= strchr(new_tem,'-');

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

} while (s == NULL);= fputs(new_tem,ved);

int f;{=0;("\nЕсли желаете ввести новое слово нажмите 'ENTER'");(getch() == 13)

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

do{(stdin);(new_tem);= strchr(new_tem,'-');

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

} while (s == NULL);('\n',ved);= fputs(new_tem,ved);=1;

}

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

fclose(ved);0;

}

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

{{rezim;= vibor_adm();y;(rezim)

{1:

{("cls");();(" Вы работаете в режиме Администратора\n");(" Создание новой темы\n\n");

y = sozd_temi();;

}2:

{("cls");();(" Вы работаете в режиме Администратора\n");(" Корректировка уже сущесвующей темы\n\n");

y = korr_temi();;

}3:

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

y = ud_temi();;

}4:

{_input();0;

}

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

generator_input();

} while (1);

}

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

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

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

*ved;name[7];[0]='t';[2]='.';[3] = 't';[4] = 'x';[5] = 't';[6] = '\0';stroka[100];

i;j=0;mas_str[kolic_tem+dobav];(i=0 ; i<kolic_tem+dobav ; i++)

{zn=i;=zn + '0';[1] = zn;= fopen(name,"r");(ved != NULL)

{(stroka,100,ved);("%c <- ",zn+1);("%s",stroka);len = strlen(stroka);(stroka[len-1] != '\n')

printf("\n");_str[j] = zn+1; j++;// в массиве mas_str номера тем, которые печатаются

}(ved);

}f,asd=0;

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

f = scanf ("%d",&nom_temi);(stdin);(int gh = 0; gh<j ; gh++)(nom_temi+'0' == mas_str[gh]) asd=1;

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

} while (!f || !asd);

_temi--;zn = nom_temi;= zn+'0';

name[1] = zn;(name);("\n * Тема успешно удалена\n");_tem--;0;

}

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

{*ved;name[10];[0]='t';[2]='.';[3] = 't';[4] = 'x';[5] = 't';[6] = '\0';flag = 0;i;(i=0 ; i<10 ; i++)

{zn = i;=zn + '0';[1] = zn;= fopen(name,"r");(ved != NULL) flag++;(ved);

}flag;

}

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

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

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

*ved;name[10];[0]='t';[2]='.';[3] = 't';[4] = 'x';[5] = 't';[6] = '\0';stroka[100];

*s;i;j=0;mas_str[kolic_tem+dobav];(i=0 ; i<kolic_tem+dobav ; i++)

{zn=i;=zn + '0';[1] = zn;= fopen(name,"r+");(ved != NULL)

{(stroka,100,ved);("%c <- ",zn+1);("%s",stroka);len = strlen(stroka);(stroka[len-1] != '\n')

printf("\n");_str[j] = zn+1; j++;// в массиве mas_str номера тем, которые печатаются

}(ved);

}f,asd=0;

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

f = scanf ("%d",&nom_temi);(stdin);(int gh = 0; gh<j ; gh++)(nom_temi+'0' == mas_str[gh]) {asd=1; break;}

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

} while (!f || !asd);

_temi--;zn = nom_temi;= zn+'0';[1] = zn;= fopen(name,"r");("\n\nСодержимое файла "); printf ("%s",name); //печать файла на экран("\n");=1;(!feof(ved))

{(stroka,100,ved);("%d) %s",i,stroka);++;

}(ved);("\n\n");

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

{("Ваш выбор: ");= scanf ("%d",&rezim22);(stdin);(!f || rezim22 < 1 || rezim22 > 4) Rus ("Неверный ввод. Повторите\n");

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

(rezim22)

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

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

char nov_str[100];{(stdin);(nov_str);= strchr(nov_str,'-');

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

} while (s == NULL);= fopen(name,"a+");(ved,"\n%s",nov_str);

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

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

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

int nom_dl_kor;lll;{= scanf ("%d",&nom_dl_kor);(stdin);= kolvo_strok(name);(!f || nom_dl_kor < 1 || nom_dl_kor > lll) Rus ("Неверный ввод. Повторите\n");

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

_dl_kor--;new_str[100];

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

do{(stdin);(new_str);= strchr(new_str,'-');

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

} while (s == NULL);*ved1;= fopen("temp.txt","w");= fopen (name,"r");ii=0;f1;str12[100];(fgets(str12,100,ved) != NULL)

{(ii != nom_dl_kor) fputs(str12,ved1);{ f1 = fputs(new_str,ved1);(ii != lll-1) fputs("\n",ved1);}++;

}(ved);(ved1);= fopen(name,"w");= fopen("temp.txt","r");(fgets(str12,100,ved1) != NULL)(str12,ved);(ved);(ved1);("temp.txt");

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

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


break;

}3:

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

int nom_dl_udal;lll;{= scanf ("%d",&nom_dl_udal);(stdin);= kolvo_strok(name);(!f || nom_dl_udal < 1 || nom_dl_udal > lll) Rus ("Неверный ввод. Повторите\n");

} while (!f || nom_dl_udal < 1 || nom_dl_udal > lll);_dl_udal--;*ved1;= fopen(name,"r");= fopen("temp.txt","w");iii=0;f11;str45[100];(stdin);(fgets(str45,100,ved) != NULL)

{(iii!=nom_dl_udal)

{kk=0;len;= strlen(str45);(iii == lll-2 && nom_dl_udal == lll-1)

{while (kk != len-1)

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

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

{while (kk != len-1)

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

}(stdin);(kk == 0) f11 = fputs(str45,ved1);

}++;

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

fclose(ved);(ved1);= fopen(name,"w");= fopen("temp.txt","r");(stdin);(fgets(str45,100,ved1) != NULL)(str45,ved);(ved);(ved1);("temp.txt");;

}: {return 5; break;}

}= fopen(name,"r");poz,poz2;del=0;= ftell(ved);(ved,0L,2);= ftell(ved);(poz2-poz == 0) del = 1;(ved);(del) remove(name);("\n");0;

}

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

{*ved;*ved1;name[10];[0]='t';[2]='.';[3] = 't';[4] = 'x';[5] = 't';[6] = '\0';stroka[100];= fopen("eng-rus.txt","w+");i;f[2];(i=0 ; i<kolic_tem+dobav ; i++)

{zn = i;=zn + '0';[1] = zn;= fopen(name,"r");(ved != NULL)

{(f[0] = fgets(stroka,100,ved) != NULL)[1] = fputs(stroka,ved1);("\n!\n",ved1);

}(ved);

}(ved1);

}

main()

{

//вызов главного меню_tem = kolvo_tem();_input();rezim;rezim_polz;{= menu();(rezim)

{1: { //режим администратора("cls");

zagolovok();key;= parol();

if (key == 1) administrator();{ Rus ("\n\nУвы, у Вас нет доступа для работы в данном режиме\n");("pause"); };

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

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

switch (rezim_polz)

{1: {_slovar();;

}2: {(1);;

}3: {(2);;

}

}


} while (rezim_polz != 4);;

}3: { //выход из системы("cls");();

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

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

};

}

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

} while (1);

}

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

{*slovar;= fopen(name,"r");(slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}stroka[100];*uk;flag=0;(stroka,100,slovar);{= strchr (stroka, '-');(uk != NULL) flag++;

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

}

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

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

a = clock();("cls");();

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

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

int pro;kolvo_slov;kolvo1 = kolvo_strok("eng-rus.txt");//kolvo1 = количество строк в текстовике{(stdin);= scanf("%d",&kolvo_slov);(!pro || kolvo_slov < 0 ) Rus ("Неверный ввод. Повторите\n");if (kolvo_slov > kolvo1) Rus("Вы ввели слишком много. Повторите\n");

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

//ввели количество слов для тестированияbnm;pravilno=0;//правильных ответовneverno=0;//неправильных ответов

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

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

char str[100];str1[100];_stroki (dl_perevoda,str1);

// в итоге у нас в str нужная строкаi;ff=1;("\n\nСлово для перевода: ");

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

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

else ff=0;

}ii,jj=0;str2[100];//здесь конец str(ii=i+1 ; str1[ii]!='\n'; ii++)

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

str2[jj]='\0';("\n\nВарианты ответов:\n");int kolvo_var_otv = 6;//константа - количество вариантов ответовmesto = rand()%kolvo_var_otv; // место правильного ответа в списке

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

mmest[0] = dl_perevoda;=1;strr[100];


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

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

if (j == mesto) printf("%s",str2);{flagok;neww;// номер печатаемой строчки

{=1;= rand()%kolvo1;(k=0; k<i ; k++)(mmest[k] == neww) {flagok=0; break;}

} while (!flagok);_stroki(neww,str);(k=0 ; str[k] != '-' ; k++);=k+2;chr=0;(int jk=k ; str[jk] != '\n' ; jk++)

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

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

mmest[i]=neww;++;("%s",strr);

}("\n");

}

//напечатан список ответовflag=0;


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

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

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

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


if (otv-1 == mesto) {(flk == 1)Rus ("Правильно");++;=0;

}{(flk == 1)

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

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

flag++;

}neverno++;

}

} while (flag>0 && flag<3 && flk == 1);(flag == 3) {neverno++; Rus(" * Правильный ответ - "); printf ("%d",mesto+1);}(flk == 1) printf ("\n\n *** *** ***");


}("\n_____________________________________________________________________________");("\nРезультаты тестирования:\nБыло дано слов - ");("%d",kolvo_slov);("\nСреди них правильных - ");printf ("%d",pravilno);

Rus (", и неправильных - ");printf ("%d",neverno);("\n");= clock();t;= (b-a)/CLOCKS_PER_SEC;sec,min;= t%60;= t/60;("Тест был пройден за ");printf ("%d",min); Rus(" минут(ы) и "); printf ("%d",sec); Rus(" секунд(ы)");("\n\n");("pause");

}

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

{*slovar;= fopen("eng-rus.txt","r");*s;f1=0;{(str,100,slovar);= strchr(str,'-');(s != NULL) f1++;

} while (f1-1 < nomer);

}

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

{rezim11;{

("cls");

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

{("Ваш выбор - ");= scanf ("%d",&rezim11);(stdin);(!f || rezim11 < 1 || rezim11 > 3) Rus ("Неверный ввод. Повторите\n");

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

printf ("\n\n");

(rezim11)

{1: {();;

}2: {();;

}

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

} while (rezim11 != 3);

}

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

{_rus();{("cls");();*slovar;int n=100;

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

int vvib;f;{("Ваш выбор - ");= scanf ("%d",&vvib);(stdin);(!f || vvib < 1 || vvib > 2) Rus ("Неверный ввод. Повторите\n");

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

(vvib == 1)

{= fopen("eng-rus.txt","r");(slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}{

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

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

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

}

{= fopen("rus-eng.txt","r");(slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}{

Rus ("\nВведите слово для перевода(на русском): ");(stdin);(vvod);(vvod[0]<'а' && vvod[0]>'я') Rus ("Неверный ввод. Повторите\n");

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

}

fq=1;s1[n];s[n];("\n");("%s",vvod);(" - ");(fgets(s,n,slovar) != NULL && fq)

{i=0;(s[i] != '-')

{s1[i] = s[i];++;}-;[i] = '\0';( strcmp(vvod,s1) == NULL )

{j;s2[n];k=0;(j=i+3 ; s[j] != '\n' ; j++)

{s2[k] = s[j]; k++;}[k] = '\0';=0;("%s",s2);

}

}(fq) Rus("К сожалению, такого слова не найдено\n");("\nЕсли желаете перевести еще одно слово, нажмите 'ENTER'\n\n");(slovar);


} while (getch() == 13);


}

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

{("cls");();("Организуем просмотр словаря");("\n\n");("Просмотр словаря 1 <- целиком, или 2 <- по темам\n");

int vvib;f;{("Ваш выбор - ");= scanf ("%d",&vvib);(stdin);(!f || vvib < 1 || vvib > 2) Rus ("Неверный ввод. Повторите\n");

} while (!f || vvib < 1 || vvib > 2);*slovar;= fopen("eng-rus.txt","r");(slovar == NULL) {Rus ("К сожалению файл не найден"); return 0;}int n=100;s[n];*fl;

(vvib)

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

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

{fq=1;(fl != NULL && strcmp(s,"!\n") != NULL)

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

}("\n\n");

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

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

{

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

int uk_tem[15];j=0;_tem[0] = 0;chch=1; // просто счетчик*s;str[100];kolstr = kolvo_strok("eng-rus.txt");

{(str,100,slovar);= strchr(str,'!');

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

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

// в итоге в массиве uk_tem хранятся номера строк, содержащие темы, распечатаем их(j=0 ; j<chch ; j++)

{("%d <- ",j+1);_stroki (uk_tem[j],str);

printf ("%s",str);

}{("\nВаш выбор - ");= scanf ("%d",&vvib);(stdin);(!f || vvib < 1 || vvib > chch) Rus ("Неверный ввод. Повторите\n");

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


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

rewind(slovar);fj=0;{(str,100,slovar);= strchr(str,'-');(s != NULL) fj++;

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

("%s",str);("\n");

= fgets(str,n,slovar);= strchr(str,'!');

{("%s",str);= fgets(str,n,slovar);= strchr(str,'!');

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

}

} // закрыли switch(slovar);

}

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

{*ved;*ved1;= fopen("eng-rus.txt","r");= fopen("rus-eng.txt","w");stroka[100];i,j;(!feof(ved))

{(stroka,100,ved);(!feof(ved))

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

{(i=0 ; stroka[i] != '-' ; i++);(j = i+2 ; stroka[j]!='\0'; j++)(stroka[j]!= '\n') fputc(stroka[j],ved1);(" - ",ved1);(i=0 ; stroka[i+1]!= '-'; i++)(stroka[i],ved1);(!feof(ved)) fputc('\n',ved1);

}

}

}(ved);(ved1);

}


Приложение Б


План тестирования


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

Программный продукт имеет следующий вид: (Рисунок 3 - 9).


Рисунок 3 - Главное меню программы


Рисунок 4 - Ввод пароля для доступа к режиму администратора


Рисунок 5 - Меню администратора


Рисунок 6 - Пример работы в режиме корректировки темы


Рисунок 7 - Режим работы пользователя


Рисунок 8 - Режим пользовательского меню работы со словарем


Рисунок 9 - Пример работы "Тренажера"


Приложение В


Руководство системного программиста


Для установки программы: скопировать папку VocabularyOfEnglish с набором файлов вида: t0.txt. (в стартовом наборе их 4: t0.txt, t1.txt, t2.txt, t3.txt) на жесткий диск компьютера. Также в папке могут содержаться файлы eng-rus.txt, rus-eng.txt. При их отсутствии они автоматически создадутся при запуске программы.

Системные требования: Microsoft Windows 2000/XP/Vista, процессор Pentium II 266MHz или выше, 10 Мб оперативной памяти, 2 Мб свободного пространства на жестком диске.


Приложение Г


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


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

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


Пояснительная записка к курсовой работе по дисциплине «Основы программирования» Разработка п

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ