C++:职工管理系统

2023-11-02

职工管理系统.cpp

#include<iostream>
#include "workManager.h"
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
using namespace std;
int main()
{
	测试代码
	//worker * wk = NULL;
	//wk = new Employee(1, "张三", 1);
	//wk->showInfo();
	//delete wk;

	//wk = new Manager(2, "李四", 1);
	//wk->showInfo();
	//delete wk;

	//wk = new Boss(3, "王五", 1);
	//wk->showInfo();
	//delete wk;


	//实例化管理者对象
	workManager wm;
	int choose = 0;
	while (true)
	{
		wm.Show_Menu();
		cout << "请输入您的选择:	" << endl;
		cin >> choose;

		switch (choose)
		{
		case 0://退出系统
			wm.ExitSystem();
			break;
		case 1://增加职工
			wm.add_Emp();
			break;
		case 2://显示职工
			wm.Show_Emp();
			break;
		case 3://删除职工
			wm.Del_Emp();
			break;
		case 4://修改职工
			wm.Mod_Emp();
			break;
		case 5://查找职工
			wm.Find_Emp();
			break;
		case 6://排序职工
			wm.Sort_Emp();
			break;
		case 7://清空文档
			wm.Clean_File();
			break;
		default:
			system("cls");//清屏
			break;
		}
	}
	


	system("pause");
	return 0;
}

workManager.cpp

#include "workManager.h"

workManager::workManager()
{
	//1、文件不存在
	ifstream ifs;
	ifs.open(FILENAME,ios::in);//读文件

	if (!ifs.is_open())
	{
		//cout << "文件不存在" << endl;
		//记入职工人数
		this->m_EmpNum = 0;

		//职工数组指针
		this->m_EmpArray = NULL;

		//初始化文件是否为空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}

	//2、文件存在 数据为空
	char ch;
	ifs >> ch;
	if (ifs.eof())
	{
		//cout << "文件为空!" << endl;
		//记入职工人数
		this->m_EmpNum = 0;

		//职工数组指针
		this->m_EmpArray = NULL;

		//初始化文件是否为空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}

	//3、文件存在,并且记录数据
	int num = this->get_EmpNum();
	cout << "职工人数为: " << num << endl;
	this->m_EmpNum = num;

	//开辟空间,将文件中的数据,存到数组中
	this->m_EmpArray = new worker * [this->m_EmpNum];
	this->Init_Emp();

	测试代码
	//for (int i = 0; i < this->m_EmpNum; i++)
	//{
	//	cout << "职工编号: " << this->m_EmpArray[i]->m_Id
	//		<< "\t职工姓名: " << this->m_EmpArray[i]->m_Name
	//		<< "\t部门编号: " << this->m_EmpArray[i]->m_DeptId << endl;
	//}
	
}

//清空文件
void workManager::Clean_File()
{
	cout << "确定清空? " << endl;
	cout << "1、确定" << endl;
	cout << "2、返回" << endl;
	int select;
	cin >> select;
	if (select == 1)
	{
		//清空文件
		ofstream ofs(FILENAME,ios::trunc);//删除文件后重新创建
		ofs.close();

		if (this->m_EmpArray != NULL)
		{
			for (int i = 0; i < this->m_EmpNum; i++)
			{
				delete this->m_EmpArray[i];
				this->m_EmpArray[i] = NULL;
			}

			//删除堆区数组指针
			delete[] this->m_EmpArray;
			this->m_EmpArray = NULL;
			this->m_EmpNum = 0;
			this->m_FileIsEmpty = true;
		}

		cout << "清空成功!" << endl;
	}
	system("pause");
	system("cls");

}
workManager::~workManager()
{
	if (this->m_EmpArray != NULL)
	{
		delete[]m_EmpArray;
		this->m_EmpArray = NULL;
	}

}

//显示菜单
void workManager::Show_Menu()
{
	cout << "*************************************************" << endl;
	cout << "***********   欢迎使用职工管理系统   ************" << endl;
	cout << "***********      0.退出管理程序      ************" << endl;
	cout << "***********      1.增加职工信息      ************" << endl;
	cout << "***********      2.显示职工信息      ************" << endl;
	cout << "***********      3.删除离职职工      ************" << endl;
	cout << "***********      4.修改职工信息      ************" << endl;
	cout << "***********      5.查找职工信息      ************" << endl;
	cout << "***********      6.按照编号排序      ************" << endl;
	cout << "***********      7.清空所有文档      ************" << endl;
	cout << "*************************************************" << endl;
	cout << endl;
}

//添加职工
void workManager::add_Emp()
{
	cout << "请输入添加职工的数量:" << endl;
	int addNum = 0;
	cin >> addNum;
	if (addNum > 0)
	{
		//计算新空间大小
		int newSize = 0;
		newSize = this->m_EmpNum + addNum;

		worker** newSpace = new worker * [newSize];
		//将原来空间下的数据拷贝到新空间
		if (this->m_EmpArray != NULL)
		{
			for(int i=0;i<this->m_EmpNum;i++)
			newSpace[i] = this->m_EmpArray[i];
		}

		//批量添加新数据
		for (int j = 0; j < addNum; j++)
		{
			int id;//职工编号
			string name;//职工姓名
			int dSelect;//部门选择

			cout << "请输入第 " << j + 1 << " 个新职工编号: " << endl;
			cin >> id;
			cout << "请输入第 " << j + 1 << " 个新职工姓名: " << endl;
			cin >> name;
			cout << "请选择该职工岗位: " << endl;
			cout << "1、普通职工" << endl;
			cout << "2、经理" << endl;
			cout << "3、老板" << endl;
			cin >> dSelect;

			worker* work = NULL;
			switch (dSelect)
			{
			case 1:
				work = new Employee(id, name, dSelect);
			case 2:
				work = new Manager(id, name, dSelect);
			case 3:
				work = new Boss(id, name, dSelect);
			default:
				break;
			}
			newSpace[this->m_EmpNum + j] = work;
		}
		//释放原有空间
		delete[]this->m_EmpArray;
		//更改新空间的指向
		this->m_EmpArray = newSpace;
		//更新新职工的人数
		this->m_EmpNum = newSize;
		//更新职工不为空
		this->m_FileIsEmpty = false;
		//提示添加成功
		cout << "成功添加" << addNum << "名新职工" << endl;
		//保存文件
		this->Save();
		system("pause");
		system("cls");

	}
	else
	{
		cout << "输入有误" << endl;
	}

}

//保存职工信息
void workManager::Save()
{
	ofstream ofs;
	ofs.open(FILENAME,ios::out);//用输出的方式打开文件--写文件

	//将每个人数据写入到文件
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		ofs << this->m_EmpArray[i]->m_Id << " "
			<< this->m_EmpArray[i]->m_Name << " "
			<< this->m_EmpArray[i]->m_DeptId << " " << endl;
	}

	//关闭文件 
	ofs.close();
}

//统计文件中人数
int workManager::get_EmpNum()
{
	ifstream ifs;
	ifs.open(FILENAME,ios::in);//打开文件 读

	int id;
	string name;
	int dId;
	int num = 0;
	while (ifs>>id && ifs>>name&&ifs>>dId)
	{
		//统计人数变量
		num++;
	}
	return num;
}

// 初始化员工
void  workManager::Init_Emp()
{
	ifstream ifs;
	ifs.open(FILENAME, ios::in);//打开文件 读

	int id;
	string name;
	int dId;
	int num = 0;
	int index = 0;
	while (ifs >> id && ifs >> name && ifs >> dId)
	{
		worker* work = NULL;
		if (dId == 1)//普通员工
		{
			work = new Employee(id, name, dId);
		}
		else if (dId == 2)//经理
		{
			work = new Manager(id, name, dId);
		}
		else//老板
		{
			work = new Boss(id, name, dId);
		}
		this->m_EmpArray[index] = work;
		index++;
	}
	//关闭文件 
	ifs.close();
}

//显示职工
void workManager::Show_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空!" << endl;

	}
	else
	{
		for (int i = 0; i < m_EmpNum; i++)
		{
			//利用多态调用程序接口
			this->m_EmpArray[i]->showInfo();
		}
	}

	//按任意键后清屏
	system("pause");
	system("cls");
}

//删除职工
void workManager::Del_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空!" << endl;
	}
	else
	{
		//按照职工编号删除
		cout << "请输入想要删除职工编号:" << endl;
		int id = 0;
		cin >> id;
		int index = this->IsExist(id);
		if (index != -1)//说明职工存在
		{
			//数据前移
			for (int i = index; i < this->m_EmpNum - 1; i++)
			{
				this->m_EmpArray[i] = this->m_EmpArray[i + 1];
			}
			this->m_EmpNum--;//更新员工人数
			//数据同步更新到文件中
			this->Save();
			cout << "删除成功 " << endl;
		}
		else
		{
			cout << "删除失败,未找到该职工" << endl;
		}
	}
	//按任意键后清屏
	system("pause");
	system("cls");
}

//判断职工是否存在 如果存在返回职工所在数组的位置,不存在返回-1
int workManager::IsExist(int id)
{
	int index = -1;
	for (int i = 0; i < this->m_EmpNum; i++)
	{
		if (this->m_EmpArray[i]->m_Id == id)
		{
			//找到职工
			index = i;
			break;
		}
	}
	return index;
}

//修改职工
void workManager::Mod_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空!" << endl;
	}
	else
	{
		cout << "请输入修改职工的编号:" << endl;
		int id;
		cin >> id;

		int ret = this->IsExist(id);
		if (ret != -1)
		{
			//查找到编号的职工
			delete this->m_EmpArray[ret];

			int newId = 0;
			string  newName = " ";
			int dSelect = 0;

			cout << "查到: " << id << "号职工,请输入新职工号:" << endl;
			cin >> newId;

			cout << "请输入新姓名:" << endl;
			cin >> newName;

			cout << "请输入岗位:" << endl;
			cout << "1、普通职工" << endl;
			cout << "2、经理" << endl;
			cout << "3、老板" << endl;

			cin >> dSelect;

			worker* work = NULL;
			switch (dSelect)
			{
			case 1:
				work = new Employee(newId, newName, dSelect);
			case 2:
				work = new Manager(newId, newName, dSelect);
			case 3:
				work = new Boss(newId, newName, dSelect);
			default:
				break;
			}

			//更新数据到数组中
			this->m_EmpArray[ret] = work;
			cout << "修改成功!" << endl;

			//保存到文件中
			this->Save();
		}
		else
		{
			cout << "修改失败,查无此人!" << endl;

		}
	}
	//按任意键后清屏
	system("pause");
	system("cls");
}

//查找职工
void workManager::Find_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空!" << endl;
	}
	else
	{
		cout << "请输入查找的方式:" << endl;
		cout << "1、按照职工编号查找 " << endl;
		cout << "2、按照职工姓名查找 " << endl;

		int select = 0;
		cin >> select;
		if (select == 1)
		{
			//按照编号查
			int id;
			cout << "请输入查找的职工编号:" << endl;
			cin >> id;

			int ret = IsExist(id);
			if (ret!=-1)
			{
				//该找到职工
				cout << "查找成功! 该职工信息如下:" << endl;
				this->m_EmpArray[ret]->showInfo();
			}
			else
			{
				cout << "查找失败,查无此人" << endl;
			}
		}
		else if (select == 2)
		{
			//按照姓名查
			string name;
			cout << "请输入查找的姓名:" << endl;
			cin >> name;
			bool flag = false;
			for (int i = 0; i < m_EmpNum; i++)
			{
				if (this->m_EmpArray[i]->m_Name == name)
				{
					cout << "查找成功,职工编号为:" << m_EmpArray[i]->m_Id 
						<<"号职工信息如下:"<< endl;

					this->m_EmpArray[i]->showInfo();
					flag = true;
				}
			}
			if (flag == false)
			{
				cout << "查找失败,查无此人!" << endl;
			}

		}
		else
		{
			cout << "输入选项有误" << endl;
		}
	}

	//按任意键后清屏
	system("pause");
	system("cls");
}

//按照编号排序
void workManager::Sort_Emp()
{
	if (this->m_FileIsEmpty)
	{
		cout << "文件不存在或记录为空! " << endl;
		//按任意键后清屏
		system("pause");
		system("cls");
	}
	else
	{
		cout << "请选择排序方式: " << endl;
		cout << "1、按职工号进行升序" << endl;
		cout << "2、按职工号进行降序" << endl;

		int select = 0;
		cin >> select;
		for (int i = 0; i < m_EmpNum; i++)
		{
			int minOrMax = i;//声明最小值或最大值下标
			for (int j = i + 1; j < this->m_EmpNum; j++)
			{
				if (select == 1)//升序
				{
					if (this->m_EmpArray[minOrMax]->m_Id > this->m_EmpArray[j]->m_Id)
					{
						minOrMax = j;
					}
				}
				else//降序
				{
					if (this->m_EmpArray[minOrMax]->m_Id < this->m_EmpArray[j]->m_Id)
					{
						minOrMax = j;
					}
				}
			}
			//判断一开始认定的最小值或者最大值是不是计算出的最小值或者最大值
			if (i != minOrMax)
			{
				worker* temp = this->m_EmpArray[i];
				this->m_EmpArray[i] = this->m_EmpArray[minOrMax];
				this->m_EmpArray[minOrMax] = temp;
			}
		}
	}
	cout << "排序成功!排序后的结果为: " << endl;
	this->Save();
	this->Show_Emp();
}

//退出系统
void workManager::ExitSystem()
{
	cout << "欢迎下次使用" << endl;
	system("pasue");
	exit(0);

}

workManager.h

#pragma once         //防止头文件重复包含
#include<iostream>   //包含输入输出流头文件
using namespace std; //使用标准命名空间
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
#include<string>
#include<fstream>
#define FILENAME  "empFile.txt"

class workManager
{
public:
	//构造函数
	workManager();

	//显示菜单
	void Show_Menu();

	//退出系统
	void ExitSystem();


	//析构函数
	~workManager();

	//记入职工人数
	int m_EmpNum;

	//职工数组指针
	worker** m_EmpArray;

	//添加职工
	void add_Emp();

	//文件是否为空
	bool m_FileIsEmpty;

	//统计文件中人数
	int get_EmpNum();

	//初始化员工
	void Init_Emp();

	//显示职工
	void Show_Emp();

	//删除职工
	void Del_Emp();

	//判断职工是否存在 如果存在返回职工所在数组的位置,不存在返回-1
	int IsExist(int id);

	//修改职工
	void Mod_Emp();

	//查找职工
	void Find_Emp();

	//按照编号排序
	void Sort_Emp();

	//清空文件
	void Clean_File();

	//保存职工信息
	void Save();




};

manager.cpp

#include"manager.h"
//Manager构造函数
Manager::Manager(int id, string name, int did)
{
	this->m_Id = id;
	this->m_Name = name;
	this->m_DeptId = did;

}

//显示个人信息
void Manager::showInfo()
{
	cout << "职工编号: " << this->m_Id
		<< "\t职工姓名: " << this->m_Name
		<< "\t岗位: " << this->getDeptName()
		<< "\t岗位职责: 完成老板交给的任务" << endl;
}

//获取岗位名称
string Manager::getDeptName()
{
	return string("经理");
}

manager.h

 

#pragma once
#include<iostream>
#include<string>
#include "worker.h"
using namespace std;
class Manager:public worker
{
public:
	//Manager构造函数
	Manager(int id, string name, int did);

	//显示个人信息
	virtual void showInfo();


	//获取岗位名称
	virtual string getDeptName();


};

employee.cpp

#include "employee.h"

//Employee构造函数
Employee::Employee(int id, string name, int did)
{
	this->m_Id = id;
	this->m_Name = name;
	this->m_DeptId = did;

}

//显示个人信息
void Employee::showInfo()
{
	cout << "职工编号: " << this->m_Id
		<< "\t职工姓名: " << this->m_Name
		<< "\t岗位: " << this->getDeptName()
		<< "\t岗位职责: 完成经理交给的任务" << endl;
}

//获取岗位名称
string Employee::getDeptName()
{
	return string("员工");
}

employee.h

 

//普通职工类
#pragma once
#include<iostream>
#include<string>
#include "worker.h"
using namespace std;

class Employee :public worker
{
public:
	//Employee构造函数
	Employee(int id,string name,int did);

	//显示个人信息
	virtual void showInfo();
	

	//获取岗位名称
	virtual string getDeptName();


};

boss.cpp

#include"boss.h"
//Boss构造函数
Boss::Boss(int id, string name, int did)
{
	this->m_Id = id;
	this->m_Name = name;
	this->m_DeptId = did;

}

//显示个人信息
void Boss::showInfo()
{
	cout << "职工编号: " << this->m_Id
		<< "\t职工姓名: " << this->m_Name
		<< "\t岗位: " << this->getDeptName()
		<< "\t岗位职责: 管理公司所有的事物" << endl;
}

//获取岗位名称
string Boss::getDeptName()
{
	return string("老板");
}

boss.h 

 

#pragma once
#include<iostream>
#include<string>
#include "worker.h"
using namespace std;
class Boss :public worker
{
public:
	//Manager构造函数
	Boss(int id, string name, int did);

	//显示个人信息
	virtual void showInfo();


	//获取岗位名称
	virtual string getDeptName();


};

worker.h

#pragma once
#include<iostream>
#include<string>
using namespace std;

//职工抽象类
class worker
{
public:
	//显示个人信息
	virtual void showInfo() = 0;

	//获取岗位名称
	virtual string getDeptName() = 0;

	//职工编号
	int m_Id;

	//职工姓名
	string m_Name;

	//部门编号
	int m_DeptId;

	

};

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:职工管理系统 的相关文章

  • 谁能建议我一种在 C++ 中分割名称的简单方法

    我一直在尝试将名称分为名字和姓氏 但我确信我的实现就简单性而言并不是最好的 string name John Smith string first string last name name find getting lastname fo
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • delete NULL是合法的!

    http bbs csdn net topics 390684584
  • 普通程序员和顶级程序员5个思维模式上的区分!

    细说硅谷普通程序员和顶级程序员5个思维模式上的区分 gineer 是一本很顶尖的书 作者为了这本书 采访了很多硅谷顶级科技公司的顶尖软件工程师 他发现这些给世界带来巨大影响的的工程师们竟然有几个共同点 我感觉大家有必要一起学习一下他们的这些
  • win8网络信息服务器,Win8.1怎么设置DNS服务器地址

    一 首先在Win8 1桌面右下角任务栏的网络图标中 右键鼠标 然后选择 打开网络和共享中心 如下图所示 二 进入Win8 1网络和共享中心后 我们点击已经连接的本地连接或者无线连接网络名称 如下图所示 注 由于笔者目前使用的是无线网络 因此
  • 【Python】猎聘网招聘数据爬虫(Python网络爬虫课设简要)

    Python 猎聘网招聘数据爬虫 Python网络爬虫课设简要 注 本文仅供学习交流使用 合肥学院 20信管 20302211009 项目文件可自行前往博客主页下载或联系作者qq 3416252112 爬取数据耗时约50分钟 1 背景介绍
  • 工信部发布2015年中国软件业务收入"百强"发展报告(zz)

    z 2016 10 25 16 03 39 L 67 28581 BG57IV3 T3610511221 K F3651456730 T295 L7194 R267 V5862 2016中关村高成长企业TOP100 1 北京远程视界眼科医院
  • 服务器怎样共享文件夹共享文件夹,服务器怎样共享文件夹共享文件夹

    服务器怎样共享文件夹共享文件夹 内容精选 换一换 该任务指导用户在SSL证书管理平台下载证书 证书状态为已签发或托管中 仅支持在证书有效期内 不限次数的下载证书 下载后即可在服务器 华为云的或非华为云的均可 上进行部署 证书请求文件选择的是
  • 【项目实训】篮球计分系统设计(无线nRF905版本)

    将单片机项目实训 篮球计分系统 无线nRF905版本 分享出来 如有不足 敬请指出 实验图片 视频视频 项目实训 篮球积分系统 nRF905版本 目录 一 设计要求 二 方案设计 三 硬件电路设计 四 软件设计 五 其他图片 六 资料链接
  • 无线上外网,有线上内网的方式(转)

    原文地址 无线上外网 有线上内网的方式 转 atongmu2017的博客 CSDN博客 在外面调试程序 内网是调试程序必须的 而要上外网 又只有通过无线连接 不过发现这样有个问题 就是在笔记本的无线连上外网的时候 只要插上内网的网线 就发现
  • docker logs 实现剖析

    Allen 谈 Docker 系列 DaoCloud 正在启动 Docker 技术系列文章 每周都会为大家推送一期真材实料的精选 Docker 文章 主讲人为 DaoCloud 核心开发团队成员 Allen 孙宏亮 他是 InfoQ Doc
  • PUTTY或WinSCP无法远程连接服务器故障解决

    1 用PUTTY远程连接服务器时 提示错误 server unexpectedly closed network connection 解决方法 1 查看服务器防火墙 可将其关闭 2 查看sshd config配置信息 将字段UseDNS的
  • 外部程序只运行一个实例的方法

    connect Process QProcess stateChanged const QProcess ProcessState newState 如果运行状态变成NotRunning 关闭Process if newState QPro
  • stm32读取DHT11温湿度传感器

    stm32读取DHT11温湿度传感器 一 序言 二 DHT11响应数据格式 三 DHT11通讯过程 3 1 产生起始信号 3 2 读取数据0 3 3 读取数据1 DHT11停止信号 四 代码实例 4 1读取DHT11源文件 4 2 读取DH
  • 配置免密登录ssh: connect to host hadoop03 port 22: Connection refused可能原因

    hadoop02通过ssh登录hadoop03 出现connect to host hadoop03 port 22 Connection refused 可能是由于ip地址写错和hosts文件配置出错 1 修改虚拟机网络IP地址 vim
  • java经典算法|猴子吃桃问题

    猴子吃桃问题 问题描述 问题分析 代码实现 运行结果 问题描述 猴子第一天摘下若干个桃子 当即吃了一半 还不瘾 又多吃了一个 第二天早上又将剩下的桃子吃掉一半 又多吃了一个 以后每天早上都吃了前一天剩下的一半零一个 到第10天早上想再吃时
  • 箭头函数的this、箭头函数与普通函数的区别

    箭头函数的this 箭头函数与普通函数的区别 一 箭头函数与普通函数的区别 1 箭头函数的this与普通函数不一样 2 箭头函数不可用作构造函数 箭头函数没有自己的this 3 箭头函数没有prototype属性 4 箭头函数不能使用arg
  • 大数据应用——hive实验

    任务一 完成Hive内嵌模式部署 1 1 Hive部署 官网下载Hive安装包 1 官网地址 Apache Hive 2 文档查看地址 https cwili apache org confluence display Hive Getti
  • 信号实验(03)连续时间系统的频域分析

    信号实验 03 连续时间系统的频域分析 一 基础知识 1 1 数值积分 y quadl func a b a b 分别表示定积分的下限和上限 y quadl myfun a b 1 2 傅里叶变换和逆变换 要用到符号运算 fourier i
  • mysql给表加一个字段耗时太久的问题

    前几天上线遇到一个问题 就是在给数据表加字段的时候 执行的非常慢 平时几S的事 上线那会加了10多分钟都没成功 后来想到可能是突然停服务 导致很多mysql进程卡死在那 于是先用show processlist 查出当时正在运行的sql 然
  • 微信小程序实战 (WXML:小程序版HTML)

    上一篇讲了小程序框架基础 这一篇介绍WXML 小程序版HTML 1 标签与属性 常用基础标签text view 特征 text 类似html span标签 行内元素 不换行 view 类似html div标签 块级元素 换行 新建页面
  • C++:职工管理系统

    职工管理系统 cpp include