我想将管理员的账户和密码进行修改,应该怎么用函数传递返回值到对应变量,进行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");
}
void modify_resident()
这个修改为
int modify_resident()
将匹配到的 id 返回,主程序据此修改数组
指针 或者引用
#include<stdio.h>
int main(){
int a[10];
int i,m,j,k;
printf("请向数组中输入数据:\n");
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
printf("请输入要删除的数k:\n");
scanf("%d",&k);
for(i=0;i<10;i++){
if(k==a[i]){
m=i;
break;
}
}
for(j=m;j<10;j++){
a[j]=a[j+1];
}
printf("删除k后的数组为:\n");
for(i=0;i<9;i++){
printf("%d,",a[i]);
}
}
修改以下几处,即可实现功能,供参考:
// 函数声明处:
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");
}
要将管理员的账户和密码进行修改,你可以使用函数传递返回值的方式将修改后的值传递给对应的变量。在你的代码中,你可以将change()函数的返回类型修改为void,并将a和k作为参数传递给该函数。在函数内部,你可以直接修改a和k的值。
以下是修改后的代码示例:
void change(char a[], char k[]);
int main() {
char a[10] = "bod";
char k[20] = "11111";
menumenu(a, k);
return 0;
}
void change(char a[], char k[]) {
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");
}
}
strncpy(a, x, sizeof(a));
strncpy(k, y, sizeof(k));
}
int menumenu(char a[], char k[]) {
// ...
case 7:
change(a, k);
break;
// ...
}
参考gpt