Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.22 KB | None | 0 0
  1. //
  2. // Programskal till obluppg5A
  3. //
  4. // Hanterar fallet med 26 bokstäver A-Z
  5.  
  6. #include <string>
  7. #include <sstream>
  8. #include <cctype>
  9. #include <iostream>
  10. #include <fstream>
  11. #include <cmath>
  12. #include <vector>
  13. #include <cstdlib> // Var tvungen att lägga in denna för EXIT
  14. using namespace std;
  15.  
  16. const int MAX_KOMPISAR = 35;
  17. const int MAX_TRANSAKTIONER = 100;
  18. const int MAX_PERSONER = 35;
  19.  
  20. class Transaktion
  21. {
  22. private:
  23. string datum;
  24. string typ;
  25. string namn;
  26. double belopp;
  27. int ant_kompisar;
  28. string kompisar[MAX_KOMPISAR];
  29.  
  30. public:
  31. //Transaktion();
  32. //~Transaktion();
  33. string *pkompis = &kompisar[0];
  34.  
  35. vector<string> haemtakompisar(){
  36. std::vector<string> dest(kompisar, kompisar + ant_kompisar);
  37. return dest;
  38. }
  39.  
  40. string haemta_namn(){
  41. return namn;
  42. }
  43. double haemta_belopp(){
  44. return belopp;
  45. }
  46. int haemta_ant_kompisar(){
  47. return ant_kompisar;
  48. }
  49. bool finnsKompis( string namnet ){
  50. for(int i = 0; i< haemta_ant_kompisar(); i++){
  51. if(kompisar[i] == namnet)
  52. return true;
  53. }
  54. return false;
  55. }
  56.  
  57. /*
  58. bool laesEnTrans( ifstream &theFile ){
  59. string line;
  60. getline(theFile, line);
  61. std::istringstream row(line);
  62. row >> datum;
  63. row >> typ;
  64. row >> namn;
  65. row >> belopp;
  66. row >> ant_kompisar;
  67. for(int i = 0; i < haemta_ant_kompisar(); i++){
  68. row >> kompisar[i];
  69. }
  70. }
  71.  
  72. */
  73. bool laesEnTrans( istringstream &theFile ){
  74. string line;
  75. getline(theFile, line);
  76. std::istringstream row(line);
  77. row >> datum;
  78. row >> typ;
  79. row >> namn;
  80. row >> belopp;
  81. row >> ant_kompisar;
  82. for(int i = 0; i < haemta_ant_kompisar(); i++){
  83. row >> kompisar[i];
  84. }
  85. }
  86. void skrivEnTrans( ostream &os );
  87. void skrivEnTrans(){
  88. cout << datum << " " << typ << " " << namn << " " <<
  89. belopp << " ";
  90. for(int i = 0; i<ant_kompisar; i++){
  91. cout << kompisar[i] << " ";
  92. }
  93. cout << endl;
  94. }
  95. //...eventuellt div. annat...
  96. };
  97.  
  98. class Person
  99. {
  100. private:
  101. string namn;
  102. double betalat_andras; // ligger ute med totalt
  103. double skyldig; // skyldig totalt
  104.  
  105. public:
  106. Person(){};
  107. Person( string n, double b, double s ){
  108. namn = n;
  109. betalat_andras = b;
  110. skyldig = s;
  111. }
  112. double haemta_betalat(){
  113. return betalat_andras;
  114. }
  115. double haemta_skyldig(){
  116. return skyldig;
  117. }
  118.  
  119. string haemta_namn(){
  120. return namn;
  121. }
  122. void skrivUt(){
  123. cout << namn << " ligger ute med: " << haemta_betalat() << " och ar skyldig: " << haemta_skyldig() << ".";
  124. if(haemta_betalat() > haemta_skyldig())
  125. cout << " Skall ha " << haemta_betalat()-haemta_skyldig() << " fran potten!" << endl;
  126. else if(haemta_betalat() < haemta_skyldig())
  127. cout << " Skall lagga " << haemta_skyldig()-haemta_betalat() << " till potten!" << endl;
  128. else
  129. cout << " Skall varken lagga eller ta från potten!" << endl;
  130. }
  131. //...eventuellt div. annat...
  132. };
  133.  
  134. class PersonLista
  135. {
  136. private:
  137. int antal_pers = 0;
  138. Person pers[MAX_PERSONER];
  139.  
  140. public:
  141. //PersonLista();
  142. //~PersonLista();
  143. int haemta_antal_pers(){
  144. return antal_pers;
  145. }
  146. void laggTillEn(Person pny){
  147. pers[antal_pers] = pny;
  148. antal_pers++;
  149. }
  150. void skrivUtOchFixa(){
  151. for(int i = 0; i<antal_pers; i++){
  152. pers[i].skrivUt();
  153. }
  154. }
  155. double summaSkyldig();
  156. double summaBetalat();
  157. bool finnsPerson(const string& namn){
  158. for(int i = 0; i < antal_pers; i++){
  159. if(namn == pers[i].haemta_namn())
  160. return true;
  161. }
  162. return false;
  163. }
  164.  
  165. Person getPerson(string namn){
  166. if(finnsPerson(namn)){
  167. for(int i = 0; i<antal_pers; i++){
  168. if(pers[i].haemta_namn() == namn)
  169. return pers[i];
  170. }
  171. }
  172. }
  173. //...eventuellt div. annat...
  174. };
  175.  
  176. class TransaktionsLista
  177. {
  178. private:
  179. Transaktion trans[MAX_TRANSAKTIONER];
  180. int antalTrans = 0;
  181.  
  182. public:
  183. //TransaktionsLista();
  184. //~TransaktionsLista();
  185. void laesin( ifstream & theFile ){
  186. string line;
  187. string datum;
  188. string typ;
  189. string namn;
  190. double belopp;
  191. int ant_kompisar;
  192. string kompisar[MAX_KOMPISAR];
  193. while(getline(theFile, line)){
  194. istringstream row(line);
  195. Transaktion t;
  196. t.laesEnTrans(row);
  197. laggTill(t);
  198. }
  199. theFile.close();
  200. }
  201. void skrivut( ostream & os );
  202. // Till konsol
  203. void skrivut(){
  204. for(int i = 0; i < antalTrans; i++){
  205. trans[i].skrivEnTrans();
  206. }
  207. }
  208. void laggTill( Transaktion & t ){
  209. trans[antalTrans] = t;
  210. antalTrans++;
  211. }
  212. double totalkostnad(){
  213. double tkostnad = 0;
  214. for(int i = 0; i < antalTrans; i++){
  215. tkostnad += trans[i].haemta_belopp();
  216. }
  217. return tkostnad;
  218. }
  219. double liggerUteMed( string namnet ){
  220. double skuld = 0;
  221. for(int i = 0; i < antalTrans; i++){
  222. if(trans[i].haemta_namn() == namnet){
  223. skuld += trans[i].haemta_belopp()-trans[i].haemta_belopp()/double(trans[i].haemta_ant_kompisar()+1);
  224. }
  225. }
  226. return skuld;
  227. }
  228. double aerSkyldig( string namnet ){
  229. double skuld = 0;
  230. for(int i = 0; i < antalTrans; i++){
  231. if(trans[i].finnsKompis(namnet))
  232. skuld += trans[i].haemta_belopp()/double(trans[i].haemta_ant_kompisar()+1);
  233. }
  234. return skuld;
  235. }
  236. PersonLista FixaPersoner(){
  237. PersonLista pl;
  238. for(int i = 0; i < antalTrans; i++){
  239. if(!pl.finnsPerson(trans[i].haemta_namn())){
  240. Person p(trans[i].haemta_namn(), liggerUteMed(trans[i].haemta_namn()),aerSkyldig(trans[i].haemta_namn()));
  241. pl.laggTillEn(p);
  242. }
  243.  
  244. vector<string> kompisar = trans[i].haemtakompisar();
  245. cout << kompisar.size() << endl;
  246. for (int z = 0; z < kompisar.size(); z++) {
  247. cout << kompisar[z] << endl;
  248. if(!pl.finnsPerson(kompisar[z])){
  249. Person p(kompisar[z], liggerUteMed(kompisar[z]), aerSkyldig(kompisar[z]));
  250. pl.laggTillEn(p);
  251. }
  252. }
  253. }
  254. return pl;
  255. }
  256. //...eventuellt div. annat...
  257. };
  258.  
  259.  
  260. void menu(TransaktionsLista tl, PersonLista pl){
  261. while(true){
  262. cout << "Valj i menyn nedan:\n" <<
  263. "0. Avsluta. Alla transaktioner sparas på fil.\n" <<
  264. "1. Las in en transaktion fran tangentbordet.\n" <<
  265. "2. Skriv ut information om alla transaktioner.\n" <<
  266. "3. Berakna totala kostnaden.\n" <<
  267. "4. Hur mycket ar en viss person skyldig?\n" <<
  268. "5. Hur mycket ligger en viss person ute med?\n" <<
  269. "6. Lista alla personer mm och FIXA!!!" << endl;
  270. int menuOption;
  271. string input4;
  272. cin >> menuOption;
  273. switch(menuOption){
  274. case 0:
  275. exit( EXIT_SUCCESS );
  276. break;
  277. case 1:
  278. break;
  279. case 2:
  280. tl.skrivut();
  281. break;
  282. case 3:
  283. cout << "Den totala kostnaden ar " << tl.totalkostnad() << endl;
  284. break;
  285. case 4:
  286. cout << "Vilken person menar du: " << endl;
  287. getline(cin, input4);
  288. getline(cin, input4);
  289. //cout << "input4 ar " << input4 << endl;
  290. if(!pl.finnsPerson(input4)){
  291. cout << "Personen finns inte i listan." << endl;
  292. }
  293. else{
  294. cout << input4 << " ar skyldig " << pl.getPerson(input4).haemta_skyldig() << endl;
  295. }
  296. break;
  297. case 5:
  298. break;
  299. case 6:
  300. pl.skrivUtOchFixa();
  301. break;
  302.  
  303. }
  304. }
  305. }
  306.  
  307. int main(){
  308. ifstream theFile("resa.txt");
  309. TransaktionsLista tl;
  310. tl.laesin(theFile);
  311. PersonLista pl = tl.FixaPersoner();;
  312. //menu(tl, pl);
  313. cout << pl.haemta_antal_pers();
  314. //tl.skrivut();
  315.  
  316. return 0;
  317. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement