Programm oprimieren



  • So Leute...ich hab ein Programm geschrieben das über die Konsole verschiedene Programm öffnet. Allerdings ist die Syntax jetzt schon sehr unübersichtlich und sehr groß. Bräuchte eure Hilfe zum Optimieren.

    Verbesserungs- und Änderungsvorschläge komme ich gerne entgegen, da ich sowieso weiß, dass man es auf jedenfall verbessern kann.

    #include <iostream.h>
    #include <conio.h>
    #ifdef _cplusplus // Überprüfen, ob ein C++-Compiler verwendet wird 
    #include <cstdlib> // Wenn ja -> cstdlib einbinden
    #else // sonst 
    #include <stdlib.h> // stdlib.h einbinden
    #endif
    #include <stdlib.h>
    
    main()
    {
       int pers, code, start, i;
       char antwort, pw1[4], pw1x[4]={'4','3','2','1'};
       cout<<"			 Project Rien - Top Secret!\n";
       cout<<"................................................................................\n";
       cout<<"Weiter mit beliebiger Taste\n";
       getch();
       clrscr();
       cout<<"Dieses Programm oeffnet eine Reihe von festgelegten Programmen.";
       cout<<"Diese werden im weiteren Verlauf des Programmes aufgelistet.\n";
       cout<<"Durch das Prinzip der Nummernauswahl, koennen Sie selbst bestimmen welches\n"; 
       cout<<"Programm ausgefuehrt werden soll.\n";
       cout<<"\nWeiter mit beliebiger Taste";
       getch();
       clrscr();
    
       do
       {
       cout<<"\nPersonalnummer: ";
       cin>>pers;
       switch (pers)
       	{
            case 1234:	cout<<"Passwort: ";
                          for (i=0;i<=4;i++)
                      	  {
                            pw1[i]=getch();
                            cout<<"*";
                            }
                          cout<<endl;
          				if (pw1[0]==pw1x[0] && pw1[1]==pw1x[1] && pw1[2]==pw1x[2] && pw1[3]==pw1x[3])
                        	{
          				  cout<<"\nZugang gewaehrt. Weiter mit beliebiger Taste\n";
                            getch();;
                         	  do
                         	  {
                         	  cout<<"\nDruecke 1 um ICQ zu starten\n";
                         	  cout<<"\nDruecke 2 um MS Word zu starten\n";
                         	  cout<<"\nDruecke 3 um MS Excel zu starten\n";
                         	  cout<<"\nDruecke 4 um MS Access zu starten\n";
                         	  cout<<"\nDruecke 5 um MS Powerpoint zu starten\n";
                         	  cout<<"\nAuswahl: ";
    		                   cin>>start;
                         		switch (start)
                         		   {
                            		case 1: system("\"C:/Programme/ICQ6.5/icq.exe\"");break;
                            		case 2: system("\"C:/Programme/Microsoft Office/Office10/winword.exe\"");break;
                            		case 3: system("\"C:/Programme/Microsoft Office/Office10/excel.exe\"");break;
                            		case 4: system("\"C:/Programme/Microsoft Office/Office10/msaccess.exe\"");break;
                            		case 5: system("\"C:/Programme/Microsoft Office/Office10/powerpnt.exe\"");break;
                            		default : cout<<"\nNummer nicht vergeben\n";break;
                            		}
                         	  cout<<"\nWollen Sie weiter machen, J oder N: ";
                         	  cin>>antwort;
                         	  clrscr();
                         	  }
                         	  while (antwort=='j' || antwort=='J');
          				  }
          			   else
          					{
          					cout<<"\nZugang verweigert\n";
          					}
                         break;
       	case 5678:  {
          			 cout<<"Passwort: ";
          			 cin>>code;
          			 if (code==8765)
          				{
          				cout<<"\nZugang gewaehrt\n";
                          getch();
                            do
                            {
                            cout<<"\nBeliebige Taste um CMD zu starten\n";
                            getch();
                            system("cmd.exe");
                            cout<<"\nWollen Sie zurueck zur CMD, J oder N: ";
                            cin>>antwort;
                            clrscr();
                            }
                            while (antwort=='j' || antwort=='J');
          			    }
          			  else
          				{
          				cout<<"\nZugang verweigert";
                          }
                        }  break;
          default: cout<<"\nKein Personal mit dieser Nummer gefunden!\n";
          getch();
          }
          cout<<"\nWollen Sie vortfahren J oder N: ";
          cin>>antwort;
          clrscr();
       }
       while	(antwort=='j' || antwort=='J');
    }
    

    Und ja, ich weiß es ist verdammt groß



  • Hallo,
    bitte benutze die cpp-Tags. Wie wäre es, wenn Du ein paar Funktionen machst und nicht alles gandenlos in die main reinschreibst? Wenn Längeres mit cout ausgeben willst, dann musst Du nicht jede Zeile neu "cout" schreiben. Du könntest auch ne ganze Klasse machen, die einfach dafür da ist, Programme zu starten. Beim Befehl "system" bin ich mir nicht ganz so sicher. Hab' gehört, dass der deprecated ist, aber ich will nichts falsches erzählen.

    lg, freakC++



  • Ich weiß das "System" schon recht alt ist. Mittlerweile gehts auch nicht mehr da ich Win7 habe...CPP-Tags musste mir mal näher erklären


  • Mod

    #include <iostream.h>      // Gibt es nicht, heißt bloß iostream
    #include <conio.h>         // Ist plattformabhängig, aber das ist dir hoffentlich bewusst
    #ifdef _cplusplus // Überprüfen, ob ein C++-Compiler verwendet wird 
    #include <cstdlib> // Wenn ja -> cstdlib einbinden
    #else // sonst 
    #include <stdlib.h> // stdlib.h einbinden
    #endif
    #include <stdlib.h>   // WTF? Wozu dann vorher die Abfrage? Und du brauchst sowieso einen C++ Compiler, von daher ist auch die Abfrage völlig sinnlos
    
    main()   // Vollkommen illegal. Was für ein Compiler lässt denn sowas durchgehen? main muss immer int zurückgeben
    {
       int pers, code, start, i;            // Es ist oft übersichtlicher, Variablen dort zu definieren, wo man sie auch braucht statt am Programmanfang
       char antwort, pw1[4], pw1x[4]={'4','3','2','1'};
       cout<<"			 Project Rien - Top Secret!\n";
       cout<<"................................................................................\n";
       cout<<"Weiter mit beliebiger Taste\n";
       getch();          // Noch mehr plattformabhängiges Zeug
       clrscr();         // Noch mehr davon
       cout<<"Dieses Programm oeffnet eine Reihe von festgelegten Programmen.";
       cout<<"Diese werden im weiteren Verlauf des Programmes aufgelistet.\n";
       cout<<"Durch das Prinzip der Nummernauswahl, koennen Sie selbst bestimmen welches\n"; 
       cout<<"Programm ausgefuehrt werden soll.\n";
       cout<<"\nWeiter mit beliebiger Taste";
       getch();     // Siehe oben
       clrscr();    // Siehe oben, wird in Zukunft nicht mehr wiederholt
    
       do
       {
       cout<<"\nPersonalnummer: ";
       cin>>pers;
       switch (pers)
       	{
            case 1234:	cout<<"Passwort: ";
                          for (i=0;i<=4;i++)
                      	  {
                            pw1[i]=getch();
                            cout<<"*";
                            }
                          cout<<endl;
          				if (pw1[0]==pw1x[0] && pw1[1]==pw1x[1] && pw1[2]==pw1x[2] && pw1[3]==pw1x[3])
                        	{
          				  cout<<"\nZugang gewaehrt. Weiter mit beliebiger Taste\n";
                            getch();;
                         	  do
                         	  {
                         	  cout<<"\nDruecke 1 um ICQ zu starten\n";
                         	  cout<<"\nDruecke 2 um MS Word zu starten\n";
                         	  cout<<"\nDruecke 3 um MS Excel zu starten\n";
                         	  cout<<"\nDruecke 4 um MS Access zu starten\n";
                         	  cout<<"\nDruecke 5 um MS Powerpoint zu starten\n";
                         	  cout<<"\nAuswahl: ";
    		                   cin>>start;
                         		switch (start)
                         		   {
                            		case 1: system("\"C:/Programme/ICQ6.5/icq.exe\"");break;  // Der Gipfel der Plattformabhängigkeit. Bisher waren das Programm schon auf Microsoft Betriebssysteme beschränkt. Nun läuft es wohl nur noch genau auf einem Rechner, nämlich deinem.
                            		case 2: system("\"C:/Programme/Microsoft Office/Office10/winword.exe\"");break;
                            		case 3: system("\"C:/Programme/Microsoft Office/Office10/excel.exe\"");break;
                            		case 4: system("\"C:/Programme/Microsoft Office/Office10/msaccess.exe\"");break;
                            		case 5: system("\"C:/Programme/Microsoft Office/Office10/powerpnt.exe\"");break;
                            		default : cout<<"\nNummer nicht vergeben\n";break;
                            		}
                         	  cout<<"\nWollen Sie weiter machen, J oder N: ";
                         	  cin>>antwort;
                         	  clrscr();
                         	  }
                         	  while (antwort=='j' || antwort=='J');
          					}
          				else
          					{
          					cout<<"\nZugang verweigert\n";
          					}
                         break;
       	case 5678:  {
          				cout<<"Passwort: ";
          				cin>>code;
          				if (code==8765)
          					{
          					cout<<"\nZugang gewaehrt\n";
                         getch();
                         do
                         {
                         cout<<"\nBeliebige Taste um CMD zu starten\n";
                         getch();
                         system("cmd.exe");
                         cout<<"\nWollen Sie zurueck zur CMD, J oder N: ";
                         cin>>antwort;
                         clrscr();
                         }
                         while (antwort=='j' || antwort=='J');
          					}
          				else
          					{
          					cout<<"\nZugang verweigert";
                         }
                      }  break;
          default: cout<<"\nKein Personal mit dieser Nummer gefunden!\n";
          getch();
          }
          cout<<"\nWollen Sie vortfahren J oder N: ";
          cin>>antwort;
          clrscr();
       }
       while	(antwort=='j' || antwort=='J');
    }
    

    Das sind ein paar Sachen die mir als fehlerhaft aufgefallen sind.

    Was die Optimierung angeht. Das ganze Programm ist sehr statisch und unflexibel geschrieben. Das kann man nicht einfach durch ein paar Änderungen verbessern, da müsste ein ganz anderes Konzept her und alles neu geschrieben werden um das zu verbessern.


  • Mod

    Revils schrieb:

    Ich weiß das "System" schon recht alt ist. Mittlerweile gehts auch nicht mehr da ich Win7 habe...CPP-Tags musste mir mal näher erklären

    Es geht bei "system" nicht um das Alter des Befehls. Es geht darum, dass dein Programm auf genau einem Rechner funktionieren wird. Deinem. Und das auch nur so lange wie du keinerlei Änderungen an deinem System durchführst.



  • Genau das weiß ich. Die Sytanx war mehr oder weniger auch nur ein Gedanke. Das Problem allerdings mit dem Deklariere...naj, ich habs so in der Schule "gelernt"



  • Revils schrieb:

    Ich weiß das "System" schon recht alt ist. Mittlerweile gehts auch nicht mehr da ich Win7 habe...CPP-Tags musste mir mal näher erklären

    funzt die system() funktion unter windows7 nicht?

    das mit den switch/case dingers kannst du stark abkürzen.
    so in der art:

    char* apps[] = { "explorer.exe", "notepad.exe", NULL };
    int index_max = sizeof (apps) / sizeof (char*) - 2;
    
    void show_apps()
    {
    	int i = 0;
    	while (apps[i])
    	{
    		printf("%d %s\n", i, apps[i] );
    		i++;
    	}
    }
    
    unsigned index_input()
    {
    	unsigned number = 1;
    	// To be written ...
    	return number;
    }
    
    int main()
    {
    	assert ( index_max >=0 );
    	show_apps();
    
    	int index = index_input();
             // no switch case necessary
    	system ( apps[index] );
    
    	return 0;
    }
    

    kann ja auch sein, das der benutzer notepad, etc deinstalliert hat.
    das wäre vorher zu prüfen.
    bei nicht-system-programmen kann man den pfad aus der registry etc. bekommen.

    gru-huß,
    a.



  • Also das Programm ist ja nur ein Grundgedanke. Was ich später vorhabe ist, dass eder Benutzer durch eine Auswahl wie oben 1 - ... Programme auswählen und starten kann. Und fals diese nicht vorhanden sind, soll das Programm diese installieren.

    Hatte vorgehabt das mit dem Builder zu machen, habe aber keinen.



  • jepp. meins auch grundgedanke ist. switch/case einspar grundgedanke



  • Revils schrieb:

    Programm oprimieren

    Ist das was schlimmes?



  • Ne^^ Sollte "optimieren" heißen


Anmelden zum Antworten