By Mr. Papadopoulos
Choose your prefered Language: greek_flag uk_flag

Το αρχείο καταγραφών των μεταφορτώσεων αρχείων (file downloads) ενός παρόχου Internet περιέχει σε κάθε γραμμή του τις εξής πληροφορίες για κάθε μεταφόρτωση:

  1. IP διεύθυνση client ( τέσσερις ακέραιες τιμές, 1-255)
  2. Κατάσταση μεταφόρτωσης (0=επιτυχής, 1=ανεπιτυχής, 2=σε αναμονή, θετικός ακέραιος με τιμές 0,1,2)
  3. Μέγεθος αρχείου σε Mb (θετικός αριθμός, float)
  4. Όγκος μεταφόρτωσης σε Mb

Το αρχείο είναι σειριακό, δίνεται, και έχει όνομα IP_clients.txt. Μερικές γραμμές του αρχείου είναι:

191 255 244 1          0          15.7 15.7

198 168    2 3           2          23.0 16.0

... ...

  • Κάθε IP διεύθυνση μπορεί να υπάρχει περισσότερες από μία φορές στο αρχείο.


Να οριστεί μια δομή με όνομα log_client για τη διαχείριση αυτών των δεδομένων. Τα μέλη της δομής θα είναι αυτές οι πληροφορίες. Στη συνέχεια να οριστεί ένας πίνακας δομών τύπου log_client, Ν θέσεων (Ν= γνωστό) . Τα δεδομένα στον πίνακα δομών θα εισάγονται μέσω προσπέλασης του σειριακού αρχείου IP_clients.txt . Να θεωρήσετε ως δεδομένο ότι η τιμή του N υπερκαλύπτει το πλήθος των εγγραφών του αρχείου. Ζητούνται τα παρακάτω (συνάρτηση main( ) ):

 

  1. Nα γίνει η εισαγωγή των δεδομένων από το αρχείο IP_clients.txt στον πίνακα δομών, ελέγχοντας την ύπαρξη του αρχείου (δείτε τον κώδικα στη συνέχεια), σύμφωνα με τον ανωτέρω περιορισμό. Να βρείτε και να εμφανίσετε το πλήθος των γραμμών του αρχείου που θα περιέχει ο πίνακας δομών.
  2. Χρησιμοποιώντας όλα τα στοιχεία του πίνακα δομών:
  • Να βρείτε το συνολικό όγκο και το πλήθος των μεταφορτώσεων σε αναμονή
  • Να εισάγετε την IP διεύθυνση ενός client από το πληκτρολόγιο, χωρίς έλεγχο εγκυρότητας τιμών, και στη συνέχεια, να βρείτε και να εμφανίσετε γι’ αυτόν τον client (αν υπάρχει στον πίνακα δομών) :

Τον συνολικό όγκο επιτυχών και ανεπιτυχών μεταφορτώσεων, δηλ. δύο ξεχωριστές τιμές.

/* Δημιουργία Αρχείου
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;int n,i,j;

    fp=fopen("IP_clients.txt","w");

    if (fp==NULL)
    {
        printf("Problem creating file\n");
        exit(1);
    }

    n=rand()%50+50;

    for (i=0;i<n;i++)
    {

        for (j=0;j<4;j++)
        {
            fprintf(fp,"%d ",rand()%255+1);
            if (j!=3)
            {
                fprintf(fp," ");
            }
        }
        fprintf(fp,"%d %.2lf %.2lf",rand()%3,(rand()%10+1)*1.0,(rand()%10+1)*1.0);

        if (i!=n-1)
        {
            fprintf(fp,"\n");
        }
    }
}