请用数据结构的知识写一个水电缴费管理系统代码
时间: 2023-11-10 14:05:14 浏览: 44
好的。这里给您提供一个简单的水电缴费管理系统的代码,基于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();
// 主函数
int main() {
int choice = 0;
while (1) {
printf("\n1. 添加账单信息\n");
printf("2. 显示所有账单信息\n");
printf("3. 按用户名查询\n");
printf("4. 退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
addBillInfo();
break;
case 2:
showAllBillInfo();
break;
case 3:
searchByName();
break;
case 4:
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");
}
```
以上是一个简单的水电缴费管理系统的代码,实现了添加账单信息、显示所有账单信息和按用户名查询等功能。注意,这只是一个简单的示例代码,实际应用中还需要考虑更多的细节和实现方式。