C语言工资管理系统源代码-andy

#include
#include
#include
#include
#define N 100
struct Salary_Info
{  
    int Card_No;            //工资卡号
    char name[20];          //姓名
    int month;              //月份
    float Init_Salary;       //应发工资
    float Water_Rate;       //水费
    float Electric_Rate;    //电费
    float tax;              //税金
    float Final_Salary;     //实发工资
    float Final_Salary_sum; //实发总工资
}; 
/*声明函数和定义全局变量*/
struct Salary_Info SI[N];
int  count=0; //计数有多少条记录,赋初值为0条     
void Menu();                  //0
void input();                 //1
void sort_Menu();             //4
void sort_Card_No();          //5
void sort_Final_Salary();     //6
void sort_name();             //8
void display();               //9
void save();                  //10
void load();                  //11
void search_Menu();           //12
void search_Card_No();        //13
void search_name();           //14
void statistics();            //15
void del();                   //18
void add();                   //19
void modify();                //20   /*定义各函数*/
void main();

void Menu()
{  
    printf("                              欢迎登陆工资管理系统                              \n\n");
    printf(" ************************************菜单**************************************\n"); 
    printf(" *           1.信息录入                            2.排序                     *\n"); 
    printf(" *           3.显示                                4.数据保存                 *\n"); 
    printf(" *           5.数据调入                            6.查询                     *\n");
    printf(" *           7.统计                                8.删除职工                 *\n");
    printf(" *           9.添加职工                            10.修改职工信息            *\n");
    printf(" *           0.退出                                                           *\n");
    printf(" ******************************************************************************\n"); 
}

void input()  /*输入函数*/
{
    system("color f5");
    int i,m;
    float sum;
    printf("********************************录入初始职工信息*******************************\n\n");
    printf("请输入需要创建信息的职工人数(1--100): ");
    scanf("%d",&m);
    count=m;
        for(i=0;i 800 && SI[i].Init_Salary <= 1400) sum=(float)(SI[i].Init_Salary-800)*0.05;
            else  sum=(SI[i].Init_Salary-800)*0.1;
              SI[i].tax=sum;
            SI[i].Final_Salary=(SI[i].Init_Salary-SI[i].Water_Rate-SI[i].Electric_Rate-SI[i].tax);  /*计算实发工资*/
        }
    printf("\n创建完毕!\n");
    save();
}

void sort_Menu()   /*排序主函数*/
{
    system("color f5");
    int t,flag;
    do
    {
        printf(" *********************************选择排序方式*********************************\n");
        printf(" *                                                                            *\n");
        printf(" *      1.按职工卡号排序  2.按实发工资排序  3.按姓名排序  4.返回主菜单        *\n");
        printf(" *                                                                            *\n");
        printf(" ******************************************************************************\n");
        printf(" 请输入[1-4]: ");
        scanf("%d",&t);
        printf("\n");
        if(t>=1&&t<=4)
        {
          flag=1;
          break;
        }
        else
        {
          flag=0;
          system("cls");
          printf("\n您输入有误!!! 请重新选择。\n\n");
        }
    }
    while(flag==0);
        switch(t)
        {
            case 1:system("cls");sort_Card_No();break;          /*调用按卡号排序函数*/
            case 2:sort_Final_Salary();break;     /*调用按实发工资排序函数*/
            case 3:sort_name();break;             /*调用按姓名排序函数*/
            case 4:system("cls");main();break;                /*调用主函数*/
            default:break;
        }
}

void sort_Card_No()   /*按卡号升序排序函数*/
{
    system("color f4");
    int i,j,k;
    float temp;
    char t[20];
    for(i=0;i0)
            {
                k=SI[j].Card_No; SI[j].Card_No=SI[j+1].Card_No; SI[j+1].Card_No=k;
                strcpy(t,SI[j].name); strcpy(SI[j].name,SI[j+1].name); strcpy(SI[j+1].name,t);
                temp=SI[j].month;SI[j].month=SI[j+1].month;SI[j+1].month=temp;
                temp=SI[j].Init_Salary;SI[j].Init_Salary=SI[j+1].Init_Salary;SI[j+1].Init_Salary=temp;
                temp=SI[j].Water_Rate;SI[j].Water_Rate=SI[j+1].Water_Rate;SI[j+1].Water_Rate=temp;
                temp=SI[j].Electric_Rate;SI[j].Electric_Rate=SI[j+1].Electric_Rate;SI[j+1].Electric_Rate=temp;
                temp=SI[j].tax;SI[j].tax=SI[j+1].tax;SI[j+1].tax=temp;
                temp=SI[j].Final_Salary;SI[j].Final_Salary=SI[j+1].Final_Salary;SI[j+1].Final_Salary=temp;  
            }
        }
    }
    printf("******************************按职工姓名排序浏览******************************\n");
    printf("*\n");
    printf("* 卡号\t姓名\t月份\t应发工资\t水费\t电费\t税\t实发工资\n");
    for(i=0;i=1&&t<=3)
       {
          flag=1;
          break;
       }
      else
      {
          flag=0;
          system("cls");
          printf("\n您输入有误!!! 请重新选择。\n\n");
      }
   }
    while(flag==0);
    switch(t)
       {
            case 1:search_Card_No();break;
            case 2:search_name();break;
            case 3:system("cls");main();break;
            default:break;
       }
}

void search_Card_No()
{
    int Card_No,flag;
    int i,t;
    printf("\n请输入要查找的职工卡号: ");
    fflush(stdin);
    scanf("%d",&Card_No);
    for(i=0;i=1&&num<=12)
                {
                banner=1;
                SI[i].Final_Salary_sum = num*SI[i].Final_Salary;
                printf("**********************************查询结果如下*********************************\n");
                printf("* 卡号\t姓名\t月份\t应发工资\t水费\t电费\t税\t实发工资\n");
                printf("* %d\t%s\t %d\t%.2f\t        %.2f\t%.2f\t%.2f\t%.2f\n",SI[i].Card_No,SI[i].name,SI[i].month,SI[i].Init_Salary,SI[i].Water_Rate,SI[i].Electric_Rate,SI[i].tax,SI[i].Final_Salary);
                printf("*-----------------------------------------------------------------------------\n");
                printf("* 实发工资总额为:%.2f\n",SI[i].Final_Salary_sum);
                printf("*******************************************************************************\n");
                break;
                }
            }
            else
            {
                banner=0;
                printf("\n您输入有误,请重新输入!\n");
            }
            printf("\n[ 1.继续查询 2.返回菜单] 请输入: ");
            scanf("%d",&t);
            if(t>=1&&t<=2)
            {
            flag=1;
            break;
            }
            else
            {
                flag=0;
                system("cls");
                printf("\n您输入有误!!! 请重新选择。\n\n");
            }
    }
    while(flag==0);
    while(flag==1)
    {
        switch(t)
        {
        case 1:statistics();break;
        case 2:system("CLS");main();break;
        default:break;
        }
    }
}

void del()   /*删除函数*/
{
    printf("********************删除职工信息************************\n\n");
    int i,j,n,t,flag;
    char name[20];
    printf("\n 原来的职工信息:\n");
    display();
    printf("\n请输入要删除的职工的姓名:");
    scanf("%s",&name);
    for(flag=1,i=0;flag&&i 800 && SI[i].Init_Salary <= 1400) sum=(float)(SI[i].Init_Salary-800)*0.05;
            else  sum=(SI[i].Init_Salary-800)*0.1;
              SI[i].tax=sum;
            SI[i].Final_Salary=(SI[i].Init_Salary-SI[i].Water_Rate-SI[i].Electric_Rate-SI[i].tax);  /*计算实发工资*/
    }
    fwrite(&SI[i],sizeof(struct Salary_Info),1,fp);
    fclose(fp);
    count=count+n;
    printf("\n已增加的人数:");
    printf("%d",n);
    printf("\n添加完毕!\n");
    save();
    printf("\n浏览增加后的所有职工信息:\n");
    display();
}

void modify() /*修改函数*/
{
    printf("********************修改职工信息************************\n\n");
    int Card_No;                   //工资卡号
    char name[20];                 //姓名
    int month;                     //月份
    float Init_Salary;             //应发工资
    float Water_Rate;              //水费
    float Electric_Rate;           //电费
    float Final_Salary;
    float sum; //计算税金时用于转换赋值
    int b,c,i,n,t,flag; 
    printf("\n 原来的职工信息:\n");
    display(); 
    printf("请输入要修改的职工的姓名:");
    scanf("%s",&name);
    for(i=0;i6||c<1)
                    printf("\n选择错误,请重新选择!\n");  
            }
        }
        else
        {
            printf("\n对不起,查无此人!\n");
            flag=0;
            break;
        }
    }   
    if(flag==1)
    do  
    {
        switch(c)      /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/
        {
        case 1:printf("工资卡号改为: ");
        scanf("%d",&Card_No);
        SI[i-1].Card_No=Card_No;
        break;
        case 2:printf("姓名改为: ");
        scanf("%s",&name);
        strcpy(SI[i-1].name,name); 
        break;  
        case 3:printf("月份改为: ");
        scanf("%d",&month);
        SI[i-1].month=month;
        break;  
        case 4:printf("应发工资改为: ");
        scanf("%f",&Init_Salary);
        SI[i-1].Init_Salary=Init_Salary;
        if(SI[i-1].Init_Salary <= 800) sum=0; /*计算修改应发工资后的税金*/
            else if(SI[i-1].Init_Salary > 800 && SI[i-1].Init_Salary <= 1400) sum=(float)(SI[i-1].Init_Salary-800)*0.05; /*sum强制转换类型,double到float*/
            else  sum=(SI[i-1].Init_Salary-800)*0.1;
              SI[i-1].tax=sum;
        SI[i-1].Final_Salary=Final_Salary=(SI[i-1].Init_Salary-SI[i-1].Water_Rate-SI[i-1].Electric_Rate-SI[i-1].tax);   /*计算修改应发工资后的实发工资*/
        break;  
        case 5:printf("水费改为: ");
        scanf("%f",&Water_Rate);
        SI[i-1].Water_Rate=Water_Rate;
        SI[i-1].Final_Salary=Final_Salary=(SI[i-1].Init_Salary-SI[i-1].Water_Rate-SI[i-1].Electric_Rate-SI[i-1].tax);   /*计算修改水费后的实发工资*/
        break;  
        case 6:printf("电费改为: ");
        scanf("%f",&Electric_Rate);
        SI[i-1].Electric_Rate=Electric_Rate;
        SI[i-1].Final_Salary=Final_Salary=(SI[i-1].Init_Salary-SI[i-1].Water_Rate-SI[i-1].Electric_Rate-SI[i-1].tax);   /*计算修改电费后的实发工资*/
        break;
        }
        printf("\n");
        printf("[1.确认修改  2.不修改] 请输入: ");
        scanf("%d",&b);
    }
    while(b==2);
    printf("\n浏览修改后的所有职工信息:\n");
    save();
    display();
    printf("\n[1.继续修改  2.不再修改] 请输入: ");
    scanf("%d",&t);
    switch(t)
    {
    case 1: system("cls");modify();break;
    case 0:break;
    default :break;
    }
}

void save()  /*数据保存函数*/
{
    int i;
    FILE *fp;
    if ((fp=fopen("Salary_Info.txt","wb"))==NULL)
    {
        printf ("cannot open file\n");
        exit(1);
    }
   for(i=0;i=0 && n<=10)
        {
            flag=1;break;
        }
        else
        {
            flag=0;
            printf("您输入有误,请重新选择!\n");
        }
    }
    while(flag==0);
    while(flag==1)
  {
        switch(n)
        {
        case 1:system("cls");  input();break;/*调用输入函数*/
        case 2:system("cls");  sort_Menu();break; /*调用排序函数*/
        case 3:system("cls");  display();break;/*调用显示函数*/
        case 4:save();break; /*调用保存函数*/
        case 5:load();break; /*调用读取函数*/
        case 6:system("cls");  search_Menu();break;/*调用查询函数*/
        case 7:system("cls");  statistics();break;/*调用统计函数*/
        case 8:system("cls");  del();break;/*调用删除函数*/
        case 9:system("cls");  add();break;/*调用添加函数*/
        case 10:system("cls"); modify();break;/*调用修改函数*/
        case 0: exit(0);break;
        default:system("cls");goto start;
        }
    getchar();
    printf("\n是否继续进行(y or n): ");
    scanf("%c",&a);
    if(a=='y'||a=='Y')
    {
        flag=1;
        system("cls");  /*清屏*/
        Menu(); /*调用菜单函数*/
        printf("请再次选择你需要操作的步骤(0--10): ");
        scanf("%d",&n);
    }
    else
        exit(0);
    }
}

你可能感兴趣的:(C语言工资管理系统源代码-andy)