定义一个结构体数据类型,用来描述我校图书馆中图书的基本
信息,信息包含:
统一-书号(不超过13字符)
书名(不超过30字符)
作者(不超过20字符)
出版社(不超过30字符)
出版日期(包括:年、月、日)
价格(精确到分)
假设10本图书的基本信息已经存放到一一个数组中,要求:根
据输入的书号查询该书,若查找到,输出该书的所有基本信
息,若未查到,给出提示信息。
(要求定义以下函数实现相应功能,并在主函数中调用他们)
如果有人能解答一下的话,就真的帮大忙了,谢谢
写了一个管理系统,你可以测试一下!
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAX 10
typedef struct book
{
char ID[15];
char BookName[30];
char Writer[20];
char Publish[30];
char date[12];
float price;
}BOOK;
typedef struct Contact
{
BOOK data[MAX];//存放数据
int sz;//有效数据个数
}Contact;
void menu()
{
printf("*********************************\n");
printf("****** 1.add 2.show ******\n");
printf("****** 3.search 0.exit ******\n");
printf("*********************************\n");
}
//增加书籍
void AddBook(Contact* pc)
{
if (pc->sz == MAX)
{
printf("书籍已满\n");
return;
}
printf("输入书号>");
scanf("%s", pc->data[pc->sz].ID);
printf("输入书名>");
scanf("%s", pc->data[pc->sz].BookName);
printf("输入作者>");
scanf("%s", pc->data[pc->sz].Writer);
printf("输入出版社>");
scanf("%s", pc->data[pc->sz].Publish);
printf("输入出版日期>");
scanf("%s", pc->data[pc->sz].date);
printf("输入价格>");
scanf("%f", &pc->data[pc->sz].price);
pc->sz++;
printf("增加书籍成功\n");
}
int FindBook(Contact* pc)
{
assert(pc);
char ID[15] = { 0 };
scanf("%s", ID);
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(ID, pc->data[i].ID) == 0)
{
return i;
}
}
return -1;
}
//查找到后需要打印
void SearchBook(Contact* pc)
{
assert(pc);
printf("输入需要查找的书号>");
int i = FindBook(pc);
if (i != -1)
{
printf("找到书籍如下:\n");
printf("%-15s\t%-30s\t%-20s\t%-30s\t%-10s\t%-5s\t\n", "书号", "书名", "作者", "出版社", "出版日期","价格");
printf("%-15s\t%-30s\t%-20s\t%-30s\t%-10s\t%-5.2f\t\n",
pc->data[i].ID, pc->data[i].BookName, pc->data[i].Writer, pc->data[i].Publish, pc->data[i].date,pc->data[i].price);
}
else
{
printf("该书籍不存在\n");
}
}
void ShowBook(Contact* pc)
{
assert(pc);
if (pc->sz == 0)
{
printf("书架为空\n");
return;
}
printf("%-15s\t%-30s\t%-20s\t%-30s\t%-10s\t%-5s\t\n", "书号", "书名", "作者", "出版社", "出版日期", "价格");
int i = 0;
for (i = 0; i < pc->sz; i++)
{
printf("%-15s\t%-30s\t%-20s\t%-30s\t%-10s\t%-5.2f\t\n",
pc->data[i].ID, pc->data[i].BookName, pc->data[i].Writer, pc->data[i].Publish, pc->data[i].date, pc->data[i].price);
}
}
int main()
{
int input;
Contact con = { 0 };
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
AddBook(&con);
break;
case 2:
ShowBook(&con);
break;
case 3:
SearchBook(&con);
break;
case 0:
printf("退出系统\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
效果如图