⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lager_final.c

📁 verschiedene beispiele
💻 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 + -