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

📄 workermanage.cpp

📁 这是一个简单的模拟职工管理系统vc编程,包括文档,适合vc初学者参考
💻 CPP
字号:
#include <string.h>
#include<iostream>
#include <fstream>  
#include <malloc.h>  

#ifdef WIN32
#define TEMP_FILE  "职工系统.bin"
#endif

#include <vector>

#include <vector>
using namespace std;

struct    workNode 
{
	int   workerno;	
	char  workername[10];
	int   departmentno;
	char  sex;
	float salary;	
};

typedef struct workNode   Work;
typedef Work *pWork;

typedef std::vector<Work>  WorkArray;
int pivotkey;
int pivotloc;

bool Insert(WorkArray &pointer)
{//在原有的数组后插入元素,边插边分配单元	
	pWork poi;
	poi=(pWork)malloc(sizeof(Work));
	int FLAG,mark;
	FLAG=1;
	printf("请输入职工信息(退出输入**请将职工号输为--000):\n");
	while(FLAG)
	{
		printf("职工号:");
		scanf("%d",&poi->workerno);
		if(poi->workerno!=000)
		{
			printf("职工姓名:");
			scanf("%s",&poi->workername);
			getchar();
			printf("性别(f/F或m/M):");
			poi->sex = getchar();
			if(poi->sex== 'f'||poi->sex== 'F'||poi->sex== 'm'||poi->sex== 'M')
				mark = 1;
			else mark = 0;
			while(!mark)
			{
				printf("您输入的不正确请输(f/F或m/M):");
				getchar();
				poi->sex = getchar();
				if(poi->sex== 'f'||poi->sex== 'F'||poi->sex== 'm'||poi->sex== 'M')
				mark = 1;
				else mark = 0;
			}
			printf("部门号:");
			scanf("%d",&poi->departmentno);
			printf("工资:");
			scanf("%f",&poi->salary);
			printf("下一位职工信息(退出输入**请将职工号输为--000):\n");
		}
		else
			FLAG=0;
		if(FLAG)
		{			
			pointer.push_back(*poi); 
		}
	}
	return 1;
}

int Partition(WorkArray &Array,int low,int high)
{//交换表中[low,high]的记录,枢轴记录到位,并返回其所在位置,
//此时在他之前(后)的记录均不大(小)于他
	Work mark;
	mark = Array[low];//表中的第一个记录作枢轴记录
	pivotkey = Array[low].workerno;//枢轴记录关键字
	while(low < high)
	{//从表的两端交替地向中间扫描
		while(low < high && Array[high].workerno >= pivotkey) --high;
		Array[low] = Array[high];//将比枢轴记录小的记录移到低端
		while(low < high && Array[low].workerno <= pivotkey) ++low;
		Array[high] = Array[low];//将比枢轴记录大的记录移到高端
	}
	Array[low] = mark;//枢轴记录到位
	return low;//返回枢轴位置
}
void QuickSort(WorkArray &Array,int low,int high)
{//对表做快速排序
	if(low < high)
	{//长度大于1
		pivotloc = Partition(Array,low,high);//将low,high一分为二
		QuickSort(Array,low,pivotloc-1);//对低子表递归排序,pivotloc是枢轴位置
		QuickSort(Array,pivotloc+1,high);//对高子表递归排序
	}
}
int Search(WorkArray &Array,int Key)
{//在有序表中二分查找其关键字等于Key的数据元素.若找到,则函数值为
//该元素在表中的位置,否则为0
	int mid,low,high;
	low = 0;//置区间初值
	high = Array.size()-1;
	while(low <= high)
	{
		mid = (low + high)/2;
		if(Key == Array[mid].workerno) //找到待查元素
			return mid;
		else if(Key < Array[mid].workerno) high = mid - 1;//继续在前半区间进行查找
		else low = mid + 1;//继续在后半区间进行查找
	}
	return -1;//表中不存在待查元素
}
void Delete(WorkArray &Array)
{//调用Search()函数查找要删除元素的位置,然后将其删除
	int number,Mark;
	printf("输入待删除的职工号:");
	scanf("%d",&number);
	Mark = Search(Array,number);
	if(Mark != -1)
	{
		while(Mark < Array.size()-1)
		{
			Array[Mark] = Array[Mark+1];
			Mark++;
		}
		if(Mark == Array.size()-1)
			Array.pop_back();//去掉最后一个元素
		printf("删除工作已完成!!\n");
	}
	else printf("此职工信息已不存在!!\n");
}

void Display(WorkArray &res,int l)
{//显示所有未被删除的职工信息
    int k;
	for(k=0;k<l;k++)
	{
		printf("res[%d].职工号=%d\n",k,res[k].workerno);
	    printf("res[%d].职工姓名=%s\n",k,res[k].workername);
	    printf("res[%d].性别=%c\n",k,res[k].sex);
	    printf("res[%d].部门号=%d\n",k,res[k].departmentno);
        printf("res[%d].工资=%f\n",k,res[k].salary);
		printf("\n");
        
	}
}

void SaveFile(int *flag,WorkArray &temp)
{//保存职工信息
	WorkArray temp0;
	if(*flag)
	{	
		fstream Savetemp;
		Savetemp.open(TEMP_FILE,ios::in|ios::out|ios::binary);// |ios::app          
		int i;
		Work   tem;
		int MMx=temp.size();
		Savetemp.seekg(0,ios::beg);
		for(i=0;i<MMx;i++)
		{
			Savetemp.write(reinterpret_cast <char*>(&temp[i]),sizeof(Work));
		}		
		int m=sizeof(Work);			
		Savetemp.seekg(0,ios::beg);
		for(i=0;i<MMx;i++)
		{
			Savetemp.read(reinterpret_cast<char*>(&tem),sizeof(Work));
			temp0.push_back(tem);
		}
		Savetemp.close;
    }
	
}

void main()
{
	WorkArray Container;
	int flag,oper,Key,i;
	Insert(Container);
	printf("\n插入操作——————按1\n");
	printf("查询操作——————按2\n");
	printf("删除操作——————按3\n");
	printf("排序操作——————按4\n");
	printf("输出操作——————按5\n");
	printf("保存操作——————按6\n");
	printf("退出操作——————按0\n");
	scanf("%d",&oper);
	while(oper != 0)
	{
		
		switch(oper)
		{
		case 1:	Insert(Container);//插入
				break;
		case 2:	printf("请输入待查的职工号:");
				scanf("%d",&Key);
				i = Search(Container,Key);//查询
				printf("查询结果为:\n");
				if(i != -1)
				{
					 printf("Container[%d].职工号=%d\n",i,Container[i].workerno);
					 printf("Container[%d].职工姓名=%s\n",i,Container[i].workername);
					 printf("Container[%d].性别=%c\n",i,Container[i].sex);
					 printf("Container[%d].部门号=%d\n",i,Container[i].departmentno);
					printf("Container[%d].工资=%f\n",i,Container[i].salary);
				}
				else
				printf("\n该表中不存在此职工信息或已被删除!!\n");
				break;
		case 3:	Delete(Container);//删除
				break;
		case 4:	QuickSort(Container,0,Container.size()-1);//排序
				printf("排序工作已完成!!\n");
				break;
		case 5:	printf("职工系统信息为:\n");
				Display(Container,Container.size());//输出显示
				break;
		case 6:	flag = 1;
				printf("文件已保存!!\n");
				SaveFile(&flag,Container);//保存
				break;
		}
		printf("\n请给出下一步操作的提示:\n");
		scanf("%d",&oper);
	}
}
		




⌨️ 快捷键说明

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