Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [B]Stilet[/B], ничего не так же, я попробовал осуществить свой план, но все равно ВСЕ нужно переделывать.
- Если все же будут идеи, напишите.
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <string.h>
- #include <conio.h>
- #define N 20
- struct city
- {
- char name_f[80];
- char name_p[80];
- char date[12];
- char type; //1 - взрослый, 0 - детский
- union
- {
- char adult[15];
- char child[15];
- }type1;
- struct city *next;
- struct city *previous;
- };
- struct city *head=NULL;
- struct city *last=NULL;
- struct city *current=NULL; //текущий элемент
- struct city *temp=NULL;
- struct city *newList=NULL;
- typedef struct city DataType;
- struct list // Основная структура
- {
- DataType data;
- struct list *next;
- //struct city *head=NULL;
- };
- /* добавление */
- void add_name(void)
- {
- newList = (struct city *) malloc(sizeof(struct city));
- printf("Название театра\n");
- scanf_s("%s", newList->name_f);
- printf("Название представления\n");
- scanf_s("%s", newList->name_p);
- printf("Дата представления\n");
- scanf_s("%s", newList->date);
- printf("Жанр (1) - шоу для взрослых, (0) - детский\n");
- scanf_s("%d",&newList->type);
- if (newList->type)
- {
- printf("Введите жанр шоу для взрослых\n");
- scanf_s("%s", newList->type1.adult);
- }
- else
- {
- printf("Введите возраст шоу для детей\n");
- scanf_s("%s", newList->type1.child);
- }
- newList->next = head;
- newList->previous = NULL;
- head = newList;
- if(last == NULL) last = head;
- else head->next->previous=head;
- return;
- }
- /* Процедура удаления первого узла */
- void delete_unit()
- { newList=head;
- if(newList != NULL) //если список не пустой
- {
- head=head->next;
- free(newList); //удаление элемента
- if (head!=NULL) //элемент не единственный
- head->previous=NULL;
- else //удалили единственный, список стал пустым
- last = NULL;
- }
- }
- int count_L() /*подсчет числа элементов в списке*/
- {
- int count=0;
- newList = head;
- while(newList != NULL)
- {
- count=count+1;
- newList = newList->next;
- }
- return count;
- }
- /* Процедура вывода списка слева направо */
- void show_list(void)
- {
- struct city *info;
- info = head;
- puts(" _______________________________________________________________________");
- puts("| | | | |");
- puts("| Название театра | Название представления | Дата | Жанр |");
- puts("|_________________|________________________|__________|________________|");
- while(info)
- {
- printf("|%17s|%24s|%10s|", info->name_f, info->name_p, info->date);
- if (newList->type)
- printf("18+:%12s|\n", info->type1.adult);
- else
- printf("0+:%13s|\n", info->type1.child);
- info = info->next;
- }
- puts("|_________________|________________________|__________|________________|");
- }
- /* Процедура вывода списка справа налево */
- void show_list_1(void)
- {
- struct city *info;
- info = last;
- puts(" _______________________________________________________________________");
- puts("| | | | |");
- puts("| Название театра | Название представления | Дата | Жанр |");
- puts("|_________________|________________________|__________|________________|");
- while(info)
- {
- printf("|%17s|%24s|%10s|", info->name_f, info->name_p, info->date);
- if (newList->type)
- {
- printf("18+:%12s|\n", info->type1.adult);
- }
- else
- {
- printf("0+: %13s|\n", info->type1.child);
- }
- info=info->previous;
- }
- puts("|_________________|________________________|__________|________________|");
- }
- //////////////
- struct list* read_sp(FILE *fp, struct list *begin)
- {
- struct list *temp, *new_element;
- int flag=1, flag2=1;
- int count;
- if((new_element=(struct list*)calloc(1, sizeof(struct list)))!=NULL)
- {
- if((fread(&(new_element->data), sizeof(DataType), 1, fp)==0))
- {
- free(new_element);
- return NULL;
- }
- else
- {
- begin=new_element;
- temp=begin;
- count++;
- while(1)
- {
- if ((new_element=(struct list*)calloc(1, sizeof(struct list)))==NULL)
- break;
- if ((fread(&(new_element->data), sizeof(DataType), 1, fp))==0)
- {
- free(new_element);
- temp->next=NULL;
- break;
- }
- count++;
- temp->next=new_element;
- new_element->next=NULL;
- temp=new_element;
- }
- return begin;
- }
- }
- else
- return NULL;
- }
- void del_list(struct list* next)
- {
- struct list* temp;
- while(next)
- {
- temp=next;
- next=next->next;
- free(temp);
- }
- }
- /////////////////
- /* Тело основной программы */
- int main(int argc, char *argv[])
- {
- setlocale(LC_ALL,"rus");
- char name_f;
- char name_p;
- int date;
- char genre;
- int key=-1;
- ///////////////
- DataType x;
- char *name;
- FILE * file; //указатель на файл
- struct list *begin=NULL;
- struct list *temp, temp2; //указатель на структуру
- file=fopen("txt.txt", "a+");
- if (argc>1)
- { //если у нас более одного арг. в argc
- name=argv[1]; //name указывает на введенное в кач-ве аргумента функции имя файла
- }
- else
- {
- name=(char *)malloc((N+1)*sizeof(char));
- printf("Введите имя файла или путь до него:\n");
- scanf("%s",name);
- }
- file=fopen(name,"rb+");
- // {
- // printf("Файла с таким именем не существует, пожалуйста, введите имя заново\n");
- // if((file=fopen(name,"wb+"))==NULL)
- // {
- // printf("Ошибка - файл не может быть создан\n");
- // return 1;
- // }
- // }
- begin=read_sp(file, begin);
- if(begin==NULL)
- printf("Список пуст\n");
- getch();
- fclose(file);
- ////////////
- system("cls");
- while(key)
- {
- printf("1. Запись нового представления\n");
- printf("2. Удаление двух записей\n");
- printf("3. Показать в прямом порядке\n");
- printf("4. Показать в обратном порядке\n");
- printf("0. Завершить работу\n");
- scanf("%d", &key);
- switch(key)
- {
- case 1:
- {
- system("cls");
- add_name();
- system("cls");
- break;
- }
- case 2:
- { system("cls");
- int n = count_L();
- if(n == 0)
- {
- printf("Невозможноу удалить элементы в стеке 0 элементов\n");
- getch();
- system("cls");
- }
- else if (n == 1)
- {
- printf("Невозможноу удалить элементы в стеке 1 элемент\n");
- getch();
- system("cls");
- }
- else if (n >= 2)
- {
- delete_unit();
- delete_unit();
- }
- break;
- }
- case 3:
- {
- system("cls");
- //int n = count_L();
- //if(n >= 1){
- printf(" Список представлений в прямом порядке\n");
- show_list();
- //else
- //printf("Никаких мероприятий не запланированно");
- getch();
- system("cls");
- break;
- }
- case 4:
- {
- system("cls");
- printf(" Список представлений в обратном порядке\n");
- show_list_1();
- getch();
- system("cls");
- break;
- }
- case 0:
- {
- system("cls");
- del_list(begin);
- printf("Пока");
- getch();
- return;
- }
- default:
- {
- system("cls");
- printf("Ошибка");
- getch();
- system("cls");
- break;
- }
- }
- }
- file=fopen(name,"rb+");
- temp=begin;
- while (temp)
- {
- fwrite(&(temp->data), sizeof(struct city), 1, file);
- temp=temp->next;
- }
- fclose(file);
- while(begin)
- {
- temp=begin;
- begin=begin->next;
- free(temp);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement