m0_73781259 2023-07-01 00:36 采纳率: 100%
浏览 38
已结题

函数返回值如何返回到对应变量

我想将管理员的账户和密码进行修改,应该怎么用函数传递返回值到对应变量,进行a[20]和k[20]的修改

// 物业费管理系统
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100 // 最大住户数量

typedef struct // 住户信息结构体
{
    char account[20]; // 管理员
    char key[20];     // 密码
    char name[20];    // 户主姓名
    char gender[4];   // 性别
    char id[19];      // 身份证号
    char phone[12];   // 联系电话
    int building;     // 楼号
    int unit;         // 单元号
    int room;         // 房号
    float area;       // 平米数
    float price;      // 每平米物业价格
    float fee;        // 应缴物业费
    int month;        // 入住月份
    char remark[30];  // 备注信息
} Resident;

Resident residents[MAX]; // 住户信息数组
int count = 0;           // 住户数量

int menumenu(char *, char *);             // 菜单逻辑
int mainmenu();                           // 主菜单
int menu1();                              // 显示物业管理员菜单
int menu2();                              // 显示业主菜单
int words(char *, char *);                // 输入管理员账户和密码
void add_resident();                      // 添加住户信息
void modify_resident();                   // 修改住户信息
void delete_resident();                   // 删除住户信息
void generate_fee();                      // 生成本月物业费
void save(int);                           // 保存所有住户信息至文档
void pay_fee();                           // 住户缴费
void show_all_residents();                // 显示所有住户信息
void sort_residents_by_fee();             // 按拖欠款项排序
void show_unpaid_residents_by_building(); // 按楼号分类统计未交清物业费
void help();                              // 系统帮助
void check();                             // 查看个人信息
char * change();                          // 修改管理员信息

int main()
{
    char a[10] = "bod";
    char k[20] = "11111";

    menumenu(a, k);
    return 0;
}

int menumenu(char a[], char k[])
{
    while (1)
    {

        switch (mainmenu())
        {
        case 1:
            if (words(a, k))
            {
                switch (menu1()) // 根据用户选择执行对应的操作
                {
                case 1:
                    add_resident();
                    break;
                case 2:
                    modify_resident();
                    break;
                case 3:
                    delete_resident();
                    break;
                case 4:
                    generate_fee();
                    break;
                case 5:
                    show_all_residents();
                    break;
                case 6:
                    save(count);
                    break;
                case 7:
                    change();
                    a[20]=x;
                    k[20]=y;
                    break;
                case 8:
                    exit(0); // 退出程序
                default:
                    printf("输入错误,请重新输入!\n");
                }
            }
            break;

        case 2:
            switch (menu2()) // 根据用户选择执行对应的操作
            {
            case 1:
                pay_fee();
                break;
            case 2:
                sort_residents_by_fee();
                break;
            case 3:
                show_unpaid_residents_by_building();
                break;
            case 4:
                help();
                break;
            case 5:
                check();
                break;
            case 6:
                exit(0); // 退出程序
            default:
                printf("输入错误,请重新输入!\n");
            }
            break;

        case 3:
            printf("成功退出系统\n");
            exit(0);

        default:
            printf("输入错误,请重新输入!\n");
        }
    }
}

int mainmenu()
{
    int a;
    printf("\n**********************************************\n");
    printf("\n             欢迎进入物业费管理系统             \n");
    printf("\n**********************************************\n");
    printf("\n-----------------------------------------------\n");
    printf("\n****************系统功能菜单*****************\n");
    printf("\n-----------------------------------------------\n");
    printf("请选择:(1-3)\n");
    printf("1.物业管理员操作系统\n");
    printf("2.业主操作系统\n");
    printf("3.退出系统\n");
    printf("-----------------------------------------------\n");
    scanf("%d", &a);
    return a;
}

int menu1()
{
    int choice;
    printf("\n**********************************************\n");
    printf("\n                物业管理员系统                 \n");
    printf("\n**********************************************\n");
    printf("1. 添加住户信息\n");
    printf("2. 修改住户信息\n");
    printf("3. 删除住户信息\n");
    printf("4. 生成本月物业费\n");
    printf("5. 显示所有住户信息\n");
    printf("6. 保存所有住户当前信息\n");
    printf("7. 修改管理员信息\n");
    printf("8. 退出程序\n");
    printf("请输入要执行的操作(1-8):");
    scanf("%d", &choice);
    return choice;
}

int menu2()
{
    int choice;
    printf("\n**********************************************\n");
    printf("\n                 业主操作系统                  \n");
    printf("\n**********************************************\n");
    printf("1. 住户缴费\n");
    printf("2. 按拖欠款项排序\n");
    printf("3. 按楼号分类统计未交清物业费\n");
    printf("4. 帮助\n");
    printf("5. 查看个人信息\n");
    printf("6. 退出程序\n");
    printf("请输入要执行的操作(1-6):");
    scanf("%d", &choice);
    return choice;
}

int words(char a[], char k[])
{
    char account[20]; // 管理员
    char key[20];     // 密码
    printf("请输入管理员的账户:\n");
    scanf("%s", account);
    printf("请输入管理员的密码:\n");
    scanf("%s", key);
    if (strcmp(account, a) == 0 & strcmp(key, k) == 0)
    {
        printf("输入正确!\n");
        return 1;
    }
    else if (strcmp(account, a) != 0 & strcmp(key, k) == 0)
    {
        printf("管理员用户不存在!\n");
        return 0;
    }
    else if (strcmp(account, a) == 0 & strcmp(key, k) != 0)
    {
        printf("密码错误!\n");
        return 0;
    }
    else
    {
        printf("输入错误!\n");
        return 0;
    }
}

void add_resident()
{
    if (count >= MAX)
    {
        printf("住户数量已达上限,无法添加新住户!\n");
        return;
    }
    printf("请输入户主姓名,性别,身份证号,联系电话,楼号,单元号,房号,平米数,每平米物业价格,备注信息(用空格隔开):\n");
    scanf("%s%s%s%s%d%d%d%f%f%s", residents[count].name, residents[count].gender, residents[count].id, residents[count].phone, &residents[count].building,
          &residents[count].unit, &residents[count].room, &residents[count].area, &residents[count].price, residents[count].remark);
    if (residents[count].building == 0 || residents[count].unit == 0 || residents[count].room == 0)
    {
        printf("你输入的信息有误,请重新输入业主所在楼号,单元号,房间号:\n");
        scanf(" %d,%d,%d", &residents[count].building, &residents[count].unit, &residents[count].room);
    }
    residents[count].fee = 0; // 新住户物业费为0
    printf("添加成功!\n");
    count++; // 住户数量加1
}

void modify_resident()
{
    char id[19];
    int a;
    printf("请输入要修改住户的身份证号:\n");
    scanf("%s", id);
    for (int i = 0; i < count; i++)
    {
        if (strcmp(residents[i].id, id) == 0) // 找到要修改的住户
        {
            printf("请选择要修改的信息:(1-11)\n");
            printf("1.户主姓名\n");
            printf("2.性别\n");
            printf("3.身份证号\n");
            printf("4.联系电话\n");
            printf("5.楼号\n");
            printf("6.单元号\n");
            printf("7.房号\n");
            printf("8.平米数\n");
            printf("9.每平米物业价格\n");
            printf("10.备注信息\n");

            scanf("%d", &a);
            switch (a)
            {
            case 1:
                printf("请重新输入户主姓名:\n");
                scanf("%s", residents[i].name);
                printf("修改成功!\n");
                break;
            case 2:
                printf("请重新输入户主性别:\n");
                scanf("%s", residents[i].gender);
                printf("修改成功!\n");
                break;
            case 3:
                printf("请重新输入户主身份证号:\n");
                scanf("%s", residents[i].id);
                printf("修改成功!\n");
                break;
            case 4:
                printf("请重新输入户主联系电话:\n");
                scanf("%s", residents[i].phone);
                printf("修改成功!\n");
                break;
            case 5:
                printf("请重新输入户主楼号:\n");
                scanf("%d", &residents[i].building);
                printf("修改成功!\n");
                break;
            case 6:
                printf("请重新输入户主单元号:\n");
                scanf("%d", &residents[i].unit);
                printf("修改成功!\n");
                break;
            case 7:
                printf("请重新输入户主房号:\n");
                scanf("%d", &residents[i].room);
                printf("修改成功!\n");
                break;
            case 8:
                printf("请重新输入户主平米数:\n");
                scanf("%f", &residents[i].area);
                printf("修改成功!\n");
                break;
            case 9:
                printf("请重新输入户主每平米物业价格:\n");
                scanf("%f", &residents[i].price);
                printf("修改成功!\n");
                break;
            case 10:
                printf("请重新输入户主备注信息:\n");
                scanf("%s", residents[i].remark);
                printf("修改成功!\n");
                break;
            case 11:
                printf("退出系统成功\n");
                exit(0);
                break;
            default:
                printf("输入错误,请重新输入\n");
                break;
            }

            return;
        }
    }
    printf("该身份证号对应的住户不存在!\n"); // 未找到要修改的住户
}

void delete_resident()
{
    char id[19];
    printf("请输入要删除住户的身份证号:\n");
    scanf("%s", id);
    for (int i = 0; i < count; i++)
    {
        if (strcmp(residents[i].id, id) == 0) // 找到要删除的住户
        {
            for (int j = i; j < count - 1; j++) // 将后面的住户信息前移
            {
                residents[j] = residents[j + 1];
            }
            count--; // 住户数量减1
            printf("删除成功!\n");
            return;
        }
    }
    printf("该身份证号对应的住户不存在!\n"); // 未找到要删除的住户
}

void generate_fee()
{
    for (int i = 0; i < count; i++)
    {
        residents[i].fee += residents[i].area * residents[i].price; // 本月物业费为住户面积乘以物业单价
    }
    printf("本月物业费已生成!\n");
}

void save(int count)
{
    FILE *fp;
    int i;
    fp = fopen("text.txt", "a");
    fprintf(fp, "户主姓名  性别      身份证号       联系电话  楼号     单元号    房号  平米数  每平米物业价格  应缴物业费  备注信息\n");
    for (int i = 0; i < count; i++)
    {
        fprintf(fp, "%s        %s       %s      %s    %d        %d       %d   %.2f     %.2f       %.2f        %s\n", residents[i].name, residents[i].gender, residents[i].id, residents[i].phone,
                residents[i].building, residents[i].unit, residents[i].room, residents[i].area, residents[i].price, residents[i].fee, residents[i].remark);
    }
    fclose(fp);
    printf("已完成保存!");
}

char * change()
{
    int j;
    char x[20], y[20];
    printf("请输入要更改的管理员的信息:\n");
    printf("1.管理员账户所有信息\n");
    printf("2.管理员密码\n");
    scanf("%d", &j);
    while (1)
    {
        if (j == 1)
        {
            printf("请重新输入管理员账户和密码:\n");
            scanf("%s  %s", x, y);
            break;
        }
        else if (j == 2)
        {
            printf("请重新输入管理员密码:\n");
            scanf("%s", y);
            break;
        }
        else
        {
            printf("输入错误,请重新输入\n");
        }
    }
    return x,y;
}

void pay_fee()
{
    char id[19];
    float amount;
    char answer[5];
    int m;
    printf("请输入要缴纳物业费的住户的身份证号和金额(用空格隔开):\n");
    scanf("%s%f", id, &amount);
    for (int i = 0; i < count; i++)
    {
        if (strcmp(residents[i].id, id) == 0) // 找到要缴纳物业费的住户
        {
            printf("请输入缴费月份:\n");
            scanf("%d", &residents[i].month);
            printf("请问是否进行缴费?(yes or no)");
            while (strcmp(answer, "YES") != 0 || strcmp(answer, "NO") != 0 || strcmp(answer, "yes") != 0 || strcmp(answer, "no") != 0)
            {
                scanf(" %s", answer);
                if (strcmp(answer, "YES") == 0 || strcmp(answer, "yes") == 0)
                {
                    m = 0;
                    if (m == 0)
                    {
                        if (amount >= residents[i].fee) // 缴纳金额大于等于应缴物业费
                        {
                            amount -= residents[i].fee;
                            residents[i].fee = 0;
                        }
                        else // 缴纳金额小于应缴物业费
                        {
                            residents[i].fee -= amount;
                            amount = 0;
                        }
                        printf("缴费成功!您已在%d月成功缴费!\n", residents[i].month);
                        if (amount > 0) // 如果缴纳金额还有剩余,则提示并退出函数
                        {
                            printf("缴纳金额超过应缴物业费,多余金额为%.2f元,已退回!\n", amount);
                        }
                        break;
                    }
                }
                else if (strcmp(answer, "NO") == 0 || strcmp(answer, "no") == 0)
                {
                    printf("缴费取消\n");
                    break;
                }
                else
                {
                    printf("你的回答有误,请重新输入\n");
                }
            }

            return;
        }
    }
    printf("该身份证号对应的住户不存在!\n"); // 未找到要缴纳物业费的住户
}

void show_all_residents()
{
    FILE *fp;
    char ch;

    fp = fopen("text.txt", "r");
    if (fp == NULL)
    {
        printf("Failed to open the file!");
        return;
    }

    while ((ch = fgetc(fp)) != EOF)
    {
        printf("%c", ch);
    }

    fclose(fp);

    return;
}

void sort_residents_by_fee()
{
    Resident temp;
    for (int i = 0; i < count - 1; i++)
    {
        for (int j = i + 1; j < count; j++)
        {
            if (residents[i].fee < residents[j].fee) // 按拖欠款项多少从大到小排序
            {
                temp = residents[i];
                residents[i] = residents[j];
                residents[j] = temp;
            }
        }
    }
    printf("按拖欠款项多少从大到小排序如下:\n");
    show_all_residents();
}

void show_unpaid_residents_by_building()
{
    int building;
    printf("请输入要统计的楼号:\n");
    scanf("%d", &building);
    float sum = 0;
    printf("该楼所有未交清物业费的住户如下:\n");
    printf("户主姓名  性别      身份证号       联系电话  楼号     单元号    房号  平米数  每平米物业价格  应缴物业费  备注信息\n");
    for (int i = 0; i < count; i++)
    {
        if (residents[i].building == building && residents[i].fee > 0) // 按楼号分类统计未交清物业费
        {
            printf("%s        %s       %s      %s    %d        %d       %d   %.2f     %.2f       %.2f        %s\n", residents[i].name, residents[i].gender, residents[i].id, residents[i].phone,
                   residents[i].building, residents[i].unit, residents[i].room, residents[i].area, residents[i].price, residents[i].fee, residents[i].remark);

            sum += residents[i].fee;
        }
    }
    printf("该楼所有未交清物业费的总额为%.2f元。\n", sum);
}

void help()
{
    printf("\n0.欢迎使用系统帮助!\n");
    printf("\n1.初次使用系统,请按照菜单提示键入数字代号;\n");
    printf("\n2.添加住户信息后,切记保存;\n");
    printf("\n3.谢谢您的使用!\n");
}

void check()
{
    char id[20];
    int i;
    printf("请输入业主身份证号\n");
    scanf("%s", id);
    for (i = 0; i < count; i++)
    {
        if (strcmp(residents[i].id, id) == 0)
        {
            printf("已为你找到该业主信息\n");
            printf("户主姓名  性别      身份证号       联系电话  楼号     单元号    房号  平米数  每平米物业价格  应缴物业费  备注信息\n");
            printf("%s        %s       %s      %s    %d        %d       %d   %.2f     %.2f       %.2f        %s\n", residents[i].name, residents[i].gender, residents[i].id, residents[i].phone,
                   residents[i].building, residents[i].unit, residents[i].room, residents[i].area, residents[i].price, residents[i].fee, residents[i].remark);
            return;
        }
    }
    printf("身份证号输入错误!\n");
}

  • 写回答

5条回答 默认 最新

  • qzjhjxj 2023-07-01 11:51
    关注

    修改以下几处,即可实现功能,供参考:

    // 函数声明处:
    void change(char* a,char* k); // 修改 char * change(); 
    
    
    // int menumenu(char a[], char k[]) 函数里调用  change(char* a,char* k)函数处:
    int menumenu(char a[], char k[])
    {
        //...........
        case 7:
                   change(a, k); // 修改
                   //a[20]=x;          修改
                   //k[20]=y;          修改
                   break;
        // ............
    }
    
    
    
    
    //  修改管理员信息函数void change(char* a,char* k) 修改如下:
    void change(char* a, char* k)  //char * change()     修改
    {
        int j;
                                   //char x[20], y[20];  //修改
        printf("请输入要更改的管理员的信息:\n");
        printf("1.管理员账户所有信息\n");
        printf("2.管理员密码\n");
        scanf("%d", &j);
        while (1)
        {
            if (j == 1)
            {
                printf("请重新输入管理员账户和密码:\n");
                scanf("%s  %s", a, k);  //scanf("%s  %s", x, y); 修改
                break;
            }
            else if (j == 2)
            {
                printf("请重新输入管理员密码:\n");
                scanf("%s", k);        // scanf("%s", y); 修改
                break;
            }
            else
            {
                printf("输入错误,请重新输入\n");
            }
        }
        //return x,y; 修改
    }
    

    整体修改完成的代码:

    // 物业费管理系统
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100 // 最大住户数量
    
    typedef struct // 住户信息结构体
    {
        char account[20]; // 管理员
        char key[20];     // 密码
        char name[20];    // 户主姓名
        char gender[4];   // 性别
        char id[19];      // 身份证号
        char phone[12];   // 联系电话
        int building;     // 楼号
        int unit;         // 单元号
        int room;         // 房号
        float area;       // 平米数
        float price;      // 每平米物业价格
        float fee;        // 应缴物业费
        int month;        // 入住月份
        char remark[30];  // 备注信息
    } Resident;
    
    Resident residents[MAX]; // 住户信息数组
    int count = 0;           // 住户数量
    
    int menumenu(char *, char *);             // 菜单逻辑
    int mainmenu();                           // 主菜单
    int menu1();                              // 显示物业管理员菜单
    int menu2();                              // 显示业主菜单
    int words(char *, char *);                // 输入管理员账户和密码
    void add_resident();                      // 添加住户信息
    void modify_resident();                   // 修改住户信息
    void delete_resident();                   // 删除住户信息
    void generate_fee();                      // 生成本月物业费
    void save(int);                           // 保存所有住户信息至文档
    void pay_fee();                           // 住户缴费
    void show_all_residents();                // 显示所有住户信息
    void sort_residents_by_fee();             // 按拖欠款项排序
    void show_unpaid_residents_by_building(); // 按楼号分类统计未交清物业费
    void help();                              // 系统帮助
    void check();                             // 查看个人信息
    
    void change(char* a,char* k); // 修改 char * change();
    
    int main()
    {
        char a[10] = "bod";
        char k[20] = "11111";
    
        menumenu(a, k);
        return 0;
    }
    
    int menumenu(char a[], char k[])
    {
        while (1)
        {
    
            switch (mainmenu())
            {
            case 1:
                if (words(a, k))
                {
                    switch (menu1()) // 根据用户选择执行对应的操作
                    {
                    case 1:
                        add_resident();
                        break;
                    case 2:
                        modify_resident();
                        break;
                    case 3:
                        delete_resident();
                        break;
                    case 4:
                        generate_fee();
                        break;
                    case 5:
                        show_all_residents();
                        break;
                    case 6:
                        save(count);
                        break;
                    case 7:
                        change(a, k); // 修改
                        //a[20]=x;  修改
                        //k[20]=y;  修改
                        break;
                    case 8:
                        exit(0); // 退出程序
                    default:
                        printf("输入错误,请重新输入!\n");
                    }
                }
                break;
    
            case 2:
                switch (menu2()) // 根据用户选择执行对应的操作
                {
                case 1:
                    pay_fee();
                    break;
                case 2:
                    sort_residents_by_fee();
                    break;
                case 3:
                    show_unpaid_residents_by_building();
                    break;
                case 4:
                    help();
                    break;
                case 5:
                    check();
                    break;
                case 6:
                    exit(0); // 退出程序
                default:
                    printf("输入错误,请重新输入!\n");
                }
                break;
    
            case 3:
                printf("成功退出系统\n");
                exit(0);
    
            default:
                printf("输入错误,请重新输入!\n");
            }
        }
    }
    
    int mainmenu()
    {
        int a;
        printf("\n**********************************************\n");
        printf("\n             欢迎进入物业费管理系统             \n");
        printf("\n**********************************************\n");
        printf("\n-----------------------------------------------\n");
        printf("\n****************系统功能菜单*****************\n");
        printf("\n-----------------------------------------------\n");
        printf("请选择:(1-3)\n");
        printf("1.物业管理员操作系统\n");
        printf("2.业主操作系统\n");
        printf("3.退出系统\n");
        printf("-----------------------------------------------\n");
        scanf("%d", &a);
        return a;
    }
    
    int menu1()
    {
        int choice;
        printf("\n**********************************************\n");
        printf("\n                物业管理员系统                 \n");
        printf("\n**********************************************\n");
        printf("1. 添加住户信息\n");
        printf("2. 修改住户信息\n");
        printf("3. 删除住户信息\n");
        printf("4. 生成本月物业费\n");
        printf("5. 显示所有住户信息\n");
        printf("6. 保存所有住户当前信息\n");
        printf("7. 修改管理员信息\n");
        printf("8. 退出程序\n");
        printf("请输入要执行的操作(1-8):");
        scanf("%d", &choice);
        return choice;
    }
    
    int menu2()
    {
        int choice;
        printf("\n**********************************************\n");
        printf("\n                 业主操作系统                  \n");
        printf("\n**********************************************\n");
        printf("1. 住户缴费\n");
        printf("2. 按拖欠款项排序\n");
        printf("3. 按楼号分类统计未交清物业费\n");
        printf("4. 帮助\n");
        printf("5. 查看个人信息\n");
        printf("6. 退出程序\n");
        printf("请输入要执行的操作(1-6):");
        scanf("%d", &choice);
        return choice;
    }
    
    int words(char a[], char k[])
    {
        char account[20]; // 管理员
        char key[20];     // 密码
        printf("请输入管理员的账户:\n");
        scanf("%s", account);
        printf("请输入管理员的密码:\n");
        scanf("%s", key);
        if (strcmp(account, a) == 0 & strcmp(key, k) == 0)
        {
            printf("输入正确!\n");
            return 1;
        }
        else if (strcmp(account, a) != 0 & strcmp(key, k) == 0)
        {
            printf("管理员用户不存在!\n");
            return 0;
        }
        else if (strcmp(account, a) == 0 & strcmp(key, k) != 0)
        {
            printf("密码错误!\n");
            return 0;
        }
        else
        {
            printf("输入错误!\n");
            return 0;
        }
    }
    
    void add_resident()
    {
        if (count >= MAX)
        {
            printf("住户数量已达上限,无法添加新住户!\n");
            return;
        }
        printf("请输入户主姓名,性别,身份证号,联系电话,楼号,单元号,房号,平米数,每平米物业价格,备注信息(用空格隔开):\n");
        scanf("%s%s%s%s%d%d%d%f%f%s", residents[count].name, residents[count].gender, residents[count].id, residents[count].phone, &residents[count].building,
              &residents[count].unit, &residents[count].room, &residents[count].area, &residents[count].price, residents[count].remark);
        if (residents[count].building == 0 || residents[count].unit == 0 || residents[count].room == 0)
        {
            printf("你输入的信息有误,请重新输入业主所在楼号,单元号,房间号:\n");
            scanf(" %d,%d,%d", &residents[count].building, &residents[count].unit, &residents[count].room);
        }
        residents[count].fee = 0; // 新住户物业费为0
        printf("添加成功!\n");
        count++; // 住户数量加1
    }
    
    void modify_resident()
    {
        char id[19];
        int a;
        printf("请输入要修改住户的身份证号:\n");
        scanf("%s", id);
        for (int i = 0; i < count; i++)
        {
            if (strcmp(residents[i].id, id) == 0) // 找到要修改的住户
            {
                printf("请选择要修改的信息:(1-11)\n");
                printf("1.户主姓名\n");
                printf("2.性别\n");
                printf("3.身份证号\n");
                printf("4.联系电话\n");
                printf("5.楼号\n");
                printf("6.单元号\n");
                printf("7.房号\n");
                printf("8.平米数\n");
                printf("9.每平米物业价格\n");
                printf("10.备注信息\n");
    
                scanf("%d", &a);
                switch (a)
                {
                case 1:
                    printf("请重新输入户主姓名:\n");
                    scanf("%s", residents[i].name);
                    printf("修改成功!\n");
                    break;
                case 2:
                    printf("请重新输入户主性别:\n");
                    scanf("%s", residents[i].gender);
                    printf("修改成功!\n");
                    break;
                case 3:
                    printf("请重新输入户主身份证号:\n");
                    scanf("%s", residents[i].id);
                    printf("修改成功!\n");
                    break;
                case 4:
                    printf("请重新输入户主联系电话:\n");
                    scanf("%s", residents[i].phone);
                    printf("修改成功!\n");
                    break;
                case 5:
                    printf("请重新输入户主楼号:\n");
                    scanf("%d", &residents[i].building);
                    printf("修改成功!\n");
                    break;
                case 6:
                    printf("请重新输入户主单元号:\n");
                    scanf("%d", &residents[i].unit);
                    printf("修改成功!\n");
                    break;
                case 7:
                    printf("请重新输入户主房号:\n");
                    scanf("%d", &residents[i].room);
                    printf("修改成功!\n");
                    break;
                case 8:
                    printf("请重新输入户主平米数:\n");
                    scanf("%f", &residents[i].area);
                    printf("修改成功!\n");
                    break;
                case 9:
                    printf("请重新输入户主每平米物业价格:\n");
                    scanf("%f", &residents[i].price);
                    printf("修改成功!\n");
                    break;
                case 10:
                    printf("请重新输入户主备注信息:\n");
                    scanf("%s", residents[i].remark);
                    printf("修改成功!\n");
                    break;
                case 11:
                    printf("退出系统成功\n");
                    exit(0);
                    break;
                default:
                    printf("输入错误,请重新输入\n");
                    break;
                }
    
                return;
            }
        }
        printf("该身份证号对应的住户不存在!\n"); // 未找到要修改的住户
    }
    
    void delete_resident()
    {
        char id[19];
        printf("请输入要删除住户的身份证号:\n");
        scanf("%s", id);
        for (int i = 0; i < count; i++)
        {
            if (strcmp(residents[i].id, id) == 0) // 找到要删除的住户
            {
                for (int j = i; j < count - 1; j++) // 将后面的住户信息前移
                {
                    residents[j] = residents[j + 1];
                }
                count--; // 住户数量减1
                printf("删除成功!\n");
                return;
            }
        }
        printf("该身份证号对应的住户不存在!\n"); // 未找到要删除的住户
    }
    
    void generate_fee()
    {
        for (int i = 0; i < count; i++)
        {
            residents[i].fee += residents[i].area * residents[i].price; // 本月物业费为住户面积乘以物业单价
        }
        printf("本月物业费已生成!\n");
    }
    
    void save(int count)
    {
        FILE *fp;
        int i;
        fp = fopen("text.txt", "a");
        fprintf(fp, "户主姓名  性别      身份证号       联系电话  楼号     单元号    房号  平米数  每平米物业价格  应缴物业费  备注信息\n");
        for (int i = 0; i < count; i++)
        {
            fprintf(fp, "%s        %s       %s      %s    %d        %d       %d   %.2f     %.2f       %.2f        %s\n", residents[i].name, residents[i].gender, residents[i].id, residents[i].phone,
                    residents[i].building, residents[i].unit, residents[i].room, residents[i].area, residents[i].price, residents[i].fee, residents[i].remark);
        }
        fclose(fp);
        printf("已完成保存!");
    }
    
    void change(char* a, char* k)  //char * change()     修改
    {
        int j;
                                   //char x[20], y[20];  //修改
        printf("请输入要更改的管理员的信息:\n");
        printf("1.管理员账户所有信息\n");
        printf("2.管理员密码\n");
        scanf("%d", &j);
        while (1)
        {
            if (j == 1)
            {
                printf("请重新输入管理员账户和密码:\n");
                scanf("%s  %s", a, k); //scanf("%s  %s", x, y); 修改
                break;
            }
            else if (j == 2)
            {
                printf("请重新输入管理员密码:\n");
                scanf("%s", k);  // scanf("%s", y); 修改
                break;
            }
            else
            {
                printf("输入错误,请重新输入\n");
            }
        }
        //return x,y; 修改
    }
    
    void pay_fee()
    {
        char id[19];
        float amount;
        char answer[5];
        int m;
        printf("请输入要缴纳物业费的住户的身份证号和金额(用空格隔开):\n");
        scanf("%s%f", id, &amount);
        for (int i = 0; i < count; i++)
        {
            if (strcmp(residents[i].id, id) == 0) // 找到要缴纳物业费的住户
            {
                printf("请输入缴费月份:\n");
                scanf("%d", &residents[i].month);
                printf("请问是否进行缴费?(yes or no)");
                while (strcmp(answer, "YES") != 0 || strcmp(answer, "NO") != 0 || strcmp(answer, "yes") != 0 || strcmp(answer, "no") != 0)
                {
                    scanf(" %s", answer);
                    if (strcmp(answer, "YES") == 0 || strcmp(answer, "yes") == 0)
                    {
                        m = 0;
                        if (m == 0)
                        {
                            if (amount >= residents[i].fee) // 缴纳金额大于等于应缴物业费
                            {
                                amount -= residents[i].fee;
                                residents[i].fee = 0;
                            }
                            else // 缴纳金额小于应缴物业费
                            {
                                residents[i].fee -= amount;
                                amount = 0;
                            }
                            printf("缴费成功!您已在%d月成功缴费!\n", residents[i].month);
                            if (amount > 0) // 如果缴纳金额还有剩余,则提示并退出函数
                            {
                                printf("缴纳金额超过应缴物业费,多余金额为%.2f元,已退回!\n", amount);
                            }
                            break;
                        }
                    }
                    else if (strcmp(answer, "NO") == 0 || strcmp(answer, "no") == 0)
                    {
                        printf("缴费取消\n");
                        break;
                    }
                    else
                    {
                        printf("你的回答有误,请重新输入\n");
                    }
                }
    
                return;
            }
        }
        printf("该身份证号对应的住户不存在!\n"); // 未找到要缴纳物业费的住户
    }
    
    void show_all_residents()
    {
        FILE *fp;
        char ch;
    
        fp = fopen("text.txt", "r");
        if (fp == NULL)
        {
            printf("Failed to open the file!");
            return;
        }
    
        while ((ch = fgetc(fp)) != EOF)
        {
            printf("%c", ch);
        }
    
        fclose(fp);
    
        return;
    }
    
    void sort_residents_by_fee()
    {
        Resident temp;
        for (int i = 0; i < count - 1; i++)
        {
            for (int j = i + 1; j < count; j++)
            {
                if (residents[i].fee < residents[j].fee) // 按拖欠款项多少从大到小排序
                {
                    temp = residents[i];
                    residents[i] = residents[j];
                    residents[j] = temp;
                }
            }
        }
        printf("按拖欠款项多少从大到小排序如下:\n");
        show_all_residents();
    }
    
    void show_unpaid_residents_by_building()
    {
        int building;
        printf("请输入要统计的楼号:\n");
        scanf("%d", &building);
        float sum = 0;
        printf("该楼所有未交清物业费的住户如下:\n");
        printf("户主姓名  性别      身份证号       联系电话  楼号     单元号    房号  平米数  每平米物业价格  应缴物业费  备注信息\n");
        for (int i = 0; i < count; i++)
        {
            if (residents[i].building == building && residents[i].fee > 0) // 按楼号分类统计未交清物业费
            {
                printf("%s        %s       %s      %s    %d        %d       %d   %.2f     %.2f       %.2f        %s\n", residents[i].name, residents[i].gender, residents[i].id, residents[i].phone,
                       residents[i].building, residents[i].unit, residents[i].room, residents[i].area, residents[i].price, residents[i].fee, residents[i].remark);
    
                sum += residents[i].fee;
            }
        }
        printf("该楼所有未交清物业费的总额为%.2f元。\n", sum);
    }
    
    void help()
    {
        printf("\n0.欢迎使用系统帮助!\n");
        printf("\n1.初次使用系统,请按照菜单提示键入数字代号;\n");
        printf("\n2.添加住户信息后,切记保存;\n");
        printf("\n3.谢谢您的使用!\n");
    }
    
    void check()
    {
        char id[20];
        int i;
        printf("请输入业主身份证号\n");
        scanf("%s", id);
        for (i = 0; i < count; i++)
        {
            if (strcmp(residents[i].id, id) == 0)
            {
                printf("已为你找到该业主信息\n");
                printf("户主姓名  性别      身份证号       联系电话  楼号     单元号    房号  平米数  每平米物业价格  应缴物业费  备注信息\n");
                printf("%s        %s       %s      %s    %d        %d       %d   %.2f     %.2f       %.2f        %s\n", residents[i].name, residents[i].gender, residents[i].id, residents[i].phone,
                       residents[i].building, residents[i].unit, residents[i].room, residents[i].area, residents[i].price, residents[i].fee, residents[i].remark);
                return;
            }
        }
        printf("身份证号输入错误!\n");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 创建了问题 7月1日

悬赏问题

  • ¥15 征集Python提取PDF文字属性的代码
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?