P8000/WEGA/contrib/ingres/dbs/demo/amx/05.x

80 lines
1.9 KiB
Plaintext

/*
** Es soll die Stellung aller Angestellten bestimmt werden.
**
** Die Stellung kann sein:
** Direktor Der Angestellte hat keinen Leiter.
** Leiter Der Angestellte hat einen Leiter und Unterstellte.
** Angestellter Der Angestellte hat keine Unterstellte.
**
** Gleichzeitig soll die Anzahl der Direktoren, Leiter und
** Angestellten gezaehlt werden.
*/
## shared Dt
## i2 leiter;
## char name[21];
## char *name_arg;
amx(argc, argv)
int argc;
char **argv;
{
register int unterstellte;
register int direktor_zaehler;
register int leiter_zaehler;
register int angestellten_zaehler;
name_arg = (argc == 1)? "*": argv[1];
direktor_zaehler = leiter_zaehler = angestellten_zaehler = 0;
## open Personal
## retrieve Personal $Name == name_arg (name = $Name, leiter = $Leiter)
## {
printf("%-20s ", name);
if (leiter == 0)
{
/*
** Wir haben einen Direktor gefunden !
*/
printf("Direktor\n");
direktor_zaehler++;
## nextretrieve
}
/*
** Mit der Variable `unterstellte' soll bestimmt werden,
** ob wir den eben gefundenen Angestellten auch als Leiter
** bei einem beliebigen anderen Angestellten finden.
*/
unterstellte = 0;
## retrieve Personal $Leiter == $Num
## {
/*
** Ein gefundener Unterstellter reicht uns, wir
** brechen die Suche nach weiteren ab !
*/
unterstellte++;
## endretrieve
## }
if (unterstellte)
{
/*
** Wir haben Unterstellte gefunden, als muss der
** Angestellte ein Leiter sein, die Direktoren
** haben wir ja schon abgehandelt.
*/
printf("Leiter\n");
leiter_zaehler++;
}
else
{
/*
** Die Angestellten bleiben uebrig.
*/
printf("Angestellter\n");
angestellten_zaehler++;
}
## }
## close Personal
printf("TOTAL:\t%3d\n", direktor_zaehler + leiter_zaehler + angestellten_zaehler);
printf("\t%3d Direktoren\n", direktor_zaehler);
printf("\t%3d Leiter\n", leiter_zaehler);
printf("\t%3d Angestellte\n", angestellten_zaehler);
fflush(stdout);
}