Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]справочник городов и шифрование файла 
:(
    Опции темы
Ultramarin
Дата 28.4.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



Здравствуйте, помогите, пожалуйста, реализовать следующую задачу:
Шифровать (дешифровать) файл методом смещения кода. Файл содержит сведения о городах России (количество жителей, название, региональная принадлежность). Реализовать добавление и удаление сведений, а так же поиск по названию города.

PM MAIL   Вверх
Dmi3ev
Дата 29.4.2009, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Начну:
1) добавление в файл новой информации (название, численность населения, регион)
2) печать содержимого файла
Код

#include <iostream>
#include <fstream>
using namespace std;

struct city
{
    char name[50];//название
    long int people;//численность
    char region[50];//регион

};

void myappend(char *fn)//добавление новой записи в файл
{
    city c;
    ofstream fo;
    
    fo.open(fn, ios::app);
    if (!fo)
    {
        cout<<"ERROR"<<endl;
        system("PAUSE");
        return;
    }

    cout<<"Enter NAME: ";
    cin>>c.name;
    cout<<"Enter PEOPLE: ";
    cin>>c.people;
    cout<<"Enter REGION: ";
    cin>>c.region;

    fo<<c.name<<" "<<c.people<<" "<<c.region<<endl;
    fo.close();
}

void myprint(char *fn)\\печать содержимого файла
{
    ifstream fi;
    city c;
    fi.open(fn);
    if (!fi)
    {
        cout<<"ERROR"<<endl;
        system("PAUSE");
        return;
    }
    while (!fi.eof())
    {
        fi>>c.name>>c.people>>c.region;
        cout<<"NAME: "<<c.name<<" PEOPLE: "<<c.people<<" REGION: "<<c.region<<endl;
    }
    fi.close();
}

int main()
{
    char filename[]="D:\\myBD.txt";
    char c=NULL;
    while (c!='q')
    {
        cout<<"\n1-Print from \""<<filename<<"\".\n";
        cout<<"2-Add new to \""<<filename<<"\".\n";
        cin>>c;
        switch(c)
        {
        case '1':
            myprint(filename);
            break;
        case '2':
            myappend(filename);
            break;
        }
    }
    return 0;
}



--------------------

PM MAIL   Вверх
Ultramarin
Дата 30.4.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



Спасибо за помощь, Dmi3ev. Поиск я дописала сама, а вот с удалением не получается. Как можно удалить содержимое файла fn и записать в него новую информацию из del.txt?
Код

void del(char*fn)
 {
  city c;
  ofstream fo;
  fo.open("temp.txt",ios::app);
  if(!fo)
   {
    cout<<"Error"<<endl;
    return;
   }
  cout<<"Name city: ";
  cin>>c.temp;
  fo<<c.temp<<endl;
  fo.close();
  ifstream fi;
  fstream f;
  fi.open(fn);
  f.open("del.txt",ios::app);
  while(!fi.eof())
   {
    fi>>c.name>>c.people>>c.region;
    if(strcmp(c.name,c.temp)!=0) f<<c.name<<c.people<<c.region<<endl;
   }
  fi.close();
  f.close();
  return;
 }

PM MAIL   Вверх
zim22
Дата 30.4.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(Ultramarin @  30.4.2009,  14:46 Найти цитируемый пост)
Как можно удалить содержимое файла fn и записать в него новую информацию из del.txt?

повторно его откройте. и все данные удалятся.
Код

ofstream fo;
fo.open("temp.txt");



--------------------
PM MAIL   Вверх
andrew_121
Дата 30.4.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 0
Всего: 33



Ultramarin, Перегрузи ofstream& operator<< (ofstream& f, const city& c);, и замени name и region на std::string.
А перегрузи его, для того, чтоб вместо тупого, ограниченного, использования массива литер, ты могла писать в бинарный файл сначала int - длина строки, потом саму строку. Так правильней. По принципу конструирования. И по принципу перспективности кода.

П.С.
Форумчане, и не надо говорить что, ей этого не надо! Правильности написания кода нужно учиться с самого начала.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 30.4.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Ultramarin

Код

#include <iostream>
#include <algorithm>
#include <string>
#include <fstream>
#include <functional>

struct charencrypt: std::unary_function<char, char>
{
    char operator ()(char pc) {
        return pc + 100;
    }
};

struct chardecrypt: std::unary_function<char, char>
{
    char operator ()(char pc) {
        return pc - 100;
    }
};

bool fencryption_(const std::string& fni, const std::string& fno, bool encrypt)
{
    std::ifstream cfi(fni.c_str(), std::ifstream::in | std::ifstream::binary);
    std::ofstream cfo(fno.c_str(), std::ofstream::out | std::ofstream::binary);

    bool isok = cfi.is_open() && cfo.is_open();

    if ( isok )
    {
        cfi.unsetf(std::ios::skipws);
        if ( encrypt )
        {
            std::transform(    std::istream_iterator<char>(cfi), std::istream_iterator<char>(),
                std::ostream_iterator<char>(cfo), charencrypt() );
        } else
        {
            std::transform(    std::istream_iterator<char>(cfi), std::istream_iterator<char>(),
                std::ostream_iterator<char>(cfo), chardecrypt() );
        }
    }

    cfi.close();
    cfo.close();

    return isok;
}

bool fileencrypt(const std::string& fni, const std::string& fno)
{
    return fencryption_(fni, fno, true);
}

bool filedecrypt(const std::string& fni, const std::string& fno)
{
    return fencryption_(fni, fno, false);
}



вот шифровка/дешифровка файла.
алгоритм меняйте по своему усмотрению

Это сообщение отредактировал(а) azesmcar - 30.4.2009, 17:37
PM   Вверх
Dmi3ev
Дата 30.4.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Код

fo.open("temp.txt",ios::app);

ios::app - открываем файл на добавление
если этого не писать, а писать просто
Цитата

fo.open("temp.txt");

то файл будет создаваться новый (пустой)



--------------------

PM MAIL   Вверх
zim22
Дата 30.4.2009, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



azesmcar,  зачем вы указываете флаги (in|out)? имхо, это лишнее. они и так открываются в соответствующих режимах.
Код

std::ifstream cfi(fni.c_str(), std::ifstream::in | std::ifstream::binary);
std::ofstream cfo(fno.c_str(), std::ifstream::out | std::ifstream::binary);



Это сообщение отредактировал(а) zim22 - 30.4.2009, 17:20


--------------------
PM MAIL   Вверх
azesmcar
Дата 30.4.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



zim22

Для наглядности.
PM   Вверх
zim22
Дата 30.4.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(azesmcar @  30.4.2009,  17:22 Найти цитируемый пост)
Для наглядности.

извините за мою придирчивость, но это тоже для наглядности?
Код

std::ofstream cfo(fno.c_str(), std::ifstream::out | std::ifstream::binary);

***
я имею ввиду, что флаги вы берёте с объекта ifstream, а создаёте объект ofstream

Это сообщение отредактировал(а) zim22 - 30.4.2009, 17:28


--------------------
PM MAIL   Вверх
azesmcar
Дата 30.4.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата

std::ofstream cfo(fno.c_str(), std::ifstream::out | std::ifstream::binary);

 smile нет, это результат copy-paste

Это сообщение отредактировал(а) azesmcar - 30.4.2009, 17:36
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0919 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.