MAC编程的C++图书管理系统----数据结构作业

//图书信息管理系统
//系统需求:用C++来实现一个图书信息管理系统,包括以下6个具体功能:
//1.查找:根据指定的ISBN或书名查找相应图书的有关信息,并返回该图书在表中的位置序号。
//2.插入:插入一种新的图书信息。
//3.删除:删除一种图书信息。
//4.修改:根据指定的ISBN,修改该图书的价格。
//5.排序:将图书按照价格由底到高进行排序。
//6.计数:统计图书表中的图书数量。
//7.显示所有图书的信息。
#include <iostream>
#include <fstream>//文件输入/输出头函数
#include <unistd.h>
#include<string>
#define MAX 10000 //限制图书表最大长度
using namespace std;
//设计图书信息管理系统菜单界面
void MeunInterface()
{
    cout<<"********************************************"<<endl;
    cout<<"*****    1、查找图书的信息               *****"<<endl;
    cout<<"*****    2、插入新图书信息               *****"<<endl;
    cout<<"*****    3、删除图书的信息               *****"<<endl;
    cout<<"*****    4、修改图书的价格               *****"<<endl;
    cout<<"*****    5、对图书进行排序               *****"<<endl;
    cout<<"*****    6、统计图书的总量               *****"<<endl;
    cout<<"*****    7、显示所有图书信息             *****"<<endl;
    cout<<"*****    8、插入book.txt文件中的图书信息  *****"<<endl;
    cout<<"*****    0、退出图书信息管理系统          *****"<<endl;
    cout<<"********************************************"<<endl;
}
//图书信息定义
struct Book
{
    string ISBN;//图书编号ISBN
    string name;//图书名字
    float price;//图书价格

};

//图书管理系统结构体
struct AddressBooks
{
    struct Book BookArray[MAX];//图书管理系统中保存的图书数组
    int Size;//图书管理系统中图书数量
    Book *elem;//存储空间基地址
};

//判断是否存在查询的书名,存在返回在数组中的索引位置,不存在返回-1
int isExist1(AddressBooks * abs,string name)
{
    for (int i = 0; i < abs->Size; i++) {
        if (abs->BookArray[i].name == name)
        {
            return i;//找到返回图书在数组中的下标编号
        }
    }
    return -1;//未找到返回-1
}

//判断是否存在查询的ISBN,存在返回在数组中的索引位置,不存在返回-1
int isExist2(AddressBooks * abs,string ISBN)
{
    for(int i=0;i<abs->Size;i++)
    {
        if(abs->BookArray[i].ISBN==ISBN)
        {
            return i;//找到返回图书在数组中的下标编号
        }
    }
    return -1;//未找到返回-1
}

//1.查找图书信息
void findBook(AddressBooks * abs) {
    cout << "请输入您要查找的图书信息" << endl;
    cout << "1---通过书名查找" << endl;
    cout << "2---通过ISBN查找" << endl;
    int i = 0;
    cin>>i;
    if (i == 1)
    {
        cout<<"请输入书名:"<<endl;
        string name;
        cin>>name;
        int a = isExist1(abs, name); //定义一个常量a来判断图书是否存在
        //判断指定的书名是否存在图书表中
        if (a != -1)//找到图书,输出图书内容
        {
            cout << "ISBN:" << abs->BookArray[a].ISBN << "\t";
            cout << "书名:" << abs->BookArray[a].name << "\t";
            cout << "定价:" << abs->BookArray[a].price << endl;
        } else//未找到图书
        {
            cout << "未找到图书信息" << endl;
        }
    }
    else if(i==2)
    {
        cout<<"请输入ISBN:"<<endl;
        string ISBN;
        cin >> ISBN;
        int b = isExist2(abs, ISBN); //定义一个常量b来判断图书ISBN是否存在
        //判断指定的书名是否存在图书表中
        if (b != -1)//找到图书,输出图书内容
        {
            cout << "ISBN:" << abs->BookArray[b].ISBN << "\t";
            cout << "书名:" << abs->BookArray[b].name << "\t";
            cout << "定价:" << abs->BookArray[b].price << endl;
        }
        else//未找到图书
        {
            cout << "未找到图书信息" << endl;
        }
    }
    else
    {
        cout<<"输入有误,请重新输入"<<endl;
    }
}


//2.插入新图书信息
void addBook(AddressBooks * abs)
{
    //判断图书表是否满了
    if(abs->Size == MAX)
    {
        cout<<"图书表已满,无法添加"<<endl;
        return;
    }
    else
    {
        //输入添加的图书编号ISBN
        string ISBN;
        cout<<"请输入图书编号:"<<endl;
        cin>>ISBN;
        abs->BookArray[abs->Size].ISBN = ISBN;//从图书管理系统中保存图书的数组中添加图书编号

        //输入添加的图书名字
        string name;
        cout<<"请输入图书名字:"<<endl;
        cin>>name;
        abs->BookArray[abs->Size].name = name;//从图书管理系统中保存图书的数组中添加图书名字

        //输入图书价格
        float price;
        cout<<"请输入图书价格:"<<endl;
        cin>>price;
        abs->BookArray[abs->Size].price = price;//从图书管理系统中保存图书的数组中添加图书价格

        //更新图书表中的图书数量
        abs->Size++;
        system("clear");//清屏操作
        cout<<"添加成功"<<endl;
    }
}

//3.删除图书的信息
void deleteBook(AddressBooks * abs)
{
    cout<<"请输入您要删除的书名"<<endl;
    string name;
    cin>>name;
    int a= isExist1(abs,name);//定义一个常量a来判断图书是否存在
    if(a!=-1)//找到图书
    {
        for(int i=a;i<abs->Size;i++) //把图书所在的数组位置赋给i,i小于图书表的长度
        {
            abs->BookArray[i]=abs->BookArray[i+1];//被删除元素之后的元素前移(数据前移)
        }
        abs->Size--; //删除后表长-1
        cout<<"删除成功"<<endl;
    }
    else
    {
        cout<<"未找到图书信息"<<endl;
    }
}
//4.修改图书的价格:根据指定的ISBN,修改该图书的价格。
void modifyBook(AddressBooks * abs)
{
    cout << "请输入您要修改的图书的ISBN" << endl;
    string ISBN;
    cin >> ISBN;
    int a = isExist2(abs, ISBN); //定义一个常量a来判断图书ISBN是否存在
    if(a!=-1)
    {
        //输入修改的图书价格
        float price;
        cout<<"请输入图书价格:"<<endl;
        cin>>price;
        abs->BookArray[a].price = price;//从图书管理系统中保存图书的数组中添加图书价格

        cout<<"修改成功"<<endl;
    }
    else
    {
        cout<<"未找到图书信息"<<endl;
    }

}

//5.对图书进行排序:将图书按照价格由底到高进行排序。
void orderBook(AddressBooks * abs)
{
    for(int i=0;i<abs->Size;i++)
    {
        for (int j =i+1; j < abs->Size; ++j)
        {
            if (abs->BookArray[i].price > abs->BookArray[j].price)
            {
                  Book temp;//定义一个空的图书结构体
                  temp = abs->BookArray[i];
                  abs->BookArray[i] = abs->BookArray[j];
                  abs->BookArray[j] = temp;
            }
        }
    }
    cout<<"排序成功"<<endl;
}

//6.统计图书的数量
int statBook(AddressBooks * abs)
{
        cout<<"图书表中当前图书数量为:"<<abs->Size<<endl;
}

//7.显示所有图书信息
void showBook(AddressBooks *abs)
{
    //判断图书表是否为空
    if (abs->Size==0)  //图书表为空
    {
        cout<<"当前图书表为空"<<endl;
    }
    else
    {
        for(int i=0;i<abs->Size;i++) //若图书表不为空就遍历图书管理系统中保存图书的数组
        {
            cout<<"ISBN:"<<abs->BookArray[i].ISBN<<"\t";
            cout<<"书名:"<<abs->BookArray[i].name<<"\t";
            cout<<"定价:"<<abs->BookArray[i].price<<endl;
        }
    }
}

int main()
{
    AddressBooks abs;//创建图书信息结构体变量
    abs.Size=0;//初始化图书表中的图书数量
    int select=0;//创建一个用户选择输入的变量
    while(true)
    {

        MeunInterface();//调用图书信息管理系统菜单界面函数
        cin>>select;//用户输入要选择的菜单选项
        switch(select)
        {
            case 1:// 1、查找图书的信息
            findBook(&abs);
            break;
            case 2://2、插入新图书信息
            addBook(&abs);
            break;
            case 3:// 3、删除图书的信息
            deleteBook(&abs);
            break;
            case 4://4、修改图书的信息
            modifyBook(&abs);
            break;
            case 5://5、对图书进行排序
            orderBook(&abs);
            break;
            case 6:// 6、统计图书的总量
            statBook(&abs);
            break;
            case 7://7.显示图书的信息
            showBook(&abs);
            break;
            case 8://8.插入book.txt文件中的图书信息
            {//图书表信息输入
              int  i = 0;
              string head_1, head_2, head_3;
              abs.elem = new Book[MAX];
                if (!abs.elem)
                {
                    cout<<"图书表容量已满,不能再添加新图书了"<<endl;
                }
                abs.Size = 0;
                fstream file;//
                file.open("/Users/liwanyu/Desktop/book/book.txt",ios::in);//ios::in文件以输出方式打开(文件数据输出到内存)
                if (!file)
                {
                    cout << "错误!未找到文件!" << endl;
                }
                file >> head_1 >> head_2 >> head_3;
                while (!file.eof())//判断是否读到文件结尾
                {
                    file >> abs.BookArray[i].ISBN >> abs.BookArray[i].name >> abs.BookArray[i].price;
                    i++;
                }
                cout << "输入 book.txt 信息完毕"<<endl;
                abs.Size = i;
                file.close();
            }
            break;
            case 0://0.退出图书信息管理系统
                 system("clear");//清空菜单栏
                 //system("pause");//语句执行系统环境中的pause命令,冻结屏幕,用户按任意键结束
                 //mac系统没有system("pause");需要加头文件include<unistd.h>将system("pause")改成system("clear")
                 cout<<"欢迎下次使用"<<endl;
                return 0;
                break;
        }

    }
    return 0;
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android C 高级编程是指在Android开发中使用C语言进行高级编程的技术。而使用NDK(Native Development Kit)可以使开发者在Android应用中使用C/C++等本地语言进行编程。 NDK是一个工具集,它允许开发者在Android应用中嵌入本地代码,并且提供了一系列的开发工具和库,以便开发者能够在Android应用中使用C/C++进行高级编程。使用NDK可以提供更高的性能和更低的内存占用,适用于需要处理大量数据和高性能计算的应用场景。 在使用NDK进行Android C高级编程时,可以使用PDF(Portable Document Format)作为文档格式,以便对代码和项目进行更好的管理和文档化。在NDK的开发过程中,可以使用PDF文档记录关键的设计思路、代码逻辑、接口定义等信息,以方便团队协作和后续的维护。 使用NDK进行Android C高级编程的步骤大致如下: 1. 准备开发环境:安装NDK并配置好开发环境,包括设置NDK的路径和编译器等。 2. 创建新项目:使用Android Studio创建一个新的Android项目,并在项目中引入NDK的支持。 3. 编写C代码:使用C/C++语言编写需要调用的函数、算法或者数据结构等代码,并将其保存在适当的目录下。 4. 编写JNI接口:在生成的Java代码中,使用JNI(Java Native Interface)定义对应C代码的接口,以便在Java层调用C代码。 5. 编译和构建:使用NDK的工具集进行编译和构建,将C代码编译成适合Android平台使用的库文件(.so文件)。 6. 在Java代码中调用C代码:在需要调用C代码的地方,使用JNI接口调用对应的C函数,以实现和C代码的交互和调用。 使用PDF文档进行文档化可以帮助开发者更好地组织和管理代码、接口和设计文档等,方便后续的代码维护和项目协作。同时,也可以作为项目的参考文档,方便其他开发人员了解和使用项目。 ### 回答2: Android C 高级编程是针对使用NDK(Native Development Kit)的一种高级编程技术。NDK是Android开发工具包中的一个工具,允许开发者使用C、C++或其他本地编程语言编写Android应用程序的部分或全部代码。 使用NDK进行Android C高级编程有许多优点。首先,NDK提供了更高的性能和更好的控制权,特别是在处理图形、音频和计算密集型任务时。通过使用本地编程语言,开发者能够更好地利用底层系统资源,提高应用程序的执行效率和速度。 其次,NDK还提供了对现有C和C++库的支持。这意味着开发者可以使用许多已经存在的库和功能来加快开发进程。无需重新编写现有的代码,直接使用NDK与这些库进行集成即可。 在使用NDK进行Android C高级编程时,一种常见的用途是开发游戏。使用C或C++编写游戏代码可以获得更好的性能和更低的延迟,这对于游戏的流畅运行至关重要。 此外,开发者还可以使用NDK为现有的Java应用程序添加本地本地扩展。这样可以通过使用C或C++编写某些关键组件,以改进应用程序的性能或添加新的功能。 总的来说,通过使用NDK进行Android C高级编程开发者可以获得更高的性能、更好的控制权和更好的资源利用。无论是开发游戏还是优化应用程序,使用NDK都是提高性能和扩展功能的好方法。通过阅读相关的PDF文档,开发者可以更深入地了解如何使用NDK进行Android C高级编程。 ### 回答3: Android NDK (Native Development Kit) 是一个用于开发 Android 应用程序的工具集,它使开发者能够使用 C 或 C++ 编写原生代码,并将其与 Java 编写的 Android 应用程序一起使用。使用 NDK 可以达到增加性能、复用现有的 C/C++ 代码以及访问底层硬件等目的。 在 Android C 高级编程中,使用 NDK 商用 PDF 库可以实现在 Android 应用程序中处理 PDF 文件的功能。PDF 文件是一种常见的电子文档格式,使用 PDF 库可以读取、编辑和生成 PDF 文件。 使用 NDK 进行 PDF 处理的一般步骤如下: 1. 集成 PDF 库:首先,需要将商用的 PDF 库 (.so 文件) 集成到 Android 项目中。可以通过在 Android.mk 文件中添加相关配置,确保 .so 文件正确地被编译和链接到应用程序中。 2. 创建 JNI 接口:为了在 Java 层与 C/C++ 层之间进行通信,需要创建 JNI (Java Native Interface) 接口。可以在创建 JNI 方法时使用 JNAerator 或者手动编写 JNI 代码,以便在 Java 层调用 C/C++ 的功能。 3. 对 PDF 文件进行处理:在 C/C++ 层,可以使用 PDF 库提供的功能来处理 PDF 文件。例如,可以使用库提供的函数来解析、渲染、添加标注、提取内容等。 4. 将数据返回给 Java 层:在 C/C++ 层处理完之后,可以通过 JNI 接口将处理后的数据返回给 Java 层。这样就可以在 Android 应用程序中显示或者存储处理后的 PDF 文件。 需要注意的是,在使用商用 PDF 库时,需要遵循相关的许可协议,并确保在开发和分发过程中合法使用该库。 总之,通过使用 NDK 和商用 PDF 库,可以使 Android 应用程序具有处理 PDF 文件的高级编程能力。同时,开发者需要具备 C/C++ 编程和 JNI 接口的使用经验,以便顺利地进行开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lune_one

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值