用c加加写出乐库个人管理系统,要求涉及增,删,改和散列查找和以年份排序
时间: 2024-03-26 22:41:59 浏览: 68
好的,下面是一个简单的乐库个人管理系统的实现,包括增加音乐、删除音乐、修改音乐信息、散列查找和以年份排序的功能。这里使用了哈希表来实现散列查找,使用快速排序来实现年份排序。
```c++
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
// 歌曲类
class Song {
public:
int id; // 歌曲编号
string name; // 歌曲名称
string artist; // 歌手名称
string album; // 专辑名称
int year; // 发行年份
Song() {}
Song(int _id, string _name, string _artist, string _album, int _year) :
id(_id), name(_name), artist(_artist), album(_album), year(_year) {}
};
// 哈希表类
class HashTable {
private:
static const int MAXN = 10003; // 哈希表最大容量
vector<Song> table[MAXN]; // 哈希表数组
int hash(string s) { // 哈希函数,将字符串映射为整数
int ans = 0;
for (int i = 0; i < s.length(); i++) {
ans = ans * 131 + s[i];
}
return ans;
}
public:
void insert(Song s) { // 插入操作,将歌曲加入哈希表
int index = (hash(s.name) + hash(s.artist) + hash(s.album)) % MAXN;
table[index].push_back(s);
}
void remove(Song s) { // 删除操作,将歌曲从哈希表中移除
int index = (hash(s.name) + hash(s.artist) + hash(s.album)) % MAXN;
for (int i = 0; i < table[index].size(); i++) {
if (table[index][i].id == s.id) {
table[index].erase(table[index].begin() + i);
break;
}
}
}
vector<Song> find(string name) { // 查找操作,根据歌曲名返回所有匹配的歌曲
int index = hash(name) % MAXN;
vector<Song> ans;
for (int i = 0; i < table[index].size(); i++) {
if (table[index][i].name == name) {
ans.push_back(table[index][i]);
}
}
return ans;
}
};
// 年份排序类
class YearSorter {
public:
bool operator()(const Song& s1, const Song& s2) {
return s1.year < s2.year;
}
};
int main() {
HashTable hashTable; // 创建哈希表
vector<Song> songs; // 创建歌曲数组
int id = 0; // 当前歌曲编号
// 添加歌曲
songs.push_back(Song(++id, "Lemon", "米津玄师", "Lemon", 2018));
songs.push_back(Song(++id, "打上花火", "DAOKO×米津玄师", "打上花火", 2017));
songs.push_back(Song(++id, "愛をこめて花束を", "Superfly", "愛をこめて花束を", 2008));
songs.push_back(Song(++id, "I Love You", "尾崎豊", "I Love You", 1991));
songs.push_back(Song(++id, "Lovers", "7!!", "Lovers", 2015));
// 将歌曲加入哈希表
for (int i = 0; i < songs.size(); i++) {
hashTable.insert(songs[i]);
}
// 删除歌曲
hashTable.remove(songs[0]);
// 修改歌曲信息
songs[1].year = 2018;
hashTable.remove(songs[1]);
hashTable.insert(songs[1]);
// 查找歌曲
vector<Song> results = hashTable.find("Lovers");
for (int i = 0; i < results.size(); i++) {
cout << results[i].name << " - " << results[i].artist << endl;
}
// 年份排序
sort(songs.begin(), songs.end(), YearSorter());
for (int i = 0; i < songs.size(); i++) {
cout << songs[i].name << " - " << songs[i].artist << " (" << songs[i].year << ")" << endl;
}
return 0;
}
```
以上是一个简单的乐库个人管理系统的实现,其中使用了哈希表来实现散列查找和快速删除,使用快速排序来实现年份排序。这只是一个简单的示例,如果你需要更加复杂的功能和需求,你需要根据具体情况来进行实现。
阅读全文