C++/QT
思维导图
QT设计界面:
C++题目1:自定义字符串类实现:用一个C++程序实现一个简单的自定义字符串类MyString,要求:1支持构造函数,拷贝构造函数,赋值运算符。2、实现基本的字符串操作:长度,拼接,比较,并输出结果。3、实现对MyString对象的输入、输出。4、正确处理内存管理
#include <iostream>
#include <cstring>
#include <stdexcept>
using namespace std;class MyString {
private:char* data;size_t length;public:MyString() : data(new char[1]), length(0){data[0] = '\0';}MyString(const char* str){if (str){length = strlen(str);data = new char[length + 1];strcpy(data, str);}else{length = 0;data = new char[1];data[0] = '\0';}}MyString(const MyString& other) : length(other.length){data = new char[length + 1];strcpy(data, other.data);}~MyString(){delete[] data;}MyString& operator=(const MyString& other){if (this != &other){delete[] data;length = other.length;data = new char[length + 1];strcpy(data, other.data);}return *this;}friend ostream& operator<<(ostream& os, const MyString& str){os << str.data;return os;}friend istream& operator>>(istream& is, MyString& str){char buffer[1024];is >> buffer;str = MyString(buffer);return is;}size_t size() const{return length;}// 字符串拼接MyString operator+(const MyString& other) const{MyString result;result.length = length + other.length;delete[] result.data; // 释放默认构造的空字符串内存result.data = new char[result.length + 1];strcpy(result.data, data);strcat(result.data, other.data);return result;}// 字符串比较bool operator==(const MyString& other) const{return strcmp(data, other.data) == 0;}bool operator!=(const MyString& other) const{return !(*this == other);}bool operator<(const MyString& other) const{return strcmp(data, other.data) < 0;}};int main()
{MyString a, b;cout << "Enter string a: ";cin >> a;cout << "Enter string b: ";cin >> b;cout << "a = " << a << " (Length: " << a.size() << ")\n";cout << "b = " << b << " (Length: " << b.size() << ")\n";MyString c = a + b;cout << "a + b = " << c << " (Length: " << c.size() << ")\n";cout << "a == b? " << (a == b ? "Yes" : "No") << "\n";cout << "a < b? " << (a < b ? "Yes" : "No") << "\n";return 0;
}
运行结果
题目2:实现一个简单的图书管理系统,要求:1、使用类和对象来管理图书。2、每本图书有书名、作者、和库存数量。3、实现添加图书、借书和还书和查询功能。4、使用STL容器存储图书信息。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;// 图书类
class Book
{
private:string title; // 书名string author; // 作者int stock; // 库存数量public:// 构造函数Book(string t, string a, int s) : title(t), author(a), stock(s) {}// 获取书名string getTitle() const { return title; }// 获取作者string getAuthor() const { return author; }// 获取库存int getStock() const { return stock; }// 借书void borrowBook(){if (stock > 0){stock--;}}// 还书void returnBook(){stock++;}// 显示图书信息void display() const{cout << "书名: " << title<< " | 作者: " << author<< " | 库存: " << stock << endl;}
};// 图书馆管理类
class Library
{
private:vector<Book> books;public:void addBook(string title, string author, int stock){books.emplace_back(title, author, stock);cout << "《" << title << "》添加成功!" << endl;}void borrowBook(string title){auto it = find_if(books.begin(), books.end(),[&](const Book& b) { return b.getTitle() == title; });if (it != books.end()){if (it->getStock() > 0){it->borrowBook();cout << "《" << title << "》借阅成功!" << endl;}else{cout << "库存不足,借书失败!" << endl;}}else{cout << "未找到图书《" << title << "》!" << endl;}}void returnBook(string title){auto it = find_if(books.begin(), books.end(),[&](const Book& b) { return b.getTitle() == title; });if (it != books.end()){it->returnBook();cout << "《" << title << "》归还成功!" << endl;}else{cout << "未找到图书《" << title << "》!" << endl;}}void searchBook(string title){auto it = find_if(books.begin(), books.end(),[&](const Book& b) { return b.getTitle() == title; });if (it != books.end()){cout << "\n查询结果:" << endl;it->display();} else{cout << "未找到图书《" << title << "》!" << endl;}}void displayAll(){if (books.empty()){cout << "图书馆暂无藏书!" << endl;return;}cout << "\n====== 馆藏图书清单 ======" << endl;for (const auto& book : books){book.display();}cout << "==========================" << endl;}
};int main()
{Library lib;int choice;string title, author;int stock;while (true){cout << "\n===== 图书管理系统 =====" << endl;cout << "1. 添加图书" << endl;cout << "2. 借阅图书" << endl;cout << "3. 归还图书" << endl;cout << "4. 查询图书" << endl;cout << "5. 显示所有图书" << endl;cout << "0. 退出系统" << endl;cout << "请选择操作:";cin >> choice;cin.ignore();switch (choice){case 1: // 添加图书cout << "输入书名:";getline(cin, title);cout << "输入作者:";getline(cin, author);cout << "输入库存数量:";cin >> stock;lib.addBook(title, author, stock);break;case 2: // 借书cout << "输入要借的书名:";getline(cin, title);lib.borrowBook(title);break;case 3: // 还书cout << "输入要还的书名:";getline(cin, title);lib.returnBook(title);break;case 4: // 查询cout << "输入要查询的书名:";getline(cin, title);lib.searchBook(title);break;case 5: // 显示所有lib.displayAll();break;case 0: // 退出cout << "系统已退出,感谢使用!" << endl;return 0;default:cout << "无效选择,请重新输入!" << endl;}}return 0;
}