C語言實現酒店預訂管理系統

本文實例為大傢分享瞭C語言實現酒店預訂管理系統的具體代碼,供大傢參考,具體內容如下

課設要求:

客房信息管理。

客人預訂及入住信息管理。

各種查詢和統計功能。

本系統要有通用性、界面美觀、操作方便。要考慮系統安全。 可增加其他有用的功能。

頭文件function.h

#pragma once
#include <stdio.h>
#include "struct.h"
void color1();//背景顏色
void changecolor1();//修改背景顏色
void registers();//登錄,驗證密碼
void showroomtype();//顯示房間類型
void inquirevacant();//查詢選擇的房間是否有空房,並輸出查詢結果。
void interface();//顯示界面
Room* readroom();//從文件裡面讀出來room放到鏈表裡面
void saveroom();//保存文件信息
void emptyroom();//清空一個房間
void inputroom();//填寫一個房間
Order* exploitorderhead();//開辟一個訂單頭
void chooseroomtype();//選擇房間類型
int judgeid();//判斷身份證號碼是否符合要求
int judgephone();//判斷電話號是否符合要求11位全數字
void openroom();//開房
void saveorder();//保存訂單
Order* readorder();//讀取訂單
int Check_date1();//檢驗日期是否合法
int Check_date2();//檢驗日期是否合法
void deletedisabledorder();//刪除失效訂單
int Check_date3();//檢驗日期是否合法
void checkchar();//將字符串後面的\n去掉
void checkchar1();//將字符串後面加上\n
void changeorder();//修改訂單
void deleteorder();//刪除訂單
void changeKEY();//修改密碼
void search2();//查詢訂單
void search1();//查詢房間
void statistics();//統計訂單
int time_1();// 檢查訂單時間是否大於輸入時間
int Check_date4();
void read_();//讀取數據
void backups();//備份
int FindSubstring();//查詢字串

頭文件struct.h

#pragma once
typedef struct costomer {
    char name[40];
    char idcard[20];
    char phonenumber[20];
}Costomer;
typedef struct room {
    char roomnumber[10];
    char type[10];
    int flag;
    Costomer u;
    struct room* rnext;
 
}Room;
typedef struct order {
    Room* room_;
    int hour[2];
    int day[2];
    int mon[2];
    int year[2];
    struct order* onext;
}Order;
typedef struct administrator {
    char username[20];
    char password[20];
}Administrator;

function.c

#include "function.h"
#include <stdlib.h >
#include "struct.h"
#include <string.h>
#include <time.h>
#include <windows.h>
#include <stdio.h>
extern Room* rhead;
extern Order* ohead;
void registers() {
    time_t timep;
    struct tm* p;
    time(&timep);
    p = gmtime(&timep);
    char s[15], c[15];
    FILE* fp = fopen("password.txt", "r");
    if (fp == NULL) {
        printf("Failed to open file");
    }
    fgets(s, 14, fp);//讀出文件中的密碼
    fclose(fp);
    color1();//根據之前修改的顏色更新系統顏色
    printf("\n請輸入登錄密碼:");
    gets(c);
    while (strcmp(c, s) != 0) { //判斷密碼是否正確,不正確的話重新輸入。
        printf("\n密碼錯誤請重試");
        gets(c);
    }
    if (strcmp(c, s) == 0) {
        read_();
        while (1)
        {
 
            system("cls");//清空界面
            color1();//根據之前修改的顏色更新系統顏色
            printf("\n\n\n\n");
            printf(" ***********************************************\n");
            printf(" ^_^  ^_^  ^_^  ^_^  ^_^  ^_^  ^_^  ^_^  ^_^ ^_^\n");
            printf(" ***********************************************\n");
            printf("_______________________________________________\n");
            printf("┃                                            ┃\n");
            printf("┃              酒店預約管理系統              ┃\n");
            printf("┃            歡迎來到白山黑水酒店!          ┃\n");
            printf("┃            現在是%d年", 1900 + p->tm_year);/*獲取當前年份,從知1900開始,所以要加1900*/
            printf("%d月", 1 + p->tm_mon);/*獲取當前月份,范圍是0-11,所以要加1*/
            printf("%d日", p->tm_mday);/*獲取當前月份日數,范圍是1-31*/
            printf("%d時", 8 + p->tm_hour);/*獲取當前時,這裡獲取西方的時百間,剛好相差八個度小時*/
            printf("         ┃\n");
            printf("┃                                            ┃\n");
            printf("┃                                            ┃\n");
            printf("┃____________________________________________┃\n");
            printf("***********************************************\n");
            printf("***********************************************\n");
            printf("**            1.客戶入住信息登記             **\n");
            printf("**            2.修改背景顏色                 **\n");
            printf("**            3.修改密碼                     **\n");
            printf("**            4.查詢信息                     **\n");
            printf("**            5.修改訂單信息                 **\n");
            printf("**            6.刪除訂單                     **\n");
            printf("**            7.統計信息                     **\n");
            printf("**            8.備份                         **\n");
            printf("**            9.退出並保存                   **\n");
            printf("***********************************************\n");
            printf("***********************************************\n");
            printf("***********************************************\n");
            printf("^_^  ^_^  ^_^  ^_^  ^_^  ^_^  ^_^  ^_^  ^_^ ^_^\n");
            printf("***********************************************\n");
            printf("               選擇操作:");
            int m;
            char t[20];
            scanf("%d", &m);
            while (m < 1 || m>9) { printf("\n請按要求輸入"); scanf("%d", &m); }
            if (m== 9)
            {
                saveorder();
                saveroom();
            }
            switch (m) {
            case 1: { chooseroomtype(); break; }
            case 2: {changecolor1(); break; }
            case 3:changeKEY(); break;
            case 4: { {system("cls");
                printf("選擇查詢類別:\n");
                printf("1.查詢房間信息\n");
                printf("2.查詢訂單信息\n");
                printf("輸入選項:");
                gets(t);
                while ((strcmp(t, "1") != 0) && (strcmp(t, "2") != 0)) {
                    printf("\n請按要求輸入\n");
                    gets(t);
                    fflush(stdin);
                }
                if ((strcmp(t, "1") == 0))search1();//查詢房間
                if ((strcmp(t, "2") == 0))search2();//查詢訂單
                }; break; }
            case 5: {changeorder(); break; }
            case 6: {deleteorder(); break; }
            case 7: {statistics(); break; }
            case 8: {backups(); break; }
            case 9: {exit(0); break; }
             
            }
        }
 
    }
}
Room* readroom()//從文件裡面讀出來room放到鏈表裡面
{
    FILE* fp = NULL;
    char ch;
    Room* rhead;
    rhead = (Room*)malloc(sizeof(Room));
    if (rhead != NULL)
    {
        rhead->rnext = NULL;
    }
    Room* p = rhead;
    Room* q = rhead;
    if ((fp = fopen("room.txt", "r+")) == NULL)
    {
        printf("can't open the file\n");
        system("pause");
        return NULL;
    }
    while (!feof(fp))
    {
        p = (Room*)malloc(sizeof(Room));
        fgets(p->roomnumber, 20, fp);//讀進來的還有換行符
        //printf("%s\n",p->roomnumber);
        fgets(p->type, 20, fp);//讀進來的還有換行符
        //printf("%s\n",p->type);
        fscanf(fp, "%d", &(p->flag));
        //printf("%d\n",p->flag);
        ch = fgetc(fp);
        ch = fgetc(fp);
        q->rnext = p;
        q = p;
    }
    q->rnext = NULL;
    fclose(fp);
    return rhead;//返回指針的頭
}
void saveroom() {
    FILE* fp = NULL;
    Room* p = rhead->rnext;
    if ((fp = fopen("room.txt", "w")) == NULL)
    {
        printf("can't open the room file\n");
        system("pause");
    }
 
    while (p != NULL) {
        fputs(p->roomnumber, fp);
        fputs(p->type, fp);
        fprintf(fp, "%d", p->flag);
        fputc('\n', fp);
        if (p->rnext != NULL)fputc('\n', fp);
        p = p->rnext;
    }
    fclose(fp);
}
void emptyroom(char roomnumber_[10])//清空一個房間
{
    Room* p = rhead->rnext;
    while (p != NULL) {
        if (strcmp(roomnumber_, p->roomnumber) == 0) {
            p->flag = 0;
            break;
        }
        p = p->rnext;
 
    }
}
int judgeid(char t[])
{
    int flag = 0;
    int i = 0;
    for (i = 0; i < 18; i++) {
        if (i <= 16)
            if (t[i] < '9' && t[i]>'0')flag = 0;
            else flag = 1;
        if (i == 17)
            if (t[i] == 'X' || (t[i] < '9' && t[i]>'0'))
                flag = 0;
            else flag = 1;
    }
    return flag;//身份證號碼符合規則的話返回0,else返回1.
}
int judgephone(char t[]) {
    int flag = 0;
    int i = 0;
    for (i = 0; i < 11; i++) {
 
        if (t[i] <= '9' && t[i] >= '0')flag = 0;
        else flag = 1;
    }
    return flag;//電話號符合規則的話返回0,else返回1.
}
Order* exploitorderhead() {
    ohead = (Order*)malloc(sizeof(Order));
    if (ohead != NULL)
    {
        ohead->onext = NULL;
        return ohead;
    }
    else
        printf("開辟訂單頭失敗\n");
}
void chooseroomtype() {
    char c[20];
    char choice[10];
    while (1) {
        system("cls");
        printf("房間類型:\n");
        printf("1.single\n");
        printf("2.double\n");
        printf("3.triple\n");
        printf("4.four\n");
        printf("5.返回上一層\n");
        printf("請輸入你的選擇:");
        fflush(stdin);
        rewind(stdin);
        gets(c);
        while ((strcmp(c, "1") != 0) && (strcmp(c, "2") != 0) && (strcmp(c, "3") != 0) && (strcmp(c, "4") != 0) && (strcmp(c, "5") != 0)) {
            printf("選擇有誤,請重新輸入:");
            gets(c);
        }
        {
            if (strcmp(c, "1") == 0) {
                strcpy(choice, "single\n");
                openroom(choice);
            }
            if (strcmp(c, "2") == 0) {
                strcpy(choice, "double\n");
                openroom(choice);
            }
            if (strcmp(c, "3") == 0) {
                strcpy(choice, "triple\n");
                openroom(choice);
            }
            if (strcmp(c, "4") == 0) {
                strcpy(choice, "four\n");
                openroom(choice);
            }
            if (strcmp(c, "5") == 0) {
                break;
                system("pause");
            }
        }
    }
 
}
void inquirevacant(char c[])
{
    int flag1 = 0, flag2 = 0, flag3 = 0, flag4 = 0;
    Room* p = rhead;
    while (p != NULL) {
        if (p->flag == 0) {
            if (strcmp(p->type, "single\n") == 0)
                flag1++;
            if (strcmp(p->type, "double\n") == 0)
                flag2++;
            if (strcmp(p->type, "triple\n") == 0)
                flag3++;
            if (strcmp(p->type, "four\n") == 0)
                flag4++;
        }
        p = p->rnext;
 
    }
    if (strcmp(c, "single\n") == 0)
    {
        if (flag1 >= 1) {
            printf("房間類型選擇成功\n");
            openroom(c);
        }
        else
        {
            printf("抱歉,該類房間沒有空房,請重新選擇");
            system("pause");
            system("cls");
            chooseroomtype();
 
        }
    }
    if (strcmp(c, "double\n") == 0)
    {
        if (flag2 >= 1) {
            printf("房間類型選擇成功\n");
            openroom(c);
        }
        else
        {
            printf("抱歉,該類房間沒有空房,請重新選擇");
            system("pause");
            system("cls");
            chooseroomtype();
        }
    }
    if (strcmp(c, "triple\n") == 0)
    {
        if (flag3 >= 1) {
            printf("房間類型選擇成功\n");
            openroom(c);
        }
        else
        {
            printf("抱歉,該類房間沒有空房,請重新選擇");
            system("pause");
            system("cls");
            chooseroomtype();
        }
    }
    if (strcmp(c, "four\n") == 0)
    {
        if (flag4 >= 1) {
            printf("房間類型選擇成功\n");
            openroom(c);
        }
        else
        {
            printf("抱歉,該類房間沒有空房,請重新選擇");
            system("pause");
            system("cls");
            chooseroomtype();
        }
    }
}
void openroom(char t[]) {
    Room* p = rhead;
    Order* op = ohead;
    while (op->onext != NULL) {
        op = op->onext;
    }//找到指針末尾。
    Order* oop = (Order*)malloc(sizeof(Order));
    op->onext = oop;
    oop->onext = NULL;
    char id[40];
    char phonenumber_[20];
    while (p != NULL) {
        if (p->flag == 0 && strcmp(p->type, t) == 0) {
            p->flag = 1;
            oop->room_ = p;
            printf("請輸入房主姓名:");
            fflush(stdin);
            rewind(stdin);
            scanf("%s", p->u.name);
            checkchar1(p->u.name);//加上\n方便以後判斷
            printf("請輸入18位的身份證號碼:");
            fflush(stdin);
            rewind(stdin);
            scanf("%s", id);
            while (strlen(id) != 18 || judgeid(id) != 0) {//判斷身份證號是否符合規則。
                printf("身份證號碼格式有誤,請重新輸入:");
                fflush(stdin);
                rewind(stdin);
                scanf("%s", id);
            }
            checkchar1(id);//加上\n方便以後判斷
            strcpy(p->u.idcard, id);
            printf("請輸入11位電話號:");
            fflush(stdin);
            rewind(stdin);
            scanf("%s", phonenumber_);
            while (strlen(phonenumber_) != 11 || judgephone(phonenumber_) != 0)
            {//判斷電話號號是否符合規則。
                printf("電話號不符合要求,請重新輸入:");
                fflush(stdin);
                rewind(stdin);
                scanf("%s", phonenumber_);
            }
            checkchar1(phonenumber_);//加上\n方便以後判斷
            strcpy(p->u.phonenumber, phonenumber_);
            printf("請輸入入住時間:年月日時(24時)中間請用/隔開:");
            fflush(stdin);
            rewind(stdin);
            while ((scanf("%d/%d/%d/%d", &oop->year[0], &oop->mon[0], &oop->day[0], &oop->hour[0])) != 4 || Check_date1(oop->year, oop->mon, oop->day, oop->hour) != 0) {//判斷日期是否大於當前日期
                printf("日期輸入有誤,");
                printf("請重新輸入入住時間:年月日時(24時)中間請用/隔開:");
                fflush(stdin);
                rewind(stdin);
            }
            printf("請輸入離開時間:年月日時(24時)中間請用/隔開:");
            fflush(stdin);
            rewind(stdin);
            while ((scanf("%d/%d/%d/%d", &oop->year[1], &oop->mon[1], &oop->day[1], &oop->hour[1])) != 4 || Check_date2(oop->year, oop->mon, oop->day, oop->hour) != 0) {//判斷離開日期是否入住當前日期
                printf("日期輸入有誤,");
                printf("請重新輸入離開時間:年月日時(24時)中間請用/隔開:");
            }
            printf("您的房間號碼:%s", p->roomnumber);
            printf("創建訂單成功\n");
            fflush(stdin);
            rewind(stdin);
            break;
        }
        p = p->rnext;
    }
    system("pause");
}
void showroomtype() {
    system("cls");
    printf("房間類型:\n");
    printf("1.single\n");
    printf("2.double\n");
    printf("3.triple\n");
    printf("4.four\n");
}
void saveorder() {
    FILE* fp = NULL;
    if ((fp = fopen("order.txt", "w")) == NULL)
    {
        printf("can't built the order file\n");
        system("pause");
    }
    Order* p = ohead->onext;
    while (p != NULL) {
        fputs(p->room_->roomnumber, fp);//連換行符一起保存
        fputs(p->room_->type, fp);//連換行符一起保存
        fputs(p->room_->u.name, fp);//連換行符一起保存
        fputs(p->room_->u.idcard, fp);//連換行符一起保存
        fputs(p->room_->u.phonenumber, fp);//連換行符一起保存
        fprintf(fp, "%d", p->year[0]);
        fputc('/', fp);
        fprintf(fp, "%d", p->mon[0]);
        fputc('/', fp);
        fprintf(fp, "%d", p->day[0]);
        fputc('/', fp);
        fprintf(fp, "%d", p->hour[0]);
        fputc('\n', fp);
        fprintf(fp, "%d", p->year[1]);
        fputc('/', fp);
        fprintf(fp, "%d", p->mon[1]);
        fputc('/', fp);
        fprintf(fp, "%d", p->day[1]);
        fputc('/', fp);
        fprintf(fp, "%d", p->hour[1]);
        fputc('\n', fp);
        if (p->onext != NULL)fputc('\n', fp);
        p = p->onext;
    }
    fclose(fp);
 
}
Order* readorder() {
    FILE* fp = NULL;
    char ch;
    Order* ohead = exploitorderhead();
    Order* p = ohead;
    Order* q = ohead;
    Room* u;
    if ((fp = fopen("order.txt", "r+")) == NULL)
    {
        printf("can't open the file\n");
        system("pause");
        return NULL;
    }
    ch = fgetc(fp);
    if (!feof(fp)) {
        rewind(fp);
        while (!feof(fp))
        {
            p = (Order*)malloc(sizeof(Order));
            u = (Room*)malloc(sizeof(Room));
            p->room_ = u;
            fgets(p->room_->roomnumber, 40, fp);//讀進來的還有換行符
            fgets(p->room_->type, 10, fp);//讀進來的還有換行符
            fgets(p->room_->u.name, 40, fp);//讀進來的還有換行符
            fgets(p->room_->u.idcard, 20, fp);//讀進來的還有換行符
            fgets(p->room_->u.phonenumber, 20, fp);//讀進來的還有換行符
            fscanf(fp, "%d/%d/%d/%d", &p->year[0], &p->mon[0], &p->day[0], &p->hour[0]);
            ch = fgetc(fp);
            fscanf(fp, "%d/%d/%d/%d", &p->year[1], &p->mon[1], &p->day[1], &p->hour[1]);
            ch = fgetc(fp);
            ch = fgetc(fp);
            q->onext = p;
            q = p;
        }
    }
    q->onext = NULL;
    fclose(fp);
    return ohead;
}
int Check_date1(int year_[2], int month_[2], int date_[2], int hour_[2]) {
    int flag = 0;
    time_t timep;
    struct tm* p;
    time(&timep);
    p = gmtime(&timep);
    /*printf("%d\n", p->tm_sec); 獲取當前秒
    printf("%d\n", p->tm_min);獲取當前分
    printf("%d\n", 8 + p->tm_hour);獲取當前時,這裡獲取西方的時間,剛好相差八個小時
    printf("%d\n", p->tm_mday);獲取當前月份日數,范圍是1-31
    printf("%d\n", 1 + p->tm_mon);獲取當前月份,范圍是0-11,所以要加1
    printf("%d\n", 1900 + p->tm_year);獲取當前年份,從1900開始,所以要加1900
    printf("%d\n", p->tm_yday); 從今年1月1日算起至今的天數,范圍為0-36*/
    unsigned char Month_buf[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (month_[0] == 2)
        (((year_[0] % 4 == 0) && (year_[0] % 100 != 0)) || (year_[0] % 400 == 0)) ? Month_buf[1] += 1 : Month_buf[1];
 
    if (month_[0] > 12 || month_[0]<1 || date_[0]>Month_buf[month_[0] - 1] || date_[0] < 1 || hour_[0] < 0 || hour_[0]>23)
    {
        flag = 1;
        return flag;
    }
    if (year_[0] < p->tm_year + 1900)flag = 1;
    else if (year_[0] == p->tm_year + 1900) {
        if (month_[0] < p->tm_mon + 1)flag = 1;
        else if (month_[0] == p->tm_mon + 1) {
            if (date_[0] < p->tm_mday)flag = 1;
            else if (date_[0] == p->tm_mday) {
                if (hour_[0] < 8 + p->tm_hour)flag = 1;
                else if (hour_[0] == 8 + p->tm_hour)flag = 0;
                else if (hour_[0] > 8 + p->tm_hour)flag = 0;
            }
            else if (date_[0] > p->tm_mday)flag = 0;
        }
        else if (month_[0] > p->tm_mon + 1)flag = 0;
    }
    else if (year_[0] > p->tm_year + 1900)flag = 0;
 
    return flag;//返回0是輸入日期大於當前日期,1是輸入日期小於當前日期
}
int Check_date2(int year_[2], int month_[2], int date_[2], int hour_[2])
{
     
    unsigned char Month_buf[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (month_[1] == 2)
        (((year_[1] % 4 == 0) && (year_[1] % 100 != 0)) || (year_[1] % 400 == 0)) ? Month_buf[1] += 1 : Month_buf[1];
 
    if (month_[1] > 12 || month_[1]<1 || date_[1]>Month_buf[month_[1] - 1] || date_[1] < 1 || hour_[1] < 0 || hour_[1]>23)return 1;
     
    if (year_[0] < year_[1])return 0;
    else if (year_[0] == year_[1]) {
        if (month_[0] < month_[1])return 0;
        else if (month_[0] == month_[1]) {
            if (date_[0] < date_[1])return  0;
            else if (date_[0] == date_[1]) {
                if (hour_[0] < hour_[1])return  0;
                else if (hour_[0] == hour_[1]) return 1;
                else if (hour_[0] > hour_[1])return 1;
            }
            else if (date_[0] > date_[1])return 1;
        }
        else if (month_[0] > month_[1])return 1;
    }
    else if (year_[0] > year_[1])return 1;
 
     //返回0是離開日期大於入住日期,1是離開日期小於入住日期
}
int Check_date3(int year, int month, int date, int hour)
{
    int flag = 0;
    time_t timep;
    struct tm* p;
    time(&timep);
    p = gmtime(&timep);
    if (year < p->tm_year + 1900)flag = 0;
    else if (year == p->tm_year + 1900) {
        if (month < p->tm_mon + 1)flag = 0;
        else if (month == p->tm_mon + 1) {
            if (date < p->tm_mday)flag = 0;
            else if (date == p->tm_mday) {
                if (hour < 8 + p->tm_hour)flag = 0;
                else if (hour == 8 + p->tm_hour)flag = 0;
                else if (hour > 8 + p->tm_hour)flag++;
            }
            else if (date > p->tm_mday)flag++;
        }
        else if (month > p->tm_mon + 1)flag++;
    }
    else if (year > p->tm_year + 1900)flag++;
 
    return flag;//返回1是離開日期大於現在日期,0是離開日期小於現在日期
}
int Check_date4(int year_, int month_, int date_, int hour_) {
    int flag = 0;
    time_t timep;
    struct tm* p;
    time(&timep);
    p = gmtime(&timep);
 
    unsigned char Month_buf[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (month_ == 2)
        (((year_ % 4 == 0) && (year_ % 100 != 0)) || (year_ % 400 == 0)) ? Month_buf[1] += 1 : Month_buf[1];
 
    if (month_ > 12 || month_<1 || date_>Month_buf[month_ - 1] || date_ < 1 || hour_ < 0 || hour_>23)
    {
        flag++;
        return flag;
    }
    if (year_ < p->tm_year + 1900)flag++;
    else if (year_ == p->tm_year + 1900) {
        if (month_ < p->tm_mon + 1)flag++;
        else if (month_ == p->tm_mon + 1) {
            if (date_ < p->tm_mday)flag++;
            else if (date_ == p->tm_mday) {
                if (hour_ < 8 + p->tm_hour)flag++;
                else if (hour_ == 8 + p->tm_hour)flag = 0;
                else if (hour_ > 8 + p->tm_hour)flag = 0;
            }
            else if (date_ > p->tm_mday)flag = 0;
        }
        else if (month_ > p->tm_mon + 1)flag = 0;
    }
    else if (year_ > p->tm_year + 1900)flag = 0;
    return flag;//返回0是輸入日期大於當前日期,1是輸入日期小於當前日期
}
void deletedisabledorder() {
    Order* p;
    Order* q;
    p = ohead;
    int m = 0;
    q = p->onext;
    while (q != NULL) {
        if (Check_date3(q->year[1], q->mon[1], q->day[1], q->hour[1]) != 1)//判斷訂單是否失效
        {
            emptyroom(q->room_->roomnumber);//把房間狀態清除
            p->onext = q->onext;
            free(q);
            q = p->onext;
            m++;
        }
        else {
            p = p->onext;
            q = q->onext;
        }
    }
    if (m != 0)printf("失效訂單已刪除\n");
    else
        printf("當前無失效訂單\n");
}
void checkchar(char t[]) {
    int i;
    for (i = 0;; i++) {
        if (t[i] == '\n') {
            t[i] = '\0';
            break;
        }
    }
 
}
void checkchar1(char t[]) {
    int i;
    for (i = 0;; i++) {
        if (t[i] == '\0') {
            t[i] = '\n';
            t[i + 1] = '\0';//添加換行符
            break;
        }
    }
}
void changeorder()//修改訂單
{
    system("cls");
    char phonenumber_[20];
    char id[40];
    Order* p;
    char num[20];
    int m = 0, m1 = 0;
    if (ohead->onext == NULL)
    {
        printf("訂單為空修改失敗\n");
        system("pause");
    }
    else
    {
        p = ohead->onext;
        char nam[20];
        printf("輸入修改訂單的客戶的姓名:");
        fflush(stdin);
        rewind(stdin);
        gets(nam);
        checkchar1(nam);
        while (strcmp(p->room_->u.name, nam) != 0 && p->onext != NULL)
            p = p->onext;
        if (strcmp(p->room_->u.name, nam) == 0)
        {
            m++;
            if (Check_date1(p->year, p->mon, p->day, p->hour) != 0) {
                printf("已到入住日期無法修改");
                system("pause");
            }
            else while (1)
            {
                system("cls");
                printf("1.修改姓名\n");
                printf("2.修改電話\n");
                printf("3.修改身份證號\n");
                printf("4.修改入住時期\n");
                printf("5.修改離開時期\n");
                printf("6.退出修改\n");
                printf("輸入要修改的選項:\n");
                fflush(stdin);
                rewind(stdin);
                gets(num);
                while ((strcmp(num, "1") != 0) && (strcmp(num, "2") != 0) && (strcmp(num, "3") != 0) && (strcmp(num, "4") != 0) && (strcmp(num, "5") != 0) && (strcmp(num, "6") != 0)) {
                    printf("選擇有誤,請重新輸入:");
                    fflush(stdin);
                    rewind(stdin);
                    gets(num);
                }
                if (strcmp(num, "1") == 0)
                {
                    printf("輸入新的姓名:");
                    checkchar(p->room_->u.name);
                    gets(nam);
                    while (strcmp(p->room_->u.name, nam) == 0) {
                        printf("姓名未更改,請重新輸入:");
                        scanf("%s", nam);
                    }
                    checkchar1(nam);//加上換行符才能比較
                    strcpy(p->room_->u.name, nam);
                    printf("修改成功\n");
                }
                if (strcmp(num, "2") == 0)
                {
                    printf("輸入新的電話:");
                    checkchar(p->room_->u.phonenumber);
                    scanf("%s", phonenumber_);
                    while (strlen(phonenumber_) != 11 || judgephone(phonenumber_) != 0 || strcmp(p->room_->u.phonenumber, phonenumber_) == 0) {
                        printf("電話號不符合要求,請重新輸入:");
                        scanf("%s", phonenumber_);
                    }
                    checkchar1(phonenumber_);//加上換行符才能比較
                    strcpy(p->room_->u.phonenumber, phonenumber_);
                    printf("修改成功\n");
                }
                if (strcmp(num, "3") == 0)
                {
                    printf("輸入新的身份證號:");
                    checkchar(p->room_->u.idcard);
                    fflush(stdin);
                    rewind(stdin);
                    scanf("%s", id);
                    while (strlen(id) != 18 || judgeid(id) != 0 || strcmp(p->room_->u.idcard, id) == 0) {
                        printf("身份證號碼格式有誤,請重新輸入:");
                        fflush(stdin);
                        rewind(stdin);
                        scanf("%s", id);
                    }
                    checkchar1(id);//加上換行符才能比較
                    strcpy(p->room_->u.idcard, id);
                    printf("修改成功\n");
                }
                if (strcmp(num, "4") == 0)
                {
                    if (Check_date1(p->year, p->mon, p->day, p->hour) == 0) {
                        printf("請輸入入住時間:年月日時(24時)中間請用/隔開:");
                        fflush(stdin);
                        rewind(stdin);
                        while ((scanf("%d/%d/%d/%d", &p->year[0], &p->mon[0], &p->day[0], &p->hour[0]) != 4) || Check_date1(p->year, p->mon, p->day, p->hour) != 0 || Check_date2(p->year, p->mon, p->day, p->hour) != 0) {
                            if (Check_date2(p->year, p->mon, p->day, p->hour) != 0) {
                                printf("請修改離開時間:年月日時(24時)中間請用/隔開:");
                                fflush(stdin);
                                rewind(stdin);
                                while ((scanf("%d/%d/%d/%d", &p->year[1], &p->mon[1], &p->day[1], &p->hour[1]) != 4) || Check_date2(p->year, p->mon, p->day, p->hour) != 0) {
                                    printf("日期輸入有誤,");
                                    printf("請重新輸入離開時間:年月日時(24時)中間請用/隔開:");
                                    fflush(stdin);
                                    rewind(stdin);
                                }break;
                            }
                            else {
                                printf("日期輸入有誤\n");
                                printf("請重新輸入入住時間:年月日時(24時)中間請用/隔開:");
                            
                            fflush(stdin);
                            rewind(stdin);}
                        }
 
                        printf("修改成功\n");
                    }
                }
                if (strcmp(num, "5") == 0) {
                    printf("請輸入離開時間:年月日時(24時)中間請用/隔開:");
                    fflush(stdin);
                    rewind(stdin);
                    while ((scanf("%d/%d/%d/%d", &p->year[1], &p->mon[1], &p->day[1], &p->hour[1]) != 4) || Check_date2(p->year, p->mon, p->day, p->hour) != 0) {
                        printf("日期輸入有誤,");
                        printf("請重新輸入離開時間:年月日時(24時)中間請用/隔開:");
                        fflush(stdin);
                        rewind(stdin);
                    }
                    printf("修改成功\n");
                }
                if (strcmp(num, "6") == 0)break;
                system("pause");
            }
 
        }
        if (m == 0)printf("該客人不在訂單中\n");
        printf("\n");
        system("pause");
    }
}
void deleteorder() {
    char nam[20];
    system("cls");
    if (ohead->onext == NULL)
    {
        printf("沒有可刪除的訂單\n");
        system("pause");
    }
    else {
        printf("請輸入你要刪除的訂單的姓名:");
        fflush(stdin);
        rewind(stdin);
        gets(nam);
        checkchar1(nam);//加上換行符才能比較
        Order* p;
        Order* q;
        p = ohead;
        q = p->onext;
        while (q != NULL) {
            if (strcmp(q->room_->u.name, nam) == 0)
            {
                emptyroom(q->room_->roomnumber);
                p->onext = q->onext;
                free(q);
                q = p->onext;
                printf("已刪除該訂單\n");
                system("pause");
            }
            else {
                p = p->onext;
                q = q->onext;
            }
 
        }
    }
 
}
void changeKEY() {
    char s[15], c[15], n[15];
    int i, a = 0, b = 0, e = 0;
    system("cls");
 
    FILE* fp = fopen("password.txt", "r+");
    if (fp == NULL) {
        printf("Failed to open file");
 
    }
    fgets(s, 14, fp);//取出密碼
    rewind(fp);//指針回到文件開頭
    fclose(fp);
    fp = fopen("password.txt", "w");
    printf("請輸入原密碼:\n");
    fflush(stdin);
    rewind(stdin);
    gets(c);
    while (strcmp(c, s) != 0) {
        printf("原密碼輸入錯誤\n請重新輸入");
        fflush(stdin);
        rewind(stdin);
        gets(c);
    }
    if (strcmp(c, s) == 0) {
        printf("請輸入新密碼(6~14位):\n");
        fflush(stdin);
        rewind(stdin);
        gets(n);
    }
    
    i = strlen(n);
 
    for (int f = 0; f < i; f++)
    {
        if (('a' <= n[f] && n[f] <= 'z') || ('A' <= n[f] && n[f] <= 'Z'))
            a++;
        else if ('0' <= n[f] && n[f] <= '9')
            b++;
 
        else
            e++;
    }//判斷字母數字和其他字符的個數
 
    while (i < 6 || i >= 15 || a == 0 || b == 0 || e == 0|| strcmp(n, s) == 0) {
 
        if (strcmp(n, s) == 0)printf("\n與原密碼相同\n請重新輸入:");
        else printf("\n安全性不高或位數不符合要求\n請重新輸入:\n");
        fflush(stdin);
        rewind(stdin);
        gets(n);
        i = strlen(n);
        a = 0; b = 0; e = 0;
        for (int f = 0; f < i; f++)
        {
            if (('a' <= n[f] && n[f] <= 'z') || ('A' <= n[f] && n[f] <= 'Z'))
                a++;
            else if ('0' <= n[f] && n[f] <= '9')
                b++;
 
            else
                e++;
        }
    }//判斷字母數字和其他字符的個數}
     
    fputs(n, fp);
    fclose(fp);
    printf("\n密碼修改成功\n");
    system("pause");
}
void color1() {
    char e[15];
    FILE* fp = fopen("color.txt", "r");
    if (fp == NULL) {
        printf("Failed to open file");
 
    }
    e[0] = fgetc(fp);
    fclose(fp);
    switch (*e) {
 
    case'1':system("color 10"); break;
    case'2':system("color 20"); break;
    case'3':system("color 30"); break;
    case'4':system("color 40"); break;
    case'5':system("color 50"); break;
    case'6':system("color 60"); break;
    case'7':system("color 70"); break;
    case'8':system("color 80"); break;
    case'9':system("color 90"); break;
    case'A':system("color A0"); break;
    case'B':system("color B0"); break;
    case'C':system("color C0"); break;
    case'D':system("color D0"); break;
    case'E':system("color E0"); break;
    case'F':system("color F0"); break;
 
    }
}
void changecolor1() {
    int a;
    system("cls");
    FILE* p = fopen("color.txt", "w");
    if (p == NULL) {
        printf("Failed to open file");
 
    }
 
    printf("顏色列表:1=藍色 2=綠色 3=湖藍色 4=紅色\n5=紫色 6=黃色 7=白色 8=灰色\n9=淡藍色 10=淡綠色 11=淡淺綠色 12=淡紅色\n13=淡紫色 14=淡黃色 15=亮白色\n");
    printf("請選擇相應數字改變系統顏色");
 
    scanf("%d", &a);
    while (a < 1 || a>15) { printf("您的輸入有誤,請重新輸入\n");  scanf("%d", &a); }
    switch (a) {
 
    case 1:system("color 10"); fputs("1", p); break;
    case 2:system("color 20"); fputs("2", p); break;
    case 3:system("color 30"); fputs("3", p); break;
    case 4:system("color 40"); fputs("4", p); break;
    case 5:system("color 50"); fputs("5", p); break;
    case 6:system("color 60"); fputs("6", p); break;
    case 7:system("color 70"); fputs("7", p); break;
    case 8:system("color 80"); fputs("8", p); break;
    case 9:system("color 90"); fputs("9", p); break;
    case 10:system("color A0"); fputs("A", p); break;
    case 11:system("color B0"); fputs("B", p); break;
    case 12:system("color C0"); fputs("C", p); break;
    case 13:system("color D0"); fputs("D", p); break;
    case 14:system("color E0"); fputs("E", p); break;
    case 15:system("color F0"); fputs("F", p); break;
 
    }fclose(p); printf("\n顏色修改成功\n");
    system("pause");
 
}
void search2()
{
    system("cls");
    Order* p;
    int m;
    if (ohead->onext == NULL)
    {
        printf("無訂單,查找失敗\n");
        system("pause");
    }
    else
    {
        while (1) {
            system("cls");
            printf("選擇查找方式:(1~4)\n");
            printf("1.按姓名查找\n");
            printf("2.按電話查找\n");
            printf("3.按身份證號查找\n");
            printf("4.按房間號查找\n");
            printf("5.返回上一層\n");
            char t[20];
            fflush(stdin);
            rewind(stdin);
            gets(t);
            while ((strcmp(t, "1") != 0) && (strcmp(t, "2") != 0) && (strcmp(t, "3") != 0) && (strcmp(t, "4") != 0) && (strcmp(t, "5") != 0)) {
                printf("選擇有誤,請重新輸入:");
                fflush(stdin);
                rewind(stdin);
                gets(t);
            }
            if (strcmp(t, "1") == 0)
            {
                m = 0;
                p = ohead->onext;
                printf("輸入查找的姓名:");
                char nam[40];
                fflush(stdin);
                rewind(stdin);
                gets(nam);
                while (p != NULL)
                {
                    checkchar(p->room_->u.name);
                    if (FindSubstring(p->room_->u.name, nam) == 0)
                    {
                        m++;
                        checkchar1(p->room_->u.name);
                        printf("\n姓名:%s\n", p->room_->u.name);
                        printf("\n電話:%s\n", p->room_->u.phonenumber);
                        printf("身份證號:%s\n", p->room_->u.idcard);
                        printf("房間號: %s\n", p->room_->roomnumber);
                        printf("入住日期:%d/%d/%d/%d\n", p->year[0], p->mon[0], p->day[0], p->hour[0]);
                        printf("離開日期:%d/%d/%d/%d\n", p->year[1], p->mon[1], p->day[1], p->hour[1]);
 
                    }
                    p = p->onext;
                }
 
                if (m == 0)
                    printf("查找用戶不存在\n");
                system("pause");
 
            }
            if (strcmp(t, "2") == 0)
            {
                m = 0;
                p = ohead->onext;
                char ph[20];
                printf("輸入查找的電話:");
                fflush(stdin);
                rewind(stdin);
                gets(ph);
                while (strlen(ph) != 11 || judgephone(ph) != 0)
                {//判斷電話號號是否符合規則。
                    printf("電話號不符合要求,請重新輸入:");
                    fflush(stdin);
                    rewind(stdin);
                    scanf("%s", ph);
                }
                checkchar1(ph);
                while (p != NULL && strcmp(ph, p->room_->u.phonenumber) == 0) {
                    //找到電話一致的客人
                    if (strcmp(ph, p->room_->u.phonenumber) == 0)
                    {
                        m++;
                        printf("\n姓名:%s\n", p->room_->u.name);
                        printf("\n電話:%s\n", p->room_->u.phonenumber);
                        printf("身份證號:%s\n", p->room_->u.idcard);
                        printf("房間號: %s\n", p->room_->roomnumber);
                        printf("入住日期:%d/%d/%d/%d\n", p->year[0], p->mon[0], p->day[0], p->hour[0]);
                        printf("離開日期:%d/%d/%d/%d\n", p->year[1], p->mon[1], p->day[1], p->hour[1]);
 
                    }
                    p = p->onext;
                }
                if (m == 0)
                    printf("查找號碼不存在\n");
                system("pause");
 
            }
            if (strcmp(t, "3") == 0)
            {
                char id[18];
                printf("輸入要查找的身份證號:");
                fflush(stdin);
                rewind(stdin);
                gets(id);
                while (strlen(id) != 18 || judgeid(id) != 0) {//判斷身份證號是否符合規則。
                    printf("身份證號碼格式有誤,請重新輸入:");
                    fflush(stdin);
                    rewind(stdin);
                    scanf("%s", id);
                }
                checkchar1(id);
                m = 0;
                p = ohead->onext;
                while (p != NULL && strcmp(p->room_->u.idcard, id) == 0) {
                    if (strcmp(p->room_->u.idcard, id) == 0)
                    {
                        m++;
                        printf("\n姓名:%s\n", p->room_->u.name);
                        printf("\n電話:%s\n", p->room_->u.phonenumber);
                        printf("身份證號:%s\n", p->room_->u.idcard);
                        printf("房間號: %s\n", p->room_->roomnumber);
                        printf("入住日期:%d/%d/%d/%d\n", p->year[0], p->mon[0], p->day[0], p->hour[0]);
                        printf("離開日期:%d/%d/%d/%d\n", p->year[1], p->mon[1], p->day[1], p->hour[1]);
                    }
                    p = p->onext;
                }
                if (m == 0)
                    printf("查找號碼不存在\n");
                system("pause");
            }
            if (strcmp(t, "4") == 0)
            {
                char roomnum[20];
                printf("輸入要查找的房間號(本酒店房間號101~112;201~208;301~304;401~403):");
                fflush(stdin);
                rewind(stdin);
                gets(roomnum);
                checkchar1(roomnum);
                m = 0;
                p = ohead->onext;
                while (p != NULL) {
 
                    if (strcmp(p->room_->roomnumber, roomnum) == 0)
                    {
                        m++;
                        printf("\n姓名:%s\n", p->room_->u.name);
                        printf("\n電話:%s\n", p->room_->u.phonenumber);
                        printf("身份證號:%s\n", p->room_->u.idcard);
                        printf("房間號: %s\n", p->room_->roomnumber);
                        printf("入住日期:%d/%d/%d/%d\n", p->year[0], p->mon[0], p->day[0], p->hour[0]);
                        printf("離開日期:%d/%d/%d/%d\n", p->year[1], p->mon[1], p->day[1], p->hour[1]);
 
                    }
                    p = p->onext;
 
                }
                if (m == 0)
                    printf("房間未被使用或未輸入正確房間號\n");
                system("pause");
            }
            if (strcmp(t, "5") == 0)break;
            printf("\n");
        }
    }
}
void search1()
{
    int flag1 = 0, flag2 = 0;
    system("cls");
    int count1 = 0, count2 = 0, count3 = 0, count4 = 0, m;
    char c[10];
    Room* p;
    if (rhead->rnext == NULL)
    {
        printf("無房間,查找失敗\n");
        system("pause");
    }
    else
    {
        while (1) {
            system("cls");
            printf("請輸入查詢方式:\n");
            printf("1.房間狀態查詢\n");
         
            printf("2.房間狀態和房間類型組合查詢\n");
            printf("3.返回上一層\n");
            char t[20];
            fflush(stdin);
            rewind(stdin);
            gets(t);
            while ((strcmp(t, "1") != 0) && (strcmp(t, "2") != 0) && (strcmp(t, "3") != 0)) {
                printf("選擇有誤,請重新輸入:");
                fflush(stdin);
                rewind(stdin);
                gets(t);
            }
            if (strcmp(t, "1") == 0) {
                system("cls");
                printf("閑置房:");
                printf("\n");
                for (p = rhead->rnext; p->rnext != NULL; p = p->rnext)if (p->flag == 0) {
                    printf("%s", p->roomnumber); flag1++;
                }
                printf("\n");
                if (flag1 == 0)printf("無");
                printf("被占用房");
                printf("\n");
                for (p = rhead->rnext; p->rnext != NULL; p = p->rnext)if (p->flag != 0) {
                    printf("%s", p->roomnumber); flag2++;
                }
                if (flag2 == 0)printf("無");
                printf("\n");
            }
             
            
            if (strcmp(t, "2") == 0) {
                while (1) {
                    system("cls");
                    char n[20];
                    printf("請選擇查詢類型:\n1.單人間\n2.雙人間\n3.三人間\n4.四人間\n5.返回上一層\n");
                    fflush(stdin);
                    rewind(stdin);
                    gets(n);
 
                    while (strcmp(n, "1") != 0 && strcmp(n, "2") != 0 && strcmp(n, "3") != 0 && strcmp(n, "4") != 0 && strcmp(n, "5") != 0) {
                        printf("選擇有誤,請重新選擇:");
                        fflush(stdin);
                        rewind(stdin);
                        gets(n);
                    }
                    if (strcmp(n, "1") == 0) {
                        printf("空房有:\n");
                        for (p = rhead->rnext; p != NULL; p = p->rnext)
                            if (p->flag == 0 && strcmp(p->type, "single\n") == 0)
                            {
                                count1++; printf("%s", p->roomnumber);
                            }
                        printf("\n");
                        printf("單人間還剩%d間", count1);
                    }
                    if (strcmp(n, "2") == 0) {
                        printf("空房有:\n");
                        for (p = rhead->rnext; p != NULL; p = p->rnext)if (p->flag == 0 && strcmp(p->type, "double\n") == 0)
                        {
                            count2++; printf("%s", p->roomnumber);
                        }
                        printf("\n");
                        printf("雙人間還剩%d間", count2);
                    }
                    if (strcmp(n, "3") == 0) {
                        printf("空房有:\n");
                        for (p = rhead->rnext; p != NULL; p = p->rnext)if (p->flag == 0 && strcmp(p->type, "triple\n") == 0)
                        {
                            count3++; printf("%s", p->roomnumber);
                        }
                        printf("三人間還剩%d間", count3);
                    }
                    if (strcmp(n, "4") == 0) {
                        printf("空房有:\n");
                        for (p = rhead->rnext; p != NULL; p = p->rnext)if (p->flag == 0 && strcmp(p->type, "four\n") == 0)
                        {
                            count4++; printf("%s", p->roomnumber);
                        }
                        printf("\n");
                        printf("四人間還剩%d間", count4);
                    }
                    if (strcmp(n, "5") == 0)break;
                    printf("\n");
                    system("pause");
                }
            }
            if (strcmp(t, "3") == 0)break;
            printf("\n");
            system("pause");
        }
 
    }
}
void statistics() {
    system("cls");
 
    Order* e; int m, year, mon, day, hour;
    if (ohead->onext == NULL)
    {
        printf("無訂單\n");
        system("pause");
    }
    else {
        printf("請輸入截止日期 年月日時(24時)中間請用/隔開:\n");
        fflush(stdin);
        rewind(stdin);
 
        while ((scanf("%d/%d/%d/%d", &year, &mon, &day, &hour)) != 4 || Check_date4(year, mon, day, hour) == 1)
        {
            printf("請輸入有效時間");
            fflush(stdin);
            rewind(stdin);
        }
        printf("在該日期前生效的訂單有\n");
        for (e = ohead->onext; e != NULL; e = e->onext)if (time_1(year, mon, day, hour, e) == -1 || time_1(year, mon, day, hour, e) == 0) {
            printf("\n姓名:%s", e->room_->u.name);
            printf("電話:%s", e->room_->u.phonenumber);
            printf("身份證號:%s", e->room_->u.idcard);
            printf("房間號: %s", e->room_->roomnumber);
            printf("入住日期:%d/%d/%d/%d\n", e->year[0], e->mon[0], e->day[0], e->hour[0]);
            printf("離開日期:%d/%d/%d/%d\n", e->year[1],e->mon[1], e->day[1], e->hour[1]);
            printf("\n");
        }
    }
    system("pause");
}
int time_1(int year, int mon, int day, int hour, Order* p)
{
 
    if ((p->year[0]) > year)return 1;
    if ((p->year[0]) < year)return -1;
    if ((p->year[0]) == year) {
        if ((p->mon[0]) > mon)return 1;
        if ((p->mon[0]) < mon)return -1;
        if ((p->mon[0]) == mon) {
            if ((p->day[0]) < day)return -1;
            if ((p->day[0]) > day)return  1;
            if ((p->day[0]) == day) {
                if ((p->hour[0]) < hour)return -1;
                if ((p->hour[0]) > hour)return 1;
                if ((p->hour[0]) == hour)return 0;
            }
        }
    }
}
void read_() {
     
    extern Room* rhead;
    extern Order* ohead;
    FILE* fp = NULL;
    FILE* fp1 = NULL;
    char ch;
    rhead = (Room*)malloc(sizeof(Room));
    if (rhead != NULL)
    {
        rhead->rnext = NULL;
    }
    ohead = exploitorderhead();
    Room* p = rhead;
    Room* q = rhead;
    Order* p1 = ohead;
    Order* q1 = ohead;
    Room* u;
    if ((fp = fopen("room.txt", "r+")) == NULL || (fp1 = fopen("order.txt", "r+")) == NULL)
    {
         
        fp = fopen("room1.txt", "r+");
        fp1 = fopen("order1.txt", "r+");
    }
    else {
        fp = fopen("room.txt", "r+");
        fp1 = fopen("order.txt", "r+");
         
    }
    while (!feof(fp))
    {
        p = (Room*)malloc(sizeof(Room));
        fgets(p->roomnumber, 20, fp);//讀進來的還有換行符
        //printf("%s\n",p->roomnumber);
        fgets(p->type, 20, fp);//讀進來的還有換行符
        //printf("%s\n",p->type);
        fscanf(fp, "%d", &(p->flag));
        //printf("%d\n",p->flag);
        ch = fgetc(fp);
        ch = fgetc(fp);
        q->rnext = p;
        q = p;
    }
    q->rnext = NULL;
    fclose(fp);
    ch = fgetc(fp1);
    if (!feof(fp1)) {
        rewind(fp1);
        while (!feof(fp1))
        {
            p1 = (Order*)malloc(sizeof(Order));
            u = (Room*)malloc(sizeof(Room));
            p1->room_ = u;
            fgets(p1->room_->roomnumber, 40, fp1);//讀進來的還有換行符
            fgets(p1->room_->type, 10, fp1);//讀進來的還有換行符
            fgets(p1->room_->u.name, 40, fp1);//讀進來的還有換行符
            fgets(p1->room_->u.idcard, 20, fp1);//讀進來的還有換行符
            fgets(p1->room_->u.phonenumber, 20, fp1);//讀進來的還有換行符
            fscanf(fp1, "%d/%d/%d/%d", &p1->year[0], &p1->mon[0], &p1->day[0], &p1->hour[0]);
            ch = fgetc(fp1);
            fscanf(fp1, "%d/%d/%d/%d", &p1->year[1], &p1->mon[1], &p1->day[1], &p1->hour[1]);
            ch = fgetc(fp1);
            ch = fgetc(fp1);
            q1->onext = p1;
            q1 = p1;
        }
    }
    q1->onext = NULL;
    fclose(fp1);
    deletedisabledorder();
     
}
void backups() {
    system("cls");
    FILE* fp = NULL;
    FILE* fp1 = NULL;
    if ((fp = fopen("order1.txt", "w")) == NULL)
    {
        printf("can't built the order1 file\n");
        system("pause");
    }
    if ((fp1 = fopen("room1.txt", "w")) == NULL)
    {
        printf("can't open the room1 file\n");
        system("pause");
    }
    Room* p1 = rhead->rnext;
    Order* p = ohead->onext;
    while (p != NULL) {
        fputs(p->room_->roomnumber, fp);//連換行符一起保存
        fputs(p->room_->type, fp);//連換行符一起保存
        fputs(p->room_->u.name, fp);//連換行符一起保存
        fputs(p->room_->u.idcard, fp);//連換行符一起保存
        fputs(p->room_->u.phonenumber, fp);//連換行符一起保存
        fprintf(fp, "%d", p->year[0]);
        fputc('/', fp);
        fprintf(fp, "%d", p->mon[0]);
        fputc('/', fp);
        fprintf(fp, "%d", p->day[0]);
        fputc('/', fp);
        fprintf(fp, "%d", p->hour[0]);
        fputc('\n', fp);
        fprintf(fp, "%d", p->year[1]);
        fputc('/', fp);
        fprintf(fp, "%d", p->mon[1]);
        fputc('/', fp);
        fprintf(fp, "%d", p->day[1]);
        fputc('/', fp);
        fprintf(fp, "%d", p->hour[1]);
        fputc('\n', fp);
        if (p->onext != NULL)fputc('\n', fp);
        p = p->onext;
    }
    while (p1 != NULL) {
        fputs(p1->roomnumber, fp1);
        fputs(p1->type, fp1);
        fprintf(fp1, "%d", p1->flag);
        fputc('\n', fp1);
        if (p1->rnext != NULL)fputc('\n', fp1);
        p1 = p1->rnext;
    }
    if (fclose(fp1) == 0 && fclose(fp) == 0)printf("備份成功\n");
    else
        printf("備份失敗\n");
    system("pause");
}
int FindSubstring(const char* strSource, const char* strSub)
{
    unsigned int uLen = strlen(strSource);
    if (uLen == 0)
    {
        return -1;
    }
    char* str1 = (char*)malloc(uLen + 1);
    memset(str1, '\0', uLen + 1);
    strcpy(str1, strSource);
    uLen = strlen(strSub);
    if (uLen == 0)
    {
        free(str1);
        return -1;
    }
    char* str2 = (char*)malloc(uLen + 1);
    memset(str2, '\0', uLen + 1);
    strcpy(str2, strSub);
    unsigned int i = 0, j = 0;
    for (i = 0; i < strlen(strSource); i = i + 2)
    {
        if (str1[i] == str2[j] && str1[i + 1] == str2[j + 1])
        {
            j++;
            j++;
        }
        else
        {
            if (j == uLen)
            {
                break;
            }
            else
            {
                j = 0;
            }
        }
    }
    free(str1);
    free(str2);
    if (j == uLen)
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

main.c

#include <stdio.h>
#include "function.h"
#include "struct.h"
Room* rhead;
Order* ohead;
int main()
{
    registers();
}

此外,程序的正確運行還需項目文件夾下包括下圖所示的文本文件

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: