C语言客房管理&酒店管理
#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语言客房管理&酒店管理的更多相关文章
- C语言中的内存管理
开始陆续的发一下唐老师视频的笔记吧,顺便带一些正冲哥书的的内容.不能一下都发出来,因为内容发多了自己也受不了,而且发的都是学习视频时候的一些笔记,可能会有一些问题不是很清晰. 先说一下C语言中的内存管 ...
- WinForm酒店管理软件--框架
WinForm酒店管理软件--框架 搞软件开发4年多了,现在自认为还是菜鸟,从一开始走上工作岗位各种技术对我都很新奇没解决一个问题都觉得很伟大到后来开始对出路的迷茫,到现在我坚信学什么技术不重要,做什 ...
- 酒店管理web项目总结
酒店管理web项目总结 半个月的努力,一个完整的酒店项目也就新鲜出炉了,在项目的制作中总结了一些酒店管理项目的特点. 1.需求分析,酒店管理需要什么? 1)首先系统的安全性,对于任何一个系统来说,安全 ...
- Go语言 函数,工程管理
Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...
- go语言基础之工程管理和工作区介绍
1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...
- C语言之动态内存管理
C语言之动态内存管理 大纲: 储存器原理 为什么存在动态内存的开辟 malloc() free() calloc() realloc() 常见错误 例题 柔性数组 零(上).存储器原理 之前我们提到了 ...
- Go语言系列之依赖管理
依赖管理 为什么需要依赖管理? 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解 ...
- 深圳共创力“研发管理&知识管理”高端研讨交流会在深圳举办!
2017/4/8,由深圳市共创力企业管理咨询公司举办的“研发管理&知识管理”高端研讨会在深圳市南山区圣淘沙国际酒店(翡翠店)隆重召开.此次研讨会由共创力总经理.首席顾问杨学明先生主持.研讨会先 ...
- Linux学习之RPM包管理-yum管理(十七)
Linux学习之RPM包管理-yum管理 目录 IP地址配置 网络yum源 yum命令 光盘yum源搭建 IP地址配置 IP+子网掩码就可以在局域网(内网)使用. IP+子网掩码+网关+DNS就可以访 ...
随机推荐
- mysql中文乱码--存入mysql里的中文变成问号的解决办法
今天,服务器里测试的时候,发现存入数据库的中文全部变成问号了! 首先想到这是编码问题:于是乎再次设置数据库的编码为utf8 可是,问题仍然存在: 后来发现,这个问题的根源应该是: 虽然数据库编码是ut ...
- Fiddler抓包工具下载安装及使用
一.Fiddler简介 简介: Fiddler是一款强大的Web调试工具,他能记录所有客户端和服务器的HTTP/HTTPS请求 工作原理: Fiddler是以代理web服务器的形式工作的,它使用代理地 ...
- Git 使用技巧(一):合并分支
在合并分支之前最好保证你所有的分支都是最新的,所以你可以使用 git pull origin branchName 来拉取远程仓库到本地仓库. 假如有一个 dev 分支需要合并到 master 分支中 ...
- Linux安装JDK并配置环境变量
Linux - 安装jdk并配置环境变量 1. 前往JDK官网, 地址:https://www.oracle.com/java/technologies/downloads/ 复制下载链接 2. ...
- Java Web中MVC设计模式与IOC
MVC是由Model(模型).View(视图).Controller(控制器)三个模块组成 视图:用于做数据展示以及和用户交互的一个界面(html页面) 控制层:能够接受客户端的请求,具体的业务功能还 ...
- Java-随机数据生成器(造数据)
概述 简单易用的随机数据生成器.一般用于开发和测试阶段的数据填充.模拟.仿真研究.演示等场景.可以集成到各种类型的java项目中使用. 优点 非常轻量级(不到1M),容易集成,无需过多第三方依赖 简单 ...
- OSI模型 TCP/IP协议
常见术语 网络相关的术语 1.拓扑:物理拓扑-----体现了设备之间的连接关系 逻辑拓扑----设备之间的通信关系 2.数据载荷:传递的实际信息 3.报文(PDU--协议数据单元) 4.数据头部的作用 ...
- 专注效率提升「GitHub 热点速览 v.22.36」
本周最大的 GitHub 事件无疑是国内多家自媒体报道过的,GitHub 官方或将下架 GitHub Trending 页面.作为 GitHub Trending 长期用户,本周也是找到了实用且提升效 ...
- PostgreSQL 时间函数分类与特性
KingbaseES 时间函数有两大类:返回事务开始时间和返回语句执行时的时间.具体函数看以下例子: 1.返回事务开始时的时间 以下函数返回事务开始的时间(通过 begin .. end 两次调用结果 ...
- 使用Dockfile构建mysql镜像与初始化运行mysql容器
使用docker 构建mysql镜像,并在容器初次创建时初始化数据 Dockerfile FROM mysql:5.7.23 MAINTAINER gradyjiang "jiangzhon ...