Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "header.h"
- void addcontact()
- {
- int n = 0;
- bool nonalpha = 0;
- bool alpha = 0;
- bool digit = 0;
- bool dot = 0;
- bool snabel = 0;
- bool notdigit = 0;
- bool isspaces = 0;
- bool feltele = 0;
- int count1 = 0;
- int adresscheak = 0;
- char c;
- std::string fnamn, enamn, adress, port, epost, pnum, tele, datum, vowel;
- //kodsektion för förnamnet
- while (true)
- {
- std::cin.clear();
- std::cin.ignore();
- isspaces = 0;
- nonalpha = 0;
- std::cout << "Ange kontaktens förnamn: ";
- std::getline(std::cin, fnamn);
- for (n = 0; n < fnamn.length(); n++)
- {
- if (isspace(fnamn[n]))
- {
- isspaces = 1;
- break;
- }
- if (!isalpha(fnamn[n]))
- {
- std::cout << "Ett förnamn kan endast innehålla bokstäver, försök igen" << std::endl;
- nonalpha = 1;
- break;
- }
- if (isupper(fnamn[n]))
- {
- fnamn[n] = tolower(fnamn[n]);
- }
- }
- if (isspaces == 1)
- {
- std::cout << "Ett förnamn får inte innehålla mellanslag, vänligen försök igen" << std::endl;
- std::cout << "Ange kontaktens förnamn ";
- continue;
- }
- if (islower(fnamn[0]) && !nonalpha)
- {
- fnamn[0] = toupper(fnamn[0]);
- break;
- }
- continue;
- }
- // Om namet ska ha ett s efter eller inte, alltså det blir inte maxs båt utan max båt
- c = fnamn[fnamn.length() - 1];
- if (!(c == 's' || c == 'x' || c == 'z'))
- {
- vowel = "'s ";
- }
- else
- {
- vowel = " ";
- }
- //kodsektion för efternamn
- while (true)
- {
- isspaces = 0;
- nonalpha = 0;
- std::cout << '\n' << "Ange " << fnamn << vowel << "efternamn: ";
- std::getline(std::cin, enamn);
- for (n = 0; n < enamn.length(); n++)
- {
- if (isspace(enamn[n]))
- {
- isspaces = 1;
- break;
- }
- if (!isalpha(enamn[n]))
- {
- std::cout << "Ett efternamn kan endast innehålla bokstäver, försök igen" << std::endl;
- nonalpha = 1;
- break;
- }
- if (isupper(enamn[n]))
- {
- enamn[n] = tolower(enamn[n]);
- }
- }
- if (isspaces == 1)
- {
- std::cout << "Ett efternamn får inte innehålla mellanslag, vänligen försök igen" << std::endl;
- continue;
- }
- if (islower(enamn[0]) && !nonalpha)
- {
- enamn[0] = toupper(enamn[0]);
- break;
- }
- continue;
- }
- //kodsektion för födelsedatum
- while (true)
- {
- notdigit = 0;
- std::cout << '\n' << "Ange " << fnamn << vowel << "födelsedatum: ";
- std::getline(std::cin, datum);
- if (!(datum[0] == '1' || datum[0] == '2'))
- {
- std::cout << "Ett fullständigt födelsedatum börjar antigen med 1 eller 2 (1900 eller 2000)" << std::endl;
- continue;
- }
- for (n = 0; n < datum.length(); n++)
- {
- if (!(isdigit(datum[n]) || isspace(datum[n])))
- {
- notdigit = 1;
- break;
- }
- if (isspace(datum[n]))
- {
- datum.erase(n, 1);
- n--;
- }
- }
- if (datum.length() != 8)
- {
- std::cout << "Felaktigt många siffror" << std::endl;
- std::cout << "Skriv in födelsedatumet i formatet 19000101" << std::endl;
- continue;
- }
- if (notdigit == 1)
- {
- std::cout << "Fördelsedatum kan endast innehålla siffror, vänligen försök igen!" << std::endl;
- continue;
- }
- //Födelsedatum felhantering för alla månader
- if (datum[4] > '1' || (datum[4] == '1' && datum[5] > '2'))
- {
- std::cout << "Det finns endast 12 månader per år, vänligen försök igen" << std::endl;
- continue;
- }
- if (datum[4] == '0' && datum[5] == '1')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
- {
- std::cout << "Januari har endast 31 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '2')
- {
- if (datum[6] > '2' || (datum[6] == '2' && datum[7] > '9'))
- {
- std::cout << "Februari har maximalt 29 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '3')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
- {
- std::cout << "Mars har endast 31 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '4')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
- {
- std::cout << "April har endast 30 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '5')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
- {
- std::cout << "Maj har endast 31 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '6')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
- {
- std::cout << "Juni har endast 30 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '7')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
- {
- std::cout << "Juli har endast 31 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '8')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
- {
- std::cout << "Agusti har endast 31 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '0' && datum[5] == '9')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
- {
- std::cout << "September har endast 30 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '1' && datum[5] == '0')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
- {
- std::cout << "Oktober har maximalt 31 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '1' && datum[5] == '1')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
- {
- std::cout << "November har endast 30 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- else if (datum[4] == '1' && datum[5] == '2')
- {
- if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
- {
- std::cout << "December har endast 31 dagar, vänligen försök igen" << std::endl;
- continue;
- }
- }
- break;
- }
- while (true)
- {
- std::cout << '\n' << "Ange " << fnamn << vowel << "gatuadress: ";
- std::getline(std::cin, adress);
- if (isdigit(adress[0]))
- {
- std::cout << "En adress börjar alltid med en bokstav, försök igen!" << std::endl;
- continue;
- }
- for (n = 0; n < adress.length(); n++)
- {
- if (isspace(adress[n]))
- {
- adress.erase(n, 1);
- n--;
- }
- if (isupper(adress[n]))
- {
- adress[n] = tolower(adress[n]);
- }
- if (isdigit(adress[n]))
- {
- adresscheak++;
- }
- }
- if (adresscheak < 1)
- {
- std::cout << "En gatuadress måste minst innehålla en siffra, vänligen försök igen!" << std::endl;
- continue;
- }
- if (islower(adress[0]))
- {
- adress[0] = toupper(adress[0]);
- }
- break;
- }
- while (true)
- {
- alpha = 0;
- std::cout << '\n' << "Ange " << fnamn << vowel << "postnummer: ";
- std::getline(std::cin, pnum);
- for (n = 0; n < pnum.length(); n++)
- {
- if (isalpha(pnum[n]))
- {
- std::cout << "Ett postnummer får inte innehålla bokstäver, vänligen försök igen: " << std::endl;
- alpha = 1;
- break;
- }
- if (isspace(pnum[n]))
- {
- pnum.erase(n, 1);
- n--;
- }
- }
- if (alpha == 1)
- {
- continue;
- }
- if (pnum.length() != 5)
- {
- std::cout << "Ett postnummer ska endast innehålla 5 siffror, vänligen försök igen: " << std::endl;
- continue;
- }
- break;
- }
- while (true)
- {
- digit = 0;
- std::cout << '\n' << "Ange " << fnamn << vowel << "postort: ";
- std::cin >> port;
- for (n = 0; n < port.length(); n++)
- {
- if (isdigit(port[n]))
- {
- digit = 1;
- break;
- }
- if (isupper(port[n]))
- {
- port[n] = tolower(port[n]);
- }
- }
- if (digit == 1)
- {
- std::cout << "Det är ett namn och kan endast innehålla bokstäver, vänligen försök igen" << std::endl;
- continue;
- }
- if (islower(port[0]))
- {
- port[0] = toupper(port[0]);
- }
- break;
- }
- while (true)
- {
- std::cout << '\n' << "Ange " << fnamn << vowel << "e-postadress: ";
- std::cin >> epost;
- std::cin.clear();
- std::cin.ignore();
- if (epost[0] == '@')
- {
- std::cout << "En e-postadress får inte börja med ett snabela(@)" << std::endl;
- continue;
- }
- for (n = 0; n < epost.length(); n++)
- {
- if (isupper(epost[n]))
- {
- epost[n] = tolower(epost[n]);
- }
- if (epost[n] == '@')
- {
- snabel = 1;
- count1++;
- }
- if (epost[n] == '.')
- {
- dot = 1;
- }
- }
- if (snabel != 1 || dot != 1)
- {
- std::cout << "En e-postadress måste innehålla både ett snabela(@) och en punkt(.)" << std::endl;
- std::cout << "vänligen försök igen." << std::endl;
- dot = 0;
- snabel = 0;
- continue;
- }
- if (count1 > 1)
- {
- count1 = 0;
- std::cout << "En e-postadress får endast innehålla ett snabela(@)" << std::endl;
- continue;
- }
- break;
- }
- while (true)
- {
- feltele = 0;
- std::cout << '\n' << "Ange " << fnamn << vowel << "mobilnummer: ";
- std::getline(std::cin, tele);
- if (tele[0] == '+')
- {
- std::cout << "Programmet stödjer ej riktnummer, vänligen försök igen!" << std::endl;
- continue;
- }
- if (!(tele[0] == '0' && tele[1] == '7'))
- {
- std::cout << "Ett svenskt mobilnummer börjar alltid på 07" << std::endl;
- continue;
- }
- for (n = 0; n < tele.length(); n++)
- {
- if (!isdigit(tele[n]))
- {
- feltele = 1;
- break;
- }
- if (isspace(tele[n]))
- {
- tele.erase(n, 1);
- n--;
- }
- }
- if (feltele == 1)
- {
- std::cout << "Ett telefonnummer innehåller endast siffror, vänligen försök igen" << std::endl;
- continue;
- }
- if (tele.length() != 10)
- {
- std::cout << "Felaktigt med siffror i nummret, vänligen försök igen!" << std::endl;
- continue;
- }
- break;
- }
- std::ofstream outfile;
- outfile.open("KontaktBok.txt", std::ios::app);
- if (outfile.fail() || !outfile.is_open())
- {
- std::cout << "Något gick fil vid filöverföring!" << std::endl;
- }
- outfile << fnamn + " " << enamn + " - " << "//" + datum + " " << "// " + tele + " " << "// " + epost + " " << "// " + adress + " " << "// " + pnum + " " << "// " + port + " \n";
- std::cout << "\nKontakten för '" << fnamn + " " << enamn << "' är sparad i din konatkbok!" << std::endl;
- outfile.close();
- }
- void searchcontact()
- {
- std::vector<std::string> contact;
- std::vector<std::string>::iterator vcount;
- std::string temp, search, contactString, filnamn;
- int n, valet, anternativ, vectorPoss = 1;
- bool space = 0;
- std::ifstream inFile;
- inFile.open("KontaktBok.txt");
- if (!inFile.is_open())
- {
- std::cout << '\n' << "Kontaktboken gick ej att öppna, kontrollera att" << std::endl;
- std::cout << "Kontrollera att filen existerar" << std::endl;
- return;
- }
- while (true)
- {
- space = 0;
- valet = 0;
- std::cout << "\n\n///////////////////////////////////\n\n";
- std::cout << "Sökning sker på personerns förnamn, efternamn, personnummer, telefonnummer samt e-postadress" << std::endl;
- std::cout << "Sök efter kontakt: ";
- std::cin >> search;
- std::cin.ignore();
- std::cin.clear();
- //Gör det inamtade sökordet till småbokstäver även om man söker efter stora
- for (n = 0; n < search.length(); n++)
- {
- if (isupper(search[n]))
- {
- search[n] = tolower(search[n]);
- }
- }
- //Hantering av jämförelse av sökning och kontaktbok, varje rad för sig
- while (inFile.peek() != EOF)
- {
- getline(inFile, contactString);
- temp = contactString;
- for (n = 0; n < temp.length(); n++)
- {
- if (isupper(temp[n]))
- {
- temp[n] = (tolower(temp[n]));
- }
- }
- size_t hittaKontakt = temp.find(search);
- if (hittaKontakt != std::string::npos)
- {
- contact.push_back(contactString);
- }
- }
- std::cout << "\n\n///////////////////////////////////\n\n";
- std::cout << "\n------Kontakter som matchar din sökning------\n" << std::endl;
- for (vcount = contact.begin(); vcount != contact.end(); vcount++)
- {
- std::cout << "\n[" << vectorPoss << "] - " << *vcount << std::endl;
- vectorPoss++;
- }
- break;
- }
- inFile.close();
- }
- void listContacts()
- {
- std::ifstream inFile;
- inFile.open("KontaktBok.txt");
- std::string contactString, filnamn;
- int vectorPoss = 1, eraseinput, anternativ;
- std::vector<std::string> Kontakter;
- std::vector<std::string> ::iterator vcount;
- std::cout << "\n\n///////////////////////////////////\n\n";
- std::cout << "------ Listar kontakter ------\n\n" << std::endl;
- if (!inFile.is_open())
- {
- std::cout << '\n' << "Kontaktboken gick ej att öppna" << std::endl;
- std::cout << "Kontrollera att filen existerar" << std::endl;
- return;
- }
- //lägger in hela kontaktboken i en vector som sedan skrivs numrerat
- while (std::getline(inFile, contactString))
- {
- if (contactString.size() > 0)
- {
- Kontakter.push_back(contactString);
- }
- }
- for (vcount = Kontakter.begin(); vcount != Kontakter.end(); vcount++)
- {
- std::cout << "\n[" << vectorPoss << "] " << " - " << *vcount << std::endl;
- vectorPoss++;
- }
- inFile.close();
- }
- void eraseContact()
- {
- std::ifstream inFile;
- inFile.open("KontaktBok.txt");
- std::string contact;
- int valet, eraseInput, input, vposs = 1;
- std::vector <std::string> Contactvector;
- std::vector <std::string>::iterator vcount;
- std::cout << "\n\n///////////////////////////////////\n\n"
- "--- Radera kontakt ---\n" << std::endl;
- if (!inFile.is_open())
- {
- std::cout << "Filen hittades ej" << std::endl;
- return;
- }
- //lägger in kontaktboken i en vector rad för rad
- while (std::getline(inFile, contact))
- {
- if (contact.size() > 0)
- {
- Contactvector.push_back(contact);
- }
- }
- //stänger filen
- inFile.close();
- //använder mig av listcontact funktionen för att kunna se valalternativen som man kan ta bort
- listContacts();
- while (true)
- {
- //Felhantering för valet från användaren som begränsar användaren att välja endast de nummer som existerar i listan
- valet = 0;
- std::cout << "\nMata in den siffra för kontakten som du vill radera eller övrig input för startmeny: ";
- std::cin >> input;
- input--;
- if (std::cin.fail() || !(input >= 0 && input < Contactvector.size()))
- {
- std::cin.clear();
- std::cin.ignore(std::numeric_limits < std::streamsize > ::max(), '\n');
- std::cout << "Ange endast de nummer som existerar i kontaktlistan, vänligen försök igen" << '\n' << std::endl;
- continue;
- }
- else
- {
- //Tar bort den önskade kontakten från vektorn och sedan öppnas filen och de resterande kontakterna strömmas ut tillbaks till filen.
- Contactvector.erase(Contactvector.begin() + input);
- // Inte appending då man vill skriva över filen
- std::ofstream outFile;
- outFile.open("KontaktBok.txt");
- std::cout << "\n\n-----Kontakter som är kvar är: -----\n" << std::endl;
- for (vcount = Contactvector.begin(); vcount != Contactvector.end(); vcount++)
- {
- outFile << *vcount << std::endl;
- std::cout << "\n[" << vposs << "] - " << *vcount << std::endl;
- vposs++;
- }
- outFile.close();
- }
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement