
Опытный
 
Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006
Репутация: 10 Всего: 23
|
Давным давно писал уж и не помню как работает. Консольная. помню хотел к ней ооблочку на Borlande написать да забросил Код | #include "fstream.h" #include "string.h" #include "limits.h" #include "stdlib.h" #include "stdio.h" #include "ctype.h" #include "conio.h"
//_____обьявление функций_______________________________________________________ //функция помощь void helpscrin(void); //функция проверки массива символов на "цифра или нет?" void _isdigit(char *argument, char e_r[]); //функция присваения переменной случайного числа void passw(int a1, int a2, char randon[]); //функция экзамен void examine(int exammode, char *variant, char ret_n[], char notgood[]); //функция создания строки С из считанных символов void myIOfunc(char c_out[], char c_in[]); //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
int main(int argc, char *argv[]) //поехали { //______________________________________________________________________________ char *line1, *line2, *ptr; //переменные которые будут использоваться на int num1 = 0, num2 = 0, num3 = 0, num4 = 0, exammode; //протяжении всего кода //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//начало цикла ("кол-во проходов" =2) int v; // временная переменная for (v = 1; v <= 2; v++)//<- start | { //начало вложенного цикла "перебор аргументов коммандной строки по номерам" int c, x;//временная переменная for (c = 1; c < argc; c++)//<- start | { switch(v) // оператор ветвления switch { case 1: // первая ветвь line2 = argv[c]; // переменная line2 равна command_line аргумент с индексом [c] //______________________________________________________________________________ //если command_line аргумент равен "help"_или_ "HELP" if ((line2[0] == 'h' || line2[0] == 'H') && (line2[1] == 'e' || line2[1] == 'E') && (line2[2] == 'l' || line2[2] == 'L') && (line2[3] == 'p' || line2[3] == 'P')) { line1 = "help"; ptr = strstr(line2, line1); if (ptr != 0) { helpscrin(); //запустить функцию HELP return 0; } } //______________________________________________________________________________ //если command_line аргумент равен "examine"_или_ "preexamine" if (!strstr("examine", line2) == NULL || !strstr("preexamine", line2) == NULL) { char char_string[10], *variant, ret_n[10] = "0";
strtdlg_a: // метка начала диалога clrscr(); // функция Turbo C++, очистки экрана
char c_out[45] = "Введи номер варианта и нажми ENTER", // ВВЕСТИ НОМЕР ВАРИАНТА c_in[10]; myIOfunc(c_out, c_in); //запуск функции myIOfunc variant = c_in; //проверить каждый символ на "цифра ли это" char e_r[2] = "0"; _isdigit(variant, e_r); //запуск функции _isdigit if (e_r[0] != '0') { printf(" в введенном варианте %s не цифр\n", e_r, variant); if (getchar() != EOF); goto strtdlg_a; }
if (line2[0] == 'p' && line2[1] == 'r' && line2[2] == 'e') exammode = 0; else exammode = 1;
char notgood[3] = "0"; examine(exammode, variant, ret_n, notgood); if (getchar() != EOF);
if (ret_n[0] != '0') { goto strtdlg_a; } if (notgood[0] != '0') { printf("Вы имеете %c не верных ответов\n", notgood); } printf("END\n");
} //'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' break; // end case 1
case 2: if (c == 1) // сколько вариантов? (аргумент 1) { char e_r_r[20] = "0"; _isdigit(argv[c], e_r_r); if (e_r_r[0] != '0') { printf("Возвращено %c ошибок", e_r_r); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; } x = atoi(argv[c]); num1 = x; if (num1 > 5) { printf("Максимум 5 (аргумент 1)\n"); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; } if (num1 <=0) { printf("0 файлов? Неправильный аргумент 1\n"); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
} if (c == 2) // сколько вопросов в варианте? (аргумент 2) { char *e_r_r = "0"; _isdigit(argv[c], e_r_r); if (e_r_r[0] != '0') { printf("Возвращено %c ошибок\n", e_r_r); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; } x = atoi(argv[c]); num2 = x; if (num2 > 10) { printf("Максимум 10 (аргумент 2)\n"); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
if (num2 <= 0) { printf("0 вопросов? Не правильный аргумент 2\n"); printf( "Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
}
if (c == 3) // сколько ответов на вопрос? (аргумент 3) { char *e_r_r = "0"; _isdigit(argv[c], e_r_r); if (e_r_r[0] != '0') { printf("Возвращено %c ошибок\n", e_r_r); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; } x = atoi(argv[c]); num3 = x; if (num3 > 5) { printf("Максимум 5 (аргумент 3)\n"); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
if (num3 <= 0) { printf("0 ответов? Не правильный аргумент 3\n"); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
} if (c == 4) // ключь { char *e_r_r = "0"; _isdigit(argv[c], e_r_r); if (e_r_r[0] != '0') { printf("Возвращено %c ошибок\n", e_r_r); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; } x = atoi(argv[c]); num4 = x; if (num4 > 20) { printf("Максимум 20 (аргумент 4)\n"); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
if (num4 <=0) { printf("ключь 0? Не правильный аргумент 5\n"); printf("Любая клавиша для завершения программы\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
} break; // end case 2
} // end switch
} // for 2 end } // for 1 end
/* создаем файлы */ if (num1 > 0 && num2 > 0 && num3 > 0) { ofstream f_output, f_main; char filename[20]; int i, g, n;
/* cоздать файл для сохранения параметров */ f_main.open("main.txt", ios::out); if (f_main.fail()) //Проверка на открытие файла { perror("Error "); printf("Ошибка чтения файла параметров\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; } for(i = 1; i <= num1; i++) // файлов столько, сколько указано { // в переменной num1
itoa(i, filename, 10); strcat(filename, "_varnt.txt"); f_output.open(filename, ios::out); if (f_output.fail()) //Проверка на открытие файла { perror("Error "); printf("Ошибка чтения файла вариынта\n"); return 0; } /* вносим начальные данные */ f_output << "; --+-- \n" << "; --+-- \n" << "; Вариант номер - " << i << " \n" << ";\n"; for(g = 1; g <= num2; g++) // вопросов столько, сколько указано { // в переменной num2 f_output << "---------------------------------\n" << "Вопрос номер " << g << "\n" << "---------------------------------\n" << " Место для\n" << " вопроса\n" << "\n" << "Ответы: \0"; for(n = 1; n <= num3; n++) // ответов столько, сколько указано { // в переменной num3 f_output << n << " \0"; } f_output << "\n"; char randon[20] = "0"; passw(num3, num4, randon); int u = atoi(randon); f_main << u << "\0"; // int y = 1; while(y < u) { f_output << " " << "\0"; y++; } u = y + 8; f_output.width(u); f_output << "^" << " \n" << "$$$$О$$С$$Т$$А$$Н$$О$$В$$К$$А$-" << g << "$" << "\n\r"; n = 1; } f_main << "\n"; // f_output.close(); g = 1; } f_main.close(); } else { printf("Не верно \n"); if (num1 <= 0) printf("аргумент номер 1 = %d\n", num1); if (num2 <= 0) printf("аргумент номер 2 = %d\n", num1); if (num3 <= 0) printf("аргумент номер 3 = %d\n", num1); printf("\n"); printf("Введи Help в коммандной строке для получения информации\n"); if (getchar() != EOF); // остановка до нажатия любой клавиши }
if (getchar() != EOF); // остановка до нажатия любой клавиши return 0; }
//______________________________________________________________________________ /* --Voids-- */ // обьявленные функции ! //'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /* --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+--| | проверка каждого символа на то, цифра ли это | --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-*/ void _isdigit(char *argument, char e_r[]) { int i = 0, b = strlen(argument), e = 0;
while(i < b) //кол-во проходов равно количеству символов в переменной { if (!isdigit(argument[i])) { e++; } i++; } itoa(e, e_r, 10); }
/* --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+--| | экран помощи | --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-*/ void helpscrin(void) { printf("This is a Help scrin \n"); printf("EXAMINER v.0.2 freeware\n"); printf("\n"); printf("Параметры коммандной строки:\n"); printf("examiner [кол-во вариантов] [кол-во вопросов в варианте]\n"); printf(" [кол-во ответов на вопрос] [ключь] [экзамен]\0"); printf(" или [подготовка]\n"); printf(" [помощь]\n"); printf("\n"); printf(" 1. кол-во вариантов - не более пяти\n"); printf(" 2. кол-во вопросов в варианте - не более десяти\n"); printf(" 3. кол-во ответов на вопрос - не более пяти\n"); printf(" 4. ключь - от одного до двадцати для вариантов ответов\n"); printf(" 5. экзамен (examine) - скрыть правильные ответы\n"); printf(" 6. подготовка (preexamine)- показать правильные ответы\n"); printf(" 7. помощь (help) - показать этот экран\n"); printf("\n"); printf(" Примеры:\n"); printf("\n"); printf(" examiner 2 4 5 15 - Будет создано две заготовки(два варианта),\n"); printf(" четыре вопроса, по пять вариантов ответов.\n"); printf(" ключь пятнадцать.\n"); printf(" examiner examine - начать экзамен\n"); printf(" examiner preexamine - начать подготовку к экзамену\n"); printf("\n"); printf(" Для более подробной информации обратись к документации\n"); return; }
/* --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+--| | присваение переменной случайного числа | --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-*/ void passw(int a1, int a2, char randon[]) { int i, t, p; p = a1 + 1; for(i = 0; i <= a2; i++) { t = rand() % p; } if (t <= 0) t = 1; itoa(t, randon, 20); }
/* --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+--| | непосредственно экзамен | --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-*/ void examine(int exammode, char *variant, char ret_n[], char notgood[]) { //______________________________________________________________________________ char textLine[100], filetoinput[20], ch, *otvet, mainchar[20] = "0"; int numofvopros = 1; //переменные для всей функции //'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' strcpy(filetoinput, variant); // скопировать переменную в переменную strcat(filetoinput, "_varnt.txt"); // приклеить к концу переменной строку
ifstream f_input, f_main; // указатели на файлы
f_input.open(filetoinput, ios::in); // файлы открываются f_main.open("main.txt", ios::in); // для чтения
if (f_input.fail()) // проверка на ошибку открытия { perror(" Ошибка "); printf("Файл с именем %s вызвал ошибку чтения\n", filetoinput); ret_n[0] = '1'; return; } else if (f_main.fail()) // проверка на ошибку открытия main.txt { perror(" Ошибка "); printf("Файл с именем main.txt необходимый для сравнения с правильными\n"); printf("ответами вызвал ошибку чтения\n"); ret_n[0] = '1'; return; } else // если ошибок нет! { char ch; int c; //int i; // переменная для счетчика (если надо) while(!f_input.eof()) { f_input.getline(textLine, CHAR_MAX);
if (textLine[0] == '$') // если первый символ строки '$' то остановка { strtdlg_b: // метка начала диалога int i_notgood = 0; char c_out[45] = "Введи цифру и нажми Enter: ", // ВВЕСТИ ВАРИАНТ ОТВЕТА <-- c_in[10]; myIOfunc(c_out, c_in); //запуск функции myIOfunc
strcpy(otvet, c_in);
int b = strlen(otvet); if (strstr(otvet, "exit") != 0) return; if (b >= 2) { printf("Введенный вариант ответа не соответствует\n"); printf("разрешенному максимуму, для ответов это 5\n"); goto strtdlg_b; }
char *e_r = "0"; _isdigit(otvet, e_r); //запуск функции _isdigit
if (e_r[0] != '0') { printf(" в введенном варианте %s не цифр\n", e_r, variant); if (getchar() != EOF); // остановка до нажатия любой клавиши goto strtdlg_b; }
/* проверка на правильность ответа */ if (mainchar[0] != '~') { int n = 0, numofvariant = atoi(variant); f_main.seekg(ios::beg); while(n < numofvariant) { f_main.getline(mainchar, 20); n++; } if (mainchar[numofvopros - 1] == otvet[0]) { printf("\n"); printf("GOOD! && ПРАВИЛЬНО! \n"); printf("\n"); } else { i_notgood = i_notgood + 1; itoa(i_notgood, notgood, 10); printf("НЕ верный ответ ! \n"); printf("Правильный ответ %c\n", mainchar[numofvopros - 1]); } } else { printf("Правильный ответ программе не известен \n"); } /* конец проверки на правильность ответа */
numofvopros++; // cчетчик остановок(а значит счетчик вопросов) } else if (textLine[0] == ';') // если первый символ ';' { // то printf("\0"); // пропуск (т.е вывод пустой строки) }
else if ((!strrchr(textLine, '^') == NULL) && (exammode == 1)) { // если в строке есть символ '^' то пропуск printf("\0"); // (т.е вывод пустой строки) !для examine } else { printf("%s\n", textLine); // или вывод строки } //i++; // счтчик строк
} f_input.close(); // закрыть f_main.close(); // файлы } }
/* --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+--| | создание строки С из считанных символов | --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-- --+-*/ void myIOfunc(char c_out[], char c_in[]) { char ch; printf("%s \0", c_out); //ввывести на экран строку int i; for (i = 0; (i < 80) && ((ch = getchar()) != EOF) && (ch != '\n'); i++) c_in [i] = ch; c_in[i] = '\0'; }
|
--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
|