教师工作量管理系统思路(链表应用)
创始人
2024-01-26 16:06:19

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

文章目录

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

题目描述:

请添加图片描述

初始信息

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

//存储课程信息
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';elsecid = 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;
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
丹顶鹤简笔画 仙鹤怎么画好看 仙鹤,也就是丹顶鹤,是生活在沼泽或者浅水地区的一种大型禽鸟,是长寿和高雅的象征,人们心中十分喜爱的吉...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
赛艇运动起源于哪个国家 水上巴... 学习强国之起源总结. 冬奥会上的冬季两项比赛项目起源于斯堪的纳维亚半岛,由远古时代的【】演变而来。A...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...