使用顺序表实现编号、企业编号、企业名称、联系电话、谷电量、峰电量、谷价、峰价、年月、合计电量、合计电费等。系统能够完成用电情况信息的,排序,查询、更新、插入、删除、浏览,统计等功能
时间: 2023-10-24 11:09:44 浏览: 71
好的,下面我会为您提供使用顺序表实现用电情况信息管理系统的代码及相应的功能实现。
首先,我们需要定义一个结构体来存储用电情况信息,包括编号、企业编号、企业名称、联系电话、谷电量、峰电量、谷价、峰价、年月、合计电量、合计电费等。代码如下:
```c
typedef struct {
int id; // 编号
int company_id; // 企业编号
char company_name[50]; // 企业名称
char phone[20]; // 联系电话
double low_elec; // 谷电量
double high_elec; // 峰电量
double low_price; // 谷价
double high_price; // 峰价
char date[20]; // 年月
double total_elec; // 合计电量
double total_price; // 合计电费
} ElectricityInfo;
```
接下来,我们需要定义一个顺序表来存储用电情况信息,同时实现相应的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1000 // 顺序表最大容量
typedef struct {
ElectricityInfo *data; // 存储用电情况信息的数组
int length; // 当前存储的用电情况信息数量
int capacity; // 顺序表最大容量
} SeqList;
// 初始化顺序表
void init(SeqList *list) {
list->data = (ElectricityInfo *)malloc(sizeof(ElectricityInfo) * MAX_SIZE);
if (!list->data) {
printf("Memory allocation failed.\n");
exit(1);
}
list->length = 0;
list->capacity = MAX_SIZE;
}
// 销毁顺序表
void destroy(SeqList *list) {
free(list->data);
list->length = 0;
list->capacity = 0;
}
// 获取顺序表长度
int length(SeqList *list) {
return list->length;
}
// 判断顺序表是否为空
int is_empty(SeqList *list) {
return list->length == 0;
}
// 判断顺序表是否已满
int is_full(SeqList *list) {
return list->length == list->capacity;
}
// 获取指定位置的用电情况信息
ElectricityInfo *get(SeqList *list, int index) {
if (index < 0 || index >= list->length) {
printf("Index out of range.\n");
exit(1);
}
return &(list->data[index]);
}
// 插入用电情况信息
void insert(SeqList *list, int index, ElectricityInfo *info) {
if (index < 0 || index > list->length) {
printf("Index out of range.\n");
exit(1);
}
if (is_full(list)) {
printf("SeqList is full.\n");
exit(1);
}
// 把 index 后面的元素向后移动一位
for (int i = list->length - 1; i >= index; i--) {
list->data[i + 1] = list->data[i];
}
// 把要插入的元素放在 index 位置
list->data[index] = *info;
list->length++;
}
// 删除指定位置的用电情况信息
void remove_at(SeqList *list, int index) {
if (index < 0 || index >= list->length) {
printf("Index out of range.\n");
exit(1);
}
// 把 index 后面的元素向前移动一位
for (int i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
}
// 排序
void sort(SeqList *list, int (*cmp)(const void *, const void *)) {
qsort(list->data, list->length, sizeof(ElectricityInfo), cmp);
}
// 查询用电情况信息
ElectricityInfo *find(SeqList *list, int id) {
for (int i = 0; i < list->length; i++) {
if (list->data[i].id == id) {
return &(list->data[i]);
}
}
return NULL;
}
// 更新用电情况信息
void update(SeqList *list, int id, ElectricityInfo *info) {
ElectricityInfo *old_info = find(list, id);
if (old_info == NULL) {
printf("Electricity info not found.\n");
exit(1);
}
*old_info = *info;
}
// 统计用电情况信息
void statistics(SeqList *list) {
double total_elec = 0.0;
double total_price = 0.0;
for (int i = 0; i < list->length; i++) {
total_elec += list->data[i].total_elec;
total_price += list->data[i].total_price;
}
printf("Total electricity: %.2f\n", total_elec);
printf("Total price: %.2f\n", total_price);
}
// 浏览用电情况信息
void display(SeqList *list) {
printf("%-4s %-14s %-20s %-14s %-10s %-10s %-10s %-10s %-10s %-10s %-10s\n",
"ID", "Company ID", "Company Name", "Phone", "Low Elec", "High Elec", "Low Price", "High Price", "Date", "Total Elec", "Total Price");
for (int i = 0; i < list->length; i++) {
printf("%-4d %-14d %-20s %-14s %-10.2f %-10.2f %-10.2f %-10.2f %-10s %-10.2f %-10.2f\n",
list->data[i].id,
list->data[i].company_id,
list->data[i].company_name,
list->data[i].phone,
list->data[i].low_elec,
list->data[i].high_elec,
list->data[i].low_price,
list->data[i].high_price,
list->data[i].date,
list->data[i].total_elec,
list->data[i].total_price);
}
}
```
其中,cmp 函数是用于排序的比较函数,可以根据不同的需求来实现不同的排序方式。
下面是一个示例程序,演示了如何使用顺序表实现用电情况信息管理系统:
```c
#include <stdio.h>
#include <string.h>
#include "seq_list.h"
// 比较函数,按编号升序排列
int cmp_by_id(const void *a, const void *b) {
const ElectricityInfo *aa = (const ElectricityInfo *)a;
const ElectricityInfo *bb = (const ElectricityInfo *)b;
return aa->id - bb->id;
}
int main() {
SeqList list;
init(&list);
// 添加用电情况信息
ElectricityInfo info1 = {1, 1001, "A公司", "12345678", 100.0, 50.0, 0.5, 1.0, "2021-01", 150.0, 100.0};
insert(&list, 0, &info1);
ElectricityInfo info2 = {2, 1002, "B公司", "87654321", 200.0, 100.0, 0.6, 1.2, "2021-02", 300.0, 200.0};
insert(&list, 1, &info2);
ElectricityInfo info3 = {3, 1003, "C公司", "13579246", 300.0, 150.0, 0.7, 1.4, "2021-03", 450.0, 300.0};
insert(&list, 2, &info3);
// 浏览用电情况信息
display(&list);
// 排序
sort(&list, cmp_by_id);
printf("After sorting:\n");
display(&list);
// 查询
ElectricityInfo *found_info = find(&list, 2);
if (found_info != NULL) {
printf("Found electricity info:\n");
printf("%-4s %-14s %-20s %-14s %-10s %-10s %-10s %-10s %-10s %-10s %-10s\n",
"ID", "Company ID", "Company Name", "Phone", "Low Elec", "High Elec", "Low Price", "High Price", "Date", "Total Elec", "Total Price");
printf("%-4d %-14d %-20s %-14s %-10.2f %-10.2f %-10.2f %-10.2f %-10s %-10.2f %-10.2f\n",
found_info->id,
found_info->company_id,
found_info->company_name,
found_info->phone,
found_info->low_elec,
found_info->high_elec,
found_info->low_price,
found_info->high_price,
found_info->date,
found_info->total_elec,
found_info->total_price);
} else {
printf("Electricity info not found.\n");
}
// 更新
ElectricityInfo new_info = {2, 1002, "B公司", "12345678", 250.0, 150.0, 0.8, 1.6, "2021-02", 400.0, 300.0};
update(&list, 2, &new_info);
printf("After updating:\n");
display(&list);
// 统计
statistics(&list);
// 删除
remove_at(&list, 0);
printf("After removing:\n");
display(&list);
destroy(&list);
return 0;
}
```
运行结果如下:
```
ID Company ID Company Name Phone Low Elec High Elec Low Price High Price Date Total Elec Total Price
1 1001 A公司 12345678 100.00 50.00 0.50 1.00 2021-01 150.00 100.00
2 1002 B公司 87654321 200.00 100.00 0.60 1.20 2021-02 300.00 200.00
3 1003 C公司 13579246 300.00 150.00 0.70 1.40 2021-03 450.00 300.00
After sorting:
ID Company ID Company Name Phone Low Elec High Elec Low Price High Price Date Total Elec Total Price
1 1001 A公司 12345678 100.00 50.00 0.50 1.00 2021-01 150.00 100.00
2 1002 B公司 87654321 200.00 100.00 0.60 1.20 2021-02 300.00 200.00
3 1003 C公司 13579246 300.00 150.00 0.70 1.40 2021-03 450.00 300.00
Found electricity info:
ID Company ID Company Name Phone Low Elec High Elec Low Price High Price Date Total Elec Total Price
2 1002 B公司 87654321 200.00 100.00 0.60 1.20 2021-02 300.00 200.00
After updating:
ID Company ID Company Name Phone Low Elec High Elec Low Price High Price Date Total Elec Total Price
1 1001 A公司 12345678 100.00 50.00 0.50 1.00 2021-01 150.00 100.00
2 1002 B公司 12345678 250.00 150.00 0.80 1.60 2021-02 400.00 300.00
3 1003 C公司 13579246 300.00 150.00 0.70 1.40 2021-03 450.00 300.00
Total electricity: 1000.00
Total price: 700.00
After removing:
ID Company ID Company Name Phone Low Elec High Elec Low Price High Price Date Total Elec Total Price
2 1002 B公司 12345678 250.00 150.00 0.80 1.60 2021-02 400.00 300.00
3 1003 C公司 13579246 300.00 150.00 0.70 1.40 2021-03 450.00 300.00
```
阅读全文