问题描述定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建。然后,根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上。最后,输出新图书入库后所有图书的信息。输入要求总计n+3行。首先,输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中,书号和书名为字符串类型,价格为浮点数类型。之后输入第n+2行,内容仅为一个整数,代表待入库的新图书的位置序号。最后,输入第n+3行,内容为新图书的信息,书号、书名、价格用空格分隔。输出要求若插入成功:输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中,价格输出保留两位小数。若插入失败:只输出以下提示:抱歉,入库位置非法!
时间: 2023-05-19 19:02:33 浏览: 105
可以使用以下代码实现:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
const int MAXN = 100; // 最大图书数目
struct Book {
string id; // 书号
string name; // 书名
double price; // 价格
};
struct BookList {
Book books[MAXN]; // 图书信息表
int n; // 图书数目
};
// 创建图书信息表
void createBookList(BookList& list) {
cin >> list.n;
for (int i = 0; i < list.n; i++) {
cin >> list.books[i].id >> list.books[i].name >> list.books[i].price;
}
}
// 插入新图书
bool insertBook(BookList& list, int pos, const Book& book) {
if (pos < 0 || pos > list.n) {
return false; // 插入位置非法
}
for (int i = list.n; i > pos; i--) {
list.books[i] = list.books[i-1]; // 后移
}
list.books[pos] = book; // 插入新图书
list.n++; // 图书数目加1
return true;
}
// 输出图书信息表
void printBookList(const BookList& list) {
for (int i = 0; i < list.n; i++) {
cout << list.books[i].id << " " << list.books[i].name << " " << fixed << setprecision(2) << list.books[i].price << endl;
}
}
int main() {
BookList list;
createBookList(list);
int pos;
cin >> pos;
Book book;
cin >> book.id >> book.name >> book.price;
if (insertBook(list, pos, book)) {
printBookList(list);
} else {
cout << "抱歉,入库位置非法!" << endl;
}
return 0;
}
阅读全文