1 、问题定义
管理参赛队的基本信息
2 、问题分析
利用单链表管理参赛队的基本信息,包含参赛队编号,参赛作品名称,参赛学校,赛事类别,参赛者,指导老师。新建一个参数队伍结构体,在里面定义各种参赛信息,以及指向下一个队伍的指针。建一个新建队伍的函数,运用指针将参数传递的信息赋给各个队伍,按类别将信息传递给各类指针,最后将队伍输出。新建查找函数,实例化一个查找函数对象,将输入的函数赋值给它,不断指向下一个队伍,直到其id相同,停止查找,输出当前队伍。新建一个显示所有队伍信息的函数,用循环遍历各个队伍,将信息按表输出。新建一个添加队伍信息的函数,先输入新建队伍的编号,用查找函数功能查找此函数不存在时,继续输入各个信息,再将各个信息利用新建队伍函数,将各个信息赋值给新创建的函数,将新建的队伍指向前一个队伍,再将头指针指向此新建的队伍。
再新建一个删除队伍信息的函数,原理同上一个函数。再创建一个修改函数,利用查找函数找到此次要修改的队伍,依次将修改值赋值给该队伍的各个类别。
最后用main函数,输出操作选项菜单,利用switch方法检索,执行各个操作。
3 、概要设计
以下是解决该问题的代码框架
// 参赛队伍结构体
Struct Team{
int id; // 队伍编号
string name; // 参赛作品名称
string school; // 参赛学校
string event; // 赛事类别
string participants; // 参赛者
string teacher; // 指导老师
Team* next; // 指向下一个队伍的指针
};
// 用于新建队伍的函数
Team* createTeam(int id, string name, string school, string event, string participants, string teacher) {
Team* team = new Team;
team->id = id;
team->name = name;
team->school = school;
team->event = event;
team->participants = participants;
team->teacher = teacher;
team->next = nullptr;
return team;
}
// 用于在链表中查找队伍的函数
Team* findTeam(Team* head, int id) {}
// 用于显示所有队伍信息的函数
void displayTeams(Team* head) {}
// 用于添加队伍信息的函数
void addTeam(Team **head) {}
// 用于删除队伍信息的函数
void removeTeam(Team **head) {}
// 用于修改队伍信息的函数
void editTeam(Team **head) {}
int main() {
Team* head = nullptr; // 初始链表为空
while (true) {
cout << "请选择操作:1. 添加新的参赛队伍;2. 删除参赛队伍;3. 修改参赛队伍信息;4. 显示所有参赛队伍信息;其他数字退出程序。" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
addTeam(&head);
break;
case 2:
removeTeam(&head);
break;
case 3:
editTeam(&head);
break;
case 4:
displayTeams(head);
break;
default:
return 0;
}
}
}