**

基于C++的简易“公司人事管理系统”

**
励志:让所有猿同胞都能看懂的代码!
(前方高能:注释贼多!)

第一次接触C++,是因为朋友的专业大作业,实在无法了找我帮忙写系统。经过一天一夜的自学推敲,再找了一些网上大神的代码借鉴,终于完工。现在重新将代码优化,并做了详细的注释介绍。废话不多说——

先上效果图



……中间省略用户使用效果。

一、功能——

1、问题描述
一个小公司包含四类人员:经理、技术人员,销售人员和销售经理,各类人员的工资计算方法如下:
经理:固定月薪(8000);
技术人员:月薪按技术等级(1~8级)(1600+等级*300);
销售人员:按提成(4%*销售额);
销售经理:底薪+提成(1500+0.2%*总销售额);
——设计一个管理程序,实现对各类人员的信息输入,修改和显示。
2、假定 经理 和 销售经理 都只能有一个;
用文本编辑器编辑一个文本文件(总数20人以上),包含各类人员的信息;并且在程序中能修改保存。
3、菜单功能:添加公司人员(输入),修改信息,浏览信息(输出),按姓名查找,月薪排序。

二、思路分析——

1、定义一个主函数
在主函数中画出简易的菜单界面,以便用户选择。
2、有四类人员,每个人员都有不同的属性(包括姓名、等级、工资),因为类型不同,信息多,同属一个,
于是考虑定义不同的职工类或者结构体,将其信息封装
以便其后的人员管理,直接调用。
3、开始编写不同的功能,包含录入、增、删、改、查、排序等。
每一个功能用一个函数,然后在主函数的菜单中分别调用
(注意:要使每一个函数功能使用的人员信息同步,定义全局变量。)
因为经理和销售经理都只有一个,所以不用考虑排序。

三、所用头文件介绍

<iostream>:C++标准库,定义了用于读写流(cin、cout)的基本类型
<algoritlm>:C++标准模板中最重要的头文件之一(其中包含了各种数学函数)
<iomanip>:I/O流控制头文件,主要是对cin、cout操纵数据,即对比C语言中的格式化输出
<string>:字符串头文件,包括声明C++字符串,以及对字符串的一系列操作函数

四、上代码

(大神轻喷)

#includ`在这里插入代码片`e<iostream>
#include<algorithm>
#include<iomanip>
#include<string>using namespace std;
//C++标准程序库中所有标识符都被定义于一个名为std的namespace(命名空间)中/* 定义类 */
class Employee1     //定义职工类1——存放经理
{
public://定义可以被类访问的权限。(public是公有变量,此定义下的变量,类中,类外都能访问)char name[20];      //职工姓名,字符类型int salary;         //职工工资,整型
};
class Employee1 jl;    //定义一个全局变量jl,可引用类1中的属性 存放经理信息class Employee2     //定义职工类2——销售经理
{
public:char name[20];      //职工姓名  int profit;          //总经额  int salary;         //职工工资
};
class Employee2 xsjl;    //定义一个全局变量xsjl,用来存放销售经理信息  class Employee3     //定义职工类3——技术人员
{
public:char name[20];      //职工姓名  int rank;          //技术等级int salary;         //职工工资
};
class Employee3 jsry[10];    //定义一个全局数组变量jsry,用来存放职工信息
class Employee3 ch1[10];//作为排序时交换的中间变量class Employee4     //定义职工类4——销售人员
{
public:char name[20];      //职工姓名  int sale;          //销售总量   int salary;         //职工工资
};
class Employee4 xsry[10];    //定义一个全局变量xsry,用来存放职工信息
class Employee4 ch2[10];//作为排序时交换的中间变量int a = 0, b = 0, c = 0;        //存放实际输入的职工人数(计数变量)/*(全局)函数声明,方便之后的所有调用正常执行*/
void use();             //使用介绍
void manage();   //管理系统
void query();   //查询系统
void input();          //录入人员函数声明
void show();            //显示职工信息函数声明
void change();   //修改信息/*主函数,程序入口*/int main()
{int select;//定义一个输入变量,以供用户进行菜单选择while (1)//使用死循环,使程序不是一次性结束  {//初始界面(菜单)system("cls");//调用系统命令cls实现一次清屏操作cout << "\t \t ************欢迎使用职工管理系统************\n";cout << "\t \t *------------------------------------------*\n";cout << "\t \t * \t  \t 0、停止程序   \t    *\n";cout << "\t \t * \t  \t 1、使用介绍   \t    *\n";cout << "\t \t * \t  \t 2、进入管理系统 \t    *\n";//包含录入、修改和浏览cout << "\t \t * \t  \t 3、进入查询系统 \t    *\n";//包含查找和排序cout << "\t \t * \t  \t 4、退出系统     \t    *\n";cout << "\t \t *------------------------------------------*\n";cout << "\t \t 请输入您需要访问的编号是(1--4):";cin >> select;if (select == 0) break;//每一个case就是一个功能。根据自己定义的菜单填写所调用的功能switch (select){case 1:system("cls");//每个功能使用一个清屏,相当于刷新窗口界面,为功能重开窗口use(); //调用函数,显示此程序使用说明  system("pause");break;case 2:system("cls");//同上manage(); //调用函数进入管理系统——录入信息   system("pause");break;case 3:system("cls");//同上query();  //调用函数进入查询系统——查看信息  system("pause");break;case 4:system("cls");//同上cout << "谢谢使用,您已经退出系统:" << endl;//<<endl是C++中紧跟输出的一个换行exit(0); //C++中的异常处理语句,exit是在调用处强行退出程序,运行一次程序就结束//0表示程序正常退出default:system("cls");//同上cout << "输入错误,没有此选项,请重新选择!" << endl;//如果用户输入其他数字,则提示其重新输入}}return 0;
}/*自定义函数块——根据菜单中的选择写函数功能*///1、使用介绍函数
void use()
{cout << "\t该公司有经理1名、销售经理1名、技术人员10名、销售人员10名,共22名职工。" << endl;cout << "\t录入职工信息时要逐一全部录入" << endl;cout << "\t录入相关业绩,即可显示其当月工资。\n" << endl;
}//2、管理系统函数
void manage()
{int choice;while (1){//管理系统菜单system("cls");cout << "\t \t ****************进入管理系统****************\n";cout << "\t \t *------------------------------------------*\n";cout << "\t \t * \t  \t 01 录入职工人员信息  \t    *\n";cout << "\t \t * \t  \t 02 显示职工人员信息  \t    *\n";cout << "\t \t * \t  \t 03 修改职工人员信息  \t    *\n";cout << "\t \t * \t  \t 04 回到上一级        \t    *\n";cout << "\t \t *------------------------------------------*\n";cout << "\t \t 请输入您需要访问的编号是(1--4):";cin >> choice;switch (choice){case 1:system("cls");input(); //调用函数录入职工的工资信息   system("pause");break;case 2:system("cls");show();  //调用函数浏览职工的工资信息  system("pause");break;case 3:system("cls");change();//修改职工的工资信息 break;case 4:system("cls");cout << "谢谢使用" << endl;//返回return;//用来跳出此程序,并返回上一个程序(窗口)。default:system("cls");cout << "没有此选项,请重新选择!" << endl;//如果用户输入其他数字,则提示其重新输入break;}}
}//01 录入职工人员信息的函数
void input()
{char cho1 = 'y';//小型判断量,y即是yeschar cho2 = 'y';cout << endl << "\t\t经理姓名:"; //输入姓名 cin >> jl.name;//用点来引用类变量中的从属变量cout << "\t\t当月工资(元):8000" << endl;//固定金额cout << endl << "\t\t销售经理姓名:";cin >> xsjl.name;cout << "\t\t总销售额(元):";cin >> xsjl.profit;//底薪+提成(1500+0.2%*总销售额);xsjl.salary = 1500 + (int)((xsjl.profit)*0.002);cout << "\t\t当月工资(元):" << xsjl.salary << endl;while (cho1 == 'y'){cout << endl << "\t\t技术人员姓名:";cin >> jsry[a].name;cout << "\t\t技术等级(1~8级):";cin >> jsry[a].rank;//月薪按技术等级(1~8级)(1600+等级*300);jsry[a].salary = 1600 + jsry[a].rank * 300;cout << "\t\t当月工资(元):" << jsry[a].salary << endl;a++;cout << "是否继续录入(y/n):";cin >> cho1;}while (cho2 == 'y')//用循环来进行判断{cout << endl << "\t\t销售人员姓名:";cin >> xsry[b].name;cout << "\t\t销售额(元):";cin >> xsry[b].sale;//按提成(4%*销售额);xsry[b].salary = (int)(0.04*(xsry[b].sale));cout << "\t\t当月工资(元):" << xsry[b].salary << endl;b++;cout << "是否继续录入(y/n):";cin >> cho2;}
}//02 显示浏览所有职工信息的函数
void show()
{cout << left;//设置输出左对齐cout << "|_________________________|_________________________|_________________________|" << endl;cout << "|" << setw(25) << "经理姓名" << "|" << setw(25) << "当月工资" << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;//setw设置宽度,简单的说就是输出的时候占几个字节(空格),相当于制表cout << "|" << setw(25) << jl.name << "|" << setw(25) << 8000 << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;cout << "|" << setw(25) << "销售经理姓名" << "|" << setw(25) << "总销售额" << "|" << setw(25) << "当月工资" << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;cout << "|" << setw(25) << xsjl.name << "|" << setw(25) << xsjl.profit << "|" << setw(25) << xsjl.salary << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;cout << "|" << setw(25) << "技术人员姓名" << "|" << setw(25) << "技术等级" << "|" << setw(25) << "当月工资" << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;for (int a = 0; a < 10; a++){cout << "|" << setw(25) << jsry[a].name << "|" << setw(25) << jsry[a].rank << "|" << setw(25) << jsry[a].salary << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;}cout << endl;cout << "|" << setw(25) << "销售人员姓名" << "|" << setw(25) << "销售额" << "|" << setw(25) << "当月工资" << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;for (int b = 0; b < 10; b++){cout << "|" << setw(25) << xsry[b].name << "|" << setw(25) << xsry[b].sale << "|" << setw(25) << xsry[b].salary << "|" << endl;cout << "|_________________________|_________________________|_________________________|" << endl;}cout << endl;
}
//03 修改职工信息的函数
void change()
{void jingLi();void xsJingLi();void jsRenYuan();void xsRenYuan();int a;cout << "\t1)经理" << endl;cout << "\t2)销售经理" << endl;cout << "\t3)技术人员" << endl;cout << "\t4)销售人员" << endl;cout << "\t5)返回上一级" << endl;cout << "\t \t 请选择您需要修改的职工(1~5):";cin >> a;switch (a){case 1:system("cls");jingLi();//修改经理姓名 break;case 2:system("cls");xsJingLi();//修改销售经理信息 break;case 3:system("cls");jsRenYuan();//修改技术人员信息 break;case 4:system("cls");xsRenYuan();//修改销售人员信息 break;case 5:system("cls");cout << "谢谢使用" << endl;//返回return;}
}//1)经理
void jingLi()
{cout << "\t\t请输入新经理名字:";cin >> jl.name;//jl.name是变量,可直接对其重赋值,即表示修改cout << "\t\t当月工资(元):8000" << endl;//固定金额
}
//2)销售经理
void xsJingLi()
{cout << "\t\t销售经理姓名:";cin >> xsjl.name;//同理cout << "\t\t总销售额(元):";cin >> xsjl.profit;//底薪+提成(1500+0.2%*总销售额);xsjl.salary = 1500 + (int)((xsjl.profit)*0.002);//金额改变后,重新计算cout << "\t\t当月工资(元):" << xsjl.salary << endl;
}
//3)技术人员
void jsRenYuan()
{char cho1 = 'y';int i = 0;while (cho1 == 'y'){cout << endl << "\t\t重新录入技术人员姓名:";cin >> jsry[i].name;cout << "\t\t技术等级(1~8级):";cin >> jsry[i].rank;//月薪按技术等级(1~8级)(1600+等级*300);jsry[i].salary = 1600 + jsry[i].rank * 300;cout << "\t\t当月工资(元):" << jsry[i].salary << endl;i++;cout << "是否继续录入(y/n):";cin >> cho1;}
}
//4)销售人员
void xsRenYuan()
{int i = 0;char cho2 = 'y';while (cho2 == 'y'){cout << endl << "\t\t重新录入销售人员姓名:";cin >> xsry[i].name;cout << "\t\t销售额(元):";cin >> xsry[i].sale;//按提成(4%*销售额);xsry[b].salary = (int)(0.04*(xsry[i].sale));cout << "\t\t当月工资(元):" << xsry[i].salary << endl;i++;cout << "是否继续录入(y/n):";cin >> cho2;}
}//3、查询信息函数(包括查找和排序)
void query()
{void chaZhao();//查找void paiXu(void);//排序int choice;while (1){//管理系统菜单system("cls");cout << "\t \t ********************************************\n";cout << "\t \t *------------------------------------------*\n";cout << "\t \t * \t   01 按名字查找职工信息     \t *\n";cout << "\t \t * \t   02 按月薪对职工排序       \t *\n";cout << "\t \t * \t   03 回到上一级             \t *\n";cout << "\t \t *------------------------------------------*\n";cout << "\t \t ********************************************\n";cout << "\t \t 请输入您需要访问的编号是(1--3):";cin >> choice;switch (choice){case 1:system("cls");chaZhao(); //调用函数录入职工的工资信息   system("pause");break;case 2:system("cls");paiXu();  //调用函数对职工的信息进行排序 system("pause");break;case 3:system("cls");cout << "谢谢使用" << endl;//返回return;default:system("cls");cout << "没有此选项,请重新选择!" << endl;//如果用户输入其他数字,则提示其重新输入break;}}
}//01 按名字查找
void chaZhao()
{int i = 0;char qname[10];//名字字符数组,用来存放输入要查询的人员名字,以便和已知名字对比,进行查找cout << "请输入需要查询的职工姓名:";cin >> qname;//使用字符数组名,直接输入字符if (strcmp(jl.name, qname) == 0)//判断其与已知是否相等(strcmp是字符比较函数){cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << "经理姓名" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << jl.name << "|" << setw(12) << 8000 << endl;cout << "_______________________________________________________________________________" << endl;}else if (strcmp(xsjl.name, qname) == 0){cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << "销售经理姓名" << "|" << setw(20) << "总销售额" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << xsjl.name << "|" << setw(20) << xsjl.profit << "|" << setw(12) << xsjl.salary << endl;cout << "_______________________________________________________________________________" << endl;}else{for (i = 0; i < 10; i++)//由于技术人员和销售人员较多,即使用循环来进行依次比较查找{if (strcmp(jsry[i].name, qname) == 0){cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << "技术人员姓名" << "|" << setw(20) << "技术等级" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << jsry[i].name << "|" << setw(20) << jsry[i].rank << "|" << setw(12) << jsry[i].salary << endl;cout << "_______________________________________________________________________________" << endl;cout << endl;}else if (strcmp(xsry[i].name, qname) == 0){cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << "销售人员姓名" << "|" << setw(20) << "销售额" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << xsry[i].name << "|" << setw(20) << xsry[i].sale << "|" << setw(12) << xsry[i].salary << endl;cout << "_______________________________________________________________________________" << endl;cout << endl;}}if (i == 10){cout << "抱歉,本公司不存在此人!" << endl;}//此处有个小bug,不影响运行和结果但不美观,望懂的大神指教下}//02 按月薪进行排序(从大到小)
void paiXu(void)
{int i, j, k;int temp1, temp2;//用来辅助交换的中间变量int n, m;cout << left;//设置输出左对齐  cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << "经理姓名" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << jl.name << "|" << setw(12) << 8000 << endl;cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << "销售经理姓名" << "|" << setw(20) << "总销售额" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;cout << "|" << setw(20) << xsjl.name << "|" << setw(20) << xsjl.profit << "|" << setw(12) << xsjl.salary << endl;cout << "_______________________________________________________________________________" << endl;//技术人员排序cout << "|" << setw(20) << "技术人员姓名" << "|" << setw(20) << "技术等级" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;for (i = 0; i < 9; i++){k = i;//保留一个原值for (j = i + 1; j < 9; j++)//每一次都找最大的那个,替换当前面相应位置//例如,第一回循环找出的最大替换到第0行,第二回循环找出的替换到第1行,以此类推。{if (jsry[j].salary > jsry[k].salary)//如果后一个人的金额大于前一个k = j;//就将大金额的人员下标赋值给k}//循环寻找大金额的人员,然后替换到前面位置(类成员都要进行替换)strcpy(ch1[i].name, jsry[i].name); strcpy(jsry[i].name, jsry[k].name); strcpy(jsry[k].name, ch1[i].name);temp1 = jsry[i].rank;  jsry[i].rank = jsry[k].rank;  jsry[k].rank = temp1;temp2 = jsry[i].salary; jsry[i].salary = jsry[k].salary; jsry[k].salary = temp2;}for (n = 0; n < 10; n++)//替换排序后重新输出{cout << "|" << setw(20) << jsry[n].name << "|" << setw(20) << jsry[n].rank << "|" << setw(12) << jsry[n].salary << endl;cout << "_______________________________________________________________________________" << endl;}cout << endl;//销售人员排序与上同理cout << "|" << setw(20) << "销售人员姓名" << "|" << setw(20) << "销售额" << "|" << setw(12) << "当月工资" << endl;cout << "_______________________________________________________________________________" << endl;for (i = 0; i < 9; i++){k = i;for (j = i + 1; j < 9; j++){if (xsry[j].salary > xsry[k].salary)k = j;}strcpy(ch2[i].name, xsry[i].name); strcpy(xsry[i].name, xsry[k].name); strcpy(xsry[k].name, ch2[i].name);temp1 = xsry[i].sale;  xsry[i].sale = xsry[k].sale;  xsry[k].sale = temp1;temp2 = xsry[i].salary; xsry[i].salary = xsry[k].salary; xsry[k].salary = temp2;}for (m = 0; m < 10; m++){cout << "|" << setw(20) << xsry[m].name << "|" << setw(20) << xsry[m].sale << "|" << setw(12) << xsry[m].salary << endl;cout << "_______________________________________________________________________________" << endl;}cout << endl;
}

“原项目共570行代码;注释150行,纯注释62行,代码注释90行;空行67行;去掉注释部分和换行,纯代码共441行。”
——此处为个人习惯记录,有强迫症的小伙伴切忌不要去计算。

有问题欢迎下方评论或私信。

1、公司人事管理系统(C++)相关推荐

  1. 基于springboot的公司人事管理系统

    1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目,公司人事管理系统. 计算机毕业生设计,课程设计需要帮助的可以找我 源码获取------> 链接:https://pan.baidu.c ...

  2. c++公司人事管理系统

    (1)问题描述 一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类 人员的工资计算方法如下: 经理:固定月薪(8000):技术人员:月薪按技 术等级(1~8)( 1600+等级*300) ...

  3. Java+MySQL 基于springboot+vue的企业公司人事管理系统

    项目编号:Java+MySQL spring228-基于springboot的企业公司人事管理系统#毕业设计 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服 ...

  4. Java毕业设计:企业公司人事管理系统(java+springboot+vue+mysql)

    运行环境: 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架springboot+vue 项目介绍 人事是一个企业的命脉, 只有管理好 ...

  5. java基于springboot的企业公司人事管理系统(java+springboot+vue+mysql)

    运行环境: 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架springboot+vue 项目介绍 人事是一个企业的命脉, 只有管理好 ...

  6. MySQL测试题——开发公司人事管理系统,包括 Employee表 和 Department表

    一.需求分析 我们的开发团队,计划开发一款公司人事管理软件,用于帮助中小型企业进行更加高效的人事管理.现在需要对数据库部分进行设计和开发,根据对需求和立项的分析,我们确定该数据库中最核心的两个表为员工 ...

  7. java基于springboot+vue的企业公司员工人事管理系统 nodejs 前后端分离

    人事工资考勤管理系统作为企业不可缺少的部分,可以极大地提高人事劳资管理效率,是企业不可缺少的管理软件.文章从理论和实践两个角度出发,对企业的人事.工资.考勤管理业务进行详细分析,并在java平台下实现 ...

  8. Java WEB——人事管理系统

    Java WEB--人事管理系统 数据库 网页 网页展示 部分代码展示 问题 这是我的一个小总结~ 数据库 这是我数据库里设计的表,具体的我就不展示了--我用的服务器是tomcat,想要连接数据库就要 ...

  9. 2023计算机毕业设计SSM最新选题之java公司销售合同管理系统kvwra

    相信很多和我一样的同学,因为实习,因为考研和考公等等,来不及做毕业设计,双专业的话 到时肯定忙不过来.提前做好准备吧,能自己完成的尽量自己完成,尽量不要找别人.自己的毕业前的一次大作业.努力完成也有意 ...

最新文章

  1. Ajax实战:Ajax的四个基本原则
  2. java 集合差运算_用一个参数的JAVA程序实现集合的交并差运算
  3. Java内存模型深度解析:顺序一致性
  4. 2019《去哪儿》春季校招第一站(含笔试题)
  5. 创建Hbase Hive外部表报错: Unable to determine ZooKeeper ensemble
  6. 使用IDEA创建springcloud父工程
  7. 技术中台构建思路及进展_半年中台实践思考:落地中台,贵在其神,活用其形...
  8. ARP攻击原理简析及防御措施
  9. win iis mysql php_Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境搭建教程
  10. harmonyos 2.0开机动画壁纸,华为鸿蒙OS 2.0开机动画
  11. Salesforce入门教程(中文)-020 VF使用静态资源移动端开发(未完)
  12. 七彩虹断剑C.A320M-K PRO V14安装PCI-E X4转m.2转接卡,并用m.2固态作为系统盘
  13. ISO 27002【实践指南】 -2022新标准
  14. Spark小文件合并
  15. 服务器抓不到mrcp协议,mrcp与一句话识别
  16. 华为OD机试 - 流水线
  17. Android内存泄漏leakcanary2.7
  18. 中级Java 程序员 — 2020
  19. Python写个小游戏:蛇棋(下)
  20. LeetCode《算法入门》刷题笔记(31 题全)

热门文章

  1. 利用python将PDF文档转语音
  2. 思岚科技接受央视专访 导航定位的核心在于传感器+算法
  3. 在Linux中安装Adoboflashplayer
  4. IDEA使用package和install时报“程序包com.XXX.XX不存在”
  5. Openstack KVM虚拟机启动参数
  6. FDTD Solutions-平面波
  7. 调用云服务实现语音识别合成以及感情分析
  8. 酒类竞品分析——以茅台、五粮液、泸州老窖为例
  9. 回弹法检测烧结普通砖强度实验-基于Python快速处理数据
  10. GEEer成长日记十九:使用Landsat 8影像计算水体指数NDWI、MNDWI并下载到本地