⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 managment system.cpp.cpp

📁 这是一个职工管理系统,包括新增一名职工
💻 CPP
字号:
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
enum Sex{Male,Female};
struct Date
{
	int year;
	int month;
	int day;
};
enum Qualification{Master,Graduated,PhD,Postdoc};
enum Post{Boss,Manager,Clerk};
int namedif(char *a,char *b){//判断名字从第几位开始不同
	int len1=strlen(a);
	int len2=strlen(b);
	int max=len1>len2?len1:len2;
	for(int i=0;i<max;i++)
		if(a[i]!=b[i])
			break;
	return i;
}
int birthdif(Date d1,Date d2){//判断出生日期大小
	if(d1.year>d2.year)
		return 1;
	else if(d1.year<d2.year)
		return 0;
	else{
		if(d1.month>d2.month)
			return 1;
		else if(d1.month<d2.month)
			return 0;
		else{
			if(d1.day>d2.day)
				return 1;
			else return 0;
		}
	}
}
class EmployeeList;
class EmployeeNode
{
	friend class EmployeeList;
private:
	int no;
	char *name;
	Sex sex;
	Date birthdate;
	Date workdate;
	Qualification quali;
	Post post;
	char *addr;
	char phone[8];
	EmployeeNode *next;
public:
	EmployeeNode(){
		name=addr=NULL;
		next=NULL;
		no=0;
	}
	EmployeeNode(int t){
		name=addr=NULL;
		next=NULL;
		no=t;
	}
	EmployeeNode(int a,int b){
		name=new char[a];
		addr=new char[b];
		next=NULL;
	}
	~EmployeeNode(){
		delete name;
		delete addr;
	}
	void CreateEmp(){
		int t1,t2,t3;
		cout<<"请输入姓名:";
		name=new char[10];
		cin>>name;
		cout<<"请输入性别(1.男,2.女):";
		cin>>t1;
		switch(t1){
			case 1:sex=Male;break;
			case 2:sex=Female;break;
			default:cout<<"不存在!"<<endl;
		}
		cout<<"请输入出生日期:";
		cout<<"年:";cin>>birthdate.year;
		cout<<"月:";cin>>birthdate.month;
		cout<<"日:";cin>>birthdate.day;
		cout<<"请输入工作开始日期:";
		cout<<"年:";cin>>workdate.year;
		cout<<"月:";cin>>workdate.month;
		cout<<"日:";cin>>workdate.day;
		cout<<"请输入职位(1.老板,2.经理,3.职员):";
		cin>>t2;
		switch(t2){
			case 1:post=Boss;break;
			case 2:post=Manager;break;
			case 3:post=Clerk;break;
			default:cout<<"不存在!"<<endl;
		}
		cout<<"请输入学历(1.学士,2.研究生,3.博士,4.博士后):";
		cin>>t3;
		switch(t3){
			case 1:quali=Master;break;
			case 2:quali=Graduated;break;
			case 3:quali=PhD;break;
			case 4:quali=Postdoc;break;
			default:cout<<"Not exist!"<<endl;
		}
		cout<<"请输入地址:";
		addr=new char[20];
		cin>>addr;
		cout<<"请输入电话号码(8 位):";
		for(int i=0;i<8;i++)
			cin>>phone[i];
	}
	void EditName(){
		char *newname=new char[10];
		cout<<"请输入修改后的姓名:";
		cin>>newname;
		for(int i=0;i<10;i++)
			name[i]=newname[i];
	}
	void EditPhone(){
		char newphone[8];
		cout<<"请输入修改后的电话:";
		for(int j=0;j<8;j++)
			cin>>newphone[j];
		for(int i=0;i<8;i++)
			phone[i]=newphone[i];
	}
	void EditPost(){
		int t;
		cout<<"请输入现在的职位(1.老板,2.经理,3.职员):";
		cin>>t;
		switch(t){
			case 1:post=Boss;break;
			case 2:post=Manager;break;
			case 3:post=Clerk;break;
		}
	}	
	void EditNode(){
		int t;
		while(t!=4){
			cout<<"请输入你想修改的信息(1.姓名,2.电话,3.职位,4.退出修改):";
			cin>>t;
			switch(t){
				case 1:EditName();break;
				case 2:EditPhone();break;
				case 3:EditPost();break;
				case 4:break;
			}
		}
	}
	void print(){
		cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ Information~ ~ ~ ~ ~ ~ ~ ~ ~  "<<endl; 
		cout<<"姓名:"<<name<<'\t'<<"性别:";
		switch(sex){
			case 0:cout<<"Male";break;
			case 1:cout<<"Female";break;
		}
		cout<<'\t'<<"电话:";
		for(int i=0;i<8;i++)
			cout<<phone[i];
		cout<<endl;
		cout<<"出生日期:"<<birthdate.year<<"-"<<birthdate.month<<"-"<<birthdate.day<<'\t';
		cout<<"工作日期:"<<workdate.year<<"-"<<workdate.month<<"-"<<workdate.day<<'\t';
		cout<<"序号:"<<no<<endl;
		cout<<"学历:";
		switch(quali){
			case 0:cout<<"学士";break;
			case 1:cout<<"研究生";break;
			case 2:cout<<"博士";break;
			case 3:cout<<"博士后";break;
		}
		cout<<'\t'<<"职位:";
		switch(post){
			case 0:cout<<"老板";break;
			case 1:cout<<"经理";break;
			case 2:cout<<"职员";break;
		}
		cout<<'\t';
		cout<<"家庭住址:"<<addr<<endl;
		cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "<<endl;
		cout<<endl;
	}
	EmployeeNode *Assign(EmployeeNode *item,const EmployeeNode *p){

		for(int i=0;i<10;i++)
			item->name[i]=p->name[i];
		for(i=0;i<20;i++)
			item->addr[i]=p->addr[i];
		item->birthdate.year=p->birthdate.year;
		item->birthdate.month=p->birthdate.month;
		item->birthdate.day=p->birthdate.day;
		item->workdate.year=p->workdate.year;
		item->workdate.month=p->workdate.month;
		item->workdate.day=p->workdate.day;
		for(i=0;i<8;i++)
			item->phone[i]=p->phone[i];
		item->quali=p->quali;
		item->post=p->post;
		item->sex=p->sex;
		return item;
	}
};
class EmployeeList{
private:
	EmployeeNode *first,*last;
public:
	EmployeeList(int value){
		first=last=new EmployeeNode(value);
	}
	~EmployeeList(){
		MakeEmpty();
		delete first;
	}
	int Get_total(){
		return last->no;
	}
	void MakeEmpty(){
		EmployeeNode *q;
		while(first->next!=NULL){
			q=first->next;
			first->next=q->next;
			delete q;
		}
		last=first->next;
	}	
	void Swap(EmployeeNode *p1,EmployeeNode *p2){
		EmployeeNode *item=new EmployeeNode(10,20);
		item->Assign(item,p1);
		p1->Assign(p1,p2);
		p2->Assign(p2,item);
		delete item;
	}
	void Sort_name(){//按字典顺序排序
		EmployeeNode *p=first->next;
		int exchange,num=Get_total();
		while(num>1){
			exchange=0;
			while(p->next!=NULL){
				int t=namedif(p->name,p->next->name);
				if(p->name[t]>p->next->name[t]){
					exchange=1;
					Swap(p,p->next);
				}
				p=p->next;
			}
			if(exchange==0)//没有交换过
				break;
			p=first->next;
			num--;
		}
	}
	void Sort_birth(){//按年龄从大到小排序
		EmployeeNode *p=first->next;
		int exchange,num=Get_total();
		while(num>1){
			exchange=0;
			while(p->next!=NULL){
				int t=birthdif(p->birthdate,p->next->birthdate);
				if(t){
					exchange=1;
					Swap(p,p->next);
				}
				p=p->next;
			}
			if(exchange==0)//没有交换过
				break;
			p=first->next;
			num--;
		}
	}
	void Sort_post(){
		EmployeeNode *p=first->next;
		int exchange,num=Get_total();
		while(num>1){
			exchange=0;
			while(p->next!=NULL){
				if(p->post>p->next->post){
					exchange=1;
					Swap(p,p->next);
				}
				p=p->next;
			}
			if(exchange==0)//没有交换过
				break;
			p=first->next;
			num--;
		}
	}
	void Sort(){
		cout<<"你想通过哪种方式排序(1.姓名,2.出生日期,3.职位)";
		int t;cin>>t;
		switch(t){
			case 1:Sort_name();break;
			case 2:Sort_birth();break;
			case 3:Sort_post();break;
		}
	}
	void Edit(){
		int t;
		cout<<"请输入你想修改的职工的序号:";
		cin>>t;
		EmployeeNode *p=Find(t);
		p->EditNode();
	}
	void Find_name(char *str){
		EmployeeNode *p=first;
		while(p->next!=NULL){
			p=p->next;
			if(strcmp(p->name,str)==0){
				cout<<"这是符合你的查找条件的职工:"<<endl;
				p->print();
			}
		}
	}
	void Find_quali(int t){
		EmployeeNode *p=first;
		while(p!=last){
			p=p->next;
			if(p->quali==(t-1)){
				cout<<"这是符合你的查找条件的职工:"<<endl;
				p->print();
			}
		}
	}
	void Find_post(int t){
		EmployeeNode *p=first;
		while(p!=last){
			p=p->next;
			if(p->post==(t-1)){
				cout<<"这是符合你的查找条件的职工:"<<endl;
				p->print();
			}
		}
	}
	void Find(){
		char *str;
		str=new char[8];
		cout<<"你想通过哪种方式查找(1.姓名,2.学历,3.职位)?:";
		int t,t1,t2;
		cin>>t;
		switch(t){
			case 1:cout<<"请输入你所查找的姓名:";cin>>str;Find_name(str);break;
			case 2:cout<<"请输入你所查找的学历(1.学士,2.研究生,3.博士,4.博士后):";
					cin>>t1;
					switch(t1){
						case 1:Find_quali(1);break;
						case 2:Find_quali(2);break;
						case 3:Find_quali(3);break;
						case 4:Find_quali(4);break;
					}
					break;
			case 3:cout<<"请输入你所查找的职位(1.老板,2.经理,3.职员):";
					cin>>t2;
					switch(t2){
						case 1:Find_post(1);break;
						case 2:Find_post(2);break;
						case 3:Find_post(3);break;
					}
					break;
		}
	}		
	void Insert(){
		EmployeeNode *p=first;
		int i=1;
		while(p!=last){
			p=p->next;
			i++;
		}
		EmployeeNode *item=new EmployeeNode(i);
		item->CreateEmp();
		if(p->next==NULL)
			last=item;
		p->next=item;
	}
	EmployeeNode *Find(int i)
	{
		EmployeeNode *p=first;
		while(p!=NULL&&p->no!=i)
			p=p->next;
		return p;
	}
	void Remove(){
		int t;
		cout<<"请输入你所需要删除的职工的序号:";
		cin>>t;
		EmployeeNode *item=Find(t-1),*q;
		if(item==NULL||item->next==NULL)
			cout<<"不存在!"<<endl;
		q=item->next;
		item->next=q->next;
		delete q;
		EmployeeNode *p=first->next;
		int i=1;
		while(p!=NULL){
			p->no=i;
			i++;
			p=p->next;
		}
	}
	void print(){
		EmployeeNode *p=first->next;
		while(p!=NULL){
			p->print();
			p=p->next;
		}
	}
};
int main()
{
	int t=0;
	EmployeeList list(0);
	cout<<"欢迎!这是由zblhero与吴滔创建的职工管理系统!"<<endl;
	int cmd=0;
	while(cmd!=7){
		cout<<"-------------------MENU------------------"<<endl;
		cout<<"1.创建一个新的职工;"<<endl;
		cout<<"2.删除一个已有的职工;"<<endl;
		cout<<"3.查询一个职工;"<<endl;
		cout<<"4.编辑修改一个职工的信息;"<<endl;
		cout<<"5.对职工排序;"<<endl;
		cout<<"6.输出所有的职工"<<endl;
		cout<<"7.退出MENU"<<endl;
		cout<<"-----------------------------------------"<<endl;
		cin>>cmd;
		switch(cmd){
			case 1:list.Insert();break;
			case 2:list.Remove();break;
			case 3:list.Find();break;
			case 4:list.Edit();break;
			case 5:list.Sort();break;
			case 6:list.print();break;
			case 7:break;
			default:cout<<"这不是命令!"<<endl;
		}
		if(cmd==7){
			cout<<"                                非常感谢您对本系统的支持!"<<endl;
			cout<<"                                联系方式:bolei654@163.com!"<<endl;
			break;
		}
	}
	exit(1);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -