01. april 2002 - 12:44Der er
10 kommentarer og 1 løsning
adresse bog
Hej,
Jeg er ved at skrive et program, der skal indeholde en userinterface, der tillader brugeren en menu af valg for en student info application. Dette skal med: struct student { char name[25]; char address[80]; float gpa; char telno[15]; }; 1. Jeg skal bruge command line argumenter 2. Programmet skal invokes ved at indtaste the executable navn (eks: homework) eller option "debug". (e.g.homework debug). Alt andet, f.eks. "homework debug test" skulle give fejl melding. Format tilsvarende type "cp" i UNIX. 3. Naar programmet bliver kaldt ved brug af debug option, will additional output blive printet paa skaermen, som navnet paa den kaldtes function og parametere der er blevet passed. Det er en tilfoejelse til alt hvad programmet goer naar det bliver kaldt uden debug argument. 4. Der skal bruges en while loop til menu, samt en gloabl variabel til at holde styr paa hvordan programmeret var invoked. Functioner( add student, findStudent, printStudents og deleteStudent) skal ikke virke men fungere som stubs. 5. Hele applicationen skal splittes til to filer. En, der indeholder main og userinterface functioner, samt en der indeholder database access functioner.
Jeg er i tvivl om hvordan det hele haenger sammen og haaber paa at der er en der kan hjaelpe! Paa forhaand tak.
Mange af dem der svarer på eksperten er folk som har arbejde eller er i gang med et projekt så det er ikke altid der kan svares på spørgsmål som er bare lidt komplekse, da vi/os/de har ikke altid tid til at sætte sig ind i dit projekt :-( Men jeg kan da tage det første
Skal det være en struct MÅ det ikke være en klasse ? Det er måske fordi det er C og ikke C++ ?
Hej, Ja, jeg er klar over at de fleste har travlt med arbejde osv., men jeg skriver med et haab om at der er nogle der kan hjaelpe mig med at forstaa hvad opgaven gaar ud paa og er glad bare jeg faar et hint:-) Det er C++ jeg programmerer i og det skal den struct som jeg har skrevet.
Hej jpk, Mange tak for dit svar. Jeg har lidt forstaaelsesproblemer. Hvordan bliver programmeret startet (invoked) ved at indtaste executable navn? Hvordan kan det det vaere at du har brugt strcmp funktionen ved checkning af commandline input? Hele applicationen skal splittes til to filer. En, der indeholder main og userinterface functioner, samt en der indeholder database access functioner (add student, findStudent, printStudents og deleteStudent). Har du en ide om hvad der menes med TO filer?
Endnu engang tak fordi du har taget dig tid til at hjaelpe!
Når du har kompileret koden til en .exe-fil, kan du køre den ved at skrive navnet på den i en kommandoprompt. (Du skal selvfølgelig "stå" i den folder hvor programmet ligger).
Jeg bruger strcmp for at sammenligne de to strenge (strcmp = string compare). Hvis de er ens, returnerer funktionen 0, derfor skriver jeg: else if(argc == 2 && strcmp(argv[1], "debug") == 0)
Du kan lave 2 filer til din kode, fx Main.cpp og DBAccess.cpp. Man deler typisk sin kode ud i flere filer, for at have en bedre struktur. Det kan hurtigt blive uoverskueligt hvis al koden ligger i én fil!
Altså, ligger du main-funktionen samt Menu() i filen Main.cpp og ligger de andre funktioner du skal bruge til databaseadgang, i DBAccess.cpp I Main.cpp skriver du så: #include "DBAccess.cpp"
Normalt ville man ikke include en .cpp-fil, men derimod en .h-fil, altså kan du også vælge at kalde filen DBAccess.h istedet. Men typisk laver man implementationen af funktionerne i en .cpp-fil! Det mest rigtige ville altså være at have BÅDE en DBAccess.h og en DBAccess.cpp Man ville så lave erklæringer af funktionernes signatur i .h-filen og selve implementationen i .cpp-filen.
Hej jpk, Jeg takker mange gange for din store hjaelp til denne opgave. Jeg har nu skrevet programmet, men mangler at dele det op i to filer. Det compiler fint, men man kan ikke indfoere navn osv naar man prompter useren. Jeg tror at jeg laver noget galt naar jeg skal have access til struct'en. Jeg fik det til at virke perfekt uden struct'en, men den er et krav. Kan du umiddelbart se hvad jeg har gjort forkert og har jeg sat programmet sammen rigtigt? Undskyld alle de spoergsmaal og endnu engang tak for din store hjaelp:-)
#include <iostream> #include <string> #include <string.h> using namespace std;
if(g_bDebug) cout << "If g_bDebug is true, print debug-information!"<< endl;
cout << " MENU" << endl << " ****" << endl<<endl
<< "a - Add new student to the database\n" << "f - Print information about a student in the database\n" << "d - Delete an existing student from the database\n" << "p - Print all information from the database\n" << "q - Quit the program\n" << endl;
cout << "Enter your choice"<< endl; cin >> enterChoice;
//*********************Process ****************** // The while loop will prompt the user for information as the // user type either a, f, d, p, q on the menu. while (loop <1) { switch (enterChoice){ case 'a': cout << "Please enter the students name: "<<endl; //cin.ignore (100, '\n'); cin.getline (csci2912[10].name,25); cout << "What is the GPA: " << endl; cin >> csci2912[10].gpa; cout << "What is the address: "<< endl; cin.ignore (100, '\n'); cin.getline (csci2912[10].address, 80); cout <<"What is the telephone number: "<< endl; cin.getline (csci2912[10].telno,15); //function call for function addStudent addStudent (csci2912[10].name, csci2912[10].gpa, csci2912[10].address, csci2912[10].telno); ++loop; break; case 'f': cout<< "Please enter the students name: "<< endl; cin.ignore (100, '\n'); cin.getline (csci2912[10].name, 25); //function call for function findStudent findStudent (csci2912[10].name); ++loop; break; case 'd': cout<< "Please enter the students name: "<< endl; cin.ignore (100, '\n'); cin.getline (csci2912[10].name, 25); //function call for function deleteStudent deleteStudent (csci2912[10].name); ++loop; break; case 'p': cout <<"Please print all information: "<<endl; csci2912[10].gpa = 4.0; //function call for function printStudents printStudents (csci2912[10].name, csci2912[10].gpa, csci2912[10].address, csci2912[10].telno); ++loop; break; case 'q': cout <<"Exit"<< endl; ++loop;
exitProgram ();} } return 0; }
//**************************Functions*********
// addStudent prompts the user for name, //gpa, address and telno adds the student to the database void addStudent (char a_name[], float a_gpa, char a_address[], char a_telno[]) { cout<< "A student has been added"<< endl; } // findstudent prompt the user for a students's name and and // prints information about a student from the database void findStudent (char b_name[]) { cout<<"Information about a student has been found"; cout<< endl; } // deleteStudent prompts the user for a student's name and // deletes the existing student from the database. void deleteStudent (char c_name[]) { cout<<"The existing student has been deleted"<< endl; } // printStudent prints out the following information about the // student: name, gpa, address and telephone number void printStudents (char d_name[], float d_gpa, char d_address[], char d_telno[]) { cout<<"The following information has been printed"<<endl; } void exitProgram () { }
Er det a'eren du ikke kan få til at virke? Sådan her virker den:
case 'a': cout << "Please enter the students name: "<<endl; cin >> csci2912[0].name,25; cout << "What is the GPA: " << endl; cin >> csci2912[0].gpa; cout << "What is the address: "<< endl; cin >> csci2912[0].address; cout <<"What is the telephone number: "<< endl; cin >> csci2912[0].telno,15;
//function call for function addStudent addStudent (csci2912[0].name, csci2912[0].gpa, csci2912[0].address, csci2912[0].telno); ++loop; break;
Det kræver dog at inputtet er ok, altså at du ikke indtaster bogstaver når det skal være tal...
Hej jpk, Mange tak for hjaelpen - programmet koerer (med tilfoejelse af cin.ignore i case 'a'). Jeg saetter stor pris paa din hjaelp og synes du fortjener mere end 200 points :-)
Det var så lidt... Tænk ikke på point'ene, jeg er fint tilfreds.
Jacob
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.