kske
/
linked-list
Archived
1
Fork 0
This repository has been archived on 2020-12-15. You can view files and clone it, but cannot push or open issues or pull requests.
linked-list/Demonstration/main.c

154 lines
3.2 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "../Implementation/linked_list.h"
#include "../../MenuLib/menu.h"
#include "book.h"
void show_push(Node** list)
{
char title[101], author[101];
int year;
printf("Enter title of Book: ");
scanf_s(" %[^\n]s", title, 101);
printf("Enter author of Book: ");
scanf_s(" %[^\n]s", author, 101);
printf("Enter year of Release: ");
scanf_s(" %d", &year);
list_push(list, book_create(title, author, year));
}
void show_append(Node** list)
{
char title[101], author[101];
int year;
printf("Enter title of Book: ");
scanf_s(" %[^\n]s", title, 101);
printf("Enter author of Book: ");
scanf_s(" %[^\n]s", author, 101);
printf("Enter year of Release: ");
scanf_s(" %d", &year);
list_append(list, book_create(title, author, year));
}
void show_insert(Node** list)
{
char title[101], author[101];
int year, index;
printf("Enter title of Book: ");
scanf_s(" %[^\n]s", title, 101);
printf("Enter author of Book: ");
scanf_s(" %[^\n]s", author, 101);
printf("Enter year of Release: ");
scanf_s(" %d", &year);
printf("Enter place after which book is inserted: ");
scanf_s(" %d", &index);
list_insert(list_get(*list, index), book_create(title, author, year));
}
void show_print(Node** list)
{
list_print(*list, &book_print);
}
void show_get(Node** list)
{
int index;
printf("Enter place: ");
scanf_s(" %d", &index);
list_print(list_get(*list, index), &book_print);
}
void show_remove(Node** list)
{
int index;
printf("Enter place: ");
scanf_s(" %d", &index);
list_remove(list_get(*list, index));
}
void show_read(Node** list)
{
char path[101], line[256], * title, * author, * year;
FILE* CSV;
printf("Enter the path to the file of haram: ");
gets_s(path, 101);
if (!(CSV = fopen(path, "r")))
{
puts("Failed to read file!\n");
return;
}
while (fgets(line, 256, CSV))
{
printf("Found line %s", line);
title = strtok(line, ";");
author = strtok(NULL, ";");
year = strtok(NULL, ";");
printf("%s, %s, %s\n", title, author, year);
list_push(list, book_create(title, author, atoi(year)));
}
fclose(CSV);
}
void show_write(Node** list)
{
char path[101], line[256];
FILE* CSV;
Node* node = *list;
Book* book;
printf("Enter the path to the file_s: ");
gets_s(path, 101);
if (!(CSV = fopen(path, "w")))
{
puts("Failed to read file!\n");
return;
}
while (node)
{
book = (Book*)node->data;
fprintf(CSV, "%s;%s;%d\n", book->title, book->author, book->year);
node = node->next;
}
fclose(CSV);
}
void main(void)
{
Node* list = NULL;
struct MenuItem items[] = {
{"Push item", '1', (void*)&show_push, &list},
{"Append item", '2', (void*)&show_append, &list},
{"Insert item", '3', (void*)&show_insert, &list},
{"Print item", '4', (void*)&show_print, &list},
{"Look at item by index", '5', (void*)&show_get, &list},
{"Remove item by index", '6', (void*)&show_remove, &list},
{"READ", 'r', (void*)&show_read, &list},
{"RIDE", 'w', (void*)&show_write, &list},
{"BLANK", ' ', NULL, NULL},
{"Quit", 'q', (void*)&exit, NULL}
};
struct MenuPage pages[] = {
{items, sizeof(items) / sizeof(struct MenuItem), "Linked List Demo", true, true, &SOLID}
};
show_menu(pages, sizeof(pages) / sizeof(struct MenuPage), true);
}