C语言课程设计题目四:实验设备管理系统设计

news2024/9/27 12:09:14
序号系统设计题目进度
1职工信息管理系统设计已完成,在本专栏
2图书信息管理系统设计已完成,在本专栏
3图书管理系统设计已完成,在本专栏
4实验设备管理系统设计已完成,在本专栏
5西文下拉菜单的设计链接
6学生信息管理系统设计链接
7学生成绩管理系统设计链接
8学生选修课程系统设计已完成,课程管理系统
9学生成绩记录簿设计链接
10学生籍贯信息记录簿设计链接
11学生通讯录管理系统设计链接
12职工工作量统计系统设计链接
13销售管理系统设计链接
14成绩管理系统设计链接
15通信录管理系统设计链接
16学生管理系统设计链接
17单项选择题标准化考试系统设计链接
18设计一个简单计算器链接
19编写一万年历系统已完成,在本专栏
20模拟时钟转动程序链接
21完整的学生成绩管理系统链接
22数字加一游戏链接
23聊天机器人链接
24音乐小天才链接

题目四:实验设备管理系统设计

实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
主要功能:

  1. 能够完成对设备的录入和修改。
  2. 对设备进行分类统计。
  3. 设备的破损耗费和遗损处理。
  4. 设备的查询。

要求: 采用二进制文件方式存储数据,系统以菜单方式工作。

在这里插入图片描述

equipmentManagement.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

#define EQUIPMENT_FILE_NAME "equipment.bin"
#define MAX_EQUIPMENT 100

//定义设备结构体
typedef struct {
    int id;               // 设备编号
    char type[50];        // 设备种类
    char name[50];        // 设备名称
    double price;         // 设备价格
    char purchaseDate[20]; // 购入日期
    int isScrapped;       // 是否报废 (0: 否, 1: 是)
    char scrappedDate[20]; // 报废日期
} Equipment;

// 设备的录入
void addEquipment(Equipment* equipment, int* count);
// 设备的修改
void modifyEquipment(Equipment* equipment, int count);
// 设备的分类统计
void classifyEquipment(Equipment* equipment, int count);
// 设备报废信息
void handleEquipmentDamage(Equipment* equipment, int count);
// 展示所有的设备信息
void displayAllEquipment(Equipment* equipment, int count);
// 按编号查询设备
void searchEquipmentById(Equipment* equipment, int count);
// 文件读写
void saveEquipmentToFile(Equipment* equipment, int count);
// 文件读取
void loadEquipmentFromFile(Equipment* equipment, int* count);
// 菜单
void menu();

equipmentManagement.c

#include"equipmentManagement.h"
// 设备的录入
void addEquipment(Equipment* equipment, int* count) {
    if (*count >= MAX_EQUIPMENT) {
        printf("已达到最大容量,无法添加更多设备。\n");
        return;
    }

    Equipment* eq = &equipment[*count];

    printf("请输入设备编号: ");
    scanf("%d", &eq->id);

    printf("请输入设备种类: ");
    scanf("%s", eq->type);

    printf("请输入设备名称: ");
    scanf("%s", eq->name);

    printf("请输入设备价格: ");
    scanf("%lf", &eq->price);

    printf("请输入购入日期 (格式: YYYY-MM-DD): ");
    scanf("%s", eq->purchaseDate);

    eq->isScrapped = 0; // 默认未报废
    eq->scrappedDate[0] = '\0'; // 默认报废日期为空

    (*count)++;
    printf("设备信息录入成功\n");
}
// 设备的修改
void modifyEquipment(Equipment* equipment, int count) {
    int id;
    printf("请输入要修改的设备编号: ");
    scanf("%d", &id);

    int found = 0;
    for (int i = 0; i < count; i++) {
        if (equipment[i].id == id) {
            printf("请选择修改项:\n");
            printf("1. 设备种类\n");
            printf("2. 设备名称\n");
            printf("3. 设备价格\n");
            printf("4. 购入日期\n");
            printf("5. 是否报废\n");
            printf("6. 报废日期\n");
            printf("请选择 (1-6): ");
            int choice;
            scanf("%d", &choice);

            switch (choice) {
            case 1:
                printf("请输入新的设备种类: ");
                scanf("%s", equipment[i].type);
                break;
            case 2:
                printf("请输入新的设备名称: ");
                scanf("%s", equipment[i].name);
                break;
            case 3:
                printf("请输入新的设备价格: ");
                scanf("%lf", &equipment[i].price);
                break;
            case 4:
                printf("请输入新的购入日期 (格式: YYYY-MM-DD): ");
                scanf("%s", equipment[i].purchaseDate);
                break;
            case 5:
                printf("请输入是否报废 (0: 否, 1: 是): ");
                scanf("%d", &equipment[i].isScrapped);
                break;
            case 6:
                if (equipment[i].isScrapped == 1) {
                    printf("请输入新的报废日期 (格式: YYYY-MM-DD): ");
                    scanf("%s", equipment[i].scrappedDate);
                }
                else {
                    printf("设备未报废,无法设置报废日期。\n");
                }
                break;
            default:
                printf("无效的选择,请重新选择。\n");
            }

            printf("设备信息修改成功\n");
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("没有找到符合条件的设备。\n");
    }
}
// 设备的分类统计
void classifyEquipment(Equipment* equipment, int count) {
    char type[50];
    printf("请输入要统计的设备种类: ");
    scanf("%s", type);

    int countOfType = 0;
    for (int i = 0; i < count; i++) {
        if (strcmp(equipment[i].type, type) == 0) {
            countOfType++;
        }
    }

    printf("共有 %d 台 %s 类型的设备。\n", countOfType, type);
    // 输出该类型的所有设备信息
    printf("\n+--------------------------------------------------------------+\n");
    printf("|                       该类所有设备信息                       |\n");
    printf("+--------------------------------------------------------------+\n");
    printf("|编号| 种类 | 名称 | 价格 |  购入日期  | 是否报废 |  报废日期  |\n");
    printf("+--------------------------------------------------------------+\n");

    for (int i = 0; i < count; i++) {
        printf("|%-4d| %-8s | %-8s |%-8.2f|%-10s|%-2d|%-10s|\n",
            equipment[i].id,
            equipment[i].type,
            equipment[i].name,
            equipment[i].price,
            equipment[i].purchaseDate,
            equipment[i].isScrapped,
            equipment[i].scrappedDate);
        printf("+--------------------------------------------------------------+\n");
    }
}
// 设备报废信息
void handleEquipmentDamage(Equipment* equipment, int count) {
    int id;
    printf("请输入要处理的设备编号: ");
    scanf("%d", &id);

    int found = 0;
    for (int i = 0; i < count; i++) {
        if (equipment[i].id == id) {
            if (equipment[i].isScrapped == 0) {
                printf("该设备尚未报废,是否报废 (0: 否, 1: 是): ");
                scanf("%d", &equipment[i].isScrapped);

                if (equipment[i].isScrapped == 1) {
                    printf("请输入报废日期 (格式: YYYY-MM-DD): ");
                    scanf("%s", equipment[i].scrappedDate);
                }
            }
            else {
                printf("该设备已报废。\n");
            }

            printf("设备处理成功\n");
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("没有找到符合条件的设备。\n");
    }
}
// 展示所有设备信息
void displayAllEquipment(Equipment* equipment, int count) {
    if (count == 0) {
        printf("当前没有设备信息。\n");
        return;
    }

    printf("\n+--------------------------------------------------------------+\n");
    printf("|                          所有设备信息                        |\n");
    printf("+--------------------------------------------------------------+\n");
    printf("|编号| 种类 | 名称 | 价格 |  购入日期  | 是否报废 |  报废日期  |\n");
    printf("+--------------------------------------------------------------+\n");

    for (int i = 0; i < count; i++) {
        printf("|%-4d| %-8s | %-8s |%-8.2f|%-10s|%-2d|%-10s|\n",
            equipment[i].id,
            equipment[i].type,
            equipment[i].name,
            equipment[i].price,
            equipment[i].purchaseDate,
            equipment[i].isScrapped,
            equipment[i].scrappedDate);
        printf("+--------------------------------------------------------------+\n");
    }
}
// 按编号查询设备
void searchEquipmentById(Equipment* equipment, int count) {
    int id;
    printf("请输入要查询的设备编号: ");
    scanf("%d", &id);

    int found = 0;
    for (int i = 0; i < count; i++) {
        if (equipment[i].id == id) {
            printf("设备编号: %d\n", equipment[i].id);
            printf("设备种类: %s\n", equipment[i].type);
            printf("设备名称: %s\n", equipment[i].name);
            printf("设备价格: %.2f\n", equipment[i].price);
            printf("购入日期: %s\n", equipment[i].purchaseDate);
            if (equipment[i].isScrapped == 0) {
                printf("是否报废: 否\n");
            }
            else {
                printf("是否报废: 是\n");
                printf("报废日期: %s\n", equipment[i].scrappedDate);
            }
            printf("\n");
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("没有找到符合条件的设备。\n");
    }
}
// 文件读写
void saveEquipmentToFile(Equipment* equipment, int count) {
    FILE* fp = fopen(EQUIPMENT_FILE_NAME, "wb");
    if (fp == NULL) {
        printf("打开设备文件失败。\n");
        return;
    }

    fwrite(equipment, sizeof(Equipment), count, fp);
    fclose(fp);
    printf("设备信息保存成功。\n");
}
// 文件读取
void loadEquipmentFromFile(Equipment* equipment, int* count) {
    FILE* fp = fopen(EQUIPMENT_FILE_NAME, "rb");
    if (fp == NULL) {
        printf("打开设备文件失败。\n");
        return;
    }
    fseek(fp, 0, SEEK_END);
    *count = ftell(fp) / sizeof(Equipment);
    fseek(fp, 0, SEEK_SET);

    fread(equipment, sizeof(Equipment), *count, fp);
    printf("已加载实验设备文件信息。\n");

    fclose(fp);

}

// 主菜单
void menu() {
    int choice;
    int equipmentCount = 0;
    Equipment equipment[MAX_EQUIPMENT];

    loadEquipmentFromFile(equipment, &equipmentCount);

    do {
        printf("\n");
        printf("+---------------------------+\n");
        printf("|        设备管理系统       |\n");
        printf("+---------------------------+\n");
        printf("| 1. 录入设备信息           |\n");
        printf("| 2. 修改设备信息           |\n");
        printf("| 3. 分类统计设备           |\n");
        printf("| 4. 修改设备报废信         |\n");
        printf("| 5. 展示所有的设备信息     |\n");
        printf("| 6. 按编号查询设备信息     |\n");
        printf("| 7. 保存并退出             |\n");
        printf("+---------------------------+\n");
        printf("请选择操作 (1-7): ");
        scanf("%d", &choice);

        switch (choice) {
        case 1:
            addEquipment(equipment, &equipmentCount);
            break;
        case 2:
            modifyEquipment(equipment, equipmentCount);
            break;
        case 3:
            classifyEquipment(equipment, equipmentCount);
            break;
        case 4:
            handleEquipmentDamage(equipment, equipmentCount);
            break;
        case 5:
            displayAllEquipment(equipment, equipmentCount);
            break;
        case 6:
            searchEquipmentById(equipment, equipmentCount);
            break;
        case 7:
            saveEquipmentToFile(equipment, equipmentCount);
            printf("程序退出。\n");
            break;
        default:
            printf("无效的选择,请重新选择。\n");
        }
    } while (choice != 7);
}


test.c

#include"equipmentManagement.h"

int main() {
    menu();
    return 0;
}

在这里插入图片描述

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

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

相关文章

Spring Boot入门全攻略:从环境搭建到项目运行,一步步带你走进高效Java开发的奇妙世界!

Spring Boot 是一个简化 Spring 应用开发的框架&#xff0c;它提供了一种快速、广泛接受的平台&#xff0c;用于创建独立的、生产级的基于 Spring 的应用。以下是一个简单的 Spring Boot 入门教程。 1. 环境准备 Java&#xff1a;确保安装了 Java 8 或更高版本。Maven/Gradle&…

【微信小程序】uniapp中HBuilder修改代码,微信开发者工具没有刷新

方法一&#xff1a;设置-编辑器-按图设置&#xff0c;去掉【修改文件时自动保存】 方法二&#xff1a;开启热加载 方法三&#xff1a;直接HBuilder中用在运行

c语言200例 64

大家好&#xff0c;欢迎来到无限大的频道。 今天带领大家来学习c语言。 题目要求&#xff1a; 设计一个进行候选人的选票程序。假设有三位候选人&#xff0c;在屏幕上输入要选择的候选人姓名&#xff0c; 有10次投票机会&#xff0c;最后输出每个人的得票结果。好的&#xff…

在线聊天室项目(Vue3 + SpringBoot)

目录 项目描述 技术栈选型 项目开发过程文档 项目页面效果 项目源码地址 项目描述 1. 网页在线聊天室&#xff0c;实现了群组系统和好友系统&#xff0c;因此项目可以在公共群组&#xff0c;私有群组和私人之间进行聊天。 2. 项目主要使用Websocket实时通信技术实现聊天&…

Arch Linux 安装步骤

仅做学习记录&#xff0c;有错漏之处欢迎批评指正&#xff01; 上一节&#xff1a;用U盘制作安装镜像 文章目录 二、安装系统2.1 使用U盘启动安装系统2.2 连接网络Wi-Fi方式&#xff08;1&#xff09;开启iwd内置的DHCP客户端&#xff08;2&#xff09;启动iwd并连接Wi-Fi 2.3 …

C++冷门知识点1

1.特殊情况汇总&#xff1a; 负数&#xff0c;空指针&#xff0c;叶节点&#xff0c;INT_MAX和INT_MIN 2.双指针法(快慢指针&#xff0c;头尾指针)&#xff0c;三数指针法(链表逆序那块) 3.一定要注意极端情况 2.e后边可以跟负数&#xff0c;但是不能跟小数 3.string的push_bac…

Navicat数据库管理工具实现Excel、CSV文件导入到MySQL数据库

1.所需要的工具和环境 navicat等第三方数据库管理工具云服务器中安装了 1Panel面板搭建的mysql数据库 2.基于 1Panel启动mysql容器 2.1 环境要求 安装前请确保您的系统符合安装条件&#xff1a; 操作系统&#xff1a;支持主流 Linux 发行版本&#xff08;基于 Debian / Re…

【Wireshark笔记】通过Wireshark检测和分析TCP重传

通过Wireshark检测和分析TCP重传 在网络通信中&#xff0c;TCP重传&#xff08;TCP Retransmission&#xff09;是一种非常重要的现象&#xff0c;特别是在分析网络性能和故障排查时。重传数据包会影响网络性能&#xff0c;导致延迟增加&#xff0c;甚至引发网络拥塞等问题。为…

Java刷题:最小k个数

目录 题目描述&#xff1a; 思路&#xff1a; 具体实现 整体建立一个大小为N的小根堆 通过大根堆实现 完整代码 力扣链接&#xff1a;面试题 17.14. 最小K个数 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 设计一个算法&#xff0c;找出数组中最小的…

【Java 问题】基础——异常

接上文 异常 39.Java 中异常层级结构?40.异常的处理机制&#xff1f;41.三道经典异常处理代码题 39.Java 中异常层级结构? Java的异常是分为多层的。 Throwable 是 Java 语言中所有错误或异常的基类。 Throwable 又分为 Error 和 Exception &#xff0c;其中Error是系统内部…

从‘盲管’到‘智网’,漫途精准构建排水管网监测方案

在城市错综复杂的基础设施网络中&#xff0c;排水管网作为城市的“血脉”&#xff0c;其高效、稳定运行直接关系到城市生活的安宁与财产的安全。面对日益频繁的雨季挑战与气候变化的不确定性&#xff0c;传统“盲管”管理模式已难以满足现代城市治理的需求。 漫途排水管网监测…

本地Docker部署高颜值跨平台照片管理软件lmmich并远程上传图片

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件&#xff0c;并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…

Python新手学习过程记录之基础环境:环境变量、版本区分、虚拟环境

https://img-blog.csdnimg.cn/img_convert/0604267530a515112e51dfc80d0b0ee7.png 刚开始接触Python并学习一门开发语言,可能就会遇到一些棘手的问题,比如电脑上不知不觉已经安装了多个python版本,python3.8/3.10/3.11,甚至一些软件中也集成有python解释器&#xff1b;那么我编…

c语言:知识补充

c语言中编译开始会对#define&#xff0c;#include等内容做预处理&#xff0c;可以用#define写一些简单函数&#xff0c;方便使用 #include <stdio.h> #include <stdlib.h>#define MAX(A, B) ((A) > (B) ? (A) : (B))int main(){printf("%d\n", MAX(…

【Java 集合】List接口 —— ArrayList 与 LinkedList 详解

List接口继承自Collection接口&#xff0c;是单列集合的一个重要分支。 在List集合中允许出现重复的元素&#xff0c;所有的元素是以一种线性方式进行存储的&#xff0c;在程序中可以通过索引&#xff08;类似于数组中的元素角标&#xff09;来访问集合中的指定元素。另外&…

onload_tcpdump命令抓包报错Onload stack [7,] already has tcpdump process

最近碰到Onload 不支持同时运行多个 tcpdump 进程的报错&#xff0c;实际上使用了ps查询当时系统中并没有tcpdump相关进程存在。需要重启服务器本机使用onload加速的相关进程后才能使用onload_tcpdump正常抓包&#xff0c;很奇怪&#xff0c;之前确实没遇到这样的问题&#xff…

生成速度提升70%,32K版本上新,讯飞星火API全新升级!

从“通用”到“真正有用”&#xff0c;大模型应用价值正在释放&#xff01;在C端&#xff0c;AI会议、AI绘图、AI音乐、AI PPT、AI视频等新兴应用层出不穷。在B端&#xff0c;大模型在智能客服、智能营销、知识问答等场景中的应用效果开始显现。 对于绝大多数AI开发者和中小型…

easyExcel使用模版填充excel,合并单元格

一、最终效果 二、制作模版 1、制作填充模版 模版在代码中保存的位置 2、Controller /*** 下载模板*/ RequestMapping(value "exportData") public void exportData(KqKqb kqKqb,HttpServletResponse response, HttpServletRequest request) throws IOExceptio…

大模型时代,程序员能保住头发吗?

10月24日&#xff0c;位于安徽合肥的奥林匹克体育中心&#xff0c;正在举行一场大型科技峰会&#xff0c;奔涌而入的人潮&#xff0c;很快就将主会场挤了个满。这是科大讯飞主办的第六届世界声博会暨2023全球1024开发者节的现场。自2017年以来&#xff0c;这家公司每年都会在10…

如何选择高品质SD卡

如何选择高品质SD卡 SD卡&#xff08;Secure Digital Memory Card&#xff09;是一种广泛使用的存储器件&#xff0c;因其快速的数据传输速度、可热插拔的特性以及较大的存储容量&#xff0c;广泛应用于各种场景&#xff0c;例如在便携式设备如智能手机、平板电脑、运动相机等…