#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. 使用.NET简单实现一个Redis的高性能克隆版(四、五)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...

  2. Git学习与码云实战

    Git学习与码云实战 一.Git安装 概述: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具. 下载安装: 下载地址:http ...

  3. jQuery基础入门(二)

    jQuery 效果 显示和隐藏 在 jQuery 中可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素,以及使用 toggle() 方法能够切换 hide() 和 show() ...

  4. Luogu5367 【模板】康托展开 (康拓展开)

    \(n^2\)暴力 #include <iostream> #include <cstdio> #include <cstring> #include <al ...

  5. 我开源了一个Go学习仓库|笔记预览

    前言 大半个月前我参与了字节后端面试,未通过第四面,面试总结写在了这篇文章: https://juejin.cn/post/7132712873351970823 在此文的末尾,我写到为了全面回顾Go ...

  6. Find-Vulnerability 自动化探测扫描工具简介

    Fvuln 简介 F-vuln(全称:Find-Vulnerability)是一款自动化探测扫描工具,主要适用于日常安全服务.渗透测试人员和RedTeam红队人员使用 它集合的功能包括: 存活IP探测 ...

  7. redis淘汰策略和过期策略

    淘汰策略 https://blog.csdn.net/qq_55961709/article/details/124568269 LRU算法和LFU算法的区别: LRU:最近最少使用,淘汰时间长没有使 ...

  8. Java数据类型扩展及面试题讲解

    这是关于数据类型的面试题,还是比较重要的. 1.整数拓展: 我们肯定都或多或少知道一个问题,叫进制问题.咱们常见的电脑里的二进制,然后咱们平时生活中用的是十进制,然后咱们工作的时候还有一个十六进制跟八 ...

  9. 第六十一篇:Vue的绑定事件和修饰符

    好家伙,补基础加实践 1.绑定事件 我们使用v-on(简写为@)来绑定事件 写个例子, 按钮绑定数字加一(太tm经典了) 在<button>元素中使用@点击事件绑定方法"的&qu ...

  10. 第十五章 部署zookeeper集群

    1.集群规划 主机名 角色 IP hdss7-11.host.com k8s代理节点1.zk1 10.4.7.11 hdss7-12.host.com k8s代理节点2.zk2 10.4.7.12 h ...