Allgemeines Computer Forum > Programmieren

Ein kleines Rechen Programm in C geschrieben

(1/2) > >>

Hans:
Hi ich arbeite mich der zeit unteranderen mal so richtig in C ein und dachte mir ich schreib mal ein kleines Programm in C ins Forum

1: /* hypothek.c – Berechnet Darlehens-/Hypothekenzahlungen. */
2:
3: #include <stdio.h>
4: #include <math.h>
5: #include <stdlib.h>
6:
7: int main(void)
8: {
9: float betrag, rate, zahlung;
10: int laufzeit;
11: char ch;
12:
13: while (1)
14: {
15: /* Darlehensdaten einlesen */
16: puts("\nGeben Sie die Höhe der Hypothek ein: ");
17: scanf("%f", &betrag);
18: puts("\nGeben Sie die jährliche Zinsrate ein: ");
19: scanf("%f", &rate);
20: /* Anpassung für Prozentangaben . */
21: rate /= 100;
22: /* Anpassung für die monatliche Zinsrate . */
23: rate /= 12;
24:
25: puts("\nGeben Sie die Darlehensdauer in Monaten an: ");
26: scanf("%d", &laufzeit);
27: zahlung = (betrag * rate) / (1 – pow((1 + rate), -laufzeit));
28: printf("Ihre monatliche Belastung beträgt %.2f DM.\n",zahlung);
29:
30: puts("Wünschen Sie eine weitere Berechnung (j oder n)?");
31: do
32: {
33: ch = getchar();
34: } while (ch != 'n' && ch != 'j');
35:
36: if (ch == 'n')
37: break;
38: }
39: return(0);
40: }


Es handelt sich hierbei um einen Hypotheken rechner
Viel spaß bei nach Progen

Gruß Hans

dia5:
Hi finde ich gut was du da machst aber braucht man da nich viel geduld um soetwas zuerstellen.Also ich glaube ich hätte das zeug nich dazu.

Hans:
Hi

Vielen Dank

Muss gestehen das kostet schon manchmal richtig zeit aber macht Spaß

dieses Programm habe ich aber nur von einen Übungsbuch abgeschrieben und ein bisschen umgearbeitet

Gruß Hans

Spirit:
Hi
und hier ein kleines Datenbankprogramm von mir :-P


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <dos.h>

#define A_STR_MAX 50  //
#define B_STR_MAX 50

struct person_ds {
   char name[A_STR_MAX];
   char vname[A_STR_MAX];
   char strasse[A_STR_MAX];
   int  plz;
   char stadt[A_STR_MAX];
   int  tel;
   int  fax;
   int  p_id;
};
int pers_count;            //Koëè÷åñòâî Àäðåñîø
struct person_ds *adrs;      //Óêàçàòåëü ía ïåðåìåííóþ Àäðåñîø


struct buch_ds {
   char name[B_STR_MAX];
   char autor[B_STR_MAX];
   char isbn[15];           //ïðèìåð: 3-8272-6812-5
   char info[200];
   int  vorrat;
   int  b_id;
};
int buch_count;            //Koëè÷åñòâî Kíèã
struct buch_ds *buchr;      //Óêàçàòåëü ía ïåðåìåííóþ Kíèã

//ñòðóêòóðà àíòðàãà
struct auftrag_ds {
   int  p_id;
   int  b_id;
   int  outzahl;
   char outdatum[11];
   char indatum[11];
   int  auftrag_id;
};

int aufraege_count;            //Koëè÷åñòâî àíòðàãîâ
struct auftrag_ds *aufraege;   //Óêàçàòåëü ía ïåðåìåííóþ àíòðàãîâ

    /*  Binäre Suche nach String s in adrs                    */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des nächstgrösseren Elements             */
int p_BinSuche( char s[50] )
{
   int unten=0, oben=pers_count, mitte;
   if ( strcmp(s, adrs[unten].name)<=0 )
      //Wenn s keiner oder gleich ...[0].name ist
      return 0;
   else
   {
      while( oben - unten > 1 )
      {
         mitte = (oben-unten)/2;
         if ( strcmp(s, adrs[unten+mitte].name) == 0 )
         {
            unten += mitte;
            oben = unten;
         }
         if ( strcmp(s, adrs[unten+mitte].name) > 0 )
            unten += mitte;
         else
            oben = unten + mitte;
      }
      if ( strcmp(s, adrs[oben-1].name) == 0 )
         oben--;
      return oben;
   }
}

    /*  Binäre Suche nach String s in buchr                    */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des nächstgrösseren Elements             */
int b_BinSuche( char s[50] )
{
   int unten=0, oben=buch_count, mitte;
   if ( strcmp(s, buchr[unten].name)<=0 )
      //Wenn s keiner oder gleich ...[0].name ist
      return 0;
   else
   {
      while( oben - unten > 1 )
      {
         mitte = (oben-unten)/2;
         if ( strcmp(s, buchr[unten+mitte].name) == 0 )
         {
            unten += mitte;
            oben = unten;
         }
         if ( strcmp(s, buchr[unten+mitte].name) > 0 )
            unten += mitte;
         else
            oben = unten + mitte;
      }
      if ( strcmp(s, buchr[oben-1].name) == 0 )
         oben--;
      return oben;
   }
}

    /*  Suche nach Zahl s in aufraege                   */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des letzten Elements             */
int a_Suche( int s )
{
   int unten=0, oben=aufraege_count, mitte;
   for ( mitte = unten; mitte < oben; mitte++ )
      if ( s == aufraege[mitte].auftrag_id )
         return mitte;
   return oben;
}

    /*  Suche nach Zahl s in adrs                   */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des letzten Elements             */
int p_IDSuche( int s )
{
   int unten=0, oben=pers_count, mitte;
   for ( mitte = unten; mitte < oben; mitte++ )
      if ( s == adrs[mitte].p_id )
         return mitte;
   return oben;
}

    /*  Suche nach Zahl s in buchr                   */
   /*                                                        */
  /*  zurueckgeliefert wird die Position an der s           */
 /*    gefunden wurde oder ( falls s nicht in der Liste ist) */
/*  die Position des letzten Elements             */
int b_IDSuche( int s )
{
   int unten=0, oben=buch_count, mitte;
   for ( mitte = unten; mitte < oben; mitte++ )
      if ( s == buchr[mitte].b_id )
         return mitte;
   return oben;
}

// Vergleich zweier Adressen nach dem Namen
// für qsort
int p_vgl( const void* p1,const void* p2 )
{
   struct person_ds* adr1,*adr2;
   adr1=( struct person_ds* )p1;
   adr2=( struct person_ds* )p2;
   return strcmp( adr1->name, adr2->name );
}

// Vergleich zweier Buecher nach dem Namen
// für qsort
int b_vgl( const void* b1,const void* b2 )
{
   struct buch_ds* buch1,*buch2;
   buch1=( struct buch_ds* )b1;
   buch2=( struct buch_ds* )b2;
   return strcmp( buch1->name, buch2->name );
}

// Vergleich zweier Aufträde nach dem Namen
// für qsort
int a_vgl( const void* a1,const void* a2 )
{
   struct auftrag_ds* auftrag1,*auftrag2;
   auftrag1=( struct auftrag_ds* )a1;
   auftrag2=( struct auftrag_ds* )a2;
   if ( auftrag1->auftrag_id < auftrag2->auftrag_id )
      return -1;
   if ( auftrag1->auftrag_id > auftrag2->auftrag_id )
      return 1;
   if ( auftrag1->auftrag_id == auftrag2->auftrag_id )
      return 0;
}

//########################################################################

void p_ausgabe();
void p_ausgeben(struct person_ds adr, int _select);
void b_ausgabe();
void b_ausgeben(struct buch_ds buch, int _select);

/*char* string_einlesen()
{
   char* str;


   return str;
}*/


// Einlesen einer Adresse ueber die Tastatur
struct person_ds p_einlesen()
{
   struct person_ds adr;
   char str[100];
   strcpy(str, " ");
   printf( "\n" );
   printf( "Name    : " );
      gets( str );
      strcpy(adr.name, str);
   printf( "Vorname : " );
      gets( str );
      strcpy(adr.vname, str);
   printf( "Strasse : " );
      gets( str );
      strcpy(adr.strasse, str);
   printf( "PLZ     : " );
      scanf("%d", &(adr.plz));
      fflush( stdin );
   printf( "Stadt   : " );
      gets( str );
      strcpy(adr.stadt, str);
   printf( "Telefon : " );
      scanf("%d", &(adr.tel));
      fflush( stdin );
   printf( "Telefax : " );
      scanf("%d", &(adr.fax));
      fflush( stdin );
   srand( (unsigned)time( NULL ) );
      adr.p_id = rand();

   return adr;
}

// Einlesen eines Buches ueber die Tastatur
struct buch_ds b_einlesen()
{
   struct buch_ds buch;
   char str[100];
   strcpy(str, " ");

   printf( "\n" );
   printf( "Buchname    : " );
      gets( str );
      strcpy(buch.name, str);
   printf( "ISBN        : " );
      gets( str );
      strcpy(buch.isbn, str);
   printf( "Autor       : " );
      gets( str );
      strcpy(buch.autor, str);
   printf( "Beschreibung: " );
      gets( str );
      strcpy(buch.info, str);
   printf( "Vorrat      : " );
      scanf( "%d", &(buch.vorrat) );
      fflush( stdin );
   srand( (unsigned)time( NULL ) );
      buch.b_id = rand();

   return buch;
}

// Einlesen eines Auftrags ueber die Tastatur
struct auftrag_ds a_einlesen()
{
   struct auftrag_ds auftrag;
   char s[50];
   char tmp[11];
   int k=0;
   char taste;
   /*/ fur TCP
   struct date d;
   getdate(&d);
   strcpy(tmp,(char*)&d.da_mon);strcat(tmp,"/");
   strcat(tmp,(char*)&d.da_day);strcat(tmp,"/");
   strcat(tmp,(char*)&d.da_year);
   // für VC++-----*/
   _strdate( tmp );
   //--------------
   strcpy(auftrag.outdatum, tmp);
   strcpy(auftrag.indatum, "__/__/__");
   while( taste != 'j' ) // P_ID für den auftrag vestlegen
   {   
      p_ausgabe();
      printf( "\nName eingeben: " );
         scanf( "%s", s );
         fflush( stdin );
      k = p_BinSuche(s);

      if ( strcmp(adrs[k].name, s) == 0 ){
         printf("\n");
            p_ausgeben( adrs[k], 2); taste = ' ';
         while((taste != 'j') && (taste != 'n'))
         {
            printf( "\nDie Person %s ins Auftrag aufnemmen? j/n:",s);
                taste = getch();
            if ( taste == 'j' )
               auftrag.p_id = adrs[k].p_id;
            printf("\n\n");
      }}
      else
         printf( "\nName %s nicht vorhanden\n\n", s );
   }
   taste = ' '; k=0;
   while( taste != 'j' ) // B_ID für den auftrag vestlegen
   {
      b_ausgabe();
      printf( "\nBuchnamen eingeben: " );
         scanf( "%s", s );
         fflush( stdin );
      k = b_BinSuche(s);

      if ( strcmp(buchr[k].name, s) == 0 )
      {
             printf("\n");
         b_ausgeben( buchr[k], 2);
         if (buchr[k].vorrat>0)
         {
            taste = ' ';
            while((taste != 'j') && (taste != 'n'))
            {
               printf( "\nDas Buch %s ins Auftrag aufnemmen? j/n:",s);
                  taste = getch(); //scanf( "%c", taste );
                  //fflush( stdin );
               if ( taste == 'j' )
                  auftrag.b_id = buchr[k].b_id; printf("\n");
            }
         }
         else
            printf( "\nBuch %s ist momentan nich nicht vorretig\n\n", s );
      }
      else
         printf( "\nBuchname %s nicht vorhanden\n\n", s );
   }
   int i;
   do
   {
      printf( "\nWieviele Buecher werden ausgegeben : " );
         scanf( "%d", &i );
      if ( i>buchr[k].vorrat )
         printf("\nEs koenen nur %d Buecher ausgegeben werden!\n", buchr[k].vorrat );
      else
         break;
   }while(1);
   auftrag.outzahl=i;
   buchr[k].vorrat = buchr[k].vorrat - auftrag.outzahl;

   srand( (unsigned)time( NULL ) );
   auftrag.auftrag_id = rand();

   //int  b_id
   return auftrag;
}

// Ausgeben einer Adresse auf den Bildschirm
void p_ausgeben(struct person_ds adr, int _select)
{
   // _select = 0, or _select = 1, or _select = 2
   int i;
   char tmp_name[50];
   if (strlen(adr.name)>13){
      for (i=0; i<13; i++ )
         tmp_name = adr.name;
      tmp_name = '\0';}
   else
      strcpy(tmp_name, adr.name);
   char tmp_vname[50];
   if (strlen(adr.vname)>12){
      for (i=0; i<12; i++ )
         tmp_vname = adr.vname;
      tmp_vname = '\0';}
   else
      strcpy(tmp_vname, adr.vname);
   char tmp_strasse[50];
   if (strlen(adr.strasse)>14){
      for (i=0; i<14; i++ )
         tmp_strasse = adr.strasse;
      tmp_strasse = '\0';}
   else
      strcpy(tmp_strasse, adr.strasse);
   
   char tmp_stadt[50];
   if (strlen(adr.stadt)>13){
      for ( i=0; i<13; i++ )
         tmp_stadt = adr.stadt;
      tmp_stadt = '\0';}
   else
      strcpy(tmp_stadt, adr.stadt);

   if (_select == 0)
      printf( "\1 %-5d", adr.p_id );
   if (_select == 1)
      printf( "\2 %-5d", adr.p_id );
   if (_select == 2)
      printf( "  %-5d", adr.p_id );
   printf( "| %-14s", tmp_name );
   printf( "| %-13s", tmp_vname );
   printf( "| %-15s", tmp_strasse );
   printf( "| %-6d", adr.plz );
   printf( "| %-14s\n", tmp_stadt );
}

// Ausgeben eines Buches auf den Bildschirm
void b_ausgeben(struct buch_ds buch, int _select)
{
     int i;
   // _select = 0, or _select = 1, or _select = 2
   char tmp_name[50];
   if (strlen(buch.name)>13){
      for ( i=0; i<13; i++ )
         tmp_name = buch.name;
      tmp_name = '\0';}
   else
      strcpy(tmp_name, buch.name);

   char tmp_isbn[50];
   if (strlen(buch.isbn)>13){
      for ( i=0; i<13; i++ )
         tmp_isbn = buch.isbn;
      tmp_isbn = '\0';}
   else
      strcpy(tmp_isbn, buch.isbn);

   char tmp_autor[50];
   if (strlen(buch.autor)>13){
      for ( i=0; i<13; i++ )
         tmp_autor = buch.autor;
      tmp_autor = '\0';}
   else
      strcpy(tmp_autor, buch.autor);
   
   if (_select == 0)
      printf( "\1 %-5d", buch.b_id );
   if (_select == 1)
      printf( "\2 %-5d", buch.b_id );
   if (_select == 2)
      printf( "  %-5d", buch.b_id );
   printf( "| %-14s", tmp_name );
   printf( "| %-14s", tmp_isbn );
   printf( "| %-14s", tmp_autor );
   printf( "| %-14d\n", buch.vorrat );
   //printf( "%-7d\n", buch );
}

// Ausgeben eines Aufrags auf den Bildschirm
void a_ausgeben(struct auftrag_ds auftrag, int _select)
{
     int i;
   // _select = 0, or _select = 1, or _select = 2
   int k = p_IDSuche(auftrag.p_id);
   char tmp_pname[50];
   if (strlen(adrs[k].name)>13){
      for ( i=0; i<13; i++ )
         tmp_pname = adrs[k].name;
      tmp_pname = '\0';}
   else
      strcpy(tmp_pname, adrs[k].name);
   
   char tmp_pvname[50];
   if (strlen(adrs[k].vname)>13){
      for ( i=0; i<13; i++ )
         tmp_pvname = adrs[k].vname;
      tmp_pvname = '\0';}
   else
      strcpy(tmp_pvname, adrs[k].vname);

   k = b_IDSuche(auftrag.b_id);
   char tmp_bname[50];
   if (strlen(buchr[k].name)>13){
      for ( i=0; i<13; i++ )
         tmp_bname = buchr[k].name;
      tmp_bname = '\0';}
   else
      strcpy(tmp_bname, buchr[k].name);

   if (_select == 0)
      printf( "\1 %-5d", auftrag.auftrag_id );
   if (_select == 1)
      printf( "\2 %-5d", auftrag.auftrag_id );
   if (_select == 2)
      printf( "  %-5d", auftrag.auftrag_id );
   printf( "| %-14s", tmp_pname );
   printf( "| %-14s", tmp_pvname );
   printf( "| %-14s", tmp_bname );
   printf( "| %-5d\n", auftrag.outzahl );
}

// Abspeichern einer eingelesenen Adresse
// in einer Datei
void p_eingabe()
{
   struct person_ds adr;

   adr = p_einlesen();

   // falls die Datei nicht leer war
   if ( pers_count > 0 )
   {
      adrs = (struct person_ds*)realloc(adrs, (pers_count+1)*sizeof(person_ds));
      adrs[pers_count] = adr;
   }
   // falls die Datei leer war
   else
      adrs[0] = adr;

   pers_count++;
   // Adressen neu sortieren
   qsort(adrs, pers_count, sizeof (struct person_ds), p_vgl);
}

// Abspeichern eines eingelesenen Buches
// in einer Datei
void b_eingabe()
{
   struct buch_ds buch;

   buch = b_einlesen();

   // falls die Datei nicht leer war
   if ( buch_count > 0 )
   {
      buchr = (struct buch_ds*)realloc(buchr, (buch_count+1)*sizeof(buch_ds));
      buchr[buch_count] = buch;
   }
   // falls die Datei leer war
   else
      buchr[0] = buch;
   
   buch_count++;
   
   // Buecher neu sortieren
   qsort(buchr, buch_count, sizeof (struct buch_ds), b_vgl);
}

// Abspeichern eines eingelesenen Auftrages
// in einer Datei
void a_eingabe()
{
   struct auftrag_ds auftrag;

   auftrag = a_einlesen();

   // falls die Datei nicht leer war
   if ( aufraege_count > 0 )
   {
      // in der variable 'auftraege' platz für einen neuen auftrag schafen
      aufraege = (struct auftrag_ds*)realloc(aufraege, (aufraege_count+1)*sizeof(auftrag_ds));
      // den neuen Aufrag an die hientere stelle in die variable 'auftraege' einfuegen
      aufraege[aufraege_count] = auftrag;
   }
   // falls die Datei leer war
   else
      // wird der Auftrag an erste stelle in der Variable 'auftraege' einfuegen
      aufraege[0] = auftrag;
   
   aufraege_count++;
   
   // Auftraege neu sortieren
   qsort(aufraege, aufraege_count, sizeof (struct auftrag_ds), a_vgl);
}

// Ausgabe der gesamten Adressdatei
void p_ausgabe()
{
   int k;
   //clrscr();
   printf("  %-5s  %-14s  %-13s  %-15s  %-6s  %-14s\n\n" ,"ID","Name",
      "Vorname","Strasse","PLZ","Stadt"); 
   //printf( "Name\tVorname\tStrasse\tPLZ\tStadt\tTelefon\tTelefax\n\n"); 
   if( pers_count <= 0 )
      printf( "Keine Adressen vorhanden\n" );
   else
      for ( k = 0; k < pers_count; k++ )
         p_ausgeben( adrs[k] , 1 );
}

// Ausgabe der gesamten Buchdatei
void b_ausgabe()
{
   int k;
   //clrscr();
   printf("  %-5s  %-14s  %-14s  %-14s  %-14s\n\n" ,"ID","Buchname","ISBN","Autor","Vorrat"); 
   if( buch_count <= 0 )
      printf( "Keine Buecher vorhanden\n" );
   else
      for ( k = 0; k < buch_count; k++ )
         b_ausgeben( buchr[k], 1 );
}

// Ausgabe der gesamten Auftraegedatei
void a_ausgabe()
{
   int k;
   //clrscr();
   printf("  %-5s  %-14s  %-14s  %-14s  %-5s\n\n" ,"A-ID","Name","Vorname","Buchname","Zahl"); 
   if( aufraege_count <= 0 )
      printf( "Keine Auftraege vorhanden\n" );
   else
      for ( k = 0; k < aufraege_count; k++ )
         a_ausgeben( aufraege[k], 1 );
}


// Suchen einer Adresse
void p_suchen()
{
   char s[50];
   int k=0;

   printf( "Name eingeben: " );
      scanf( "%s", s );
   fflush( stdin );

   k = p_BinSuche(s);

   if ( strcmp(adrs[k].name, s) == 0 )
   {
      printf("\n  %-5s  %-14s  %-13s  %-15s  %-6s  %-14s\n\n" ,"ID","Name",
                "Vorname","Strasse","PLZ","Stadt"); 
      p_ausgeben( adrs[k], 2);
    }
   else
      printf( "\nName %s nicht vorhanden!!!\n", s );
}

// Suchen ein Buch
void b_suchen()
{
   char s[50];
   int k=0;

   printf( "Buchname eingeben: " );
      scanf( "%s", s );
   fflush( stdin );

   k = b_BinSuche(s);

   if ( strcmp(buchr[k].name, s) == 0 )
   {
      printf("  %-5s  %-14s  %-14s  %-14s  %-5s\n\n" ,
                  "A-ID","Name","Vorname","Buchname","Zahl");
        b_ausgeben( buchr[k], 2);
    }
   else
      printf( "\nBuchname %s nicht vorhanden!!!\n", s );
}

// Suchen ein Auftrag
void a_suchen()
{
   int s=0;
   int k=0;

   printf( "Auftrag ID eingeben: " );
      scanf( "%d", s );
   fflush( stdin );

   k = a_Suche(s);

   if ( aufraege[k].auftrag_id == s )
      a_ausgeben( aufraege[k], 2);
   else
      printf( "\nAuftrag mit ID %d nicht vorhanden!!!\n", s );
}

//Eine Adresse Loeschen
void p_loeschen()
{
   int k = 0;
   char s[50];

   printf( "\nName eingeben: " );
      scanf("%s", &s);
   k = p_BinSuche(s);

   if ( strcmp(adrs[k].name, s) == 0 )
   {
      adrs[k] = adrs[pers_count - 1];
      pers_count--;
      // Adressen neu sortieren
      qsort(adrs, pers_count, sizeof (struct person_ds), p_vgl);
   }
   else
      printf( "Name %s nicht vorhanden\n", s );

   adrs = (struct person_ds*)realloc(adrs, pers_count*sizeof(struct person_ds));
}

//Eine Buch Loeschen
void b_loeschen()
{
   int k = 0;
   char s[50];

   printf( "\nBuchname eingeben: " );
      scanf("%s", &s);
   k = b_BinSuche(s);

   if ( strcmp(buchr[k].name, s) == 0 )
   {
      buchr[k] = buchr[buch_count - 1];
      buch_count--;
      // Buecher neu sortieren
      qsort(buchr, buch_count, sizeof (struct buch_ds), b_vgl);
   }
   else
      printf( "Buchname %s nicht vorhanden\n", s );

   buchr = (struct buch_ds*)realloc(buchr, buch_count*sizeof(struct buch_ds));
}

//Eine Auftrag Loeschen
void a_loeschen()
{
   int k = 0;
   int s;
   char taste;
   a_ausgabe();
   printf( "\nAuftrag ID eingeben: " );
      scanf("%d", &s);
   k = a_Suche(s);

   if ( aufraege[k].auftrag_id == s )
   {
      // Zahl der Buecher aus dem Auftrag in Vorrat ubertragen
      while( (taste != 'j') && (taste != 'n'))
      {
         printf("\nSollen die Buecher wieder zu Vorrat addiert werden? j/n:");
            taste = getch();
         if (taste == 'j')
            buchr[b_IDSuche(aufraege[k].b_id)].vorrat =
            buchr[b_IDSuche(aufraege[k].b_id)].vorrat + aufraege[k].outzahl;
      }
      // der zu loeschender Auftrag mit dem Index 'k' wird durch
      // den letzten Auftrag aus der Liste ersetzt
      aufraege[k] = aufraege[aufraege_count - 1];
      aufraege_count--;      // Anzahl der Auftraege wird decremmentiert
      // Auftraege neu sortieren
      qsort(aufraege, aufraege_count, sizeof (struct auftrag_ds), a_vgl);
   }
   else
      printf( "Auftrag mit ID: %d nicht vorhanden\n", s );
   // Raallocation der variable 'auftraege' mit der aktuelle Aufträgeanzahl 'aufraege_count'
   aufraege = (struct auftrag_ds*)realloc(aufraege, aufraege_count*sizeof(struct auftrag_ds));
}

// laden der Adressdatei in das Feld adrs
void p_laden()
{
   FILE* stream;

   stream = fopen( "adressen.dat", "r" );
   free(adrs);

   // falls das Laden funktioniert hat
   if ( stream != NULL )
   {
      // Anzahl der Adressen einlesen
      fread( &pers_count, sizeof( int ), 1, stream );

      // Speicher allokieren
      adrs = (struct person_ds*)calloc(pers_count, sizeof(struct person_ds));

      // Adressen einlesen
      fread( adrs, sizeof(struct person_ds), pers_count, stream );

      fclose(stream);
   }
   // falls die Datei leer war
   else
   {
      printf( "\nKeine Adressdatei gefunden!\n" );
      printf( "\nGeben Sie eine Adresse ein\n\n" );
      pers_count = 0;
      adrs = (struct person_ds*)calloc( 1, sizeof(struct person_ds) );
      p_eingabe();
   }
}

// laden der Bucherdatei in das Feld buchr
void b_laden()
{
   FILE* stream;

   stream = fopen( "buecher.dat", "r" );
   free(buchr);

   // falls das Laden funktioniert hat
   if ( stream != NULL )
   {
      // Anzahl der Adressen einlesen
      fread( &buch_count, sizeof( int ), 1, stream );

      // Speicher allokieren
      buchr = (struct buch_ds*)calloc(buch_count, sizeof(struct buch_ds));

      // Adressen einlesen
      fread( buchr, sizeof(struct buch_ds), buch_count, stream );

      fclose(stream);
   }
   // falls die Datei leer war
   else
   {
      printf( "\nKeine Bucherdatei gefunden!\n" );
      printf( "\nGeben Sie ein Buch ein\n\n" );
      buch_count = 0;
      buchr = (struct buch_ds*)calloc( 1, sizeof(struct buch_ds) );
      b_eingabe();
   }
}

// laden der Auftraegedatei in das Feld aufraege
void a_laden()
{
   FILE* stream;

   stream = fopen( "auftraege.dat", "r" );
   free(aufraege);

   // falls das Laden funktioniert hat
   if ( stream != NULL )
   {
      // Anzahl der Auftraege einlesen
      fread( &aufraege_count, sizeof( int ), 1, stream );

      // Speicher allokieren
      aufraege = (struct auftrag_ds*)calloc(aufraege_count, sizeof(struct auftrag_ds));

      // Auftraege einlesen
      fread( aufraege, sizeof(struct auftrag_ds), aufraege_count, stream );

      fclose(stream);
   }
   // falls die Datei leer war
   else
   {
      printf( "\nKeine Auftraege gefunden!\n" );
      printf( "\nGeben Sie ein Auftrag ein\n\n" );
      aufraege_count = 0;
      aufraege = (struct auftrag_ds*)calloc( 1, sizeof(struct auftrag_ds) );
      a_eingabe();
   }
}

// speichern von adrs in der Adressedatei
void p_speichern()
{
   FILE* stream;
   int k;

   stream = fopen( "adressen.dat", "w+" );
   fwrite( &pers_count, sizeof( int ), 1, stream );

   for ( k=0; k<=pers_count-1; k++ )
   {
      fwrite( &adrs[k], sizeof(struct person_ds), 1, stream);
   }

   fclose(stream);
}

// speichern von buchr in der Bucherdatei
void b_speichern()
{
   FILE* stream;
   int k;

   stream = fopen( "buecher.dat", "w+" );
   fwrite( &buch_count, sizeof( int ), 1, stream );

   for ( k=0; k<=buch_count-1; k++ )
   {
      fwrite( &buchr[k], sizeof(struct buch_ds), 1, stream);
   }

   fclose(stream);
}

// speichern von aufraege in der Auftragdatei
void a_speichern()
{
   FILE* stream;
   int k;

   stream = fopen( "auftraege.dat", "w+" );
   fwrite( &aufraege_count, sizeof( int ), 1, stream );

   for ( k=0; k<=aufraege_count-1; k++ )
   {
      fwrite( &aufraege[k], sizeof(struct auftrag_ds), 1, stream);
   }

   fclose(stream);
}

// Auswahl der Programmunterpunkte fuer Adressen
int p_menue()
{   
   
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue Adressen ******/\n\n" );
      printf( "1. Adresse eingeben\n" );
      printf( "2. Adresse suchen\n" );
      printf( "3. Adressliste\n" );
      printf( "4. Adresse loeschen\n" );
      printf( "5. Laden\n" );
      printf( "6. Speichern\n" );
      printf( "7. Zurueck\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

// Auswahl der Programmunterpunkte fuer Buecher
int b_menue()
{
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue Bucher ******/\n\n" );
      printf( "1. Buch eingeben\n" );
      printf( "2. Buch suchen\n" );
      printf( "3. Buchliste\n" );
      printf( "4. Buch loeschen\n" );
      printf( "5. Laden\n" );
      printf( "6. Speichern\n" );
      printf( "7. Zurueck\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

// Auswahl der Programmunterpunkte fuer Auftraege
int a_menue()
{
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue Auftraege ******/\n\n" );
      printf( "1. Auftrag eingeben\n" );
      printf( "2. Auftrag suchen\n" );
      printf( "3. Auftragliste\n" );
      printf( "4. Auftrag loeschen\n" );
      printf( "5. Laden\n" );
      printf( "6. Speichern\n" );
      printf( "7. Zurueck\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

// Auswahl der Programmunterpunkte fuer Buecher
int menue()
{
   int a=0;
   char c[10];
   //clrscr();
   while ( a<1 || a>7 )
   {
      printf( "\n/****** Menue ******/\n\n" );
      printf( "1. Adressen\n" );
      printf( "2. Buecher\n" );
      printf( "3. Auftraege\n" );
      printf( "4. Ende\n\n" );
      printf( "Ihre Eingabe : " );
      scanf( "%s", &c );
      fflush( stdin );
      printf( "\n" );
      a = c[0] - 48;
   }
   return a;
}

int main()
{
   int a;
   p_laden();
   b_laden();
   a_laden();
   do
   {
      a=menue();
      switch(a)
      {
      case 1:
         do
         {
            a = p_menue();
            switch (a)
            {
               case 1: p_eingabe();   break;
               case 2: p_suchen();      
                     printf("\nweiter mit Eingabetaste\n");
                     getchar();                   
                         break;               
               case 3: p_ausgabe();   break;
               case 4: p_loeschen();   break;
               case 5: p_laden();      break;
               case 6: p_speichern();   break;
            }
            if (a==7)
               break;
            //printf("\nweiter mit Eingabetaste\n");
            //getchar();
         } while (1);
         break;
      case 2:
         do
         {
            a = b_menue();
            switch (a)
            {
               case 1: b_eingabe();   break;
               case 2: b_suchen();      
                     printf("\nweiter mit Eingabetaste\n");
                     getchar();                   
                         break;
               case 3: b_ausgabe();   break;
               case 4: b_loeschen();   break;
               case 5: b_laden();      break;
               case 6: b_speichern();   break;
            }
            if (a==7)
               break;
            //printf("\nweiter mit Eingabetaste\n");
            //getchar();
         } while (1);
         break;
      case 3:
         do
         {
            a = a_menue();
            switch (a)
            {
               case 1: a_eingabe();   break;
               case 2: a_suchen();      
                   printf("\nweiter mit Eingabetaste\n");
                     getchar();                   
                         break;
               case 3: a_ausgabe();   break;
               case 4: a_loeschen();   break;
               case 5: a_laden();      break;
               case 6: a_speichern();   break;
            }
            if (a==7)
               break;
            //printf("\nweiter mit Eingabetaste\n");
            //getchar();
         } while (1);
         break;
      }
      if (a==4)
         break;
   } while (1);
   p_speichern();
   b_speichern();
   a_speichern();
   free(adrs);
   free(buchr);
   free(aufraege);
   return 0;
}



MCoupe:
Ich Pack auch noch ein dazu Taschenrechner einfach damit sind wir Komplett :-D

// This Programm is free Software; you can modify

#include<stdio.h>
#include<math.h>

#define MAX 100

void anleitung()
{
   printf("\n\t Taschenrechner  \n\n");
   
   printf("Der Taschenrechner unterstuetzt:\n");
   printf("\n");
   printf("   () geklammerte Ausdruecke\n");
   printf("   +  Addition\n");
   printf("   -  Subtraktion\n");
   printf("   /  Division\n");
   printf("   ^  Potenzierung\n");
   printf("   s()Sinus\n");

   printf("\n");
   printf("\t z.B.:(s(1.1^4)-2)/(-4+2*s(1))\n");

   printf("\n");
   printf("Leerzeichen sind nicht erlaubt\n");
   printf("Aufeinanderfolg. Operratoren werden durch 0 "
      "getrennt!\n");
   printf("Ende durch Eingabe von 0 oder )\n\n");
}

char s[MAX];      //der eingebene Ausdruck,der ausgewertet wird
int i;         //s ist das Zeichen,das akt.bearbeitet wird;

float expr();      //Vorwaertsdeklaration

//wandelt eine Ziffernfolge in eine Zahl um.
//statt sprintf() zu verwenden,werden die Zahlen
//Stelle fuer Stelle aufgebaut

float zahl(float q, float c)
{

//c=0 =>noch kein '.'eingelesen
//c=(0.1)^n =>n-te Nachkommastelle

   
   if(c==0)
      q=10*q+s-48;         // Synthax edit 4
      else
      q=q+c*(s-48);

   if( (s[i+1]>47) && (s[i+1]<58) )   //s[i+1] ist ziffer
      if(c==0)
   {
      i++;
      q=zahl(q,0);
   }
   else
   {
      i++;
      q=zahl(q,c/10);
   }

   if (s[i+1]=='.')
 {
   i+=2;
   q=zahl(q,0.1);
 }

return q;

}

//s_expr() wertet einen Ausdruck aus der
//      
//      subtrahiert(c=0)
//      multipliziert/dividiert(c=1)
//      potenziert (c=2) werden soll
//
//   der parameter c gibt die Prioritaet  an

float s_expr(int c)

   {
   float q=0;
   
   //Punkt - vor Strichrechnung
   while( s!=')' && s!='\0' && s!='+' && s!='-'
      && (c<1 || s!='*') && (c<1 || s!='/')
      && (c<2 || s!='^'))
   {
   if (s>47 && s<58)
      q=zahl(0,0);

   switch (s)
   
      {
      case '(': i++;
         q=expr();
         break;
         case '*': if(c<1)
{
         i++;
         q*=s_expr(1);
         }
      break;
   case'/': if(c<1)

   {
         i++;
         q/=s_expr(1);
         }
      break;
   case '^': if(c<2)
   
   {
         i++;
         q=exp(log(q)*s_expr(2));
         }
      break;
   case 's': i+=2;
         q=sin(expr());
      break;
      }
           i++;
         }
         i--;
         return q;
            }
//wertet Ausdruck aus

   float expr()
   {
      float qh,q=0;

      while(s!=')' && s!='\0')
   {
   //s ist eine Ziffer => in Zahl umwandeln

   if(s>47 && s<58)
      q=zahl(0,0);

   //s Rechenzeichen / Symbol
   switch(s)
   {
      case '(': i++; q =expr();      break;
      case '+': i++; q+=expr();i--;      break;
      case '-': i++; q-=s_expr(0);      break;
      case '*': i++; q*=s_expr(1);      break;
      case '/': i++; q/=s_expr(1);      break;
      case '^': i++; q =exp(log(q)*s_expr(2));break;
      case 's': i+=2;q =sin(expr());      break;
   }
     i++;
   }
      return q;
      }

   int main()
     {
      anleitung();
      do
     {
     //Eingabeband leeren
     for(i=0; i<MAX; i++)
       s= ' ';

        // Eingabe des Ausdruck   

        printf("\Ihre Eingabe:\n\n\t");

         scanf("%s",&s);

   i=0; // Auswertung beginnt mit dem ersten Zeichen

        // Auswertung Ausgabe
        printf("\n\tErgebnis: %f\n",expr());
   }while(s[0]!=')' && s[0]!='0');
    }

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln