Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > База данных


Автор: Pascal2015 14.1.2016, 00:32
Помогите найти ошибки и дописать программу
Особенности - условие задачи является внедрение трех функций
- insert - вставить новую строку (запись) в системе со всей информацией,
-find - указано количество столбцов, по которым она ищет
-номера столбцов считаются от 0
- параметр функции является тип в соответствии с выбранной колонкой
- возвращает список строк из системы (желательно ссылки (pointer*) const...) по
ключам поиска в этом столбце
-erase - снова указано количество столбцов
- параметр введен правильно по колонкам
-удаляет все записи, для которых данное положение совпадает с параметром
запись значения
- возвращает количество удаленных строк
Код



#include<iostream>
#include<vector>
#include<string>
using namespace std;



    enum position { student, teacher, external_worker };
    int main(){
    class inf_system {
        //first name, last name, position, telephone, address
        typedef tuple<string, string, position, size_t, string> row_def;
        typedef const row_def * row_def_const_ptr;
        template<size_t idx>
        using type = typename tuple_element<idx, row_def>::type;
        void insert(const string& first_name, const string& last_name,
            const position& position, const size_t& telephone, const string& address);
        template<size_t idx>
        vector<row_def_const_ptr> find(const type<idx>& value);
        template<size_t idx>
        size_t erase(const type<idx>& value) { ... }
    };
    
        
        inf_system inf_system;
        int main(){
        inf_system.insert("Prokofjev", "Shaldybin", student, 507 - 66 - 87, "Azovska 1, Moskva");
        inf_system.insert("Prokofjev", "Artem", student, 269 - 85 - 85, "Glinky 27, Fevralskoye");
        inf_system.insert("Rusov", "Solomon", teacher, 598 - 87 - 43, "Baumanskaja 11, Takhtamukay");
        inf_system.insert("Dmitrieva", "Alina", teacher, 598 - 21 - 47, "Avanhard 3, Chaplygin");
        inf_system.insert("Gorodnova", "Viktoria", teacher, 517 - 31 - 23, "Baumanskaja 43, Takhtamukay");
        auto result = inf_system.find<2>(student);
        print_vector(result);
        auto count = inf_system.erase<1>("Prokofjev");
        

    void print_vector(const vector<inf_system::row_def_const_ptr>& vector) {
        for (const auto& r : vector) {
            cout << get<0>(*r) << " " << get<1>(*r) << " " << get<2>(*r) <<
                " " << get<3>(*r) << " " << get<4>(*r) << endl;
        }
        cout << inf_system.find<< endl;
        system("pause");
        return 0;
    }




Автор: xvr 15.1.2016, 15:59
Мешанина знатная  smile 
Для начала добейтесь, что бы оно хотя бы откомпилировалось.

Ошибки:
  • Строка 9 лишняя
  • В классе inf_system все внутренности приватные, т.ч. практическое использование его невозможно
  • В методе inf_system::insert параметр telephone описан как size_t - вы что, размер телефона вводите???
  • Функция main не завершена (как синтаксически, так и логически)

Автор: baldman88 15.1.2016, 17:37
Да и способ задания номера весьма нетривиален  smile 
Где реализации методов класса system_inf?
Нельзя создавать переменные с именем в точности аналогичным имени типа (строка 25).
В строке 42 что вы хотите вывести? Откуда функции print_vector(...) знает что такое system_inf? Даже если это экземпляр вашего класса, то у него нет поля find (есть метод, но это уже другое, да и вектор так не выведется).
А вообще да -- трэшь и угар в лучших традициях Тарантино и Родригеса  smile 

Автор: korol 4.3.2016, 13:10
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)