用c++写一个以顺序表实现的图书馆里系统,包含查找、插入、删除、修改、排序、计数的功能
时间: 2023-10-19 18:23:03 浏览: 134
好的,我可以为您提供一个简单的基于顺序表的图书管理系统的代码示例。以下是一个基本的程序框架,您可以根据自己的需要进行修改和扩展:
```c
#include <stdio.h>
#include <string.h>
#define MAX_BOOKS 100 // 最大书籍数量
typedef struct {
char title[50]; // 书名
char author[50]; // 作者
int year; // 出版年份
float price; // 价格
} Book;
typedef struct {
Book books[MAX_BOOKS]; // 书籍数组
int count; // 当前书籍数量
} Library;
// 初始化图书馆
void initLibrary(Library *lib) {
lib->count = 0;
}
// 添加书籍
void addBook(Library *lib, Book book) {
if (lib->count < MAX_BOOKS) {
lib->books[lib->count++] = book;
} else {
printf("图书馆已满,无法添加新书!\n");
}
}
// 查找书籍
void findBook(Library *lib, char *title) {
int found = 0;
for (int i = 0; i < lib->count; i++) {
if (strcmp(lib->books[i].title, title) == 0) {
printf("找到了以下书籍:\n");
printf("书名:%s\n", lib->books[i].title);
printf("作者:%s\n", lib->books[i].author);
printf("出版年份:%d\n", lib->books[i].year);
printf("价格:%.2f\n", lib->books[i].price);
found = 1;
}
}
if (!found) {
printf("没有找到该书籍!\n");
}
}
// 删除书籍
void deleteBook(Library *lib, char *title) {
int found = 0;
for (int i = 0; i < lib->count; i++) {
if (strcmp(lib->books[i].title, title) == 0) {
for (int j = i; j < lib->count - 1; j++) {
lib->books[j] = lib->books[j + 1];
}
lib->count--;
printf("已删除该书籍!\n");
found = 1;
}
}
if (!found) {
printf("没有找到该书籍!\n");
}
}
// 修改书籍
void modifyBook(Library *lib, char *title) {
int found = 0;
for (int i = 0; i < lib->count; i++) {
if (strcmp(lib->books[i].title, title) == 0) {
printf("请输入新的书名:");
scanf("%s", lib->books[i].title);
printf("请输入新的作者:");
scanf("%s", lib->books[i].author);
printf("请输入新的出版年份:");
scanf("%d", &lib->books[i].year);
printf("请输入新的价格:");
scanf("%f", &lib->books[i].price);
printf("已修改该书籍!\n");
found = 1;
}
}
if (!found) {
printf("没有找到该书籍!\n");
}
}
// 排序书籍
void sortBooks(Library *lib) {
for (int i = 0; i < lib->count - 1; i++) {
for (int j = i + 1; j < lib->count; j++) {
if (strcmp(lib->books[i].title, lib->books[j].title) > 0) {
Book temp = lib->books[i];
lib->books[i] = lib->books[j];
lib->books[j] = temp;
}
}
}
printf("已按书名排序!\n");
}
// 统计书籍数量
void countBooks(Library *lib) {
printf("图书馆里共有 %d 本书籍。\n", lib->count);
}
int main() {
Library lib;
initLibrary(&lib);
int choice;
char title[50];
Book book;
do {
printf("\n");
printf("图书馆管理系统\n");
printf("1. 添加书籍\n");
printf("2. 查找书籍\n");
printf("3. 删除书籍\n");
printf("4. 修改书籍\n");
printf("5. 排序书籍\n");
printf("6. 统计书籍数量\n");
printf("7. 退出系统\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入书名:");
scanf("%s", book.title);
printf("请输入作者:");
scanf("%s", book.author);
printf("请输入出版年份:");
scanf("%d", &book.year);
printf("请输入价格:");
scanf("%f", &book.price);
addBook(&lib, book);
break;
case 2:
printf("请输入要查找的书名:");
scanf("%s", title);
findBook(&lib, title);
break;
case 3:
printf("请输入要删除的书名:");
scanf("%s", title);
deleteBook(&lib, title);
break;
case 4:
printf("请输入要修改的书名:");
scanf("%s", title);
modifyBook(&lib, title);
break;
case 5:
sortBooks(&lib);
break;
case 6:
countBooks(&lib);
break;
case 7:
printf("感谢使用图书馆管理系统,再见!\n");
break;
default:
printf("输入的选项有误,请重新输入!\n");
break;
}
} while (choice != 7);
return 0;
}
```
以上代码示例中,我们定义了一个 `Book` 结构体来表示一本书籍的信息,包括书名、作者、出版年份和价格。同时,我们定义了一个 `Library` 结构体来表示整个图书馆的信息,包括当前存储的书籍数量和一个 `Book` 数组。
接下来,我们实现了几个基本的功能函数,如添加、查找、删除、修改、排序和计数等。在 `main` 函数中,我们通过一个循环来不断提示用户输入选项,并调用相应的功能函数来处理用户的请求。
当然,以上代码示例只是一个简单的示例,您可以根据自己的需求进行扩展和改进,比如添加文件读写、数据持久化、用户身份验证等功能。
阅读全文