影院管理系统C语言含链表和排序
时间: 2023-07-25 10:43:10 浏览: 53
以下是一个带有链表和排序功能的影院管理系统的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
// 定义影片结构体
typedef struct film {
int id; // 影片编号
char name[MAX_NAME_LEN]; // 影片名称
int duration; // 影片时长
float price; // 影片价格
struct film *next; // 指向下一个影片的指针
} Film;
// 初始化链表
Film *initList() {
Film *head = (Film *)malloc(sizeof(Film));
head->next = NULL;
return head;
}
// 插入影片到链表尾部
void addFilm(Film *head, int id, char *name, int duration, float price) {
Film *newFilm = (Film *)malloc(sizeof(Film));
newFilm->id = id;
strcpy(newFilm->name, name);
newFilm->duration = duration;
newFilm->price = price;
newFilm->next = NULL;
Film *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newFilm;
}
// 根据影片编号删除影片
void deleteFilm(Film *head, int id) {
Film *p = head->next;
Film *prev = head;
while (p != NULL) {
if (p->id == id) {
prev->next = p->next;
free(p);
printf("影片删除成功!\n");
return;
}
prev = p;
p = p->next;
}
printf("未找到影片编号为%d的影片!\n", id);
}
// 根据影片编号查找影片
Film *findFilm(Film *head, int id) {
Film *p = head->next;
while (p != NULL) {
if (p->id == id) {
return p;
}
p = p->next;
}
return NULL;
}
// 显示所有影片信息
void showFilms(Film *head) {
printf("影片编号\t影片名称\t影片时长\t影片价格\n");
Film *p = head->next;
while (p != NULL) {
printf("%d\t\t%s\t\t%d\t\t%.2f\n", p->id, p->name, p->duration, p->price);
p = p->next;
}
}
// 影片按价格排序
void sortFilms(Film *head) {
int len = 0;
Film *p = head->next;
while (p != NULL) {
len++;
p = p->next;
}
for (int i = 0; i < len - 1; i++) {
Film *p = head->next;
Film *q = p->next;
for (int j = 0; j < len - i - 1; j++) {
if (p->price > q->price) {
p->next = q->next;
q->next = p;
head->next = q;
p = q;
} else {
p = p->next;
q = q->next;
}
}
}
}
int main() {
Film *head = initList(); // 初始化链表
// 添加几个影片
addFilm(head, 1, "复仇者联盟", 150, 30.0);
addFilm(head, 2, "流浪地球", 125, 25.0);
addFilm(head, 3, "哪吒之魔童降世", 110, 20.0);
// 显示所有影片
showFilms(head);
// 根据影片编号删除影片
deleteFilm(head, 2);
// 显示所有影片
showFilms(head);
// 查找影片并修改价格
Film *film = findFilm(head, 1);
if (film != NULL) {
film->price = 35.0;
printf("影片价格修改成功!\n");
} else {
printf("未找到影片编号为%d的影片!\n", 1);
}
// 显示所有影片
showFilms(head);
// 按价格排序并显示所有影片
sortFilms(head);
printf("按价格排序后的影片信息:\n");
showFilms(head);
return 0;
}
```
在上面的代码中,我们新增了一个`sortFilms()`函数,该函数的作用是将影片按价格从小到大排序。我们使用冒泡排序算法实现了这个功能。在`main()`函数中,我们在删除、修改、显示所有影片信息的基础上,新增了一个按价格排序并显示所有影片信息的功能。
需要注意的是,在使用冒泡排序算法时,我们需要遍历链表来获取链表的长度,然后进行排序。所以在代码中,我们首先遍历了一遍链表,获取了链表的长度。