C语言图书管理系统控制台程序

news2024/11/26 8:43:11

程序示例精选
C语言图书管理系统控制台程序
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《C语言图书管理系统控制台程序》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. VS2022
       2. C++

二、使用步骤

代码如下(示例):
typedef struct
{
    char no[20];     // 书号
    char name[20];    // 书名
    char author[20];  // 作者
    float price;      // 价格 
    int count;      //数量 

}book;

book bk[MAXNUM];

int cnt = 0; //图书总数量 

void readFile() //读文件 
{
    FILE* fo;
    fo = fopen("bookdata.txt", "r");
    fscanf(fo, "%d", &cnt);
    int i;
    for (i = 1; i <= cnt; i++)
    {
        fscanf(fo, "%s", bk[i].no);
        fscanf(fo, "%s", bk[i].name);
        fscanf(fo, "%s", bk[i].author);
        fscanf(fo, "%f", &bk[i].price);
        fscanf(fo, "%d", &bk[i].count);

    }
    fclose(fo);
}

void saveFile() //写文件 
{
    FILE* fp;
    fp = fopen("bookdata.txt", "w");
    int i;
    fprintf(fp, "%d\n", cnt);
    for (i = 1; i <= cnt; i++)
    {
        fprintf(fp, "%5s", bk[i].no);
        fprintf(fp, "%10s", bk[i].name);
        fprintf(fp, "%13s", bk[i].author);
        fprintf(fp, "%13f", bk[i].price);
        fprintf(fp, "%13d\n", bk[i].count);
    }
    fclose(fp);
}

void swap(char* src, char* des) //字符串交换
{
    char t[100];
    strcpy(t, src);
    strcpy(src, des);
    strcpy(des, t);
}

void addbook() //新增图书
{
    system("cls");

    char a[20];
    system("cls");
    printf("  ********** 增加图书 **********\n");
    cnt++; //图书的数量+1 

    printf("请输入图书书号: ");
    scanf("%s", a);
    if (search_no(a) != 0) {

        printf("该书已存在,您可以返回主菜单选择修改信息\n");
        cnt--;
        return;
    }
    swap(a, bk[cnt].no);

    printf("请输入图书书名: ");
    scanf("%s", bk[cnt].name);

    printf("请输入图书作者: ");
    scanf("%s", bk[cnt].author);

    printf("请输入图书价格: ");
    scanf("%f", &bk[cnt].price);

    printf("请输入图书数量: ");
    scanf("%d", &bk[cnt].count);

    printf("新增成功!");
}

void sort_menu() // 排序图书菜单 
{
    system("cls");
    printf("请选择排序方式:\n");
    printf("1 书号  ");
    printf("2 书名  ");
    printf("0 退出\n");
    printf("请选择:");
}

void del_menu() //删除图书菜单 
{
    system("cls");
    printf(" ********** 删除图书 **********\n");
    printf(" 请选择删除方式:\n");
    printf(" 1 书号  ");
    printf(" 2 书名  ");
    printf(" 0 退出\n");
    printf("请选择:");
}

void search_menu() // 查找图书菜单 
{
    system("cls");
    printf("  ********** 查找图书 **********\n");
    printf(" 请选择查找方式:\n");
    printf(" 1 书号  ");
    printf(" 2 书名  ");
    printf(" 3 作者  ");
    printf(" 0 退出\n");
    printf("请选择:");
}

void change_menu() //修改图书菜单 
{
    system("cls");
    printf(" ********** 修改图书 **********\n");
    printf(" 请选择修改方式:\n");
    printf(" 1 书号  ");
    printf(" 2 书名  ");
    printf(" 0 退出\n");
    printf(" 请选择:");

}

void print_menu()  // 输出菜单 
{
    system("cls");
    printf("\n********** 图书管理系统 **********\n\n");
    printf("\t1 增加图书\n");
    printf("\t2 修改图书\n");
    printf("\t3 删除图书\n");
    printf("\t4 查找图书\n");
    printf("\t5 图书排序\n");
    printf("\t6 图书显示\n");
    printf("\t7 图书销售\n");
    printf("\t0 退出系统\n\n");
    printf("\t请选择要执行的操作: ");
}

void print_head()  // 打印说明文字 
{
    char id[5] = "序号";
    char no[5] = "书号";
    char name[5] = "书名";
    char author[9] = "作者";
    char price[11] = "价格";
    char count[11] = "数量";
    printf("% 5s", id);
    printf("%10s", no);
    printf("%13s", name);
    printf("%13s", author);
    printf("%13s", price);
    printf("%13s", count);
    printf("\n");
}

void output(int i)  //输出 cnt 为 i 的图书信息 
{
    printf("%10s", bk[i].no);
    printf("%13s", bk[i].name);
    printf("%13s", bk[i].author);
    printf("%15.2f", bk[i].price);
    printf("%15d\n", bk[i].count);
}



int main()
{
    int i, j;
    while (1)
    {
        readFile();
        print_menu();
        int n;
        scanf("%d", &n);
        printf("\n");
        if (n == 0) {
            printf("\t谢谢您的使用!");
            break;
        }
        switch (n)
        {
        case 1: //增加图书 
            addbook();
            break;

        case 2://修改图书 
            change_menu();
            int p;
            scanf("%d", &p);
            if (p == 0)
                break;
            switch (p)
            {
            case 1:
                printf(" 请输入要修改书的书号:");
                char no[20];
                scanf("%s", no);
                j = search_no(no);
                if (j == 0)
                    printf(" 未查找到该书!\n\t");
                else {
                    change(j);
                    printf("修改成功!");
                }

                break;
            case 2:
                printf(" 请输入要修改书的书名:");
                char name[20];
                scanf("%s", name);
                i = search_name(name);
                if (i == 0)
                    printf(" 未查找到该书!\n\t");
                else {
                    change(i);
                    printf("修改成功!");
                }

                break;
            default:
                printf(" 输入错误!\n\t");
            }
            break;

        case 3://删除图书 
            del_menu();
            int p1;
            scanf("%d", &p1);
            if (p1 == 0)
                break;
            switch (p1)
            {
            case 1:
                printf("请输入要删除书的书号:");
                char num[20];
                scanf("%s", num);
                j = search_no(num);
                if (j == 0)
                    printf("未查找到该书!\n");
                else {
                    del(j);
                    printf("删除成功!");
                }

                break;
            case 2:
                printf("请输入要删除书的书名:");
                char name[20];
                scanf("%s", name);
                i = search_name(name);
                if (i == 0)
                    printf("未查找到该书!");
                else {
                    del(i);
                    printf("删除成功!");
                }

                break;
            default:
                printf("输入错误!\n");
            }
            break;

        

        default:
            printf("输入有误,请重新选择:\n\n");
        }
        saveFile();//保存 
        pause();
    }
    system("pause");
    return 0;
}




运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1878941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web支持rtmp,rtsp,flv,h265,mp4,hls,裸流,低延时全功能播放器ovplayer解决方案

Web视频&#xff0c;监控&#xff0c;直播等业务需一个方便快捷在线播放器&#xff0c;在web上支持低延时的视频直播&#xff0c;会议&#xff0c;交互已经是工作必需&#xff0c;像终端播放器有vlc之类&#xff0c;在Web上没有相关全功能的&#xff0c;业务也需要这种功能全面…

Elasticsearch环境搭建|ES单机|ES单节点模式启动|ES集群搭建|ES集群环境搭建

文章目录 版本选择单机ES安装与配置创建非root用户导入安装包安装包解压配置JDK环境变量配置single-node配置JVM参数后台启动|启动日志查看启动成功&#xff0c;访问终端访问浏览器访问 Kibana安装修改配置后台启动|启动日志查看浏览器访问 ES三节点集群搭建停止es服务域名配置…

洛谷 P1548 [NOIP1997 普及组] 棋盘问题

题目 洛谷 P1548 [NOIP1997 普及组] 棋盘问题 [NOIP1997 普及组] 棋盘问题 题目背景 NOIP1997 普及组第一题 题目描述 设有一个 N M N \times M NM 方格的棋盘 ( 1 ≤ N ≤ 100 , 1 ≤ M ≤ 100 ) (1≤N≤100,1≤M≤100) (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正…

Vue结合Element UI的el-table打造加工工序甘特图可视化解决方案

引言 在玻璃加工行业&#xff0c;高效管理切割、磨边、洗、钢化、丝印等复杂工序对于提升生产效率至关重要。本文将介绍如何利用Vue.js框架结合Element UI组件库&#xff0c;自定义实现一个工序甘特图&#xff0c;以可视化展示各道工序的时间线与进度&#xff0c;为生产调度带…

秋招突击——6/28、6.29——复习{数位DP——度的数量}——新作{}

文章目录 引言复习数位DP——度的数量个人实现参考实现 总结 引言 头一次产生了那么强烈的动摇&#xff0c;对于未来没有任何的感觉的&#xff0c;不知道将会往哪里走&#xff0c;不知道怎么办。可能还是因为实习吧&#xff0c;再加上最近复习也没有什么进展&#xff0c;并不知…

浅谈一下VScode如何配置C环境

1.这几天突然发现在VScode写C程序比在DevC效果更好&#xff0c;因为在VScode中写代码有代码补全功能。所以我突然对在VScode中配置C环境变量产生了兴趣。 2.不过在VScode中配置C环境要是按照官方的来配置有点麻烦。 3.我这里有一个直接配置VScode中C环境变量的应用。 前提是…

K8S 集群节点缩容

环境说明&#xff1a; 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233&#xff08;需下线&#xff09;192.168.99.2332C4Gwoker1.23.1720.10.24 1. K8S 集群节点缩容 当集群中有…

8.12 矢量图层面要素单一符号使用十一(短划线渲染边界)

前言 本章介绍矢量图层线要素单一符号中短划线渲染边界的使用说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 短划线渲染边界&#xff08;Outline: Hashed Line&#xff09; Outline系列只画边界&#xff0c;不填充内容以protected_areas.shp为例&#x…

羊了个羊:羊、羊、羊

一、I am me&#xff0c;羊羊羊 英文中的 我就是我&#xff08;I am me&#xff09;&#xff0c;其实就是&#xff1a;羊 羊 羊&#xff0c;为什么会有这么一个结论呢&#xff1f; 请往下看&#xff1a; I&#xff0c;就是羊 am&#xff08;是&#xff09;&#xff0c;也是羊 …

2-20 基于matlab的利用准二维发散喷嘴的特性法给出理想喷嘴的几何形状

基于matlab的利用准二维发散喷嘴的特性法给出理想喷嘴的几何形状。 假设气体从燃烧室排出&#xff0c;燃烧室内没有质量流量。 利用二维喷嘴流动关系&#xff0c;找到一个最佳喉管区域&#xff0c;该区域将在给定环境压力和燃烧室参数下产生最大推力。 该区域将自动设置并输入代…

【Verilog HDL-1】基本、向量、模块

HDL习题 1 阻塞型赋值‘’与非阻塞型赋值‘<’ 阻塞型赋值 b a ba ba&#xff1a;适用于纯组合电路 非阻塞型赋值 b < a b<a b<a&#xff1a;适用与时序逻辑电路 2 wire线型,assign连续赋值 wire a,b,c; assign b a; assign c a;与编程语言不同&#xff…

SpringDataJPA系列(2)Commons核心Repository

SpringDataJPA系列(2)Commons核心Repository Spring Data Commons依赖关系 我们通过 Gradle 看一下项目依赖&#xff0c;了解一下 Spring Data Common 的依赖关系 通过上图的项目依赖&#xff0c;不难发现&#xff0c;数据库连接用的是 JDBC&#xff0c;连接池用的是 HikariC…

Orangepi Zero2使用外设驱动库wiringOP配合定时器驱动SG90舵机

目录 一、舵机的基本认知和硬件接线 1.1 舵机的基本认知&#xff1a; 1.2 硬件接线&#xff1a; 1.3 怎么控制舵机旋转不同的角度&#xff1a; 二、Linux定时器 2.1 定时器setitimer()函数原型和头文件&#xff1a; 2.2 信号处理函数signal()原型和头文件&#xff1a; 2…

thymeleaf+mybatis(本文章用于期末考前10分钟速看)

期末速看 pom&#xff08;了解&#xff09;application.propertiessql代码Controller控制层视图service&#xff1a; 服务层mapper&#xff08;dao&#xff09;&#xff1a;持久层entity层(model层&#xff0c;domain层、 bean)&#xff1a;对应数据库表&#xff0c;实体类 效果…

【C语言】指针剖析(2)

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 一、数组名1.概念2.sizeof和&里面的数组名sizeof& 二、使用指针访问数组三、一维数组传参本质四、指针数组1.概念实例&#xff08;模拟二维数…

【GitOps】使用Google工具JIB实现本地无需安装容器推送镜像,加速SpringCloud项目开发

文章目录 一、效果展示二、简介三、安装Jib插件1、区分环境2、安装插件一、效果展示 本地是window系统,无docker环境,没有任何runtime,使用jib工具打包镜像并推送完成,用时20秒 二、简介 Jib 是 Google 开发的一款开源工具,旨在帮助 Java 开发者更高效地将 Java 应用程…

25届近5年北京交通大学自动化考研院校分析

北京交通大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定教…

vue使用scrollreveal和animejs实现页面滑动到指定位置后再开始执行动画效果

效果图 效果链接&#xff1a;http://website.livequeen.top 介绍 一、Scrollreveal ScrollReveal 是一个 JavaScript 库&#xff0c;用于在元素进入/离开视口时轻松实现动画效果。 ScrollReveal 官网链接&#xff1a;ScrollReveal 二、animejs animejs是一个好用的动画库…

LabVIEW电压电流实时监测系统

开发了一种基于LabVIEW和研华&#xff08;Advantech&#xff09;数据采集卡的电压电流实时监测系统&#xff0c;通过高效的数据采集和处理&#xff0c;为工业和科研用户提供高精度、实时的电压电流监测解决方案。系统采用研华USB-4711A数据采集卡&#xff0c;结合LabVIEW编程环…

【自然资源】国家历史文化名城你知道多少?

【自然资源】国家历史文化名城你知道多少&#xff1f; 中国五千年的历史孕育出了一些因深厚的文化底蕴和发生过重大历史事件而青史留名的城市。根据《中华人民共和国文物保护法》&#xff0c;“历史文化名城”是指保存文物特别丰富&#xff0c;具有重大历史文化价值和革命意义…