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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mercurygermes
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 179
#1

Как сделать ввод данных в файл с использованием связанного списка - C++

18.01.2016, 15:31. Просмотров 196. Ответов 3
Метки c++ (Все метки)

у меня есть односторонний связанный список который расставляет данные в порядке увеличения.
данные это порядковый номер персонала.
проблема заключается в том чтобы данные записывались в файл именно по принципу связанного списка. в порядке возрастания 1,3,5,6,7 и т.д.
данные в файл записываются, но в хаотичном порядке.
но как это реализовать пока не знаю.
также буду рад, если оцените мой код и скажите примерно на каком уровне програмирования я нахожусь.
соответствую ли я junior уровню.
учусь около четырех месяцев.
спасибо заранее за помощь

вот исходный код:

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
#include <iostream>
#include <string>
#include<fstream>
typedef unsigned short USHORT;
using namespace std;
#include "данные.h"
#include "связанный список.h"
#include "ввод и вывод данных.h"
 
 
void Interface()
{
 
 
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    Data personal;
    bool OnOf = true;
    
 
    while (OnOf)
    {
        short selection;
        cout << "Выберите операцию - (1)Ввод данных, (2) Чтение данных, (3) Очистка файла. (0) Выход\n";
        cin >> selection;
        //выбор операции файла.
        switch (selection)
        {
        case 1:personal.SpisokPersonal(); break;
        case 2:personal.SetFileName(); personal.Readfile(); break;
        case 3:personal.SetFileName(); personal.CleanFile(); break;
        case 0:  OnOf = false; break;
        default:continue;
        }
         
    }
    
    
    
    system("pause");
    return 0;
}
заголовочный файл - данные:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//класс данных персонала
 
class Employee
{
public:
    Employee();
    
    Employee(char *, char *, char *, long, long);
    ~Employee();
    Employee(const Employee&);
    Employee & operator=(const Employee &);
    long Compare(const Employee &);
    virtual void Display()const
    {   
        cout << "*****************************\n";
        cout.setf(ios::left);
        cout << " Номер персонала: \t\a"<< ItsNumberPersonal << endl;
        cout << " Имя: \t" << ItsFirstName << endl;
        cout << " Фамилия: \t" << ItsLastName << endl;
        cout << " Адресс: \t" << ItsAddress << endl;
        cout << " Зарплата: \t" << ItsSalary << endl;
        cout << "*****************************\n";
        cout << "\n";
    }
 
    //Функции вывода инфорамации 
    const string   & GetFirstName()const
    {
        return ItsFirstName;
    }
    const string  & GetLastName()const
    {
        return ItsLastName;
    }
    const  string & GetAddress()const
    {
        return ItsAddress;
    }
    long GetSalary()const
    {
        return ItsSalary;
    }
    long GetNumberPersonal()const
    {
         return ItsNumberPersonal;
    }
 
 
    //Функции Ввода информации.
    void  SetFirstName(const string & FName)
    {
        ItsFirstName = FName;
    }
    void SetLastName(const string & LName)
    {
        ItsLastName = LName;
    }
    void SetAddress(const string & address)
    {
        ItsAddress = address;
    }
    void SetSalary(long salary)
    {
        ItsSalary = salary;
    }
    void SetNumberPersonal(long numberpersonal)
    {
        ItsNumberPersonal = numberpersonal;
    }
private:
    string ItsFirstName;
    string ItsLastName;
    string ItsAddress;
    long ItsSalary;
    long ItsNumberPersonal;
};
 
 
 
Employee::Employee() :
ItsFirstName(" "),
ItsLastName(" "),
ItsAddress(" "),
ItsSalary(0),
ItsNumberPersonal(1)
{}
 
 
Employee::Employee(char  * firstName, char * lastName, char * address, long salary,long numberPersonal) :
ItsFirstName(firstName),
ItsLastName(lastName),
ItsAddress(address),
ItsSalary(salary),
ItsNumberPersonal(numberPersonal)
{}
 
Employee::Employee(const Employee & rhs) :
ItsFirstName(rhs.GetFirstName()),
ItsLastName(rhs.GetLastName()),
ItsAddress(rhs.GetAddress()),
ItsSalary(rhs.GetSalary()),
ItsNumberPersonal(rhs.GetNumberPersonal())
{}
Employee::~Employee(){}
Employee & Employee::operator= (const Employee & rhs)
{
    if (this == &rhs)
    {
        return *this;
    }
    ItsFirstName = rhs.GetFirstName();
    ItsLastName = rhs.GetLastName();
    ItsAddress = rhs.GetAddress();
    ItsSalary = rhs.GetSalary();
    ItsNumberPersonal = rhs.GetNumberPersonal();
 
    return *this;
}
заголовочный файл - связанный список:

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//Шаблон связанного списка.
// константные перечисления для определения местоположения данных, в связаном списке.
enum { KisSmaller, KisLarger, KisSame };
 
///сами данные и функция сравнения.
long Employee::Compare(const  Employee & TheOtheNumber)
{
    if (ItsNumberPersonal < TheOtheNumber.ItsNumberPersonal)
    {
        return KisSmaller;
    }
    else if (ItsNumberPersonal> TheOtheNumber.ItsNumberPersonal)
        return KisLarger;
 
    else
        return KisSame;
}
 
 
template<class T_Spisok>
//чистый виртуальный класс ADT.
class Node
{
public:
    Node(){}
    virtual ~Node(){}
    //чиста виртуальная а функция сравнения.
    virtual Node * pInsert(T_Spisok * TheObject) = 0;
//чиста виртуальная функция отображения
    virtual void Display()const = 0;
private:
};
 
template<class T_Spisok>
//Внутрений узел. здесь храняться адрес расположения данных
class InternalNode : public Node<T_Spisok>
{
public:
    InternalNode(T_Spisok * TheObject, Node<T_Spisok> * next);
 
    virtual ~InternalNode(){ delete T_MyNext, delete T_MyOblect; }
    //виртуальная функция отображения адрессов, расположения данных.
    virtual void Display()const
    {
        T_MyOblect->Display(); T_MyNext->Display();
    }
    virtual Node<T_Spisok> * pInsert(T_Spisok * TheObject);
private:
    T_Spisok * T_MyOblect;
    Node<T_Spisok> * T_MyNext;
};
template<class T_Spisok>
InternalNode<T_Spisok>::InternalNode(T_Spisok * TheObject, Node<T_Spisok> * next) :
T_MyOblect(TheObject),
T_MyNext(next)
{}
 
template <class T_Spisok>
 
// функция распределения данных.
Node<T_Spisok> * InternalNode<T_Spisok>::pInsert(T_Spisok * TheObject)
{
    long result = T_MyOblect->Compare(*TheObject);
    switch (result)
    {
    case KisSame:
    case KisLarger:
    {
                      InternalNode<T_Spisok> * ObjectNode = new  InternalNode<T_Spisok>(TheObject, this);
                      return ObjectNode;
    }
    case KisSmaller:
        T_MyNext = T_MyNext->pInsert(TheObject);
        return this;
 
        
    }
    return this;
}
template <class T_Spisok>
class TailNode :public Node<T_Spisok>
{
public:
    TailNode(){}
    virtual ~TailNode(){}
    virtual Node<T_Spisok>  * pInsert(T_Spisok * TheObject);
    virtual void Display() const { }
private:
 
};
template <class T_Spisok>
Node<T_Spisok> * TailNode<T_Spisok>::pInsert(T_Spisok * TheObject)
{
    InternalNode<T_Spisok> * ObjectNode = new InternalNode<T_Spisok>(TheObject, this);
    return ObjectNode;
}
template <class T_Spisok>
    class HeadNode :public Node<T_Spisok>
{
public:
    HeadNode();
    virtual ~HeadNode(){ delete T_MyNext; }
    virtual Node<T_Spisok> * pInsert(T_Spisok * TheObject);
    virtual void Display()const { T_MyNext -> Display(); }
private:
    Node<T_Spisok> * T_MyNext;
};
    template <class T_Spisok>
    HeadNode<T_Spisok>::HeadNode()
{
        T_MyNext = new TailNode<T_Spisok>;
}
    template <class T_Spisok>
 
    Node<T_Spisok> * HeadNode<T_Spisok>::pInsert(T_Spisok * TheObject)
{
    T_MyNext = T_MyNext->pInsert(TheObject);
    return this;
 
}
    template <class T_Spisok>
class LinkedList
{
public:
    LinkedList();
    ~LinkedList(){ delete MyHead; }
    void Insert(T_Spisok * TheObject);
    void ShowAll(){ MyHead->Display(); }
private:
    HeadNode<T_Spisok> * MyHead;
};
 
template <class T_Spisok>
LinkedList<T_Spisok>::LinkedList()
{
    MyHead = new HeadNode<T_Spisok>;
}
template <class T_Spisok>
void LinkedList<T_Spisok>::Insert(T_Spisok * TheObject)
{
    MyHead->pInsert(TheObject);
}
заголовочный файл - ввод и вывод данных:

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
class Data
{
public:
    
    void SpisokPersonal();
    void Readfile();
    //очистка содержимого файла
    void CleanFile()
    {
        ofstream fout(ItsDataFileName,ios::trunc);
    }
    void SetFileName(){ ItsDataFileName = "файл данных персонала: \n"; }
    
private:
    string ItsDataFileName;
};
//Ввод данных 
void Data::SpisokPersonal()
{
    Employee * pEmployee;
    long val, salary;
    //данные подключенные к шаблону связанного списка
    LinkedList<Employee> List;
    string firsName, lastName, address;
    char address2[31];
    string buffer, filename = "файл данных персонала: \n"; // инициализация переменной filename названием файла
 
    //отерытие файла с возможностью вводить данные в конце файла
    ofstream fout(filename, ios::app);
    //если файл равно нулю, то выйдет сообщение об открытии нового файла
    if (!fout)
    {
        cout << "Unable to open " << filename << " for appending. \n";
 
    }
    for (;;)
    {
 
        cout << "Введите номер персонала (0 стоп): ";
        (cin >> val).get();
        if (!val)
            break;
        cout << endl;
        cout << "Введите имя работника: ";
        cin >> firsName;
 
        cout << endl;
        cout << "Введите фамилию работника: ";
        cin >> lastName;
        cout << endl;
        cout << "Введите адресс работника: ";
        cin.ignore(30, '\n');
        cin.getline(address2, 30);
        address = address2;
        cout << endl;
        cout << "Введите зарплату работника: ";
        (cin >> salary).get();
        cout << endl;
        pEmployee = new Employee(" none", "none", "usa sexy", salary, val);
 
        pEmployee->SetFirstName(firsName);
        pEmployee->SetLastName(lastName);
        pEmployee->SetAddress(address);
        pEmployee->SetSalary(salary);
        pEmployee->SetNumberPersonal(val);
 
        ///Ввод данных в файл!
        fout << "*****************************\n";
        fout << "Номер персонала: \t" << val << endl;
        fout << "Имя: \t" << firsName << endl;
        fout << " Фамилия: \t" << lastName << endl;
        fout << " Адресс: \t" << address << endl;
        fout << " Зарплата: \t" << salary << endl;
        fout << "*****************************\n";
        fout << endl;
 
 
        //передача данных в связанный список.
        List.Insert(pEmployee);
        //инициализация файла именем
        ItsDataFileName = filename;
        
 
    }
    fout.close();
 
    system("cls");
 
    List.ShowAll();
    
}
 
//чтение файла
void Data::Readfile()
{
    
    char ch;
    ifstream fin(ItsDataFileName);
    if (fin)
    {
        cout << "curent file contents: \n";
 
        char ch;
        while (fin.get(ch))
            cout << ch;
        cout << "\n*** end of  file contents***\n";
    }
    fin.close();
    cout << "\n Opening " << ItsDataFileName << "in append mode...\n";
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2016, 15:31     Как сделать ввод данных в файл с использованием связанного списка
Посмотрите здесь:
ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хра-нилище данных в файле). C++
C++ Как наиболее быстро определить зацикливание связанного списка? (a => b => c => d => e => a)
Как правильно создать двумерный массив указателей с использованием calloc? и ввод данных в него C++
Как сделать ввод данных двумерного массива с файла? C++
Окончание связанного списка C++
Удаление элемента из связанного списка C++
C++ Стек на основе связанного списка C++
C++ Проблемы с удалением связанного списка(С++)
C++ Ввод данных с использованием стрелок на клавиатуре
Ввод данных с использованием argv и argc C++
Реализация очереди на основе связанного списка C++
Реализация связанного списка - нужны пояснения C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mercurygermes
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 179
21.01.2016, 14:58  [ТС]     Как сделать ввод данных в файл с использованием связанного списка #2
решение я нашел. )))
если кому нужен код, могу выдать
zss
Модератор
Эксперт С++
6282 / 5885 / 1905
Регистрация: 18.12.2011
Сообщений: 15,096
Завершенные тесты: 1
21.01.2016, 15:07     Как сделать ввод данных в файл с использованием связанного списка #3
mercurygermes, Не надо ждать, когда код понадобится.
Опубликуйте решение, т.к. неизвестно через сколько лет оно может пригодиться.
Следуйте П.4.11.Правил
"Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ."
mercurygermes
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 179
22.01.2016, 15:31  [ТС]     Как сделать ввод данных в файл с использованием связанного списка #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
virtual void Display()const
    {   
        string filename = "файл данных персонала: \n"; // инициализация переменной filename названием файла
 
        //отерытие файла с возможностью вводить данные в конце файла
        ofstream fout(filename, ios::app);
        
        if (!fout)
        {
            cout << "Unable to open " << filename << " for appending. \n";
 
        }
        else
 
        {
 
 
            cout << "*****************************\n";
            cout << " Номер персонала: \t\a";
            cout << ItsNumberPersonal << endl;
            cout << " Имя: \t" << ItsFirstName << endl;
            cout << " Фамилия: \t" << ItsLastName << endl;
            cout << " Адресс: \t" << ItsAddress << endl;
            cout << " Зарплата: \t" << ItsSalary << endl;
            cout << "*****************************\n";
            cout << "\n";
 
            ///Ввод данных в файл!
            fout << "*****************************\n";
            fout << "Номер персонала: \t" << ItsNumberPersonal << endl;
            fout << "Имя: \t" << ItsFirstName << endl;
            fout << " Фамилия: \t" << ItsLastName << endl;
            fout << " Адресс: \t" << ItsAddress << endl;
            fout << " Зарплата: \t" << ItsSalary << endl;
            fout << "*****************************\n";
            fout << endl;
            fout.close();
        }
    }
полный код:

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//класс данных персонала
 
class Employee
{
public:
    Employee();
    
    Employee(char *, char *, char *, long, long);
    ~Employee();
    Employee(const Employee&);
    Employee & operator=(const Employee &);
    long Compare(const Employee &);
    virtual void Display()const
    {   
        string filename = "файл данных персонала: \n"; // инициализация переменной filename названием файла
 
        //отерытие файла с возможностью вводить данные в конце файла
        ofstream fout(filename, ios::app);
        
        if (!fout)
        {
            cout << "Unable to open " << filename << " for appending. \n";
 
        }
        else
 
        {
 
 
            cout << "*****************************\n";
            cout << " Номер персонала: \t\a";
            cout << ItsNumberPersonal << endl;
            cout << " Имя: \t" << ItsFirstName << endl;
            cout << " Фамилия: \t" << ItsLastName << endl;
            cout << " Адресс: \t" << ItsAddress << endl;
            cout << " Зарплата: \t" << ItsSalary << endl;
            cout << "*****************************\n";
            cout << "\n";
 
            ///Ввод данных в файл!
            fout << "*****************************\n";
            fout << "Номер персонала: \t" << ItsNumberPersonal << endl;
            fout << "Имя: \t" << ItsFirstName << endl;
            fout << " Фамилия: \t" << ItsLastName << endl;
            fout << " Адресс: \t" << ItsAddress << endl;
            fout << " Зарплата: \t" << ItsSalary << endl;
            fout << "*****************************\n";
            fout << endl;
            fout.close();
        }
    }
 
    //Функции вывода инфорамации 
    const string   & GetFirstName()const
    {
        return ItsFirstName;
    }
    const string  & GetLastName()const
    {
        return ItsLastName;
    }
    const  string & GetAddress()const
    {
        return ItsAddress;
    }
    long GetSalary()const
    {
        return ItsSalary;
    }
    long GetNumberPersonal()const
    {
         return ItsNumberPersonal;
    }
 
 
    //Функции Ввода информации.
    void  SetFirstName(const string & FName)
    {
        ItsFirstName = FName;
    }
    void SetLastName(const string & LName)
    {
        ItsLastName = LName;
    }
    void SetAddress(const string & address)
    {
        ItsAddress = address;
    }
    void SetSalary(long salary)
    {
        ItsSalary = salary;
    }
    void SetNumberPersonal(long numberpersonal)
    {
        ItsNumberPersonal = numberpersonal;
    }
private:
    string ItsFirstName;
    string ItsLastName;
    string ItsAddress;
    long ItsSalary;
    long ItsNumberPersonal;
};
 
 
 
Employee::Employee() :
ItsFirstName(" "),
ItsLastName(" "),
ItsAddress(" "),
ItsSalary(0),
ItsNumberPersonal(1)
{}
 
 
Employee::Employee(char  * firstName, char * lastName, char * address, long salary,long numberPersonal) :
ItsFirstName(firstName),
ItsLastName(lastName),
ItsAddress(address),
ItsSalary(salary),
ItsNumberPersonal(numberPersonal)
{}
 
Employee::Employee(const Employee & rhs) :
ItsFirstName(rhs.GetFirstName()),
ItsLastName(rhs.GetLastName()),
ItsAddress(rhs.GetAddress()),
ItsSalary(rhs.GetSalary()),
ItsNumberPersonal(rhs.GetNumberPersonal())
{}
Employee::~Employee(){}
Employee & Employee::operator= (const Employee & rhs)
{
    if (this == &rhs)
    {
        return *this;
    }
    ItsFirstName = rhs.GetFirstName();
    ItsLastName = rhs.GetLastName();
    ItsAddress = rhs.GetAddress();
    ItsSalary = rhs.GetSalary();
    ItsNumberPersonal = rhs.GetNumberPersonal();
 
    return *this;
}
Yandex
Объявления
22.01.2016, 15:31     Как сделать ввод данных в файл с использованием связанного списка
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru