Top 10 C++ Projects Ideas for C++ Beginners

Posted in C++
Top 10 C++ Projects Ideas for C++ Beginners

Introduction

C++ was built as an extension to C and gave programmers a high control over memory and system resources. If you know any other programming language, C++ will be easy to learn. Even otherwise, C++ is a friendly language, and you can learn it through some hands-on projects and practice.

This article lists 10 C++ projects of different levels, which will help you appreciate the language more. You can also try many other similar projects. For example, one of our projects is Bookshop inventory management. You can try a library management system as well on the same lines. Again, similar to the railway ticket reservation system, you can try out the Bus ticket reservation system.

What is C++?

C++ is an OOPs based programming language, much suitable for building high-performance applications. C++ finds its use in applications that need high speed and accuracy, for example, operating systems, gaming applications, Graphical User Interface (GUI), and embedded systems. The most popular IDE for C++ in Visual Studio will be used for the projects below. You can also write your programs on a text editor like Notepad or Textpad and compile them using a compiler like GCC. Some other popular IDEs are Eclipse and Code::Blocks. Turbo C++ is one of the time-tested IDEs that you can use for all C++ programs without any hassles.

Some salient features of C++ are:

  • Object-oriented
  • Simple to code and understand
  • Rich set of libraries
  • Efficient memory management 
  • Powerful and fast

How Will C++ Projects Help You?

To practice learning C++, you can do a lot of projects from easy to advanced levels. Each of these projects will teach you something new so that you are familiar with the most important topics that will always come in handy when you build real-world projects. 

To work on these projects, you need to install an IDE. You can download a free version of Visual Studio from the Microsoft official website. Or you can download Code::Blocks from their official website.

Top Projects to Enhance Your C++ skills

1. Login and Registration System

Login and Registration SystemThis is one of the simplest projects to start with to learn about file systems in C++. The project involves a user registration process by asking username and password. Upon successful registration, a user file is created with the credentials. If the user does not exist, upon login, an error will be shown. You will also learn how to use Visual Studio to create a simple project.

Check the code video here.

2. Car Rental System

Car Rental SystemThis is a trendy project and very useful for learning about keyboard events, date-time functions, and implementing a C++ login system. The program has separate menus for admin and other users. There are also methods to calculate fare based on time and distance, including displaying car details, availability, etc.

Check the source code on GitHub.

You can try other projects like music store management, bus reservation, or railway reservation system on the same lines as above.

3. Bookshop inventory system

Bookshop inventory systemThis is a simple project where the system maintains the inventory of books in a bookshop. If a customer purchases a book, the book's count will decrease; if a book is added, the same is updated. Notice the use of pointers. You can modify the code to add a book ID and make the search based on book ID or make the search using just one parameter giving multiple results, and so on.

Check the source code here.

4. Student Report Management System

Student Report Management SystemThrough this project, we can learn a lot about input/output streams and the file management system of C++. Our program collects student details like name, roll number, marks in each subject, and calculates their grade. This is a simple console app. Note that we focus only on the correct inputs in this project, and you can enhance it to handle wrong inputs. Here is the source code:

#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;

// the class that stores data
class student
{
int rollno;
char name[50];
int eng_marks, math_marks, sci_marks, lang2_marks, cs_marks;
double average;
char grade;

public:
void getdata();
void showdata() const;
void calculate();
int retrollno() const;
}; //class ends here

void student::calculate()
{
average=(eng_marks+math_marks+sci_marks+lang2_marks+cs_marks)/5.0;
if(average>=90)
grade='A';
else if(average>=75)
grade='B';
else if(average>=50)
grade='C';
else
grade='F';
}

void student::getdata()
{
cout<<"\nEnter student's roll number: ";
cin>>rollno;
cout<<"\n\nEnter student name: ";
cin.ignore();
cin.getline(name,50);
cout<<"\nAll marks should be out of 100";
cout<<"\nEnter marks in English: ";
cin>>eng_marks;
cout<<"\nEnter marks in Math:  ";
cin>>math_marks;
cout<<"\nEnter marks in Science:  ";
cin>>sci_marks;
cout<<"\nEnter marks in 2nd language:  ";
cin>>lang2_marks;
cout<<"\nEnter marks in Computer science:  ";
cin>>cs_marks;
calculate();
}
void student::showdata() const
{
cout<<"\nRoll number of student : "<<rollno;
cout<<"\nName of student : "<<name;
cout<<"\nEnglish : "<<eng_marks;
cout<<"\nMaths : "<<math_marks;
cout<<"\nScience : "<<sci_marks;
cout<<"\nLanguage2 : "<<lang2_marks;
cout<<"\nComputer Science :"<<cs_marks;
cout<<"\nAverage Marks :"<<average;
cout<<"\nGrade of student is :"<<grade;
}
int  student::retrollno() const
{
return rollno;
}
//function declaration
void create_student();
void display_sp(int);//display particular record
void display_all(); // display all records
void delete_student(int);//delete particular record
void change_student(int);//edit particular record
//MAIN
int main()
{
char ch;
cout<<setprecision(2);
do
{
char ch;
int num;
system("cls");
cout<<"\n\n\n\tMENU";
cout<<"\n\n\t1.Create student record";
cout<<"\n\n\t2. Search student record";
cout<<"\n\n\t3. Display all students records ";
cout<<"\n\n\t4.Delete student record";
cout<<"\n\n\t5.Modify student record";
cout<<"\n\n\t6.Exit";
cout<<"\n\n\What is your Choice (1/2/3/4/5/6) ";
cin>>ch;
system("cls");
switch(ch)
{
case '1': create_student(); break;
case '2': cout<<"\n\n\tEnter The roll number ";
cin>>num;
display_sp(num); break;
case '3': display_all(); break;
case '4': cout<<"\n\n\tEnter The roll number: ";
cin>>num;
delete_student(num);break;
case '5': cout<<"\n\n\tEnter The roll number "; cin>>num;
change_student(num);break;
case '6': cout<<"Exiting, Thank you!";exit(0);
}
}while(ch!='6');
return 0;
}
//write student details to file
void create_student()
{
student stud;
ofstream oFile;
oFile.open("student.dat",ios::binary|ios::app);
stud.getdata();
oFile.write(reinterpret_cast<char *> (&stud), sizeof(student));
oFile.close();
    cout<<"\n\nStudent record Has Been Created ";
cin.ignore();
cin.get();
}
// read file records
void display_all()
{
student stud;
ifstream inFile;
inFile.open("student.dat",ios::binary);
if(!inFile)
{
cout<<"File could not be opened !! Press any Key to exit";
cin.ignore();
cin.get();
return;
}
cout<<"\n\n\n\t\tDISPLAYING ALL RECORDS\n\n";
while(inFile.read(reinterpret_cast<char *> (&stud), sizeof(student)))
{
st.showdata();
cout<<"\n\n====================================\n";
}
inFile.close();
cin.ignore();
cin.get();
}
//read specific record based on roll number
void display_sp(int n)
{
student stud;
ifstream iFile;
iFile.open("student.dat",ios::binary);
if(!iFile)
{
cout<<"File could not be opened... Press any Key to exit";
cin.ignore();
cin.get();
return;
}
bool flag=false;
while(iFile.read(reinterpret_cast<char *> (&stud), sizeof(student)))
{
if(stud.retrollno()==n)
{
stud.showdata();
flag=true;
}
}
iFile.close();
if(flag==false)
cout<<"\n\nrecord does not exist";
cin.ignore();
cin.get();
}
// modify record for specified roll number
void change_student(int n)
{
bool found=false;
student stud;
fstream fl;
fl.open("student.dat",ios::binary|ios::in|ios::out);
if(!fl)
{
cout<<"File could not be opened. Press any Key to exit...";
cin.ignore();
cin.get();
return;
}
    while(!fl.eof() && found==false)
{
fl.read(reinterpret_cast<char *> (&stud), sizeof(student));
if(stud.retrollno()==n)
{
stud.showdata();
cout<<"\n\Enter new student details:"<<endl;
stud.getdata();
  int pos=(-1)*static_cast<int>(sizeof(stud));
  fl.seekp(pos,ios::cur);
  fl.write(reinterpret_cast<char *> (&stud), sizeof(student));
  cout<<"\n\n\t Record Updated";
  found=true;
}
}
File.close();
if(found==false)
cout<<"\n\n Record Not Found ";
cin.ignore();
cin.get();
}
//delete record with particular roll number
void delete_student(int n)
{
student stud;
ifstream iFile;
iFile.open("student.dat",ios::binary);
if(!iFile)
{
cout<<"File could not be opened... Press any Key to exit...";
cin.ignore();
cin.get();
return;
}
ofstream oFile;
oFile.open("Temp.dat",ios::out);
iFile.seekg(0,ios::beg);
while(iFile.read(reinterpret_cast<char *> (&stud), sizeof(student)))
{
if(stud.retrollno()!=n)
{
oFile.write(reinterpret_cast<char *> (&stud), sizeof(student));
}
}
oFile.close();
iFile.close();
remove("student.dat");
rename("Temp.dat","student.dat");
cout<<"\n\n\tRecord Deleted ..";
cin.ignore();
cin.get();
}

5. Casino Number Guessing Game

Casino Number Guessing GameThis is an exciting project, where we will learn about the library used for random numbers: cstdlib. The program asks for a betting amount and then asks the user to guess a number on rolling. If the random number generated matches the user input, he wins, else money is deducted. The user can keep playing until he loses all the amount he put in initially. Here is the source code:

#include <iostream>
#include <string> // Needed to use strings
#include <cstdlib> // Needed to use random numbers
#include <ctime>
using namespace std;
void rules();
int main()
{
   string playerName;
   int balance; // stores player's balance
   int bettingAmount;
   int guess;
   int dice; // stores the random number
   char choice;
   srand(time(0)); // "Seed" the random generator
   cout << "\n\t\t========WELCOME TO CASINO WORLD=======\n\n";
   cout << "\n\nWhat's your Name : ";
   getline(cin, playerName);
   cout << "\n\nEnter the starting balance to play game : $";
   cin >> balance;
   do
   {
       system("cls");
       rules();
       cout << "\n\nYour current balance is $ " << balance << "\n";
// Get player's betting balance
       do
       {
           cout << "Hey, " << playerName<<", enter amount to bet : $";
           cin >> bettingAmount;
           if(bettingAmount > balance)
               cout << "Betting balance can't be more than current balance!\n"
                      <<"\nRe-enter balance\n ";
       }while(bettingAmount > balance);
// Get player's numbers
       do
       {
           cout << "Guess any betting number between 1 & 10 :";
           cin >> guess;
           if(guess <= 0 || guess > 10)
               cout << "\nNumber should be between 1 to 10\n"
                   <<"Re-enter number:\n ";
       }while(guess <= 0 || guess > 10);
       dice = rand()%10 + 1;
       if(dice == guess)
       {
           cout << "\n\nYou are in luck!! You have won Rs." << bettingAmount * 10;
           balance = balance + bettingAmount * 10;
       }
       else
       {
           cout << "Oops, better luck next time !! You lost $ "<< bettingAmount <<"\n";
           balance = balance - bettingAmount;
       }
       cout << "\nThe winning number was : " << dice <<"\n";
       cout << "\n"<<playerName<<", You have balance of $ " << balance << "\n";
       if(balance == 0)
       {
           cout << "You have no money to play ";
           break;
       }
       cout << "\n\n-->Do you want to play again (y/n)? ";
       cin >> choice;
   }while(choice =='Y'|| choice=='y');
   cout << "\n\n\n";
   cout << "\n\nThanks for playing the game. Your balance is $ " << balance << "\n\n";
   return 0;
}
void rules()
{
   system("cls");
   cout << "\t\t======CASINO NUMBER GUESSING RULES!======\n";
   cout << "\t1. Choose a number between 1 to 10\n";
   cout << "\t2. Winner gets 10 times of the money bet\n";
   cout << "\t3. Wrong bet, and you lose the amount you bet\n\n";
}

6. Sudoku Game 

Sudoku Game We all know about the popular Sudoku game, wherein we need to arrange numbers from 1-9 such that they appear only once in a row and column of a 9x9 grid. The program uses the concept of backtracking. In this program, we have hard-coded the initial values, but you can also get the same input from the user (though that will be cumbersome for this program). The main thing to understand is the backtracking to find rows and columns that are not assigned any values (are zero). Have a look at the program, execute, and see the results:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
#define empty 0
#define N 9
bool isGridSafe(int grid[N][N], int row, int col, int num);
bool isEmptyLocation(int grid[N][N], int &row, int &col);
/* assign values to all the zero (not assigned) values for Sudoku solution
*/
bool SolveSudoku(int grid[N][N])
{
   int row, col;
   if (!isEmptyLocation(grid, row, col))
      return true;
   for (int num = 1; num <= 9; num++)
   {
       if (isGridSafe(grid, row, col, num))
       {
           grid[row][col] = num;
           if (SolveSudoku(grid))
               return true;
           grid[row][col] = empty;
       }
   }
   return false;
}
/* Check for entries that don't have a value. */
bool isEmptyLocation(int grid[N][N], int &row, int &col)
{
   for (row = 0; row < N; row++)
       for (col = 0; col < N; col++)
           if (grid[row][col] == empty)
               return true;
   return false;
}
/* Returns whether the assigned entry n in the particular row matches
  the given number num. */
bool UsedInRow(int grid[N][N], int prow, int number)
{
   for (int col = 0; col < N; col++)
       if (grid[prow][col] == number)
           return true;
   return false;
}
/* Returns true if the number num matches any number in the column */
bool UsedInCol(int grid[N][N], int pcol, int number)
{
   for (int row = 0; row < N; row++)
       if (grid[row][pcol] == number)
           return true;
else 
    return false;
//Check if the entry used already in the grid box
bool UsedInBox(int grid[N][N], int boxBeginRow, int boxBeginCol, int number)

{
   bool tf = false;
   for (int row = 0; row < 3; row++)
       for (int col = 0; col < 3; col++)
           if (grid[row+boxBeginRow][col+boxBeginCol] == number)
               tf = true;
   return tf;
}
/* Checks if num can be assigned to a given prow,pcol location. */
bool isGridSafe(int grid[N][N], int prow, int pcol, int number)
{
   return !UsedInRow(grid, prow, number) && !UsedInCol(grid, pcol, number) &&
          !UsedInBox(grid, prow - prow % 3 , pcol - pcol % 3, number);
}
/* print result  */
void printResult(int finalgrid[N][N])
{
   for (int row = 0; row < N; row++)
   {
       for (int col = 0; col < N; col++)
           cout<< finalgrid[row][col]<<"  ";
       cout<<endl;
   }
}
/* Main */
int main()
{
   int grid[N][N] = {{0, 0, 0, 0, 0, 0, 0, 0, 0},
                     {0, 0, 0, 0, 0, 3, 0, 8, 5},
                     {0, 0, 1, 0, 2, 0, 0, 0, 0},
                     {0, 0, 0, 5, 0, 7, 0, 0, 0},
                     {0, 0, 4, 0, 0, 0, 1, 0, 0},
                     {0, 9, 0, 0, 0, 0, 0, 0, 0},
                     {5, 0, 0, 0, 0, 0, 0, 7, 3},
                     {0, 0, 2, 0, 1, 0, 0, 0, 0},
                     {0, 0, 0, 0, 4, 0, 0, 0, 9}}; 
if (SolveSudoku(grid) == true)
         printResult(grid);
   else
       cout<<"No solution found"<<endl;
   return 0;
}

7. Credit Card Validator

Credit Card ValidatorThis is a simple project that uses Luhn’s algorithm to validate a user's credit card. The program works for all popular cards like Visa, Amex, MasterCard, etc. Luhn’s algorithm checks for basic validations; for example, a Visa card should start with 4 and then moves on to complex digit-wise calculations. It is a good program to learn because most e-commerce transactions require credit card validation.

You can download the source code from the GitHub website.

8. Helicopter Game

Helicopter GameFor all the 90s kids, this was one of the most favorite games and very easy to implement! In this project, we will use SDL graphics. The game is to move the helicopter forward without touching the obstacles. The player should control the game through keys, and holding the key moves the helicopter, and releasing it will bring the helicopter down.

Find the complete source code on GitHub.

9. Using Graphics to Draw and Move Shapes

Using Graphics to Draw and Move ShapesIn this graphics program, you will learn to make a car and then make it move using graphics. This is a simple program written using Turbo C++; however, the same program will work on other IDEs like Dev C++. Code:: Blocks and Visual Studios. You have to get the graphics.h file for the program to work.

Check the YouTube link to understand the program. 

10. Simple Animation to Race a Drunk Man from Start to Finish

Simple Animation to Race a Drunk Man from Start to FinishThis is an interactive console animation app, where your choice of character (any letter from a to z) will appear to move funnily from start to finish line. If he finishes the race within the specified counter (in our case, 1000000), then we print a particular message, else another message.

See the source code for the program and understand.

#include<iostream>
#include<cmath>
#include<cstdlib>
#include<ctime>
using namespace std;
int main (){
 srand(time(0));
 const int size=60;
 cout << "Enter a letter to begin \n ";
 char x; cin>> x;
 int position = size /2;
 while (true) {
   cout << "|START|" ;
   for (int i=0; i<size;i++) {
     if (i == position) 
       cout << x;
     else cout << " ";}
   cout << "|FINISH|" << endl;
   int move= rand()%3 - 1;
   position = position + move; 
   if (position <1) {cout << "You could not finish the race!" <<endl; break;}
   if (position >size-1) {cout << "Yay! You finished the race" << endl; break;}
   for(int sleep=0; sleep< 1000000 ; ++ sleep);
 }   
 return 0; 
}

Conclusion

We have discussed some important beginner and intermediate level projects in this article. If you have followed the code properly, you should get the exact outputs. Although Visual Studio offers many features, it takes time to download, so if you want to go ahead with any other IDE, that’s fine too. The projects will work on any IDE. Do let us know which of the projects you tried in the comments section!

People are also reading:

Ramya Shankar

Ramya Shankar

A cheerful, full of life and vibrant person, I hold a lot of dreams that I want to fulfill on my own. My passion for writing started with small diary entries and travel blogs, after which I have moved on to writing well-researched technical content. I find it fascinating to blend thoughts and research and shape them into something beautiful through my writing. View all posts by the Author

Leave a comment

Your email will not be published
Cancel