void borrow_book(Book bookList[]) { int j; char id[30]; for(int i=0;i<numbooks;i++) { printf("%-5s%-15s\n",bookList[i].id,bookList[i].name); } printf("请输入您想借阅的书号:"); scanf("%s",id); for(int i=0;i<numbooks;i++) { if(strcmp(bookList[i].id,id)==0) { for(j=i;j<numbooks-1;j++) { strcpy(bookList[j].id,bookList[j+1].id); strcpy(bookList[j].name,bookList[j+1].name); bookList[j+1].id[0] = '\0'; bookList[j+1].name[0] = '\0'; } numbooks--; break; } } for(int i=0;i<numbooks;i++) { printf("%-5s%-15s\n",bookList[i].id,bookList[i].name); } }将以上的代码改为还书函数
时间: 2024-03-30 18:38:45 浏览: 46
void return_book(Book bookList[]) {
char id[30];
printf("请输入您要归还的书号:");
scanf("%s", id);
strcpy(bookList[numbooks].id, id);
printf("请输入书名:");
scanf("%s", bookList[numbooks].name);
numbooks++;
printf("还书成功!\n");
for (int i = 0; i < numbooks; i++) {
printf("%-5s%-15s\n", bookList[i].id, bookList[i].name);
}
}
相关问题
void return_book(Book bookList[]) { char id[30]; if(!borrow_book()) { printf("您还未借书!\n"); } printf("请输入要插入的书号:"); scanf("%s", id); printf("请输入书名:"); scanf("%s",borrow[MAX_BOOKS]); // 找到第一个书号比输入序号大的书籍 int i; for (i = 0; i < numbooks; i++) { if (strcmp(id, bookList[i].id) < 0) { break; } } // 插入新的书籍 for (int j = numbooks; j > i; j--) { bookList[j] = bookList[j - 1]; } strcpy(bookList[i].id, id); strcpy(bookList[i].name,borrow[MAX_BOOKS].name); numbooks++; printf("归还成功!\n"); for (int i=0;i<numbooks; i++) { printf("%-5s%-15s\n", bookList[i].id, bookList[i].name); } }怎么改正
此函数有以下问题:
1. 在调用`borrow_book()`函数时,函数应该传入书籍列表参数。
2. 在插入新书籍时,`borrow[MAX_BOOKS]`不是一个有效的Book对象。应该使用一个新的Book对象来存储用户输入的书名。
3. 在将新书籍插入列表中时,应该先判断是否已经达到了最大书籍数量。
4. 在将新书籍插入列表中时,新的书籍应该插入到i的位置,而不是i+1的位置。
下面是修改后的代码:
```
void return_book(Book bookList[]) {
char id[30];
Book newBook;
if(!borrow_book(bookList)) {
printf("您还未借书!\n");
return;
}
printf("请输入要插入的书号:");
scanf("%s", id);
printf("请输入书名:");
scanf("%s", newBook.name);
// 找到第一个书号比输入序号大的书籍
int i;
for (i = 0; i < numbooks; i++) {
if (strcmp(id, bookList[i].id) < 0) {
break;
}
}
// 判断是否已经达到最大书籍数量
if (numbooks == MAX_BOOKS) {
printf("图书馆已满!\n");
return;
}
// 插入新的书籍
for (int j = numbooks; j > i; j--) {
bookList[j] = bookList[j - 1];
}
strcpy(bookList[i].id, id);
strcpy(bookList[i].name, newBook.name);
numbooks++;
printf("归还成功!\n");
for (int i=0;i<numbooks; i++) {
printf("%-5s%-15s\n", bookList[i].id, bookList[i].name);
}
}
```
#pragma once #ifndef __Reader_H #define __Reader_H class Book; class Reader { private: int m_id; char m_name[10]; int m_borrbooknum; Book* m_booklist[10]; public: Reader(int id, char name[]); ~Reader(); void print_readers(); char* get_name(); bool borrow_book(Book* book); bool return_book(Book* book); void show_borbooks(); int get_id(); bool hasbrrbooks(); }; #endif // !__Reader_H如何析构该函数
你可以在类的实现文件中实现析构函数。例如,你可以在名为“Reader.cpp”的文件中添加以下代码:
```c++
#include "Reader.h"
#include "Book.h"
Reader::~Reader()
{
// 释放每本借阅的书籍
for (int i = 0; i < m_borrbooknum; i++)
{
if (m_booklist[i])
{
delete m_booklist[i];
m_booklist[i] = nullptr;
}
}
}
```
在析构函数中,我们遍历读者借阅的书籍列表,并释放每本书的内存。最后,我们将指向该书的指针设置为“nullptr”。
请注意,这里使用了“delete”关键字来释放内存。这是因为我们在读者类中保存了指向书籍对象的指针。当读者对象被销毁时,我们需要释放这些指针所指向的内存,否则会发生内存泄漏。
同时,你还需要在类的头文件中声明析构函数:
```c++
class Reader {
// ...
public:
Reader(int id, char name[]);
~Reader(); // 声明析构函数
// ...
};
```
这样,当你销毁Reader对象时,就会自动调用析构函数来释放内存了。
阅读全文