Skip to content
Snippets Groups Projects
database.c 8.66 KiB
Newer Older
T.Wadi's avatar
T.Wadi committed
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "database.h"
#include "datastructure.h"
#include "tools.h"
#include "cds.h"
#include "datetime.h"

void load()
{
    FILE *datei = fopen("cds.xml", "r");
    if (datei)
    {
        loadCD(datei);
T.Wadi's avatar
T.Wadi committed
        puts("CDs have been succefully loaded!");
T.Wadi's avatar
T.Wadi committed
        fclose(datei);
        waitForEnter();
    }
}
void loadCD(FILE *datei)
{
    char zeile[101];
    char *zeilenAnfang;
    int len;
T.Wadi's avatar
T.Wadi committed
    unsigned int loadedCDcounter = 0;
T.Wadi's avatar
T.Wadi committed
    unsigned int loadedSongCounnter = 0;
T.Wadi's avatar
T.Wadi committed
    if (datei)
    {
        do
        {
            fscanf(datei, " %101[^\n]", zeile);
            spacesRemove(&zeilenAnfang, zeile);
            while (fscanf(datei, " %101[^\n]", zeile) == 1)
            {
                if (strncmp(zeilenAnfang, "<CD>", 4) == 0)
                {
T.Wadi's avatar
T.Wadi committed
                    sCD *CDData = calloc(1, sizeof(sCD));
T.Wadi's avatar
T.Wadi committed
                    if(!CDData) exit(0);
T.Wadi's avatar
T.Wadi committed
                    loadedCDcounter++;
                    delay(0.1);
                    printf("° CD %.2i has been succefully loaded .... \n ", loadedCDcounter);
                    loadedSongCounnter = 0;
T.Wadi's avatar
T.Wadi committed
                    while (fscanf(datei, " %101[^\n]", zeile) == 1)
                    {
                        if (strncmp(zeilenAnfang, "<Title>", 7) == 0)
                        {
                            len = strlen(zeilenAnfang + 7) - 8;
                            if (strncmp(zeilenAnfang + 7 + len - 1, "</Title>", 8) == 0)
                            {
T.Wadi's avatar
T.Wadi committed
                                (CDData)->title = calloc(len + 1, sizeof(char));
                                if ((CDData)->title)
T.Wadi's avatar
T.Wadi committed
                                {
T.Wadi's avatar
T.Wadi committed
                                    strncpy((CDData)->title, zeilenAnfang + 7, len - 1);
T.Wadi's avatar
T.Wadi committed
                                }
                            }
                        }
                        if (strncmp(zeilenAnfang, "<Interpret>", 11) == 0)
                        {
                            len = strlen(zeilenAnfang + 11) - 12;
                            if (strncmp(zeilenAnfang + 11 + len - 1, "</Interpret>", 12) == 0)
                            {
T.Wadi's avatar
T.Wadi committed
                                (CDData)->artist = calloc(len + 1, sizeof(char));
                                if ((CDData)->artist)
T.Wadi's avatar
T.Wadi committed
                                {
T.Wadi's avatar
T.Wadi committed
                                    strncpy((CDData)->artist, zeilenAnfang + 11, len - 1);
T.Wadi's avatar
T.Wadi committed
                                }
                            }
                        }
                        if (strncmp(zeilenAnfang, "<YearOfAppearance>", 18) == 0)
                        {
                            len = strlen(zeilenAnfang + 18) - 19;
                            if (strncmp(zeilenAnfang + 18 + len - 1, "</YearOfAppearance>", 19) == 0)
                            {
                                char *tmp;
T.Wadi's avatar
T.Wadi committed
                                tmp = calloc(21, sizeof(char));
T.Wadi's avatar
T.Wadi committed
                                if (tmp)
                                {
T.Wadi's avatar
T.Wadi committed
                                    strncpy(tmp, zeilenAnfang + 18, len - 1);
T.Wadi's avatar
T.Wadi committed
                                    (CDData)->publicationYear = (unsigned int)atoi(tmp);
T.Wadi's avatar
T.Wadi committed
                                    free(tmp);
T.Wadi's avatar
T.Wadi committed
                                }
                            }
                        }
                        if (strncmp(zeilenAnfang, "<Song>", 6) == 0)
                        {
T.Wadi's avatar
T.Wadi committed
                            loadedSongCounnter++;
                            delay(0.1);
                            printf("    ° Song %.2i has been succefully loaded .... \n ", loadedSongCounnter);

T.Wadi's avatar
T.Wadi committed
                            void loadSong();
                            {
                                while (fscanf(datei, " %101[^\n]", zeile) == 1)
                                {
                                    if (strncmp(zeilenAnfang, "<Title>", 7) == 0)
                                    {
                                        len = strlen(zeilenAnfang + 7) - 8;
                                        if (strncmp(zeilenAnfang + 7 + len - 1, "</Title>", 8) == 0)
                                        {
T.Wadi's avatar
T.Wadi committed
                                            (CDData)->Songs[(CDData)->numberOfSongs].title = calloc(len + 1, sizeof(char));
                                            if ((CDData)->Songs[(CDData)->numberOfSongs].title)
T.Wadi's avatar
T.Wadi committed
                                            {
T.Wadi's avatar
T.Wadi committed
                                                strncpy((CDData)->Songs[(CDData)->numberOfSongs].title, zeilenAnfang + 7, len - 1);
T.Wadi's avatar
T.Wadi committed
                                            }
                                        }
                                    }
                                    if (strncmp(zeilenAnfang, "<Interpret>", 11) == 0)
                                    {
                                        len = strlen(zeilenAnfang + 11) - 12;
                                        if (strncmp(zeilenAnfang + 11 + len - 1, "</Interpret>", 12) == 0)
                                        {
T.Wadi's avatar
T.Wadi committed
                                            (CDData)->Songs[(CDData)->numberOfSongs].artist = calloc(len + 1, sizeof(char));
                                            if ((CDData)->Songs[(CDData)->numberOfSongs].artist)
T.Wadi's avatar
T.Wadi committed
                                            {
T.Wadi's avatar
T.Wadi committed
                                                strncpy((CDData)->Songs[(CDData)->numberOfSongs].artist, zeilenAnfang + 11, len - 1);
T.Wadi's avatar
T.Wadi committed
                                            }
                                        }
                                    }
                                    if (strncmp(zeilenAnfang, "<Duration>", 10) == 0)
                                    {
                                        len = strlen(zeilenAnfang + 10) - 11;
                                        if (strncmp(zeilenAnfang + 10 + len - 1, "</Duration>", 11) == 0)
                                        {
                                            char *tmp;
                                            tmp = malloc(20 * sizeof(char));
                                            if (tmp)
                                            {
                                                strncpy(tmp, zeilenAnfang + 10, len - 1);
T.Wadi's avatar
T.Wadi committed
                                                getTimeFromString(tmp, &((CDData)->Songs[(CDData)->numberOfSongs].duration));
T.Wadi's avatar
T.Wadi committed
                                                free(tmp);
                                            }
                                        }
                                    }
                                    if (strncmp(zeilenAnfang, "</Song>", 7) == 0)
                                        break;
                                }
T.Wadi's avatar
T.Wadi committed
                                (CDData)->numberOfSongs++;
T.Wadi's avatar
T.Wadi committed
                            }
                        }

                        if (strncmp(zeilenAnfang, "</CD>", 5) == 0)
T.Wadi's avatar
T.Wadi committed
                        {
                            insertListElement(CDData);
T.Wadi's avatar
T.Wadi committed
                            break;
T.Wadi's avatar
T.Wadi committed
                        }
T.Wadi's avatar
T.Wadi committed
                    }
                    countCDs++;
                }
            }

            fclose(datei);
        } while (feof(datei) || strncmp(zeile, "</Data>", 7) != 0);
    }
    else
        puts("datei konnte nicht geoffnet werden\n");
}

T.Wadi's avatar
T.Wadi committed
void save(FILE *datei)
{
    datei = fopen("FinalCDS.xml", "w");
    if (datei)
    {
        if (askYesOrNo("Do you want to save to save to created or loaded CD to an extern XMl file ?(J/n)"))
        {
            saveCd(datei);
            fclose(datei);
            puts("Loaded or created CDs have been saved succefully to an External XML file!");
        }
        else
        {
            int remove(const char *datei);
            puts("Nothing have been saved and existing file has been succefully cleared!");
        }

        waitForEnter();
    }
}
void saveCd(FILE *datei)
T.Wadi's avatar
T.Wadi committed
{
T.Wadi's avatar
T.Wadi committed
    sCD *CDData = first;
T.Wadi's avatar
T.Wadi committed
    fprintf(datei, "<Data>\n");
T.Wadi's avatar
T.Wadi committed
    while (CDData)
T.Wadi's avatar
T.Wadi committed
    {
        fprintf(datei, " <CD>\n");
T.Wadi's avatar
T.Wadi committed
        fprintf(datei, "  <Title>%s</Title>\n", (CDData)->title);
        if ((CDData)->artist != NULL)
T.Wadi's avatar
T.Wadi committed
        {
T.Wadi's avatar
T.Wadi committed
            fprintf(datei, "  <Interpret>%s</Interpret>\n", (CDData)->artist);
T.Wadi's avatar
T.Wadi committed
        }
T.Wadi's avatar
T.Wadi committed
        fprintf(datei, "  <YearOfAppearance>%i</YearOfAppearance>\n", (CDData)->publicationYear);
T.Wadi's avatar
T.Wadi committed

T.Wadi's avatar
T.Wadi committed
        for (unsigned int j = 0; j < (CDData)->numberOfSongs; j++)
T.Wadi's avatar
T.Wadi committed
        {
            fprintf(datei, "  <Song>\n");

T.Wadi's avatar
T.Wadi committed
            fprintf(datei, "   <Title>%s</Title>\n", (CDData)->Songs[j].title);
            if ((CDData)->Songs[j].artist != NULL)
T.Wadi's avatar
T.Wadi committed
            {
T.Wadi's avatar
T.Wadi committed
                fprintf(datei, "   <Interpret>%s</Interpret>\n", (CDData)->Songs[j].artist);
T.Wadi's avatar
T.Wadi committed
            }
T.Wadi's avatar
T.Wadi committed
            printTimeIntofile(datei, (CDData)->Songs[j].duration);
T.Wadi's avatar
T.Wadi committed
            fprintf(datei, "  </Song>\n");
        }
        fprintf(datei, " </CD>\n");
T.Wadi's avatar
T.Wadi committed
        CDData = CDData->next;
T.Wadi's avatar
T.Wadi committed
    }
    fprintf(datei, "</Data>\n");