歌曲信息管理系统c++单链表
时间: 2023-08-03 14:42:38 浏览: 45
好的,这里是一个使用单链表实现的C++歌曲信息管理系统。这个系统同样包括添加、删除、修改、查询歌曲信息等功能。下面是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
// 歌曲结构体
struct Song {
string name; // 歌曲名
string singer; // 歌手名
int year; // 发行年份
Song* next; // 指向下一个节点的指针
};
class SongList {
public:
SongList(); // 构造函数
~SongList(); // 析构函数
void addSong(); // 添加歌曲
void deleteSong(); // 删除歌曲
void modifySong(); // 修改歌曲
void findSong(); // 查询歌曲
void display(); // 显示所有歌曲
private:
Song* head; // 头节点指针
int songCount; // 当前歌曲数量
Song* findPrevNode(string name); // 查找指定歌曲的前一个节点
};
// 构造函数
SongList::SongList() {
head = new Song;
head->next = NULL;
songCount = 0;
}
// 析构函数
SongList::~SongList() {
Song* curr = head;
while (curr) {
Song* temp = curr;
curr = curr->next;
delete temp;
}
}
// 查找指定歌曲的前一个节点
Song* SongList::findPrevNode(string name) {
Song* curr = head;
while (curr->next && curr->next->name != name) {
curr = curr->next;
}
if (curr->next) {
return curr;
}
else {
return NULL;
}
}
// 添加歌曲
void SongList::addSong() {
if (songCount >= MAX_SONG_NUM) {
cout << "歌曲数量已达上限,无法添加!" << endl;
return;
}
Song* song = new Song;
cout << "请输入歌曲名:";
cin >> song->name;
cout << "请输入歌手名:";
cin >> song->singer;
cout << "请输入发行年份:";
cin >> song->year;
song->next = NULL;
if (!head->next) {
head->next = song;
}
else {
Song* curr = head;
while (curr->next) {
curr = curr->next;
}
curr->next = song;
}
songCount++;
cout << "添加成功!" << endl;
}
// 删除歌曲
void SongList::deleteSong() {
string name;
cout << "请输入要删除的歌曲名:";
cin >> name;
Song* prevNode = findPrevNode(name);
if (!prevNode) {
cout << "未找到该歌曲!" << endl;
return;
}
Song* curr = prevNode->next;
prevNode->next = curr->next;
delete curr;
songCount--;
cout << "删除成功!" << endl;
}
// 修改歌曲
void SongList::modifySong() {
string name;
cout << "请输入要修改的歌曲名:";
cin >> name;
Song* prevNode = findPrevNode(name);
if (!prevNode) {
cout << "未找到该歌曲!" << endl;
return;
}
Song* curr = prevNode->next;
cout << "请输入修改后的歌曲名:";
cin >> curr->name;
cout << "请输入修改后的歌手名:";
cin >> curr->singer;
cout << "请输入修改后的发行年份:";
cin >> curr->year;
cout << "修改成功!" << endl;
}
// 查询歌曲
void SongList::findSong() {
string name;
cout << "请输入要查询的歌曲名:";
cin >> name;
Song* curr = head->next;
while (curr) {
if (curr->name == name) {
cout << "歌曲名:" << curr->name << endl
<< "歌手名:" << curr->singer << endl
<< "发行年份:" << curr->year << endl;
return;
}
curr = curr->next;
}
cout << "未找到该歌曲!" << endl;
}
// 显示所有歌曲
void SongList::display() {
Song* curr = head->next;
while (curr) {
cout << "歌曲名:" << curr->name << endl
<< "歌手名:" << curr->singer << endl
<< "发行年份:" << curr->year << endl;
curr = curr->next;
}
if (songCount == 0) {
cout << "当前没有歌曲!" << endl;
}
}
int main() {
SongList songList;
int choice;
while (1) {
cout << "请选择操作:" << endl
<< "1.添加歌曲" << endl
<< "2.删除歌曲" << endl
<< "3.修改歌曲" << endl
<< "4.查询歌曲" << endl
<< "5.显示所有歌曲" << endl
<< "6.退出" << endl;
cin >> choice;
switch (choice) {
case 1:
songList.addSong();
break;
case 2:
songList.deleteSong();
break;
case 3:
songList.modifySong();
break;
case 4:
songList.findSong();
break;
case 5:
songList.display();
break;
case 6:
exit(0);
default:
cout << "请输入有效操作!" << endl;
}
}
return 0;
}
```
以上是使用单链表实现的C++歌曲信息管理系统,其中包含了添加、删除、修改、查询歌曲信息等功能。