设计目的在于,利用学习的数据结构和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( "\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您已退出系统,谢谢使用!\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("\n\t\t\t 空闲教室管理系统\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.退出系统\n");
- printf("\n\n--------------------------------------------------------------------------------");
- }
-
-
- 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教室编号\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系统中无教室信息!\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("\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) { //判断数据是否修改,如已经修改按指定路径保存至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) { //定义教室查询函数,三种查询方式
- 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,"%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);
- }