Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <cstdlib>
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct Date {
- int day;
- int month;
- int year;
- };
- struct Worker {
- char name[10];
- char sname[20];
- Date date;
- char pos[10];
- int zarp;
- Worker* prev, * next;
- };
- Worker* InitList() //Первичная инициализация структуры
- {
- Worker* list = new Worker;
- //У нас буквально пока нет элементов, так что нулл
- list->prev = NULL;
- list->next = NULL;
- printf("Enter new record\n");
- printf("Enter name\n");
- cin >> list->name;
- printf("Enter sname\n");
- cin >> list->sname;
- printf("Enter day\n");
- cin >> list->date.day;
- printf("Enter month\n");
- cin >> list->date.month;
- printf("Enter year\n");
- cin >> list->date.year;
- printf("Enter pos\n");
- cin >> list->pos;
- printf("Enter day\n");
- cin >> list->zarp;
- return list;
- }
- Worker* Sort(Worker* Head) {
- Worker* q = Head;
- while (q) {
- if (q->next) {
- if (strcmp(q->sname, q->next->sname) > 0) {
- printf("\nSwapping %s %s\n", q->sname, q->next->sname);
- swap(q->name, q->next->name);
- swap(q->sname, q->next->sname);
- swap(q->date.day, q->next->date.day);
- swap(q->date.month, q->next->date.month);
- swap(q->date.year, q->next->date.year);
- swap(q->pos, q->next->pos);
- swap(q->zarp, q->next->zarp);
- }
- else {
- q = q->prev;
- }
- }
- else q = q->prev;
- }
- return Head;
- }
- Worker* AddElems(Worker* Head) //Добавление элементов в структуру
- {
- Worker* temp;
- int n = 0;
- cout << "Enter num of obj you want to add: ";
- do {
- cin >> n;
- if (n <= 0) "Please try again!\n";
- } while (n <= 0);
- for (int i = 0; i < n; i++) {
- temp = InitList();
- //Твикаем хуету, чтобы последний элемент был на последнем месте.
- temp->prev = Head;
- //И предпоследний ссылался на последний.
- Head->next = temp;
- Head = temp;
- }
- Head = Sort(Head);
- return Head;
- }
- Worker* AddFromFile(ifstream& in) //Initlist, но для файла.
- {
- Worker* list = new Worker;
- list->prev = NULL;
- list->next = NULL;
- in >> list->name;
- cout << list->name<<" ";
- in >> list->sname;
- cout << list->sname<<" ";
- in >> list->date.day;
- cout << list->date.day<<" ";
- in >> list->date.month;
- cout << list->date.month<<" ";
- in >> list->date.year;
- cout << list->date.year<<" ";
- in >> list->pos;
- cout << list->pos<<" ";
- in >> list->zarp;
- cout << list->zarp<<"\n";
- return list;
- }
- void PrintDuoList(Worker* Head) //Вывод элементов на консось
- {
- Worker* q = Head;
- printf("Elements of list is:\n");
- if (q) {
- //Опять же, идем с головы и до жопы.
- do
- {
- printf("%s %s %d %d %d %s %d\n", q->name, q->sname, q->date.day, q->date.month, q->date.year, q->pos, q->zarp);
- //Сдвигаем элемент на предыдущий.
- q = q->prev;
- } while (q); //Пока элемент вообще существует.
- }
- //На случай, если у нас не существует элементов.
- else {
- printf("\nList is empty \n");
- }
- }
- void OutDuoList(Worker* Head) //Тот же самый щит, что и для консоси, но в файл.
- {
- ofstream out("outOFF.txt");
- Worker* q = Head;
- printf("Saving to file....\n");
- if (!q) {
- printf("\nList is empty \n");
- }
- else {
- do
- {
- if (q->zarp < 1000)
- {
- out << q->name << " " << q->sname << " " << q->date.day << " " << q->date.month << " " << q->date.year << " " << q->pos << " " << q->zarp << "\n";
- }
- q = q->prev;
- } while (q);
- }
- out.close();
- }
- Worker* Readfromfile() { //Считывание с файла.
- ifstream in("OFFICE.txt");
- //Если этот файл вдруг не существует.
- if (!in)
- {
- printf("File not found");
- return 0;
- }
- //AddElems, но для файла.
- Worker* Head = NULL;
- Worker* temp;
- bool Switch = false;
- while (!in.eof()) { //Пока не конец файла.
- if (!Switch) {
- Head = AddFromFile(in);
- Switch = true;
- }
- else {
- temp = AddFromFile(in);
- temp->prev = Head;
- Head->next = temp;
- Head = temp;
- }
- }
- in.close();
- return Head;
- }
- void Monthout(Worker* Head) //Тот же самый щит, что и для консоси, но в файл.
- {
- ofstream out("Mout.txt");
- Worker* q = Head;
- printf("Saving to file....\n");
- if (!q) {
- printf("\nList is empty \n");
- }
- else {
- do
- {
- if (q->date.month == 3)
- {
- out << q->name << " " << q->sname << " " << q->date.day << " " << q->date.month << " " << q->date.year << " " << q->pos << " " << q->zarp << "\n";
- }
- q = q->prev;
- } while (q);
- }
- }
- int main() {
- Worker* Head = NULL;
- Worker* Tail = NULL;
- Head = Readfromfile();
- PrintDuoList(Head);
- Head = AddElems(Head);
- PrintDuoList(Head);
- OutDuoList(Head);
- Monthout(Head);
- system("exit");
- }
Add Comment
Please, Sign In to add comment