Gå til innhold

Arv og mange klasser


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet
Les hardere da, stort sett så skal du ha en minste forutsetning før å løse utdelte oppgaver.

 

 

 

Det er ikke så lett.. Men du kan jo hjelpe hvis du kan det..

Skrevet

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.

Skrevet
Og hva var det du ikke fikk til nå igjen?

 

 

Det meste men trenger mest hjelp til de funksjonene jeg skrev øverst

 

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!.

Skrevet (endret)
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
Skrevet
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 :)

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...