服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现简单酒店管理系统

C语言实现简单酒店管理系统

2022-10-24 12:33陆鳴笙 C/C++

这篇文章主要为大家详细介绍了C语言实现简单酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现酒店管理系统的具体代码,供大家参考,具体内容如下

一、问题描述

系统应具有以下主要功能:登记入住:从键盘输入住信息:房间层数,房间号码等;查询入住情况,查询当前费用,退房、退出系统等功能。

二、基本要求

(1)、登记入住。可以输入多个信息,实现本系统数据的初始化。
(2)、列出所有的入住情况,用于顾客查询以及办理入住手续。
(3)、查询当前费用:显示顾客实时费用,便于顾客查询和退房时进行付费。
(4)、退房:办理退房手续,修改系统内信息,将此顾客的住房置空。
(5)、退出系统:对此次操作中信息的增删改后的数据写入文件中,保存后退出。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
#include<stdio.h>
#include<stdlib.h>
#include<time.h>   //调用系统的时间,通过时间的增减计算费用
#include<string.h>
#include<windows.h>
#define N 10
#define HOURROOM 10
#define NORMALROOM 120
#define BIGROOM 300
#define WORTHROOM 500
#define GREATROOM 800
struct room_message{
    int number;        //房间号
    int people;        //有无入住
    int floor;        //楼层数(不同楼层房间类型不同)
    time_t time;        //入住时间,无人住则置空
}ROOM[100];
void BuildRoom()
{    //创建房间 的函数,对系统进行数据的初始化
    FILE *fp=NULL;
    int i,j;
    if((fp=fopen("roommessage.dat","r"))==NULL)
        {
            fp=fopen("roommessage.dat","w");
            for(i=0;i<N;i++)
                {
                    for(j=0;j<N;j++)
                        {
                            ROOM[i*    10+j].number= j;
                            ROOM[i*    10+j].floor= i;
                            ROOM[i*    10+j].people= 0;
                            ROOM[i*    10+j].time= 0;
                            fwrite(&ROOM[i*    10+j],sizeof(struct room_message),1,fp);
                        }
                }
        }
    else {    
        for(i=0;i<N;i++)    
            {
                for(j=0;j<N;j++)
                    {
                        fread(&ROOM[i*    10+j],sizeof(struct room_message),1,fp);
                    }
            }
        }
    fclose(fp);
}
void Printpay(int floor,int room,int fee,int people)
{    //打印所需费用,根据时间计算费用
        time_t time1,time2;
        int a;
        time1 = ROOM[floor*10+room].time;
        time2 = time(NULL);
        if(people==0){
            printf("该房间没有人\n");}
        else {    
            if(floor<2){
                a = ((time2-time1)/3600)+1;
                printf("该房间的费用为%d元\n",a*fee);}
        else{
            a=(((time2-time1)/3600)/24)+1;
            printf("该房间的费用为%d元\n",a*fee);}
    }
}
void CheckOut()
{    //退房函数,引用计算费用函数,并更改入住情况
    int roomnuber,choose,a,b,floor,room,fee;
    FILE *fp=NULL;
    do{
        printf("\n请输入您想退房的房间的房间号:");
        scanf("%d",&roomnuber);
        floor=(roomnuber / 100) - 1;
        room=roomnuber%100;
        floor = (roomnuber/100)-1 ;
        room = (roomnuber%100)-1;
        if(floor>9||floor<0||room<0||room>9){
            printf("您的输入有误,请重新在1-9之间输入\n");
        }
    }while(floor>9||floor<0||room<0||room>9);
    printf("您要退的房间号为%d,它是",roomnuber);
    if(floor==0||floor==1){            
        printf("钟点房\n");
        fee=HOURROOM;
    }
    if(floor==2||floor==3){            
        printf("标准间\n");
        fee=NORMALROOM;
    }
    if(floor==4||floor==5){            
        printf("商务间\n");
        fee=BIGROOM;
    }
    if(floor==6||floor==7){            
        printf("行政套房\n");
        fee=WORTHROOM;
    }
    if(floor==8||floor==9){            
        printf("豪华套房\n");
        fee=GREATROOM;
    }
    do{
        printf("\n您是否确定要退房。\n");
        printf("1.是\n");
        printf("2.不是\n");
        scanf("%d",&choose);
        if(choose!=1&&choose!=2){
            printf("\n您的输入有误,请在1-2之间重新输入\n");
        }
    }while(choose!=1&&choose!=2);
    if(choose==1){
        Printpay(floor,room,fee,ROOM[floor*10+room].people);
        ROOM[floor*10+room].people=0;
        ROOM[floor*10+room].time=0;
        fp=fopen("roommessage.dat","w"); 
        for(a=0;a<N;a++){
            for(b=0;b<N;b++){
                fwrite(&ROOM[a*    10+b],sizeof(struct room_message),1,fp);
            }
        }
        printf("\n退房成功\n");
    }
    fclose(fp);
    system("pause");
}
void PrintRoomFee(int a){                 //打印房间价格
    if(a==1||a==2){
        printf("\n钟点房的费用为每小时%d元\n",HOURROOM);
    }
    if(a==3||a==4){
        printf("\n标准间的费用为每天%d元\n",NORMALROOM);
    }
    if(a==5||a==6){
        printf("\n商务间的费用为每天%d元\n",BIGROOM);
    }
    if(a==7||a==8){
        printf("\n行政套房的费用为每天%d元\n",WORTHROOM);
    }
    if(a==9||a==10){
        printf("\n豪华套房的费用为每天%d元\n",GREATROOM);
    }
}
void CalFee()
{
    int roomnuber,floor,room,fee;
    do{
    printf("\n请输入您想查询费用的房间的房间号(例如101,代表钟点房1号):");
    scanf("%d",&roomnuber);
    floor = (roomnuber/100)-1 ;
    room = (roomnuber%100)-1;
    if(floor>9||floor<0||room<0||room>9){
        printf("您的输入有误,请在1-9之间重新输入\n");
    }
    }while(floor<0||floor>9||room<0||room>9);
    printf("您要找的%d号房为",roomnuber);
    if(floor==0||floor==1){            
        printf("钟点房\n");
        fee=HOURROOM;
    }
    if(floor==2||floor==3){            
        printf("标准间\n");
        fee=NORMALROOM;
    }
    if(floor==4||floor==5){            
        printf("商务间\n");
        fee=BIGROOM;
    }
    if(floor==6||floor==7){            
        printf("行政套房\n");
        fee=WORTHROOM;
    }
    if(floor==8||floor==9){            
        printf("豪华套房\n");
        fee=GREATROOM;
    }
    Printpay(floor,room,fee,ROOM[floor*10+room].people);
}
void ScanRoom(){    //查询入住的函数,读取入住情况
    int a,i,j;
    FILE *fp=NULL;
    void PrintRoomFee(int a);
    printf("\n请选择您要查询的房间种类\n");
    printf("1.钟点房\n");
    printf("2.标准间\n");
    printf("3.商务间\n");
    printf("4.行政套房\n");
    printf("5.豪华套房\n");
    scanf("%d",&a);
    if((fp=fopen("roommessage.dat","r"))!=NULL)//判断文件是否为空{
        for(i=0;i<N;i++)
        {
            for(j=0;j<N;j++)
                {
                    fread(&ROOM[i*10+j],sizeof(struct room_message),1,fp);
                }
        }
            if(a == 1){
            PrintRoomFee(a);
            for(i=0;i<=1;i++){
                for(j=0;j<10;j++){
                    printf("\n第%d层",ROOM[i*10+j].floor+1);
                    printf("第%d号房",ROOM[i*10+j].number+1);
                    if(ROOM[i*10+j].people){
                        printf("房间已入住,请重新选择");
                    }
                    else{
                        printf("房间未入住,可以选择");
                    }
                }
            }
            }
            if(a == 2){
            PrintRoomFee(a);
            for(i=2;i<=3;i++){
                for(j=0;j<10;j++){
                    printf("\n第%d层",ROOM[i*10+j].floor+1);
                    printf("第%d号房",ROOM[i*10+j].number+1);
                    if(ROOM[i*10+j].people){
                        printf("房间已入住,请重新选择");
                    }
                    else{
                        printf("房间未入住,可以选择");
                    }
                }
            }
            }
            if(a == 3){
            PrintRoomFee(a);
            for(i=4;i<=5;i++){
                for(j=0;j<10;j++){
                    printf("\n第%d层",ROOM[i*10+j].floor+1);
                    printf("第%d号房",ROOM[i*10+j].number+1);
                    if(ROOM[i*10+j].people){
                        printf("房间已入住,请重新选择);
                    }
                    else{
                    printf("房间未入住,可以选择");
                    }
                }
            }
            }
            if(a == 4){
            PrintRoomFee(a);
            for(i=6;i<=7;i++){
                for(j=0;j<10;j++){
                    printf("\n第%d层",ROOM[i*10+j].floor+1);
                    printf("第%d号房",ROOM[i*10+j].number+1);
                    if(ROOM[i*10+j].people){
                        printf("房间已入住,请重新选择");
                    }
                    else{
                        printf("房间未入住,可以选择");
                    }
                }
            }
            }
            if(a == 5){
            PrintRoomFee(a);
            for(i=8;i<=9;i++){
                for(j=0;j<10;j++){
                    printf("\n第%d层",ROOM[i*10+j].floor+1);
                    printf("第%d号房",ROOM[i*10+j].number+1);
                    if(ROOM[i*10+j].people){
                        printf("房间已入住,请重新选择");
                    }
                    else{
                        printf("房间未入住,可以选择");
                    }
                }
            }
        }
    }
}
void CheckIn(){      //入住函数,记录时间,更改入住情况
    int a,b,c,i,j;
    FILE *fp=NULL;
    do{
        printf("\n请输入您想入住的房间层数(1~10)");
        printf("\n1~2为钟点房");
        printf("\n3~4为标准间");
        printf("\n5~6为商务间");
        printf("\n7~8为行政套房");
        printf("\n9~10为豪华套房\n");
        scanf("%d",&a);
        if(a<1||a>10){
            printf("您的输入有误,请在1-10之间重新输入\n");
        }
    }while(a<1||a>10);
    PrintRoomFee(a);
    do{
        printf("\n请输入您想入住的房间号(1~10):");
        scanf("%d",&b);    
        if(b<1||b>10){
            printf("您的输入有误,请在1-10之间重新输入\n");    }
    }while(b<1||b>10);
    if((fp=fopen("roommessage.dat","rb"))!=NULL){            //打开文件
    if(ROOM[(a-1)*10+(b-1)].people==0){        //判断房间是否可住
    for(i=0;i<N;i++)
        {
            for(j=0;j<N;j++)
                {
                    fread(&ROOM[i*10+j],sizeof(struct room_message),1,fp);
                }
        }
        fclose(fp);
        printf("\n请输入计划入住的人数:");
        scanf("%d",&c);
        ROOM[(a-1)*10+b-1].people=c;
        ROOM[(a-1)*10+b-1].time=time(NULL);
        fp=fopen("roommessage.dat","w");
        for(a=0;a<N;a++){
            for(b=0;b<N;b++){
                fwrite(&ROOM[a*    10+b],sizeof(struct room_message),1,fp);
            }
        }
    }
    else{
        printf("\n抱歉,该房间已经有人入住\n");
        printf("请选择其他的房间入住\n");
    }
    }
    fclose(fp);
}
int ChangeRoom(){    //酒店管理系统的菜单
    int step;
    BuildRoom();
    do{                //主程序循环
        do{                //选择界面循环
        system("cls");
        printf("\n请输入您想执行的步骤序号\n");
        printf("1.登记入住\n");
        printf("2.查询入住情况\n");
        printf("3.查询当前费用\n");
        printf("4.退房\n");
        printf("5.返回主界面菜单\n");
        scanf("%d",&step);
        if(step<1||step>5)
            {
            printf("\n您的输入有误,请在1-5之间重新输入\n");
            system("pause");
            }
        }while(step<1||step>5);
        switch(step){
        case 1:CheckIn();break;
        case 2:ScanRoom();break;
        case 3:CalFee();break;
        case 4:CheckOut();break;
        case 5:return 0;
    }
    printf("\n请问你还需要执行其他的管理操作吗?\n");
    printf("1.是\n");
    printf("2.否\n");
    do{
        scanf("%d",&step);
        if(step<1||step>2)
            {
                printf("\n您的输入有误,请在1-2之间重新输入\n");
            }
    }while(step<1||step>2);
    }while(step==1);
    return 0;
}
int main()
{
    int step;
    BuildRoom();
    do{                //主程序循环
        do{          //选择界面循环
        system("cls");
        printf("\t\t  *  欢迎使用酒店管理系统  * \n");
        printf("\t\t_____________________________\n");
        printf("\n\t\t||\t1.登记入住\t  ||\n");
        printf("\t\t||\t2.查询入住情况\t  ||\n");
        printf("\t\t||\t3.查询当前费用\t  ||\n");
        printf("\t\t||\t4.办理退房    \t  ||\n");
        printf("\t\t||\t5.退出系统\t  ||\n");
        printf("\t\t_____________________________\n");
        scanf("%d",&step);
        if(step<1||step>5)
            {
            printf("\n您的输入有误,请在1-10之间重新输入\n");
            system("pause");
            }
        }while(step<1||step>5);
        switch(step){
        case 1:CheckIn();break;
        case 2:ScanRoom();break;
        case 3:CalFee();break;
        case 4:CheckOut();break;
        case 5:exit(0);
    }
    printf("\n请问你还需要执行其他的管理操作吗?\n");
    printf("1.是\n");
    printf("2.否\n");
    do{
        scanf("%d",&step);
        if(step<1||step>2)
            {
                printf("\n您的输入有误,请在1-2之间重新输入\n");
            }
    }while(step<1||step>2);
    }while(step==1);
    return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/cjl1831050185/article/details/109231634

延伸 · 阅读

精彩推荐
  • C/C++C语言实现简单万年历

    C语言实现简单万年历

    这篇文章主要为大家详细介绍了C语言实现简单万年历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    plokday6572021-08-19
  • C/C++C语言中的强符号和弱符号介绍

    C语言中的强符号和弱符号介绍

    这篇文章主要介绍了C语言中的强符号和弱符号介绍,本文用多个实例来讲解强符号和弱符号,需要的朋友可以参考下...

    C语言教程网12492021-02-23
  • C/C++C++ COM编程之QueryInterface函数(二)

    C++ COM编程之QueryInterface函数(二)

    这篇文章主要介绍了C++ COM编程之QueryInterface函数(二),本文是第二篇,第一篇请参阅相关文档,需要的朋友可以参考下...

    果冻想12322021-02-04
  • C/C++C语言的预处理介绍

    C语言的预处理介绍

    大家好,本篇文章主要讲的是C语言的预处理介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览...

    Ssorrymaker5322022-07-31
  • C/C++C++ Primer的变量和基本类型详解

    C++ Primer的变量和基本类型详解

    这篇文章主要为大家介绍了C++ Primer,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...

    _逮虾户5972022-08-09
  • C/C++C语言实现小型电子词典

    C语言实现小型电子词典

    这篇文章主要为大家详细介绍了C语言实现小型电子词典,用户可以进行英译汉、汉译英等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    个快快4392021-07-25
  • C/C++C语言实现简单回声服务器

    C语言实现简单回声服务器

    这篇文章主要为大家详细介绍了C语言实现简单回声服务器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    reg1834312022-10-11
  • C/C++虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

    虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

    本篇文章是对虚函数与纯虚函数进行了详细的分析介绍,需要的朋友参考下...

    C++教程网2462020-12-16