资源描述
// 宾馆管理系统
#include<stdio.h>
#include<stdlib.h>
#include<conio.h> /*控制台输入输出,getche()(能在屏幕上显示输入的数据),
getch()(不能在屏幕上显示输入的数)等函数的调用*/
#include<string.h>
#define N 10
typedef struct
{
int fh; /*客房编号*/
char lx[15]; /*客房类型*/
char place[30]; /*客房位置*/
float area; /*客房面积*/
int cs; /*床位数量*/
float price; /*住房单价*/
char dj[15]; /*顾客登记*/
char js[12]; /*顾客结算*/
}kf ;
kf s[N];
void menu();
void display();
void input();
void search();
//void increse();
void modi();
int m;
//功能菜单模块
void menu()
{
printf("\n\n\n\n\n");
printf(" *********************欢迎进入宾馆管理系统*********************\n");
printf(" |=======================================================|\n");
printf(" @ 1、客房编号录入 ; @\n");
printf(" @ 2、客房信息显示; @\n");
printf(" @ 3、客房信息查询; @\n");
printf(" @ 4、客房信息添加; @\n");
printf(" @ 5、客房信息修改 ; @\n");
printf(" @ 6、退出宾馆管理系统; @\n");
printf(" |=======================================================|\n");
printf("\n");
}
void input()
{int i;
FILE *fp;
printf("\n请输入第一个记录:\n");
printf("编号(用0表示结束输入):");
scanf("%d",&s[0].fh);
printf(" 类型:");
scanf("%s",s[0].lx);
printf(" 位置:");
scanf("%s",s[0].place);
printf(" 面积: ");
scanf("%f",&s[0].area);
printf("床位数量:");
scanf("%d",&s[0].cs);
printf("住房单价:");
scanf("%f",&s[0].price);
printf("顾客登记:");
scanf("%s",s[0].dj);
printf("顾客结算: ");
scanf("%s",s[0].js);
for(i=1;s[i-1].fh!=0;i++)
{
printf("\n请输入第%d个记录:\n",i+1);
printf("编号(用0表示结束输入):");
scanf("%d",&s[i].fh);
printf("类型:");
scanf("%s",s[i].lx);
printf("位置:");
scanf("%s",s[i].place);
printf("面积:");
scanf("%f",&s[i].area);
printf("床位数量:");
scanf("%d",&s[i].cs);
printf(" 住房单价:");
scanf("%f",&s[i].price);
printf("顾客登记:");
scanf("%s",s[i].dj);
printf(" 顾客结算:");
scanf("%s",s[i].js);
m=i;}
fp=fopen("kf.dat","w");
for(i=0;i<m;i++)
if(fwrite(&s[i],sizeof( kf),1,fp)!=1)
printf("文件写入错误\n");
fclose(fp);}
//客房信息录入模块
void display()
{
FILE *fp;
int i,n=0;
//void choice();
// kf s[N];
system("cls");
if((fp=fopen("kf.dat","rb"))==NULL)
{printf("\n打开文件失败\n");return;}
printf("||***********************************************************************||\n");
printf("顾客已登记请输入Y,没登记输入N,当编号输入为0时结束\n");
printf("\n|编号| 类型| 位置 | 面积 | 床位数量 | 住房单价 | 顾客登记 | 顾客结算 | \n");
for(i=0;fread(&s[i],sizeof( kf),1,fp)!=0;i++)
{
printf(" |---|-----|------|--------|---------|-----------|----------|----------|\n");
printf("|%4d|%5s|%6s|%5f|%10d|%10f|%10s|%10s|\n",s[i].fh,s[i].lx,s[i].place,s[i].area,s[i].cs,s[i].price,s[i].dj,s[i].js);
n++;}
printf("||**********************************************************************||\n");
if(n==0) printf("\n文件中无记录\n");
else printf("\n文件中共有%d个记录\n",n);
fclose(fp);}
//信息查询模块:
void search()
{
FILE *fp;
int i,n=0,flag=0,temp_fh;
system("cls");
if((fp=fopen("kf.dat","rb"))==NULL)
{ printf("cannot open file!\n");return;}
printf("\n输入要查客房的编号:");
scanf("%d",&temp_fh);
for(i=0;fread(&s[i],sizeof(kf),1,fp)!=0;i++)
{
if(temp_fh==s[i].fh)
{if(flag==0)
printf("||***********************************************************************||\n");
printf("顾客已登记请输入Y,没登记输入N,当编号输入为0时结束\n");
printf("\n|编号| 类型| 位置 | 面积 | 床位数量 | 住房单价 | 顾客登记 | 顾客结算 | \n");
printf(" |---|-----|------|--------|---------|-----------|----------|----------|\n");
printf("|%4d|%5s|%6s|%5f|%10d|%10f|%10s|%10s|\n",s[i].fh,s[i].lx,s[i].place,s[i].area,s[i].cs,s[i].price,s[i].dj,s[i].js);
printf("||**********************************************************************||\n");
flag=1;}
n++;}
if(n==0) printf("文件里没有记录\n");
else if(flag==0)
printf("文件中没有这个房间\n");}
//客房信息添加模块
void increse()
{
int i,k;
//kf s[N];
FILE *fp;
system("cls");
if((fp=fopen("kf.dat","rb"))==NULL)
{
printf("cannot open file!\n");
exit(0);
}
fp=fopen("kf.dat","rb");
// for(i=0;i<m;i++)
// if(fread(&s[i],sizeof(kf),1,fp)!=1)
// {printf("文件写入错误\n"); exit(0);}
for(i=0;i<m;i++)
fread(&s[i],sizeof(kf),1,fp);
fclose(fp);
//k=i;
printf("\n输入添加的客房编号: ");scanf("%d",&s[i].fh);
printf("\n输入添加的客房类型:");scanf("%s",s[i].lx);
printf("\n输入添加的客房位置:");scanf("%s",s[i].place);
printf("\n输入添加的客房面积:");scanf("%f",&s[i].area);
printf("\n输入添加的客房床位数量:");scanf("%d",&s[i].cs);
printf("\n输入添加的客房住房单价: ");scanf("%f",&s[i].price);
printf("\n输入添加的顾客登记:");scanf("%s",s[i].dj);
printf("\n输入添加的顾客结算:");scanf("%s",s[i].js);
printf("\n插入添加的位置:");scanf("%d",&k);
fp=fopen("kf.dat","ab+");
fwrite(&s[i],sizeof( kf),1,fp);
fclose(fp);
}
/*for(flag=1,i=0;flag&&i<k;i++)
{
while(!feof(fp))
for(i=0;i<N;i++)
{
fread(&s[i],sizeof( kf),1,fp);
if(feof(fp)) break;
i++;
}
flag=0;}
if(!flag)
k=k+1;
// fclose(fp);
// flag=i;
// if(k<flag && k>=0)
{//添加
for(j=flag-1;j>=i;j--)
s[j+1]=s[j];
s[i]=flag;
//写回
if((fp=fopen("kf.dat","wb"))==NULL)
{
printf("不能建立文件!!\n");
}
for(i=0;i<k;i++)
fwrite((&s[i],sizeof(kf)),1,fp);
m=m+1;
}
else
{
if((fp=fopen("kf.dat","rb"))==NULL)
{
printf("不能建立文件!!\n");return;
}
fwrite((&s[i],sizeof( kf)),1,fp);
}
fclose(fp);*/
//客房信息修改:输入客房的编号,查看客房的状态,修改此客房的单价和床数, 并显示修改后的结果;
void modi()
{
FILE *fp1,*fp2;
int i,temp_fh,temp_cs;
float temp_price;
system("cls");
if((fp1=fopen("kf.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
if((fp2=fopen("kf3.dat","wb"))==NULL)
{printf("cannot open file\n");exit(0);}
for(i=0;i<m;i++)
if(fread(&s[i],sizeof( kf),1,fp1)!=1)
{printf("文件写入错误\n");exit(0);}
printf("\n输入要修改客房的编号: ");
scanf("%d",&temp_fh);
for(i=0;i<m;i++)
{
if(s[i].fh!=temp_fh)
fwrite(&s[i],sizeof(kf),1,fp2);
else
{
printf("\n输入正确的客房床位数量:");scanf("%d",&temp_cs);
printf("\n输入正确的客房住房单价: ");scanf("%f",&temp_price);
s[i].cs=temp_cs;
s[i].price=temp_price;
fwrite(&s[i],sizeof(kf),1,fp2);
}
}
fclose(fp1);
fclose(fp2);
printf("输出修改后的客房信息如下\n");
fp2=fopen("fk3.dat","rb");
printf("||*****************************宾馆客房管理系统***************************||\n");
printf("\n|编号| 类型| 位置 | 面积 | 床位数量 | 住房单价 | 顾客登记 | 顾客结算 | \n");
for(i=0;fread(&s[i],sizeof(kf),1,fp2)!=0;i++)
{
printf(" |---|-----|------|--------|---------|-----------|----------|----------|\n");
printf("|%4d|%5s|%6s|%5f|%10d|%10f|%10s|%10s|\n",s[i].fh,s[i].lx,s[i].place,s[i].area,s[i].cs,s[i].price,s[i].dj,s[i].js);
}
printf("||**********************************************************************||\n");
fclose(fp2);
fp1=fopen("kf.dat","wb");
fp2=fopen("kf3.dat","rb");
for(i=0;i<m;i++)
if(fread(&s[i],sizeof( kf),1,fp2)!=1)
{printf("文件写入错误\n");exit(0);}
for(i=0;i<m;i++)
fwrite(&s[i],sizeof(kf),1,fp1);
fclose(fp1);fclose(fp2);}
//菜单选择模块
void main()
{
char yes_no;
int choose;
do
{
menu();//显示菜单
printf(" ");
printf("请选择你需要的功能的编号: ");
scanf("%d",&choose);
switch(choose)
{case 1 : input();break;
case 2 :display();break;
case 3:search();break;
case 4:increse();break;
case 5 :modi();break;
case 0 :break;
default :printf("\n %d为非法选项! \n",choose);
}
if(choose==0) break;
printf("\n 继续请按Y,退出按N\n");
do
{
yes_no=getche();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='Y'||yes_no=='y');
}
展开阅读全文