#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. NC20471 [ZJOI2007]棋盘制作

    题目链接 题目 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名. 据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对 ...

  2. 总结-DSU ON TREE(树上启发式合并)

    考试遇到一道题: 有一棵n个点的有根树,每个点有一个颜色,每次询问给定一个点\(u\)和一个数\(k\),询问\(u\)子是多少个不同颜色节点的\(k\)级祖先.n<=500000. 显然对每一 ...

  3. LuoguP1020 导弹拦截 (LIS)

    最长不降和单升 #include <iostream> #include <cstdio> #include <cstring> #include <algo ...

  4. MapReduce入门实战

    MapReduce 思想 MapReduce 是 Google 提出的一个软件架构,用于大规模数据集的并行运算.概率"Map(映射)"和"Reduce(归约)" ...

  5. ceph 006 rbd高级特性 rbd快照 镜像克隆 rbd缓存 rbd增量备份 rbd镜像单向同步

    版本 [root@clienta ~]# ceph -v ceph version 16.2.0-117.el8cp (0e34bb74700060ebfaa22d99b7d2cdc037b28a57 ...

  6. mybatis 15: 缓存

    作用 当对某些数据的查询请求频繁,且数据不经常修改时,使用缓存机制可以提高查询效率 注意 mybatis专注于sql查询,数据映射 缓存问题应该交给专门负责缓存的其他第三方框架 mybatis缓存执行 ...

  7. WebMvcConfigurerAdapter过时替换接口或类

    (注意!)WebMvcConfigurerAdapter 在spring 5.0中已经弃用了. 原来的使用方式 @Deprecated public abstract class WebMvcConf ...

  8. monodepth2学习1-原理介绍

    monodepth2介绍 monodepth2是在2019年CVPR会议上提出的一种三维重建算法,monodepth2是基于monodepth进行了改进,采用的是基于自监督的神经网络,提出了一下三点优 ...

  9. Excel 数学函数(一):INT、TRUNC、ROUND、ROUNDUP 和 ROUNDDOWN

    前言 INT.TRUNC.ROUND.ROUNDUP 和 ROUNDDOWN 都是对一个数进行取舍,但是,各自的取舍的方式不一样. INT 函数只有一个参数:TRUNC.ROUND.ROUNDUP 和 ...

  10. 「题解报告」P7301 【[USACO21JAN] Spaced Out S】

    原题传送门 神奇的5分算法:直接输出样例. 20分算法 直接把每个点是否有牛的状态DFS一遍同时判断是否合法,时间复杂度约为\(O(2^{n^2})\)(因为有判断合法的剪枝所以会比这个低).而在前四 ...