小区物业管理系统设计

业主信息包括:业主编号、业主名称、业主电话、业主房号,业主单位,用电量、用水量、物业费、水电费。试设计一小区物业管理系统,使之能提供以下功能:1业主信息录入、修改、删除功能;2按照业主编号排序、浏览功能;3可按业主名称查询,按业主电话查询,按业主房号查询;4可生成业主缴费清单报表功能。

具体功能实现代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*
 业主信息包括:业主编号、业主名称、业主电话、业主房号,业主单位,用电量、用水量、物业费、水电费。试设计一小区物业管理系统,使之能提供以下功能:1业主信息录入、修改、删除功能;2按照业主编号排序、浏览功能;3可按业主名称查询,按业主电话查询,按业主房号查询;4可生成业主缴费清单报表功能。
 */

// 业主
struct Proprietor {
    int pId;         // 编号
    char name[20];   // 名称
    char tel[20];    // 电话
    char number[15]; // 房号
    char unit[50];   // 单位
    float dian;      // 用电量
    float shui;      // 用水量
    float wuyefei;   // 物业费
    float shuidianfei;// 水电费
};

typedef struct ListNode {
    // 数据域
    struct Proprietor p;
    // 指针域
    struct ListNode *next;
}LD;

void menu(void) {

    printf("========== 业主信息管理系统 ==========\n");
    printf("             录入信息: 1             \n");
    printf("             修改信息: 2             \n");
    printf("             删除信息: 3             \n");
    printf("             信息排序: 4             \n");
    printf("             遍历信息: 5             \n");
    printf("             查询信息: 6             \n");
    printf("             退出程序: 0             \n");
    printf("-------------------------------------\n");
    printf("请输入操作选项:");
}

// 打印信息
void printData(LD *pn) {

    printf("%d %s %s %s %s %.2f %.2f %.2f %.2f\n", pn->p.pId, pn->p.name, pn->p.tel, pn->p.number, pn->p.unit, pn->p.dian, pn->p.shui, pn->p.wuyefei, pn->p.shuidianfei);
}

// 录入信息
void insert(LD **head) {

    printf("========== 录入信息 ==========\n");
    printf("请输入业主信息\n");
    printf("(编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费)\n");
    struct Proprietor p;
    scanf("%d %s %s %s %s %f %f %f %f", &p.pId, p.name, p.tel, p.number, p.unit, &p.dian, &p.shui, &p.wuyefei, &p.shuidianfei);
    LD *pn = (LD*)malloc(sizeof(LD));
    pn->p = p;
    pn->next = NULL;
    if (*head == NULL) {

        *head = pn;
        return;
    }
    LD *temp = *head;
    while (temp->next != NULL) {

        temp = temp->next;
    }
    temp->next = pn;
}

// 通过名字查找
LD * selectByName(LD *head, char name[20]) {

    LD *pn = head;
    while (pn != NULL && strcmp(pn->p.name, name) != 0) {

        pn = pn->next;
    }
    if (pn == NULL) {

        printf("未查询到该业主信息\n");
    }
    return pn;
}

// 通过电话查找
LD * selectByTel(LD *head, char tel[20]) {

    LD *pn = head;
    while (pn != NULL && strcmp(pn->p.tel, tel) != 0) {

        pn = pn->next;
    }
    if (pn == NULL) {

        printf("未查询到该业主信息\n");
    }
    return pn;
}

// 通过房号查找
LD * selectByNumber(LD *head, char number[15]) {

    LD *pn = head;
    while (pn != NULL && strcmp(pn->p.number, number) != 0) {

        pn = pn->next;
    }
    if (pn == NULL) {

        printf("未查询到该业主信息\n");
    }
    return pn;
}

// 查找信息
void selectData(LD *head) {
    
    if (head == NULL) {

        printf("还没有录入业主信息\n");
        return;
    }
    int f = 1;
    while (f) {

        printf("========== 查找信息 ==========\n");
        printf("        通过姓名查找: 1        \n");
        printf("        通过电话查找: 2        \n");
        printf("        通过房号查找: 3        \n");
        printf("-----------------------------\n");
        printf("请输入操作选项:");
        int op;
        scanf("%d", &op);
        switch (op) {
            case 1:
            {
                printf("请输入姓名:");
                char name[20];
                scanf("%s", name);
                LD * pn = selectByName(head, name);
                if (pn != NULL) {

                    printf("编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费\n");
                    printData(pn);
                }
                f = 0;
            }
                break;;
            case 2:
            {
                printf("请输入电话:");
                char tel[20];
                scanf("%s", tel);
                LD * pn = selectByTel(head, tel);
                if (pn != NULL) {

                    printf("编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费\n");
                    printData(pn);
                }
                f = 0;
                break;
            }
            case 3:
            {
                printf("请输入房号:");
                char number[15];
                scanf("%s", number);
                LD * pn = selectByNumber(head, number);
                if (pn != NULL) {

                    printf("编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费\n");
                    printData(pn);
                }
                f = 0;
                break;
            }
            default:
            {
                printf("请正确输入选项~\n");
            }
                break;
        }
    }
}

// 通过名字删除
void deleteByName(LD **head, char name[20]) {

    LD *pn = *head;
    LD *pl = NULL;
    while (pn->next != NULL && strcmp(pn->p.name, name) != 0) {

        pl = pn;
        pn = pn->next;
    }
    if (strcmp(pn->p.name, name) == 0) {

        if (pl == NULL) {

            *head = (*head)->next;
        } else {

            pl->next = pn->next;
        }
        free(pn);
        printf("信息删除成功~\n");
    } else {

        printf("未查询到该业主信息\n");
    }
}

// 通过电话删除
void deleteByTel(LD **head, char tel[20]) {

    LD *pn = *head;
    LD *pl = NULL;
    while (pn->next != NULL && strcmp(pn->p.tel, tel) != 0) {

        pl = pn;
        pn = pn->next;
    }
    if (strcmp(pn->p.tel, tel) == 0) {

        if (pl == NULL) {

            *head = (*head)->next;
        } else {

            pl->next = pn->next;
        }
        free(pn);
        printf("信息删除成功~\n");
    } else {

        printf("未查询到该业主信息\n");
    }
}

// 通过房号删除
void deleteByNumber(LD **head, char number[15]) {

    LD *pn = *head;
    LD *pl = NULL;
    while (pn->next != NULL && strcmp(pn->p.number, number) != 0) {

        pl = pn;
        pn = pn->next;
    }
    if (strcmp(pn->p.number, number) == 0) {

        if (pl == NULL) {

            *head = (*head)->next;
        } else {

            pl->next = pn->next;
        }
        free(pn);
        printf("信息删除成功~\n");
    } else {

        printf("未查询到该业主信息\n");
    }
}

// 删除信息
void deleteData(LD **head) {
    
    if (*head == NULL) {

        printf("还没有录入业主信息\n");
        return;
    }
    int f = 1;
    while (f) {

        printf("========== 删除信息 ==========\n");
        printf("        通过姓名删除: 1        \n");
        printf("        通过电话删除: 2        \n");
        printf("        通过房号删除: 3        \n");
        printf("-----------------------------\n");
        printf("请输入操作选项:");
        int op;
        scanf("%d", &op);
        switch (op) {
            case 1:
            {
                printf("请输入姓名:");
                char name[20];
                scanf("%s", name);
                deleteByName(head, name);
                f = 0;
            }
                break;;
            case 2:
            {
                printf("请输入电话:");
                char tel[20];
                scanf("%s", tel);
                deleteByName(head, tel);
                f = 0;
                break;
            }
            case 3:
            {
                printf("请输入房号:");
                char number[15];
                scanf("%s", number);
                deleteByName(head, number);
                f = 0;
                break;
            }
            default:
            {
                printf("请正确输入选项~\n");
            }
                break;
        }
    }
}

// 修改信息
void updateData(LD *head) {

    if (head == NULL) {

        printf("还没有录入业主信息\n");
        return;
    }
    int f = 1;
    while (f) {

        printf("========== 修改信息 ==========\n");
        printf("        通过姓名查找: 1        \n");
        printf("        通过电话查找: 2        \n");
        printf("        通过房号查找: 3        \n");
        printf("-----------------------------\n");
        printf("请输入操作选项:");
        int op;
        scanf("%d", &op);
        switch (op) {
            case 1:
            {
                printf("请输入姓名:");
                char name[20];
                scanf("%s", name);
                LD * pn = selectByName(head, name);
                if (pn != NULL) {
                    
                    printf("请重新输入业主信息\n");
                    printf("(编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费)\n");
                    scanf("%d %s %s %s %s %f %f %f %f", &pn->p.pId, pn->p.name, pn->p.tel, pn->p.number, pn->p.unit, &pn->p.dian, &pn->p.shui, &pn->p.wuyefei, &pn->p.shuidianfei);
                    printf("修改成功~\n");
                }
                f = 0;
            }
                break;;
            case 2:
            {
                printf("请输入电话:");
                char tel[20];
                scanf("%s", tel);
                LD * pn = selectByTel(head, tel);
                if (pn != NULL) {

                    printf("请重新输入业主信息\n");
                    printf("(编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费)\n");
                    scanf("%d %s %s %s %s %f %f %f %f", &pn->p.pId, pn->p.name, pn->p.tel, pn->p.number, pn->p.unit, &pn->p.dian, &pn->p.shui, &pn->p.wuyefei, &pn->p.shuidianfei);
                    printf("修改成功~\n");
                }
                f = 0;
                break;
            }
            case 3:
            {
                printf("请输入房号:");
                char number[15];
                scanf("%s", number);
                LD * pn = selectByNumber(head, number);
                if (pn != NULL) {

                    printf("请重新输入业主信息\n");
                    printf("(编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费)\n");
                    scanf("%d %s %s %s %s %f %f %f %f", &pn->p.pId, pn->p.name, pn->p.tel, pn->p.number, pn->p.unit, &pn->p.dian, &pn->p.shui, &pn->p.wuyefei, &pn->p.shuidianfei);
                    printf("修改成功~\n");
                }
                f = 0;
                break;
            }
            default:
            {
                printf("请正确输入选项~\n");
            }
                break;
        }
    }
}

// 输出所有信息
void outputAll(LD *head) {

    printf("========== 遍历信息 ==========\n");
    if (head == NULL) {

        printf("还没有录入业主信息\n");
    } else {

        LD *pn = head;
        printf("编号 名称 电话 房号 单位 用电量 用水量 物业费 水电费\n");
        while (pn != NULL) {

            printData(pn);
            pn = pn->next;
        }
    }
}

// 按照编号排序(升序)
void sort(LD *head) {

    printf("========== 信息排序 ==========\n");
    if (head == NULL) {

        printf("还没有录入业主信息\n");
    } else {

        LD *pi = head;
        LD *pj = head;
        while (pi->next != NULL) {

            LD *min = pi;
            pj = pi->next;
            while (pj != NULL) {

                if (min->p.pId > pj->p.pId) {

                    min = pj;
                }
                pj = pj->next;
            }
            if (pi != min) {
                // 交换数据
                LD temp = *pi;
                *pi = *min;
                *min = temp;
                // 交换指针
                temp.next = pi->next;
                pi->next = min->next;
                min->next = temp.next;
            }
            pi = pi->next;
        }
    }
    outputAll(head);
}

int main(int argc, const char * argv[]) {
    LD *head = NULL;
    int flag = 1;
    while (flag) {

        menu();
        int o;
        scanf("%d", &o);
        switch (o) {
            case 1:
            {
                insert(&head);
            }
                break;
            case 2:
            {
                updateData(head);
            }
                break;
            case 3:
            {
                deleteData(&head);
            }
                break;
            case 4:
            {
                sort(head);
            }
                break;
            case 5:
            {
                outputAll(head);
            }
                break;
            case 6:
            {
                selectData(head);
            }
                break;
            case 0:
            {
                flag = 0;
            }
                break;
            default:
            {
                printf("请正确输入选项~\n");
            }
                break;
        }
    }
    return 0;
}

如有疑问,随时沟通哈!如果满意,请采纳!

可以尝试使用vector+class做系统

参考: