当前位置: 首页 > news >正文

基于C++语言实现图书管理系统

代码功能分析

该程序是一个简单的图书管理系统,基于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;

}

http://www.jsqmd.com/news/1400146/

相关文章:

  • Navicat激活总失败?用navicat-keygen-tools离线激活,3步拿到序列号和激活码
  • 深圳母婴消费服务行业GEO服务商代理加盟怎么选?2026年本地靠谱推荐指南 - 小随科技
  • 扬州市仪征市GEO服务商代理加盟靠谱推荐:2026年国内GEO合作选型与避坑指南 - 科技快讯
  • JX3Toy 上手实测:这套自动化宏脚本,凭什么被玩家称为“减负神器“?
  • WPF Custom control in cs and Generic.xaml
  • 深圳本地连锁品牌如何选择GEO服务商代理加盟?2026年靠谱推荐指南 - 子柔传媒
  • Dialogflow-nodejs-client实战:10分钟实现文本请求与意图识别
  • Painterro高级应用:如何通过saveHandler实现图片保存与服务器交互
  • cpuminer-multi架构探秘:核心组件与JSON-RPC交互原理深度剖析
  • 合肥餐饮连锁品牌如何选择GEO服务商?2026年本地代理加盟靠谱推荐 - 科技快讯
  • 从壁纸纹丝不动到每小时自动换景:dynamic-wallpaper 定时任务实战与避坑记录
  • 泰州靖江市GEO服务商代理加盟靠谱推荐:国内城市合伙人模式怎么选?本地创业者的AI营销入局指南 - 企业新闻快传
  • 泰州市姜堰区GEO服务商代理加盟哪家靠谱?2026年国内GEO代理合作综合推荐指南 - 小随科技
  • Lue开发者指南:3步为终端阅读器添加自定义TTS模型
  • 从源码到实战:OperatorsKit中InjectPoolParty的线程池注入原理
  • 1Panel文件管理实战:Web端操作服务器文件的完整指南
  • 上海本地连锁品牌如何选择GEO服务商?2026年代理加盟靠谱推荐 - 企业新闻快传
  • P3 LED租赁屏实力厂家揭秘:高品质呈现,助力活动精彩升级
  • 多猫家庭化毛膏选购指南:2026年京东健康平台口碑 - 城刊速递
  • 2026换新:广东防水防腐保温二级资质代办费用构成与专业服务公司选择参考 - 卓企推荐
  • 提升Julia代码性能:Tullio.jl多线程与LoopVectorization加速技巧
  • LiquidBounce新手快速上手:5个阶段玩转这款Minecraft增强工具
  • 从零到安全上路:openpilot 驾驶辅助系统 3 阶段上手全流程指南
  • Tullio.jl性能优化指南:避免常见陷阱与瓶颈
  • 2026年扬州宝应县GEO服务商代理加盟哪家靠谱?城市合伙人模式解析 - 小随科技
  • 两种交情对照:知己之交与功利之交
  • 如何快速找到最值得学的深度学习仓库:Top-Deep-Learning 精选清单完整使用指南
  • 公众号排版避坑合集|微信编辑器怎么做:图文还原、字体样式、长图导出讲清楚 - 鹅鹅鹅ee
  • 家电行业解决方案:从微波炉到电磁炉,MEMS红外测温传感器如何提升智能厨电的控温标准
  • 2026年扬州广陵区国内GEO服务商代理加盟哪家靠谱?城市合伙人加盟模式深度解析 - 小随科技