C++實現(xiàn)高校教室管理系統(tǒng)
本文實例為大家分享了C++實現(xiàn)高校教室管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
設計目的在于,利用學習的數(shù)據(jù)結(jié)構(gòu)和c語言知識,研究大學空閑教室管理系統(tǒng)的開發(fā)途徑和應用方法。與其他學習階段相比,大學課程相對較少,合理利用空閑教室顯得尤為重要。為了讓廣大在校師生,在空閑時間有個教室去自習,去做自己想做的事情,因此開發(fā)一套空閑教室管理系統(tǒng)是勢在必行的。通過高校教室管理系統(tǒng),廣大師生可以隨時隨地查看空閑教室,作為老師可以添加后臺數(shù)據(jù)即默認空教室。同時,高??臻e教室管理系統(tǒng)設計是具有具體化,合理化性,也是為了提高空閑教室的可利用性。
創(chuàng)建教室結(jié)構(gòu)體,包括教室編號、教室位置、教室容量,再通過創(chuàng)建單鏈表向鏈表中添加教室信息。通過單鏈表的刪除操作實現(xiàn)刪除某一教室信息,通過輸入某一教室編號實現(xiàn)對某一教室信息的修改,通過輸入教室位置、容量、時間段,可以分別找到滿足用戶需求的空閑教室。
#include<stdio.h> ?//輸入輸出? #include<string.h> //字符串處理? #include<stdlib.h> // 程序工具? #include<iostream> //輸入輸出流? typedef struct Node {?? ??? ??? ?//定義表結(jié)點 ?? ?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;?? ??? ??? ??? ?//初始化成功則構(gòu)造一個空表,頭節(jié)點指針域置空? } void allQuery(SLNode *head); ? ? ? ? ? ?//函數(shù)聲明? 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() { ? ? ? ? ? ? ? ? ? //**主函數(shù) **? ?? ?int i; ?? ?int flog = 0;//等于一退出系統(tǒng)? ?? ?classRoom x = { 0 }; ?? ?SLNode *head; ? ? ? //頭節(jié)點? ?? ?ListInitiate(&head);//鏈表初始化? ? ?? ?while (1) { ?? ??? ?system("color f0");//背景色? ?? ??? ?printf( "\n\t\t 當前日期: "); ?? ??? ?(100); ?? ??? ?system("DATE?? ?[/T]"); ?? ??? ?(100); ?? ??? ?printf( "\n\t\t 當前時間: "); ?? ??? ?(100); ?? ??? ?system("TIME?? ?[/T]"); ?? ??? ?printf ("\n\n\n\t\t\t 歡 ?"); ?? ??? ?printf("迎 ? "); ?? ??? ?printf("進 ?"); ?? ??? ?printf("入 \n\n\n\t\t\t"); ?? ??? ?system("pause");//暫停,等待用戶信號? ?? ??? ?system("cls"); ?//清除屏幕 ?? ??? ?while(1) { ? ? ? ? ?? ?mainMenu();? ?? ??? ??? ?printf("\n請輸入0-5選擇子菜單:"); ?? ??? ??? ?scanf("%d", &i); ?? ??? ??? ?switch (i) { ?? ??? ??? ??? ?case 0: ?? ??? ??? ??? ??? ?Exit(); ?? ??? ??? ??? ??? ?printf("\n您已退出系統(tǒng),謝謝使用!\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之間的數(shù)字!\n"); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?if (flog == 1) ?? ??? ??? ??? ?break; ? ? ? ? ?//退出系統(tǒng)? ?? ??? ?} return 0; ?? ?} ?? ?system("pause"); ?? ?system("cls"); ? ? ? ? ? ? ?//清除屏幕 } ? void mainMenu() { ?? ??? ?printf("\n--------------------------------------------------------------------------------"); ?? ??? ??? ?printf("\n"); ?? ??? ??? ?printf("\n\t\t\t ? 空閑教室管理系統(tǒng)\n"); ?? ??? ??? ?printf("\n\t\t\t\t主菜單\n"); ?? ??? ??? ?printf("\n\t\t1.錄入教室信息\t\t2.顯示全部教室信息\n"); ?? ??? ??? ?printf("\n\t\t3.修改教室信息\t\t4.刪除教室信息\n"); ?? ??? ??? ?printf("\n\t\t5.查找空閑教室\n"); ?? ??? ??? ?printf("\n\t\t0.退出系統(tǒng)\n"); ?? ??? ??? ?printf("\n\n--------------------------------------------------------------------------------"); } ? ? SLNode *classroomInsert(SLNode *head, classRoom x) {//按教室號升序錄入教室信息函數(shù) ?? ?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指針從第一個數(shù)據(jù)往后移動,直到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教室編號\t\t\t空閑時間段\t\t\t教室地點\t\t\t教室容量\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系統(tǒng)中無教室信息!\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刪除成功!請繼續(xù)!\n"); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?s = p; ?? ??? ?} ?? ??? ?if (p == NULL) ?? ??? ??? ?printf("\n系統(tǒng)中無此教室信息!\n"); ?? ?} } ? void classRoomAdd(SLNode *head, classRoom x) { ? //錄入操作 ?? ?int nu; ? ? system("cls"); ?? ?? ?printf("\n請輸入您要錄入的教室數(shù):"); ?? ?scanf("%d", &nu); ?? ?for (int n = 0; n < nu; n++) { ?? ?? ? ? ?printf("\n\n"); ?? ??? ?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("教 室 編 號 :%s\t\n", p->classRoomNum); ? ? ? ? printf("教 室 地 點 :%s\t\n", p->set); ?? ??? ?printf("教 室 容 量 :%d\t\n", p->volume); ?? ? ? ?printf("空閑時間段一:%s\t\n", p->freeTime1); ?? ??? ?printf("空閑時間段二:%s\t\n", p->freeTime2); ?? ??? ?printf("空閑時間段三:%s\t\n", p->freeTime3); ?? ??? ?printf("空閑時間段四:%s\t\n", 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) { //判斷數(shù)據(jù)是否修改,如已經(jīng)修改按指定路徑保存至txt文檔(D盤)? ?? ??? ?printf("\n確定退出?(y/n):\n"); ?? ??? ?scanf("%d",&s); ?? ??? ?if (s == 'y' || s == 'Y') { ? ? ? ? ? ?? ??? ??? ?printf("\n已安全退出!\n"); ?? ??? ?} ?? ??? ?exit(0); ?? ?} } ? ? void queryMenu() {//查詢教室菜單? ?? ?printf("\n\n--------------------------------------------------------------------------------"); ?? ?printf("\n\n\n"); ?? ?printf("\n\t\t\t\t查詢菜單\n"); ?? ?printf("\n\t\t1.以指定時間查詢\t\t2.以指定地點查詢\n"); ?? ?printf("\n\t\t3.以指定教室容量查詢\t\t\n"); ?? ?printf("\n\t\t0.回到主菜單"); ?? ?printf("\n\n--------------------------------------------------------------------------------"); } ? void classRoomQuery(SLNode *head) {?? ?//定義教室查詢函數(shù),三種查詢方式? ?? ?system("cls"); ?? ?if (head->next == NULL)//如果鏈表為空? ?? ??? ?printf("\n系統(tǒng)中無教室信息!\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之間的數(shù)字!\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函數(shù),相等返回0 ,只要有一個時間段滿足則查詢成功? ?? ??? ? ? ?(strcmp(p->freeTime2, x)==0)|| ?? ??? ? ? ?(strcmp(p->freeTime3, x)==0)|| ?? ??? ? ? ?(strcmp(p->freeTime4, x)==0)) { ?? ??? ? ? ?printclassRoom(p); ?? ??? ? ? ?fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%d\t\n", 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,"%s\t%s\t%s\t%s\t%s\t%s\t%d\t\n", 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,"%s\t%s\t%s\t%s\t%s\t%s\t%d\t\n", p->classRoomNum,p->freeTime1,p->freeTime2,p->freeTime3,p->freeTime4, p->set, p->volume);//寫入文本? ?? ??? ? ?? ??? ?m = 1; ?? ? ?? ??? ?} ?? ?} ?? ?if (m == 0) ?? ??? ?printf("對不起,無空閑教室!", n); ?? ??? ?fclose(fp); }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++ 中將一維數(shù)組轉(zhuǎn)成多維的三種方式示例詳解
這篇文章主要介紹了C++ 中將一維數(shù)組轉(zhuǎn)成多維的三種方式,每種方式結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12使用c++實現(xiàn)OpenCV繪制旋轉(zhuǎn)矩形圖形
這篇文章主要給大家介紹了使用c++實現(xiàn)OpenCV繪制圖形旋轉(zhuǎn)矩形的方法案例,通過圖文及代碼形式進行了詳細的描述,有需要的朋友可以參考下,希望可以有所幫助2021-08-08Linux?C/C++?timeout命令實現(xiàn)運行具有時間限制功能
inux?timeout命令的一個屬性是時間限制??梢詾槿魏蚊钤O置時間限制。如果時間到期,命令將停止執(zhí)行,這篇文章主要介紹了Linux?C/C++?timeout命令實現(xiàn)(運行具有時間限制),需要的朋友可以參考下2023-02-02linux c 查找使用庫的cflags與libs的方法詳解
本篇文章是對在linux中使用c語言查找使用庫的cflags與libs的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05