我是靠谱客的博主 高高大叔,最近开发中收集的这篇文章主要介绍C语言项目:使用gtest单元测试实现图书管理系统(附源码),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

大一学了大半年的C语言,只学到指针,学得浅。总体下来,感觉自己只学会了hello world。没有实际的项目可以练手,网上的资料又残次不齐,代码没有一个能运行的。
我从0开始,一行一行的实现了图书管理系统,虽然功能简单,但也不少,增删改查,一个不落。
最主要的收货有3点

  • 学会使用googletest单元测试框架,来测试我写的代码
  • 学会了单链表
  • 学会使用visual studio 2019调试代码
    在这里插入图片描述

核心代码

1. 添加图书

void add_menu()
{
    char name[MAX_LENGTH];
    char author[MAX_LENGTH];

    printf("添加图书n");


    printf("请输入书名:n");
    scanf_s("%s", name, (unsigned)_countof(name));
    printf("请输入作者:n");
    scanf_s("%s", author, (unsigned)_countof(author));


    linklist_add(g_book, name, author);
    database_write(g_book);
}

2. 删除图书

void del_menu()
{
    while (TRUE)
    {
        // 清屏
        system("cls");


        printf("删除图书n");

        list_menu(FALSE);

        printf("请输入序号删除图书,按ESC返回上级菜单n");
        int key = _getch();

        // ESC返回
        if (key == 27)
        {
            break;
        }

        // '0' 48
        // '1' 49
        key = key - '0';

        // 数据合法
        if (key > 0 && key < 10) // [1,9]
        {
            linklist_del(g_book, g_page[key].name, g_page[key].author);
        }
    }
}

3. 更新图书


void modify_menu()
{
    printf("修改图书n");


    // 列出所有图书
    list_menu(FALSE);

    // 让用户选择图书序号
    printf("请输入序号修改图书,按ESC返回上级菜单n");

    int key = _getch();
    if (key == 27)
    {
        return;
    }

    key = key - '0';

    // g_book删除旧的图书信息
    if (key > 0 && key < 10)
    {
        linklist_del(g_book, g_page[key].name, g_page[key].author);
    }

    // 提示用户输入书名,作者
    char name[MAX_LENGTH];
    char author[MAX_LENGTH];

    printf("请输入书名:n");
    scanf_s("%s", name, (unsigned)_countof(name));
    printf("请输入作者:n");
    scanf_s("%s", author, (unsigned)_countof(author));


    // g_book插入新的图书信息

    linklist_add(g_book, name, author);
    database_write(g_book);
}

4. 查询图书


void query_menu()
{
    printf("查询图书n");

    // 提示用户输入用户名author查询
    char author[MAX_LENGTH];
    printf("请输入作者查询n");
    printf("作者:");
    scanf_s("%s", author, (unsigned)_countof(author));

    printf("------------查询结果----------n");
    printf("序号tt书名tt作者n");
    int index = 1;

    // 遍历g_book链表
    struct linklist_t* p = g_book;

    while (p->next != NULL)
    {
        // 指向下一个节点
        p = p->next;

        // 如果author跟g_book的author一样,则显示出来
        if (memcmp(p->author, author, strlen(p->author)) == 0)
        {
            printf("%dtt%stt%sn", index, p->name, p->author);
            index++;
        }
    }

    _getch();
}

5. 列出所有图书


void list_menu(int pause)
{
    printf("列出所有图书n");

    printf("序号tt书名tt作者n");

    struct linklist_t* p = g_book;

    memset(g_page, 0, sizeof(g_page));

    int index = 1;
    while (p->next != NULL)
    {
        p = p->next;

        printf("%dtt%stt%sn", index, p->name, p->author);

        memcpy(g_page[index].author, p->author, strlen(p->author) + 1);
        memcpy(g_page[index].name, p->name, strlen(p->name) + 1);

        index++;
    }

    if (pause)
    {
        _getch();
    }
    
}

6. 主逻辑


// 主界面
void mainmenu()
{
    printf("图书管理系统n");
    printf("n");
    printf("1. 添加图书n");
    printf("2. 删除图书n");
    printf("3. 修改图书n");
    printf("4. 查询图书n");
    printf("5. 列出所有图书n");
    printf("n");
    printf("请按数字,选择功能n");
}

void mainloop()
{
    while (true) {
        mainmenu();

        // getchar需要按回车键
        int key = _getch();
        system("cls");
        switch (key) {
        case '1':
            add_menu();
            break;
        case '2':
            del_menu();
            break;
        case '3':
            modify_menu();
            break;
        case '4':
            query_menu();
            break;
        case '5':
            list_menu(TRUE);
            break;
        default:
            break;
        }
        system("cls");
    }
}


int main()
{
    g_book = linklist_init();

    mainloop();
    
    return 0;
}

7. 完整源码下载

源码

最后

以上就是高高大叔为你收集整理的C语言项目:使用gtest单元测试实现图书管理系统(附源码)的全部内容,希望文章能够帮你解决C语言项目:使用gtest单元测试实现图书管理系统(附源码)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部