定义一个结构体数据类型,用来描述我校图书馆中图书的基本
信息,信息包含:
统一-书号(不超过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 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化