function stud
% Alexander Wiede 103977
% Studentenverwaltung
clear all;
iend=0;
Stud_kartei=[];
Stg_Auswahl=[];
wdh = 1;
while wdh==1
	clc;
	disp('****  Studentenverwaltung  ****');
	disp(' ');
	disp('(1)	Laden einer vorhandenen Studentenkartei');
	disp('(2)	Hinzufügen von Einträgen');
	disp('(3)	Löschen eines Eintrages');
    disp('(4)	Ausgabe aller Einträge in Tabellenform');
    disp('(5)	Ausgabe aller Namen aus einer bestimmten Altersgruppe');
	disp('(6)	Ausgabe einer Namensliste für ausgewählten Studiengang');
    disp('(7)	Speichern der Daten beenden des Programms');
	disp(' ');
	switch input('Auswahl: ')
	case 1 % Laden einer vorhandenen Liste
        [iend,Stud_kartei,Stg_Auswahl]=laden;
    case 2 % Hinzufügen von Einträgen
        [iend,Stud_kartei,Stg_Auswahl]=hinzu(iend,Stud_kartei,Stg_Auswahl);    
    case 3 % Löschen eines Eintrages
        clc;
        disp('Löschen eines Eintrages');
        del=input('Suchname: ','s');
        a=1;
        for j=1:iend
            if strcmp(Stud_kartei(j).name,del)   
                Stud_kartei(j) = Stud_kartei(iend);
                disp(' ');
                disp(['Eintrag mit Namen: ',del,' gelöscht!']);
                a=0;
                iend= iend-1;
                pause;
                break
            end
        end
        if a==1
            disp(' ');
            disp('Kein Eintrag gefunden!');
            disp(' ');
            pause;
        end
    case 4 % Ausgabe
        clc;
        disp('Alle Einträge:');
        disp(' ');
        fprintf('%3s %-20s %-20s %10s %10s %2s %2s\n',' ','Name','Vorname','Matrik-Nr.','Alter',' ','Studiengang');
        disp(' ');
        for i=1:iend
            fprintf('%3d %-20s %-20s %10d %10d %2s %2s\n',i,Stud_kartei(i).name,Stud_kartei(i).vorname,Stud_kartei(i).matrikel,Stud_kartei(i).alter,' ',Stud_kartei(i).stg);
        end
        pause;
    case 5 % Ausgabe aller Namen aus einer bestimmten Altersgruppe
        clc;
        disp('Studenten der Altersgruppe anzeigen.');
        alter1=input('von: ');
        alter2=input('bis: ');
        ausw_alter(iend,Stud_kartei,alter1,alter2);
    case 6 % Ausgabe einer Namensliste für ausgewählten Studiengang
        clc;
        disp('A=Architektur     B=Bauwesen                          E=Elektrotechnik');
        disp('M=Maschinenbau    V=Verfahrens- und Umwelttechnik     W=Wirtschaftsinformatik');
        Stg=input('Studiengang:','s');
        Stg=upper(Stg);
        a=1;
        for j=1:length(Stg_Auswahl)
            if strcmp(Stg_Auswahl(j).kuerzel,Stg)   
                wert=Stg_Auswahl(j).name;
                ausw_stg(iend,Stud_kartei,wert);
                a=0;
                break                
            end
        end
        if a==1
            disp(' ');
            disp([Stg,' ist kein gültiger Studiengang!']);
            disp(' ');
            pause;
        end
    case 7 % Speichern der Daten und Beenden des Programms
        beenden(iend,Stud_kartei,Stg_Auswahl);
        wdh=0;
    otherwise
        disp('Wählen Sie eine Zahl zwischen 1 und 7 !');
        disp('Weiter mit Enter!');
        pause;
    end	
end

function [iend,Stud_kartei,Stg_Auswahl]=laden
clc;
disp('Laden vorhandener Daten aus einer Datei.');
disp('Bestehende Daten werden überschrieben !');
s1=input('\nLaufwerks- und Pfadangabe: ','s');
s2=input('\nDateiname ohne Erweiterung: ','s');
s=['load ',s1,filesep,s2,' iend Stud_kartei Stg_Auswahl'];
eval(s);
disp(' ');
disp([num2str(iend),' Datensätze geladen']);
disp('Weiter mit Enter !');
pause;

function [iend,Stud_kartei,Stg_Auswahl]=hinzu(iend,Stud_kartei,Stg_Auswahl)
clc;
wdh=1;
wdhname=1;
i=iend+1;
while wdh
    clc;
    disp('Eingabe beenden durch Enter.');
    disp(' ');
    wdhname=1;
    while wdhname
        Stud_kartei(i).name=input('Name   :','s');
        if length(Stud_kartei(i).name)>20
            disp(' ');
            disp('Der Name darf maximal aus 20 Zeichen bestehen.');
            disp(' ');
        else
            wdhname=0;
        end
    end
    if isempty(Stud_kartei(i).name)
        wdh=0;
        iend=i-1;
    else
        wdhvorname=1;
        while wdhvorname
            Stud_kartei(i).vorname=input('Vorname:','s');
            if length(Stud_kartei(i).vorname)>20
                disp(' ');
                disp('Der Vorname darf maximal aus 20 Zeichen bestehen.');
                disp(' ');
            else
                wdhvorname=0;
            end
        end
        wdhnr=1;
        while wdhnr
            Stud_kartei(i).matrikel=input('Immatr.-Nr.: ');
            if length(num2str(Stud_kartei(i).matrikel)) ~=6
                disp(' ');
                disp('Die Matrikelnummer muss genau aus 6 Ziffern bestehen');
                disp(' ');
            else
                wdhnr=0;
            end
        end
        wdhalter=1;
        while wdhalter
            Stud_kartei(i).alter=input('Alter: ');
            if length(num2str(Stud_kartei(i).alter))~=2
                disp(' ');
                disp('Geben Sie das Alter als eine zweistellige Zahl ein!');
                disp(' ');
            else
                wdhalter=0;
            end
        end
        a=1;
        while a
            disp(' ');
            disp('A=Architektur     B=Bauwesen                          E=Elektrotechnik');
            disp('M=Maschinenbau    V=Verfahrens- und Umwelttechnik     W=Wirtschaftsinformatik');
            disp(' ');
            Stg=input('Studiengang:','s');
            Stg=upper(Stg);
            for j=1:length(Stg_Auswahl)
                if strcmp(Stg_Auswahl(j).kuerzel,Stg)   
                    Stud_kartei(i).stg=Stg_Auswahl(j).name;
                    clc;
                    disp('Ihr neuer Eintrag');
                    disp(' ');
                    fprintf('%3s %-20s %-20s %10s %10s %2s %2s\n',' ','Name','Vorname','Matrik-Nr.','Alter',' ','Studiengang');
                    disp(' ');
                    fprintf('%3d %-20s %-20s %10d %10d %2s %2s\n',i,Stud_kartei(i).name,Stud_kartei(i).vorname,Stud_kartei(i).matrikel,Stud_kartei(i).alter,' ',Stud_kartei(i).stg);
                    i=i+1;
                    a=0;
                    pause;
                    break    
                end
            end        
            if a==1
                disp(' ');
                disp([Stg,' ist kein gültiger Studiengang!']);
                disp(' ');
            end
        end
    end         
end

function ausw_alter(iend,Stud_kartei,alter1,alter2)
clc;
disp(['Studenten des Alters von ',num2str(alter1),' bis ',num2str(alter2)]);
disp(' ');
fprintf('%3s %-20s %-20s %10s %10s %2s %2s\n',' ','Name','Vorname','Matrik-Nr.','Alter',' ','Studiengang');
disp(' ');
a=1;
for i=1:iend
    if Stud_kartei(i).alter >= alter1
        if Stud_kartei(i).alter <= alter2
            fprintf('%3d %-20s %-20s %10d %10d %2s %2s\n',i,Stud_kartei(i).name,Stud_kartei(i).vorname,Stud_kartei(i).matrikel,Stud_kartei(i).alter,' ',Stud_kartei(i).stg);
            a=0;
        end
    end   
end
disp(' ');
if a==0
   disp('Weiter mit beliebiger Taste!');
   pause;
else
   disp('Eintrag nicht gefunden - weiter mit Enter!');
   pause;
end

function ausw_stg(iend,Stud_kartei,wert)
clc;
disp(['Studenten des Studiengangs ',wert]);
disp(' ');
fprintf('%3s %-20s %-20s %10s %10s\n',' ','Name','Vorname','Matrik-Nr.','Alter');
disp(' ');
a=1;
for i=1:iend
    if strcmp(Stud_kartei(i).stg,wert)
      fprintf('%3d %-20s %-20s %10d %10d\n',i,Stud_kartei(i).name,Stud_kartei(i).vorname,Stud_kartei(i).matrikel,Stud_kartei(i).alter);
      a=0;
  end   
end
disp(' ');
if a==0
   disp('Weiter mit Enter!');
   pause;
else
   disp('Eintrag nicht gefunden - weiter mit beliebiger Taste!');
   pause;
end

function beenden(iend,Stud_kartei,Stg_Auswahl)
clc;
disp(' Speichern der Daten und Beenden des Programms');
if input('Daten speichern (j/n): ','s') == 'j'
    s1=input('\nLaufwerk und Pfad für Datensicherung: ','s');
    s2=input('\nDateiname ohne Erweiterung: ','s');
    s=['save ',s1,filesep,s2,' iend Stud_kartei Stg_Auswahl'];
    eval(s);
    disp([num2str(iend),' Datensätze unter ',s1,'\',s2,'.mat gespeichert']);
    disp('Weiter mit Enter!');
    pause;
end;