I see a number of things that could help you improve your code. ## Don't abuse `using namespace std` Putting `using namespace std` at the top of every program is [a bad habit](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) that you'd do well to avoid. ## Choose better function names There are two very similar names `organize()` and `organizeInfo()` and it's not obvious without reading the code what the difference might be. ## Reconsider the constructor I found this constructor counterintuitive: date dawg(cin); It would have been much easier to understand if it had been written like this: date dawg; cin >> dawg; ## Use const where practical Your `outputInfo()` member fuction does not alter the underlying `date`, so it should be declared `const`. In general, whenever you are writing a variable or function prototype look for places you can use `const`. ## Write object I/O functions as inserters and extractors Instead of a member function `outputInfo`, write an extractor instead: friend ostream &operator<<(std::ostream &out, const date& d) { return out << d.year << " " << d.month << " " << d.day; } Similarly, instead of the constructor taking a reference to a `std::istream`, use a inserter: friend istream& operator>>(std::istream &in, date& d) { return in >> d.year >> d.month >> d.day; } ## Fix the prompt string It may seem like a minor issue but the user interface is a very important part of most programs because it's the only part that a user would see. For that reason instead of "and ill try and organize" which soundw like the program is not well, it should be "and I'll try ..." ## Use a better algorithm Right now, if I enter the 10 March 2010 date as `3 10 2010` which is the ordering commonly used in the United States, the program reinterprets that as 3 October 2010. (This was intended to make the same point as @πάντα ῥεῖ in the section "Don't promise things to users of your API, you cannot ever guarantee" but that answer states the point more accurately and eloquently.) ## Use better default values The default constructor creates a date of `0 0 0` which is not really a valid date in most calendrical systems. Better would be to assign a default value which, while possibly not meaningful, would at least be a valid date. ## Use `true` and `false` for boolean values Since you're using C++, you should use the keywords `true` and `false` instead of `1` and `0` for boolean return values. ## Only `#include` things that are needed The code currently has this line: #include <string> However, there is no code in this program that needs anything from that header, so it should be omitted. ## Do more error checking Dates such as 30 February 2015 could be detected as invalid and rejected, as by `throw`ing an exception. ## Use available library functions Instead of `switchItems()`, you could use [`std::swap`](http://en.cppreference.com/w/cpp/algorithm/swap) if you're using C++11 or newer. ## Eliminate `return 0` at the end of main When a C++ program reaches the end of `main` the compiler will automatically generate code to return 0, so there is no reason to put `return 0;` explicitly at the end of `main`.