Non so come modificare/continuare
Implementare una struct con gli studenti della facoltà di Bioinformatica di TorVergata. Per ogni studente è necessario specificare le seguenti informazioni: nome, cognome, matricola, data di nascita (tipo derivato), indirizzo di residenza (tipo derivato con: nome via, civico, cap, comune), ISEE, anno accademico di iscrizione. Implementare una struct con i docenti della facoltà di Bioinformatica di TorVergata. Per ogni docente è necessario specificare: nome, cognome, codice fiscale, data di nascita (tipo derivato), indirizzo di residenza (tipo derivato con: nome via, civico, cap, comune). Implementare una struct con i corsi della facoltà di Bioinformatica di TorVergata. Per ogni corso è necessario specificare: nome, cfu, anno di erogazione (primo o secondo), semestre di erogazione (primo o secondo), docente (tipo derivato).
4.Segue dall'esercizio precedente. Implementare un menu scelta e le funzioni per: aggiungere un nuovo studente/docente/corso, rimuovere uno studente/docente/corso, modificare i dati relativi all’indirizzo di residenza (per studente/docente) o all’ISEE (solo studente), modificare il docente di un corso. Gli studenti/docenti devono essere aggiunti in una lista ordinata per cognome, i corsi i una lista ordinata per nome.
5.Implementare una struct con gli esami sostenuti da ogni studente della facoltà di Bioinformatica di TorVergata, modificando in modo opportuno la struct degli studenti. Per ogni esame è necessario specificare: data in cui è stato sostenuto (tipo derivato), voto, corso (che punta all’elemento corretto della lista dei corsi). Implementare nel menu scelta le funzioni per aggiungere un esame per uno studente (in base alla matricola), calcolare la media ponderata di uno studente.
Implementare una struct con gli studenti della facoltà di Bioinformatica di TorVergata. Per ogni studente è necessario specificare le seguenti informazioni: nome, cognome, matricola, data di nascita (tipo derivato), indirizzo di residenza (tipo derivato con: nome via, civico, cap, comune), ISEE, anno accademico di iscrizione. Implementare una struct con i docenti della facoltà di Bioinformatica di TorVergata. Per ogni docente è necessario specificare: nome, cognome, codice fiscale, data di nascita (tipo derivato), indirizzo di residenza (tipo derivato con: nome via, civico, cap, comune). Implementare una struct con i corsi della facoltà di Bioinformatica di TorVergata. Per ogni corso è necessario specificare: nome, cfu, anno di erogazione (primo o secondo), semestre di erogazione (primo o secondo), docente (tipo derivato).
4.Segue dall'esercizio precedente. Implementare un menu scelta e le funzioni per: aggiungere un nuovo studente/docente/corso, rimuovere uno studente/docente/corso, modificare i dati relativi all’indirizzo di residenza (per studente/docente) o all’ISEE (solo studente), modificare il docente di un corso. Gli studenti/docenti devono essere aggiunti in una lista ordinata per cognome, i corsi i una lista ordinata per nome.
5.Implementare una struct con gli esami sostenuti da ogni studente della facoltà di Bioinformatica di TorVergata, modificando in modo opportuno la struct degli studenti. Per ogni esame è necessario specificare: data in cui è stato sostenuto (tipo derivato), voto, corso (che punta all’elemento corretto della lista dei corsi). Implementare nel menu scelta le funzioni per aggiungere un esame per uno studente (in base alla matricola), calcolare la media ponderata di uno studente.
C:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
struct nascita { //struttura dati per la nascita degli studenti
int giorno;
int mese;
int anno;
};
struct residenza { //struttura dati per la residenza
char via[10];
int civico;
int cap;
char comune [10];
};
struct studente{ //struttura dati studente
char nome[10];
char cognome [10];
int matricola;
struct nascita n;
struct residenza r;
int ISEE;
int anno_iscrizione;
};
typedef struct studente Tstudente;
struct docente {
char nome[10];
char cognome[10];
char codice_fiscale[16];
struct nascita n;
struct residenza r;
};
typedef struct docente Tdocente;
struct corsi{
char nome[10];
int cfu;
int anno_erogazione;
int semestre_erogazione;
struct docente d;
};
typedef struct corsi Tcorsi;
struct SNode_studente{
Tstudente studente;
struct SNode_studente *link_s; //puntatore al nodo successivo
};
typedef struct SNode_studente TNode_studente; // ridefinizione della struttura
typedef TNode_studente *TList_s; // definizione del puntatore per indirizzo della struttura
struct SNode_docente{
Tdocente docente;
struct SNode_docente *link_d; //puntatore al nodo successivo
};
typedef struct SNode_docente TNode_docente; // ridefinizione della struttura
typedef TNode_docente *TList_d; // definizione del puntatore per indirizzo della struttura
struct SNode_corso{
Tcorsi corsi;
struct SNode_corso *link_c; //puntatore al nodo successivo
};
typedef struct SNode TNode_corso; // ridefinizione della struttura
typedef TNode_corso *TList_c; // definizione del puntatore per indirizzo della struttura
/* Segue dall'esercizio precedente. Implementare un menu scelta e le funzioni per:
* aggiungere un nuovo studente/docente/corso, rimuovere uno studente/docente/corso,
* modificare i dati relativi all’indirizzo di residenza (per studente/docente)
* o all’ISEE (solo studente),
* modificare il docente di un corso. Gli studenti/docenti devono essere
* aggiunti in una lista ordinata
* per cognome, i corsi i una lista ordinata per nome. */
int scelta;
TList_c Crea_Lista_c();
TList_d Crea_Lista_d();
TList_s Crea_Lista_s();
Tstudente info_studente();
Tdocente info_docente();
Tstudente studente;
Tcorsi corsi;
Tdocente docente;
TList_s inserisci_studente(TList_s list, Tstudente studente);
TList_d inserisci_docente (TList_d list, Tdocente docente);
void inserisci_edit_dato(TNode_studente *node, struct residenza r);
struct residenza leggi_nuova_residenza(); //inserisce la nuova residenza
Tstudente Cancella_Elemento(Tstudente studente, char *cognome);
Tcorsi Cancella_elemento(Tcorsi corsi, char *nome);
Tdocente cancella_elemento(Tdocente docente, char *cognome);
TNode_studente * Cerca_Cognome (Tstudente lista, char *cognome); //cerca un elemento della lista per cognome
TNode_docente * Cerca_cognome (Tdocente lista, char *cognome); //cerca un elemento della lista per cognome
int menu();
int main() {
char cognome[10];
char codice[16];
struct residenza r;
char municipio[2];
TList_c list_c;
TList_s list_s;
TList_d list_d;
TNode_corso *node_c;
TNode_docente *node_d;
TNode_studente *node_s;
list_c = Crea_Lista_c();
list_d = Crea_Lista_d();
list_s = Crea_Lista_s();
menu();
while (scelta = menu()) {
switch (scelta) {
case 1: {
studente = info_studente();
list_s = inserisci_studente(list_s,studente);
docente = info_docente();
list_d = inserisci_docente(list_d, docente);
break;
}
case 2:{
printf("Inserire cognome da voler eliminare ");
scanf("%s", cognome);
Tstudente Cancella_Elemento(Tstudente studente, char *cognome);
Tdocente cancella_elemento(Tdocente docente, char *cognome);
printf ("Eliminato\n");
break;
}
}
return 0;
}
}
int menu() {
printf("------\n");
printf("scegliere 1 per aggiungere uno studente \n");
printf("scegliere 2 per aggiungere un docente \n");
printf("scegliere 3 per aggiungere un corso \n");
printf("scegliere 4 per modificare residenza \n");
printf("scegliere 5 per modificare ISEE \n");
printf("------\n");
scanf("%d", &scelta);
return scelta;
}
TList_c Crea_Lista_c() {
// inizializzo la lista corsi
return NULL;
}
TList_d Crea_Lista_d() {
// inizializzo la lista docenti
return NULL;
}
TList_s Crea_Lista_s() {
// inizializzo la lista studenti
return NULL;
}
Tstudente inserisci_studente(){
printf("\nInserisci nome studente ");
scanf("%s", studente.nome );
printf("\nInserisci cognome: ");
scanf("%s", studente.cognome);
printf("\nInserisci matricola: ");
scanf("%d", &studente.matricola);
printf("\nInserisci giorno di nascita: ");
scanf("%d", &studente.n.giorno);
printf("\nInserisci via di residenza: ");
scanf("%s", studente.r.via );
printf("\nInserisci civico di residenza: ");
scanf("%d", &studente.r.civico);
printf("\nInserisci cap di residenza: ");
scanf("%d", &studente.r.cap);
printf("\nInserisci comune: ");
scanf("%s", &studente.r.comune);
return studente;
}
Tdocente docente;
Tdocente inserisci_docente(){
printf("\nInserisci nome docente ");
scanf("%s", docente.nome);
printf("\nInserisci cognome: ");
scanf("%s", docente.cognome);
printf("\n Inserisci codice fiscale ");
scanf("%s", docente.codice_fiscale);
printf("Inserisci giorno di nascita: ");
scanf("%d", &docente.n.giorno);
scanf("%s", docente.r.via );
printf("\nInserisci civico di residenza: ");
scanf("%d", &docente.r.civico);
printf("\nInserisci cap di residenza: ");
scanf("%d", &docente.r.cap);
printf("\nInserisci comune: ");
scanf("%s", &docente.r.comune);
return docente;
}
Tcorsi corsi;
Tcorsi inserisci_corso(){
printf("\nInserisci nome ");
scanf("%s", corsi.nome);
printf("\nInserisci cfu" );
scanf("%d", corsi.cfu);
printf("\nInserisci anno di erogazione ");
scanf("%d", corsi.anno_erogazione);
printf("\nInserisci semestre di erogazione ");
scanf("%d", corsi.semestre_erogazione);
printf("\nInserisci docente ");
scanf("%s", &docente);
return corsi;
}
TList_s inserisci_studente(TList_s list_s, Tstudente info){
TList_s prec, curr, newnode;
// nodo precedente punta null
prec = NULL;
// nodo corrente è impostato al primo nodo della lista
curr = list_s;
// devo scorrere finchè curr sia null e se il cognome che voglio inserire ha un valore maggiore del nodo che stiamo
// visitando allora deve scorrere in avanti
while ((curr != NULL) && (strcmp(info.cognome, curr->studente.cognome) > 0)) {
prec = curr;
curr = curr->link_s;
}
newnode = (TNode_studente *) malloc(sizeof(TNode_studente));
assert(newnode != NULL);
newnode-> studente = info;
if (prec == NULL) {
newnode->link_s = list_s;
list_s = newnode;
return list_s;
} else {
prec->link_s = newnode; //il nodo precedente deve puntare al nuovo nodo inserito
newnode->link_s = curr;
return list_s;
}
}
void inserisci_edit_dato(TNode_studente *node, struct residenza r) //inserisci un dato dell' elemento della lista che è stato modificato
{
strcpy(node->studente.r.via, r.via);
node->studente.r.civico = r.civico;
node->studente.r.cap = r.cap;
strcpy(node->studente.r.comune, r.comune);
}
struct residenza leggi_nuova_residenza() { //modifica dato
printf("\nInserisci la nuova via di residenza: ");
scanf("%s", studente.r.via);
printf("\nInserisci il nuovo n. civico di residenza: ");
scanf("%d", &studente.r.civico);
printf("\nInserisci il nuovo cap di residenza: ");
scanf("%d", &studente.r.cap);
printf("\nInserisci il nuovo municipio di residenza: ");
scanf("%s", studente.r.comune);
printf("il suo indirizzo è:%s%d%d%s", studente.r.via, studente.r.civico, studente.r.cap, studente.r.comune);
return studente.r;
}
Ultima modifica da un moderatore: