#include <iostream>
#include <vector>
#include <string>
#include <sstream> // 添加这一行
#include <algorithm>
// 类表示
class ClassEntry {
public:
std::string name;
std::vector<std::string> baseClasses;
std::vector<std::string> memberFunctions;
std::vector<std::string> dataMembers;
ClassEntry(const std::string& name) : name(name) {}
};
// 类库表示
class ClassLibrary {
public:
std::vector<ClassEntry> classes;
// 添加类
void addClass(const ClassEntry& cls) {
classes.push_back(cls);
}
// 查找类
ClassEntry* findClass(const std::string& name) {
for (auto& cls : classes) {
if (cls.name == name) {
return &cls;
}
}
return nullptr;
}
// 显示所有类
void displayAllClasses() {
for (const auto& cls : classes) {
std::cout << "Class: " << cls.name << std::endl;
std::cout << "Base Classes: ";
for (const auto& base : cls.baseClasses) {
std::cout << base << " ";
}
std::cout << std::endl;
std::cout << "Member Functions: ";
for (const auto& func : cls.memberFunctions) {
std::cout << func << " ";
}
std::cout << std::endl;
std::cout << "Data Members: ";
for (const auto& data : cls.dataMembers) {
std::cout << data << " ";
}
std::cout << std::endl << std::endl;
}
}
};
// 显示菜单
void displayMenu() {
std::cout << "===== C++ Class Library Management System =====" << std::endl;
std::cout << "1. Add a new class" << std::endl;
std::cout << "2. Display all classes" << std::endl;
std::cout << "3. Exit" << std::endl;
std::cout << "Enter your choice: ";
}
// 主函数
int main() {
ClassLibrary library;
int choice;
bool running = true;
while (running) {
displayMenu();
std::cin >> choice;
std::cin.ignore(); // 忽略换行符
switch (choice) {
case 1: {
std::string className;
std::cout << "Enter class name: ";
std::getline(std::cin, className);
ClassEntry newClass(className);
std::string baseClass;
std::cout << "Enter base classes (comma separated, leave empty if none): ";
std::getline(std::cin, baseClass);
if (!baseClass.empty()) {
std::replace(baseClass.begin(), baseClass.end(), ',', ' ');
std::istringstream iss(baseClass); // 使用 std::istringstream
std::string base;
while (iss >> base) {
newClass.baseClasses.push_back(base);
}
}
std::string memberFunc;
std::cout << "Enter member functions (comma separated, leave empty if none): ";
std::getline(std::cin, memberFunc);
if (!memberFunc.empty()) {
std::replace(memberFunc.begin(), memberFunc.end(), ',', ' ');
std::istringstream iss(memberFunc); // 使用 std::istringstream
std::string func;
while (iss >> func) {
newClass.memberFunctions.push_back(func);
}
}
std::string dataMember;
std::cout << "Enter data members (comma separated, leave empty if none): ";
std::getline(std::cin, dataMember);
if (!dataMember.empty()) {
std::replace(dataMember.begin(), dataMember.end(), ',', ' ');
std::istringstream iss(dataMember); // 使用 std::istringstream
std::string data;
while (iss >> data) {
newClass.dataMembers.push_back(data);
}
}
library.addClass(newClass);
std::cout << "Class added successfully!" << std::endl;
break;
}
case 2:
if (library.classes.empty()) {
std::cout << "No classes in the library." << std::endl;
} else {
library.displayAllClasses();
}
break;
case 3:
running = false;
std::cout << "Exiting..." << std::endl;
break;
default:
std::cout << "Invalid choice. Please try again." << std::endl;
}
std::cout << std::endl;
}
return 0;
}