C++ Mini Projects
Mini project क्यों बनाएँ?
Loops, classes और files के बारे में पढ़ना एक बात है; उन्हें जोड़कर चलता हुआ program बनाना — यहीं C++ असल में समझ आती है। Mini project से आपके पास दिखाने को कुछ होता है — Class 12 practical exam, BCA/B.Tech lab submission या internship interview के लिए। इस page पर बढ़ती कठिनाई वाले आठ projects, हर एक में इस्तेमाल होने वाले concepts, और फिर एक पूरा project step by step है।
8 project ideas
| # | Project | मुख्य features | Concepts | Level |
|---|---|---|---|---|
| 1 | Student report card | Students जोड़ना, 5 marks, total, percentage, grade, merit list | class, vector, sort, functions | Beginner |
| 2 | Quiz game | File से questions, score, timer, high score | file handling, vector, random | Beginner |
| 3 | Library management | Books जोड़ना/खोजना/issue/return, देर से लौटाने पर fine | classes, file handling, search | Intermediate |
| 4 | Bank account system | Account खोलना, deposit, withdraw, statement, PIN check | encapsulation, validation, files | Intermediate |
| 5 | Tic-tac-toe | 2-player board, जीत/draw पहचान | 2D arrays, functions, loops | Beginner |
| 6 | Inventory / shop billing | Products, stock, GST के साथ bill, low-stock alert | map, iomanip, files | Intermediate |
| 7 | Hotel room booking | Room types, booking dates, availability, invoice | inheritance, vector, dates | Advanced |
| 8 | Contact book | Contacts जोड़ना/बदलना/हटाना/खोजना, नाम से sort | map या vector, strings, files | Beginner |
किसी भी project की planning
- Features की सूची लिखें — user क्या कर सकता है (जोड़ना, देखना, खोजना, हटाना, save)।
- Data पहचानें — एक record में क्या होगा (roll, name, marks) → वही class बनेगी।
- Menu design करें — user की choice पर
switchवालाdo … whileloop। - एक समय में एक feature बनाएँ और अगला शुरू करने से पहले test करें।
- File saving आख़िर में जोड़ें, जब memory में सब चल जाए।
- गलत input संभालें — numbers की जगह अक्षर, खाली list, दोहराए roll numbers।
पूरा project: Student Report Card
नीचे का project पूरा है और किसी भी C++17 compiler पर compile होता है। यह students को vector में रखता है, grades निकालता है, merit list print करता है और data students.txt में save करता है ताकि records अगली बार भी मिलें।
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
#include <string>
#include <algorithm>
#include <limits>
const int SUBJECTS = 5;
const std::string DATA_FILE = "students.txt";
class Student {
public:
int roll = 0;
std::string name;
int marks[SUBJECTS] = {0};
int total() const {
int t = 0;
for (int m : marks) t += m;
return t;
}
double percentage() const { return total() * 100.0 / (SUBJECTS * 100); }
char grade() const {
double p = percentage();
if (p >= 90) return 'A';
if (p >= 75) return 'B';
if (p >= 60) return 'C';
if (p >= 33) return 'D';
return 'F';
}
};
int readInt(const std::string& prompt, int lo, int hi) {
int x;
while (true) {
std::cout << prompt;
if (std::cin >> x && x >= lo && x <= hi) return x;
std::cout << " Please enter a number from " << lo << " to " << hi << ".\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
void save(const std::vector<Student>& list) {
std::ofstream out(DATA_FILE);
for (const auto& s : list) {
out << s.roll << ' ' << s.name;
for (int m : s.marks) out << ' ' << m;
out << '\n';
}
}
std::vector<Student> load() {
std::vector<Student> list;
std::ifstream in(DATA_FILE);
Student s;
while (in >> s.roll >> s.name) {
for (int& m : s.marks) in >> m;
list.push_back(s);
}
return list;
}
void addStudent(std::vector<Student>& list) {
Student s;
s.roll = readInt("Roll number: ", 1, 9999);
for (const auto& x : list)
if (x.roll == s.roll) { std::cout << " Roll number already exists.\n"; return; }
std::cout << "Name (one word): ";
std::cin >> s.name;
for (int i = 0; i < SUBJECTS; i++)
s.marks[i] = readInt(" Marks in subject " + std::to_string(i + 1) + ": ", 0, 100);
list.push_back(s);
save(list);
std::cout << " Saved.\n";
}
void printTable(const std::vector<Student>& list) {
if (list.empty()) { std::cout << " No records yet.\n"; return; }
std::cout << std::left << std::setw(6) << "Roll" << std::setw(12) << "Name"
<< std::right << std::setw(6) << "Total" << std::setw(8) << "%"
<< std::setw(7) << "Grade" << "\n";
for (const auto& s : list) {
std::cout << std::left << std::setw(6) << s.roll << std::setw(12) << s.name
<< std::right << std::setw(6) << s.total()
<< std::setw(8) << std::fixed << std::setprecision(1) << s.percentage()
<< std::setw(7) << s.grade() << "\n";
}
}
void meritList(std::vector<Student> list) { // copy: मूल क्रम बना रहे
std::sort(list.begin(), list.end(),
[](const Student& a, const Student& b) { return a.total() > b.total(); });
printTable(list);
}
void search(const std::vector<Student>& list) {
int r = readInt("Roll to search: ", 1, 9999);
auto it = std::find_if(list.begin(), list.end(),
[r](const Student& s) { return s.roll == r; });
if (it == list.end()) { std::cout << " Not found.\n"; return; }
printTable({*it});
}
int main() {
std::vector<Student> students = load();
int choice;
do {
std::cout << "\n=== Report Card System (" << students.size() << " students) ===\n"
<< "1. Add student\n2. Show all\n3. Merit list\n4. Search by roll\n0. Exit\n";
choice = readInt("Choice: ", 0, 4);
switch (choice) {
case 1: addStudent(students); break;
case 2: printTable(students); break;
case 3: meritList(students); break;
case 4: search(students); break;
}
} while (choice != 0);
std::cout << "Goodbye!\n";
return 0;
}Project कैसे काम करता है
- **
Studentclass** हर record का data रखती है औरtotal(),percentage(),grade()निकालती है — गणना एक ही जगह। - **
readInt()** हर number जाँचता है और user के अक्षर लिखने पर भी संभल जाता है (cin.clear()+cin.ignore())। - **
vector<Student>** students जुड़ने के साथ बढ़ता है; array का fixed size नहीं। - **
save()/load()**ofstream/ifstreamसे data कोstudents.txtमें runs के बीच रखते हैं। - Merit list vector की copy बनाकर lambda से sort करती है, मूल क्रम नहीं बदलता।
- Menu
switchवालाdo … whileloop है — console projects का standard ढाँचा।
इसे आगे बढ़ाने के ideas
- Subject के नाम रखें और एक student का पूरा report card print करें।
std::getlineसे space वाले नाम allow करें।- Edit और delete options जोड़ें।
- हर subject का class average, सबसे ज़्यादा और सबसे कम दिखाएँ।
- Code को
student.h,student.cppऔरmain.cppमें बाँटें (देखें header files)।
Project report में क्या रखें
- Certificate और acknowledgement (school के format में)
- उद्देश्य और परिचय
- Hardware और software requirements (जैसे Windows 10, Code::Blocks 20.03 with GCC)
- Classes और functions का विवरण
- Menu flow / flowchart
- पूरा source code
- हर menu option के output screenshots
- सीमाएँ और आगे का scope
- Bibliography (textbook, इस्तेमाल किए CodingEasily lessons)
Student projects की आम गलतियाँ
- Turbo C++ के
conio.h,clrscr(),gotoxy()याgraphics.hइस्तेमाल करना — modern compilers पर compile नहीं होते। - Input validation न होना — अक्षर लिखते ही program अनंत loop में।
- Class की जगह हर जगह global variables।
- सिर्फ exit पर data save करना — crash होने पर सब खो जाता है; हर बदलाव के बाद save करें।
- बिना समझे project copy करना — viva में पकड़ में आ जाता है।
Project 4 (bank account) चुनें। Private balance, गलत amount मना करने वाले deposit() और withdraw(), menu और file saving के साथ Account class बनाएँ। फिर inheritance से SavingsAccount class जोड़ें जो हर महीने ब्याज जोड़े।
सारांश
- Mini projects classes, vectors, functions, menus और files को एक program में जोड़ते हैं।
- Features → data → menu की planning करें, फिर एक-एक feature बनाकर test करें।
- हर input जाँचें और हर बदलाव के बाद file में save करें।
- ऊपर का report card project एक पूरा, modern template है जिसे आप बढ़ा सकते हैं।
संबंधित: file handling, classes और objects, vector, C++ practice programs, C mini projects।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Class 12 student के लिए अच्छा C++ mini project कौन-सा है?
C++ mini project में कौन-से concepts होने चाहिए?
switch वाला menu, input validation, records रखने के लिए vector या arrays, और fstream से file handling होनी चाहिए ताकि data अगली बार भी मिले। Inheritance या operator overloading bonus हैं।C++ project में data हमेशा के लिए कैसे save करें?
<fstream> की file handling लें: program बंद होते समय या हर बदलाव के बाद ofstream से records लिखें, और शुरू होते समय ifstream से पढ़ें। हर line में एक record वाला साधारण text format debug करने में सबसे आसान है।