动态数组-图书管理系统
时间: 2024-01-18 22:03:40 浏览: 33
动态数组是一种可以根据需要动态增长或缩小大小的数据结构。在图书管理系统中,使用动态数组可以方便地存储和管理图书相关信息。下面是一个简单的示例代码,演示了如何使用动态数组实现图书管理系统的基本功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct {
char title[100];
char author[100]; int year;
} Book;
int main() {
int capacity = 2; // 初始容量
int size = 0; // 当前大小
Book *books = malloc(capacity * sizeof(Book)); // 动态分配内存
// 欢迎信息
printf("欢迎使用图书管理系统!\n");
int choice;
do {
// 显示菜单选项
printf("\n请选择操作:\n");
printf("1. 查看图书\n");
printf("2. 新增图书\n");
printf("3. 修改图书\n");
printf("4. 删除图书\n");
printf("5. 退出系统\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1: // 查看图书
printf("\n图书列表:\n");
for (int i = 0; i < size; i++) {
printf("书名:%s 作者:%s 出版年份:%d\n", books[i].title, books[i].author, books[i].year);
}
break;
case 2: // 新增图书
if (size == capacity) {
// 动态扩容
capacity *= 2;
books = realloc(books, capacity * sizeof(Book));
}
printf("\n请输入图书信息:\n");
printf("书名:");
scanf("%s", books[size].title);
printf("作者:");
scanf("%s", books[size].author);
printf("出版年份:");
scanf("%d", &books[size].year);
size++;
break;
case 3: // 修改图书
printf("\n请输入要修改的图书索引:");
int index;
scanf("%d", &index);
if (index >= 0 && index < size) {
printf("请输入新的图书信息:\n");
printf("书名:");
scanf("%s", books[index].title);
printf("作者:");
scanf("%s", books[index].author);
printf("出版年份:");
scanf("%d", &books[index].year);
} else {
printf("无效的索引!\n");
}
break;
case 4: // 删除图书
printf("\n请输入要删除的图书索引:");
int delIndex;
scanf("%d", &delIndex);
if (delIndex >= 0 && delIndex < size) {
// 将后面的图书向前移动
for (int i = delIndex; i < size - 1; i++) {
strcpy(books[i].title, books[i + 1].title);
strcpy(books[i].author, books[i + 1].author);
books[i].year = books[i + 1].year;
}
size--;
} else {
printf("无效的索引!\n");
}
break;
case 5: // 退出系统
printf("\n感谢使用图书管理系统!\n");
break;
default:
printf("\n无效的选项!\n");
break;
}
} while (choice != 5);
// 释放内存
free(books);
return 0;
}
```