用C语言设计一个图书信息管理系统,运用菜单,可实现以下功能: 图书信息录入、排序、数据保存、文件打开等。 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。 写出完整代码和注释
时间: 2023-11-08 17:30:08 浏览: 39
//头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义图书结构体
struct book{
char id[20];//登录号
char name[50];//书名
char author[50];//作者名
char category[20];//分类号
char publisher[50];//出版单位
char publish_year[10];//出版时间
float price;//价格
};
//定义全局变量
struct book books[100];//最多存储100本图书的信息
int count = 0;//记录已存储的图书数量
//函数声明
void input();//录入图书信息
void sort();//排序
void save();//保存数据
void open();//打开文件
void show();//显示已存储的图书信息
int main(){
int choice;//记录用户选择的操作
//显示菜单
printf("欢迎使用图书信息管理系统!\n");
printf("1. 录入图书信息\n");
printf("2. 排序\n");
printf("3. 保存数据\n");
printf("4. 打开文件\n");
printf("5. 显示已存储的图书信息\n");
printf("0. 退出\n");
//循环读取用户的选择
while(1){
printf("请输入操作编号:");
scanf("%d", &choice);
switch(choice){
case 1:
input();//录入图书信息
break;
case 2:
sort();//排序
break;
case 3:
save();//保存数据
break;
case 4:
open();//打开文件
break;
case 5:
show();//显示已存储的图书信息
break;
case 0:
printf("谢谢使用!\n");
exit(0);//退出程序
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
/**
* 录入图书信息
*/
void input(){
if(count == 100){//已存储的图书数量达到上限
printf("已存储的图书数量达到上限,无法再录入!\n");
return;
}
printf("请输入登录号:");
scanf("%s", books[count].id);
printf("请输入书名:");
scanf("%s", books[count].name);
printf("请输入作者名:");
scanf("%s", books[count].author);
printf("请输入分类号:");
scanf("%s", books[count].category);
printf("请输入出版单位:");
scanf("%s", books[count].publisher);
printf("请输入出版时间:");
scanf("%s", books[count].publish_year);
printf("请输入价格:");
scanf("%f", &books[count].price);
count++;//已存储的图书数量加1
printf("录入成功!\n");
}
/**
* 排序
*/
void sort(){
int i, j;
struct book temp;//用于交换的临时变量
//冒泡排序
for(i = 0; i < count - 1; i++){
for(j = 0; j < count - i - 1; j++){
if(strcmp(books[j].id, books[j+1].id) > 0){//按登录号升序排列
temp = books[j];
books[j] = books[j+1];
books[j+1] = temp;
}
}
}
printf("排序成功!\n");
}
/**
* 保存数据
*/
void save(){
FILE* fp;
int i;
fp = fopen("books.txt", "w");//打开文件
if(fp == NULL){
printf("打开文件失败!\n");
return;
}
//将图书信息写入文件
for(i = 0; i < count; i++){
fprintf(fp, "%s %s %s %s %s %s %.2f\n", books[i].id, books[i].name, books[i].author, books[i].category, books[i].publisher, books[i].publish_year, books[i].price);
}
fclose(fp);//关闭文件
printf("保存成功!\n");
}
/**
* 打开文件
*/
void open(){
FILE* fp;
char line[200];
fp = fopen("books.txt", "r");//打开文件
if(fp == NULL){
printf("打开文件失败!\n");
return;
}
//读取文件内容并输出
while(fgets(line, 200, fp) != NULL){
printf("%s", line);
}
fclose(fp);//关闭文件
}
/**
* 显示已存储的图书信息
*/
void show(){
int i;
if(count == 0){//没有存储任何图书信息
printf("没有存储任何图书信息!\n");
return;
}
printf("登录号\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n");
//输出已存储的图书信息
for(i = 0; i < count; i++){
printf("%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n", books[i].id, books[i].name, books[i].author, books[i].category, books[i].publisher, books[i].publish_year, books[i].price);
}
}