Gå til innhold

Arv og mange klasser


Anbefalte innlegg

Hvordan skal jeg få til endre_partner og slett_ansatt funskjonene?

 

 

 

 

 

#include <iostream>

#include <fstream>

#include <cstring>

 

 

 

using namespace std;

 

const int STRLEN = 40;

const int MAX_ANSATT = 101;

const int MAX_BARN = 21;

const int DATLEN = 7;

 

 

enum Kjonn {jente, gutt};

 

// Deklarasjon av funksjoner:

 

void skriv_meny();

 

char les_kommando();

 

void ny_ansatt();

 

 

void endre_partner();

 

void slett_ansatt();

 

void les_fra_fil();

int hent_nr();

 

void oversikt ();

 

//void skriv_til_fil(ostream* ut);

 

void les(const char t[], char s[], const int LEN);

int les(const char t[], const int min, const int max);

 

 

 

 

///////////////////////////////////////////////////////////////////////////////

class Person {

private:

char f_navn[sTRLEN];

char* fornavn;

char fodselsdato[DATLEN];

 

 

public:

Person() {

les("Fornavn", f_navn, STRLEN);

fornavn = new char[strlen(f_navn)+1]; strcpy(fornavn, f_navn);

 

les("Fødselsdato(ååmmdd)", fodselsdato, DATLEN);

 

 

};

 

Person(istream* inn) { };

void display();

void skriv_person() {

void skriv_barn();

}

 

 

//void skriv_til_fil(ostream* ut);

 

 

 

};

 

///////////////////////////////////////////////////////////////////////////////

 

 

class Barn: public Person {

private:

Kjonn kjonn;

int k_jonn;

 

 

public:

Barn() {

cout << "Barnets kjønn(0=jente, 1=gutt): "; cin >> k_jonn;

cin.ignore();

kjonn = (Kjonn) k_jonn;

 

switch (kjonn) {

 

case jente: cout <<"Jente"; break;

case gutt: cout << "Gutt"; break;

}

 

};

Barn(istream* inn) { };

void skriv_barn() {

void skriv_person();

}

};

 

///////////////////////////////////////////////////////////////////////////////

 

class Voksen: public Person {

private:

char e_navn[sTRLEN];

char* etternavn;

 

 

public:

Voksen(){

les("Etternavn", e_navn, STRLEN);

etternavn = new char[strlen(e_navn)+1]; strcpy(etternavn, e_navn);

};

 

Voksen(istream* inn) { };

void skriv_voksen() {

void skriv_person();

}

 

};

 

///////////////////////////////////////////////////////////////////////////////

 

class Partner: public Voksen {

private:

int telefon1;

int telefon2;

 

 

public:

Partner() {

cout << "\nJobbenr.: "; cin >> telefon1;

cout << "\nMobilnr.: "; cin >> telefon2;

cin.ignore();};

 

Partner(istream* inn) { };

void skriv_partner() {

void skriv_voksen();

 

}

 

 

};

 

///////////////////////////////////////////////////////////////////////////////

 

class Ansatt: public Voksen {

private:

int nr;

int ant_barn;

int p_artner;

char a_dresse[sTRLEN];

char* adresse;

Partner* partner;

Barn* barn[MAX_BARN];

 

public:

Ansatt();

Ansatt(istream* inn) { };

int hent_nr() {return nr;}

void display();

 

void skriv_ansatt() {

void skriv_voksen();

 

}

 

};

 

 

///////////////////////////////////////////////////////////////////////////////

 

 

 

// Globale variabler:

 

Ansatt* ansatte[MAX_ANSATT];

int siste_brukt;

 

 

 

 

int main() {

 

char kommando;

 

skriv_meny();

 

kommando = les_kommando();

while (kommando != 'Q') {

switch (kommando) {

case 'N': ny_ansatt();

break;

 

case 'P': endre_partner(); break;

 

case 'B': break;

 

case 'D': skriv_ansatt(); break;

 

case 'A': break;

 

case 'F': slett_ansatt(); break;

 

default: skriv_meny(); break; // Ikke-eksisterende menyvalg.

}

kommando = les_kommando();

}

 

return 0;

}

 

 

Ansatt::Ansatt() {

//cout << "\nAnsattnr: "; cin >> nr;

 

ant_barn = les("Hvor mange barn?", 0, MAX_BARN);

 

les("Hvor bor den ansatte?", a_dresse, STRLEN);

adresse = new char[strlen(a_dresse)+1];

 

cout << "\nHar partner?(0 =NEI, 1 =JA) "; cin >> p_artner;

cin.ignore();

if(p_artner == 1) {

new Partner();

 

}

else

cout << "\nHar ingen partner!!\n";

 

if(ant_barn != 0) {

cout << "\nBarnas navn. \n";

for (int i = 1; i <= ant_barn; i++)

new Barn();

}

else

cout << "\nHar ingen barn!!\n";

 

 

 

cout << "\nAntall Barn:\t" << ant_barn << endl;

}

 

 

 

 

void ny_ansatt() {

bool sjekk=false;

int ans_nr;

 

ans_nr=les("\nSkriv inn ansat nr: ",1,100);

for(int i=1; i<=siste_brukt; i++) {

 

if(ansatte->hent_nr()==ans_nr); {

sjekk=true;

cout << "\nDette nr er allerede i brukt;" << endl;

}

}

if(sjekk==false) {

ansatte[++siste_brukt] = new Ansatt();

}

 

 

if(siste_brukt < MAX_ANSATT-1) {

 

 

} else

cout << "\nBeklager, ikke plass til flere ansatte!!\n";

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

void endre_partner() {

 

}

 

 

 

void slett_ansatt() {

 

}

 

void les_fra_fil () {

 

}

 

void oversikt() {

int i;

for (i = 1; i <= siste_brukt; i++) // Skriver alle menneskenes data.

ansatte->skriv_ansatt();

 

 

 

}

 

 

 

 

 

// leser inn en ikke-blank tekst:

void les(const char t[], char s[], const int LEN) {

 

do {

cout << '\t' << t <<": "; // skriver ledetekst.

cin.getline(s, LEN); // leser inn tekst.

} while (strlen(s) == 0); // sjekker at tekstlengden er ulik 0

}

 

 

// leser et tall i et visst intevall:

int les(const char t[], const int min, const int max) {

int n;

do { // skriver ledetekst:

cout << '\t' << t << " (" << min << '-' << max <<"): ";

cin >> n; cin.ignore(); // leser inn ett tall.

} while (n < min || n >max); // sjekker at i lovlig intervall.

return n; //Returnerer innlest tall.

}

 

void skriv_meny() { // Liste over lovlige menyvalg.

cout << "\n\nFØLGENDE KOMMANDOER ER LOVLIG:\n";

cout << "\tN = Legge til ny ansatt.\n";

cout << "\tP = Endre data om en partner.\n";

cout << "\tB = Legge til/inn et nytt barn om en ansatt.\n";

cout << "\tD = Skrive ut data om en ansatt.\n";

cout << "\tA = Skrive ut nummer til ansatte med barn født i et gitt år.\n";

cout << "\tF = Fjern/slett en ansatt.\n";

cout << "\tQ = quit/avslutt\n";

}

 

 

 

char les_kommando() { // Ber om ett tegn ulikt blank,

char ch; // og returnerer dette.

cout << "\nVil du registrere/endre/skrive ut/slette? " << '\n';

cin >> ch;

cin.ignore();

return toupper(ch); // returnere tegnet omgjort til stor bokstav.

}

 

 

Endret av programmerer
Lenke til kommentar
Videoannonse
Annonse

Du skal lage et program som har følgende muligheter/menyvalg:

1. N - Legge inn en ny ansatt

Dvs. ta i bruk (om mulig) neste peker i arrayen ”ansatte” og les inn alle aktuelle data om vedkommende. Arrayen ”ansatte” holdes hele tiden sortert på ”nr”, dvs. nye smettes inn.

2. P - Endre data om en partner

Om et gitt ansatt-nummer finnes, så endres dataene om vedkommendes partner.

3. B - Legge til/inn et nytt barn hos en ansatt

Om et gitt ansatt-nummer finnes, så legges (om mulig) ett nytt barn til hos vedkommende.

4. D - Skrive ut alle data om en ansatt

Om et gitt ansatt-nummer finnes, så skrives alle dataene om vedkommende ut til skjermen.

5. A – Skrive ut numrene til alle ansatte som har barn født i et gitt år

Det leses først inn et fire-sifret årstall. Numrene til alle ansatte som har barn født i dette året skrives så ut til skjermen.

6. F – Fjern/slett en ansatt

Om et gitt ansatt-nummer finnes, så tas vedkommende ut av datastrukturen og slettes.

For å tette igjen ’hullet’, så flyttes alle de etterfølgende ”ansatte” ned ett hakk i arrayen.

7. Lese datastrukturen fra fil

I starten av programmet leses (automatisk) hele datastrukturen inn fra fil.

Lenke til kommentar
La oss ta endre_partner først hva er det du ikke får til. Hvis du skal få hjelp så må du spesifiserer bedre!.

 

 

Jeg fikk til endre_partner funksjonen i går, heldigvis :)

 

Slett funksjonen er det litt værre med.. foreløpig har jeg kommet opp med dette:

 

void Ansatt::slett_ansatt() { // Sletter (om mulig) EN gitt ansatt:

int nr = les("Slett ansatt", 1, 100); // Leser aktuelt ansattnummer.

//delete

 

// for (int i=1; i<siste_brukt;)

 

//

}

Endret av programmerer
Lenke til kommentar
La oss ta endre_partner først hva er det du ikke får til. Hvis du skal få hjelp så må du spesifiserer bedre!.

 

 

Jeg fikk til endre_partner funksjonen i går, heldigvis :)

 

Slett funksjonen er det litt værre med.. foreløpig har jeg kommet opp med dette:

 

void Ansatt::slett_ansatt() { // Sletter (om mulig) EN gitt ansatt:

int nr = les("Slett ansatt", 1, 100); // Leser aktuelt ansattnummer.

//delete

 

// for (int i=1; i<siste_brukt;)

 

//

}

 

Etter det det står i oppgaven så skal du flytte alle elementene over den ansatte du skal slette til posisjonen der den ansatte du skal slette ligger. memmove er tingen for deg :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...