Avatar billede henrik10 Nybegynder
01. april 2002 - 12:44 Der 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.



Avatar billede mickni33 Nybegynder
02. april 2002 - 08:49 #1
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++ ?
Avatar billede henrik10 Nybegynder
02. april 2002 - 09:18 #2
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.
Avatar billede jpk Nybegynder
02. april 2002 - 13:41 #3
Du kan checke command line input således:

#include <string.h>
bool g_bDebug=false;

int main(int argc, char* argv[])
{
    if(argc == 1)
        g_bDebug = false;
    else if(argc == 2 && strcmp(argv[1], "debug") == 0)
        g_bDebug = true;
    else
        cout << "Fejl" << endl;


    if(g_bDebug)
        cout << "Hvis g_bDebug er true, skriver vi debug-information ud!" << endl;

    return 0;
}
Avatar billede jpk Nybegynder
02. april 2002 - 13:57 #4
Menuen kan du fx lave sådan:

// Funktion til visning af menu
void Menu()
{
    system ("cls");
    cout << "Menu" << endl;
    cout << " 1) Menu1" << endl;
    cout << " 2) Menu2" << endl;
    cout << " Tast valg: ";
}

// I din main-funktion
do
{
    Menu ();
    cin >> valg;           
    switch (valg)
    {
    case 1:
    // Gør noget
    break;

    case 2:    
    break;

    default:
    break;
    }       
}
while (valg);
Avatar billede henrik10 Nybegynder
02. april 2002 - 19:53 #5
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!
Avatar billede jpk Nybegynder
03. april 2002 - 09:17 #6
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.

Fx:

// I DBAccess.h
void addStudent(student stud);

// I DBAccess.cpp
void addStudent(student stud)
{
  // Lav selve arbejdet her...
}
Avatar billede jpk Nybegynder
05. april 2002 - 10:21 #7
Kan du få det til at virke..?
Avatar billede henrik10 Nybegynder
05. april 2002 - 11:24 #8
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;



struct student
{
  char name[25];
  char address[80];
  float gpa;
  char telno[15];
};


char enterChoice ();
void addStudent (char[], float, char[], char[]);
void findStudent (char[]);
void deleteStudent (char[]);
void printStudents (char[], float, char[], char[]);
void exitProgram ();

bool g_bDebug=false;

int main (int argc, char* argv[])

{
student csci2912[10];

enum choices {a,f,d,p,q};   
int loop = 0;           
char enterChoice;
//********************Input ********************
if(argc == 1)
        g_bDebug = false;
    else if(argc == 2 && strcmp(argv[1], "debug") == 0)
        g_bDebug = true;
    else
        cout << "Error" << endl;


    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 ()
{
}
Avatar billede jpk Nybegynder
05. april 2002 - 15:11 #9
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...
Avatar billede henrik10 Nybegynder
06. april 2002 - 10:31 #10
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 :-)
Avatar billede jpk Nybegynder
06. april 2002 - 14:36 #11
Det var så lidt...
Tænk ikke på point'ene, jeg er fint tilfreds.

Jacob
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester