// Record
//职员工资查询系统
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
#define N 10
void menu();
void reads(struct worker S[N],int *n);
void add();
void show();
void query();
void computer();
void Sort();
struct worker
{char num[20];
char name[10];
float salary;
float al;
float ar;
float mu;
float fact;
}S[N];
int main()
{
int n;
while(1)
{
menu();
printf("\n 请输入您要选择的操作序号,按回车键确认:");
scanf("%d",&n);
switch(n)
{
case 1: add();break;
case 2: query();break;
case 3: computer();break;
case 4: show();break;
case 5: exit(0);
case 6: Sort(); break;
default: printf("输入错误,请输入列表中存在的序号!\n ");
}
}
return 0;
}
//排序比较
bool cmp(worker a,worker b)
{
return strcmp(a.num,b.num)<0; //sort排序比较函数利用字符从小到大
//char型不同于string型,必须要利用strcmp比较函数,string类型则可以直接比较。
//strcmp函数位于#include<string.h>中 返回值大于0,则参数1大于参数2。等于0,则两者相等
//return a.num>b.num;//错误写法
}
//排序
void Sort()
{
FILE *fp;//定义文件指针
int n;
reads(S,&n);
sort(S,S+n,cmp);//利用结构体中的员工编号进行排序
// for(int i=0;i<n;i++)
// cout<<S[i].num<<S[i].name<<endl;
if((fp=fopen("F:\\salary.txt","w"))!=NULL)//fopen函数对文件进行写操作,打开文件成功则返回文件的地址
{
for(int i=0;i<n;i++)//
{
fprintf(fp,"\n%s %s %f %f %f %f %f",S[i].num,S[i].name,S[i].salary,S[i].al,S[i].ar,S[i].mu,S[i].fact);//fprintf()函数对文件进行写入
}
cout<<"排序成功"<<endl;
}else cout<<"排序失败"<<endl;
fclose(fp);
}
void menu()
{printf(" ****************************工资管理系统************************ ");
printf("\n 1 职工信息录入");
printf("\n 2 信息查询");
printf("\n 3 工资统计");
printf("\n 4 显示信息");
printf("\n 5 退出");
printf("\n 6 排序 ");
}
void reads(struct worker S[N],int *n)
{
FILE *fp;
int i;
if((fp=fopen("F:\\salary.txt","r"))==NULL)
{
printf("文件打开失败!\n");
return;
}
else
{ for(i=0;!feof(fp);i++)//feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0
fscanf(fp,"%s%s%f%f%f%f%f",S[i].num,S[i].name,&S[i].salary,&S[i].al,&S[i].ar,&S[i].mu,&S[i].fact);
}
*n=i;//利用n记录总记录数
fclose(fp);
}
void add()/*添加职工信息*/
{FILE *fp;
int n,i;
struct worker S[N];
if((fp=fopen("F:\\salary.txt","w"))!=NULL)/*新建paid文件并添加信息*/
{
printf("请输入要添加的职工数量,按回车键确认:");
scanf("%d",&n);
for(i=0;i<n;i++)//
{
printf("\n请输入第%d个职工的职工号、姓名,用空格分开,并按回车键确认:\n",i);
scanf("%s%s",S[i].num,S[i].name);
printf("\n请输入第%d个职工的基本工资、补贴金额、奖励金额、扣除金额,用空格分开,并按回车键确认:\n",i);
scanf("%f%f%f%f",&S[i].salary,&S[i].al,&S[i].ar,&S[i].mu);
S[i].fact=S[i].salary+S[i].al+S[i].ar-S[i].mu;
printf("\n实发工资:%8.2f\n",S[i].fact);
fprintf(fp,"\n%s %s %f %f %f %f %f",S[i].num,S[i].name,S[i].salary,S[i].al,S[i].ar,S[i].mu,S[i].fact);/*职工信息写入文件*/
}
}
fclose(fp);
}
void show()/*显示所有职工信息函数*/
{struct worker S[N];
int i,n;
reads( S,&n);/*从文件中读出所有职工信息*/
printf(" *****************所有的职工信息如下*****************");
printf("\n 职工号 姓名 基本工资 补贴金额 奖励金额 扣除金额 实发工资\n");
for(i=0;i<n;i++)
printf("\n%5s %5s %8.2f %8.2f %8.2f %8.2f %8.2f\n",S[i].num,S[i].name,S[i].salary,S[i].al,S[i].ar,S[i].mu,S[i].fact);
}
void computer()/*实发工资*/
{
struct worker S[N];
float s1=0,s2=0,s3=0,s4=0,s5=0;
float a1=0,a2=0,a3=0,a4=0,a5=0;
int i,n;
reads(S,&n);
for(i=0;i<n;i++)
{ s1=s1+S[i].salary;
s2=s2+S[i].al;
s3=s3+S[i].ar;
s4=s4+S[i].mu;
s5=s5+S[i].fact;
}
a1=s1/(n-1);
a2=s2/(n-1);
a3=s3/(n-1);
a4=s4/(n-1);
a5=s5/(n-1);
printf(" 基本工资 补贴金额 奖励金额 扣除金额 实发工资\n");
printf(" 总和 %8.2f %8.2f %8.2f %8.2f %8.2f\n",s1,s2,s3,s4,s5);
printf(" 平均 %8.2f %8.2f %8.2f %8.2f %8.2f\n",a1,a2,a3,a4,a5);
printf(" 人数: %d\n",n-1);
}
void query()/*职工信息查询*/
{
struct worker S[N];
char number[20];
int i,n;
reads(S,&n);
printf("\n请输入待查询的职工的职工号,按回车键确认:\n");
scanf("%s",number);
for(i=0;i<n;i++)
if(strcmp(number,S[i].num)==0) break;//等于0,说明两者相等
if(i>=n)
{printf("没有找到该职工信息!\n");
return;
}
else
{
printf("\n 职工号 姓名 基本工资 补贴金额 奖励金额 扣除金额 实发工资\n");
printf("\n%5s %5s %8.2f %8.2f %8.2f %8.2f %8.2f\n",S[i].num,S[i].name,S[i].salary,S[i].al,S[i].ar,S[i].mu,S[i].fact);
}
}