房屋租赁管理系统

一.系统总模块设计

1.所有函数展示

  房屋租赁包括房屋编号,小区名,地址,楼层,面积,价格,联系人,电话和租赁状态,共有10个自定义函数:菜单,增加房屋,查找房屋信息,删除房屋,修改房屋,房屋价格排序,房屋列表,搜索房屋对应的结构体下表,最后有读取文件数据和保存文件数据,函数和结构体申明如下

                                    二 .小组任务分工

1.韩博文

编译结构体,写出了deleteHouse函数,change函数sort函数

2.周绪波

写出了主函数以及menu菜单,addNew函数和find函数

3.杨佳澎

写出了search搜索房屋下表函数,以及房屋数据的load读取函数和save保存函数

4.探讨与总结

任务不是一帆风顺的,一个人或许很难写出完美的函数,但是我们相互总结,交流经验,最后拼凑出来的360行代码.

                                    三.子系统设计方案

1.主函数展示

主函数利用load载入文件数据,利用循环和选择语句,如果文件中有数据可以直接读取到数据,也可以选择case1增加房屋数据.

1.menu菜单展示

2.search函数展示

search函数遍历匹配结构体数组,并返回需要的结构体的下标. 注意,找不到会return -1的,这个search函数会配合其他函数多次被用到!

3.find函数展示

find函数用来展示房屋信息,配合search函数找到下标,如果想连续查找,代码中有递归片段支持连续查找,find函数和search是紧密相关的

4.新增房屋addHouse函数展示

循环写入新增的房屋信息,每写完一个房屋的所有信息,都会判断使用者是否需要继续新增房屋

5.deleteHouse函数展示

deleteHouse与search联合使用,先找到需要删除的房屋的下标,然后用循环将后面的覆盖到前面的,想继续删除的话,可以使用递归来实现

6.房屋列表list函数展示

运用循环一一列举即可

7.房屋信息修改change函数

先用search函数找到需要修改的房屋的下标,然后逐个输入新的房屋的信息,以达到对原房屋信息覆盖的目的

8.房屋价格sort函数展示

运用冒泡排序法,将房屋对应下标进行升序排列

9.加载文件数据load函数展示

我们将load函数放在主函数的打头位置,在使用时自动读取文件里已经存好的数据,可以对文件里的数据进行增删改替

10.文件保存save函数

使用者有选项case7:保存并退出,在增删改替换之后若需要保存,则可选择这个选项,新的数据会覆盖原来老数据,并且可以在下一次程序一开始调用load函数时,保证数据是最新的

所有代码展示

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int sum = 0;//全局变量是房屋数量的计数器

struct hou
{
    char num[100];      // 房屋编号
    char name[30];      // 小区名
    char address[100];  // 地址
    int floor;          // 楼层
    int area;           // 面积
    int price;          // 价格
    char peo[100];      // 联系人
    char phone[100];    // 电话
    char status[10];    // 租赁状态 Yes No
} house[100000];

void menu();//菜单
void addNew();//增加房屋
void find();//查找房屋信息
void deleteHouse();//删除房屋
void change();//修改房屋
void list();//房屋列表
void sort();//房屋价格排序
int search(char id[]);//搜索房屋对应的结构体下表
void load();//加载文件数据
void save();//保存文件数据

int main()
{
    load();
    while (1)
    {
        menu();
        int input;
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            addNew();
            break;
        case 2:
            find();
            break;
        case 3:
            deleteHouse();
            break;
        case 4:
            change();
            break;
        case 5:
            list();
            break;
        case 6:
            sort();
            break;
        case 7:
            save();
            return 0;
        }
    }
    return 0;
}

void menu()
{
    system("color F1");
    system("cls");
    printf("------------------------------房屋租赁系统----------------------------------------\n");
    printf("                 1 新 增 房 屋\n");
    printf("                 2 查 找 房 屋\n");
    printf("                 3 删 除 房 屋\n");
    printf("                 4 修 改 房 屋 信 息\n");
    printf("                 5 房 屋 列 表\n");
    printf("                 6 价 格 排 序\n");
    printf("                 7 保 存 并 退 出\n");
    printf("请输入:");
}

void addNew()
{
    system("cls");
    system("color A0");
    for (int i = sum;; i++)
    {
        sum++;
        printf("请输入房屋编号:");
        scanf("%s", house[i].num);
        printf("\n请输入小区名:");
        scanf("%s", house[i].name);
        printf("\n请输入地址:");
        scanf("%s", house[i].address);
        printf("\n请输入楼层:");
        scanf("%d", &house[i].floor);
        printf("\n请输入面积:");
        scanf("%d", &house[i].area);
        printf("\n请输入价格:");
        scanf("%d", &house[i].price);
        printf("\n请输入联系人:");
        scanf("%s", house[i].peo);
        printf("\n请输入电话:");
        scanf("%s", house[i].phone);
        printf("\n请输入房屋状态:");
        scanf("%s", house[i].status);
        printf("退出请输入1,继续请输入2\n");
        int key;
        scanf("%d", &key);
        if (key == 1)
            break;
    }
}

void find()
{
    system("color E4");
    system("cls");
    printf("请输入房屋编号:");
    char op[100];
    scanf("%s", op);
    int j = search(op);
    if (j == -1)
    {
        printf("房屋不存在\n");
        printf("如果继续查找,请输入1,退出输入2\n");
        int qt;
        scanf("%d", &qt);
        if (qt == 1)
        {
            find();
            return;
        }
        else
            return;
    }
    else
    {
        printf("\n");
        printf("房屋编号:%s\n", house[j].num);
        printf("小区名:%s\n", house[j].name);
        printf("地址:%s\n", house[j].address);
        printf("楼层:%d\n", house[j].floor);
        printf("面积:%d\n", house[j].area);
        printf("价格:%d\n", house[j].price);
        printf("联系人:%s\n", house[j].peo);
        printf("电话:%s\n", house[j].phone);
        printf("租赁状态:%s\n", house[j].status);
        printf("如果想继续,请输入1,退出请按2");
        int key;
        scanf("%d", &key);
        if (key == 1)
            find();
        else
            return;
    }
}

void deleteHouse()
{
    system("color C7");
    system("cls");
    int i;
    while (1)
    {
        char t[20];
        printf("请输入需要删除的房屋的编号:");
        scanf("%s", t);
        getchar();
        i = search(t);
        if (i == -1)
        {
            printf("房屋不存在");
            return;
        }
        else
        {
            printf("确定要删除吗,确定输入Y,否则输入N:");
            if (getchar() == 'Y')
            {
                if (i == sum - 1)
                    sum--;
                else
                {
                    for (int j = i; j < sum - 1; j++)
                    {
                        house[j] = house[j + 1];
                    }
                    sum--;
                }

                printf("是否继续,如果停止请输入1,继续请输入2");
                int key;
                scanf("%d", &key);
                if (key == 1)
                    return;
                else
                {
                    deleteHouse();
                    return;
                }
            }
        }
    }
}

int search(char id[])
{
    int i = 0;
    for (i = 0; i < sum; i++)
    {
        if (strcmp(house[i].num, id) == 0)
            return i;
    }
    return -1;
}

void list()
{
    system("color A1");
    for (int j = 0; j < sum; j++)//一一列举
    {
        printf("房屋编号:%s\n", house[j].num);
        printf("小区名:%s\n", house[j].name);
        printf("地址:%s\n", house[j].address);
        printf("楼层:%d\n", house[j].floor);
        printf("面积:%d\n", house[j].area);
        printf("价格:%d\n", house[j].price);
        printf("联系人:%s\n", house[j].peo);
        printf("电话:%s\n", house[j].phone);
        printf("租赁状态:%s\n", house[j].status);
    }
    printf("退出请按1\n");
    int key;
    scanf("%d", &key);
    if (key == 1)
        return;
}

void change()
{
    system("cls");
    system("color B5");
    char t[20];
    int i = 0;
    while (1)
    {
        printf("请输入需要修改的房屋的编号:");
        scanf("%s", t);
        printf("\n");
        i = search(t);
        if (i == -1)
        {
            printf("房屋不存在\n");
            printf("如果继续修改,请输入1,退出输入2");
            int qt;
            scanf("%d", &qt);
            if (qt == 1)
            {
                change();
                return;
            }
            else
                return;
        }
        else
        {
            printf("修改后的小区名:");
            scanf("%s", house[i].name);
            getchar();
            printf("\n");
            printf("修改后的地址:");
            scanf("%s", house[i].address);
            getchar();
            printf("\n");
            printf("修改后的楼层:");
            scanf("%d", &house[i].floor);
            printf("\n");
            printf("修改后的面积:");
            scanf("%d", &house[i].area);
            printf("\n");
            printf("修改后的价格:");
            scanf("%d", &house[i].price);
            printf("\n");
            printf("修改后的联系人:");
            scanf("%s", house[i].peo);
            printf("\n");
            printf("修改后的电话号码:");
            scanf("%s", house[i].phone);
            printf("\n");
            printf("修改后的租赁状态");
            scanf("%s", house[i].status);
            printf("\n");
            printf("如果继续修改,请输入1,退出输入2");
            int qt;
            scanf("%d", &qt);
            if (qt == 1)
            {
                change();
                return;
            }
            else
                return;
        }
    }
}

void sort()
{
    system("color F4");
    system("cls");
    for (int i = 0; i < sum - 1; i++)//冒泡排序
    {
        for (int j = 0; j < sum - i - 1; j++)
        {
            if (house[j].price > house[j + 1].price)
            {
                struct hou tmp = house[j];
                house[j] = house[j + 1];
                house[j + 1] = tmp;
            }
        }
    }
    printf("价格已经按照顺序排列完成\n");
    printf("\n");
}

void load()
{
    FILE* fp = fopen("houses.txt", "r");
    if (fp == NULL)
    {
        printf("无法打开文件\n");
        return;
    }
    fscanf(fp, "%d", &sum);
    for (int i = 0; i < sum; i++)
    {
        fscanf(fp, "%s %s %s %d %d %d %s %s %s", house[i].num, house[i].name, house[i].address, &house[i].floor, &house[i].area, &house[i].price, house[i].peo, house[i].phone, house[i].status);
    }
    fclose(fp);
}

void save()
{
    FILE* fp = fopen("houses.txt", "w");
    if (fp == NULL)
    {
        printf("无法打开文件\n");
        return;
    }
    fprintf(fp, "%d\n", sum);
    for (int i = 0; i < sum; i++)
    {
        fprintf(fp, "%s %s %s %d %d %d %s %s %s\n", house[i].num, house[i].name, house[i].address, house[i].floor, house[i].area, house[i].price, house[i].peo, house[i].phone, house[i].status);
    }
    fclose(fp);
}

  • 35
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值