📄 lager_final.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct lagerverwaltung
{
long artikelnummer;
char artikelbezeichnung[100];
int anzahl_artikel;
struct lagerverwaltung *next;
};
struct lagerverwaltung *first = NULL;
void insert_lagerverwaltung(long art_nr, char art_tit[], int anz_art)
{
struct lagerverwaltung *lager_ptr;
if(first == NULL)
{
first = (struct lagerverwaltung *)malloc(sizeof(struct lagerverwaltung));
if(first == NULL)
{
printf("Speicherplatzmangel!!!\n");
exit(0); /* Programm beenden */
}
else
{
first->artikelnummer = art_nr;
strcpy(first->artikelbezeichnung, art_tit);
first->anzahl_artikel = anz_art;
first->next = NULL;
}
}
else
{
lager_ptr=first;
while(lager_ptr->next != NULL)
lager_ptr = lager_ptr->next;
lager_ptr->next = (struct lagerverwaltung *)malloc(sizeof(struct lagerverwaltung));
if(lager_ptr->next == NULL)
{
printf("Speicherplatzmangel!!!\n");
exit(0); /* Programm beenden */
}
else
{
lager_ptr = lager_ptr->next;
lager_ptr->artikelnummer = art_nr;
strcpy(lager_ptr->artikelbezeichnung, art_tit);
lager_ptr->anzahl_artikel = anz_art;
lager_ptr->next = NULL;
}
}
printf("\nNeuer Artikel hinzugefuegt\n\n");
}
void insert_sort_lagerverwaltung(long art_nr, char art_tit[], int anz_art)
{
struct lagerverwaltung *lager_ptr1, *lager_ptr2;
/* Zuerst wird 黚erpr黤t, ob sich 黚erhaupt ein Element
in der Liste befindet. Falls nicht, rufen Sie die
Funktion insert_lagerverwaltung() mit dem Argumenten
art_nr , art_tit, anz_art auf */
if(first == NULL)
insert_lagerverwaltung(art_nr, art_tit, anz_art);
else
{
/*Als n鋍hstes wird nach dem Element gesucht,das
gr鲞er als das neue Element ist und f黦en es an
der entsprechenden Stellen ein */
lager_ptr1 = first;
/* Hier durchlaufen Sie die Liste so lange, bis Sie ein
Element finden, das gr鲞er ist als art_nr oder Sie
am Ende der Liste angekommen sind und somit die
Funktion insert_lagerverwaltung() aufrufen */
while( (lager_ptr1 != NULL) && (art_nr > lager_ptr1->artikelnummer) )
/* solange nicht am Ende angekommen UND einzuf黦ender
Artikel ist gr鲞er als der aktuelle */
lager_ptr1 = lager_ptr1->next;
if(lager_ptr1 == NULL)
insert_lagerverwaltung(art_nr, art_tit, anz_art); /* Hinten anh鋘gen */
else if(lager_ptr1 == first)
{
first = (struct lagerverwaltung *)malloc(sizeof(struct lagerverwaltung));
first->artikelnummer = art_nr;
strcpy(first->artikelbezeichnung, art_tit);
first->anzahl_artikel = anz_art;
first->next = lager_ptr1;
}
else
{
/* Hier postitionieren Sie den zweiten Zeiger
nun ein Position vor dem ersten */
lager_ptr2 = first;
while(lager_ptr2->next != lager_ptr1)
lager_ptr2 = lager_ptr2->next;
lager_ptr1 = (struct lagerverwaltung *)malloc(sizeof(struct lagerverwaltung));
lager_ptr1->artikelnummer = art_nr;
strcpy(lager_ptr1->artikelbezeichnung, art_tit);
lager_ptr1->anzahl_artikel = anz_art;
lager_ptr1->next = lager_ptr2->next;
lager_ptr2->next = lager_ptr1;
}
}
}
void output_lagerverwaltung()
{
struct lagerverwaltung *lager_ptr;
if(first == NULL)
printf("Es sind kein Daten zum Ausgeben vorhanden!!\n");
else
{
lager_ptr = first;
while(lager_ptr != NULL)
{
printf("Artikelnummer : %ld\n",lager_ptr->artikelnummer);
printf("Artikelbezeichnung : %s",lager_ptr->artikelbezeichnung);
printf("Anzahl Artikel : %d\n\n",lager_ptr->anzahl_artikel);
lager_ptr = lager_ptr->next;
}
}
}
void read_lagerverwaltung(void)
{
long an;
char at[100];
int aa;
printf("Artikelnummer : ");
scanf("%ld",&an); fflush(stdin);
printf("Artikelbezeichnung : ");
fgets(at, sizeof(at), stdin);
printf("Anzahl d. Artikel : ");
scanf("%d",&aa);
insert_sort_lagerverwaltung(an,at,aa);
}
void delete_lagerverwaltung(long art_nr)
{
struct lagerverwaltung *lager_ptr1;
struct lagerverwaltung *lager_ptr2;
/* Die logische erste 躡erpr黤ung ist ... */
if(first != NULL) /* 躡erhaupt etwas in der Liste ? */
{ /* Ist das erste Element gleich das gesuchte ? */
if(first->artikelnummer == art_nr)
{ /* Das erste Element ist das gesuchte ! */
lager_ptr1 = first->next;
free(first);
first=lager_ptr1;
printf("\nElement mit Art.-Nummer %ld wurde geloescht\n\n",art_nr);
}
else
{ /* Also nicht das erste Element .... */
lager_ptr1=first; /* Irgendwo muss man ja beginnen ... */
while(lager_ptr1->next != NULL)
{ /*So lange man nicht am Ende der Liste ist */
lager_ptr2=lager_ptr1->next;
if(lager_ptr2->artikelnummer == art_nr)
{ /* Das Element wurde schon gefunden */
lager_ptr1->next = lager_ptr2->next;
free(lager_ptr2);
printf("\nElement mit Art.-Nummer %ld wurde geloescht\n\n",art_nr);
break; /* Zum Abbrechen der while() - Schleife */
}
lager_ptr1=lager_ptr2; /* Das Element wurde noch nicht gefunden! */
}/*Ende while*/
} /*Ende else*/
} /*Ende if(first!= NULL)*/
else
printf("\nEs sind keine Daten zum loeschen vorhanden!!!\n\n");
}
void search_lagerverwaltung(char bez[])
{
struct lagerverwaltung *lager_ptr1;
if(first == NULL)
printf("\nDie Liste ist leer!\n\n");
else
{
lager_ptr1 = first;
while(lager_ptr1 != NULL)
{
if(strcmp(lager_ptr1->artikelbezeichnung, bez) == 0)
{
printf("Artikelnummer : %ld\n",lager_ptr1->artikelnummer);
printf("Artikelbezeichnung : %s",lager_ptr1->artikelbezeichnung);
printf("Anzahl Artikel : %d\n\n",lager_ptr1->anzahl_artikel);
return; /* Funktion beenden */
}
lager_ptr1 = lager_ptr1->next;
}
}
printf("\nSuche erfolglos\n\n");
}
void save_lagerverwaltung()
{
FILE *f;
char file_name[255];
struct lagerverwaltung *lager_ptr;
printf("Unter welchem Namen wollen Sie die Datei speichern : ");
scanf("%s",file_name); fflush(stdin);
f = fopen(file_name, "w");
if(f == NULL)
{
printf("Fehler beim oeffnen von %s\n",file_name);
return;
}
/* lager_ptr auf das erste Element */
lager_ptr=first;
if(lager_ptr == NULL)
{
printf("\nEs gibt nichts zum Speichern\n\n");
return;
}
/* Nun wird Element f黵 Element in der Liste gespeichert,
bis lager_ptr auf NULL zeigt und somit alle Daten gespeichert hat */
while(lager_ptr != NULL)
{
fwrite(lager_ptr,sizeof(struct lagerverwaltung),1,f);
lager_ptr = lager_ptr->next;
}
printf("\nDaten erfolgreich gespeichert\n\n");
}
void load_lagerverwaltung()
{
FILE *f;
char file_name[255];
struct lagerverwaltung *lager_ptr, lager_daten;
printf("Welchen Datensatz wollen Sie laden : ");
scanf("%s",file_name); fflush(stdin);
f = fopen(file_name, "r");
if(f == NULL)
{
printf("Fehler beim oeffnen von %s\n",file_name);
return;
}
while(fread(&lager_daten,sizeof(struct lagerverwaltung),1,f))
{
if(first == NULL)
{
first = (struct lagerverwaltung *)malloc(sizeof(struct lagerverwaltung));
if(first == NULL)
{
printf("Speicherplatzmangel!!!\n");
exit(0); /* Programm beenden */
}
else
{
first->artikelnummer = lager_daten.artikelnummer;
strcpy(first->artikelbezeichnung, lager_daten.artikelbezeichnung);
first->anzahl_artikel = lager_daten.anzahl_artikel;
first->next = NULL;
}
}
else
{
lager_ptr=first;
while(lager_ptr->next != NULL)
lager_ptr = lager_ptr->next;
lager_ptr->next = (struct lagerverwaltung *)malloc(sizeof(struct lagerverwaltung));
if(lager_ptr->next == NULL)
{
printf("Speicherplatzmangel!!!\n");
exit(0); /* Programm beenden */
}
else
{
lager_ptr = lager_ptr->next;
lager_ptr->artikelnummer = lager_daten.artikelnummer;;
strcpy(lager_ptr->artikelbezeichnung, lager_daten.artikelbezeichnung);
lager_ptr->anzahl_artikel = lager_daten.anzahl_artikel;
lager_ptr->next = NULL;
}
}
}
printf("\nDatensatz geladen\n\n");
}
int main()
{
int abfrage;
long art_nr;
char search[100];
do{
printf("<1> Neue Daten einlesen\n");
printf("<2> Alle Daten ausgeben\n");
printf("<3> Ein Element in der Liste loeschen\n");
printf("<4> Element suchen\n");
printf("<5> Datensatz laden\n");
printf("<6> Datensatz speichern\n");
printf("<7> Ende\n\n");
printf("Ihre Auswahl : ");
scanf("%d",&abfrage);
fflush(stdin);
/* Bei Probleme mit scanf() die Funktion getchar()
anstatt fflush(stdin) verwenden !!! */
switch(abfrage)
{
case 1 : read_lagerverwaltung(); break;
case 2 : output_lagerverwaltung(); break;
case 3 : printf("Artikelnummer : ");
scanf("%ld",&art_nr);
delete_lagerverwaltung(art_nr);
break;
case 4 : printf("Welchen Artikel suchen Sie : ");
fgets(search, sizeof(search), stdin);
search_lagerverwaltung(search);
break;
case 5 : load_lagerverwaltung();
break;
case 6 : save_lagerverwaltung();
break;
case 7 : printf("Bye\n"); break;
default : printf("Falsche Eingabe!!!\n");
}
}while(abfrage != 7);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -