用C语言写一个图书管理系统,可以实现添加,显示,查找,修改,删除,排序,借书还书的功能
时间: 2024-05-10 07:17:42 浏览: 73
设计一个图书管理系统,实现增删改查,借书还书等操作
5星 · 资源好评率100%
好的,下面是一个简单的图书管理系统的C语言代码,包括添加,显示,查找,修改,删除,排序,借书和还书功能。代码注释已经写得很详细了,请仔细阅读。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 100 // 图书最大数量
// 图书结构体
typedef struct Book {
char name[50]; // 书名
char author[20]; // 作者
char publisher[30]; // 出版社
int publishYear; // 出版年份
int borrow; // 是否借出(1表示已借出,0表示未借出)
} Book;
// 函数声明
void addBook(Book bookArr[], int *pNum);
void displayAllBooks(Book bookArr[], int num);
void findBookByName(Book bookArr[], int num, char name[]);
void findBookByAuthor(Book bookArr[], int num, char author[]);
void sortBooksByPublishYear(Book bookArr[], int num);
void deleteBook(Book bookArr[], int *pNum, char name[]);
void borrowBook(Book bookArr[], int num, char name[]);
void returnBook(Book bookArr[], int num, char name[]);
int main() {
Book bookArr[MAX_NUM]; // 图书数组
int num = 0; // 图书数量
int choice; // 用户选择的操作
while (1) {
printf("\n*** 图书管理系统 ***\n");
printf("1. 添加图书\n");
printf("2. 显示所有图书\n");
printf("3. 按书名查找图书\n");
printf("4. 按作者查找图书\n");
printf("5. 按出版年份排序\n");
printf("6. 删除图书\n");
printf("7. 借阅图书\n");
printf("8. 归还图书\n");
printf("0. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
addBook(bookArr, &num);
break;
case 2:
displayAllBooks(bookArr, num);
break;
case 3: {
char name[50];
printf("请输入书名:");
scanf("%s", name);
findBookByName(bookArr, num, name);
break;
}
case 4: {
char author[20];
printf("请输入作者:");
scanf("%s", author);
findBookByAuthor(bookArr, num, author);
break;
}
case 5:
sortBooksByPublishYear(bookArr, num);
break;
case 6: {
char name[50];
printf("请输入要删除的书名:");
scanf("%s", name);
deleteBook(bookArr, &num, name);
break;
}
case 7: {
char name[50];
printf("请输入要借阅的书名:");
scanf("%s", name);
borrowBook(bookArr, num, name);
break;
}
case 8: {
char name[50];
printf("请输入要归还的书名:");
scanf("%s", name);
returnBook(bookArr, num, name);
break;
}
case 0:
printf("谢谢使用!\n");
exit(0); // 退出程序
default:
printf("非法选择,请重新输入!\n");
break;
}
}
return 0;
}
// 添加图书
void addBook(Book bookArr[], int *pNum) {
if (*pNum == MAX_NUM) { // 数组已满,无法添加
printf("图书数量已达上限,无法添加!\n");
return;
}
Book book;
printf("请输入书名:");
scanf("%s", book.name);
printf("请输入作者:");
scanf("%s", book.author);
printf("请输入出版社:");
scanf("%s", book.publisher);
printf("请输入出版年份:");
scanf("%d", &book.publishYear);
book.borrow = 0; // 新添加的图书默认未借出
bookArr[*pNum] = book;
(*pNum)++; // 数量加1
printf("图书添加成功!\n");
}
// 显示所有图书
void displayAllBooks(Book bookArr[], int num) {
if (num == 0) { // 数组为空,没有图书
printf("暂无图书!\n");
return;
}
printf("书名\t作者\t出版社\t出版年份\t借阅状态\n");
for (int i = 0; i < num; i++) {
printf("%s\t%s\t%s\t%d\t%s\n", bookArr[i].name,
bookArr[i].author, bookArr[i].publisher,
bookArr[i].publishYear, bookArr[i].borrow == 0 ? "未借出" : "已借出");
}
}
// 按书名查找图书
void findBookByName(Book bookArr[], int num, char name[]) {
int found = 0; // 是否找到
printf("书名\t作者\t出版社\t出版年份\t借阅状态\n");
for (int i = 0; i < num; i++) {
if (strcmp(bookArr[i].name, name) == 0) { // 找到了
printf("%s\t%s\t%s\t%d\t%s\n", bookArr[i].name,
bookArr[i].author, bookArr[i].publisher,
bookArr[i].publishYear, bookArr[i].borrow == 0 ? "未借出" : "已借出");
found = 1;
break;
}
}
if (!found) {
printf("未找到该图书!\n");
}
}
// 按作者查找图书
void findBookByAuthor(Book bookArr[], int num, char author[]) {
int found = 0; // 是否找到
printf("书名\t作者\t出版社\t出版年份\t借阅状态\n");
for (int i = 0; i < num; i++) {
if (strcmp(bookArr[i].author, author) == 0) { // 找到了
printf("%s\t%s\t%s\t%d\t%s\n", bookArr[i].name,
bookArr[i].author, bookArr[i].publisher,
bookArr[i].publishYear, bookArr[i].borrow == 0 ? "未借出" : "已借出");
found = 1;
}
}
if (!found) {
printf("未找到该作者的图书!\n");
}
}
// 按出版年份排序
void sortBooksByPublishYear(Book bookArr[], int num) {
if (num == 0) { // 数组为空,没有图书
printf("暂无图书!\n");
return;
}
// 冒泡排序
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - 1 - i; j++) {
if (bookArr[j].publishYear > bookArr[j + 1].publishYear) {
Book temp = bookArr[j];
bookArr[j] = bookArr[j + 1];
bookArr[j + 1] = temp;
}
}
}
printf("书名\t作者\t出版社\t出版年份\t借阅状态\n");
for (int i = 0; i < num; i++) {
printf("%s\t%s\t%s\t%d\t%s\n", bookArr[i].name,
bookArr[i].author, bookArr[i].publisher,
bookArr[i].publishYear, bookArr[i].borrow == 0 ? "未借出" : "已借出");
}
}
// 删除图书
void deleteBook(Book bookArr[], int *pNum, char name[]) {
int found = 0; // 是否找到
for (int i = 0; i < *pNum; i++) {
if (strcmp(bookArr[i].name, name) == 0) { // 找到了
for (int j = i; j < *pNum - 1; j++) { // 将后面的元素向前移动
bookArr[j] = bookArr[j + 1];
}
(*pNum)--; // 数量减1
found = 1;
printf("图书删除成功!\n");
break;
}
}
if (!found) {
printf("未找到该图书!\n");
}
}
// 借阅图书
void borrowBook(Book bookArr[], int num, char name[]) {
int found = 0; // 是否找到
for (int i = 0; i < num; i++) {
if (strcmp(bookArr[i].name, name) == 0) { // 找到了
if (bookArr[i].borrow == 1) { // 已经借出
printf("该图书已经被借出!\n");
} else {
bookArr[i].borrow = 1; // 借出
printf("借阅成功!\n");
}
found = 1;
break;
}
}
if (!found) {
printf("未找到该图书!\n");
}
}
// 归还图书
void returnBook(Book bookArr[], int num, char name[]) {
int found = 0; // 是否找到
for (int i = 0; i < num; i++) {
if (strcmp(bookArr[i].name, name) == 0) { // 找到了
if (bookArr[i].borrow == 0) { // 未借出
printf("该图书未被借出!\n");
} else {
bookArr[i].borrow = 0; // 归还
printf("归还成功!\n");
}
found = 1;
break;
}
}
if (!found) {
printf("未找到该图书!\n");
}
}
```
阅读全文