序号 | 系统设计题目 | 进度 |
---|---|---|
1 | 职工信息管理系统设计 | 已完成,在本专栏 |
2 | 图书信息管理系统设计 | 已完成,在本专栏 |
3 | 图书管理系统设计 | 已完成,在本专栏 |
4 | 实验设备管理系统设计 | 已完成,在本专栏 |
5 | 西文下拉菜单的设计 | 链接 |
6 | 学生信息管理系统设计 | 链接 |
7 | 学生成绩管理系统设计 | 链接 |
8 | 学生选修课程系统设计 | 已完成,课程管理系统 |
9 | 学生成绩记录簿设计 | 链接 |
10 | 学生籍贯信息记录簿设计 | 链接 |
11 | 学生通讯录管理系统设计 | 链接 |
12 | 职工工作量统计系统设计 | 链接 |
13 | 销售管理系统设计 | 链接 |
14 | 成绩管理系统设计 | 链接 |
15 | 通信录管理系统设计 | 链接 |
16 | 学生管理系统设计 | 链接 |
17 | 单项选择题标准化考试系统设计 | 链接 |
18 | 设计一个简单计算器 | 链接 |
19 | 编写一万年历系统 | 已完成,在本专栏 |
20 | 模拟时钟转动程序 | 链接 |
21 | 完整的学生成绩管理系统 | 链接 |
22 | 数字加一游戏 | 链接 |
23 | 聊天机器人 | 链接 |
24 | 音乐小天才 | 链接 |
题目四:实验设备管理系统设计
实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
主要功能:
- 能够完成对设备的录入和修改。
- 对设备进行分类统计。
- 设备的破损耗费和遗损处理。
- 设备的查询。
要求: 采用二进制文件方式存储数据,系统以菜单方式工作。
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;
}