教师工作量管理系统思路(链表应用)

教师工作量管理系统思路(链表应用)

文章目录

  • 教师工作量管理系统思路(链表应用)
      • 题目描述:
      • 初始信息
      • 菜单部分
      • 数据结构
      • 功能实现
        • 查询历史信息
        • 从键盘录入信息
        • 信息删除和修改
        • 工作量计算
          • 如何存储到工作量信息链表中?
          • 工作量信息计算
      • 文件导入和输出

题目描述:

教师工作量管理系统思路(链表应用)_第1张图片

初始信息

将课程信息、教师信息分别用结构体数组进行存储

//存储课程信息
struct Course {
	int id;//课程编号
	int TheoryCHour;//理论学时
	int ExperiCHour;//实验学时
	char name[20];//课程名称
}cr[4];
//存储教师信息
struct Teacher {
	int id;//教师号
	char name[20];//姓名
	char sex[10];//性别
	char prof[20];//职称
}tr[5];

由于只有4门课程和5名教师,所以设置初始化函数来存储初始信息

void InitTeacherInfo() {//教师信息初始化
	tr[0].id = 1001;
	strcpy(tr[0].name, "艾雪");
	strcpy(tr[0].sex, "女");
	strcpy(tr[0].prof, "副教授");

	tr[1].id = 1002;
	strcpy(tr[1].name, "张三");
	strcpy(tr[1].sex, "男");
	strcpy(tr[1].prof, "讲师");
	tr[2].id = 1003;
	strcpy(tr[2].name, "罗翔");
	strcpy(tr[2].sex, "男");
	strcpy(tr[2].prof, "教授");
	tr[3].id = 1004;
	strcpy(tr[3].name, "李四");
	strcpy(tr[3].sex, "男");
	strcpy(tr[3].prof, "副教授");
	tr[4].id = 1005;
	strcpy(tr[4].name, "王梅");
	strcpy(tr[4].sex, "女");
	strcpy(tr[4].prof, "助教");
}

void InitCourseInfo() {//课程信息初始化
	cr[0].id = 5001;
	cr[0].TheoryCHour = 28;
	cr[0].ExperiCHour = 8;
	strcpy(cr[0].name, "数据结构");
	cr[1].id = 5002;
	cr[1].TheoryCHour = 24;
	cr[1].ExperiCHour = 4;
	strcpy(cr[1].name, "单片机");
	cr[2].id = 5003;
	cr[2].TheoryCHour = 30;
	cr[2].ExperiCHour = 8;
	strcpy(cr[2].name, "c语言程序设计");
	cr[3].id = 5004;
	cr[3].TheoryCHour = 26;
	cr[3].ExperiCHour = 4;
	strcpy(cr[3].name, "数据库系统");
}

菜单部分

通过参数decide传入不同的值来打印角标在不同的位置,为了实现角标移动效果,在run()函数中调用语句

system("cls");

来进行清屏处理

当键盘读取到w或↑时,对decide值进行减处理,反之加处理,当decide值越界时进行重置

void printMenu1(int decide) {
	system("cls");
	printf("\n\n\n\n\n   -------------------------------\n");
	switch (decide) {
	case 1:
		printf("       >1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 2:
		printf("        1.从文件导入授课信息\n");
		printf("       >2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 3:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("       >3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 4:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("       >4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 5:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("       >5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 6:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("       >6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 7:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("       >7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 8:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("       >8.退出\n");
		break;
	}
	printf("   -------------------------------\n");
	printf("   ----按w s或↑↓选择菜单选项 ---\n");
}

数据结构

将教师授课信息及工作量信息用链表进行存储。在run函数中创建头节点。当信息增加时在链表尾部进行节点增加。信息修改只需遍历链表找到对应信息位置从而修改其值即可。删除信息同理需遍历链表找到对应信息位置删除节点,使被删除节点的前驱和后继相连。

//链表定义
typedef struct Workload {
	int TheoryCHour;//课时
	int ExperiCHour;//课时
	int ClassNum;//班级数
	char term[10];
	struct Workload* next;
}Workload, * WorkList;
//存储教师授课信息
typedef struct Node {
	int tId;//教师号
	int cId;//课程编号
	char term[10];//学期
	struct Node* next;
}Node, * LinkList;

节点增加

//节点增加
void ListAdd(LinkList L, int tid, int cid, char str[]) {
	int j;
	LinkList p, s;
	p = L;
	while (p->next) {
		p = p->next;
	}
	s = (LinkList)malloc(sizeof(Node));
	s->cId = cid;
	s->tId = tid;
	strcpy(s->term, str);
	p->next = s;
	s->next = NULL;
}

链表遍历

//遍历
void TraverseList(LinkList L) {
	LinkList p, q;
	p = L->next;
	printf("教师授课历史\n\n\n");
	while (p) {
		printf("%d %d %s\n", p->cId, p->tId, p->term);
		p = p->next;
	}
	printf("\n\n\n");
}

功能实现

查询历史信息

即遍历链表输出所有授课信息,直接调用遍历函数即可

void InfoShow(LinkList L) {
	TraverseList(L);
}

从键盘录入信息

输入题目要求的教师编号,课程编号和上课学期存储到相应变量,存储成功后调用节点增加函数即可实现存储信息

void InfoInput(LinkList L) {
	int cid, tid;
	char str[10];
	printf("     信息录入:\n");
	printf("     请输入教师编号:\n");
	printf("     ");
	scanf("%d", &tid);
	printf("     请输入课程编号:\n");
	printf("     ");
	scanf("%d", &cid);
	printf("     请输入上课学期:\n");
	printf("     ");
	scanf("%s", str);
	ListAdd(L, tid, cid, str);//节点增加函数
	printf("信息录入成功!\n");
}

信息删除和修改

输入课程编号和上课学期通过遍历链表查找信息,若未找到,打印“未查到该授课信息”退出函数,若找到在对应节点位置进行信息的修改和删除。

void InfoDelete(LinkList L) {
	int cid;
	int flag = 0;
	char str[10];
	printf("     信息删除:\n");
	printf("     请输入课程编号:\n");
	printf("     ");
	scanf("%d", &cid);
	printf("     请输入上课学期:\n");
	printf("     ");
	scanf("%s", str);
	LinkList p, q;
	p = L;
	while (p->next) {
		if (p->next->cId == cid && !strcmp(p->next->term, str)) {
			flag = 1;
			break;
		}
		p = p->next;
	}
	if (!flag) {
		printf("未查到该授课信息\n");
		return;
	}
	q = p->next;
	p->next = q->next;
	free(q);//回收资源
	printf("信息删除成功!\n");
}

void InfoAlter(LinkList L) {
	int cid, tid;
	int flag = 0;
	char str[10];
	printf("     信息修改:\n");
	printf("     请输入课程编号:\n");
	printf("     ");
	scanf("%d", &cid);
	printf("     请输入上课学期:\n");
	printf("     ");
	scanf("%s", str);
	LinkList p;
	p = L;
	while (p->next) {
		if (p->next->cId == cid && !strcmp(p->next->term, str)) {
			flag = 1;
			break;
		}
		p = p->next;
	}
	if (!flag) {
		printf("未查到该授课信息\n");
		return;
	}
	p = p->next;
	printf("     当前授课信息为:\n");
	printf("     %d %d %s\n", p->cId, p->tId, p->term);
	printf("     是否修改?(y/n)\n     ");//询问是否修改
	char s;
	getchar();//吸收回车
	scanf("%c", &s);
	if (s == 'y' || s == 'Y') {
		printf("     请输入教师编号:\n");
		printf("     ");
		scanf("%d", &tid);
		printf("     请输入课程编号:\n");
		printf("     ");
		scanf("%d", &cid);
		printf("     请输入上课学期:\n");
		printf("     ");
		scanf("%s", str);
		p->tId = tid;
		p->cId = cid;
		strcpy(p->term, str);
		printf("信息修改成功!\n");
	}
	else {
		return;
	}
}

工作量计算

是这里最复杂的一个函数,需要对两个链表进行操作。首先用户输入教师编号,并传参给函数,然后遍历教师信息查到后打印。接着遍历授课信息链表查找含有该教师编号的节点,一旦找到便存储到工作量信息链表中。

如何存储到工作量信息链表中?

这里假设A教师有5次授课信息在授课信息链表中,其中1学期2次,2学期2次,3学期一次。由于工作量的计算是按照学期划分的,因此采用如下存储方式:

当第一次在授课信息链表中找到含有该教师编号的节点,直接存储到工作量信息链表中。

从第二次找到该教师编号的节点起,都遍历一次工作量信息链表,若有学期相同的节点,则不创建新节点存储工作量信息,而是和上一次存储的工作量信息进行叠加,班级数加一。

若遍历工作量信息链表后没有学期相同的节点,则再创建新节点存储。

工作量信息计算

遍历工作量信息链表,对于每一个节点的课时,班级数来分类计算结果并输出。

void WorkCalcul(LinkList L, int tid) {
	int i, flag = 0, j;
	LinkList p;
	WorkList w, s, tp;
	w = (WorkList)malloc(sizeof(Workload));
	w->next = NULL;
	s = w;
	p = L->next;
	for (i = 0; i < 5; i++) {
		if (tr[i].id == tid) {
			flag = 1;
			break;
		}
	}
	if (!flag) {
		printf("教师信息不存在:\n");
		return;
	}

	printf("教师信息:\n");
	printf("编号:%d\n", tr[i].id);
	printf("姓名:%s\n", tr[i].name);
	printf("性别:%s\n", tr[i].sex);
	printf("职称:%s\n", tr[i].prof);
	while (p) {
		if (p->tId == tid) {
			s = w;
			while (s->next) {
				if (!strcmp(s->next->term, p->term)) {
					for (i = 0; i < 4; i++) {
						if (cr[i].id == p->cId) {
							s->next->ExperiCHour += cr[i].ExperiCHour;
							s->next->TheoryCHour += cr[i].TheoryCHour;
						}
					}
					s->next->ClassNum++;
					break;
				}
				s = s->next;
			}
			if (!s->next) {
				tp = (WorkList)malloc(sizeof(Workload));
				tp->ClassNum = 1;
				strcpy(tp->term, p->term);
				for (i = 0; i < 4; i++) {
					if (cr[i].id == p->cId) {
						tp->ExperiCHour = cr[i].ExperiCHour;
						tp->TheoryCHour = cr[i].TheoryCHour;
					}
				}
				tp->next = NULL;
				s->next = tp;
			}
		}
		p = p->next;
	}
	printf("教师工作量:\n");
	s = w->next;
	while (s) {
		printf("学期:%s ", s->term);
		if (s->ClassNum <= 2) {
			printf("工作量:%.2f\n", (s->ExperiCHour + s->TheoryCHour) * 1.5);
		}
		else if (s->ClassNum == 3) {
			printf("工作量:%.2f\n", (s->ExperiCHour + s->TheoryCHour) * 2);
		}
		else {
			printf("工作量:%.2f\n", (s->ExperiCHour + s->TheoryCHour) * 2.5);
		}
		s = s->next;
	}
}

文件导入和输出

使用文件读取和写入操作,写入时直接将信息打印在txt文本中,读取时,先读取文本中字符串,再对字符串进行分解,分离出字符串中的int类型变量和字符串变量。这里注意不同的集成开发环境的编码方式不同,若和txt文本不是同一种编码方式则会出现乱码情况。

完整代码

#include 
#include 
#include 
#include 
#include 

//存储课程信息
struct Course {
	int id;//课程编号
	int TheoryCHour;//课时
	int ExperiCHour;//课时
	char name[20];//课程名称
}cr[4];
//存储教师信息
struct Teacher {
	int id;//教师号
	char name[20];//姓名
	char sex[10];//性别
	char prof[20];//职称
}tr[5];
//存储每学期工作量
typedef struct Workload {
	int TheoryCHour;//课时
	int ExperiCHour;//课时
	int ClassNum;
	char term[10];
	struct Workload* next;
}Workload, * WorkList;
//存储教师授课信息
typedef struct Node {
	int tId;//教师号
	int cId;//课程编号
	char term[10];
	struct Node* next;
}Node, * LinkList;
//节点增加
void ListAdd(LinkList L, int tid, int cid, char str[]) {
	int j;
	LinkList p, s;
	p = L;
	while (p->next) {
		p = p->next;
	}
	s = (LinkList)malloc(sizeof(Node));
	s->cId = cid;
	s->tId = tid;
	strcpy(s->term, str);
	p->next = s;
	s->next = NULL;
}
//遍历
void TraverseList(LinkList L) {
	LinkList p, q;
	p = L->next;
	printf("教师授课历史\n\n\n");
	while (p) {
		printf("%d %d %s\n", p->cId, p->tId, p->term);
		p = p->next;
	}
	printf("\n\n\n");
}

//1.从文件导入教师的授课信息
//教师编号 课程编号 上课学期
//
//7.能将授课信息导出到文件
//
//
//

void InitTeacherInfo() {
	tr[0].id = 1001;
	strcpy(tr[0].name, "艾雪");
	strcpy(tr[0].sex, "女");
	strcpy(tr[0].prof, "副教授");

	tr[1].id = 1002;
	strcpy(tr[1].name, "张三");
	strcpy(tr[1].sex, "男");
	strcpy(tr[1].prof, "讲师");
	tr[2].id = 1003;
	strcpy(tr[2].name, "罗翔");
	strcpy(tr[2].sex, "男");
	strcpy(tr[2].prof, "教授");
	tr[3].id = 1004;
	strcpy(tr[3].name, "李四");
	strcpy(tr[3].sex, "男");
	strcpy(tr[3].prof, "副教授");
	tr[4].id = 1005;
	strcpy(tr[4].name, "王梅");
	strcpy(tr[4].sex, "女");
	strcpy(tr[4].prof, "助教");
}

void InitCourseInfo() {
	cr[0].id = 5001;
	cr[0].TheoryCHour = 28;
	cr[0].ExperiCHour = 8;
	strcpy(cr[0].name, "数据结构");
	cr[1].id = 5002;
	cr[1].TheoryCHour = 24;
	cr[1].ExperiCHour = 4;
	strcpy(cr[1].name, "单片机");
	cr[2].id = 5003;
	cr[2].TheoryCHour = 30;
	cr[2].ExperiCHour = 8;
	strcpy(cr[2].name, "c语言程序设计");
	cr[3].id = 5004;
	cr[3].TheoryCHour = 26;
	cr[3].ExperiCHour = 4;
	strcpy(cr[3].name, "数据库系统");
}

void printMenu1(int decide) {
	system("cls");
	printf("\n\n\n\n\n   -------------------------------\n");
	switch (decide) {
	case 1:
		printf("       >1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 2:
		printf("        1.从文件导入授课信息\n");
		printf("       >2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 3:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("       >3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 4:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("       >4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 5:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("       >5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 6:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("       >6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 7:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("       >7.授课信息导出到文件\n");
		printf("        8.退出\n");
		break;
	case 8:
		printf("        1.从文件导入授课信息\n");
		printf("        2.授课信息录入\n");
		printf("        3.授课信息删除\n");
		printf("        4.授课教师修改\n");
		printf("        5.工作量计算\n");
		printf("        6.查询授课历史\n");
		printf("        7.授课信息导出到文件\n");
		printf("       >8.退出\n");
		break;
	}
	printf("   -------------------------------\n");
	printf("   ----按w s或↑↓选择菜单选项 ---\n");
}

void InfoInput(LinkList L) {
	int cid, tid;
	char str[10];
	printf("     信息录入:\n");
	printf("     请输入教师编号:\n");
	printf("     ");
	scanf("%d", &tid);
	printf("     请输入课程编号:\n");
	printf("     ");
	scanf("%d", &cid);
	printf("     请输入上课学期:\n");
	printf("     ");
	scanf("%s", str);
	ListAdd(L, tid, cid, str);
	printf("信息录入成功!\n");
}

void InfoDelete(LinkList L) {
	int cid;
	int flag = 0;
	char str[10];
	printf("     信息删除:\n");
	printf("     请输入课程编号:\n");
	printf("     ");
	scanf("%d", &cid);
	printf("     请输入上课学期:\n");
	printf("     ");
	scanf("%s", str);
	LinkList p, q;
	p = L;
	while (p->next) {
		if (p->next->cId == cid && !strcmp(p->next->term, str)) {
			flag = 1;
			break;
		}
		p = p->next;
	}
	if (!flag) {
		printf("未查到该授课信息\n");
		return;
	}
	q = p->next;
	p->next = q->next;
	free(q);//回收资源
	printf("信息删除成功!\n");
}

void InfoAlter(LinkList L) {
	int cid, tid;
	int flag = 0;
	char str[10];
	printf("     信息修改:\n");
	printf("     请输入课程编号:\n");
	printf("     ");
	scanf("%d", &cid);
	printf("     请输入上课学期:\n");
	printf("     ");
	scanf("%s", str);
	LinkList p;
	p = L;
	while (p->next) {
		if (p->next->cId == cid && !strcmp(p->next->term, str)) {
			flag = 1;
			break;
		}
		p = p->next;
	}
	if (!flag) {
		printf("未查到该授课信息\n");
		return;
	}
	p = p->next;
	printf("     当前授课信息为:\n");
	printf("     %d %d %s\n", p->cId, p->tId, p->term);
	printf("     是否修改?(y/n)\n     ");
	char s;
	getchar();//吸收回车
	scanf("%c", &s);
	if (s == 'y' || s == 'Y') {
		printf("     请输入教师编号:\n");
		printf("     ");
		scanf("%d", &tid);
		printf("     请输入课程编号:\n");
		printf("     ");
		scanf("%d", &cid);
		printf("     请输入上课学期:\n");
		printf("     ");
		scanf("%s", str);
		p->tId = tid;
		p->cId = cid;
		strcpy(p->term, str);
		printf("信息修改成功!\n");
	}
	else {
		return;
	}
}

void InfoShow(LinkList L) {
	TraverseList(L);
}

void WorkCalcul(LinkList L, int tid) {
	int i, flag = 0, j;
	LinkList p;
	WorkList w, s, tp;
	w = (WorkList)malloc(sizeof(Workload));
	w->next = NULL;
	s = w;
	p = L->next;
	for (i = 0; i < 5; i++) {
		if (tr[i].id == tid) {
			flag = 1;
			break;
		}
	}
	if (!flag) {
		printf("教师信息不存在:\n");
		return;
	}

	printf("教师信息:\n");
	printf("编号:%d\n", tr[i].id);
	printf("姓名:%s\n", tr[i].name);
	printf("性别:%s\n", tr[i].sex);
	printf("职称:%s\n", tr[i].prof);
	while (p) {
		if (p->tId == tid) {
			s = w;
			while (s->next) {
				if (!strcmp(s->next->term, p->term)) {
					for (i = 0; i < 4; i++) {
						if (cr[i].id == p->cId) {
							s->next->ExperiCHour += cr[i].ExperiCHour;
							s->next->TheoryCHour += cr[i].TheoryCHour;
						}
					}
					s->next->ClassNum++;
					break;
				}
				s = s->next;
			}
			if (!s->next) {
				tp = (WorkList)malloc(sizeof(Workload));
				tp->ClassNum = 1;
				strcpy(tp->term, p->term);
				for (i = 0; i < 4; i++) {
					if (cr[i].id == p->cId) {
						tp->ExperiCHour = cr[i].ExperiCHour;
						tp->TheoryCHour = cr[i].TheoryCHour;
					}
				}
				tp->next = NULL;
				s->next = tp;
			}
		}
		p = p->next;
	}
	printf("教师工作量:\n");
	s = w->next;
	while (s) {
		printf("学期:%s ", s->term);
		if (s->ClassNum <= 2) {
			printf("工作量:%.2f\n", (s->ExperiCHour + s->TheoryCHour) * 1.5);
		}
		else if (s->ClassNum == 3) {
			printf("工作量:%.2f\n", (s->ExperiCHour + s->TheoryCHour) * 2);
		}
		else {
			printf("工作量:%.2f\n", (s->ExperiCHour + s->TheoryCHour) * 2.5);
		}
		s = s->next;
	}
}

void run() {
	char keyIn;
	int decide = 1;
	LinkList L;
	L = (LinkList)malloc(sizeof(Node));
	L->next = NULL;
begin:
	printMenu1(decide);
	while (1) {
		keyIn = _getch();
		if (keyIn == 13) {
			break;//回车检测
		}
		switch (keyIn)
		{
		case 'w':
		case 'W':
		case 72:
			decide--;
			break;
		case 's':
		case 'S':
		case 80:
			decide++;
			break;
		default:
			break;
		}
		if (decide > 8) {
			decide = 1;
		}
		else if (decide < 1) {
			decide = 8;
		}
		printMenu1(decide);
	}
	if (decide == 1) {//1.从文件导入授课信息
		system("cls");
		int tid = 0, cid = 0;
        int flag = 0;
        char term[10];

        FILE* p;
        char ch;
        char str[10005];//用来存储txt文件中的字符串
        int i, num[256] = { 0 };
        if ((p = fopen("D:\\test.txt", "r")) == NULL)  //以只读的方式打开test。
        {
            printf("ERROR");
        }
        int k = 0;
        for (; ch != '\n';)
        {
            ch = fgetc(p);   //ch得到p所指文件中的每一个字符
            if (ch != 32) {
                str[k] = ch;
                k++;
            }
            else {
                int j = 0;
                for (j = 0; str[j] != '\0'; j++) {
                    if (!flag)
                        tid = tid * 10 + str[j] - '0';
                    else
                        cid = cid * 10 + str[j] - '0';
                }
                k = 0;
                flag = 1;
            }
        }
        strcpy(term, str);
        printf("\n%d %d %s\n", tid, cid, str);
        ListAdd(L, tid, cid, str);
        printf("从文件录入信息录入成功!\n");
        fclose(p);	//关闭文件
		printf("按任意键返回上一级");
		getch();
		goto begin;
	}
	else if (decide == 2) {//2.授课信息录入
		system("cls");
		InfoInput(L);
		printf("按任意键返回上一级");
		getch();
		system("cls");
		goto begin;
	}
	else if (decide == 3) {//3.授课信息删除
		system("cls");
		InfoDelete(L);
		printf("按任意键返回上一级");
		getch();
		goto begin;
	}
	else if (decide == 4) {//4.授课教师修改
		system("cls");
		InfoAlter(L);
		printf("按任意键返回上一级");
		getch();
		goto begin;
	}
	else if (decide == 5) {//5.工作量计算
		system("cls");
		int id;
		printf("请输入教师编号:\n");
		scanf("%d", &id);
		WorkCalcul(L, id);
		printf("按任意键返回上一级");
		getch();
		goto begin;
	}
	else if (decide == 6) {//6.查询授课历史
		system("cls");
		InfoShow(L);
		printf("按任意键返回上一级");
		getch();
		goto begin;
	}
	else if (decide == 7) {//7.授课信息导出到文件
		system("cls");
		FILE* f;
		f = fopen("D:\\info.txt", "w");//导入文件路径
		if (f != NULL)
		{
			LinkList p, q;
			p = L->next;
			fputs("教师授课信息:\n", f);
			while (p) {
				fprintf(f, "%d %d %s\n", p->cId, p->tId, p->term);
				p = p->next;
			}
			fclose(f);
			f = NULL;
		}
		printf("授课信息已导出到文件D:\\info.txt\n");
		printf("按任意键返回上一级");
		getch();
		goto begin;
	}
	else if (decide == 8) {//退出
		system("cls");
		printf("\n\n\n\n\n   -------------------------------\n");
		printf("\n\n\n\n               Bye~\n\n\n\n\n");
		printf("   -------------------------------\n\n\n\n\n\n");
	}


}

int main() {
	InitTeacherInfo();//教师信息初始化
	InitCourseInfo();//课程信息初始化
	run();

	return 0;
}


你可能感兴趣的:(c++,编程语言,链表)