业主信息包括:业主编号、业主名称、业主电话、业主房号,业主单位,用电量、用水量、物业费、水电费。试设计一小区物业管理系统,使之能提供以下功能: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做系统