#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EQUIPMENT 100
#define NAME_LEN 50
#define MODEL_LEN 30
#define DATE_LEN 20
// 设备状态枚举
typedef enum Status {
IDLE,
IN_USE,
UNDER_MAINTENANCE,
SCRAPPED
} Status;
// 设备结构体
typedef struct Equipment {
int id; // 设备编号
char name[NAME_LEN];
char model[MODEL_LEN];
float price;
char purchase_date[DATE_LEN];
Status status;
} Equipment;
Equipment lab[MAX_EQUIPMENT]; // 设备数组
int count = 0; // 当前设备数量
// 函数声明
void add_equipment();
void display_all();
void search_by_id();
void modify_status();
void delete_by_id();
void init_sample_data();
const char* get_status_name(Status s);
void clear_input_buffer();
int main() {
int choice;
// 初始化一些示例数据
init_sample_data();
do {
// 打印菜单
printf("\n\n=== Laboratory Equipment Management System ===\n");
printf("1. Add Equipment\n");
printf("2. Display All Equipment\n");
printf("3. Search Equipment by ID\n");
printf("4. Modify Equipment Status\n");
printf("5. Delete Equipment\n");
printf("0. Exit\n");
printf("Please enter your choice: ");
if (scanf("%d", &choice) != 1) {
printf("Invalid input! Please enter a number.\n");
clear_input_buffer();
continue;
}
switch (choice) {
case 1: add_equipment(); break;
case 2: display_all(); break;
case 3: search_by_id(); break;
case 4: modify_status(); break;
case 5: delete_by_id(); break;
case 0: printf("Goodbye!\n"); break;
default: printf("Invalid choice! Please try again.\n");
}
} while (choice != 0);
return 0;
}
// 清空输入缓冲区
void clear_input_buffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF);
}
// 获取状态名称
const char* get_status_name(Status s) {
switch(s) {
case IDLE: return "Idle";
case IN_USE: return "In Use";
case UNDER_MAINTENANCE: return "Under Maintenance";
case SCRAPPED: return "Scrapped";
default: return "Unknown";
}
}
// 初始化示例数据
void init_sample_data() {
// 添加一些示例设备
Equipment e1 = {1001, "Oscilloscope", "DSO-X 2002A", 8999.99, "2023-01-15", IDLE};
Equipment e2 = {1002, "Multimeter", "Fluke 87V", 2499.50, "2023-02-20", IN_USE};
Equipment e3 = {1003, "Power Supply", "DP832", 3200.00, "2023-03-10", UNDER_MAINTENANCE};
lab[count++] = e1;
lab[count++] = e2;
lab[count++] = e3;
}
// 添加设备
void add_equipment() {
if (count >= MAX_EQUIPMENT) {
printf("Error: The equipment list is full! Cannot add more equipment.\n");
return;
}
Equipment new_equip;
int status_input;
printf("\n--- Add New Equipment ---\n");
printf("Enter Equipment ID: ");
if (scanf("%d", &new_equip.id) != 1) {
printf("Invalid ID input!\n");
clear_input_buffer();
return;
}
clear_input_buffer();
// 检查ID是否已存在
for (int i = 0; i < count; i++) {
if (lab[i].id == new_equip.id) {
printf("Error: Equipment ID %d already exists!\n", new_equip.id);
return;
}
}
printf("Enter Equipment Name: ");
fgets(new_equip.name, NAME_LEN, stdin);
new_equip.name[strcspn(new_equip.name, "\n")] = '\0'; // 移除换行符
printf("Enter Equipment Model: ");
fgets(new_equip.model, MODEL_LEN, stdin);
new_equip.model[strcspn(new_equip.model, "\n")] = '\0';
printf("Enter Equipment Price: ");
if (scanf("%f", &new_equip.price) != 1) {
printf("Invalid price input!\n");
clear_input_buffer();
return;
}
clear_input_buffer();
printf("Enter Purchase Date (YYYY-MM-DD): ");
fgets(new_equip.purchase_date, DATE_LEN, stdin);
new_equip.purchase_date[strcspn(new_equip.purchase_date, "\n")] = '\0';
printf("Enter Status (0-Idle, 1-In Use, 2-Under Maintenance, 3-Scrapped): ");
if (scanf("%d", &status_input) != 1 || status_input < 0 || status_input > 3) {
printf("Invalid status input!\n");
clear_input_buffer();
return;
}
new_equip.status = (Status)status_input;
lab[count] = new_equip;
count++;
printf("\nEquipment added successfully!\n");
}
// 显示所有设备
void display_all() {
if (count == 0) {
printf("\nNo equipment found in the system.\n");
return;
}
printf("\n--- All Equipment List (%d items) ---\n", count);
printf("=============================================================================================================\n");
printf("ID Name Model Price Purchase Date Status\n");
printf("=============================================================================================================\n");
for (int i = 0; i < count; i++) {
printf("%-8d%-20s%-20s%-12.2f%-16s%-20s\n",
lab[i].id,
lab[i].name,
lab[i].model,
lab[i].price,
lab[i].purchase_date,
get_status_name(lab[i].status));
}
printf("=============================================================================================================\n");
}
// 根据ID查询设备
void search_by_id() {
int search_id;
if (count == 0) {
printf("\nNo equipment found in the system.\n");
return;
}
printf("\nEnter Equipment ID to search: ");
if (scanf("%d", &search_id) != 1) {
printf("Invalid ID input!\n");
clear_input_buffer();
return;
}
for (int i = 0; i < count; i++) {
if (lab[i].id == search_id) {
printf("\n--- Equipment Found ---\n");
printf("ID: %d\n", lab[i].id);
printf("Name: %s\n", lab[i].name);
printf("Model: %s\n", lab[i].model);
printf("Price: ¥%.2f\n", lab[i].price);
printf("Purchase Date: %s\n", lab[i].purchase_date);
printf("Status: %s\n", get_status_name(lab[i].status));
return;
}
}
printf("\nEquipment with ID %d not found.\n", search_id);
}
// 修改设备状态
void modify_status() {
int search_id, new_status;
if (count == 0) {
printf("\nNo equipment found in the system.\n");
return;
}
printf("\nEnter Equipment ID to modify status: ");
if (scanf("%d", &search_id) != 1) {
printf("Invalid ID input!\n");
clear_input_buffer();
return;
}
for (int i = 0; i < count; i++) {
if (lab[i].id == search_id) {
printf("\nCurrent Status: %s\n", get_status_name(lab[i].status));
printf("Enter New Status (0-Idle, 1-In Use, 2-Under Maintenance, 3-Scrapped): ");
if (scanf("%d", &new_status) != 1 || new_status < 0 || new_status > 3) {
printf("Invalid status input!\n");
clear_input_buffer();
return;
}
lab[i].status = (Status)new_status;
printf("Status updated successfully to: %s\n", get_status_name(lab[i].status));
return;
}
}
printf("\nEquipment with ID %d not found.\n", search_id);
}
// 删除设备
void delete_by_id() {
int search_id;
if (count == 0) {
printf("\nNo equipment found in the system.\n");
return;
}
printf("\nEnter Equipment ID to delete: ");
if (scanf("%d", &search_id) != 1) {
printf("Invalid ID input!\n");
clear_input_buffer();
return;
}
for (int i = 0; i < count; i++) {
if (lab[i].id == search_id) {
// 显示要删除的设备信息
printf("\nDeleting Equipment:\n");
printf("ID: %d, Name: %s, Model: %s\n", lab[i].id, lab[i].name, lab[i].model);
// 将最后一个元素移到当前位置,并减少计数
lab[i] = lab[count - 1];
count--;
printf("Equipment deleted successfully!\n");
return;
}
}
printf("\nEquipment with ID %d not found.\n", search_id);
}函数clear_input_buffer的作用为什么要有它,没他会咋样
最新发布