优化代码#include"reader.h" char *Reader::getname() { return name; } int Reader::getnote() { return number; } void Reader::setname(char na[]) { strcpy(name,na) } void Reader::addreader(int n,char *na) { note=0; number=n; strcpy(name,na); for(int i=0;i<Maxbor;i++) borbook[i]=0; } void Reader::delbook() { note=1; } void Reader::borrowbook(int bookid) { for(int i=0;i<Maxbor;i++) { if(borbook[i]==0) { borbook[i]=bookid; return; } } } int Reader::retbook(int bookid) { for(int i=0;i<Maxbor;i++) { if(borbook[i]==bookid) { borbook[i]=0; return 1; } } return 0; } void Reader::list() { cout<<setw(5)<<number<<setw(10)<<name<<"借书编号:["; for(int i=0;i<Maxbor;i++) { if(borbook[i]==0) cout<<borbook[i]<<" "; cout<<"]"<<endl; } }
时间: 2024-01-18 14:04:56 浏览: 125
优化代码
有几个可以优化的地方:
1. 在 setname 函数中,可以使用 strncpy 代替 strcpy,以防止缓冲区溢出。
2. 在 addreader 函数中,可以使用初始化列表来初始化数据成员,以提高效率。
3. 在 delbook 函数中,可以使用常量来代替魔法数字 1,以提高可读性。
4. 在 borrowbook 函数中,可以使用 std::vector 来代替数组,以提高可扩展性和安全性。
5. 在 retbook 函数中,可以使用 std::find 来查找 bookid,以提高效率。
6. 在 list 函数中,可以使用 std::for_each 和 lambda 表达式来简化循环的代码。
下面是优化后的代码:
```c++
#include "reader.h"
#include <algorithm>
#include <iomanip>
Reader::Reader() : note(0), number(0)
{
std::fill_n(borbook, Maxbor, 0);
}
char* Reader::getname()
{
return name;
}
int Reader::getnote()
{
return note;
}
void Reader::setname(const char* na)
{
strncpy(name, na, Maxname - 1);
name[Maxname - 1] = '\0';
}
void Reader::addreader(int n, const char* na)
{
note = 0;
number = n;
setname(na);
}
void Reader::delbook()
{
note = DelNote;
}
void Reader::borrowbook(int bookid)
{
borbook.push_back(bookid);
}
int Reader::retbook(int bookid)
{
auto it = std::find(borbook.begin(), borbook.end(), bookid);
if (it != borbook.end())
{
borbook.erase(it);
return 1;
}
return 0;
}
void Reader::list()
{
std::cout << std::setw(5) << number << std::setw(10) << name << "借书编号:[";
std::for_each(borbook.begin(), borbook.end(), [](int id) {
std::cout << id << " ";
});
std::cout << "]" << std::endl;
}
```
阅读全文