定义一个结构体数据类型,用来描述我校图书馆中图书的基本
信息,信息包含:
统一-书号(不超过13字符)
书名(不超过30字符)
作者(不超过20字符)
出版社(不超过30字符)
出版日期(包括:年、月、日)
价格(精确到分)
假设10本图书的基本信息已经存放到一一个数组中,要求:根
据输入的书号查询该书,若查找到,输出该书的所有基本信
息,若未查到,给出提示信息。
(要求定义以下函数实现相应功能,并在主函数中调用他们)
如果有人能解答一下的话,就真的帮大忙了,谢谢
定义一个结构体数据类型,用来描述学校图书馆中图书的基本信息
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 写了一个管理系统,你可以测试一下!
#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; }
效果如图
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败
- ¥15 树莓派5怎么用camera module 3啊
- ¥20 java在应用程序里获取不到扬声器设备
- ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
- ¥15 Attention is all you need 的代码运行
- ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
- ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
- ¥15 前置放大电路与功率放大电路相连放大倍数出现问题