C语言实现简单的图书管理系统攻略
一、前期准备
在实现图书管理系统之前,需要先了解以下基础知识:
- 结构体的定义和使用
- 文件的读写操作
- 指针的使用
掌握以上基础知识,才能顺利实现图书管理系统。
二、功能需求
我们要实现的图书管理系统需要以下功能模块:
- 添加图书信息(包括图书名称、作者、价格等信息)
- 删除图书信息
- 修改图书信息
- 查找图书信息
- 显示所有图书信息
三、实现步骤
1. 定义结构体
在实现图书管理系统之前,需要定义一个包含图书信息的结构体。结构体中包含图书名称、作者、价格等信息。以下是定义结构体的示例代码:
struct book {
char name[50]; //图书名称
char author[50]; //图书作者
float price; //图书价格
};
2. 添加图书信息
添加图书信息需要先打开文件,然后将图书信息写入文件。以下是添加图书信息的示例代码:
//定义结构体数组
struct book books[100];
//定义文件指针
FILE *fp;
//打开文件
fp = fopen("books.dat", "ab");
//输入图书信息
printf("请输入图书信息:\n");
printf("图书名称:");
scanf("%s", books[count].name);
printf("图书作者:");
scanf("%s", books[count].author);
printf("图书价格:");
scanf("%f", &books[count].price);
//将图书信息写入文件
fwrite(&books[count], sizeof(struct book), 1, fp);
//关闭文件
fclose(fp);
//图书数量加1
count++;
3. 删除图书信息
删除图书信息需要先打开文件,然后读取文件中的图书信息。接着根据需要删除的图书信息,将其从结构体数组中删除。最后再将剩余的图书信息写回文件中。以下是删除图书信息的示例代码:
//定义结构体数组
struct book books[100];
//定义文件指针
FILE *fp, *ftp;
//打开文件
fp = fopen("books.dat", "rb");
ftp = fopen("temp.dat", "wb");
//输入要删除的图书名称
printf("请输入要删除的图书名称:");
char name[50];
scanf("%s", name);
//读取文件中的图书信息,将要删除的图书信息从结构体数组中删除
int i = 0;
int flag = 0;
while(!feof(fp)) {
fread(&books[i], sizeof(struct book), 1, fp);
if(strcmp(books[i].name, name) != 0) { //如果图书名称与要删除的不同,将其写回文件中
fwrite(&books[i], sizeof(struct book), 1, ftp);
} else {
flag = 1;
}
i++;
}
//如果未找到要删除的图书,则输出提示信息
if(flag == 0) {
printf("未找到要删除的图书!\n");
}
//关闭文件指针
fclose(fp);
fclose(ftp);
//删除原文件,并将临时文件重命名为原文件名
remove("books.dat");
rename("temp.dat", "books.dat");
4. 修改图书信息
修改图书信息需要先打开文件,然后读取文件中的图书信息。接着根据需要修改的图书信息,将其修改在结构体数组中。最后再将修改后的图书信息写回文件中。以下是修改图书信息的示例代码:
//定义结构体数组
struct book books[100];
//定义文件指针
FILE *fp, *ftp;
//打开文件
fp = fopen("books.dat", "rb");
ftp = fopen("temp.dat", "wb");
//输入要修改的图书名称
printf("请输入要修改的图书名称:");
char name[50];
scanf("%s", name);
//读取文件中的图书信息,根据要修改的图书信息,将其修改在结构体数组中
int i = 0;
int flag = 0;
while(!feof(fp)) {
fread(&books[i], sizeof(struct book), 1, fp);
if(strcmp(books[i].name, name) == 0) { //如果找到了要修改的图书,修改结构体数组中的信息
printf("请输入修改后的图书信息:\n");
printf("图书名称:");
scanf("%s", books[i].name);
printf("图书作者:");
scanf("%s", books[i].author);
printf("图书价格:");
scanf("%f", &books[i].price);
flag = 1;
}
fwrite(&books[i], sizeof(struct book), 1, ftp); //将修改后的图书信息写回文件中
i++;
}
//如果未找到要修改的图书,则输出提示信息
if(flag == 0) {
printf("未找到要修改的图书!\n");
}
//关闭文件指针
fclose(fp);
fclose(ftp);
//删除原文件,并将临时文件重命名为原文件名
remove("books.dat");
rename("temp.dat", "books.dat");
5. 查找图书信息
查找图书信息需要先打开文件,然后读取文件中的图书信息。接着根据需要查找的图书信息,逐个比对结构体数组中的图书信息,最后输出查找到的图书信息。以下是查找图书信息的示例代码:
//定义结构体数组
struct book books[100];
//定义文件指针
FILE *fp;
//打开文件
fp = fopen("books.dat", "rb");
//输入要查找的图书名称
printf("请输入要查找的图书名称:");
char name[50];
scanf("%s", name);
//读取文件中的图书信息,逐个比对结构体数组中的图书信息,输出查找到的图书信息
int i = 0;
int flag = 0;
while(!feof(fp)) {
fread(&books[i], sizeof(struct book), 1, fp);
if(strcmp(books[i].name, name) == 0) {
printf("图书名称:%s\n", books[i].name);
printf("图书作者:%s\n", books[i].author);
printf("图书价格:%f\n", books[i].price);
flag = 1;
}
i++;
}
//如果未找到要查找的图书,则输出提示信息
if(flag == 0) {
printf("未找到要查找的图书!\n");
}
//关闭文件指针
fclose(fp);
6. 显示所有图书信息
显示所有图书信息需要先打开文件,然后逐个读取文件中的图书信息,并输出每本图书的名称、作者、价格等信息。以下是显示所有图书信息的示例代码:
//定义结构体数组
struct book books[100];
//定义文件指针
FILE *fp;
//打开文件
fp = fopen("books.dat", "rb");
//读取文件中的图书信息,逐个输出每本图书的名称、作者、价格等信息
int i = 0;
while(!feof(fp)) {
fread(&books[i], sizeof(struct book), 1, fp);
if(strcmp(books[i].name, "") != 0) {
printf("图书名称:%s\n", books[i].name);
printf("图书作者:%s\n", books[i].author);
printf("图书价格:%f\n", books[i].price);
printf("\n");
}
i++;
}
//关闭文件指针
fclose(fp);
四、示例说明
以下是添加图书信息和显示所有图书信息的示例说明:
1. 添加图书信息
假设有一个图书名称为《C语言入门教程》的图书需要添加到图书管理系统中。
运行程序,输入以下命令:
请输入数字选择功能:1
请输入图书信息:
图书名称:C语言入门教程
图书作者:张三
图书价格:25
程序会将图书信息写入文件。
2. 显示所有图书信息
假设已经添加了多本图书,并想要查看所有图书的信息。
运行程序,输入以下命令:
请输入数字选择功能:5
图书名称:C语言入门教程
图书作者:张三
图书价格:25
程序会逐个读取文件中的图书信息,并输出每本图书的名称、作者、价格等信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简单的图书管理系统 - Python技术站