高校教室管理系统

               设计目的在于,利用学习的数据结构和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);
}

  

转载于:https://www.cnblogs.com/zhai1997/p/11197327.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值