#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define N 100
int res = 0;
struct Lodginghouse
{
char Lodginghouse_type[20]; //公寓类型
} Lodginghouse[100];
struct CommonHouse
{
char building_style[20]; //住宅建筑风格
} CommonHouse[100];
struct Villa
{
char villa_style[20]; //别墅建筑材料
} villa[100];
struct House
{
char type[100]; //房屋类型
int number; //房屋编号
// int buildtime; //已经建立多长时间
char sold[100]; //是否售出
int price; //售卖价格
int area; //占地面积(平方米)
// int postion; //房屋位置,例如北京三环
// char balcony[20]; //阳台朝向
// int total_floors; //房屋总层数
} house[100];
void main();
void menu();
void input();
void save(int);
void display();
void del();
void add();
void array();
void search();
void search_num();
void search_name();
void yusuan();
void modify();
void start(); /*定义各函数*/
void start() //开始界面
{
system("cls");//清屏
system("color 1F"); //设置文字颜色为黄色 背景色蓝色
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t********************************************************************************\n");
printf("\n\n");
printf("\t\t************************欢迎使用我们的房屋销售管理系统*************************");
printf("\n\n");
printf("\t\t********************************************************************************\n\n\n\n\n");
printf("\t\t\t\t 制作人: \n");
printf("\t\t\t\t XXX XXX XXX\n");
printf("\t\t\t\t XXX XXX \n");
printf("\t\t\t\t XXX XX \n");
printf("\t\t\t\t XX\n");
printf("\t\t\t\t 制作时间: \n");
printf("\t\t\t\t 2018年6月\n");
printf("\t\t\t ***按任意键进入***\n");
}
void menu() //菜单界面
{
system("cls");
system("color 1F");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t\t************************\n\n");
printf("\t\t\t\t\t**********菜单**********\n\n");
printf("\t\t\t\t\t************************\n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 1 输入 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 2 显示 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 3 查找 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 4 删除 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 5 添加 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 6 修改 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 7 预算 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 8 排序 \n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>> 9 退出 \n\n");
printf("注意:\n");
printf("首次使用该系统,请选择输入选项,且输入选项会覆盖原有信息。");
}
void input() /*录入函数*/
{
int i,m;
system("cls");
printf("需要录入的房屋个数(1--100):\n");
scanf("%d",&m);
for (i = res; i < m + res; i++)
{
printf("请输入房屋类型(公寓,普通住宅,别墅): ");
scanf("%s",&house[i].type);
printf("请输入房屋编号: ");
scanf("%d",&house[i].number);
// printf("请输入已经建立多长时间: ");
// scanf("%d",&house[i].buildtime);
printf("请输入是否售出(是/否): ");
scanf("%s",&house[i].sold);
printf("请输入售卖价格: ");
scanf("%d",&house[i].price);
printf("请输入占地面积: ");
scanf("%d",&house[i].area);
// printf("请输入房屋位置(例如三环输入3): ");
// scanf("%d",&house[i].postion);
// printf("请输入阳台朝向(东南西北): ");
// scanf("%s",&house[i].balcony);
// printf("请输入房屋总层数: ");
// scanf("%d",&house[i].total_floors);
if(strcmp(house[i].type, "公寓") == 0)
{
printf("请输入公寓类型: ");
scanf("%s",&Lodginghouse[i].Lodginghouse_type);
}
else if(strcmp(house[i].type, "普通住宅") == 0)
{
printf("普通住宅建筑风格: ");
scanf("%s",&CommonHouse[i].building_style);
}
else
{
printf("请输入别墅建筑材料: ");
scanf("%s",&villa[i].villa_style);
}
printf("\n");
}
res = i;
printf("\n创建完毕!\n");
save(m);//保存房屋总数m
}
void save(int m) /*保存文件函数*/
{
int i, type;
FILE*fp1, *fp2, *fp3; //声明fp是指针,用来指向FILE类型的对象
if ((fp1=fopen("Lodginghouse","wb"))==NULL) //打开房屋列表文件为空
{
printf ("打开失败\n");
exit(0);
}
if ((fp2=fopen("Ordinary house","wb"))==NULL) //打开房屋列表文件为空
{
printf ("打开失败\n");
exit(0);
}
if ((fp3=fopen("Villa","wb"))==NULL) //打开房屋列表文件为空
{
printf ("打开失败\n");
exit(0);
}
for (i=0; i<m; i++) /*将内存中房屋的信息输出到磁盘文件中去*/
{
if(strcmp(house[i].type, "公寓") == 0)
{
if (fwrite(&house[i],sizeof(struct House),1,fp1)!=1)//写入数据块 &em[i]:是要输出数据的地址 sizeof(struct clerk):获取一个单体的长度 1:数据项的个数 fp:目标文件指针
printf("文件读写错误\n");
if (fwrite(&Lodginghouse[i],sizeof(struct Lodginghouse),1,fp1)!=1)
printf("文件读写错误\n");
}
else if(strcmp(house[i].type, "普通住宅") == 0)
{
if (fwrite(&house[i],sizeof(struct House),1,fp2)!=1)//写入数据块 &em[i]:是要输出数据的地址 sizeof(struct clerk):获取一个单体的长度 1:数据项的个数 fp:目标文件指针
printf("文件读写错误\n");
if (fwrite(&CommonHouse[i],sizeof(struct CommonHouse),1,fp2)!=1)
printf("文件读写错误\n");
}
else
{
if (fwrite(&house[i],sizeof(struct House),1,fp3)!=1)//写入数据块 &em[i]:是要输出数据的地址 sizeof(struct clerk):获取一个单体的长度 1:数据项的个数 fp:目标文件指针
printf("文件读写错误\n");
if (fwrite(&villa[i],sizeof(struct Villa),1,fp3)!=1)
printf("文件读写错误\n");
}
}
fclose(fp1);// 缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区
fclose(fp2);
fclose(fp3);
}
int load(int type) /*导入函数 int型*/
{
int k;
FILE*fp;
int i=0;
if(type == 1) //公寓
{
if((fp=fopen("Lodginghouse","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
while(feof(fp)==0) //检测流上的文件结束符
{
fread(&house[i],sizeof(struct House),1,fp); //读取
fread(&Lodginghouse[i],sizeof(struct Lodginghouse),1,fp);
i++;
}
}
else if(type == 2) //普通住宅
{
if((fp=fopen("Ordinary house","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
while(feof(fp)==0)
{
fread(&house[i],sizeof(struct House),1,fp); //读取
fread(&CommonHouse[i],sizeof(struct CommonHouse),1,fp);
i++;
}
}
else //别墅
{
if((fp=fopen("Villa","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
while(feof(fp)==0)
{
fread(&house[i],sizeof(struct House),1,fp); //读取
fread(&villa,sizeof(struct Villa),1,fp);
i++;
}
}
fclose(fp);
return i - 1;//返回该类房屋个数
}
void search()/*查询函数*/
{
int t,button;
system("cls");//清屏
do
{
printf("\n按1 查询\n按2 回主菜单\n");
scanf("%d",&t);
if(t>=1&&t<=2)
{
button=1;
break;
}
else
{
button=0;
printf("输入错误");
}
}
while(button==0);//回到查询选择项
while(button==1)
{
switch(t)//选择查询方式
{
case 1:
printf("正在查询\n");
search_num();
break;
case 2:
main();
break;
default:
break;
}
}
}
void search_num()//按房屋编号查询
{
int a, k;
int i,t;
int m;
char s[20];
printf("请输入要查询的房屋类型:\n");
scanf("%s", &s);
if(strcmp(s, "公寓") == 0)
k=1;
else if(strcmp(s, "普通住宅") == 0)
k=2;
else
k=3;
m=load(k);
printf("请输入要查找的房屋编号:\n");
scanf("%d",&a);
for(i=0; i<m; i++)
if(a==house[i].number)
{
printf("房屋类型 房屋编号 是否售出 价格(元) 面积(平方米) 位置(环) 阳台朝向 总层数(层)");
if(k == 1) printf(" 公寓类型");
else if(k == 2) printf(" 住宅风格");
else printf(" 别墅材料");
printf("\n");
printf("\n %-6s %-6d %-8s %-7d", house[i].type, house[i].number, house[i].sold, house[i].price);
printf(" %-8d ", house[i].area);
if(k == 1) printf(" %s", Lodginghouse[i].Lodginghouse_type);
else if(k == 2) printf(" %s", CommonHouse[i].building_style);
else printf(" %s", villa[i].villa_style);
break;
}
if(i==m)
printf("\n没有查询到该房\n");
printf("\n");
printf("返回查询函数请按1,继续查询房屋编号请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:
search();
break;
case 2:
break;
default:
break;
}
}
void display() /*浏览函数*/
{
int sold, unsold;
sold = 0; //各类房屋已售数量
int i, type;
char s[20];
printf("请输入要显示的房屋的种类:");
scanf("%s", &s);
if(strcmp(s, "公寓") == 0)
type=1;
else if(strcmp(s, "普通住宅") == 0)
type=2;
else
type=3;
int m=load(type);
system("cls");
printf("房屋类型 房屋编号 是否售出 价格(元) 面积(平方米) 位置(环) 阳台朝向 总层数(层)");
if(type == 1) printf(" 公寓类型");
else if(type == 2) printf(" 住宅风格");
else printf(" 别墅材料");
printf("\n");
for(i=0; i<m+res - 1; i++)
{
if(strcmp(house[i].sold, "是") == 0) sold++;
printf("\n %-6s %-6d %-8s %-7d", house[i].type, house[i].number, house[i].sold, house[i].price);
printf(" %-8d ", house[i].area);
if(type == 1) printf(" %s", Lodginghouse[i].Lodginghouse_type);
else if(type == 2) printf(" %s", CommonHouse[i].building_style);
else printf(" %s", villa[i].villa_style);
}
printf("\n该类楼房已售数量为:%d", sold);
printf("\n该类楼房未售数量为:%d", m + res - 1 -sold);
}
void add()/*添加函数*/
{
FILE*fp;
int n;
int type;
int count=0;
int i;
char s[20];
printf("请输入要增添的房屋的种类:");
scanf("%s", &s);
if(strcmp(s, "公寓") == 0)
type=1;
else if(strcmp(s, "普通住宅") == 0)
type=2;
else
type=3;
int m=load(type);
printf("\n 原来的房屋信息:\n");
display();
printf("\n");
printf("请输入想增加的房屋数:\n");//确定要加入的房屋数n
scanf("%d",&n);
for (i=m; i<(m+n); i++) //添加n个房屋的信息
{
printf("请输入房屋类型(公寓,普通住宅,别墅): ");
scanf("%s",&house[i].type);
printf("请输入房屋编号: ");
scanf("%d",&house[i].number);
printf("请输入是否售出(是/否): ");
scanf("%s",&house[i].sold);
printf("请输入售卖价格: ");
scanf("%d",&house[i].price);
printf("请输入占地面积: ");
scanf("%d",&house[i].area);
if(type == 1)
{
printf("请输入公寓类型: ");
scanf("%s",&Lodginghouse[i].Lodginghouse_type);
}
else if(type == 2)
{
printf("普通住宅建筑风格: ");
scanf("%s",&CommonHouse[i].building_style);
}
else
{
printf("请输入别墅建筑材料: ");
scanf("%s",&villa[i].villa_style);
}
printf("\n");
count=count+1;
printf("已增加的房屋数:\n");
printf("%d\n",count);
}
save(m + n);
printf("\n添加成功\n");
printf("\n增加后的所有房屋信息:\n");
display();//显示添加后的信息
}
void modify() /*修改函数*/
{
int k;
char s[100];
char type[100];
int number;
char sold[100];
int price;
int area;
char Lodginghouse_type[100];
char building_style[20];
char villa_style[20];
int b,c,i,n,t,button;
printf("请输入要修改的房屋所属种类:");
scanf("%s", &s);
if(strcmp(s, "公寓") == 0)
k=1;
else if(strcmp(s, "普通住宅") == 0)
k=2;
else
k=3;
int m=load(k);
system("cls");
printf("\n 原来的房屋信息:\n");
display();
printf("\n");
printf("请输入要修改的房屋的编号:\n");
scanf("%d",&number);
for(button=1,i=0; button&&i<m; i++)
{
if(house[i].number == number)
{
printf("\n该房屋原始记录为:\n");
printf("房屋类型 房屋编号 是否售出 价格(元) 面积(平方米) ");
if(k == 1) printf(" 公寓类型");
else if(k == 2) printf(" 住宅风格");
else printf(" 别墅材料");
printf("\n %-6s %-6d %-8s %-7d", house[i].type, house[i].number, house[i].sold, house[i].price);
printf(" %-8d ", house[i].area);
if(k == 1) printf(" %s", Lodginghouse[i].Lodginghouse_type);
else if(k == 2) printf(" %s", CommonHouse[i].building_style);
else printf(" %s", villa[i].villa_style);
printf("\n确定 按1 ; 不修改请按0\n");
scanf("%d",&n);
if(n==1)
{
printf("\n需要进行修改的选项\n 1.房屋类型 2.房屋编号4.是否售出 5.价格 6.面积");
if(k==1) printf("10.公寓类型 ");
else if(k == 2) printf("10.住宅风格 ");
else printf("10.别墅材料 ");
printf("11.返回上层\n");
printf("请选择序号1-11:\n");
scanf("%d",&c);
if(c>11||c<1)
printf("\n选择错误,请重新选择!\n");
}
button=0;
}
}
if(button==1)
printf("\n没有查到该房屋\n");
do
{
switch(c) /*因为当找到第i个房屋时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个*/
{
case 1:
printf("房屋类型改为: ");
scanf("%s",&type);
strcpy(house[i - 1].type,type);
break;
case 2:
printf("房屋编号改为: ");
scanf("%d",&number);
house[i-1].number=number;
break;
case 4:
printf("该房屋是否售出改为: ");
scanf("%s",&sold);
strcpy(house[i-1].sold, sold);
break;
case 5:
printf("房屋价格改为: ");
scanf("%d",&price);
house[i-1].price=price;
break;
case 6:
printf("房屋面积改为:");
scanf("%d", &area);
house[i-1].area=area;
break;
case 10:
if(k == 1)
{
printf("公寓类型改为:");
scanf("%s", &Lodginghouse_type);
strcpy(Lodginghouse[i-1].Lodginghouse_type, Lodginghouse_type);
break;
}
else if(k == 2)
{
printf("住宅风格改为:");
scanf("%s", &building_style);
strcpy(CommonHouse[i-1].building_style, building_style);
break;
}
else
{
printf("别墅建筑材料改为:");
scanf("%s", &villa_style);
strcpy(villa[i-1].villa_style, villa_style);
break;
}
break;
case 11:
modify();
break;
}
printf("\n");
printf("\n\n 确定修改 请按1 ; 重新修改 请按2: \n");
scanf("%d",&b);
}while(b==2);
printf("\n修改后的所有房屋信息:\n");
printf("\n");
save(m);
display();
printf("\n按1 继续修改 ,不再修改请按0\n");
scanf("%d",&t);
switch(t)
{
case 1:
modify();
break;
case 0:
break;
default :
break;
}
}
void del() /*删除函数 */
{
int type;
char s[100];
int i,j,n,t,button;
int number;
printf("请输入需要删除的房屋所属种类:");
scanf("%s", &s);
if(strcmp(s, "公寓") == 0)
type=1;
else if(strcmp(s, "普通住宅") == 0)
type=2;
else
type=3;
int m=load(type);
printf("\n 原来的房屋信息:\n");
display(); //显示删除前的房屋信息
printf("\n");
printf("请输入需要删除的房屋的编号:\n");
scanf("%d",&number);
for(button=1,i=0; button&&i<m; i++) //主函数中确定button==1时各函数才可以被调用
{
if(house[i].number == number)//按员工姓名查找到某员工 并调出其资料
{
printf("\n该房屋原始记录为:\n");//显示选定员工的信息
printf("房屋类型 房屋编号 是否售出 价格(元) 面积(平方米) ");
if(type == 1) printf(" 公寓类型");
else if(type == 2) printf(" 住宅风格");
else printf(" 别墅材料");
printf("\n %-6s %-6d %-8d %-8s %-7d", house[i].type, house[i].number, house[i].sold, house[i].price);
printf(" %-8d ", house[i].area);
if(type == 1) printf(" %s", Lodginghouse[i].Lodginghouse_type);
else if(type == 2) printf(" %s", CommonHouse[i].building_style);
else printf(" %s", villa[i].villa_style);
printf("\n确定删除 请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i; j<m-1; j++) //从第i项开始 将后一项的各值赋给前一项各对应的 完成对第i项的删除
{
strcpy(house[j].type,house[j+1].type);
house[j].number=house[j+1].number;
// house[j].buildtime=house[j+1].buildtime;
strcpy(house[j].sold, house[j+1].sold);
house[j].price=house[j+1].price;
house[j].area=house[j+1].area;
//house[j].postion=house[j+1].postion;
// strcpy(house[j].balcony, house[j+1].balcony);
//house[j].total_floors=house[j+1].total_floors;
if(type == 1) strcpy(Lodginghouse[j].Lodginghouse_type, Lodginghouse[j+1].Lodginghouse_type);
else if(type == 2) strcpy(CommonHouse[j].building_style, CommonHouse[j+1].building_style);
else strcpy(villa[j].villa_style, villa[j+1].villa_style);
}
button=0;
}
}
}
if(!button)//button==0表明删除已完成
m=m-1;//总房屋数减少一人
else
printf("\n查无此房屋!\n");
printf("\n 删除后的所有房屋信息:\n");
save(m); //调用保存函数
display(); //调用浏览函数
printf("\n继续删除请按1,不再删除请按0\n");
scanf("%d",&t);
switch(t)
{
case 1:
del();
break;
case 0:
break;
default :
break;
}
}
void yusuan()
{
int i;
int type;
char s[100];
int ayusuan = 0; //代表预算
printf("请输入需要预算的房屋种类:");
scanf("%s", &s);
if(strcmp(s, "公寓") == 0)
type=1;
else if(strcmp(s, "普通住宅") == 0)
type=2;
else
type=3;
int m=load(type);
for (i=0; i<m; i++)
{
ayusuan += house[i].price;
}
if(type == 1)
printf("公寓全部卖出的预算为:");
else if(type == 2)
printf("普通住宅全部卖出的预算为:");
else
printf("别墅全部卖出的预算为:");
printf("%d\n", ayusuan);
}
void sort_realw()
{
int i,j,k,m,l;
char s;
printf("请输入需要排序的房屋所属种类:");
scanf("%s",&s);
if(strcmp(s, "公寓") == 0)
l=1;
else if(strcmp(s, "普通住宅") == 0)
l=2;
else
l=3;
m=load(k);
struct House replace;
struct House *p;
p=house;
for(i=0;i<m-1;i++)
{
k=i;
for(j=i+1;j<m;j++)
{
if(p[k].price<p[j].price)
k=j;
replace=house[k];
house[k]=house[i];
house[i]=replace;
}
}
for(i=0;i<m;i++)
{
printf("房间号 面积 价格 类型 销售状态 \n");
printf("\n %-6d %-6d %-8d %-8s %-8s ",house[i].number,house[i].area,house[i].price,house[i].type,house[i].sold);
}
}
void main()//主函数
{
int n, m, button;
char a;
start();
getch();
menu();
do
{
printf("功能选择(1—9 ):\n");
scanf("%d",&n);
if(n>=1&&n<=8)
{
button=1;
break;
}
else if(n == 9)
{
exit(0);
}
else
{
button=0;
printf("您输入有误,请重新选择!");
}
}
while(button==0);
while(button==1)
{
switch(n)
{
case 1:
input();
break;
case 2:
display();
break;
case 3:
search();
break;
case 4:
del();
break;
case 5:
add();
break;
case 6:
modify();
break;
case 7:
yusuan();
break;
case 8:
yusuan();
break;
case 9:
exit(0);
break;
default :
break;
}
getchar();
printf("\n");
printf("按任意键继续\n");
getch();
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf("功能选择(1--9):\n");
scanf("%d",&n);
printf("\n");
}
}
注意:计算房屋的总数的时候,一定注意全局变量数值的初始化与更新