首頁 > 軟體

C++實現智慧櫃管理系統

2022-03-24 19:00:22

本文範例為大家分享了C++實現智慧櫃管理系統的具體程式碼,供大家參考,具體內容如下

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;

struct Node
{
    int pcode;
    int num;
    string pnum;
    time_t tnum;
    Node *next;
    Node *prev;
};

//取件成功+剩餘提示
void rreaction(int l) {
    cout << "______________________________________________________________";
    cout << endl;
    cout << endl;
    cout << "                        取件成功!!!";
    cout << endl;
    cout << "______________________________________________________________";
    cout << endl;
    system("pause");
    system("cls");
    if (l != 0) {
        cout << "______________________________________________________________";
        cout << endl;
        cout << endl;
        cout << "              當前手機號還有"<< l <<"件未取!!!";
        cout << endl;
        cout << "______________________________________________________________";
        cout << endl;
        system("pause");
        system("cls");
    }
}

//取件碼錯誤
void freaction() {
    cout << "______________________________________________________________";
    cout << endl;
    cout << endl;
    cout << "                        取件碼錯誤!!!";
    cout << endl;
    cout << "______________________________________________________________";
    cout << endl;
    system("pause");
    system("cls");
}

//取件系統
int pcode() {
    int j = 0;
    int l = 0;
    int list1[25];
    int list2[25];
    string list3[25];
    int list4[25];
    ifstream file1("num.txt");
    ifstream file2("tnum.txt");
    ifstream file3("pnum.txt");
    ifstream file4("pcode.txt");
    while (file1.peek() != EOF) {
        file1 >> list1[j];
        file2 >> list2[j];
        file3 >> list3[j];
        file4 >> list4[j++];
    }
    
    file1.close();
    file2.close();
    file3.close();
    file4.close();

    int pcode;
    cout << "______________________________________________________________";
    cout << endl;
    cout << endl;
    cout << "                        取件碼:"; cin >> pcode;
    cout << endl;
    cout << "______________________________________________________________";
    
    for (int i = 0; i < j-1; i++) {
        if (list4[i] == pcode) { 
            ofstream file1;
            file1.open("num.txt");
            ofstream file2;
            file2.open("tnum.txt");
            ofstream file3;
            file3.open("pnum.txt");
            ofstream file4;
            file4.open("pcode.txt");
            for (int k = 0; k < j-1; k++) {
                if (k == i)continue;
                else {
                    if (list3[i] == list3[k])l = l + 1;
                    file1 << list1[k] << endl;
                    file2 << list2[k] << endl;
                    file3 << list3[k] << endl;
                    file4 << list4[k] << endl;
                }
            }
            
            file1.close();
            file2.close();
            file3.close();
            file4.close();

            system("cls"); 
            cout << "______________________________________________________________";
            cout << endl;
            cout << endl;
            cout << "                        櫃號"<<list1[i]<<"已開啟";
            cout << endl;
            cout << "______________________________________________________________";
            cout << endl;
            system("pause");
            system("cls");
            return l; 
        }
    }
    system("cls"); 
    return -1;
}

//快遞員取件
Node* dnode(Node* head,int n) {
    Node *p0;
    p0 = head;
    while (p0->prev != NULL) {
        if (p0->num == n) {
            if (p0 == head) {
                head = head->prev;
                delete p0;
                return head;
            }
            else {
                p0->prev->next = p0->next;
                p0->next->prev = p0->prev;
                delete p0;
                return head;
            }
        }
        p0 = p0->prev;
        if (p0->prev == NULL)
        {    
            cout << "______________________________________________________________";
            cout << endl;
            cout << endl;
            cout << "                       櫃號" << n << "為空!!!";
            cout << endl;
            cout << "______________________________________________________________";
            cout << endl;
            system("pause");
            system("cls");
            return head;
        }
    }
    return head;
}

//櫃子介面
int ginformation(Node* head) {
    Node *p0;
    p0 = head;
    int j = 1;
    int n;
    int m[26] = { 0 };
    while (p0->prev != NULL) {
        m[p0->num] = 1;
        p0 = p0->prev;
    }
    cout << "_________________________________________________________________________________________________________________________" << endl;
    cout << "|           1           |           2           |           3           |           4           |           5           |" << endl;
    cout << "|         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |" << endl;
    cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
    cout << "|           6           |           7           |           8           |           9           |           10          |" << endl;
    cout << "|         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |" << endl;
    cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
    cout << "|           11          |           12          |           13          |           14          |           15          |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
    cout << "|           16          |           17          |           18          |           19          |           20          |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
    cout << "|           21          |           22          |           23          |           24          |           25          |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |         "; if (m[j] == 0) { j++; cout << " ---  "; }
    else { j++; cout << "已存放"; } cout << "        |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|                       |                       |                       |                       |                       |" << endl;
    cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
    cout << endl << "                                          輸入要取出的智慧櫃的編號(輸入'0'返回):";
    cin >> n;
    switch (n) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    case 21:
    case 22:
    case 23:
    case 24:
    case 25:
        system("cls");
        return n;
    case 0:
        system("cls");
        return n;
    default:
        system("cls");
        return -1;
    }
}

//初始化
Node* init()
{
    Node *head;
    head = new Node;
    head->next = NULL;
    head->prev = NULL;
    return head;
}
Node* autoinput(Node* head) {
    int j = 0;
    int list1[25];
    int list2[25];
    string list3[25];
    int list4[25];
    ifstream file1("num.txt");
    ifstream file2("tnum.txt");
    ifstream file3("pnum.txt");
    ifstream file4("pcode.txt");
    while (file1.peek() != EOF) {
            file1 >> list1[j];        
            file2 >> list2[j];                        
            file3 >> list3[j];        
            file4 >> list4[j++];
    }

    file1.close();
    file2.close();
    file3.close();
    file4.close();

    for (int i = 0; i < j-1; i++) {
        Node *p0, *p1;
        p0 = head;
        p1 = new Node;
        p1->num = list1[i];
        p1->tnum = list2[i];
        p1->pnum = list3[i];
        p1->pcode = list4[i];    
        p1->prev = p0;
        p0->next = p1;
        p1->next = NULL;
        head = p1;
    }
    return head;
}

//櫃滿警告
void serror(Node* head) {
    system("cls");
    cout << "____________________________________________________________________________________";
    cout << endl;
    cout << endl;
    cout << "                        無可用的櫃子!!!";
    cout << endl;
    cout << "____________________________________________________________________________________";
    cout << endl;
    system("pause");
    system("cls");
}

//派送快遞
int sedelivery(Node* head) {
    int list[25];
    int i = 0;
    int k = 0;
    Node *p0,*p1,*p2;
    p0 = head;
    p2 = head;
    p1 = new Node;
    while (p2->prev != NULL) {
        list[i] = p2->num;
        p2 = p2->prev;
        i++;
    }
    string size,pnum;
    unsigned seed;
    time_t now = time(0);
    seed = time(0);
    srand(seed);
    cout << "____________________________________________________________________________________";
    cout << endl;
    cout << endl;
    cout << "                        包裹大小(small | medium | large):"; cin >> size;
    cout << endl;
    cout << endl;
    cout << "                        手機號碼:"; cin >> pnum;
    cout << endl;
    cout << "____________________________________________________________________________________";
    cout << endl;
    if (pnum.length() != 11) {
        cout << "                        請輸入正確的手機號碼!!!";
        cout << endl;
        system("pause");
        system("cls");
        return -1;
    }
    else p1->pnum = pnum;
    if (size == "small") {
        int j = 1;
        for (; j <= 10; j++) {
            for (; k <= i; k++) {
                if (k == i) {
                    p1->num = j;
                    break;
                }
                if (j == list[k]) {
                    k = 0;
                    break;
                }
            }
            if (k != 0)break;
        }if (j == 11)return 0;
    }
    else if (size == "medium") {
        int j = 11;
        for (; j <= 20; j++) {
            for (; k <= i; k++) {
                if (k == i) {
                    p1->num = j;
                    break;
                }
                if (j == list[k]) {
                    k = 0;
                    break;
                }
            }
            if (k != 0)break;
        }if (j == 21)return 0;
    }
    else if (size == "large") {
        int j = 21;
        for (; j <= 25; j++) {
            for (; k <= i; k++) {
                if (k == i) {
                    p1->num = j;
                    break;
                }
                if (j == list[k]) {
                    k = 0;
                    break;
                }
            }
            if (k != 0)break;
        }if (j == 26)return 0;
    }
    else {
        cout << "                        請輸入正確的包裹大小!!!";
        cout << endl;
        system("pause");
        system("cls");
        return -1;
    }
    p1->tnum = now;
    p1->pcode = rand();
    p1->prev = p0;
    p0->next = p1;
    p1->next = NULL;
    head = p1;
    cout << "                             派送成功!!!";
    cout << endl;
    cout << "                           包裹將投放到" << p1->num << "號櫃";
    cout << endl;
    system("pause");
    system("cls");
    return 1;
}

//超時快遞
int iexpress(Node* head) {
    int n;
    unsigned seed;
    time_t now = time(0);
    seed = time(0);
    srand(seed);
    Node *p0,*p1;
    p0 = head;
    while (p0->prev->prev != NULL)p0 = p0->prev;
    p1 = p0;
    while (p0 != NULL) {
        if (p0->tnum+86400 <= now) {
            char* dt = ctime(&p0->tnum);
            cout << "____________________________________________________________________________________";
            cout << endl;
            cout << endl;
            cout << "                        櫃號:" << p0->num << endl;
            cout << "                        時間:" << dt << endl;
            cout << "                        手機號碼:" << p0->pnum;
            cout << endl;
            cout << "____________________________________________________________________________________";
            cout << endl;
        }
        else break;
        p0 = p0->next;
    }
    cout << endl << "                     輸入要重放的智慧櫃的編號(輸入'0'返回):";
    cin >> n;
    if (n == 0);
    else {
        while (p1 != NULL) {
            if (p1->tnum + 86400 <= now) {
                if (p1->num == n) {
                    if (p1 == head) {
                        p1->tnum = now;
                        p1->pcode = rand();
                        cout << endl << "                        操作成功!!!";
                        cout << endl;
                        cout << endl;
                        system("pause");
                        system("cls");
                        return 1;
                    }
                    else {
                        p1->prev->next = p1->next;
                        p1->next->prev = p1->prev;
                        p1->tnum = now;
                        p1->pcode = rand();
                        p1->prev = head;
                        head->next = p1;
                        p1->next = NULL;
                        cout << endl << "                        操作成功!!!";
                        cout << endl;
                        cout << endl;
                        system("pause");
                        system("cls");
                        return 2;
                    }
                }
            }
            else {
                cout << endl << "                        操作失敗!!!";
                cout << endl;
                cout << endl;
                system("pause");
                system("cls");
                return 1;
            }
            p1 = p1->next;
        }
    }
    system("cls");
    return 1;
}

//檔案輸出
void iinformation(Node* head) {
    int j = 0;
    Node *p0;
    p0 = head;
    int list1[25];
    int list2[25];
    string list3[25];
    int list4[25];
    while (p0->prev != NULL) {
        list1[j] = p0->num;
        list2[j] = p0->tnum;
        list3[j] = p0->pnum;
        list4[j++] = p0->pcode;
        p0 = p0->prev;
    }
    ofstream file1;
    file1.open("num.txt");
    ofstream file2;
    file2.open("tnum.txt");
    ofstream file3;
    file3.open("pnum.txt");
    ofstream file4;
    file4.open("pcode.txt");
    for (j = j - 1; j >= 0;) {
        file1 << list1[j] << endl;
        file2 << list2[j] << endl;
        file3 << list3[j] << endl;
        file4 << list4[j--] << endl;
    }

    file1.close();
    file2.close();
    file3.close();
    file4.close();
}

//快遞員系統介面
int initialization(Node* head) {
    int n;
    cout << "____________________________________________________________________________________" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                  智慧櫃管理系統                                  |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                    1.取出快遞                                    |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                    2.放置快遞                                    |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                    3.查詢超時快遞                                |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                    0.登出                                        |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|__________________________________________________________________________________|" << endl;
    cout << endl << "                             輸入對應數位進入相應功能:";
    cin >> n;
    switch (n) {
    case 1:
        system("cls");
        return 1;
    case 2:
        system("cls");
        return 2;
    case 3:
        system("cls");
        return 3;
    case 0:
        system("cls");
        return 0;
    default:
        system("cls");
        return -1;
    }
}

//登入錯誤提示
void lerror() {
    cout << "____________________________________________________________________________________";
    cout << endl;
    cout << endl;
    cout << "                        賬號或密碼錯誤!!!";
    cout << endl;
    cout << endl;
    cout << "____________________________________________________________________________________";
    cout << endl;
    system("pause");
    system("cls");
}

//登入系統
int lsystem() {
    int j = 0;
    int anumber;
    int password;
    int list1[10];
    int list2[10];
    ifstream file1("anumber.txt");
    while (!file1.eof())
        file1 >> list1[j++];
    
    file1.close();

    j = 0;
    ifstream file2("password.txt");
    while (!file2.eof())
        file2 >> list2[j++];

    file2.close();

    cout << "____________________________________________________________________________________";
    cout << endl;
    cout << endl;
    cout << "                        賬號:"; cin >> anumber;
    cout << endl;
    cout << endl;
    cout << "                        密碼:"; cin >> password;
    cout << endl;
    cout << "____________________________________________________________________________________";
    for (int i = 0;i < j; i++) {
        if (list1[i] == anumber && list2[i] == password) {
            system("cls");
            return 1;
        }
        else {
            system("cls");
            return -1;
        }
    }
    return -1;
}

//系統介面
int linterface() {
    int n;
    cout << "____________________________________________________________________________________" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                  智慧櫃管理系統                                  |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                    1.取快遞                                      |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                    2.快遞員登入                                  |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|                                    0.退出                                        |" << endl;
    cout << "|                                                                                  |" << endl;
    cout << "|__________________________________________________________________________________|" << endl;
    cout << endl << "                            輸入對應數位進入相應功能:";
    cin >> n;
    switch (n) {
    case 1:
        system("cls");
        return 1;
    case 2:
        system("cls");
        return 2;
    case 0:
        exit(1);
    default:
        system("cls");
        return -1;
    }
}

/*
    n為系統介面返回值                    1為取件系統        2為快遞員登入系統介面    -1為迴圈
    m為取件系統返回值                    -1為取件失敗    其他為取件成功
    j為登入系統返回值                    1為登陸成功        -1為登入失敗
    k為快遞員系統介面返回值                1為櫃子介面        2為派送快遞                3為超時快遞            0為登出
    l為櫃子介面返回值                    0為返回            -1為迴圈                其他為快遞員取件
    p為派送快遞返回值                    0為櫃滿            1為成功                    -1為返回
    o為超時快遞返回值                    1為成功            2為失敗
*/
int main() {
    int n,m,j,k,l,p,o;
    do {
        n = linterface();
        if (n == 1) {
            m = pcode();
            if (m == -1) {
                freaction();
                n = -1;
            }
            else {
                rreaction(m);
                n = -1;
            }
        }
        else if (n == 2) {
            j = lsystem();
            if (j == 1) {
                Node *head;
                head = init();
                head = autoinput(head);
                do {
                    k = initialization(head);
                    if (k == 1) {
                        do {
                            l = ginformation(head);
                            if (l > 0) {
                                head = dnode(head, l);
                                l = -1;
                            }
                            else if (l == 0) {
                                k = -1;
                                break;
                            }
                        } while (l == -1);
                    }
                    else if (k == 2) {
                        p = sedelivery(head);
                        if (p == 0) {
                            serror(head);
                            k = -1;
                        }
                        else if (p == 1) {
                            head = head->next;
                            k = -1;
                        }
                        else if (p == -1) {
                            k = -1;
                        }
                    }
                    else if (k == 3) {
                        o = iexpress(head);
                        if(o == 2)head = head->next;
                        k = -1;
                    }
                    else if (k == 0){
                        iinformation(head);
                        n = -1;
                        break;
                    }
                    else {
                        k = -1;
                    }
                } while (k == -1);
            }
            else {
                lerror();
                n = -1;
            }
        }
    } while (n == -1);
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com