有图书管理信息系统,现有图书的信息如下:
一本图书的信息包括:图书编号(BookNo),书名(BookName),总册数(Total),借出数(Lend),价格(Value),利用结构体实现以下要求: 1. 输入这5本图书信息; 2. 输出5本图书信息及每本图书剩余在库的册数,要求:按照在库册数从多到少输出,排序可选择冒泡、选择、快速排序等方式; 3. 实现一个查找函数ValueSearch(),按照图书名查找图书库中的图书价格,如果找到,则返回该图书的价格,如果没有找到,则输出“在书库中未找到”,返回0; 4. 利用查找函数ValueSearch()查找“大学计算机”和“大学物理”两本图书,并输出函数返回的相应的结果。
解题如下:
#include "stdio.h"
#include "string.h"
#define N 5
// 定义结构体
struct Book{
int BookNo;
char BookName[20];
int Total;
int Lend;
int Have;
float Value;
}books[N];
// 输入书本
void InputBooks(){
printf("~~~~~~~~请输入书本的信息~~~~~~~~\n",N);
printf("编号 书名 总数 借出 价格\n");
for(int i=0;i<N;i++){
scanf("%d\t",&books[i].BookNo);
scanf("%s\t",books[i].BookName);
scanf("%d\t",&books[i].Total);
scanf("%d\t",&books[i].Lend);
scanf("%f",&books[i].Value);
books[i].Have=books[i].Total - books[i].Lend;
}
};
// 书本排序
void SortBooks(){
for(int i=0;i<N;i++){
for(int j=0;j<N-i-1;j++){
if(books[j].Have<books[j+1].Have){
struct Book temp = books[j];
books[j] = books[j+1];
books[j+1] = temp;
}
}
}
};
// 输出书本
void PrintBooks(){
printf("~~~~~~~~输入的书本信息为~~~~~~~~\n",N);
printf("编号 书名 总数 借出 剩余 价格\n");
for(int j=0;j<N;j++){
printf("%-5d",books[j].BookNo);
printf("%-7s",books[j].BookName);
printf("%-5d",books[j].Total);
printf("%-5d",books[j].Lend);
printf("%-5d",books[j].Have);
printf("%.2f\n",books[j].Value);
}
};
// 查找书本
void ValueSearch(char *BookName){
int isHave=0;
for(int i=0;i<N;i++){
if(strcmp(books[i].BookName,BookName)==0){
printf("查找到%s,价格为%.2f元\n",books[i].BookName,books[i].Value);
isHave=1;
break;
}
};
if(isHave==0){
printf("未查询到书本%s\n",BookName);
}
};
int main(){
InputBooks();
SortBooks();
PrintBooks();
printf("~~~~~~~~~~~查找书本~~~~~~~~~~~\n",N);
char BookName1[20];
printf("请输入要查找的书名:");
rewind(stdin);
scanf("%s",BookName1);
ValueSearch(BookName1);
printf("~~~~~~~~~~~查找书本~~~~~~~~~~~\n",N);
char BookName2[20];
printf("请输入要查找的书名:");
rewind(stdin);
scanf("%s",BookName2);
ValueSearch(BookName2);
return 0;
};
在XCode上运行结果如下: