Dipendenti di un azienda
PROBLEMA
Scrivere un programma in che, dopo aver letto I dati relativi a ”num” dipendenti di un azienda con “anno_nascita”:
- ordina in senso crescente per anno_nascita e stampa a video;
- ordina in senso decrescente per anno_nascita e stampa a video.
CODICE SORGENTE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define LUNGHEZZA_TESTO 256
//Dichiarazione funzioni
void banner_menu();
void banner_menu_1();
void banner_menu_2();
void banner_menu_3();
void uscita_sezione_menu();
void banner_time();
//corpo del programma principale
int main(int argc, char *argv[]){
//sezione dichiarativa
int num, i, j, nome_piu_lungo=0, temp2;
char menu;
char temp [LUNGHEZZA_TESTO];
//sezione input del numero di dipendenti
do{
system("cls");
banner_time();
printf("|Inserire il numero di dipendenti\n|>");
scanf("%i", &num);
}while(num<=0);
//dichiarazione tabella
char cognome_nome[num][LUNGHEZZA_TESTO];
int anno_nascita[num];
//sezione input nomi dei dipendenti
for (i=0; i<num; i++){
do{
system("cls");
banner_time();
printf("|Inserire il dipendendente numero %i\xa7\n|>", i+1);
fflush(stdin);
gets(cognome_nome[i]);
}while(strlen(cognome_nome[i])<=0);
}
//sezione input della data di nascita
for (i=0; i<num; i++){
do{
system("cls");
banner_time();
printf("|Inserire la data di nascita del dipendendete ");
puts(cognome_nome[i]);
printf("|>");
scanf("%i", &anno_nascita[i]);
}while(anno_nascita[i]<=0);
}
//for per determinare il nome nome più lungo
for (i=0; i<num; i++){
if(strlen(cognome_nome[i])>nome_piu_lungo)
nome_piu_lungo=strlen(cognome_nome[i]);
}
//menu per le varie opzione
do{
banner_menu();
fflush(stdin);
menu=getch();
switch(menu){
case'1': //primo punto della consegna
//messa in ordine per le darte di nascita
for (i=0; i<num-1; i++){
for (j=i+1; j<num; j++){
if (anno_nascita[i]>anno_nascita[j]){
temp2=anno_nascita[i];
strcpy(temp, cognome_nome[i]);
anno_nascita[i]=anno_nascita[j];
strcpy(cognome_nome[i], cognome_nome[j]);
anno_nascita[j]=temp2;
strcpy(cognome_nome[j], temp);
}
}
}
//sezione di output dei nomi con voti
banner_menu_1();
for (i=0; i<num; i++){
printf("| ");
fputs(cognome_nome[i], stdout);
for (j=strlen(cognome_nome[i]); j<nome_piu_lungo+10; j++)
printf(" ");
printf("%i\n", anno_nascita[i]);
}
uscita_sezione_menu();
break;
case'2': //secondo punto della consegna
//messa in ordine per le date di nascita al contriario
for (i=0; i<num-1; i++){
for (j=i+1; j<num; j++){
if (anno_nascita[i]<anno_nascita[j]){
temp2=anno_nascita[i];
strcpy(temp, cognome_nome[i]);
anno_nascita[i]=anno_nascita[j];
strcpy(cognome_nome[i], cognome_nome[j]);
anno_nascita[j]=temp2;
strcpy(cognome_nome[j], temp);
}
}
}
//sezione di output dei nomi con voti
banner_menu_2();
for (i=0; i<num; i++){
printf("| ");
fputs(cognome_nome[i], stdout);
for (j=strlen(cognome_nome[i]); j<nome_piu_lungo+10; j++)
printf(" ");
printf("%i\n", anno_nascita[i]);
}
uscita_sezione_menu();
break;
case'3':
banner_menu_3();
break;
default:
break;
}
}while(menu!='3');
return 0;
}
void banner_time (void) {
time_t t;
time(&t);
printf("|----------------------------------\n");
printf("|%s", ctime(&t));
printf("|----------------------------------\n");
}
void uscita_sezione_menu(void){
printf("|----------------------------------\n");
printf("|Premi un tasto per tornare al menu\n");
getch();
}
void banner_menu_1(void){
system("cls");
banner_time();
printf("|--!Dipendente!---------!Anno!----\n");
}
void banner_menu_2(void){
system("cls");
banner_time();
printf("|--!Dipendente!---------!Anno!----\n");
}
void banner_menu_3(void){
int i;
system("cls");
banner_time();
for (i=0; i<5; i++){
printf("|Grazie di aver utilizzato il programma\n");
sleep(1);
}
}
void banner_menu (void){
system("cls");
banner_time();
printf("|1. Ordina per data crescente\n");
printf("|2. Ordina per data decrescente\n");
printf("|3. Esci\n");
printf("|Premere il tasto desiderato");
}