首頁 > 軟體

C++實現高校教室管理系統

2022-03-17 19:02:26

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

設計目的在於,利用學習的資料結構和c語言知識,研究大學空閒教室管理系統的開發途徑和應用方法。與其他學習階段相比,大學課程相對較少,合理利用空閒教室顯得尤為重要。為了讓廣大在校師生,在空閒時間有個教室去自習,去做自己想做的事情,因此開發一套空閒教室管理系統是勢在必行的。通過高校教室管理系統,廣大師生可以隨時隨地檢視空閒教室,作為老師可以新增後臺資料即預設空教室。同時,高校空閒教室管理系統設計是具有具體化,合理化性,也是為了提高空閒教室的可利用性。

建立教室結構體,包括教室編號、教室位置、教室容量,再通過建立單連結串列向連結串列中新增教室資訊。通過單連結串列的刪除操作實現刪除某一教室資訊,通過輸入某一教室編號實現對某一教室資訊的修改,通過輸入教室位置、容量、時間段,可以分別找到滿足使用者需求的空閒教室。

#include<stdio.h>  //輸入輸出 
#include<string.h> //字串處理 
#include<stdlib.h> // 程式工具 
#include<iostream> //輸入輸出流 
typedef struct Node {            //定義表結點
    char classRoomNum[10];        //教室編號 
    char freeTime1[10];            //空閒時間段 1
    char freeTime2[10];            //空閒時間段 2 
    char freeTime3[10];            //空閒時間段 3 
    char freeTime4[10];            //空閒時間段 4 把一天分為四個時間段 
    char set[10];                //教室地點 
    int volume;                    //容量 
    struct Node *next;
} SLNode;
 
typedef struct {                //定義教室資訊 
    char classRoomNum[10];        //教室編號 
    char freeTime1[10];            //空閒時間段 1
    char freeTime2[10];            //空閒時間段 2 
    char freeTime3[10];            //空閒時間段 3 
    char freeTime4[10];            //空閒時間段 4
    char set[10];                //教室地點 
    int volume;                    //容量 
    SLNode *head;
} classRoom;
 
void ListInitiate(SLNode **head) {        //連結串列初始化
    if ((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL)
        exit(1);                        //初始化失敗,則返回錯誤資訊
    (*head)->next = NULL;                //初始化成功則構造一個空表,頭節點指標域置空 
}
void allQuery(SLNode *head);            //函數宣告 
void linkView(SLNode *head);
void Exit();
void classRoomInfor();
void mainMenu();  
void classRoomAdd(SLNode *head, classRoom x);  
void classRoomQuery(SLNode *head);   
SLNode *classRoomInsert(SLNode *head, classRoom x);
void printclassRoom(SLNode *p); 
void queryMenu(); 
void classRoomQuery(SLNode *head);
void timeSlotQuery(SLNode *head);
void siteQuery(SLNode *head); 
void volumeQuery(SLNode *head);
void classRoomRevise(SLNode *head);
void classRoomDel(SLNode *head);
int main() {                   //**主函數 ** 
    int i;
    int flog = 0;//等於一退出系統 
    classRoom x = { 0 };
    SLNode *head;       //頭節點 
    ListInitiate(&head);//連結串列初始化 
 
    while (1) {
        system("color f0");//背景色 
        printf( "ntt 當前日期: ");
        (100);
        system("DATE    [/T]");
        (100);
        printf( "ntt 當前時間: ");
        (100);
        system("TIME    [/T]");
        printf ("nnnttt 歡  ");
        printf("迎   ");
        printf("進  ");
        printf("入 nnnttt");
        system("pause");//暫停,等待使用者訊號 
        system("cls");  //清除螢幕
        while(1) {
            mainMenu(); 
            printf("n請輸入0-5選擇子選單:");
            scanf("%d", &i);
            switch (i) {
                case 0:
                    Exit();
                    printf("n您已退出系統,謝謝使用!n");
                    flog = 1;
                    break;
                case 1:
                    classRoomAdd(head,x);//新增教室資訊 
                    break;
                case 2:
                    allQuery(head);//遍歷輸出 
                    break;
                case 3:classRoomRevise(head);//修改教室資訊 
                    break;
                case 4:
                     classRoomDel(head);//刪除教室資訊 
                    break;
                case 5:
                    classRoomQuery(head);//教室查詢,,分三種方式
                    break; 
                default:
                    printf("n您的輸入有誤,請輸入0-5之間的數位!n");
                    break;
            }
            if (flog == 1)
                break;          //退出系統 
        }
return 0;
    }
    system("pause");
    system("cls");              //清除螢幕
}
 
void mainMenu() {
        printf("n--------------------------------------------------------------------------------");
            printf("n");
            printf("nttt   空閒教室管理系統n");
            printf("ntttt主選單n");
            printf("ntt1.錄入教室資訊tt2.顯示全部教室資訊n");
            printf("ntt3.修改教室資訊tt4.刪除教室資訊n");
            printf("ntt5.查詢空閒教室n");
            printf("ntt0.退出系統n");
            printf("nn--------------------------------------------------------------------------------");
}
 
 
SLNode *classroomInsert(SLNode *head, classRoom x) {//按教室號升序錄入教室資訊函數
    SLNode *p, *q, *s;
    p = head->next;//
    q = (SLNode *)malloc(sizeof(SLNode));//分配空間 
    if (q == NULL) exit(1);                //儲存空間分配失敗
    q->volume = x.volume;
    strcpy(q->classRoomNum, x.classRoomNum);//字串複製 
    strcpy(q->freeTime1, x.freeTime1);
    strcpy(q->freeTime2, x.freeTime2); 
    strcpy(q->freeTime3, x.freeTime3);
    strcpy(q->freeTime4, x.freeTime4);
    strcpy(q->set, x.set);
    if (head->next == NULL) {//為空 
        head->next = q;        
        head->next->next = NULL;
    } else  {                //非空 
        for (; p; p->next) {//p指標從第一個資料往後移動,直到p為空 
            if (p->next != NULL) {    //錄入的教室編號在已錄入的兩個工號之間
                if (strlen(p->classRoomNum) < strlen(x.classRoomNum) && strlen(p->next->classRoomNum) >strlen(x.classRoomNum)) {
                    s = p->next;
                    p->next = q;
                    q->next = s;
                    break;
                } else if (strcmp(p->classRoomNum ,x.classRoomNum)==0) {
                    printf("教室號為%s的教室已存在!n", p->classRoomNum);
                    break;
                }
            } else if (strlen(p->classRoomNum) <strlen(x.classRoomNum) && p->next == NULL) {//如果在排序中為最後一個
                p->next = q;
                q->next = NULL;        //尾插法 
                break;
            }
            if (strlen(p->classRoomNum) >= strlen(x.classRoomNum)) {    //頭插法 
                s = head->next;
                head->next = q;
                q->next = s;
                break;
            }
        }
 
    }
    printf("該錄入完畢!");
    return head;
}
 
void classRoomInfor() {                        //教室包含的 屬性 
    printf("n教室編號ttt空閒時間段ttt教室地點ttt教室容量n");
}
 
void classRoomRevise(SLNode *head) {     //修改操作
    classRoom x;
    char n[10];
    SLNode *p;
    p = head->next;
    system("cls");
    printf("n請輸入要修改資訊的教室號:");
    scanf("%s", &n);
    for (; p; p = p->next) {
        if (strcmp(p->classRoomNum, n)==0) {
            printf("n請輸入該教室的新資訊!");
            printf("請輸入教是號:");
            scanf("%s", x.classRoomNum);
            printf("請輸入空閒時間段:");
            scanf("%s", x.freeTime1);
            printf("請輸入空閒時間段:");
            scanf("%s", x.freeTime2);
            printf("請輸入空閒時間段:");
            scanf("%s", x.freeTime3);
            printf("請輸入空閒時間段:");
            scanf("%s", x.freeTime4);
            printf("請輸入教室地點:");
            scanf("%s", x.set);
            printf("請輸入教室容量:");
            scanf("%d", &x.volume);
            p->volume = x.volume;
            strcpy(p->classRoomNum, x.classRoomNum);
            strcpy(p->freeTime1, x.freeTime1);
            strcpy(p->freeTime2, x.freeTime2);
            strcpy(p->freeTime3, x.freeTime3);
            strcpy(p->freeTime4, x.freeTime4);
            strcpy(p->set, x.set);
            printf("n教室資訊修改成功!");
            break;
        }
    }
    if (p == NULL)
        printf("n該教室不存在!n");
}
 
void classRoomDel(SLNode *head) {     //刪除操作
    SLNode *p, *s;
    char x[10];
    s = head;//初始化s 
    p = head->next;
    if (head->next == NULL) {
        printf("n系統中無教室資訊!n");
    } else {
        system("cls");
        printf("n請輸入要刪除的教室的編號:");
        scanf("%s", &x);
        for (; p; p = p->next) {
            if (strcmp(p->classRoomNum, x)==0) {
                s->next = p->next;
                free(p);
                printf("n刪除成功!請繼續!n");
                break;
            }
            s = p;
        }
        if (p == NULL)
            printf("n系統中無此教室資訊!n");
    }
}
 
void classRoomAdd(SLNode *head, classRoom x) {   //錄入操作
    int nu;
    system("cls");
  
    printf("n請輸入您要錄入的教室數:");
    scanf("%d", &nu);
    for (int n = 0; n < nu; n++) {   
        printf("nn");
        printf("請輸入教室編號:");
        scanf("%s", x.classRoomNum );
        printf("請輸入教室地點:");
        scanf("%s", x.set);
        printf("請輸入教室容量:");
        scanf("%d", &x.volume);
        printf("請輸入空閒時間段一:");
        scanf("%s", x.freeTime1);
        printf("請輸入空閒時間段二:");
        scanf("%s", x.freeTime2);
        printf("請輸入空閒時間段三:");
        scanf("%s", x.freeTime3);
        printf("請輸入空閒時間段四:");
        scanf("%s", x.freeTime4);
        head = classroomInsert(head, x);
    }
 
    printf("n錄入完畢!n");
}
 
 
 
void allQuery(SLNode *head) {                    //查詢所有教室資訊
    linkView(head);
}
 
 
void printclassRoom(SLNode *p) {
        printf("****************************n");
        printf("教 室 編 號 :%stn", p->classRoomNum);
        printf("教 室 地 點 :%stn", p->set);
        printf("教 室 容 量 :%dtn", p->volume);
        printf("空閒時間段一:%stn", p->freeTime1);
        printf("空閒時間段二:%stn", p->freeTime2);
        printf("空閒時間段三:%stn", p->freeTime3);
        printf("空閒時間段四:%stn", p->freeTime4);
        
}
 
 
void  linkView(SLNode *head) {              //顯示所有教室資訊
    SLNode *p = head;
    while (p->next) {
        p = p->next;
        printclassRoom(p);
 
    }
}
 
 
void Exit() { //退出程式
    int k;
    char s = 'Y';
    if (k) { //判斷資料是否修改,如已經修改按指定路徑儲存至txt檔案(D槽) 
        printf("n確定退出?(y/n):n");
        scanf("%d",&s);
        if (s == 'y' || s == 'Y') {
         
            printf("n已安全退出!n");
        }
        exit(0);
    }
}
 
 
void queryMenu() {//查詢教室選單 
    printf("nn--------------------------------------------------------------------------------");
    printf("nnn");
    printf("ntttt查詢選單n");
    printf("ntt1.以指定時間查詢tt2.以指定地點查詢n");
    printf("ntt3.以指定教室容量查詢ttn");
    printf("ntt0.回到主選單");
    printf("nn--------------------------------------------------------------------------------");
}
 
void classRoomQuery(SLNode *head) {    //定義教室查詢函數,三種查詢方式 
    system("cls");
    if (head->next == NULL)//如果連結串列為空 
        printf("n系統中無教室資訊!n");
    else {
        int j;
 
        while (1) {
            int flog = 0;
            queryMenu();
            printf("n請輸入0-3選擇查詢方式:");
            scanf("%d", &j);
            switch (j) {
                case 0:
                    printf("n您已退出查詢選單!n");
                    flog = 1;
                    break;
                case 1:
                    timeSlotQuery(head);//時間段 
                    break;
                case 2:
                    siteQuery(head);//地點 
                    break;
                case 3:
                    volumeQuery(head);//容量 
                    break;
                default:
                    printf("n您的輸入有誤,請輸入1-3之間的數位!n");
                    break;
            }
            if (flog)
                break;
        }
    }
}
void timeSlotQuery(SLNode *head) {     
    FILE *fp;                 //按時間段查詢
    fp = fopen("D:\timeData.txt", "w");
    SLNode *p;
    char x[30];
    int m = 0;
    p = head->next;
    system("cls");
    printf("n請輸入要查詢的時間段:");
    scanf("%s", x);
    for (; p; p = p->next) {
        if ((strcmp(p->freeTime1, x)==0)||//strcmp函數,相等返回0 ,只要有一個時間段滿足則查詢成功 
            (strcmp(p->freeTime2, x)==0)||
            (strcmp(p->freeTime3, x)==0)||
            (strcmp(p->freeTime4, x)==0)) {
            printclassRoom(p);
            fprintf(fp,"%st%st%st%st%st%st%dtn", p->classRoomNum,p->freeTime1,p->freeTime2,p->freeTime3,p->freeTime4, p->set, p->volume);//寫入文字 
            m = 1;
 
        }
    }
    if (m == 0)
        printf("對不起,此時間段無空閒教室!");
        fclose(fp);
}
void siteQuery(SLNode *head) {                    //按地點查詢
    SLNode *p;
    FILE *fp; 
    fp = fopen("D:\siteData.txt", "w");
    char x[30];
    int m = 0;
    p = head->next;
    system("cls");
    printf("n請輸入要查詢的地點:");
    scanf("%s", x);
    for (; p; p = p->next) {
        if (strcmp(p->set, x)==0) {
            printclassRoom(p);
            fprintf(fp,"%st%st%st%st%st%st%dtn", p->classRoomNum,p->freeTime1,p->freeTime2,p->freeTime3,p->freeTime4, p->set, p->volume);//寫入文字 
            m = 1;
    
        }
    }
    if (m == 0)
        printf("對不起,此地點無空閒教室!");
        fclose(fp);
}
 
void volumeQuery(SLNode *head) {                    //按容量查詢
    SLNode *p;
    FILE *fp; 
    fp = fopen("D:\volumeData.txt", "w");
    int n;
    int m=0;
    p = head->next;
    system("cls");
    printf("n請輸入要查詢的空閒教室容量:n");
    scanf("%d", &n );
    for (; p ; p= p->next) {
        if (p->volume == n) {
            printclassRoom(p);
            fprintf(fp,"%st%st%st%st%st%st%dtn", p->classRoomNum,p->freeTime1,p->freeTime2,p->freeTime3,p->freeTime4, p->set, p->volume);//寫入文字 
        
        m = 1;
    
        }
    }
    if (m == 0)
        printf("對不起,無空閒教室!", n);
        fclose(fp);
}

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


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