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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1010,13 Кб
  • Опубликовано:
    2014-12-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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














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

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

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

Введение

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

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

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

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 или выше

RAM                                                10 Мб

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

o   int 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");

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");

{("Ваш выбор: ");= 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;

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 - Главное меню программы


Рисунок 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 Мб свободного пространства на жестком диске.

Приложение Г

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

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

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

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!