代码功能分析

该程序是一个简单的图书管理系统,基于C++实现,采用结构体数组存储图书信息,支持添加、删除、查找、清空、修改和显示图书功能。以下是核心模块的说明和优化建议:

关键功能模块

数据结构

  • Person结构体存储单本图书信息(书名、价格、编号)。
  • Arraybooks结构体管理图书数组,包含最大容量MAX和当前数量length

功能函数

  • addBooks: 添加新图书,检查数组是否已满。
  • dalateBooks: 按书名删除图书,移动后续元素覆盖被删项。
  • isExist: 检查书名是否存在,返回索引或-1。
  • CheckBook: 按书名查找并输出图书信息。
  • cleanbooks: 清空图书数组(重置length)。
  • changebooks: 按书名修改图书信息。
  • showbooks: 遍历输出所有图书信息。

交互逻辑

  • main函数通过while循环和switch实现菜单驱动。
  • mean函数打印功能菜单。

代码实现

#include <iostream>
#include <string>
 
 
using namespace std;
#define MAX 1000
struct Person {
    string name;
    int price;
    string number;
};
 
struct Arraybooks {
    struct Person book[MAX];
    int length;
};
 
void mean();
int outSystem();
void addBooks(Arraybooks* abs);
void dalateBooks(Arraybooks* abs);
int isExist(Arraybooks* abs, string name);
void CheckBook(Arraybooks* abs);
void cleanbooks(Arraybooks* abs);
void showbooks(Arraybooks* abs);
void changebooks(Arraybooks* abs);
 
int main() {
    int x;
    Arraybooks abs;
    abs.length = 0;
 
    while (true) {
        mean();
        cin >> x;
        switch (x) {
        case 1:
            addBooks(&abs);
            break;
        case 2:
            dalateBooks(&abs);
            break;
        case 3:
            CheckBook(&abs);
            break;
        case 4:
            cleanbooks(&abs);
            break;
        case 5:
            changebooks(&abs);
            break;
        case 6:
            showbooks(&abs);
            break;
        case 0:
            outSystem();
            break;
 
 
        }
 
 
    }
    return 0;
}
void addBooks(Arraybooks* abs) {
    if (abs->length >= MAX) {
        cout << "书籍已满" << endl;
    }
    else {
        string name;
        cout << "请输入书籍的名字: " << endl;
        cin >> name;
        abs->book[abs->length].name = name;
 
 
        int price;
        cout << "请输入书的价格: " << endl;
        cin >> price;
        abs->book[abs->length].price = price;
 
 
        string num;
        cout << "请输入书的编号: " << endl;
        cin >> num;
        abs->book[abs->length].number = num;
 
 
        abs->length++;
 
 
        cout << "添加成功" << endl;
    }
}
 
 
int isExist(Arraybooks* abs, string name) {
    for (int i = 0; i < abs->length; ++i) {
        if (abs->book[i].name == name) {
            return i;
        }
    }
    return -1;
}
 
void dalateBooks(Arraybooks* abs) {
    cout << "请输入你要删除的书籍" << endl;
    string name;
    cin >> name;
 
    int ret = isExist(abs, name);
    if (ret != -1 && ret != abs->length - 1) {
          abs->book[ret].name     = abs->book[ret + 1].name;
          abs->book[ret].number   = abs->book[ret + 1].number;
          abs->book[ret].price    = abs->book[ret + 1].price;
        for (int i = ret + 2; i < abs->length; ++i) {
          abs->book[i - 1].name   = abs->book[i].name;
          abs->book[i - 1].number = abs->book[i].number;
          abs->book[i - 1].price  = abs->book[i].price;
          abs->length--;
        }
        cout << "删除成功" << endl;
    }
    else if(ret != 1 && ret == abs->length - 1) {
        abs->length--;
    }
    else {
        cout << "查无此书" << endl;
    }
}
 
void CheckBook(Arraybooks* abs) {
    cout << "输入你要查找的书籍" << endl;
    string name;
    cin >> name;
 
    int ret = isExist(abs, name);
    if (ret != -1) {
        cout << "书名为:" << abs->book[ret].name << "\t";
        cout << "书价格为:" << abs->book[ret].price << "\t";
        cout << "书编号为:" << abs->book[ret].number << endl;
    }
    else {
        cout << "查无此书" << endl;
    }
}
 
void cleanbooks(Arraybooks* abs) {
    abs->length = 0;
    cout << "清理完成" << endl;
 
}
 
void changebooks(Arraybooks* abs) {
    cout << "输入你要修改的图书" << endl;
    string name;
    cin >> name;
    int ret = isExist(abs, name);
    if (ret != -1) {
        cout << "请输入名字: " << endl;
        string name;
        cin >> name;
        abs->book[ret].name = name;
 
        cout << "请输入价格: " << endl;
        int price;
        cin >> price;
        abs->book[ret].price = price;
 
        cout << "请输入编号: " << endl;
        string num;
        cin >> num;
        abs->book[ret].number = num;
    }
    else {
        cout << "查无此书" << endl;
    }
 
}
 
void showbooks(Arraybooks* abs) {
    if (abs->length == 0) {
        cout << "书架为空" << endl;
    }
    else {
        for (int i = 0; i < abs->length; ++i) {
            cout << "书籍名字 : " << abs->book[i].name << "\t";
            cout << "书籍价格 : " << abs->book[i].price << "\t";
            cout << "书籍编号 : " << abs->book[i].number << endl;
        }
    }
}
 
int outSystem() {
    cout << "欢迎下次使用" << endl;
    return 0;
}
 
 
void mean() {
    cout << "*************************" << endl;
    cout << "*******1、加入图书********" << endl; //OK
    cout << "*******2、按名删除图书*****" << endl;//OK
    cout << "*******3、按名查找图书*****" << endl;//OK
    cout << "*******4、清空图书架*******" << endl;//OK
    cout << "*******5、修改图书名*******" << endl;
    cout << "*******6、显示图书架*******" << endl;//OK
    cout << "*******0、退出系统*********" << endl; //OK
    cout << "**************************" << endl;
 
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐