用c++制作一个影视库管理系统
时间: 2023-08-12 13:06:31 浏览: 55
以下是一个简单的影视库管理系统的示例程序,它可以添加、删除和查找影视作品:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
class Media {
public:
Media(const std::string& title, const std::string& director, int year)
: title_(title), director_(director), year_(year) {}
const std::string& get_title() const {
return title_;
}
const std::string& get_director() const {
return director_;
}
int get_year() const {
return year_;
}
private:
std::string title_;
std::string director_;
int year_;
};
class Movie : public Media {
public:
Movie(const std::string& title, const std::string& director, int year, const std::string& actor)
: Media(title, director, year), actor_(actor) {}
const std::string& get_actor() const {
return actor_;
}
private:
std::string actor_;
};
class TVShow : public Media {
public:
TVShow(const std::string& title, const std::string& director, int year, int season, int episode)
: Media(title, director, year), season_(season), episode_(episode) {}
int get_season() const {
return season_;
}
int get_episode() const {
return episode_;
}
private:
int season_;
int episode_;
};
class MediaLibrary {
public:
void add_media(Media* media) {
media_.push_back(media);
}
void remove_media(const std::string& title) {
auto it = std::find_if(media_.begin(), media_.end(), [&](const Media* m) { return m->get_title() == title; });
if (it != media_.end()) {
media_.erase(it);
}
}
const Media* find_media(const std::string& title) const {
auto it = std::find_if(media_.begin(), media_.end(), [&](const Media* m) { return m->get_title() == title; });
if (it != media_.end()) {
return *it;
}
else {
return nullptr;
}
}
private:
std::vector<Media*> media_;
};
int main() {
MediaLibrary library;
// 添加一些影视作品
library.add_media(new Movie("The Shawshank Redemption", "Frank Darabont", 1994, "Tim Robbins"));
library.add_media(new Movie("The Godfather", "Francis Ford Coppola", 1972, "Marlon Brando"));
library.add_media(new TVShow("Friends", "David Crane, Marta Kauffman", 1994, 1, 1));
library.add_media(new TVShow("Breaking Bad", "Vince Gilligan", 2008, 1, 1));
// 查找特定影视作品
const Media* media = library.find_media("Friends");
if (media) {
std::cout << "Found media: " << media->get_title() << '\n';
}
else {
std::cout << "Media not found!\n";
}
// 删除影视作品
library.remove_media("The Godfather");
// 打印所有影视作品
for (const auto& m : library) {
std::cout << "Title: " << m->get_title() << '\n';
std::cout << "Director: " << m->get_director() << '\n';
std::cout << "Year: " << m->get_year() << '\n';
const Movie* movie = dynamic_cast<const Movie*>(m);
if (movie) {
std::cout << "Actor: " << movie->get_actor() << '\n';
}
const TVShow* tv_show = dynamic_cast<const TVShow*>(m);
if (tv_show) {
std::cout << "Season: " << tv_show->get_season() << '\n';
std::cout << "Episode: " << tv_show->get_episode() << '\n';
}
std::cout << '\n';
}
return 0;
}
```
在这个示例中,我们定义了三个类:`Media`(表示影视作品)、`Movie`(表示电影)和`TVShow`(表示电视剧)。`Movie`和`TVShow`都继承自`Media`,并在此基础上添加了一些额外的特性(如演员和季/集数)。
我们还定义了一个`MediaLibrary`类,它包含了一个`std::vector`,并提供了添加、删除和查找影视作品的方法。在`main`函数中,我们添加了一些影视作品,并演示了如何查找特定影视作品、删除影视作品以及打印所有影视作品的信息。注意,我们使用`dynamic_cast`来在运行时检查`Media`指针的实际类型,并相应地打印特定的信息。
此程序只是一个简单的示例,可能需要进行优化以处理更多的影视作品,并提供更多的功能(如借阅、归还等)。