C语言课程设计任务书(酒店房间登记与计费管理系统)

                                                    C语言课程设计任务书(酒店房间登记与计费管理系统)
题目:酒店房间登记与计费管理系统
功能: 1、屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,包括登记入住、查询房间的入住情况、查询当前费用、结账退房等操作。
            2、对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在登记的入住的时候进行选择。
            3、在结账退房时,根据入住的时间,计费方式和房间单价计算出总费用。
            **随便写了下,就献丑啦**

2021/1/20已更新,使用visual studio 2019 无报错,功能正常

2021/11/12更新,Xcode 13 无报错,功能正常​​​​​​​

//头文件
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <time.h>
#include <memory.h>
//定义宏
#define N 100                    //酒店房间容量
#define nice_Day 2000    //豪华房间一天多少钱?(住不起)
#define nice_Hour 100    //豪华房间一小时多少钱?(住不起)
#define poor_Day 1000    //普通房间一天多少钱?(也住不起)
#define poor_Hour 50        //普通房间一小时多少钱?(看起来住得起)
static int roomNumber = 0;    //已开房间数(含正在开)
static int localTime;              //房间持续时间
/*自定义函数声明*/
int createRoom();                //登记入住
int checkRoom();            //查询房间入住情况
int checkMoney();            //查询当前费用
int getout();                    //结账退房
void menu();                    //菜单打印
int clearNext();                    //清屏打印菜单下一步
int    comTime(struct time newT, struct time old);                //计算时间差
int comMoney(int s, int i);                                                //计算金钱
int   scanRoom(int x);                                                        //查找房间
/*自定义函数声明*/
/*结构体部分*/
struct time {                        //时间结构体
    int year;
    int month;
    int date;
    int hour;
    int minute;
};
static struct time nowTime;//现在时间
struct room {                                                                    //房间结构体
    int roomNum;                                //房间号码
    char level[5];                                //房间规格
    char moneyType[5];                        //计费方式
    char sTime[20];                            //字符串形式的时间
    struct time inTime;                        //入住时间
    struct time outTime;                    //退房时间
}room[N + 1];
/*结构体部分*/
/*主函数部分*/
int main() {
    int x;
    menu();                                                //打印菜单
    scanf("%d", &x);
    while (1) {
        switch (x) {                                        //选择结构
        case 0:
            ; break;
        case 1:
            x = createRoom(); break;
        case 2:
            x = checkRoom(); break;
        case 3:
            x = checkMoney(); break;
        case 4:
            x = getout(); break;
        default:
            printf("输入错误,请重新输入\n");
            scanf("%d", &x);
        }
    }
    return 0;
}
/*主函数部分*/
/*自定义函数部分*/
//菜单打印函数
void menu() {
    printf("---------------欢迎来到XXXX酒店------------\n\n");
    printf("---今日特价:豪华房间(%d一天/%d一小时)---\n", nice_Day, nice_Hour);
    printf("---今日特价:标准房间(%d一天/%d一小时)----\n\n", poor_Day, poor_Hour);
    printf("------------------1.登记入住-------------------\n\n");
    printf("------------------2.查询房间入住情况-----------\n\n");
    printf("------------------3.查询当前费用---------------\n\n");
    printf("------------------4.结账退房-------------------\n\n");
    printf("请选择要进行的操作:");
}
//时间打印函数
void showTime(struct time x) {                                                                //按格式打印时间
 
    printf("%d年%d月%d日%d时%d分", x.year, x.month, x.date, x.hour, x.minute);
}
//清屏打印菜单下一步
int clearNext() {
    int x;
    system("cls");
    menu();
    scanf("%d", &x);
    return x;
}
//金额计算函数(返回金额)
int comMoney(int s, int i) {
    float t;
    int mt;
    char nice_Level[10] = "豪华";
    char poor_Level[10] = "标准";
    char day_MonetType[5] = "天";
    char hour_MoneyType[10] = "小时";
    if (strcmp(room[i].level, nice_Level) == 0) {                                //豪华房间
        if (strcmp(room[i].moneyType, day_MonetType) == 0) {            //比较字符串
            t = s / (3600 * 24);
            if (s % (3600 * 24) != 0)                                                        //不满一天算一天
                mt = (int)t + 1;
            else
                mt = (int)t;
            localTime = mt;
            return nice_Day * mt;
        }
        if (strcmp(room[i].moneyType, hour_MoneyType) == 0) {
            t = s / 3600;
            if (s % 3600 != 0)
                mt = (int)t + 1;                                                                    //不满一小时算一小时
            else
                mt = (int)t;
            localTime = mt;
            return nice_Hour * mt;
        }
    }
    if (strcmp(room[i].level, poor_Level) == 0) {                                //标准房间
        if (strcmp(room[i].moneyType, day_MonetType) == 0) {        //比较字符串
            t = s / (3600 * 24);
            if (s % (3600 * 24) != 0)                                                        //不满一天算一天
                mt = (int)t + 1;
            else
                mt = (int)t;
            return poor_Day * mt;
        }
        if (strcmp(room[i].moneyType, hour_MoneyType) == 0) {
            t = s / 3600;
            if (s % 3600 != 0)
                mt = (int)t + 1;                                                                    //不满一小时算一小时
            else
                mt = (int)t;
            return poor_Hour * mt;
        }
    }
    return 0;
}
//房间查找函数(返回房间数组号)
int scanRoom(int x) {
    int i;
    for (i = 0; i < N; i++) {
        if (room[i].roomNum == x)
            return i;
    }
    return N + 1;
}
//时间差计算函数(返回时间差(单位s))
int comTime(struct time NewT, struct time old) {
    time_t t1;
    time_t t2;
    struct tm OldTime;
    struct tm NewTime;
    memset(&OldTime, 0x0, sizeof(OldTime));                                            //分配内存空间
    OldTime.tm_year = old.year - 1900;                                                        // 2019 年表示为 2019 - 1900 = 119
    OldTime.tm_mon = old.month;
    OldTime.tm_mday = old.date;
    OldTime.tm_hour = old.hour;
    OldTime.tm_min = old.minute;
    memset(&NewTime, 0x0, sizeof(NewTime));                                        //分配内存空间
    NewTime.tm_year = NewT.year - 1900;
    NewTime.tm_mon = NewT.month;
    NewTime.tm_mday = NewT.date;
    NewTime.tm_hour = NewT.hour;
    NewTime.tm_min = NewT.minute;
    t1 = mktime(&NewTime);
    t2 = mktime(&OldTime);
    return (t1 - t2);                                                                                            //返回时间差(单位s)
}
//1、登记入住
int createRoom() {                                                                                    //登记入住
    int num, i, x;
    char sTime[20];
    printf("请输入您要登记的房间数\n");
    scanf("%d", &num);
    roomNumber += num;
    if (roomNumber > N) {                                                                        //确认是否超出容量
        printf("对不起,我们无法提供那么多房间\n");
        roomNumber -= num;
    }
    else {
        printf("我们能提供那么多房间\n请录入房间信息\n");
        for (i = 0; i < num; i++) {
            printf("请输入房间规格(豪华or标准)\n");
            scanf("%s", &room[i].level);
            printf("请输入计费方式(天or小时)\n");
            scanf("%s", &room[i].moneyType);
            printf("请输入入住时间(2019年06月24日15时17分示例2019-06-24-15-17)\n");
            scanf("%s", &sTime);
            sscanf(sTime, "%4d-%2d-%2d-%2d-%2d", &room[i].inTime.year, &room[i].inTime.month, &room[i].inTime.date, &room[i].inTime.hour, &room[i].inTime.minute);
            printf("请输入房间号码\n");
            scanf("%d", &room[i].roomNum);
            printf("此房间为%d号房间,请牢记\n", room[i].roomNum);
        }
    }
    return clearNext();
}
//2、查询房间入住情况
int checkRoom() {
    int x, i;
    printf("您要查询的房间号为");
    scanf("%d", &x);
    do {
        i = scanRoom(x);
        if (i == N + 1) {
            printf("对不起,没有此房间的相关登记信息\n是否退回主菜单,是请输入999,否请输入您要查询的房间号");
            scanf("%d", &x);
        }
        else {
            printf("\n%d号房间,房间类型%s,计费方式%s\n是否退回主菜单,是请输入999,否请输入您要查询的房间号", x, room[i].level, room[i].moneyType);
            scanf("%d", &x);
        }
    } while (x != 999);
    return clearNext();
}
//3、查询当前费用
int checkMoney() {
    int x, money, i = 101;
    char sTime[20];
    printf("请输入您要查询的房间号码");
    scanf("%d", &x);
    do {
        i = scanRoom(x);
        if (i == N + 1) {
            printf("对不起,没有此房间的相关登记信息\n是否退回主菜单,是请输入999,否请输入您要查询的房间号");
            scanf("%d", &x);
        }
        else {
            printf("%d号房间,登记入住时间为", x);
            showTime(room[i].inTime);
            printf("请输入当前时间(格式同前)\n");
            scanf("%s", &sTime);
            sscanf(sTime, "%4d-%2d-%2d%2d-%2d", &nowTime.year, &nowTime.month, &nowTime.date, &nowTime.hour, &nowTime.minute);
            x = comTime(nowTime, room[i].inTime);
            money = comMoney(x, i);
            printf("当前费用为%d元\n是否退回主菜单,是请输入999,否请输入您要查询的房间号", money);
            scanf("%d", &x);
        }
    } while (x != 999);
    return clearNext();
}
//4、结账退房
int getout() {
    int x, money, i = 101, t;
    char sTime[20];
    printf("请输入您要退的房间号");
    scanf("%d", &x);
    do {
        i = scanRoom(x);
        if (i == N + 1) {
            printf("对不起,没有此房间的相关登记信息\n是否退回主菜单,是请输入999,否请输入您要退的房间号");
            scanf("%d", &x);
        }
        else {
            printf("请输入当前时间(格式同前)\n");
            scanf("%s", &sTime);
            sscanf(sTime, "%4d-%2d-%2d-%2d-%2d", &nowTime.year, &nowTime.month, &nowTime.date, &nowTime.hour, &nowTime.minute);
            t = comTime(nowTime, room[i].inTime);
            money = comMoney(x, i);
            printf("%d号房间,房间类型%s,计费方式%s,计费时长%d,共计%d元\n感谢您的入住!\n", x, room[i].level, room[i].moneyType, localTime, money);
            for (i; i < N + 1; i++)
                room[i] = room[i + 1];
            printf("是否退回主菜单,是请输入999,否请输入您要退的房间号");
            scanf("%d", &x);
        }
    } while (x != 999);
    return clearNext();
}


      

 

  • 14
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值