利用C语言文件操作函数fopen、fprintf等的应用

博客提及职员工资查询系统,这属于信息技术领域,可能用于查询职员的工资信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 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);
 }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值