Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <stdio.h>
- struct sessiya
- {
- char name[20];
- char surname[20];
- char otch[20];
- int ist;
- int prog;
- int matem;
- int phis;
- int srznach;
- sessiya* next;
- sessiya* prev;
- };
- int SaveInt(bool one = false);
- sessiya* vvod(sessiya* List);
- sessiya* udalenie(sessiya* List);
- char* myStrCpy(char* str, int &start, char symbol_stop);
- int GetListSize(sessiya* List);
- sessiya* FindBookOnIndex(sessiya* List, UINT index);
- sessiya* ReadFile(const char* fileName);
- void WriteFile(const char* fileName, sessiya* List);
- sessiya* GetFirstElementList(sessiya* List);
- int main()
- {
- SetConsoleOutputCP(1251);
- SetConsoleCP(1251);
- int menu;
- sessiya* List = NULL;
- while (true)
- {
- printf("1.Ввод данных с клавиатуры\n2.Чтение данных из файла\n3.Удаление выбранного элемента массива\n4.Запись данных в файл\n5.Вывод данных\n6.Выход\nВаш выбор: ");
- menu = SaveInt(true);
- switch (menu)
- {
- case 1:
- List = vvod(List);
- break;
- case 2:
- {
- List = ReadFile("sessiya.txt");
- break;
- }
- case 3:
- List = udalenie(List);
- break;
- case 4:
- {
- WriteFile("sessiya.txt", List);
- }
- case 5:
- {
- sessiya* copyList = List;
- int index = 0;
- while(copyList != NULL)
- {
- if (copyList->srznach >= 4)
- {
- printf("_____________________\n%d-%s %s %s \nИстория: %d\nМатематика: %d\nПрограммирование: %d\nФизика: %d\nПолучает стипендию\n", index + 1, copyList->surname, copyList->name, copyList->otch, copyList->ist, copyList->matem, copyList->prog, copyList->phis);
- }
- else
- {
- printf("_____________________\n%d-%s %s %s \nИстория: %d\nМатематика: %d\nПрограммирование: %d\nФизика: %d\nНе получает стипендию\n", index + 1, copyList->surname, copyList->name, copyList->otch, copyList->ist, copyList->matem, copyList->prog, copyList->phis);
- }
- if(copyList->next != NULL)
- copyList = copyList->next;
- else
- copyList = NULL;
- index++;
- }
- }
- break;
- case 6:
- exit(1);
- default:
- break;
- }
- }
- return 0;
- }
- sessiya* ReadFile(const char* fileName) //Функция считывает структуры из файла в бинарном виде
- {
- FILE* f = fopen(fileName, "rb");
- sessiya* List = NULL;
- if(f == NULL)
- printf("Ошибка открытия файла!\n");
- else
- {
- fseek(f, 0, SEEK_END);
- long lSize = ftell(f);
- char* buffer = new char[lSize + 1];
- int ListSize = 0;
- rewind(f);
- if(fread(buffer, 1, lSize, f))
- {
- buffer[lSize] = '\0';
- for(int i = 0; i < lSize; i++)
- if(buffer[i] == '\n')
- ListSize++;
- int start = 0;
- for(int i = 0; i < ListSize; i++)
- {
- sessiya* newSessiya = new sessiya;
- char* temp = myStrCpy(buffer, start, ',');
- strcpy(newSessiya->surname, temp);
- delete[] temp;
- temp = myStrCpy(buffer, start, ',');
- strcpy(newSessiya->name, temp);
- delete[] temp;
- temp = myStrCpy(buffer, start, ',');
- strcpy(newSessiya->otch, temp);
- delete[] temp;
- temp = myStrCpy(buffer, start, ',');
- newSessiya->ist = atoi(temp);
- delete[] temp;
- temp = myStrCpy(buffer, start, ',');
- newSessiya->matem = atoi(temp);
- delete[] temp;
- temp = myStrCpy(buffer, start, ',');
- newSessiya->prog = atoi(temp);
- delete[] temp;
- temp = myStrCpy(buffer, start, '\n');
- newSessiya->phis = atoi(temp);
- delete[] temp;
- if(List != NULL)
- {
- List->next = newSessiya;
- newSessiya->prev = List;
- newSessiya->next = NULL;
- List = List->next;
- }
- else
- {
- List = newSessiya;
- List->next = NULL;
- List->prev = NULL;
- }
- }
- }
- }
- if(f != NULL)
- fclose(f);
- List = GetFirstElementList(List);
- printf("Из файла было считано %d Студентов и сохранены в список.\n", GetListSize(List));
- return List;
- }
- void WriteFile(const char* fileName, sessiya* List) //Функция записывает структуры в файл в бинарном виде
- {
- if(List == NULL)
- printf("Список пуст, нечего записывать в файл!\n");
- else
- {
- FILE* f = fopen(fileName, "wb");
- if(f == NULL)
- {
- printf("Ошибка открытия файла!\n");
- }
- else
- {
- rewind(f);
- sessiya* copyList = List;
- for(int i = 0; i < GetListSize(List); i++)
- {
- char string[10] = "";
- fwrite(copyList->surname, sizeof(char) * strlen(copyList->surname), sizeof(char), f);
- fwrite(",", 1, 1, f);
- fwrite(copyList->name, sizeof(char) * strlen(copyList->name), sizeof(char), f);
- fwrite(",", 1, 1, f);
- fwrite(copyList->otch, sizeof(char) * strlen(copyList->otch), sizeof(char), f);
- fwrite(",", 1, 1, f);
- itoa(copyList->ist, string, 10);
- fwrite(string, sizeof(char) * strlen(string), sizeof(char), f);
- fwrite(",", 1, 1, f);
- itoa(copyList->matem, string, 10);
- fwrite(string, sizeof(char) * strlen(string), sizeof(char), f);
- fwrite(",", 1, 1, f);
- itoa(copyList->prog, string, 10);
- fwrite(string, sizeof(char) * strlen(string), sizeof(char), f);
- fwrite(",", 1, 1, f);
- itoa(copyList->phis, string, 10);
- fwrite(string, sizeof(char) * strlen(string), sizeof(char), f);
- fwrite("\n", 1, 1, f);
- copyList = copyList->next;
- }
- }
- if(f != NULL)
- fclose(f);
- }
- printf("Было сохранено %d Студентов в файл.\n", GetListSize(List));
- }
- sessiya* GetFirstElementList(sessiya* List) //Функция возвращает первый элемент списка
- {
- sessiya* copyList = List;
- while(copyList->prev != NULL)
- copyList = copyList->prev;
- return copyList;
- }
- sessiya* FindBookOnIndex(sessiya* List, UINT index) //Функция поиска книги по индексу. Возвращает NULL если не нашёл;
- {
- sessiya* copyList = List;
- UINT i = 0;
- while(copyList != NULL && i != index)
- {
- copyList = copyList->next;
- i++;
- }
- return copyList;
- }
- int GetListSize(sessiya* List) //Возвращает длину списка
- {
- sessiya* copyList = List;
- int i = 0;
- while(copyList != NULL)
- {
- copyList = copyList->next;
- i++;
- }
- return i;
- }
- char* myStrCpy(char* str, int &start, char symbol_stop)
- {
- char* buffer = NULL;
- int bufferSize = 0;
- while(str[start + bufferSize] != symbol_stop)
- {
- bufferSize++;
- }
- buffer = new char[bufferSize + 1];
- for(int currentCursor = 0; currentCursor < bufferSize; currentCursor++)
- buffer[currentCursor] = str[start + currentCursor];
- buffer[bufferSize] = '\0';
- start += bufferSize + 1;
- return buffer;
- }
- int SaveInt(bool one)
- {
- char str[10];
- while(true)
- {
- scanf("%s", str);
- if(atoi(str))
- break;
- else
- printf("Введите значение n > 0: ");
- }
- if(one)
- {
- char arr[10];
- arr[0] = str[0];
- return atoi(arr);
- }
- else
- return atoi(str);
- }
- sessiya* vvod(sessiya* List)
- {
- sessiya* copyList = NULL;
- if(List != NULL)
- {
- copyList = List;
- while(copyList->next != NULL)
- copyList = copyList->next;
- }
- sessiya* newSessiya = new sessiya;
- printf("Введите фамилию: ");
- scanf("%s", newSessiya->surname);
- printf("Введите имя: ");
- scanf("%s", newSessiya->name);
- printf("Введите отчество: ");
- scanf("%s", newSessiya->otch);
- printf("Введите оценку по истории: ");
- newSessiya->ist = SaveInt(true);
- printf("Введите оценку по математике: ");
- newSessiya->matem = SaveInt(true);
- printf("Введите оценку по программированию: ");
- newSessiya->prog = SaveInt(true);
- printf("Введите оценку по физике: ");
- newSessiya->phis = SaveInt(true);
- newSessiya->srznach = ((newSessiya->matem + newSessiya->ist + newSessiya->phis + newSessiya->prog) / 4);
- if(List != NULL)
- {
- copyList->next = newSessiya;
- newSessiya->prev = copyList;
- newSessiya->next = NULL;
- }
- else
- {
- List = newSessiya;
- newSessiya->next = NULL;
- newSessiya->prev = NULL;
- }
- return List;
- }
- sessiya* udalenie(sessiya* List)
- {
- printf("Введите номер элемента массива для удаления: ");
- int ud = SaveInt();
- sessiya* deletedSessiya = FindBookOnIndex(List, ud - 1);
- if(deletedSessiya == NULL)
- {
- printf("Элемент не найден...\n");
- }
- else
- {
- if(deletedSessiya->prev != NULL && deletedSessiya->next != NULL)
- {
- deletedSessiya->prev->next = deletedSessiya->next;
- deletedSessiya->next->prev = deletedSessiya->prev;
- }
- else
- {
- if(deletedSessiya->prev != NULL)
- deletedSessiya->prev->next = NULL;
- else
- if(deletedSessiya->next != NULL)
- deletedSessiya->next->prev = NULL;
- else
- List = NULL;
- }
- delete deletedSessiya;
- }
- return List;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement