C语言实现简易信号统计系统
#include <stdio.h> #include <stdlib.h> #include <string.h>
#define MAX_DEVICE 10 // 最大设备数量 #define MAX_SIGNAL 10 // 最大信号数量
// 信号结构体 typedef struct { int num; // 信号编号 int value; // 信号值 } Signal;
// 设备结构体 typedef struct { int num; // 设备编号 int signal_count; // 信号数量 Signal signals[MAX_SIGNAL]; // 信号数组 } Device;
// 全局变量 Device devices[MAX_DEVICE]; // 设备数组 int device_count = 0; // 设备数量
// 显示菜单 void show_menu() { printf("1. 添加设备\n"); printf("2. 删除设备\n"); printf("3. 显示所有设备\n"); printf("4. 添加信号\n"); printf("5. 删除信号\n"); printf("6. 显示设备信号\n"); printf("7. 统计信号\n"); printf("0. 退出\n"); }
// 添加设备 void add_device() { printf("请输入设备编号:"); int num; scanf("%d", &num);
// 判断设备是否已存在
for (int i = 0; i < device_count; i++) {
if (devices[i].num == num) {
printf("设备已存在!\n");
return;
}
}
// 添加设备
devices[device_count].num = num;
devices[device_count].signal_count = 0;
device_count++;
printf("设备添加成功!\n");
}
// 删除设备 void remove_device() { printf("请输入设备编号:"); int num; scanf("%d", &num);
// 查找设备
int index = -1;
for (int i = 0; i < device_count; i++) {
if (devices[i].num == num) {
index = i;
break;
}
}
// 判断设备是否存在
if (index == -1) {
printf("设备不存在!\n");
return;
}
// 删除设备
for (int i = index; i < device_count - 1; i++) {
devices[i] = devices[i + 1];
}
device_count--;
printf("设备删除成功!\n");
}
// 显示所有设备 void show_devices() { printf("设备编号\t信号数量\n"); for (int i = 0; i < device_count; i++) { printf("%d\t\t%d\n", devices[i].num, devices[i].signal_count); } }
// 获取设备 Device *get_device(int num) { for (int i = 0; i < device_count; i++) { if (devices[i].num == num) { return &devices[i]; } } return NULL; }
// 添加信号 void add_signal() { printf("请输入设备编号:"); int num; scanf("%d", &num);
// 获取设备
Device *device = get_device(num);
if (device == NULL) {
printf("设备不存在!\n");
return;
}
// 判断信号数量是否已满
if (device->signal_count >= MAX_SIGNAL) {
printf("信号数量已满!\n");
return;
}
// 添加信号
printf("请输入信号编号:");
int signal_num;
scanf("%d", &signal_num);
printf("请输入信号值:");
int signal_value;
scanf("%d", &signal_value);
device->signals[device->signal_count].num = signal_num;
device->signals[device->signal_count].value = signal_value;
device->signal_count++;
printf("信号添加成功!\n");
}
// 删除信号 void remove_signal() { printf("请输入设备编号:"); int num; scanf("%d", &num);
// 获取设备
Device *device = get_device(num);
if (device == NULL) {
printf("设备不存在!\n");
return;
}
printf("请输入信号编号:");
int signal_num;
scanf("%d", &signal_num);
// 查找信号
int index = -1;
for (int i = 0; i < device->signal_count; i++) {
if (device->signals[i].num == signal_num) {
index = i;
break;
}
}
// 判断信号是否存在
if (index == -1) {
printf("信号不存在!\n");
return;
}
// 删除信号
for (int i = index; i < device->signal_count - 1; i++) {
device->signals[i] = device->signals[i + 1];
}
device->signal_count--;
printf("信号删除成功!\n");
}
// 显示设备信号 void show_signals() { printf("请输入设备编号:"); int num; scanf("%d", &num);
// 获取设备
Device *device = get_device(num);
if (device == NULL) {
printf("设备不存在!\n");
return;
}
printf("信号编号\t信号值\n");
for (int i = 0; i < device->signal_count; i++) {
printf("%d\t\t%d\n", device->signals[i].num, device->signals[i].value);
}
}
// 统计信号 void count_signal() { printf("请输入设备编号:"); int num; scanf("%d", &num);
// 获取设备
Device *device = get_device(num);
if (device == NULL) {
printf("设备不存在!\n");
return;
}
printf("请输入信号编号:");
int signal_num;
scanf("%d", &signal_num);
// 查找信号
int index = -1;
for (int i = 0; i < device->signal_count; i++) {
if (device->signals[i].num == signal_num) {
index = i;
break;
}
}
// 判断信号是否存在
if (index == -1) {
printf("信号不存在!\n");
return;
}
printf("请选择统计量:\n");
printf("1. 信号最大值\n");
printf("2. 信号最小值\n");
printf("3. 信号平均值\n");
printf("4. 信号能量\n");
int choice;
scanf("%d", &choice);
// 统计信号
Signal *signal = &device->signals[index];
switch (choice) {
case 1:
printf("信号最大值:%d\n", signal->value);
break;
case 2:
printf("信号最小值:%d\n", signal->value);
break;
case 3: {
int sum = 0;
for (int i = 0; i < device->signal_count; i++) {
sum += device->signals[i].value;
}
printf("信号平均值:%d\n", sum / device->signal_count);
break;
}
case 4:
printf("信号能量:%d\n", signal->value * signal->value);
break;
default:
printf("无效的选项!\n");
break;
}
}
int main() { while (1) { show_menu();
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
add_device();
break;
case 2:
remove_device();
break;
case 3:
show_devices();
break;
case 4:
add_signal();
break;
case 5:
remove_signal();
break;
case 6:
show_signals();
break;
case 7:
count_signal();
break;
case 0:
printf("退出程序!\n");
exit(0);
default:
printf("无效的选项!\n");
break;
}
}
}
展望总结:
本系统是一个简单的信号统计管理系统,可以实现对不同的信号接收设备所接收的信号进行管理及统计。但是,本系统还有很多不足之处,需要进一步完善和改进。
首先,本系统的数据存储方式比较简单,只是使用了数组来存储设备和信号的信息。在实际应用中,需要考虑更加高效、稳定和安全的数据存储方式,如数据库等。
其次,本系统的操作界面比较简单,只提供了基本的菜单功能。在实际应用中,需要考虑用户的使用习惯和需求,提供更加友好、实用和智能的操作界面。
最后,本系统的功能比较简单,只提供了基本的设备和信号管理、统计等功能。在实际应用中,需要考虑更加丰富、多样和个性化的功能需求,以满足不同用户的需求。
原文地址: http://www.cveoy.top/t/topic/oK0G 著作权归作者所有。请勿转载和采集!