Đã đến lúc “thi thố” những gì bạn đã học rồi! 🚀
🎭 Hãy tưởng tượng:
- Bạn là mộtphóng viênđang phỏng vấn người nổi tiếng 📰
- Hoặc bạn lànhân viên khảo sátđang thu thập thông tin khách hàng 📊
- Hoặc bạn làbạn mới quenmuốn hiểu rõ hơn về một người bạn 👫
Nhiệm vụ của bạn: Tạo ra một chương trình thân thiện, chuyên nghiệp có thể:
- Hỏi thămthông tin từ người dùng (cin)
- Hiển thịthông tin đẹp mắt (cout + formatting)
- Sử dụngescape sequences để tạo giao diện đẹp
- Tương tácmột cách tự nhiên và thú vị
Hôm nay không chỉ là bài tập – đây là cơ hội để bạn thể hiện tài năng và sáng tạo với tất cả kiến thức đã tích lũy!
📚 KIẾN THỨC SẼ SỬ DỤNG TRONG BÀI
✅ Checklist kiến thức cần nhớ:
- cout:Xuất thông tin ra màn hình
- cin & getline():Nhập dữ liệu từ bàn phím
- setw, setprecision, fixed:Định dạng xuất đẹp
- Escape sequences:\n, \t, “, \, và các ký tự đặc biệt
- Biến và kiểu dữ liệu:string, int, double, char, bool
🎯 Mục tiêu bài tập:
- Tổng hợptất cả kỹ năng nhập/xuất đã học
- Thực hànhtạo giao diện console chuyên nghiệp
- Phát triểntư duy thiết kế chương trình
- Chuẩn bịcho các bài toán phức tạp hơn
🎪 BÀI TẬP CHÍNH: CHƯƠNG TRÌNH HỎI THĂM THÔNG TIN
🎯 Yêu cầu cơ bản:
/*
════════════════════════════════════════════════════════════
BÀI TẬP 10: CHƯƠNG TRÌNH HỎI THĂM THÔNG TIN
Yêu cầu: Tạo chương trình thu thập và hiển thị thông tin cá nhân
════════════════════════════════════════════════════════════
*/
// Chương trình phải có:
// 1. Giao diện chào mừng đẹp mắt (ASCII art)
// 2. Hỏi thông tin: họ tên, tuổi, quê quán, sở thích, email
// 3. Hiển thị lại thông tin dưới dạng "thẻ thông tin" đẹp
// 4. Sử dụng đầy đủ: cin, getline, setw, escape sequences
// 5. Có validation cơ bản (tuổi > 0, email có @)
🎮 Output mẫu:
╔══════════════════════════════════════════════════════╗
║ 🎉 CHÀO MỪNG BẠN ĐẾN VỚI 🎉 ║
║ PHẦN MỀM KHẢO SÁT THÔNG TIN ║
║ Version 1.0 ║
╚══════════════════════════════════════════════════════╝
🌟 Chúng tôi muốn tìm hiểu về bạn!
📝 Vui lòng cung cấp một số thông tin cơ bản...
👤 Họ và tên đầy đủ của bạn: Nguyen Van An
🎂 Tuổi của bạn: 16
👫 Giới tính (M/F): M
📏 Chiều cao (m): 1.65
🏠 Quê quán: Ha Noi, Viet Nam
🎮 Sở thích chính: Choi game va doc sach
🌈 Màu sắc yêu thích: Xanh da troi
📧 Email (có thể bỏ trống): an.nguyen@email.com
════════════════════════════════════════════════════════
🎉 CẢM ƠN BẠN! 🎉
Đây là thông tin bạn đã cung cấp:
════════════════════════════════════════════════════════
╔══════════════════════════════════════════════════════╗
║ 🆔 THẺ THÔNG TIN ║
╠══════════════════════════════════════════════════════╣
║ ║
║ 👤 Họ tên: Nguyen Van An ║
║ 🎂 Tuổi: 16 tuổi ║
║ 👫 Giới tính: Nam ║
║ 📏 Chiều cao: 1.65 m ║
║ 🏠 Quê quán: Ha Noi, Viet Nam ║
║ 🎮 Sở thích: Choi game va doc sach ║
║ 🌈 Màu yêu thích: Xanh da troi ║
║ 📧 Email: an.nguyen@email.com ║
║ ║
╚══════════════════════════════════════════════════════╝
📊 THỐNG KÊ VÀ PHÂN TÍCH:
═════════════════════════════════════════════════════
🎯 Nhóm tuổi:Thanh thiếu niên
📅 Năm sinh (ước tính):2008
📏 Phân loại chiều cao:Trung bình
📝 Độ dài tên:13 ký tự
📧 Có email:Có ✅
🏠 Độ dài tên quê quán:17 ký tự
🎉 CẢM ƠN BẠN ĐÃ THAM GIA! 🎉
╭─────────────────────────────────────╮
│ Hẹn gặp lại lần sau! 👋 │
│ Chúc bạn một ngày tuyệt vời! │
╰─────────────────────────────────────╯
🎯 BÀI TẬP THỰC HÀNH – 3 MỨC ĐỘ
🟢 CẤP ĐỘ DỄ: Làm quen với bài tập tổng hợp
Bài 1: Khảo sát sở thích âm nhạc
/*
YÊU CẦU:
- Hỏi: tên, tuổi, nghệ sĩ yêu thích, thể loại nhạc
- Hiển thị thông tin dạng "music profile" với border đẹp
- Sử dụng cin và getline phù hợp
- Có thống kê: độ dài tên nghệ sĩ, nhóm tuổi
*/
// Template cần có:
// 1. Header welcome đẹp mắt
// 2. Input validation cơ bản (tuổi > 0)
// 3. Output formatting với setw
// 4. ASCII art hoặc emoji
Bài 2: Đăng ký thành viên gym
/*
YÊU CẦU:
- Hỏi: họ tên, tuổi, cân nặng, chiều cao, mục tiêu tập luyện
- Tính BMI = cân nặng / (chiều cao)²
- Đưa ra lời khuyên dựa trên BMI
- Hiển thị "membership card" đẹp mắt
*/
// BMI categories:
// < 18.5: Thiếu cân
// 18.5-24.9: Bình thường
// 25-29.9: Thừa cân
// >= 30: Béo phì
Bài 3: Phiếu đánh giá món ăn
/*
YÊU CẦU:
- Hỏi: tên, món ăn vừa thử, điểm từ 1-10, nhận xét
- Phân loại: 1-4 (Không ngon), 5-6 (Trung bình), 7-8 (Ngon), 9-10 (Tuyệt vời)
- Hiển thị "food review card" với rating stars
- Tính % điểm so với điểm tối đa
*/
🟡 CẤP ĐỘ TRUNG BÌNH: Nâng cao tính năng
Bài 4: Hệ thống đăng ký khóa học
/*
YÊU CẦU:
- Thông tin: họ tên, tuổi, trình độ (1-5), khóa học quan tâm
- Validation: tuổi 16-65, trình độ 1-5, tên khóa học không rỗng
- Tính học phí dựa trên tuổi và trình độ:
+ Dưới 18: giảm 20%
+ Trình độ 1-2: giá cơ bản 1,000,000
+ Trình độ 3-4: tăng 50%
+ Trình độ 5: tăng 100%
- Xuất "enrollment certificate" chuyên nghiệp
*/
Bài 5: Ứng dụng hẹn hò (Dating App Profile)
/*
YÊU CẦU:
- Thu thập: tên, tuổi, nghề nghiệp, sở thích (3 cái), mô tả bản thân
- Validation phức tạp:
+ Tuổi 18-50
+ Mô tả ít nhất 20 ký tự
+ Mỗi sở thích không rỗng
- Tính "compatibility score" giả lập dựa trên độ dài thông tin
- Hiển thị "dating profile card" với progress bars
- Đưa ra gợi ý cải thiện profile
*/
Bài 6: Phần mềm quản lý nhân viên mini
/*
YÊU CẦU:
- Thu thập: ID nhân viên, họ tên, phòng ban, kinh nghiệm, lương cơ bản
- Tính lương thực tế:
+ Mỗi năm kinh nghiệm: +5% lương cơ bản
+ Phòng ban IT: bonus +20%
+ Phòng bán hàng: thưởng +15%
+ Phòng ban khác: không bonus
- Xuất “thẻ nhân viên” và “phiếu lương”
- Có thống kê chi tiết
*/
🔴 CẤP ĐỘ KHÓ: Chuyên nghiệp và sáng tạo
Bài 7: Hệ thống khảo sát khách hàng đa tầng
/*
YÊU CẦU:
- Nhiều mục: Thông tin cá nhân, Sở thích, Phản hồi, Xếp hạng
- Câu hỏi động dựa trên câu trả lời trước:
+ Nếu tuổi < 25: hỏi thêm về mạng xã hội
+ Nếu có email: hỏi về đăng ký nhận bản tin
+ Nếu rating > 8: hỏi về giới thiệu
- Xác thực nâng cao cho mọi đầu vào
- Xuất nhiều định dạng: Thẻ tóm tắt, Báo cáo chi tiết, Thống kê
- Lưu mô phỏng dữ liệu (giả lập file lưu)
*/
Bài 8: Medical History Tracker
/*
YÊU CẦU:
- Thu thập tiền sử bệnh: thông tin cá nhân, dấu hiệu sinh tồn, tình trạng bệnh lý
- Xác thực phức tạp:
+ Chiều cao: 0,5-3,0m
+ Cân nặng: 10-300kg
+ Huyết áp: tâm thu 80-200, tâm trương 40-120
+ Tình trạng bệnh lý: cho phép nhập nhiều thông tin
- Tính toán các chỉ số sức khỏe:
+ BMI + phân loại
+ Phân loại huyết áp
+ Đánh giá nguy cơ sức khỏe
- Tạo "báo cáo y tế" với nhiều mục
- Bao gồm thông tin liên hệ khẩn cấp
*/
Bài 9: Interactive Resume Builder
/*
YÊU CẦU:
- Hoàn thiện các mục sơ yếu lý lịch: Cá nhân, Học vấn, Kinh nghiệm, Kỹ năng
- Định dạng thông minh:
+ Tự động viết hoa tên
+ Định dạng số điện thoại
+ Xác thực tên miền email
+ Hệ thống đánh giá kỹ năng (1-10)
- Tạo nhiều định dạng sơ yếu lý lịch:
+ Định dạng chuyên nghiệp
+ Định dạng sáng tạo với nghệ thuật ASCII
+ Thống kê tóm tắt
- Bao gồm "phân tích điểm mạnh sơ yếu lý lịch"
- Xuất định dạng sẵn sàng để in
*/
🏆 THỬ THÁCH BONUS – DÀNH CHO SIÊU SAO
Challenge 1: “AI-Powered Personality Test”
/*
NHIỆM VỤ:
- Tạo bài trắc nghiệm tính cách với 20+ câu hỏi
- Câu hỏi trắc nghiệm (A/B/C/D)
- Hệ thống tính điểm phức tạp với các trọng số khác nhau
- Các loại tính cách dựa trên kết quả (lấy cảm hứng từ MBTI)
- Báo cáo tính cách chi tiết kèm khuyến nghị
- Thống kê về phân bố câu trả lời
- Nghệ thuật ASCII đẹp cho từng kiểu tính cách
*/
Challenge 2: “Smart Budget Planner”
/*
NHIỆM VỤ:
- Thu thập thông tin tài chính: thu nhập, chi phí theo danh mục
- Nhiều danh mục chi phí với xác thực
- Tính toán tỷ lệ tiết kiệm, tỷ lệ chi phí
- Đề xuất ngân sách dựa trên quy tắc 50/30/20
- Tạo báo cáo tài chính chi tiết
- Bao gồm biểu đồ/đồ thị bằng ASCII
- Theo dõi mục tiêu tiết kiệm theo mốc thời gian
- Xuất kế hoạch ngân sách theo định dạng
*/
Challenge 3: “University Application Assistant”
/*
NHIỆM VỤ:
- Hoàn thành đơn đăng ký với nhiều mục
- Hồ sơ học tập kèm theo tính điểm trung bình (thang điểm 4.0)
- Điểm hoạt động ngoại khóa
- Viết luận với số lượng từ
- Kết quả xét tuyển dựa trên hồ sơ
- Lịch trình và hạn chót nộp hồ sơ
- Tạo bộ hồ sơ
- Bao gồm công cụ kiểm tra điều kiện nhận học bổng
*/
🔧 HƯỚNG DẪN GIẢI BÀI TẬP CHÍNH
📝 Phân tích từng bước:
Bước 1: Thiết kế giao diện
// Luôn bắt đầu với welcome screen ấn tượng
cout << "╔══════════════════════════════════════════════════════╗\n";
cout << "║ 🎉 TÊN CHƯƠNG TRÌNH 🎉 ║\n";
cout << "╚══════════════════════════════════════════════════════╝\n";
Bước 2: Thu thập dữ liệu có validation
// Template validation cho số
int age;
cout << "Nhập tuổi: ";
cin >> age;
while (age <= 0 || age > 120) {
cout << "Lỗi! Nhập lại tuổi (1-120): ";
cin >> age;
}
// Template cho string
string email;
cout << "Nhập email: ";
getline(cin, email);
bool validEmail = email.find('@') != string::npos && !email.empty();
Bước 3: Xử lý và phân tích dữ liệu
// Tạo derived data từ input
string ageGroup = (age < 18) ? "Trẻ em" : "Người lớn";
int birthYear = 2024 - age;
double bmi = weight / (height * height);
Bước 4: Hiển thị kết quả đẹp mắt
// Sử dụng setw và left/right alignment
cout << "║ 👤 Họ tên: " << left << setw(32) << fullName << "║\n";
cout << "║ 🎂 Tuổi: " << left << setw(32) << (to_string(age) + " tuổi") << "║\n";
💡 TIPS & TRICKS CHUYÊN NGHIỆP
🏆 1. Input Validation Templates:
// Template cho số trong range
template<typename T>
T getNumberInRange(string prompt, T min, T max) {
T value;
cout << prompt;
cin >> value;
while (value < min || value > max) {
cout << "Lỗi! Nhập từ " << min << " đến " << max << ": ";
cin >> value;
}
return value;
}
// Sử dụng:
int age = getNumberInRange<int>("Nhập tuổi: ", 1, 120);
🎯 2. String Utilities:
// Capitalize first letter của mỗi từ
string capitalize(string text) {
bool capitalizeNext = true;
for (char& c : text) {
if (capitalizeNext && isalpha(c)) {
c = toupper(c);
capitalizeNext = false;
} else if (c == ' ') {
capitalizeNext = true;
}
}
return text;
}
⚡ 3. Progress Bar Generator:
void showProgressBar(double percentage, int width = 20) {
int progress = (int)(percentage * width / 100);
cout << "[";
for (int i = 0; i < width; i++) {
if (i < progress) cout << "█";
else cout << "░";
}
cout << "] " << fixed << setprecision(1) << percentage << "%";
}
🎨 4. Border Generator:
void printBorder(string title, int width = 54) {
cout << "╔" << string(width, '═') << "╗\n";
int padding = (width - title.length()) / 2;
cout << "║" << string(padding, ' ') << title
<< string(width - padding - title.length(), ' ') << "║\n";
cout << "╚" << string(width, '═') << "╝\n";
}
🐛 DEBUG & TROUBLESHOOTING
❌ Lỗi thường gặp:
1. getline() bị skip:
// SAI:
cin >> age;
getline(cin, name); // Bị skip!
// ĐÚNG:
cin >> age;
cin.ignore(); // Clear buffer
getline(cin, name);
2. Validation không hoàn chỉnh:
// KHÔNG TỐT:
if (age > 0) { /* OK */ } // Không check upper bound
// TỐT:
if (age > 0 && age <= 120) { /* OK */ }
3. Formatting không consistent:
// KHÔNG TỐT:
cout << "Name: " << name << endl;
cout << "Age:" << age << endl; // Thiếu space
// TỐT:
cout << "Name: " << name << endl;
cout << "Age: " << age << endl; // Consistent spacing
📋 CHECKLIST HOÀN THÀNH BÀI TẬP
✅ Bắt buộc phải có:
- Giao diện welcome đẹp mắt với ASCII border
- Ít nhất 5 thông tin input khác nhau
- Sử dụng cả cin >> và getline() đúng cách
- Input validation cho ít nhất 2 trường
- Output formatting với setw, left/right alignment
- Escape sequences (\n, \t, “) được sử dụng
- Tính toán hoặc phân tích dữ liệu từ input
- Giao diện kết thúc thân thiện
✅ Điểm cộng nếu có:
- ASCII art hoặc emoji sáng tạo
- Multiple validation rules phức tạp
- Derived data calculations (BMI, age group, etc.)
- Progress bars hoặc visual indicators
- Error handling graceful
- Code có comment chi tiết
- Responsive design (adapt theo content length)
🎊 TỔNG KẾT BÀI TẬP
🏆 Chúc mừng! Bạn đã hoàn thành bài tập tổng hợp đầu tiên!
📚 Kỹ năng đã thực hành:
- ✨Integration:Kết hợp nhiều kiến thức trong một chương trình
- 🎯User Experience:Thiết kế giao diện thân thiện với người dùng
- 🔧Problem Solving:Xử lý input validation và error handling
- 🎨Design Thinking:Tạo output đẹp mắt và professional
- 💪Code Organization:Cấu trúc code rõ ràng, dễ đọc
🌟 Tại sao bài tập này quan trọng:
- Real-world Application:Mô phỏng các ứng dụng thực tế
- Integration Skills:Học cách kết hợp các kiến thức riêng lẻ
- User-Centric Thinking:Bắt đầu nghĩ từ góc độ người dùng
- Professional Habits:Phát triển thói quen code sạch đẹp
🚀 Bước tiếp theo:
Bài 11: [BÀI TẬP] “Tạo bảng thông tin đẹp mắt”– Tiếp tục thực hành với focus vào formatting!
🎮 MINI CHALLENGE: “60-SECOND SPEEDRUN”
🎯 Thử thách tốc độ:
Trong 60 giây, tạo chương trình hỏi và hiển thị:
- Tên (getline)
- Tuổi (cin với validation > 0)
- Hiển thị với border đơn giản
- Tính năm sinh
⏰ Ready? Set? Code!
💬 SHARING & SUPPORT
🎨 Khoe tác phẩm:
- 📸Screenshotoutput đẹp nhất của bạn!
- 💡Chia sẻý tưởng validation sáng tạo
- 🏆Challengebạn bè làm bài tập cùng
Q: Làm sao để validation không bị infinite loop?
A: Luôn dùng while loop với điều kiện clear và có cin.clear() + cin.ignore() nếu cần.
❓ Hỏi đáp:
Q: Khi nào dùng cin >>, khi nào dùng getline()?
A: cin >> cho single word/number, getline() cho chuỗi có spaces.
Q: ASCII art bị vỡ trên console khác nhau?
A: Test trên nhiều console khác nhau, dùng basic ASCII chars để tương thích tốt nhất.
🆘 Cần trợ giúp?
- 💬Commentcode của bạn để được review
- 📧Facebook:Thanh TechshareVN
- 🔧Debug:Paste lỗi vào comment, cộng đồng sẽ giúp
🎉 LỜI KHÍCH LỆ CUỐI BÀI
Tuyệt vời! Bạn vừa hoàn thành một milestone quan trọng trong hành trình học C++!
💪 Bài tập này không chỉ là việc gõ code – bạn đã học cách tư duy như một developer thực thụ: từ việc hiểu yêu cầu, thiết kế giao diện, xử lý dữ liệu, đến tạo ra trải nghiệm người dùng tốt.
🌟 Điều đặc biệt: Bạn đã biết cách kết hợp nhiều kiến thức để tạo ra một sản phẩm hoàn chỉnh. Đây chính là kỹ năng cốt lõi của lập trình viên – không chỉ biết từng phần riêng lẻ mà còn biết cách orchestrate chúng thành một tổng thể hài hòa.
🚀 Tiếp tục thôi! Mỗi bài tập như này sẽ đưa bạn gần hơn đến việc trở thành một lập trình viên thực thụ. Keep coding, keep creating!
🏷️ Tags:
#C++
#bài-tập-tổng-hợp
#cin-cout
#input-validation
#formatting
#thực-hành
#học-sinh
#interactive-program
#console-application
#beginner-project
#Việt-Nam
#programming-tutorial