一、出版社有一些图书数据保存在一个文本文件Book.txt中,为简单起见,在此假设每一种图书只包括三部分信息:ISBN(书号)、书名、价格,文件中的部分数据如图1所示。现要求实现一个图书信息管理系统,包含以下6个具体功能。 1.查找:根据指定的ISBN或书名查找相应图书的有关信息,并返回该图书在表中的位置序号。 2.插入:插入一种新的图书信息。 3.删除:删除一种图书信息。 4.修改:根据指定的ISBN号,修改图书的价格。 5.排序:将图书按照价格由低到高进行排序。 计数:统计图书表中的图书数量。 C语言代码示例
时间: 2024-03-26 10:38:30 浏览: 160
对不起,我之前的回答中没有提供图1,无法完整理解问题。不过我已经了解到问题的具体内容,现在给出一个新的C语言代码示例,可以实现上述6个功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 100
struct Book {
char isbn[20];
char name[50];
float price;
};
struct Book books[MAX_BOOKS];
int num_books = 0;
// 读取图书数据函数
int read_books() {
FILE *fp = fopen("Book.txt", "r");
if (fp == NULL) {
return -1;
}
char line[200];
while (fgets(line, sizeof(line), fp) != NULL) {
char *isbn = strtok(line, ",");
char *name = strtok(NULL, ",");
char *price_str = strtok(NULL, ",");
float price = atof(price_str);
if (insert_book(isbn, name, price) == -1) {
fclose(fp);
return -1;
}
}
fclose(fp);
return 0;
}
// 查找函数,返回找到的位置序号,未找到返回-1
int find_book(char *isbn_or_name) {
for (int i = 0; i < num_books; i++) {
if (strcmp(isbn_or_name, books[i].isbn) == 0 || strcmp(isbn_or_name, books[i].name) == 0) {
return i;
}
}
return -1;
}
// 插入函数,成功返回0,失败返回-1
int insert_book(char *isbn, char *name, float price) {
if (num_books == MAX_BOOKS) {
return -1;
}
strcpy(books[num_books].isbn, isbn);
strcpy(books[num_books].name, name);
books[num_books].price = price;
num_books++;
return 0;
}
// 删除函数,成功返回0,失败返回-1
int delete_book(int index) {
if (index < 0 || index >= num_books) {
return -1;
}
for (int i = index; i < num_books - 1; i++) {
books[i] = books[i+1];
}
num_books--;
return 0;
}
// 修改函数,成功返回0,失败返回-1
int modify_book(char *isbn, float new_price) {
int index = find_book(isbn);
if (index == -1) {
return -1;
}
books[index].price = new_price;
return 0;
}
// 排序函数
void sort_books() {
for (int i = 0; i < num_books - 1; i++) {
for (int j = i + 1; j < num_books; j++) {
if (books[i].price > books[j].price) {
struct Book temp = books[i];
books[i] = books[j];
books[j] = temp;
}
}
}
}
// 统计函数
int count_books() {
return num_books;
}
// 保存图书数据到文件
int save_books() {
FILE *fp = fopen("Book.txt", "w");
if (fp == NULL) {
return -1;
}
for (int i = 0; i < num_books; i++) {
fprintf(fp, "%s,%s,%.2f\n", books[i].isbn, books[i].name, books[i].price);
}
fclose(fp);
return 0;
}
// 打印函数,输出所有图书信息
void print_books() {
printf("序号\tISBN\t\t书名\t\t价格\n");
for (int i = 0; i < num_books; i++) {
printf("%d\t%s\t%s\t%.2f\n", i+1, books[i].isbn, books[i].name, books[i].price);
}
}
int main() {
if (read_books() == -1) {
printf("读取文件失败!\n");
return -1;
}
printf("欢迎使用图书管理系统!\n");
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");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: {
printf("请输入ISBN或书名:");
char isbn_or_name[50];
scanf("%s", isbn_or_name);
int index = find_book(isbn_or_name);
if (index == -1) {
printf("未找到该图书!\n");
} else {
printf("书名:%s,价格:%f,位置:%d\n", books[index].name, books[index].price, index+1);
}
break;
}
case 2: {
printf("请输入ISBN:");
char isbn[20];
scanf("%s", isbn);
printf("请输入书名:");
char name[50];
scanf("%s", name);
printf("请输入价格:");
float price;
scanf("%f", &price);
if (insert_book(isbn, name, price) == -1) {
printf("添加图书失败!\n");
} else {
printf("添加图书成功!\n");
}
break;
}
case 3: {
printf("请输入要删除的图书位置序号:");
int index;
scanf("%d", &index);
if (delete_book(index-1) == -1) {
printf("删除图书失败!\n");
} else {
printf("删除图书成功!\n");
}
break;
}
case 4: {
printf("请输入要修改价格的图书的ISBN:");
char isbn[20];
scanf("%s", isbn);
printf("请输入新的价格:");
float new_price;
scanf("%f", &new_price);
if (modify_book(isbn, new_price) == -1) {
printf("修改价格失败!\n");
} else {
printf("修改价格成功!\n");
}
break;
}
case 5: {
sort_books();
printf("排序完成!\n");
break;
}
case 6: {
printf("当前图书总数为:%d\n", count_books());
break;
}
case 7: {
printf("保存图书数据...\n");
if (save_books() == -1) {
printf("保存文件失败!\n");
} else {
printf("保存文件成功!\n");
}
printf("感谢使用图书管理系统!\n");
return 0;
}
default: {
printf("无效操作!\n");
break;
}
}
print_books();
}
}
```
注意,这个代码示例中添加了一个菜单界面,可以让用户选择要执行的操作。同时还添加了读取、保存、打印等辅助函数,使得代码更加完整和健壮。
阅读全文