第九章:项目案例——基于MATLAB的图书管理系统

第九章:项目案例——基于MATLAB的图书管理系统

1. 引言

图书管理系统是一种用于管理图书馆中图书信息的软件系统。本文将使用MATLAB开发一个简单的图书管理系统,并详细介绍代码实现过程。我们将利用MATLAB提供的数据结构和文件操作函数来设计和实现系统功能。

2. 思路分析

图书管理系统需要实现以下功能:

  • 添加图书:输入图书信息并将其保存到文件中。
  • 查询图书:根据关键词搜索图书信息。
  • 展示全部图书:显示所有图书的信息。
  • 删除图书:根据图书ID删除指定图书。
  • 修改图书:根据图书ID修改指定图书的信息。

为了实现这些功能,我们将利用MATLAB提供的数据结构“结构体”来存储图书信息,使用文件操作函数来读写文件,并结合循环、条件语句等MATLAB语法实现系统功能。

3. 代码实现

3.1. 添加图书

% 创建图书结构体数组
books = struct('bookID', {
    
    }, 'title', {
    
    }, 'author', {
    
    });

% 提示用户输入图书信息
bookID = input('请输入图书ID:');
title = input('请输入图书标题:', 's');
author = input('请输入图书作者:', 's');

% 将图书信息添加到结构体数组
book = struct('bookID', bookID, 'title', title, 'author', author);
books(end+1) = book;

% 保存图书信息到文件
saveBooks(books);

以上代码中,我们首先创建了一个空的图书结构体数组books,用于存储图书信息。然后,通过提示用户输入图书信息,并将其赋值给对应的变量。之后,我们创建了一个包含输入信息的结构体book,并使用end+1将其添加到books数组的最后位置。最后,我们调用 saveBooks 函数将图书信息保存到文件。

3.2. 查询图书

% 加载图书信息
books = loadBooks();

% 提示用户输入查询关键词
keyword = input('请输入查询关键词:', 's');

% 根据关键词搜索图书信息
foundBooks = [];
for i = 1:length(books)
    if contains(books(i).title, keyword) || contains(books(i).author, keyword)
        foundBooks = [foundBooks, books(i)];
    end
end

% 显示搜索结果
if isempty(foundBooks)
    disp('未找到相关图书。');
else
    for i = 1:length(foundBooks)
        disp(['图书ID:', num2str(foundBooks(i).bookID)]);
        disp(['标题:', foundBooks(i).title]);
        disp(['作者:', foundBooks(i).author]);
        disp('-------------------------');
    end
end

以上代码中,我们首先使用 loadBooks 函数加载之前保存的图书信息。然后,提示用户输入查询关键词,并将其赋值给变量 keyword。之后,我们通过循环遍历 books 数组,并使用 contains 函数判断图书标题或作者中是否包含关键词。匹配成功的图书将被添加到一个新数组 foundBooks 中。最后,根据搜索结果,分别显示搜索到的图书信息或者提示未找到相关图书。

3.3. 展示全部图书

% 加载图书信息
books = loadBooks();

% 显示所有图书信息
for i = 1:length(books)
    disp(['图书ID:', num2str(books(i).bookID)]);
    disp(['标题:', books(i).title]);
    disp(['作者:', books(i).author]);
    disp('-------------------------');
end

以上代码中,我们使用 loadBooks 函数加载图书信息。然后,使用循环遍历 books 数组,并逐个显示图书信息。

3.4. 删除图书

% 加载图书信息
books = loadBooks();

% 提示用户输入要删除的图书ID
bookID = input('请输入要删除的图书ID:');

% 查找图书索引
index = -1;
for i = 1:length(books)
    if books(i).bookID == bookID
        index = i;
        break;
    end
end

% 删除图书并保存到文件
if index ~= -1
    books(index) = [];
    saveBooks(books);
    disp('删除成功!');
else
    disp('未找到该图书ID。');
end

以上代码中,我们首先使用 loadBooks 函数加载图书信息。然后,提示用户输入要删除的图书ID,并将其赋值给变量 bookID。之后,我们通过循环遍历 books 数组,寻找与用户输入的图书ID相匹配的图书索引并记录下来。如果找到了对应的索引,我们则将该索引处的图书从数组中删除,并调用 saveBooks 函数保存图书信息到文件。最后,根据删除成功与否,显示相应的提示信息。

3.5. 修改图书

% 加载图书信息
books = loadBooks();

% 提示用户输入要修改的图书ID
bookID = input('请输入要修改的图书ID:');

% 查找图书索引
index = -1;
for i = 1:length(books)
    if books(i).bookID == bookID
        index = i;
        break;
    end
end

% 修改图书信息
if index ~= -1
    % 提示用户输入新的图书信息
    title = input('请输入新的图书标题:', 's');
    author = input('请输入新的图书作者:', 's');
    
    % 更新图书信息并保存到文件
    books(index).title = title;
    books(index).author = author;
    saveBooks(books);
    
    disp('修改成功!');
else
    disp('未找到该图书ID。');
end

以上代码中,我们首先使用 loadBooks 函数加载图书信息。然后,提示用户输入要修改的图书ID,并将其赋值给变量 bookID。之后,通过循环遍历 books 数组,寻找与用户输入的图书ID相匹配的图书索引并记录下来。如果找到了对应的索引,我们提示用户输入新的图书信息,并将其赋值给变量 titleauthor。接着,我们更新图书结构体数组中对应图书的标题和作者,并调用 saveBooks 函数保存图书信息到文件。最后,根据修改成功与否,显示相应的提示信息。

3.6. 文件操作函数实现

function saveBooks(books)
    save('books.mat', 'books');
end

function books = loadBooks()
    if exist('books.mat', 'file')
        load('books.mat', 'books');
    else
        books = struct('bookID', {
    
    }, 'title', {
    
    }, 'author', {
    
    });
    end
end

为了实现保存和加载图书信息的功能,我们定义了两个辅助函数:saveBooksloadBookssaveBooks 函数用于将图书信息保存到名为 books.mat 的MAT文件中。loadBooks 函数用于从MAT文件中加载图书信息。若文件不存在,则返回一个空的图书结构体数组。

4. 测试结果

经过上述代码实现后,我们可以进行以下一些简单测试:

  • 添加图书:添加几本图书并检查保存到文件的图书信息是否正确。
  • 查询图书:根据关键词进行搜索,并验证搜索结果是否准确。
  • 展示全部图书:检查显示的全部图书信息是否完整。
  • 删除图书:删除某本图书并确认是否从图书列表中消失。
  • 修改图书:修改某本图书的标题和作者,并验证修改是否成功。

5. 完整代码

以下是整合了图书管理系统功能的完整MATLAB代码:

books = struct('bookID', {
    
    }, 'title', {
    
    }, 'author', {
    
    }); % 创建一个空的结构体数组books,用于存储图书信息

while true
    disp('请选择操作:');  % 显示操作菜单
    disp('1. 添加图书');
    disp('2. 查询图书');
    disp('3. 展示全部图书');
    disp('4. 删除图书');
    disp('5. 修改图书');
    disp('0. 退出');
    
    choice = input('请输入选项:'); % 等待用户输入选择的操作

    switch choice
        case 1
            % 添加图书
            bookID = input('请输入图书ID:'); % 获取图书ID
            title = input('请输入图书标题:', 's'); % 获取图书标题,并指定输入类型为字符串
            author = input('请输入图书作者:', 's'); % 获取图书作者,并指定输入类型为字符串

            book = struct('bookID', bookID, 'title', title, 'author', author); % 创建一个新的结构体book,包含图书的ID、标题和作者
            books(end+1) = book; % 将新的图书信息添加到books数组的末尾

            saveBooks(books); % 调用saveBooks函数保存修改后的图书信息到文件
            disp('添加成功!'); % 显示添加成功的消息
            
        case 2
            % 查询图书
            keyword = input('请输入查询关键词:', 's'); % 获取查询关键词

            foundBooks = []; % 创建一个空数组,用于存储匹配到的图书信息
            for i = 1:length(books) % 遍历books数组中的每个图书信息
                if contains(books(i).title, keyword) || contains(books(i).author, keyword) % 判断图书的标题或作者中是否包含关键词
                    foundBooks = [foundBooks, books(i)]; % 如果是,则将该图书信息添加到foundBooks数组中
                end
            end
            
            if isempty(foundBooks) % 判断是否找到匹配的图书信息
                disp('未找到相关图书。'); % 如果没有找到,则显示未找到相关图书的消息
            else
                for i = 1:length(foundBooks) % 遍历foundBooks数组中的每个匹配到的图书信息
                    disp(['图书ID:', num2str(foundBooks(i).bookID)]); % 显示图书ID
                    disp(['标题:', foundBooks(i).title]); % 显示图书标题
                    disp(['作者:', foundBooks(i).author]); % 显示图书作者
                    disp('-------------------------'); % 显示分隔线
                end
            end
            
        case 3
            % 展示全部图书
            if isempty(books) % 判断是否存在图书信息
                disp('暂无图书信息。'); % 如果没有图书信息,则显示暂无图书信息的消息
            else
                for i = 1:length(books) % 遍历books数组中的每个图书信息
                    disp(['图书ID:', num2str(books(i).bookID)]); % 显示图书ID
                    disp(['标题:', books(i).title]); % 显示图书标题
                    disp(['作者:', books(i).author]); % 显示图书作者
                    disp('-------------------------'); % 显示分隔线
                end
            end
            
        case 4
            % 删除图书
            bookID = input('请输入要删除的图书ID:'); % 获取要删除的图书ID
            
            index = -1; % 初始化索引为-1,表示未找到图书ID对应的图书信息
            for i = 1:length(books) % 遍历books数组中的每个图书信息
                if books(i).bookID == bookID % 判断图书ID是否与要删除的图书ID匹配
                    index = i; % 如果匹配,则记录当前索引值
                    break; % 终止循环
                end
            end
            
            if index ~= -1 % 判断是否找到匹配的图书信息
                books(index) = []; % 从books数组中删除匹配到的图书信息
                saveBooks(books); % 调用saveBooks函数保存修改后的图书信息到文件
                disp('删除成功!'); % 显示删除成功的消息
            else
                disp('未找到该图书ID。'); % 如果没有找到匹配的图书信息,则显示未找到该图书ID的消息
            end
            
        case 5
            % 修改图书
            bookID = input('请输入要修改的图书ID:'); % 获取要修改的图书ID
            
            index = -1; % 初始化索引为-1,表示未找到图书ID对应的图书信息
            for i = 1:length(books) % 遍历books数组中的每个图书信息
                if books(i).bookID == bookID % 判断图书ID是否与要修改的图书ID匹配
                    index = i; % 如果匹配,则记录当前索引值
                    break; % 终止循环
                end
            end
            
            if index ~= -1 % 判断是否找到匹配的图书信息
                title = input('请输入新的图书标题:', 's'); % 获取新的图书标题
                author = input('请输入新的图书作者:', 's'); % 获取新的图书作者

                books(index).title = title; % 更新图书信息的标题字段
                books(index).author = author; % 更新图书信息的作者字段
                saveBooks(books); % 调用saveBooks函数保存修改后的图书信息到文件

                disp('修改成功!'); % 显示修改成功的消息
            else
                disp('未找到该图书ID。'); % 如果没有找到匹配的图书信息,则显示未找到该图书ID的消息
            end
            
        case 0
            % 退出
            disp('感谢使用图书管理系统,再见!'); % 显示退出系统的消息
            break; % 跳出while循环,终止程序的执行
            
        otherwise
            disp('无效的选项,请重新输入。'); % 如果选择无效,则显示无效选项的消息
    end
end

function saveBooks(books)
    save('books.mat', 'books'); % 将图书信息保存到文件books.mat中
end

function books = loadBooks()
    if exist('books.mat', 'file') % 判断是否存在图书信息的保存文件
        load('books.mat', 'books'); % 加载图书信息文件
    else
        books = struct('bookID', {
    
    }, 'title', {
    
    }, 'author', {
    
    }); % 创建一个空的结构体数组
    end
end

猜你喜欢

转载自blog.csdn.net/qq_51447496/article/details/132222609
今日推荐