Advertisement
Guest User

Untitled

a guest
Jan 17th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.04 KB | None | 0 0
  1. #include "header.h"
  2.  
  3. void addcontact()
  4. {
  5. int n = 0;
  6. bool nonalpha = 0;
  7. bool alpha = 0;
  8. bool digit = 0;
  9. bool dot = 0;
  10. bool snabel = 0;
  11. bool notdigit = 0;
  12. bool isspaces = 0;
  13. bool feltele = 0;
  14.  
  15. int count1 = 0;
  16. int adresscheak = 0;
  17.  
  18. char c;
  19.  
  20. std::string fnamn, enamn, adress, port, epost, pnum, tele, datum, vowel;
  21.  
  22. //kodsektion för förnamnet
  23. while (true)
  24. {
  25. std::cin.clear();
  26. std::cin.ignore();
  27. isspaces = 0;
  28. nonalpha = 0;
  29. std::cout << "Ange kontaktens förnamn: ";
  30. std::getline(std::cin, fnamn);
  31.  
  32. for (n = 0; n < fnamn.length(); n++)
  33. {
  34. if (isspace(fnamn[n]))
  35. {
  36. isspaces = 1;
  37. break;
  38. }
  39. if (!isalpha(fnamn[n]))
  40. {
  41. std::cout << "Ett förnamn kan endast innehålla bokstäver, försök igen" << std::endl;
  42. nonalpha = 1;
  43. break;
  44. }
  45.  
  46. if (isupper(fnamn[n]))
  47. {
  48. fnamn[n] = tolower(fnamn[n]);
  49. }
  50. }
  51. if (isspaces == 1)
  52. {
  53. std::cout << "Ett förnamn får inte innehålla mellanslag, vänligen försök igen" << std::endl;
  54. std::cout << "Ange kontaktens förnamn ";
  55. continue;
  56. }
  57. if (islower(fnamn[0]) && !nonalpha)
  58. {
  59. fnamn[0] = toupper(fnamn[0]);
  60. break;
  61. }
  62.  
  63. continue;
  64. }
  65. // Om namet ska ha ett s efter eller inte, alltså det blir inte maxs båt utan max båt
  66. c = fnamn[fnamn.length() - 1];
  67. if (!(c == 's' || c == 'x' || c == 'z'))
  68. {
  69. vowel = "'s ";
  70. }
  71. else
  72. {
  73. vowel = " ";
  74. }
  75. //kodsektion för efternamn
  76. while (true)
  77. {
  78. isspaces = 0;
  79. nonalpha = 0;
  80. std::cout << '\n' << "Ange " << fnamn << vowel << "efternamn: ";
  81. std::getline(std::cin, enamn);
  82.  
  83. for (n = 0; n < enamn.length(); n++)
  84. {
  85. if (isspace(enamn[n]))
  86. {
  87. isspaces = 1;
  88. break;
  89. }
  90.  
  91. if (!isalpha(enamn[n]))
  92. {
  93. std::cout << "Ett efternamn kan endast innehålla bokstäver, försök igen" << std::endl;
  94. nonalpha = 1;
  95. break;
  96. }
  97.  
  98. if (isupper(enamn[n]))
  99. {
  100. enamn[n] = tolower(enamn[n]);
  101. }
  102. }
  103. if (isspaces == 1)
  104. {
  105. std::cout << "Ett efternamn får inte innehålla mellanslag, vänligen försök igen" << std::endl;
  106. continue;
  107. }
  108. if (islower(enamn[0]) && !nonalpha)
  109. {
  110. enamn[0] = toupper(enamn[0]);
  111. break;
  112. }
  113.  
  114. continue;
  115. }
  116.  
  117. //kodsektion för födelsedatum
  118. while (true)
  119. {
  120. notdigit = 0;
  121. std::cout << '\n' << "Ange " << fnamn << vowel << "födelsedatum: ";
  122. std::getline(std::cin, datum);
  123.  
  124. if (!(datum[0] == '1' || datum[0] == '2'))
  125. {
  126. std::cout << "Ett fullständigt födelsedatum börjar antigen med 1 eller 2 (1900 eller 2000)" << std::endl;
  127. continue;
  128. }
  129.  
  130. for (n = 0; n < datum.length(); n++)
  131. {
  132. if (!(isdigit(datum[n]) || isspace(datum[n])))
  133. {
  134. notdigit = 1;
  135. break;
  136. }
  137. if (isspace(datum[n]))
  138. {
  139. datum.erase(n, 1);
  140. n--;
  141. }
  142. }
  143.  
  144. if (datum.length() != 8)
  145. {
  146. std::cout << "Felaktigt många siffror" << std::endl;
  147. std::cout << "Skriv in födelsedatumet i formatet 19000101" << std::endl;
  148. continue;
  149. }
  150.  
  151. if (notdigit == 1)
  152. {
  153. std::cout << "Fördelsedatum kan endast innehålla siffror, vänligen försök igen!" << std::endl;
  154. continue;
  155. }
  156. //Födelsedatum felhantering för alla månader
  157. if (datum[4] > '1' || (datum[4] == '1' && datum[5] > '2'))
  158. {
  159. std::cout << "Det finns endast 12 månader per år, vänligen försök igen" << std::endl;
  160. continue;
  161. }
  162.  
  163. if (datum[4] == '0' && datum[5] == '1')
  164. {
  165. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
  166. {
  167. std::cout << "Januari har endast 31 dagar, vänligen försök igen" << std::endl;
  168. continue;
  169. }
  170. }
  171. else if (datum[4] == '0' && datum[5] == '2')
  172. {
  173. if (datum[6] > '2' || (datum[6] == '2' && datum[7] > '9'))
  174. {
  175. std::cout << "Februari har maximalt 29 dagar, vänligen försök igen" << std::endl;
  176. continue;
  177. }
  178. }
  179. else if (datum[4] == '0' && datum[5] == '3')
  180. {
  181. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
  182. {
  183. std::cout << "Mars har endast 31 dagar, vänligen försök igen" << std::endl;
  184. continue;
  185. }
  186. }
  187. else if (datum[4] == '0' && datum[5] == '4')
  188. {
  189. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
  190. {
  191. std::cout << "April har endast 30 dagar, vänligen försök igen" << std::endl;
  192. continue;
  193. }
  194. }
  195. else if (datum[4] == '0' && datum[5] == '5')
  196. {
  197. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
  198. {
  199. std::cout << "Maj har endast 31 dagar, vänligen försök igen" << std::endl;
  200. continue;
  201. }
  202. }
  203. else if (datum[4] == '0' && datum[5] == '6')
  204. {
  205. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
  206. {
  207. std::cout << "Juni har endast 30 dagar, vänligen försök igen" << std::endl;
  208. continue;
  209. }
  210. }
  211. else if (datum[4] == '0' && datum[5] == '7')
  212. {
  213. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
  214. {
  215. std::cout << "Juli har endast 31 dagar, vänligen försök igen" << std::endl;
  216. continue;
  217. }
  218. }
  219. else if (datum[4] == '0' && datum[5] == '8')
  220. {
  221. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
  222. {
  223. std::cout << "Agusti har endast 31 dagar, vänligen försök igen" << std::endl;
  224. continue;
  225. }
  226. }
  227. else if (datum[4] == '0' && datum[5] == '9')
  228. {
  229. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
  230. {
  231. std::cout << "September har endast 30 dagar, vänligen försök igen" << std::endl;
  232. continue;
  233. }
  234. }
  235. else if (datum[4] == '1' && datum[5] == '0')
  236. {
  237. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
  238. {
  239. std::cout << "Oktober har maximalt 31 dagar, vänligen försök igen" << std::endl;
  240. continue;
  241. }
  242. }
  243. else if (datum[4] == '1' && datum[5] == '1')
  244. {
  245. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '0'))
  246. {
  247. std::cout << "November har endast 30 dagar, vänligen försök igen" << std::endl;
  248. continue;
  249. }
  250. }
  251. else if (datum[4] == '1' && datum[5] == '2')
  252. {
  253. if (datum[6] > '3' || (datum[6] == '3' && datum[7] > '1'))
  254. {
  255. std::cout << "December har endast 31 dagar, vänligen försök igen" << std::endl;
  256. continue;
  257. }
  258. }
  259. break;
  260. }
  261. while (true)
  262. {
  263. std::cout << '\n' << "Ange " << fnamn << vowel << "gatuadress: ";
  264. std::getline(std::cin, adress);
  265.  
  266. if (isdigit(adress[0]))
  267. {
  268. std::cout << "En adress börjar alltid med en bokstav, försök igen!" << std::endl;
  269. continue;
  270. }
  271.  
  272. for (n = 0; n < adress.length(); n++)
  273. {
  274. if (isspace(adress[n]))
  275. {
  276. adress.erase(n, 1);
  277. n--;
  278. }
  279. if (isupper(adress[n]))
  280. {
  281. adress[n] = tolower(adress[n]);
  282. }
  283. if (isdigit(adress[n]))
  284. {
  285. adresscheak++;
  286. }
  287. }
  288.  
  289. if (adresscheak < 1)
  290. {
  291. std::cout << "En gatuadress måste minst innehålla en siffra, vänligen försök igen!" << std::endl;
  292. continue;
  293. }
  294.  
  295. if (islower(adress[0]))
  296. {
  297. adress[0] = toupper(adress[0]);
  298. }
  299.  
  300. break;
  301. }
  302.  
  303. while (true)
  304. {
  305. alpha = 0;
  306. std::cout << '\n' << "Ange " << fnamn << vowel << "postnummer: ";
  307. std::getline(std::cin, pnum);
  308.  
  309. for (n = 0; n < pnum.length(); n++)
  310. {
  311. if (isalpha(pnum[n]))
  312. {
  313. std::cout << "Ett postnummer får inte innehålla bokstäver, vänligen försök igen: " << std::endl;
  314. alpha = 1;
  315. break;
  316. }
  317. if (isspace(pnum[n]))
  318. {
  319. pnum.erase(n, 1);
  320. n--;
  321. }
  322. }
  323. if (alpha == 1)
  324. {
  325. continue;
  326. }
  327.  
  328. if (pnum.length() != 5)
  329. {
  330. std::cout << "Ett postnummer ska endast innehålla 5 siffror, vänligen försök igen: " << std::endl;
  331. continue;
  332. }
  333. break;
  334. }
  335.  
  336. while (true)
  337. {
  338. digit = 0;
  339. std::cout << '\n' << "Ange " << fnamn << vowel << "postort: ";
  340. std::cin >> port;
  341.  
  342. for (n = 0; n < port.length(); n++)
  343. {
  344. if (isdigit(port[n]))
  345. {
  346. digit = 1;
  347. break;
  348. }
  349. if (isupper(port[n]))
  350. {
  351. port[n] = tolower(port[n]);
  352. }
  353. }
  354. if (digit == 1)
  355. {
  356. std::cout << "Det är ett namn och kan endast innehålla bokstäver, vänligen försök igen" << std::endl;
  357. continue;
  358. }
  359.  
  360. if (islower(port[0]))
  361. {
  362. port[0] = toupper(port[0]);
  363. }
  364. break;
  365. }
  366.  
  367. while (true)
  368. {
  369. std::cout << '\n' << "Ange " << fnamn << vowel << "e-postadress: ";
  370. std::cin >> epost;
  371. std::cin.clear();
  372. std::cin.ignore();
  373.  
  374. if (epost[0] == '@')
  375. {
  376. std::cout << "En e-postadress får inte börja med ett snabela(@)" << std::endl;
  377. continue;
  378. }
  379.  
  380. for (n = 0; n < epost.length(); n++)
  381. {
  382. if (isupper(epost[n]))
  383. {
  384. epost[n] = tolower(epost[n]);
  385. }
  386. if (epost[n] == '@')
  387. {
  388. snabel = 1;
  389. count1++;
  390. }
  391. if (epost[n] == '.')
  392. {
  393. dot = 1;
  394. }
  395.  
  396. }
  397. if (snabel != 1 || dot != 1)
  398. {
  399. std::cout << "En e-postadress måste innehålla både ett snabela(@) och en punkt(.)" << std::endl;
  400. std::cout << "vänligen försök igen." << std::endl;
  401. dot = 0;
  402. snabel = 0;
  403. continue;
  404. }
  405.  
  406. if (count1 > 1)
  407. {
  408. count1 = 0;
  409. std::cout << "En e-postadress får endast innehålla ett snabela(@)" << std::endl;
  410. continue;
  411. }
  412. break;
  413. }
  414. while (true)
  415. {
  416. feltele = 0;
  417. std::cout << '\n' << "Ange " << fnamn << vowel << "mobilnummer: ";
  418. std::getline(std::cin, tele);
  419.  
  420. if (tele[0] == '+')
  421. {
  422. std::cout << "Programmet stödjer ej riktnummer, vänligen försök igen!" << std::endl;
  423. continue;
  424. }
  425. if (!(tele[0] == '0' && tele[1] == '7'))
  426. {
  427. std::cout << "Ett svenskt mobilnummer börjar alltid på 07" << std::endl;
  428. continue;
  429. }
  430.  
  431. for (n = 0; n < tele.length(); n++)
  432. {
  433. if (!isdigit(tele[n]))
  434. {
  435. feltele = 1;
  436. break;
  437. }
  438. if (isspace(tele[n]))
  439. {
  440. tele.erase(n, 1);
  441. n--;
  442. }
  443.  
  444. }
  445.  
  446. if (feltele == 1)
  447. {
  448. std::cout << "Ett telefonnummer innehåller endast siffror, vänligen försök igen" << std::endl;
  449. continue;
  450. }
  451. if (tele.length() != 10)
  452. {
  453. std::cout << "Felaktigt med siffror i nummret, vänligen försök igen!" << std::endl;
  454. continue;
  455. }
  456. break;
  457. }
  458.  
  459. std::ofstream outfile;
  460. outfile.open("KontaktBok.txt", std::ios::app);
  461.  
  462. if (outfile.fail() || !outfile.is_open())
  463. {
  464. std::cout << "Något gick fil vid filöverföring!" << std::endl;
  465. }
  466. outfile << fnamn + " " << enamn + " - " << "//" + datum + " " << "// " + tele + " " << "// " + epost + " " << "// " + adress + " " << "// " + pnum + " " << "// " + port + " \n";
  467. std::cout << "\nKontakten för '" << fnamn + " " << enamn << "' är sparad i din konatkbok!" << std::endl;
  468. outfile.close();
  469.  
  470. }
  471. void searchcontact()
  472. {
  473. std::vector<std::string> contact;
  474. std::vector<std::string>::iterator vcount;
  475. std::string temp, search, contactString, filnamn;
  476. int n, valet, anternativ, vectorPoss = 1;
  477. bool space = 0;
  478.  
  479. std::ifstream inFile;
  480. inFile.open("KontaktBok.txt");
  481.  
  482. if (!inFile.is_open())
  483. {
  484. std::cout << '\n' << "Kontaktboken gick ej att öppna, kontrollera att" << std::endl;
  485. std::cout << "Kontrollera att filen existerar" << std::endl;
  486. return;
  487. }
  488. while (true)
  489. {
  490. space = 0;
  491. valet = 0;
  492. std::cout << "\n\n///////////////////////////////////\n\n";
  493. std::cout << "Sökning sker på personerns förnamn, efternamn, personnummer, telefonnummer samt e-postadress" << std::endl;
  494. std::cout << "Sök efter kontakt: ";
  495. std::cin >> search;
  496. std::cin.ignore();
  497. std::cin.clear();
  498.  
  499. //Gör det inamtade sökordet till småbokstäver även om man söker efter stora
  500. for (n = 0; n < search.length(); n++)
  501. {
  502. if (isupper(search[n]))
  503. {
  504. search[n] = tolower(search[n]);
  505. }
  506. }
  507. //Hantering av jämförelse av sökning och kontaktbok, varje rad för sig
  508. while (inFile.peek() != EOF)
  509. {
  510. getline(inFile, contactString);
  511. temp = contactString;
  512.  
  513. for (n = 0; n < temp.length(); n++)
  514. {
  515. if (isupper(temp[n]))
  516. {
  517. temp[n] = (tolower(temp[n]));
  518. }
  519. }
  520.  
  521. size_t hittaKontakt = temp.find(search);
  522. if (hittaKontakt != std::string::npos)
  523. {
  524. contact.push_back(contactString);
  525. }
  526. }
  527. std::cout << "\n\n///////////////////////////////////\n\n";
  528. std::cout << "\n------Kontakter som matchar din sökning------\n" << std::endl;
  529.  
  530. for (vcount = contact.begin(); vcount != contact.end(); vcount++)
  531. {
  532. std::cout << "\n[" << vectorPoss << "] - " << *vcount << std::endl;
  533. vectorPoss++;
  534. }
  535. break;
  536. }
  537. inFile.close();
  538. }
  539. void listContacts()
  540. {
  541. std::ifstream inFile;
  542. inFile.open("KontaktBok.txt");
  543. std::string contactString, filnamn;
  544. int vectorPoss = 1, eraseinput, anternativ;
  545. std::vector<std::string> Kontakter;
  546. std::vector<std::string> ::iterator vcount;
  547. std::cout << "\n\n///////////////////////////////////\n\n";
  548. std::cout << "------ Listar kontakter ------\n\n" << std::endl;
  549. if (!inFile.is_open())
  550. {
  551. std::cout << '\n' << "Kontaktboken gick ej att öppna" << std::endl;
  552. std::cout << "Kontrollera att filen existerar" << std::endl;
  553. return;
  554. }
  555. //lägger in hela kontaktboken i en vector som sedan skrivs numrerat
  556. while (std::getline(inFile, contactString))
  557. {
  558. if (contactString.size() > 0)
  559. {
  560. Kontakter.push_back(contactString);
  561. }
  562. }
  563. for (vcount = Kontakter.begin(); vcount != Kontakter.end(); vcount++)
  564. {
  565. std::cout << "\n[" << vectorPoss << "] " << " - " << *vcount << std::endl;
  566. vectorPoss++;
  567. }
  568. inFile.close();
  569.  
  570. }
  571.  
  572. void eraseContact()
  573. {
  574. std::ifstream inFile;
  575. inFile.open("KontaktBok.txt");
  576. std::string contact;
  577. int valet, eraseInput, input, vposs = 1;
  578. std::vector <std::string> Contactvector;
  579. std::vector <std::string>::iterator vcount;
  580.  
  581. std::cout << "\n\n///////////////////////////////////\n\n"
  582. "--- Radera kontakt ---\n" << std::endl;
  583. if (!inFile.is_open())
  584. {
  585. std::cout << "Filen hittades ej" << std::endl;
  586. return;
  587. }
  588. //lägger in kontaktboken i en vector rad för rad
  589. while (std::getline(inFile, contact))
  590. {
  591. if (contact.size() > 0)
  592. {
  593. Contactvector.push_back(contact);
  594. }
  595. }
  596. //stänger filen
  597. inFile.close();
  598.  
  599. //använder mig av listcontact funktionen för att kunna se valalternativen som man kan ta bort
  600. listContacts();
  601.  
  602. while (true)
  603. {
  604. //Felhantering för valet från användaren som begränsar användaren att välja endast de nummer som existerar i listan
  605. valet = 0;
  606. std::cout << "\nMata in den siffra för kontakten som du vill radera eller övrig input för startmeny: ";
  607. std::cin >> input;
  608. input--;
  609.  
  610. if (std::cin.fail() || !(input >= 0 && input < Contactvector.size()))
  611. {
  612. std::cin.clear();
  613. std::cin.ignore(std::numeric_limits < std::streamsize > ::max(), '\n');
  614. std::cout << "Ange endast de nummer som existerar i kontaktlistan, vänligen försök igen" << '\n' << std::endl;
  615. continue;
  616. }
  617. else
  618. {
  619. //Tar bort den önskade kontakten från vektorn och sedan öppnas filen och de resterande kontakterna strömmas ut tillbaks till filen.
  620. Contactvector.erase(Contactvector.begin() + input);
  621.  
  622. // Inte appending då man vill skriva över filen
  623. std::ofstream outFile;
  624. outFile.open("KontaktBok.txt");
  625.  
  626. std::cout << "\n\n-----Kontakter som är kvar är: -----\n" << std::endl;
  627.  
  628. for (vcount = Contactvector.begin(); vcount != Contactvector.end(); vcount++)
  629. {
  630. outFile << *vcount << std::endl;
  631. std::cout << "\n[" << vposs << "] - " << *vcount << std::endl;
  632. vposs++;
  633. }
  634. outFile.close();
  635.  
  636.  
  637. }
  638. break;
  639. }
  640. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement