Форум программистов, компьютерный форум CyberForum.ru

Мини База Данных фамилий с проверкой - C++

Восстановить пароль Регистрация
 
firstgm
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 3
28.01.2012, 05:27     Мини База Данных фамилий с проверкой #1
Здравствуйте!
Помогите пожалуйста написать простую программку на С++ очень буду благодарен!

Задание такое:
Существует текстовый файл, в нем какие то фамилии например: (Иванов, Петров)
В консоли вводим фамилию на русском, если введенная фамилия уже существует в текстовом файле выводим сообщение, что такая уже есть, если такой фамилии нет, добавляет ее в конец списка текстового файла.

Заранее большое всем спасибо, кто хоть как то поможет!

С уважением, firstgm
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2012, 05:27     Мини База Данных фамилий с проверкой
Посмотрите здесь:

база данных C++
C++ Мини база данных :)
C++ База данных
проблема с проверкой вводимых данных C++
C++ База данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
28.01.2012, 16:56     Мини База Данных фамилий с проверкой #2
Воспользоваться контейнером std::set. Даже проверять не надо.
Для удобства, можно заключить работу с набором записей в класс.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <set>
 
template <class Record>
class SetStorage {
 public:
  SetStorage(const std::string &fileName)
    : fileName_(fileName), records_() {
    readAll();
  }
  void save() { writeAll(); }
  bool empty() const { return records_.empty(); }
  size_t size() const { return records_.size(); }
  void insert(const Record &record) {
    records_.insert(record);
  }
  void erase(const Record &record) {
    records_.erase(record);
  }
  bool has(const Record &record) {
    return records_.find(record) != end();
  }
  typename std::set<Record>::iterator begin() { return records_.begin(); }
  typename std::set<Record>::const_iterator begin() const { return records_.begin(); }
  typename std::set<Record>::iterator end() { return records_.end(); }
  typename std::set<Record>::const_iterator end() const { return records_.end(); }
 private:
  void readAll() {
    std::ifstream file(fileName_.c_str());
    records_.clear();
    std::copy(std::istream_iterator<Record>(file),
      std::istream_iterator<Record>(), std::inserter(records_,
      records_.end()));
  }
  void writeAll() const {
    std::ofstream file(fileName_.c_str());
    std::copy(records_.begin(), records_.end(),
      std::ostream_iterator<Record>(file, "\n"));
  }
  std::string fileName_;
  std::set<Record> records_;
};
 
int main(int argc, char *argv[]) {
  SetStorage<std::string> fileStorage("tutor0083.txt");
  
  fileStorage.insert("Ivanov");
  fileStorage.insert("Petrov");
  fileStorage.insert("Sidorov");
 
  std::copy(fileStorage.begin(), fileStorage.end(),
    std::ostream_iterator<std::string>(std::cout, "\n"));
    
  fileStorage.save();
}
firstgm
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 3
29.01.2012, 00:50  [ТС]     Мини База Данных фамилий с проверкой #3
Большое спасибо за ответ! Только можно ли сделать, чтоб в консоли вводить фамилию и если ее нет в списке текстового файла, она туда добавлялась ? А то сейчас консоль сама закрывается почему то сразу, а фамилии те что в коде записывает это хорошо, но чуть чуть не то.
Я очень мало разбираюсь в С++ но мне казалось, что код будет выглядеть как то попроще )
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
29.01.2012, 13:48     Мини База Данных фамилий с проверкой #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <fstream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
 
std::istream& RightShift(std::istream& is, char* const buf)
{
    is >> buf;
    OemToCharA(buf, buf);
    return is;
}
 
int main()
{
    const char* const filePath = "1.txt";
    std::fstream fs(filePath, std::ios::in);
    if(fs)
    {
        std::vector<std::string> v((std::istream_iterator<std::string>(fs)), std::istream_iterator<std::string>());
        fs.clear();
        fs.close();
        char buf[BUFSIZ];
        std::cout << "Print \"exit\" to exit\n";
        while(true)
        {
            RightShift(std::cin, buf);
            if("exit" == std::string(buf)) break;
            if(std::find(v.begin(), v.end(), buf) == v.end())
            {
                v.push_back(buf);
                std::cout << "Added\n";
            }
            else std::cout << "Already present\n";
        }
        fs.open(filePath, std::ios::out);
        if(fs)
        {
            std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(fs, "\n"));
        }
        else std::cerr << "Can't open out file\n";
    }
    else std::cerr << "Can't open in file\n";
    fs.close();
    return 0;
}
firstgm
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 3
30.01.2012, 00:14  [ТС]     Мини База Данных фамилий с проверкой #5
Ругает 1-ю строчку - закоментировал ее //#include "stdafx.h"
запустилось, но консоль все равно почему то сразу закрывается...
Компиляция идет, все вроде норм, но консоль закрывается сразу же.
Yandex
Объявления
30.01.2012, 00:14     Мини База Данных фамилий с проверкой
Ответ Создать тему
Опции темы

Текущее время: 21:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru