编写一个C语言程序满足以下:图书信息管理系统设计 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能: 系统以菜单方式工作v 图书信息录入功能(图书信息用文件保存)--输入v 图书信息浏览功能--输出v 查询和排序功能:(至少一种查询方式)--算法v l 按书名查询 2按作者名查询 图书信息的删除与修改(可选项)v
时间: 2023-12-04 19:06:05 浏览: 98
好的,以下是实现该功能的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书信息结构体
typedef struct BookInfo {
char id[20]; // 登录号
char title[50]; // 书名
char author[50]; // 作者名
char category[20]; // 分类号
char publisher[50]; // 出版单位
char pub_date[20]; // 出版时间
float price; // 价格
} BookInfo;
// 定义函数声明
void showMenu();
void addBook();
void viewBooks();
void queryBooks();
// 全局变量
FILE *fp;
int main() {
int choice;
while (1) {
showMenu();
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
addBook();
break;
case 2:
viewBooks();
break;
case 3:
queryBooks();
break;
case 4:
printf("谢谢使用!\n");
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
/**
* 显示菜单
*/
void showMenu() {
printf("\n");
printf("************* 图书信息管理系统 *************\n");
printf(" 1. 图书信息录入功能\n");
printf(" 2. 图书信息浏览功能\n");
printf(" 3. 查询和排序功能\n");
printf(" 4. 退出系统\n");
printf("********************************************\n");
}
/**
* 图书信息录入功能
*/
void addBook() {
BookInfo book;
printf("请输入图书信息:\n");
printf(" 登录号:");
scanf("%s", book.id);
printf(" 书名:");
scanf("%s", book.title);
printf(" 作者名:");
scanf("%s", book.author);
printf(" 分类号:");
scanf("%s", book.category);
printf(" 出版单位:");
scanf("%s", book.publisher);
printf(" 出版时间:");
scanf("%s", book.pub_date);
printf(" 价格:");
scanf("%f", &book.price);
// 打开“book.txt”文件,以追加方式写入图书信息
fp = fopen("book.txt", "a");
if (fp == NULL) {
printf("文件打开失败!");
exit(0);
}
fwrite(&book, sizeof(BookInfo), 1, fp);
fclose(fp);
printf("图书信息录入成功!\n");
}
/**
* 图书信息浏览功能
*/
void viewBooks() {
BookInfo book;
// 打开“book.txt”文件,以读取方式读取图书信息
fp = fopen("book.txt", "r");
if (fp == NULL) {
printf("文件打开失败!");
exit(0);
}
printf("登录号\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n");
while (fread(&book, sizeof(BookInfo), 1, fp) > 0) {
printf("%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n", book.id, book.title, book.author, book.category, book.publisher, book.pub_date, book.price);
}
fclose(fp);
}
/**
* 查询和排序功能
*/
void queryBooks() {
BookInfo book;
char keyword[50];
int choice, i, j, k;
int count = 0;
BookInfo books[100];
// 打开“book.txt”文件,以读取方式读取图书信息
fp = fopen("book.txt", "r");
if (fp == NULL) {
printf("文件打开失败!");
exit(0);
}
printf("请输入查询关键词:");
scanf("%s", keyword);
printf("请选择查询方式:\n");
printf(" 1. 按书名查询\n");
printf(" 2. 按作者名查询\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
while (fread(&book, sizeof(BookInfo), 1, fp) > 0) {
if (strstr(book.title, keyword) != NULL) {
books[count++] = book;
}
}
break;
case 2:
while (fread(&book, sizeof(BookInfo), 1, fp) > 0) {
if (strstr(book.author, keyword) != NULL) {
books[count++] = book;
}
}
break;
default:
printf("输入有误,请重新输入!\n");
return;
}
fclose(fp);
// 对查询结果按价格排序
for (i = 0; i < count - 1; i++) {
for (j = i + 1; j < count; j++) {
if (books[i].price > books[j].price) {
BookInfo temp = books[i];
books[i] = books[j];
books[j] = temp;
}
}
}
// 输出查询结果
printf("登录号\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n");
for (k = 0; k < count; k++) {
printf("%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n", books[k].id, books[k].title, books[k].author, books[k].category, books[k].publisher, books[k].pub_date, books[k].price);
}
}
```
代码说明:
1. 在代码开头,定义了一个结构体 `BookInfo`,用于存储图书信息。
2. 在 `main()` 函数中,使用一个死循环展示菜单,并根据用户的选择调用不同的函数实现不同的功能。
3. `addBook()` 函数实现图书信息的录入功能,从控制台读取图书信息,并将其写入文件 `"book.txt"` 中。
4. `viewBooks()` 函数实现图书信息的浏览功能,从文件 `"book.txt"` 中读取图书信息,并打印到控制台上。
5. `queryBooks()` 函数实现图书信息的查询和排序功能,从文件 `"book.txt"` 中读取图书信息,并根据用户的查询条件进行查询,然后按照价格从小到大排序,并打印到控制台上。
6. 在函数中使用了文件操作,包括打开文件、读写文件和关闭文件等操作,需要注意的是,文件名和文件路径需要根据实际情况进行修改。
注意:在实际运行中,可以在程序运行前创建一个空文件 `"book.txt"`,用于存储图书信息。
阅读全文