Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Programskal till obluppg5A
- //
- // Hanterar fallet med 26 bokstäver A-Z
- #include <string>
- #include <sstream>
- #include <cctype>
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <vector>
- #include <cstdlib> // Var tvungen att lägga in denna för EXIT
- using namespace std;
- const int MAX_KOMPISAR = 35;
- const int MAX_TRANSAKTIONER = 100;
- const int MAX_PERSONER = 35;
- class Transaktion
- {
- private:
- string datum;
- string typ;
- string namn;
- double belopp;
- int ant_kompisar;
- string kompisar[MAX_KOMPISAR];
- public:
- //Transaktion();
- //~Transaktion();
- string *pkompis = &kompisar[0];
- vector<string> haemtakompisar(){
- std::vector<string> dest(kompisar, kompisar + ant_kompisar);
- return dest;
- }
- string haemta_namn(){
- return namn;
- }
- double haemta_belopp(){
- return belopp;
- }
- int haemta_ant_kompisar(){
- return ant_kompisar;
- }
- bool finnsKompis( string namnet ){
- for(int i = 0; i< haemta_ant_kompisar(); i++){
- if(kompisar[i] == namnet)
- return true;
- }
- return false;
- }
- /*
- bool laesEnTrans( ifstream &theFile ){
- string line;
- getline(theFile, line);
- std::istringstream row(line);
- row >> datum;
- row >> typ;
- row >> namn;
- row >> belopp;
- row >> ant_kompisar;
- for(int i = 0; i < haemta_ant_kompisar(); i++){
- row >> kompisar[i];
- }
- }
- */
- bool laesEnTrans( istringstream &theFile ){
- string line;
- getline(theFile, line);
- std::istringstream row(line);
- row >> datum;
- row >> typ;
- row >> namn;
- row >> belopp;
- row >> ant_kompisar;
- for(int i = 0; i < haemta_ant_kompisar(); i++){
- row >> kompisar[i];
- }
- }
- void skrivEnTrans( ostream &os );
- void skrivEnTrans(){
- cout << datum << " " << typ << " " << namn << " " <<
- belopp << " ";
- for(int i = 0; i<ant_kompisar; i++){
- cout << kompisar[i] << " ";
- }
- cout << endl;
- }
- //...eventuellt div. annat...
- };
- class Person
- {
- private:
- string namn;
- double betalat_andras; // ligger ute med totalt
- double skyldig; // skyldig totalt
- public:
- Person(){};
- Person( string n, double b, double s ){
- namn = n;
- betalat_andras = b;
- skyldig = s;
- }
- double haemta_betalat(){
- return betalat_andras;
- }
- double haemta_skyldig(){
- return skyldig;
- }
- string haemta_namn(){
- return namn;
- }
- void skrivUt(){
- cout << namn << " ligger ute med: " << haemta_betalat() << " och ar skyldig: " << haemta_skyldig() << ".";
- if(haemta_betalat() > haemta_skyldig())
- cout << " Skall ha " << haemta_betalat()-haemta_skyldig() << " fran potten!" << endl;
- else if(haemta_betalat() < haemta_skyldig())
- cout << " Skall lagga " << haemta_skyldig()-haemta_betalat() << " till potten!" << endl;
- else
- cout << " Skall varken lagga eller ta från potten!" << endl;
- }
- //...eventuellt div. annat...
- };
- class PersonLista
- {
- private:
- int antal_pers = 0;
- Person pers[MAX_PERSONER];
- public:
- //PersonLista();
- //~PersonLista();
- int haemta_antal_pers(){
- return antal_pers;
- }
- void laggTillEn(Person pny){
- pers[antal_pers] = pny;
- antal_pers++;
- }
- void skrivUtOchFixa(){
- for(int i = 0; i<antal_pers; i++){
- pers[i].skrivUt();
- }
- }
- double summaSkyldig();
- double summaBetalat();
- bool finnsPerson(const string& namn){
- for(int i = 0; i < antal_pers; i++){
- if(namn == pers[i].haemta_namn())
- return true;
- }
- return false;
- }
- Person getPerson(string namn){
- if(finnsPerson(namn)){
- for(int i = 0; i<antal_pers; i++){
- if(pers[i].haemta_namn() == namn)
- return pers[i];
- }
- }
- }
- //...eventuellt div. annat...
- };
- class TransaktionsLista
- {
- private:
- Transaktion trans[MAX_TRANSAKTIONER];
- int antalTrans = 0;
- public:
- //TransaktionsLista();
- //~TransaktionsLista();
- void laesin( ifstream & theFile ){
- string line;
- string datum;
- string typ;
- string namn;
- double belopp;
- int ant_kompisar;
- string kompisar[MAX_KOMPISAR];
- while(getline(theFile, line)){
- istringstream row(line);
- Transaktion t;
- t.laesEnTrans(row);
- laggTill(t);
- }
- theFile.close();
- }
- void skrivut( ostream & os );
- // Till konsol
- void skrivut(){
- for(int i = 0; i < antalTrans; i++){
- trans[i].skrivEnTrans();
- }
- }
- void laggTill( Transaktion & t ){
- trans[antalTrans] = t;
- antalTrans++;
- }
- double totalkostnad(){
- double tkostnad = 0;
- for(int i = 0; i < antalTrans; i++){
- tkostnad += trans[i].haemta_belopp();
- }
- return tkostnad;
- }
- double liggerUteMed( string namnet ){
- double skuld = 0;
- for(int i = 0; i < antalTrans; i++){
- if(trans[i].haemta_namn() == namnet){
- skuld += trans[i].haemta_belopp()-trans[i].haemta_belopp()/double(trans[i].haemta_ant_kompisar()+1);
- }
- }
- return skuld;
- }
- double aerSkyldig( string namnet ){
- double skuld = 0;
- for(int i = 0; i < antalTrans; i++){
- if(trans[i].finnsKompis(namnet))
- skuld += trans[i].haemta_belopp()/double(trans[i].haemta_ant_kompisar()+1);
- }
- return skuld;
- }
- PersonLista FixaPersoner(){
- PersonLista pl;
- for(int i = 0; i < antalTrans; i++){
- if(!pl.finnsPerson(trans[i].haemta_namn())){
- Person p(trans[i].haemta_namn(), liggerUteMed(trans[i].haemta_namn()),aerSkyldig(trans[i].haemta_namn()));
- pl.laggTillEn(p);
- }
- vector<string> kompisar = trans[i].haemtakompisar();
- cout << kompisar.size() << endl;
- for (int z = 0; z < kompisar.size(); z++) {
- cout << kompisar[z] << endl;
- if(!pl.finnsPerson(kompisar[z])){
- Person p(kompisar[z], liggerUteMed(kompisar[z]), aerSkyldig(kompisar[z]));
- pl.laggTillEn(p);
- }
- }
- }
- return pl;
- }
- //...eventuellt div. annat...
- };
- void menu(TransaktionsLista tl, PersonLista pl){
- while(true){
- cout << "Valj i menyn nedan:\n" <<
- "0. Avsluta. Alla transaktioner sparas på fil.\n" <<
- "1. Las in en transaktion fran tangentbordet.\n" <<
- "2. Skriv ut information om alla transaktioner.\n" <<
- "3. Berakna totala kostnaden.\n" <<
- "4. Hur mycket ar en viss person skyldig?\n" <<
- "5. Hur mycket ligger en viss person ute med?\n" <<
- "6. Lista alla personer mm och FIXA!!!" << endl;
- int menuOption;
- string input4;
- cin >> menuOption;
- switch(menuOption){
- case 0:
- exit( EXIT_SUCCESS );
- break;
- case 1:
- break;
- case 2:
- tl.skrivut();
- break;
- case 3:
- cout << "Den totala kostnaden ar " << tl.totalkostnad() << endl;
- break;
- case 4:
- cout << "Vilken person menar du: " << endl;
- getline(cin, input4);
- getline(cin, input4);
- //cout << "input4 ar " << input4 << endl;
- if(!pl.finnsPerson(input4)){
- cout << "Personen finns inte i listan." << endl;
- }
- else{
- cout << input4 << " ar skyldig " << pl.getPerson(input4).haemta_skyldig() << endl;
- }
- break;
- case 5:
- break;
- case 6:
- pl.skrivUtOchFixa();
- break;
- }
- }
- }
- int main(){
- ifstream theFile("resa.txt");
- TransaktionsLista tl;
- tl.laesin(theFile);
- PersonLista pl = tl.FixaPersoner();;
- //menu(tl, pl);
- cout << pl.haemta_antal_pers();
- //tl.skrivut();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement