一.系统总模块设计
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函数展示![](https://img-blog.csdnimg.cn/direct/ebb5f1455ba84b9f9ce64eba948c9455.png)
我们将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);
}