Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <stddef.h>
- #include <stdio.h>
- #include <time.h>
- #define BUFFER 2
- struct TInfo
- {
- char name[31]; // название изделия
- char gender[31]; // тип(мужская, женская или детская) изделия
- char season[31]; // сезон изделия
- char color[31]; // цвет изделия
- int size, // размер изделия
- price; // количество изделий, имеющееся в наличии
- };
- struct TQueue
- {
- char fname[31]; //имя файла
- int Head; //начало
- int Tail; //конец
- FILE* f;
- };
- bool IsEmpty(TQueue queue); //проверка на пустоту
- void InitializeQueue(TQueue& queue); //инициализация
- void AddToTail(TQueue& queue, TInfo info);
- void Print(TQueue queue, FILE*& f);
- TInfo TakeFromHead(TQueue& queue);
- void Print(TQueue queue, FILE*& f);
- bool IsEmpty(TQueue queue) //проверка на пустоту
- {
- if (queue.Tail < queue.Head)
- return true;
- else
- return false;
- }
- void InitializeQueue(TQueue& queue)
- {
- srand(time(NULL));
- for (int i = 0; i < 31; i++)
- {
- queue.fname[i] = '\0';
- }
- for (int i = 0; i < 10; i++)
- {
- queue.fname[i] = (char)(rand() % 26 + 64); //создаем случайное название файла
- }
- strcat(queue.fname, ".bin");
- queue.f = fopen(queue.fname, "w+b");
- queue.Head = 0;
- queue.Tail = queue.Head - sizeof(TInfo);
- fclose(queue.f);
- }
- void AddToTail(TQueue& queue, TInfo info)
- {
- queue.f = fopen(queue.fname, "r+b");
- queue.Tail += sizeof(TInfo);
- fseek(queue.f, queue.Tail, SEEK_SET);
- fwrite(&info, sizeof(TInfo), 1, queue.f);
- fclose(queue.f);
- }
- TInfo TakeFromHead(TQueue& queue)
- {
- if (!IsEmpty(queue))
- {
- TInfo buff;
- queue.f = fopen(queue.fname, "r+b");
- fseek(queue.f, queue.Head, SEEK_SET);
- fread(&buff, sizeof(TInfo), 1, queue.f);
- queue.Head += sizeof(TInfo);
- if (queue.Head >= BUFFER * sizeof(TInfo))
- {
- TInfo tmp;
- for (int i = queue.Head; i <= queue.Tail; i += sizeof(TInfo))
- {
- fseek(queue.f, i, SEEK_SET);
- fread(&tmp, sizeof(TInfo), 1, queue.f);
- fseek(queue.f, 0 - (BUFFER + 1) * sizeof(TInfo), SEEK_CUR);
- fwrite(&tmp, sizeof(TInfo), 1, queue.f);
- }
- queue.Tail = -queue.Head + queue.Tail;
- queue.Head = 0;
- }
- fclose(queue.f);
- return buff;
- }
- }
- void Print(TQueue queue, FILE*& f)
- {
- queue.f = fopen(queue.fname, "r+b");
- fseek(queue.f, queue.Head, SEEK_SET);
- for (int i = queue.Head; i <= queue.Tail; i += sizeof(TInfo))
- {
- TInfo buff;
- fread(&buff, sizeof(TInfo), 1, queue.f);
- fprintf(f, "%31s%31s%31s%31s%5d%8d\n", buff.name, buff.gender, buff.season, buff.color, buff.size, buff.price);
- }
- fprintf(f, "\n\n");
- fclose(queue.f);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement