uni

University stuff
git clone git://git.christosmarg.xyz/uni-assignments.git
Log | Files | Refs | README | LICENSE

main.cpp (4482B)


      1 #include <memory>
      2 #include "appsystem.hpp"
      3 
      4 static std::ostream& operator<< (std::ostream& stream, const AppSystem& sys);
      5 static void cont(const char *s);
      6 static void pluseqs(AppSystem& sys);
      7 static void edit(AppSystem& sys);
      8 static void remove(AppSystem& sys);
      9 static void getapps(const AppSystem& sys);
     10 
     11 /* 
     12  * main uses smart pointers just so I don't have to delete
     13  * them manually. There's obviously no good reason to do it
     14  * as there's only one object, but it looks cool.
     15  *
     16  * I also used some features that might make the program harder
     17  * to understand, but I wanted to take a chance and try out some of
     18  * these features, for fun mainly, even though they might seem
     19  * (and be) useless.
     20  */
     21 int
     22 main(int argc, char **argv)
     23 {
     24     std::unique_ptr<AppSystem> sys = std::make_unique<AppSystem>();
     25     system("clear || cls");
     26     sys->import_data<Manufacturer>("res/manfdata.csv");
     27     sys->import_data<App>("res/appdata.csv");
     28     sys->import_data<Review>("res/revs.csv");
     29 
     30     cont("Imported data");
     31     std::cout << *sys << std::endl;
     32     
     33     pluseqs(*sys);
     34     cont("Additional data");
     35     std::cout << *sys << std::endl;
     36 
     37     edit(*sys);
     38     cont("Editing data");
     39     std::cout << *sys << std::endl;
     40 
     41     remove(*sys);
     42     cont("Removing data");
     43     std::cout << *sys << std::endl;
     44 
     45     cont("");
     46     getapps(*sys);
     47 
     48     cont("");
     49     sys->export_data<Manufacturer>("res/manfdata_out.csv");
     50     sys->export_data<App>("res/appdata_out.csv");
     51     sys->export_data<Review>("res/revs_out.csv");
     52     std::printf("\nThank you :)\n");
     53 
     54     return 0;
     55 }
     56 
     57 std::ostream&
     58 operator<< (std::ostream& stream, const AppSystem& sys)
     59 {
     60     stream <<
     61         std::left << std::setw(7) << "SN" <<
     62         std::left << std::setw(20) << "Name" <<
     63         std::left << std::setw(20) << "OS" <<
     64         std::left << std::setw(7) << "Price" <<
     65         std::left << std::setw(7) << "SN" <<
     66         std::left << std::setw(15) << "Manufacturer" <<
     67         std::left << std::setw(25) << "Email" <<
     68         std::left << std::setw(10) << "Genre" <<
     69         std::left << std::setw(10) << "Online" <<
     70         std::left << std::setw(25) << "Extensions" << std::endl << std::endl;
     71     std::vector<App *> apps = sys.get_apps();
     72     for (const auto& app : apps)
     73         app->print(stream);
     74     return stream;  
     75 }
     76 
     77 void
     78 cont(const char *s)
     79 {
     80     std::printf("\nPress <ENTER> to continue. . .");
     81     if (std::cin.get()) system("clear || cls");
     82     if (strlen(s) > 0) std::printf("%s\n\n", s);
     83 }
     84 
     85 void
     86 pluseqs(AppSystem& sys)
     87 {
     88     Manufacturer *comp = new Manufacturer("0004", "Company", "comp@comp.com");
     89     Manufacturer *chris = new Manufacturer("0005", "Chris", "chris@chris.com");
     90     sys += comp;
     91     sys += chris;
     92     sys += new Office("0004", "zathura", "NiceOS 1.1", comp, 0, {".pdf", ".md"});
     93     sys += new Game("0005", "minecurses", "NiceOS 0.5", chris, 0, "Puzzle", false);
     94 }
     95 
     96 void
     97 edit(AppSystem& sys)
     98 {
     99     sys.call<Review *>("minecurses", new Review(5, "gamer", "Good game"),
    100             &App::addrev);
    101     sys.call<const std::vector<Review *>>("Vim",
    102             {new Review(2, "user1", "Not so good"),
    103              new Review(4, "user2", "Good app"),
    104              new Review(5, "user3", "Very good :)")},
    105              &App::addrevs);
    106     sys.call<const char *>("zathura", "1254", &App::set_serialnum);
    107     sys.call<const std::string&>("minecurses", "minesweeper", &App::set_name);
    108     sys.call<const std::string&>("Vim", "GoodOS", &App::set_os);
    109     sys.call<Manufacturer *>("LibreOffice",
    110             new Manufacturer("0006", "FreeSoftware", "freesoft@freesoft.com"),
    111             &App::set_manf);
    112     sys.call<int>("LoL", 155, &App::set_price);
    113     sys.cast_call<const std::string&, Game>("CS:GO", "Shooter", &Game::set_genre);
    114     sys.cast_call<bool, Game>("minesweeper", true, &Game::set_online);
    115     sys.cast_call<const std::vector<std::string>&, Office>("zathura",
    116             {".tex", ".epub", ".ms"}, &Office::set_exts);
    117 }
    118 
    119 void
    120 remove(AppSystem& sys)
    121 {
    122     sys.removebad("0003");
    123 }
    124 
    125 void
    126 getapps(const AppSystem& sys)
    127 {
    128     const std::vector<Office *>& fapps = sys.get_freeapps();
    129     const std::vector<Game *>& ggames = sys.get_goodgames();
    130     std::cout << "Free office apps: " << std::endl << std::endl;
    131     for (const auto& fapp : fapps)
    132         std::cout << fapp->get_name() << std::endl;
    133     std::cout << std::endl;
    134     std::cout << "Games with >4 rating: " << std::endl << std::endl;
    135     for (const auto& ggame : ggames)
    136         std::cout << ggame->get_name() << std::endl;
    137 }