请用数据结构的知识写一个在水电缴费管理系统中按水费金额排序的代码
时间: 2024-03-26 18:39:05 浏览: 145
好的,这里给您提供一个按水费金额排序的代码,基于C语言,使用了链表数据结构:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体:账单信息
struct BillInfo {
char name[50]; // 用户名
int id; // 账单编号
int water; // 水费
int electric; // 电费
struct BillInfo *next; // 指向下一个账单信息的指针
};
// 定义全局变量:链表头指针
struct BillInfo *head = NULL;
// 函数声明
void addBillInfo();
void showAllBillInfo();
void searchByName();
void sortByWater();
// 主函数
int main() {
int choice = 0;
while (1) {
printf("\n1. 添加账单信息\n");
printf("2. 显示所有账单信息\n");
printf("3. 按用户名查询\n");
printf("4. 按水费金额排序\n");
printf("5. 退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
addBillInfo();
break;
case 2:
showAllBillInfo();
break;
case 3:
searchByName();
break;
case 4:
sortByWater();
break;
case 5:
exit(0);
default:
printf("请选择合法的操作!\n");
break;
}
}
return 0;
}
// 添加账单信息
void addBillInfo() {
struct BillInfo *p = (struct BillInfo *)malloc(sizeof(struct BillInfo));
printf("请输入用户名:");
scanf("%s", p->name);
printf("请输入账单编号:");
scanf("%d", &p->id);
printf("请输入水费金额:");
scanf("%d", &p->water);
printf("请输入电费金额:");
scanf("%d", &p->electric);
p->next = NULL;
if (head == NULL) { // 如果链表为空,则直接将p作为头结点
head = p;
printf("添加成功!\n");
} else { // 否则将p插入到链表末尾
struct BillInfo *q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
printf("添加成功!\n");
}
}
// 显示所有账单信息
void showAllBillInfo() {
if (head == NULL) {
printf("链表为空!\n");
return;
}
printf("用户名\t账单编号\t水费\t电费\n");
struct BillInfo *p = head;
while (p != NULL) {
printf("%s\t%d\t\t%d\t%d\n", p->name, p->id, p->water, p->electric);
p = p->next;
}
}
// 按用户名查询
void searchByName() {
if (head == NULL) {
printf("链表为空!\n");
return;
}
char name[50];
printf("请输入要查询的用户名:");
scanf("%s", name);
struct BillInfo *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("用户名\t账单编号\t水费\t电费\n");
printf("%s\t%d\t\t%d\t%d\n", p->name, p->id, p->water, p->electric);
return;
}
p = p->next;
}
printf("未找到符合条件的账单信息!\n");
}
// 按水费金额排序
void sortByWater() {
if (head == NULL) {
printf("链表为空!\n");
return;
}
struct BillInfo *p = head;
struct BillInfo *q = head->next;
struct BillInfo *temp;
while (p != NULL) {
q = p->next;
while (q != NULL) {
if (p->water > q->water) {
// 交换p和q的数据
temp = (struct BillInfo *)malloc(sizeof(struct BillInfo));
strcpy(temp->name, p->name);
temp->id = p->id;
temp->water = p->water;
temp->electric = p->electric;
strcpy(p->name, q->name);
p->id = q->id;
p->water = q->water;
p->electric = q->electric;
strcpy(q->name, temp->name);
q->id = temp->id;
q->water = temp->water;
q->electric = temp->electric;
free(temp);
}
q = q->next;
}
p = p->next;
}
printf("按水费金额排序完成!\n");
}
```
以上是一个按水费金额排序的代码,实现了在水电缴费管理系统中按照水费金额进行排序的功能。排序算法使用的是冒泡排序,这只是一个示例,实际应用中还需要考虑更多的细节和实现方式。
阅读全文