Здавалка
Главная | Обратная связь

Пример программы. Копирование файлов.



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

#include <iostream>#include <windows.h>#include <io.h>#include <stdio.h>using namespace std; // Функция, выводящая на экран строкуvoid RussianMessage(char *str){ char message[100]; //перевод строки из кодировки Windows //в кодировку MS DOS CharToOem(str,message); cout<<message;}// Функция копирования файлаbool CopyFile(char *source,char *destination){ const int size=65536; FILE *src,*dest; // Открытие Файла if(!(src=fopen(source,"rb"))){ return false; } // Получение дескриптора файла int handle=_fileno(src); // выделение памяти под буффер char *data=new char[size]; if(!data){ return false; } // Открытие файла, куда будет производиться копирование if(!(dest=fopen(destination,"wb"))){ delete []data; return false; } int realsize; while (!feof(src)){ // Чтение данных из файла realsize=fread(data,sizeof(char),size,src); // Запись данных в файл fwrite(data,sizeof(char),realsize,dest); } // Закрытие файлов fclose(src); fclose(dest); return true;}void main(){ // __MAX_PATH - Константа, определяющая максимальный размер пути. // Даная константа содержится в stdlib.h char source[_MAX_PATH]; char destination[_MAX_PATH]; char answer[20]; RussianMessage("\nВведите путь и название копируемого файлу:\n"); // Получение пути к первому файлу cin.getline(source,_MAX_PATH); // Проверка Существует ли файл if(_access(source,00)==-1){ RussianMessage("\nУказан неверный путь или название файла\n"); return; } RussianMessage("\nВведите путь и название нового файла:\n"); // Получение пути к второму файлу cin.getline(destination,_MAX_PATH); // Проверка на существование файла if(_access(destination,00)==0){ RussianMessage("\nТакой Файл уже существует перезаписать его(1 - Да /2 - Нет)?\n"); cin.getline(answer,20); if(!strcmp(answer,"2")){ RussianMessage("\nОперация отменена\n"); return; } else if(strcmp(answer,"1")){ RussianMessage("\nНеправильный ввод\n"); return; } if(_access(destination,02)==-1){ RussianMessage("\nНет доступа к записи.\n"); return; } } // Копирование файла if(!CopyFile(source,destination)){ RussianMessage("\nОшибка при работе с файлом\n"); } }
Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая

Пример программы. Игра "Виселица".

Смысл игры состоит в том, что пользователь за некоторое количество попыток должен отгадать слово, в нашем случае английское. В папку с проектом, в котором вы будете компилировать данный код, необходимо положить файл words.txt. Этот файл должен содержать несколько английских слов, расположенных в столбик (одно под другим).

#include <windows.h>#include <iostream>#include <stdio.h>#include <io.h>#include <stdlib.h>#include <time.h<#include <sys\locking.h>#include <string.h>#include <ctype.h> using namespace std; // Максимальная длина слова#define MAX_WORD_LENGTH 21 // Кол-во попытокint Tries = 10; // Кол-во угаданных словint CountWords = 0; // Загрузка словаbool LoadWord(FILE * file, char * word){ int i = 0; char s[MAX_WORD_LENGTH] = {0}; // Кол-во слов в файле static int count = -1; if(count == -1) { // Подсчет количества слов while(!feof(file)) { fgets(s, MAX_WORD_LENGTH, file); count++; } // Слов нет? if(count == 0) return false; // Возврат файлового указателя в начало файла fseek(file, 0, 0); } // Случайное слово int n = rand() % count; // Поиск слова while(i <= n) { fgets(s, MAX_WORD_LENGTH, file); i++; } // Определяем длину слова int wordlen = strlen(s); // Минимальная длина слова 2 буквы if(wordlen <= 1) return false; // Убираем Enter (в DOS'е 2 байта 13 10) if(s[wordlen - 1] == 10) s[wordlen - 2] = 0; else if(s[wordlen - 1] == 13) s[wordlen - 1] = 0; // Копируем слово strcpy(word, s); // Получаем дескриптор файла int hFile = _fileno(file); // Вычисляем размер файла int size = _filelength(hFile); // Блокировка файла fseek(file, 0, 0); _locking(hFile, _LK_NBLCK, size); return true;} // Играvoid Game(char * word){ // Перевод в большие буквы strupr(word); int len = strlen(word); // Строка-копия char * copy = new char[len + 1]; memset(copy, '*', len); copy[len] = 0; // Алфавит + пробелы char letters[52]; int i, j = 0; for(i = 0; i < 26; i++) { letters[j++] = i + 'A'; letters[j++] = ' '; } // Замыкающий ноль letters[51] = 0; // Буква char letter; char * pos; bool replace = false; do { // Очистка экрана system("cls"); cout << copy << endl << endl; cout << letters << endl << endl; cout << "Count of tries: " << Tries << endl << endl; cout << "Input any letter:\t"; cin >> letter; // Звуковой сигнал Beep(500, 200); // if(letter >= 'A' && letter <= 'Z' // || letter >= 'a' && letter <= 'z') // Буква? if(!isalpha(letter)) { cout << "It's not a letter" << endl; // Задержка на 1 секунду Sleep(1000); continue; } // Перевод буквы в большую letter = toupper(letter); // Поиск буквы в алфавите pos = strchr(letters, letter); // Такая буква уже была if(pos == 0) { cout << "This letter have been already pressed" << endl; Sleep(1000); continue; } else { // Убираем букву из алфавита pos[0] = ' '; } // Поиск буквы в слове for(i = 0; i < len; i++) { if(word[i] == letter) { copy[i] = letter; replace = true; } } if(replace == false) Tries--; else replace = false; // Условие победы if(strcmp(word, copy) == 0) { system("cls"); cout << copy << endl << endl; cout << letters << endl << endl; cout << "Count of tries: " << Tries << endl << endl; cout << "Congratulation !!!" << endl; CountWords++; break; } } while(Tries != 0); delete [] copy;} void main(){ // Открываем файл на чтение в двоичном режиме FILE * f = fopen("words.txt", "rb"); // Если файл не открылся if(f == 0) { // Ошибка perror("Open"); return; } srand(time(0)); char Word[20]; // Пытаемся загрузить слово if(!LoadWord(f, Word)) { // Если неудачно cout << "Error !!!" << endl; fclose(f); return; } char answer; // Играем, пока не надоест do { Game(Word); // Если попыток не осталось, то выход if(Tries == 0) { cout << "Count of words: " << CountWords << endl; cout << "Bye-bye" << endl; break; } // Если остались cout << "Continue ??? (Y/N)\t"; cin >> answer; // Еще играем? if(answer == 'Y' || answer == 'y') if(!LoadWord(f, Word)) { cout << "Error !!!" << endl; fclose(f); return; } }while(answer == 'Y' || answer == 'y'); // получаем дескриптор int hFile = _fileno(f); // Разблокировка файла int size = _filelength(hFile); fseek(f, 0, 0); _locking(hFile, _LK_UNLCK, size); fclose(f);}
Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая

Домашнее задание

Создать телефонный справочник для осуществления следующих операций:

  1. Добавление абонентов в базу.
  2. Удаление абонентов из базы.
  3. Модификация данных абонента.
  4. Поиск абонентов по телефонному номеру или фамилии.
  5. Распечатка в алфавитном порядке абонентов из заданного диапазона номеров или фамилий; например, для номеров диапазон может быть: 222222 - 333333, а для фамилий: Иванаускас - Иванов (то есть Иванова в диапазон не входит).
  6. Возможность сохранения найденной информации в файл.
  7. Сохранение базы в файл.
  8. Загрузка базы из файла.

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

  1. Полная распечатка базы данных (по номерам машин и списку правонарушений, числящихся за ними)
  2. Распечатка данных по заданному номеру
  3. Распечатка данных по диапазону номеров
Предыдущая Оглавление Следующая

 


 

Предыдущая Оглавление Следующая

Урок №29.

  • Практический пример. Cохранение объектов структуры в файл.
  • Операции по работе с файлами.
  • Операции для работы с директориями.
  • Практический пример. Показ содержимого директории.
  • Использование аргументов командной строки.
  • Практический пример.
  • Домашнее задание.
Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.