工资管理系统
#include<iostream>
#include<cstdio>
#include<windows.h>
#include<fstream>
#include<iomanip>
#include<string>
#define OK 1//宏定义
#define ERROR 0
#define MAX_SIZE 100
using namespace std;
//=========================
struct employee
{
int age;
char name[15];
double salary;
char tel[15];
char add[15];
};
//11=========================
void display(employee company[],int n)//展示所有员工信息
{
int t=1;
if(n==0)
cout<<"没有任何员工信息"<<endl;
else
{
for(int i=0;i<n;i++)
{
if(company[i].age)
{
cout<<"-----------------------------"<<endl;
cout<<"NO."<<t<<endl;
cout<<"姓名:"<<company[i].name<<endl;
cout<<"年龄:"<<company[i].age<<endl;
cout<<"电话:"<<company[i].tel<<endl;
cout<<"住址:"<<company[i].add<<endl;
cout<<"工资:"<<company[i].salary<<endl;
cout<<"-----------------------------"<<endl;
t++;
}
}
//system("pause");
}
}
//22===================================
int read(employee company[])//手动输入员工信息
{
int n;
ofstream outfile("company.txt",ios::out|ios::binary);
if(! outfile)
{
cerr<<"open error!"<<endl;
abort();
}
cout<<"你选择手动输入\n";
cout<<"请输入员工人数:\n";
cin>>n;
outfile.seekp(0,ios::beg);
for(int i=0;i<n;i++)
{
cout<<"输入第"<<i+1<<"个员工姓名、年龄、电话、住址、工资:\n";
cin>>company[i].name>>company[i].age>>company[i].tel>>company[i].add>>company[i].salary;
outfile.write((char*)&company[i],sizeof(company[i]));
}
outfile.close();
display(company,n);
system("pause");
return n;
}
//33===================================
int readfile(employee company[],int n)//从文件中读入所有员工信息
{
int a;
cout<<"请输入需要输入的人数:";
scanf("%d",&a);
fstream all("company.txt",ios::in|ios::binary);
if(!all)
{
cerr<<"文件打开失败!"<<endl;
abort();
}
all.seekg(0,ios::beg);//到文件头
for(int i=0;i<a;i++)
all.read((char *)&company[i],sizeof(company[i]));
display(company,a);
all.close();
system("pause");
//cout<<"你选择文件输入:\n";
return a;
}
//44===================================================
int Delete(employee company[],int n)//删除员工信息
{
char name[30];
int i;
cout<<"请输入要删除的人的名字:";
cin>>name;
for(i=0;i<n;i++)
{
if(strcmp(company[i].name,name)==0)
{
strcpy(company[i].name,"\0");
company[i].age=0;
company[i].salary=0;
strcpy(company[i].tel,"\0");
strcpy(company[i].add,"\0");
printf("删除成功\n");
}
}
//
system("pause");
return 1;
}
//55===================================================
int update(employee company[],int n)//更新某个员工信息
{
char _name[15];
int temp,j,i;
cout<<"请输入员工姓名:\n";
cin>>_name;
ifstream iofile("company.txt",ios::in|ios::out|ios::binary);
if(! iofile)
{
cerr<<"文件打开失败!"<<endl;
abort();
}
iofile.seekg(0,ios::beg);
for(i=0;i<n;i++)
{
iofile.read((char *)&company[i],sizeof(company[i]));
if(strcmp(company[i].name,_name)==0)
{
j=1;
temp=i;
}
}
if(j!=1)
{
cout<<"对不起,没找到你要的信息!"<<endl<<endl ;
}
iofile.close();
if(temp!=-1)
{
ofstream iofile("company.txt",ios::in|ios::out|ios::binary);
if(! iofile)
{
cerr<<"文件打开失败!"<<endl;
abort();
}
cout<<"确定修改吗?[y/n]"<<endl;
char c;
cin>>c;
for(int i=0;i<n;i++)
{
if(strcmp(company[i].name,_name)==0)
{
cout<<"============"<<endl;
cout<<"姓名:";
cout<<company[i].name<<endl;
cout<<"年龄:";
cout<<company[i].age<<endl;
cout<<"电话:";
cout<<company[i].tel<<endl;
cout<<"住址:";
cout<<company[i].add<<endl;
cout<<"工资:";
cout<<company[i].salary<<endl;
cout<<"============"<<endl;
cout<<"请输入修改后员工的姓名,年龄,电话,地址,工资:\n";
cin>>company[i].name>>company[i].age>>company[i].salary>>company[i].tel>>company[i].add;
iofile.seekp(temp*sizeof(company[temp]),ios::beg);
iofile.write((char *)&company[temp],sizeof(company[temp]));
cout<<"已经成功修改!"<<endl;
return OK;
}
}
}
//cout<<"找不到这个员工的信息!\n";
return ERROR;
}
//66====================================================
double total(employee company[],int n,int agestart=0,int ageend=100)
{//计算某个年龄段的员工的总工资,返回值为总工资
cout<<"请输入所查询的年龄段:\n";
cin>>agestart>>ageend;
double sum=0;
for(int i=0;i<n;i++)
{
if(company[i].age>=agestart&&company[i].age<=ageend)
sum=sum+company[i].salary;
}
cout<<"年龄段:"<<agestart<<"~"<<ageend<<endl;
cout<<"人数为:"<<n<<endl;
cout<<"总工资:"<<sum<<endl;
return sum;
}
//77===============================================
double mean(employee company[],int n,int agestart=0,int ageend=100)
{//计算某个年龄段的员工平均工资,返回值为平均工资
cout<<"请输入起始年龄:\n";
cin>>agestart;
cout<<"请输入结束年龄:\n";
cin>>ageend;
double sum=0;
int num=0;
for(int i=0;i<n;i++)
{
if(company[i].age>=agestart&&company[i].age<=ageend)
{
sum=sum+company[i].salary;
num++;
}
}
cout<<"年龄段:"<<agestart<<"~"<<ageend<<endl;
cout<<"人数为"<<n<<",\n平均工资:"<<sum/num<<endl;
return sum/num;
}
//88=====================================
void add(employee company[],int n)
{
system("cls");
int i,m;
m=0;
char y;
employee _company[20];
cout<<"请输入要添加的:"<<endl;
for(i=0;i<20;i++) //先录入到结构数组
{
cout<<"请输入修改后员工的姓名,年龄,电话,地址,工资:\n";
cin>>_company[i].name>>_company[i].age>>_company[i].salary>>_company[i].tel>>_company[i].add;
fstream iofile("company.txt",ios::in|ios::out|ios::binary);
if(! iofile)
{
cerr<<"文件打开失败!"<<endl;
exit(1);
}
iofile.seekp(0,ios::end); //找到文件末尾,具体用法见课本270
iofile.write((char *)&company[i],sizeof(company[i])); //把结构数组(学生)信息添加到文件末尾处
iofile.close();
cout<<"继续(y/n)\n";
cin>>y;
if(y=='n')
i=19; //用break亦可
system("cls");
}
}
//=======================================
int main()
{
int slct;//选择读入方式
int n=0;
employee company[MAX_SIZE] ;//定义员工信息表
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
cout <<"请稍等……" << endl;
Sleep(2000);
system("cls");
cout<<"请选择:\n";
cout<<"◇1.手动读取员工信息:\n";
cout<<"◇2.文件读取员工信息:\n";
cin>>slct;
if(slct==1)n=read(company);
else if(slct==2)n=readfile(company,n);
cout <<"请稍等……" << endl;
Sleep(2000);
for(int choice;;)//无限循环,输入0退出
{
system("cls");//实现清屏
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_GREEN );
cout<<" ★★★★★★★★★★★★★★★★★★★★★\n";
cout<<" ★★★ 欢迎使用员工工资管理系统 ★★★\n";
cout<<" ★★★★★★★★★★★★★★★★★★\n";
cout<<" ※※※※※※※※※※※※※※※※※\n";
cout<<" ※ 请选择需要的操作: ※\n";
cout<<" ※ 1.查看员工的基本信息; ※\n";
cout<<" ※ 2.更新员工信息; ※\n";
cout<<" ※ 3.计算员工总工资; ※\n";
cout<<" ※ 4.计算员工平均工资; ※\n";
cout<<" ※ 5.删除员工信息; ※\n";
cout<<" ※ 6.增加员工信息; ※\n";
cout<<" ※ 0.退出工资管理系统; ※\n";
cout<<" ※※※※※※※※※※※※※※※※※\n"<<endl;
cin>>choice;
if(!cin)continue;
switch(choice)
{
case 1:display(company,n);break;
case 2:update(company,n);break;
case 3:total(company,n);break;
case 4:mean(company,n);break;
case 5:Delete(company,n);break;
case 6:add(company,n);break;
case 0:exit(0);
}
system("pause");
}
return 0;
}
做课设的菜鸟伤不起啊!!!