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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Проверить является ли граф циклом http://www.cyberforum.ru/cpp-beginners/thread1641633.html
Добрый день, форумчане. Помогите пожалуйста со следующей задачей: Дан ориентированный граф из n узлов и m рёбер. Проверить, является ли он циклом. Программу в с++. Вообще с информатикой у меня крайне плохо, поэтому прошу закомментировать код.
C++ Метод Якоби Ребят помогите реализовать метод Якоби по алгоритму (находится во вложениях) проблема с циклами (не стал выкладывать)доп требование это вывести итерации работаю в dev c++ #include <iostream> #include<conio.h> #include<iostream> #include<math.h> using namespace std; int main() http://www.cyberforum.ru/cpp-beginners/thread1641625.html
C++ Найти ошибки в реализации пользовательской фунции erase()
Написал код реализации(часть сам писал, часть подсмотрел в других темах). Ер есть баги. Подскажите где не правильноtemplate <typename T, typename Allocator> typename Vector<T, Allocator>::iterator Vector<T, Allocator>::erase(iterator position) { for (int index = 0; index < size(); ++index) { if (&(array) == position) { if (m_size == 1) { array = T();
Передача структуры в подпрограму C++
Здравствуйте,задание дано так: Создайте структуру для сохранения информации про матрицу (динамическая,многомерная); Напишите функции для выделение памяти под массив, ввод и вывод данных; немного подумал вот что получилось: #include "stdafx.h" #include <iostream> using namespace std; struct matr {
C++ Delete this без падения http://www.cyberforum.ru/cpp-beginners/thread1641593.html
Добрый день, написал hello world, когда класс выполняя свой же метод просит удалить его - почему все компиляторы http://rextester.com/ это компилят и ничего не падает? Мы находясь внутри метода удаляем себя, и далее можем/неможем обратиться к своим полям. #include <iostream> #include <vector> using namespace std;
C++ Транспонирование матриц и сумма положительных элементов по строкам Помогите разработать программу формирование матриц А(3х3) и С(4х4) путем транспонирования заданных начальными значениями матриц В(3х3) и F(4х4). Вывести матрицы и суммы положительных элементов по строкам в новых матрицах на экран. подробнее

Показать сообщение отдельно
mercurygermes
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 179
18.01.2016, 15:31     Как сделать ввод данных в файл с использованием связанного списка
у меня есть односторонний связанный список который расставляет данные в порядке увеличения.
данные это порядковый номер персонала.
проблема заключается в том чтобы данные записывались в файл именно по принципу связанного списка. в порядке возрастания 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";
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru