codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct nomi {
char materia[20];
char nome_prof[20], cognome_prof[20];
int periodo, crediti, promossi;
} Struttura;
int main(int argc, char *argv[])
{
FILE *fp;
Struttura dati;
char nomefile[20], materiamax[80][20], materiadiff[4][20], matmax[20], nome[20], cognome[20];
int continuascrivere, righe=0, i, p;
int creditimax[80], promossimin[4], periodimax=4, max, pos, totcrediti=0, totpromossi=0, numtot=0;
float media=0;
for(p=0; p<80; p++) {
creditimax[p]=-1;
}
if(argc!=2) {
printf("\n\nERRORE parametri");
return 20;
}
strcpy(nomefile, argv[1]);
/*scrittura file*/
fp=fopen(nomefile, "w");
if(fp==NULL) {
printf("\n\nERRORE all'interno del file");
return 39;
}
do {
printf("\ninserisci materia:");
scanf("%s", dati.materia);
printf("\ninserisci nome prof:");
scanf("%s", dati.nome_prof);
printf("\ninserisci cognome prof:");
scanf("%s", dati.cognome_prof);
printf("\ninserisci semestre esame:");
scanf("%d", &dati.periodo);
while((dati.periodo<1)||(dati.periodo>4)) {
printf("\nERRORE digitazione. periodo non corretto");
printf("\ninserisci semestre esame:");
scanf("%d", &dati.periodo);
}
printf("\ninserisci crediti:");
scanf("%d", &dati.crediti);
printf("\ninserisci percentuale superamento esame:");
scanf("%d", &dati.promossi);
fprintf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, dati.periodo, dati.crediti, dati.promossi);
righe++;
printf("\n\nVuoi immettere altro esame?");
printf("\nse SI premi 1! - se NO premi 0!");
scanf("%d", &continuascrivere);
while((continuascrivere!=0)&&(continuascrivere!=1)) {
printf("\n\nERRORE digitazione.");
printf("\n\nVuoi immettere altro esame?");
printf("\nse SI premi 1! - se NO premi 0!");
scanf("%d", &continuascrivere);
}
}
while(continuascrivere!=0);
fclose(fp);
printf("\nscrittura file completata\n");
/*utilizzo file*/
fp=fopen(nomefile, "r");
if(fp==NULL) {
printf("\n\nERRORE apertura file");
return 70;
}
p=0;
while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {
creditimax[p]=dati.crediti;
strcpy(materiamax[p], dati.materia);
p++;
}
max=0;
for(p=1; p<80; p++) {
if(creditimax[p]>creditimax[p-1]) {
max=creditimax[p];
strcpy(matmax, materiamax[p]);
pos=p;
}
}
printf("la materia con piu' crediti e' %s ---> %d\n", matmax, max);
for(p=0; p<80; p++) {
if(p!=pos) {
if(creditimax[p]==max) {
printf("la materia con piu' crediti e' %s ---> %d\n", materiamax[p], creditimax[p]);
}
}
}
fclose(fp);
for(i=0; i<4; i++) {
promossimin[i]=101;
}
for(i=0; i<periodimax; i++) {
fp=fopen(nomefile, "r");
if(fp==NULL) {
printf("\n\nERRORE apertura file");
return 97;
}
while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {
if((dati.periodo==i+1)&&(dati.promossi<promossimin[i])) {
promossimin[i]=dati.promossi;
strcpy(materiadiff[i], dati.materia);
}
}
fclose(fp);
}
for(i=0; i<periodimax; i++) {
if(promossimin[i]!=101) {
printf("\nmateria piu' difficile periodo %d: %s con %d percentuale promossi",
i+1, materiadiff[i], promossimin[i]);
}
}
/*
printf("\n\nImmettere nome professore desiderato:");
scanf("%s", nome);
printf("\nimmettere cognome professore:");
scanf("%s", cognome);
fp=fopen(nomefile, "r");
if(fp==NULL) {
printf("\n\nErrore file");
return 148;
}
while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {
if(strcmp(dati.nome_prof, nome)==0) {
if(strcmp(dati.cognome_prof, cognome)==0) {
totcrediti=totcrediti+dati.crediti;
totpromossi=totpromossi+dati.promossi;
numtot++;
}
}
}
fclose(fp);
media=(float)totpromossi/numtot;
printf("\n\n PROFESSORE RICHIESTO: %s %s", nome, cognome);
printf("\n\nTotale crediti delle sue materie: %d", totcrediti);
printf("\n\nMedia superamento esami: %f percento\n\n", media);
*/
return 0;
}