Skip to content
Snippets Groups Projects
kunder.cpp 4.6 KiB
Newer Older
Jamal Hussein's avatar
Jamal Hussein committed
/**
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 * Funksjonene i klassen 'kunder' og deres definisjoner.
 * @file kunder.cpp
 * @author Abdulsamad Sheikh, Jamal Hussein & Ole Bjørn Halvorsen.
 */
#include "kunder.h"
#include "kunde.h"
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
#include <iostream>             //  cout, cin
#include <fstream>              //  ifstream, ofstream
#include <string>               //  String
#include <list>                 //  List
#include <algorithm>
#include "LesData3.h"           //  Verktøykasse for innlesing
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
#include "enum.h"
#include "kategori.h"
#include "kategorier.h"
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
using namespace std;

extern Kunder     gKundebase;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
extern Kategorier gKategoribase;

Jamal Hussein's avatar
Jamal Hussein committed
/**
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 *En constructor som oppretter Kunder-objekt
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
Kunder::Kunder(){}
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
Kunder::~Kunder() {}

bool Kunder::finnKunde(int nr, const kjopOgSalg kOgS) {
    for (const auto &val : gKunder) {
        if (val->getKundeNr() == nr) {
            val->plussKjopOgSalg(kOgS);
            return true;
        }
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    return false;
Jamal Hussein's avatar
Jamal Hussein committed
/**
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 *Funksjonen fjerner en kunde, hvis kundenummeret deres eksisterer
 *@param nr -  kundenummeret som skal fjernes
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
void Kunder::fjernKunde(int nr) {
    if (nr <= 0) {
        cout << "Ingen kunder har blitt slettet";
        return;
    }
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    auto temp = find_if(gKunder.begin(), gKunder.end(),
                        [nr](const auto &val) { return (val->getKundeNr() == nr); });
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    if (temp == gKunder.end()) {
        return;
    }
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    cout << "Er du sikker på at du vil slette kunden?";
    skrivUtEnKunde(nr);
    char tegn = lesChar("\nJ/N ?");
Jamal Hussein's avatar
Jamal Hussein committed
    //Forsikrer oss om vi vil slette kunden eller ikke
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    if (tegn == 'J') {
        gKategoribase.slettTing(nr);
        gKunder.erase(temp);
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
        //Sletter kunden hvis 'Ja'
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    } else {
        cout << "Kunde ble ikke slettet";
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    skrivUtKunder();
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 *En switch-løkke som lar oss velge mellom de forskjellige kommandoene
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
void Kunder::handling() {
    char valg = lesChar("Kundekommando: 'N'(y) 'A'(lle) 'S'(krivEn) eller 'F'(jern)");
    int nr;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    switch (valg) {
        case 'N':
            nyKunde();
            break;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
        case 'A':
            skrivUtKunder();
            break;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
        case 'S':
            nr = lesInt("Kundenummer", 0, sisteNr);
            skrivUtEnKunde(nr);
            break;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
        case 'F':
            nr = lesInt("Kundenummer", 0, sisteNr);
            fjernKunde(nr);
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
}
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
int Kunder::getSisteNr(){
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    return sisteNr;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
/**
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 * Leser fra  'KUNDER.DTA'.
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
void Kunder::lesFraFil() {
    ifstream innfil("KUNDER.DTA");
    cout << "Leser fra filen 'KUNDER.DTA'";
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    if (!innfil) {
        cout << "Kunne ikke finne filen";
        return;
    }
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    int antKunder = 0, kundenr = 0;
    innfil >> antKunder >> kundenr;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    for (int i = 0; i < antKunder; ++i) {
        Kunde* kundeNy = new Kunde(innfil, kundenr);
        gKunder.push_back(kundeNy);
        sisteNr++;
        innfil >> kundenr;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    innfil.close();
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
/**
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 * En funksjon som oppretter en ny kunde og tildeler den et nummer. Nummeret er er et tall hæyere enn siste nummer.
 * Kundens data leses og sorteres inn i datastrukturen.
 *
 * @see Kunde::Kunde(int nr)
 * @see Kunde::lesData()
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
void Kunder::nyKunde(){
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    Kunde* kundeNy = new Kunde(sisteNr);
    kundeNy->lesData();
    gKunder.push_back(kundeNy);
    sisteNr++;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 *En funksjon som skriver ut alle kunder sammen med deres detaljer
 *@see Kunde::skrivData
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
void Kunder::skrivUtKunder() const {
    int i = 0;
    cout << "\nSiste kundenummer: " << sisteNr
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    << "\nTotalt antall kunder: " << gKunder.size();
    
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    for (const auto &val : gKunder) {
        val->skrivData();
        i++;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
        if (i % 20 == 0) {
            cout << "\tSkriv hva som helst for neste...";
            getchar();
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 *En funksjon som skriver ut en kundes data/detaljer
 *@param nr - kundenummeret som skal skrives ut
 *@see Kunde::getKundeNr()
 *@see Kunde::skrivDetaljer()
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
void Kunder::skrivUtEnKunde(int nr) const {
    if (gKunder.size() > 0) {
        for (const auto &val : gKunder) {
            int temp = val->Kunde::getKundeNr();
            if (nr == temp) {
                val->Kunde::skrivDetaljer();
            }
        }
    } else {
        cout << "Ingen registrerte kunder";
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed

Jamal Hussein's avatar
Jamal Hussein committed
/**
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
 *En funksjon som skriver datamedlemmene til klassenn til filen KUNDER.DTA.
 *@see Kunde::skrivTilFil
 */
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
void Kunder::skrivTilFil() {
    ofstream utfil("KUNDER.DTA");
    cout << "Skriver til filen 'KUNDER.DTA'";
    utfil << gKunder.size() << "\n";
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
    for (const auto &val : gKunder) {
        val->skrivTilFil(utfil);
    }
    utfil << sisteNr;
Abdulsamad Sheikh's avatar
Abdulsamad Sheikh committed
}