#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
using namespace std;
string head_1, head_2, head_3,head_4,head_5;
char a[10],b[10],c[10],d[10],e[10];
int length=0;
typedef struct HNode
{
char roomN[7];
float Price;
float PriceL;
int Beds;
char State[5];
struct HNode *next;
}Hotel, *HLink;
Hotel *createlink()
{
HLink head=(Hotel*)malloc(sizeof(Hotel));
HLink p,q;
float Price,PriceL;
int Beds;
char roomN[10];
char state[10];
p=q=head;
FILE *r= fopen("hotel.txt","r");
if(r==NULL)
{
printf("打开文件失败!");
return NULL;
}
fscanf(r,"%s%s%s%s%s",a,b,c,d,e);
while(fscanf(r,"%s%f%f%d%s",roomN,&Price,&PriceL,&Beds,state)!=EOF)
{
q=(Hotel*)malloc(sizeof(Hotel));
strcpy(q->roomN,roomN);
q->Price=Price;
q->PriceL=PriceL;
q->Beds=Beds;
strcpy(q->State,state);
p->next=q;
p=q;
}
p->next=NULL;
return head;
}
void outlink(HLink &H)
{
HLink p=H->next;
FILE *w =fopen("hotel.txt","w");
if(w==NULL)
{
printf("打开文件失败!");
return;
}
fprintf(w,"%-16s %-16s %-16s %-16s %-16s\n\n",a,b,c,d,e);
while(p)
{
if(p->Price)
fprintf(w,"%-18s %-13.2f %8.2f %12d %20s\n\n",p->roomN,p->Price,p->PriceL,p->Beds,p->State);
p=p->next;
}
fclose(w);
return;
}
void Build(HLink &L)
{
HLink p, r, link, alink;
L = new Hotel;
alink=createlink();
p=alink->next;
FILE *w =fopen("hotel.txt","w");
if(w==NULL)
{
printf("打开文件失败!");
return;
}
fprintf(w,"%-16s %-16s %-16s %-16s %-16s\n\n",a,b,c,d,e);
while(p)
{
if(p->Price)
fprintf(w,"%-18s %-13.2f %8.2f %12d %20s\n\n",p->roomN,p->Price,0.8*p->Price,p->Beds,"free");
p=p->next;
}
fclose(w);
link=L;
L->next = NULL; //先建立一个带头结点的空链表
r = L; //尾指针r指向头结点
fstream file; //打开文件进行读写操作
file.open("hotel.txt");
if (!file)
{
cout << "未找到相关文件,无法打开!" << endl;
exit(0);
}
file >> head_1 >> head_2 >> head_3 >> head_4 >> head_5;
while (!file.eof())
{
//将文件中的信息运用后插法插入到链表中
p = new Hotel;//生成新结点
file >> p->roomN >> p->Price >> p->PriceL >> p->Beds >> p->State;//输入元素值赋给新结点*p的数据域
p->next = NULL;
r->next = p;//将新结点*p插入尾结点*r之后
r = p;//r指向新的尾结点*p
length++;
}
file.close();
}
void Exp(HLink &H)
{
HLink p = H->next;
//printf("roomN Price PriceL Beds State\n");
printf("%-16s %-16s %-16s %-16s %-16s\n\n",a,b,c,d,e);
while(p)
{
if(p->Price==0)
{
p=p->next;
continue;
}
else
//printf("%-8s%-8.0f%-8.0f%-8d%-8s\n",p->roomN,p->Price,p->PriceL,p->Beds,p->State);
printf("%-16s %-14.2f %8.2f %12d %18s\n\n",p->roomN,p->Price,p->PriceL,p->Beds,p->State);
p=p->next;
}
}
int Find(HLink &H, char *roomN)
{
HLink a=H;
int i=0;
while(a&&strcmp(a->roomN,roomN))
{
a=a->next;
i++;
}
if (i>length)
i=0;
return i;
}
void updateH(HLink &H, int beds, char *state)
{
HLink p=H->next,q=H->next;
FILE *w =fopen("hotel.txt","w");
if(w==NULL)
{
printf("打开文件失败!");
return;
}
fprintf(w,"%-16s %-16s %-16s %-16s %-16s\n\n",a,b,c,d,e);
while(p)
{//修改文本
if(p->Price==0)
{
p=p->next;
continue;
}
if (p->Beds==beds)
fprintf(w,"%-18s %-13.2f %8.2f %12d %20s\n\n",p->roomN,p->Price,p->Price,p->Beds,state);
else
fprintf(w,"%-18s %-13.2f %8.2f %12d %20s\n\n",p->roomN,p->Price,p->Price,p->Beds,p->State);
p=p->next;
}
fclose(w);
while(q)
{//修改链表 if(q->Beds==beds)
strcpy(q->State,state);
q=q->next;
}
}
void Add(HLink &H)
{
HLink p=H->next;
p=H->next;
FILE *w =fopen("hotel.txt","w");
if(w==NULL)
{
printf("打开文件失败!");
return;
}
fprintf(w,"%-16s %-16s %-16s %-16s %-16s\n\n",a,b,c,d,e);
while(p)
{
if(p->Price==0)
break;
if(strcmp(p->State,"free")==0)
{
fprintf(w,"%-18s %-13.2f %8.2f %12d %20s\n\n",p->roomN,p->Price,1.2*p->PriceL,p->Beds,p->State);
p->PriceL=1.2*p->PriceL;
}
else
fprintf(w,"%-18s %-13.2f %8.2f %12d %20s\n\n",p->roomN,p->Price,p->PriceL,p->Beds,p->State);
p=p->next;
}
fclose(w);
}
HLink FirstH(HLink &H)
{
HLink p=H->next,max,q=H->next,tmp;
max->PriceL=0;//p->PriceL;
while(p)
{
if(p->PriceL>max->PriceL)
max=p;
p=p->next;
}
printf("%-16s %-16s %-16s %-16s %-16s\n\n",a,b,c,d,e);
printf("%-16s %-14.2f %8.2f %12d %18s\n\n",max->roomN,max->Price,max->PriceL,max->Beds,max->State);
while(q)
{
q=q->next;
if(q->next==max) break;
}//找到了max的直接前驱
tmp=max->next;
max->next=NULL;
q->next=tmp;
FILE *w =fopen("hotel.txt","w");
fprintf(w,"%-16s %-16s %-16s %-16s %-16s\n\n",a,b,c,d,e);
p=H->next;
while(p)
{//修改文本
if(p->Price==0)
{
p=p->next;
continue;
}
fprintf(w,"%-18s %-13.2f %8.2f %12d %20s\n\n",p->roomN,p->Price,p->Price,p->Beds,p->State);
p=p->next;
}
fclose(w);
return max;
free(max);
}
void MoveK1(HLink &H, int k)
{
//将单链表中倒数第k个结点移到第一个结点位置,
//注意:严禁采用先计算链表长度n再减k(即n-k)的方法
HLink p = H->next, q = H, node;
for (int i=0; i<=k; i++)
p = p->next;
//此时p是正数第k+1个结点
while (p)
{
p = p->next;
q = q->next;
}//q为倒数第k+1个
node = q->next;//node是倒数第k个结点
q->next=node->next;
node->next=H->next;
H->next=node;//头结点H指向node
outlink(H);
}
void ReverseN2(HLink &H)
{
//将单链表的正中间位置结点之后的全部结点倒置,
//注意:严禁采用先计算链表长度n再除以2(即n/2)的方法
HLink p=H,q=H;
while (p->next&&p->next->next)
{//利用快慢指针,快指针一次走两步,慢指针一次走一步
p = p->next->next;
q = q->next;
}//q即为正中间的结点
Hotel *pre,*temp,*L=q;
if(L->next)
{//将后半部分链表结点倒置
pre = L->next;
if(pre ->next)
{
p = pre->next;
while(p)
{
temp = p->next;//改变指针指向
p->next = pre;
pre = p;
p = temp;
}
L->next->next = NULL;
L->next = pre;
}
}
outlink(H);
}
void SortPriceL(HLink &H)
{
HLink p, p1, q, pre;
if (H->next)
{
p = H->next->next;
H->next->next = NULL;
while (p)
{
pre = H; //pre指向q的前驱
q = pre->next;
while (q && q->PriceL < p->PriceL)//从链表第二个结点开始找比当前插入值大的结点
{
pre = q;
q = q->next;
}
p1 = p->next;//将p插入到结点pre和p之间
p->next = pre->next;
pre->next = p;
p = p1;
}
}
outlink(H);
}
void upBed(HLink &H,int beds)
{
HLink newnode=(Hotel*)malloc(sizeof(Hotel));
HLink p=H->next;
newnode->Beds=beds;
printf("请输入客房名称和标准价格:\n");
scanf("%s%f",newnode->roomN,&newnode->Price);
newnode->PriceL=newnode->Price;
strcpy(newnode->State,"free");
while(p)
{
if(p->Beds>newnode->Beds&&p->next->Beds<=newnode->Beds)
break;
p=p->next;
}
if(p)
{
newnode->next=p->next;
p->next=newnode;
printf("创建成功!\n");
}
else
printf("输入的床位数不合适,创建失败!\n");
outlink(H);
}
int main()
{
printf("1.读取数据并初始化\n\n2.输出所有函数信息\n\n3.查找房间序号\n\n4.修改入住状态\n\n");
printf("5.空房加价\n\n6.查找最高价房间\n\n7.移动倒数第k个结点为首元结点\n\n");
printf("8.链表后半部分倒置\n\n9.升序排序\n\n10.创建新结点\n\n0.退出\n\n");
HLink H=NULL,p;
int h,j=-1;
char s[10];
while(j!=0)
{
printf("请输入:");
scanf("%d",&j);
printf("\n");
switch(j)
{
case 0:
if(H)
free(H);
break;
case 1:
Build(H);
p=H->next;
printf("链表建立成功!\n");
printf("\n");
break;
case 2:
Exp(H);
printf("\n");
break;
case 3:
printf("请输入想查询的房间名称:");
scanf("%s",s);
h=Find(H,s);
printf("房间序号为%d",h);
if(!h)
printf(",找不到此房间!\n\n");
else
printf("\n");
printf("\n");
break;
case 4:
int m;
char q[10];
printf("请输入房间床位数:");
scanf("%d",&m);
printf("请输入入住状态:");
scanf("%s",q);
updateH(H,m,q);
printf("修改成功!\n");
printf("\n");
break;
case 5:
Add(H);
printf("加价成功!\n");
printf("\n");
break;
case 6:
printf("指针值为:%d\n",FirstH(H));
printf("\n");
break;
case 7:
int k;
printf("请输入k的值:");
scanf("%d",&k);
MoveK1(H,k);
printf("移动成功!\n");
printf("\n");
break;
case 8:
ReverseN2(H);
printf("倒置成功!\n");
printf("\n");
break;
case 9:
SortPriceL(H);
printf("排序成功!\n");
printf("\n");
break;
case 10:
int upbed;
printf("请输入床位数:");
scanf("%d",&upbed);
upBed(H,upbed);
printf("\n");
break;
default:
printf("输入错误!!!\n");
}
}
return 0;
}

C语言客房管理&酒店管理的更多相关文章

  1. C语言中的内存管理

    开始陆续的发一下唐老师视频的笔记吧,顺便带一些正冲哥书的的内容.不能一下都发出来,因为内容发多了自己也受不了,而且发的都是学习视频时候的一些笔记,可能会有一些问题不是很清晰. 先说一下C语言中的内存管 ...

  2. WinForm酒店管理软件--框架

    WinForm酒店管理软件--框架 搞软件开发4年多了,现在自认为还是菜鸟,从一开始走上工作岗位各种技术对我都很新奇没解决一个问题都觉得很伟大到后来开始对出路的迷茫,到现在我坚信学什么技术不重要,做什 ...

  3. 酒店管理web项目总结

    酒店管理web项目总结 半个月的努力,一个完整的酒店项目也就新鲜出炉了,在项目的制作中总结了一些酒店管理项目的特点. 1.需求分析,酒店管理需要什么? 1)首先系统的安全性,对于任何一个系统来说,安全 ...

  4. Go语言 函数,工程管理

    Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...

  5. go语言基础之工程管理和工作区介绍

    1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...

  6. C语言之动态内存管理

    C语言之动态内存管理 大纲: 储存器原理 为什么存在动态内存的开辟 malloc() free() calloc() realloc() 常见错误 例题 柔性数组 零(上).存储器原理 之前我们提到了 ...

  7. Go语言系列之依赖管理

    依赖管理 为什么需要依赖管理? 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解 ...

  8. 深圳共创力“研发管理&知识管理”高端研讨交流会在深圳举办!

    2017/4/8,由深圳市共创力企业管理咨询公司举办的“研发管理&知识管理”高端研讨会在深圳市南山区圣淘沙国际酒店(翡翠店)隆重召开.此次研讨会由共创力总经理.首席顾问杨学明先生主持.研讨会先 ...

  9. Linux学习之RPM包管理-yum管理(十七)

    Linux学习之RPM包管理-yum管理 目录 IP地址配置 网络yum源 yum命令 光盘yum源搭建 IP地址配置 IP+子网掩码就可以在局域网(内网)使用. IP+子网掩码+网关+DNS就可以访 ...

随机推荐

  1. layui框架图片上传至服务器

    注意:只可用于数据量较小的项目,数据量庞大的项目不要用这个,否则会造成图片数量庞大,至服务器运行速度变慢或瘫痪 HTML代码 //前端使用的是layui框架<div class="la ...

  2. Luogu1993 小K的农场 (差分约束)

    \(if \ a - b <= c, AddEdge(b, a, c)\) Be careful, MLE is not good. #include <cstdio> #inclu ...

  3. 微信小程序检查版本更新并重启

    目录 1,前言 2,解决方案 3,调试须知 1,前言 最近开发小程序时候碰上了一个问题,当发布新版本小程序后,需要用户能赶紧用上最新的,避免出问题.查了一下官方文档,总结出几个情况如下: 微信运行时, ...

  4. GitHub Pages 站点建设

    1.简介 GitHub Pages 是通过 GitHub 托管和发布的公共网页,将纯文本转换为静态博客网站. 您可以使用 GitHub Pages 来展示一些开源项目.博客甚或分享您的简历,有内存限制 ...

  5. 如何使用.NET 6的IHostedService和BackgroundService?

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本章是<定制ASP NET 6.0框架系列文章>的第七篇.本文内容和定 ...

  6. [CF1538G] Gift Set (数学简单题)

    题面 相信英文题面也很好理解 有 x \tt x x 个红糖, y \tt y y 个蓝糖.每一个礼包里面要么有 a \tt a a 个红糖+ b \tt b b 个蓝糖,要么是 a \tt a a ...

  7. 面向对象06---static关键字

    public class Preson { { System.out.println("匿名代码块");// 2 } static { System.out.println(&qu ...

  8. 字节跳动端智能工程链路 Pitaya 的架构设计

    Client AI 是字节跳动产研架构下属的端智能团队,负责端智能 AI 框架和平台的建设,也负责模型和算法的研发,为字节跳动开拓端上智能新场景.本文介绍的 Pitaya 是由字节跳动的 Client ...

  9. 三分钟,带你了解PLM

    PLM应用于单一地点或者多个地点的企业内部.以及在产品研发领域具有协作关系的企业之间的.支持产品全生命周期的信息的创建.管理.分发和应用的综合性的应用解决方案,能够集成与产品相关的流程.应用系统和信息 ...

  10. 在Windows Server 2019中配置多元密码策略

    长久以来,微软活动目录中的账户只能配置同一个密码策略.上到管理员账户,下到普通用户的密码策略都是一样的.而且密码策略只能在域级别配置生效.OU级别的密码策略只会对该OU中计算机的本地账户生效.通常认为 ...