| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 631 人关注过本帖, 1 人收藏
标题:这里有一个c程序,但是运行不成功,希望大虾可以帮助~
只看楼主 加入收藏
小琴一一
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-26
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:9 
这里有一个c程序,但是运行不成功,希望大虾可以帮助~


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<io.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "Winmm.lib")
#define N 20
/*============================所有的函数声明分隔线====================================*/
typedef struct employee
{
        char num[10];    //保存员工编号
        char name[15];   //保存员工姓名
        float jbgz;     //保存员工基本工资
        float jj;       //保存员工奖金
        float kk;       //保存员工扣款
        float yfgz;     //保存员工应发工资
        float sk;       //保存员工税款
        float sfgz;     //保存员工实发工资
}ZGGZ;
/*================================函数分隔线====================================*/
int Add(ZGGZ tp[],int i);
void BoFang(int s);
int Del(ZGGZ tp[],int n);
void Disp(ZGGZ tp[],int n);
void FunTitle(int m);
void Huang(char str[],int max,int ciShu);
int Insert(ZGGZ tp[],int n);
void JiSuan(ZGGZ *p);
int Locate(ZGGZ tp[],int n,char findmess[],int nameornum);
void Menu();
void Message(int n);
void Modify(ZGGZ tp[],int n);
void NoFound(int n);
float NumberInput(int notice);
void PrintData(ZGGZ pp);
void PrintHeader();
void Qur(ZGGZ tp[],int no);
void Save(ZGGZ TP[],int n);
void Sort(ZGGZ tp[],int n);
void StringInput(char *t,int cho);
void TongJi(ZGGZ tp[],int n);
void Wrong(int n);
int YesOrNo();
int Saveflag=0;   
void main()
{
    printf("\t\t\t欢迎您进入员工工资管理系统\n");
    printf("\t  员工工资管理系统正在启动中,请稍候……\n\n");
    BoFang(27);
    ZGGZ worker[N];
    int len=0;
    FILE *fp;
    int n=0;
    Message(1);
    if((fp=fopen("C:\\record.dat","rb"))==NULL)      //当record文件不存在则提示
    {
        NoFound(1);
        Message(2);
        if(YesOrNo()==0)    goto End;             //选择不新建则退出程序
        else    if(YesOrNo()==1)    goto Meum;      //选择新建
    }
    else
    {
        for(int i=0;!feof(fp);i++)
        {
            if(fread(&worker[i],sizeof(struct employee),1,fp)==1)
                len++;
        }
        fclose(fp);
        printf("\n\t 目前所有的公司员工工资记录数为%d个!\n",len);
    }
Meum:Message(0);
    while(1)
    {
        system("cls");                //Dos命令—刷屏
        Menu();
        n=(int)NumberInput(1);
        FunTitle(n);
        switch (n)
        {
            case 1:len=Add(worker,len);    break;
            case 2:Qur(worker,len);        break;
            case 3:Modify(worker,len);    break;
            case 4:len=Insert(worker,len);    break;
            case 5:len=Del(worker,len);        break;
            case 6:Sort(worker,len);    break;
            case 7:TongJi(worker,len);    break;
            case 8:Disp(worker,len);    break;
            case 9:Save(worker,len);    break;
            case 0:{
                    if(Saveflag==1)
                    {
                        Message(3);             //是否要保存修改
                        if(YesOrNo()==1)    Save(worker,len);
                    }
                       Message(4);                 //是否要退出
                    if(YesOrNo()!=0)    goto End;
                   }    break;
            default:Wrong(1);    break;
        }
        Message(0);
    }
End:printf("\t正在退出员工工资管理系统……\n");
    BoFang(20);
    printf("\t感谢您使用本员工工资管理软件!\n");
    char *p="版权米有,盗版不究!#^_^";
    Huang(p,58,3);
}
/*================================函数分隔线====================================*/
void JiSuan(ZGGZ *p)                       //计算实际工资
{
    (*p).yfgz=(*p).jbgz+(*p).jj-(*p).kk;        //通过指针直接修改数组的值
    double sk=0,yfgz=(*p).yfgz;
    if(yfgz>100000)    {sk+=45.0/100*(yfgz-100000);    yfgz=yfgz-100000;    }
    if(yfgz>80000)    {sk+=40.0/100*(yfgz-80000);    yfgz=yfgz-80000;    }   
    if(yfgz>60000)    {sk+=35.0/100*(yfgz-60000);    yfgz=yfgz-60000;    }
    if(yfgz>40000)    {sk+=30.0/100*(yfgz-40000);    yfgz=yfgz-40000;    }
    if(yfgz>20000)    {sk+=25.0/100*(yfgz-20000);    yfgz=yfgz-20000;    }   
    if(yfgz>5000)    {sk+=20.0/100*(yfgz-5000);    yfgz=yfgz-5000;        }
    if(yfgz>2000)    {sk+=15.0/100*(yfgz-2000);    yfgz=yfgz-2000;        }
    if(yfgz>500)    {sk+=10.0/100*(yfgz-500);    yfgz=yfgz-500;        }
    if(yfgz>0)        {sk+=5.0/100*(yfgz);    }
    (*p).sk=(float)sk;
    (*p).sfgz=(*p).yfgz-(*p).sk;   
}
/*================================函数分隔线====================================*/
void Disp(ZGGZ tp[],int n)
{                               //函数用于显示数组中存储的n条记录,内容为employee中的内容
    if(n==0)    NoFound(2);
    else
    {
        PrintHeader();
        for(int i=0;i<n;i++)
            PrintData(tp[i]);
    }
}
/*================================函数分隔线====================================*/
float NumberInput(int notice)                   //函数用于输入数值型数据
{
    float shuZhi=0;
    printf("\n");
    switch(notice)
    {
    case 1:printf("\t 请输入数字键0—9作个选择:");    break;
    case 2:printf("\t 请输入数字键1或2作个选择:");    break;
    case 3:printf("\t 请输入员工基本工资的金额:");    break;
    case 4:printf("\t 请输入员工奖金的金额:\t");    break;
    case 5:printf("\t 请输入员工扣款的金额:\t");    break;
    }
    printf("\t");
    fflush(stdin);
    scanf("%f",&shuZhi);
    return shuZhi;
}
/*================================函数分隔线====================================*/
void StringInput(char *t,int cho)           //cho为5工号或6姓名
{                                        //函数用于输入字符串,并进行字符串长度验证(长度小于lens)
    int l=0;
    int n=0;
    do
    {
    if(n>0)    Wrong(2);
    n++;
    Message(cho);
    printf("\t");
    fflush(stdin);                    //清除输入缓冲区
    gets(t);
    l=strlen(t);
    }
    while(l>=(cho==5?8:12));        //cho==5工号为8个字节,cho==6姓名为12个字节
}
/*================================函数分隔线====================================*/
int Locate(ZGGZ tp[],int n,char findmess[],int nameornum) //函数用于定位数组中符合要求的元素,并返回该数组元素的下标值
{                                                  
    int i,m=0;
    int count[N]={0};
    char num[10];
    switch(nameornum)                                //参数findmess[]保存要查找的内容,nameornum为1name,2num
    {
    case 1:
        {
            for(i=0;i<n;i++)
                if(strcmp(tp[i].name,findmess)==0)
                {
                    count[m]=i;
                    m++;
                }
            if(m>1)
            {
                printf("\t计算机已经找到%d项符合条件的职工记录!\n",m);
                PrintHeader();
                for(int a=0;a<m;a++)
                    PrintData(tp[count[a]]);
                Message(23);
                StringInput(num,5);
                i=Locate(tp,n,num,2);
            }
            if(i==n)    i=-1;
        }
        break;
    case 2:
        {
            for(i=0;i<n;i++)
                if(strcmp(tp[i].num,findmess)==0)    goto Quit;
            if(i==n)    i=-1;
        }break;
    }
Quit:return i;
}
/*================================函数分隔线====================================*/
int Add(ZGGZ tp[],int i)               //函数用于在数组tp中增加工资记录元素并返回数组中的当前记录数,n为记录数
{
    ZGGZ tmp;
    if(i>0)    Disp(tp,i);
    Message(17);
    int flag=0;
    while(1)
    {
        while(1)
        {
            Message(12);
            StringInput(tmp.num,5);
            flag=0;
            if(strcmp(tmp.num,"0")==0)    goto Quit;
            for(int t=0;t<i;t++)
            {
                if(strcmp(tp[t].num,tmp.num)==0)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1)   
            {
                Wrong(3);
                if(YesOrNo()!=1)    goto Quit;   
            }
            else    break;
        }
        strcpy(tp[i].num,tmp.num);
        StringInput(tp[i].name,6);
        tp[i].jbgz=NumberInput(3);
        tp[i].jj=NumberInput(4);
        tp[i].kk=NumberInput(5);
        JiSuan(&tp[i]);
        Message(7);
        Saveflag=1;
        i++;
    }
    Quit:return i;
}
/*================================函数分隔线====================================*/
void Save(ZGGZ TP[],int n)
{
    FILE *fp;
    fp=fopen("C:\\record.dat","wb");
    for(int i=0;i<n;i++)
        fwrite(&TP[i],sizeof(struct employee),1,fp);
    fclose(fp);
    Message(21);
    BoFang(8);
}
/*================================函数分隔线====================================*/
int YesOrNo()
{
    int n=2;
    printf("\t");
    char cho;
    fflush(stdin);
    cho=getchar();
    if(cho=='y'||cho=='Y')    n=1;
    else if(cho=='n'||cho=='N')  n=0;
    printf("\n");
    return n;
}
/*================================函数分隔线====================================*/
int Del(ZGGZ tp[],int n)   //函数用于先在数组tp中找到满足条件的记录,然后删除该记录
{
    Message(12);            //输入0可返回主菜单
    char str[20];
    int cho;
    if(n==0)
    {    NoFound(3);    goto End;    }
    Message(8);
    int i;                       //用于返回下标
    cho=(int)NumberInput(2);     //做个选择
    switch(cho)
    {
    case 1:StringInput(str,5);
         i=Locate(tp,n,str,2);
         if(i==-1)    {    NoFound(2);    goto End;    }
         else
         {
            Message(11);                //提示已经找到查找的员工的信息
            PrintHeader();
            PrintData(tp[i]);
             Message(13);                //提示是否确定要删除员工的工资信息
               if(YesOrNo()==1)   
            {
                BoFang(23);
                strcpy(tp[i].num,tp[n-1].num);            //用最后一个记录覆盖要删除的记录
                tp[n-1].num[0]='\0';
                strcpy(tp[i].name,tp[n-1].name);
                tp[n-1].name[0]='\0';
                tp[i].jbgz=tp[n-1].jbgz;
                tp[n-1].jbgz=0.0;
                tp[i].jj=tp[n-1].jj;
                tp[n-1].jj=0.0;
                tp[i].kk=tp[n-1].kk;
                tp[n-1].kk=0.0;
                tp[i].yfgz=tp[n-1].yfgz;
                tp[n-1].yfgz=0.0;
                tp[i].sk=tp[n-1].sk;
                tp[n-1].sk=0.0;
                tp[i].sfgz=tp[n-1].sfgz;
                tp[n-1].sfgz=0.0;
                Message(14);
                Saveflag=1;
                n--;
                Disp(tp,n);
            }
         }break;
    case 2:StringInput(str,6);
         i=Locate(tp,n,str,1);
         if(i==-1)    {    NoFound(2);    goto End;    }
         else
         {
            Message(11);               //提示已经找到查找的员工的信息
            PrintHeader();
            PrintData(tp[i]);
             Message(13);                //提示是否确定要删除员工的工资信息
               if(YesOrNo()==1)   
            {
                BoFang(23);
                strcpy(tp[i].num,tp[n-1].num);            //用最后一个记录覆盖要删除的记录
                tp[n-1].num[0]='\0';
                strcpy(tp[i].name,tp[n-1].name);
                tp[n-1].name[0]='\0';
                tp[i].jbgz=tp[n-1].jbgz;
                tp[n-1].jbgz=0.0;
                tp[i].jj=tp[n-1].jj;
                tp[n-1].jj=0.0;
                tp[i].kk=tp[n-1].kk;
                tp[n-1].kk=0.0;
                tp[i].yfgz=tp[n-1].yfgz;
                tp[n-1].yfgz=0.0;
                tp[i].sk=tp[n-1].sk;
                tp[n-1].sk=0.0;
                tp[i].sfgz=tp[n-1].sfgz;
                tp[n-1].sfgz=0.0;
                Message(14);
                Saveflag=1;
                n--;
                Disp(tp,n);
            }
         }break;
    }
End:return(n);
}
/*================================函数分隔线====================================*/
void Qur(ZGGZ tp[],int no)                       //函数用于在数组tp中按职工编号或者姓名查找满足条件的记录,并显示记录
{
    char str[20];
    int cho;
    if(no==0)
    {    NoFound(3);    goto End;    }
    Message(8);
    int i;
    cho=(int)NumberInput(2);
    switch(cho)
    {
    case 1:Message(10);                            //按员工的工号查询
        StringInput(str,5);
         i=Locate(tp,no,str,2);
         if(i==-1)    {    NoFound(4);    goto End;    }
         else
         {
            Message(11);                        //提示已经找到查找的员工的信息
             PrintHeader();
               PrintData(tp[i]);
         }break;
    case 2:Message(9);                            //按员工的名字查询
        StringInput(str,6);
         i=Locate(tp,no,str,1);
         if(i==-1)    {    NoFound(4);    goto End;    }
         else
         {
            Message(11);
             PrintHeader();
               PrintData(tp[i]);
         }break;
    }
End:;
}
/*================================函数分隔线====================================*/
void Modify(ZGGZ tp[],int n)                    //函数用于在数组tp中修改记录元素
{
    ZGGZ tmp;
    char str[20];
    int i=0,cho;                                //用于返回下标
    if(n==0)   
    {    NoFound(3);    goto End;    }
    Disp(tp,n);                                    //调用Disp函数显示所有的记录
    Message(8);
    cho=(int)NumberInput(2);                  //做个选择
    switch(cho)
    {
        case 1:
        {
        Message(10);
        StringInput(str,5);
        i=Locate(tp,n,str,2);
        if(i==-1)   
        {
            NoFound(3);
            goto End;
        }
        else
        {
            Message(11);
            PrintHeader();
            PrintData(tp[i]);
            tmp.jbgz=NumberInput(3);
            tmp.jj=NumberInput(4);
            tmp.kk=NumberInput(5);
            Message(3);
            if(YesOrNo()==1)   
            {
                tp[i].jbgz=tmp.jbgz;
                tp[i].jj=tmp.jj;
                tp[i].kk=tmp.kk;
                JiSuan(&tp[i]);
                Saveflag=1;
            }
            else goto End;
            PrintHeader();
            PrintData(tp[i]);
        }
        }break;
        case 2:
        {
        Message(9);
        StringInput(str,6);
        i=Locate(tp,n,str,1);
        if(i==-1)   
        {
            NoFound(3);
            goto End;
        }
        else
        {
            Message(11);
            PrintHeader();
            PrintData(tp[i]);
            tmp.jbgz=NumberInput(3);
            tmp.jj=NumberInput(4);
            tmp.kk=NumberInput(5);
            Message(3);
            if(YesOrNo()==1)   
            {
                tp[i].jbgz=tmp.jbgz;
                tp[i].jj=tmp.jj;
                tp[i].kk=tmp.kk;
                JiSuan(&tp[i]);
                Saveflag=1;
            }
            else goto End;
            PrintHeader();
            PrintData(tp[i]);
        }
        }break;
    }
End:;
}
/*================================函数分隔线====================================*/
int Insert(ZGGZ tp[],int n)              //函数用于在数组tp中插入记录,并返回数组中的当前记录数
{
    char str[10];
    int l=0,m=0,i=0;
    Disp(tp,n);   
    ZGGZ tmp;
    if(n==0)
    {    NoFound(3);    goto End;    }
    while(1)
    {
        do
        {
            do
            {
            if(m>0)    Wrong(2);
            Message(22);
            fflush(stdin);
            gets(str);
            l=strlen(str);
            m++;
            }
            while(l>=8);
            i=Locate(tp,n,str,2);
            if(i==-1)
            {
                NoFound(3);
                Message(18);
                if(YesOrNo()==0)    goto End;
                else continue;
            }
        }
        while(i==-1);
        if((i>=0)&&(i<n))    Message(11);
        Message(17);
        StringInput(tmp.num,5);
        for(int mi=0;mi<n;mi++)
            if(strcmp(tmp.num,tp[mi].num)==0)
            {
                Wrong(4);
                goto End;
            }
        StringInput(tmp.name,6);
        tmp.jbgz=NumberInput(3);
        tmp.jj=NumberInput(4);
        tmp.kk=NumberInput(5);
        Message(3);
        if(YesOrNo()==1)
        {
            for(int t=n;t>i;t--)
            {
                strcpy(tp[t].num,tp[t-1].num);
                strcpy(tp[t].name,tp[t-1].name);
                tp[t].jbgz=tp[t-1].jbgz;
                tp[t].jj=tp[t-1].jj;
                tp[t].kk=tp[t-1].kk;
                tp[t].yfgz=tp[t-1].yfgz;
                tp[t].sk=tp[t-1].sk;
                tp[t].sfgz=tp[t-1].sfgz;
            }
        strcpy(tp[t].num,tmp.num);
        strcpy(tp[t].name,tmp.name);
        tp[i].jbgz=tmp.jbgz;
        tp[i].jj=tmp.jj;
        tp[i].kk=tmp.kk;
        JiSuan(&tp[i]);
        Saveflag=1;
        Message(21);
        n++;
        }
        else goto End;
        Disp(tp,n);   
        Message(19);
        if(YesOrNo()==0)    goto End;
    }
End:return n;
}
/*================================函数分隔线====================================*/
void Sort(ZGGZ tp[],int n)                //函数用于在数组tp中完成利用冒泡排序法实现数组的按实发工资字段的降序排序
{
    int j,i;
    ZGGZ tmp;
    if(n==0)   
    {    NoFound(3);    goto    End;    }
    if(n==1)   
    {    Message(20);goto    End;    }
    Message(16);
    for(j=0;j<n-1;j++)
    {
        for(i=0;i<n-1-j;i++)
            if(tp[i].sfgz<tp[i+1].sfgz)
            {
                strcpy(tmp.num,tp[i].num);                   //交换工号
                strcpy(tp[i].num,tp[i+1].num);
                strcpy(tp[i+1].num,tmp.num);
                strcpy(tmp.name,tp[i].name);            //交换姓名
                strcpy(tp[i].name,tp[i+1].name);           
                strcpy(tp[i+1].name,tmp.name);
                tmp.jbgz=tp[i].jbgz;                    //交换基本工资
                tp[i].jbgz=tp[i+1].jbgz;
                tp[i+1].jbgz=tmp.jbgz;
                tmp.jj=tp[i].jj;                        //交换奖金
                tp[i].jj=tp[i+1].jj;
                tp[i+1].jj=tmp.jj;
                tmp.kk=tp[i].kk;                        //交换扣款
                tp[i].kk=tp[i+1].kk;
                tp[i+1].kk=tmp.kk;
                tmp.yfgz=tp[i].yfgz;                    //交换应发工资
                tp[i].yfgz=tp[i+1].yfgz;
                tp[i+1].yfgz=tmp.yfgz;
                tmp.sk=tp[i].sk;                        //交换税款
                tp[i].sk=tp[i+1].sk;
                tp[i+1].sk=tmp.sk;
                tmp.sfgz=tp[i].sfgz;                    //实发工资
                tp[i].sfgz=tp[i+1].sfgz;
                tp[i+1].sfgz=tmp.sfgz;
            }
    }
End:Disp(tp,n);
}
/*================================函数分隔线====================================*/
void Message(int n)                   ///函数用于显示提示语句
{
    BoFang(19);
    switch(n)
    {
    case 0:printf("\t 请按下回车键以继续:\t");    fflush(stdin);    getchar();    break;
    case 1:printf("\t 程序正在努力打开员工工资记录文件!\n");        break;
    case 2:printf("\t 提示:请问您是否要创建新的工资记录?\n\t 请输入Y或N:");    break;
    case 3:printf("\n\t 提示:请问您是否要保存您刚才所做的更改?\n\t 请输入Y或N:");    break;
    case 4:printf("\n\t 提示:您确定要退出本员工工资管理系统吗?\n\t 请输入Y或N:");    break;
    case 5:printf("\n\t 提示:请您输入员工的工号:");        break;
    case 6:printf("\n\t 提示:请您输入员工的姓名:");        break;
    case 7:printf("\n\t 提示:新的员工工资信息已成功录入!\n");    break;
    case 8:printf("\n\t 提示:请问您是要:\n\t\t1,按工号查询:\n\t\t2,按名字查询\n");    break;
    case 9:printf("\n\t 提示:您已经选择了按员工的名字查询!\n");    break;
    case 10:printf("\n\t 提示:您已经选择了按员工的工号查询!\n");    break;
    case 11:printf("\n\t 提示:已经找到您要查找的员工的信息!\n");        break;
    case 12:printf("\n\t 提示:输入0可返回主菜单。\n");            break;
    case 13:printf("\n\t 提示:您确定要删除这名员工的所有信息吗?\n\t 请输入Y或N:");    break;
    case 14:printf("\n\t 提示:该员工的所有信息已成功删除!\n");    break;
    case 15:printf("\n\t 提示:系统正在对所有员工信息进行统计中!请稍候……\n");    break;
    case 16:printf("\n\t 提示:系统正在对所有员工信息进行排序中!请稍候……\n");    break;
    case 17:printf("\n\t 提示:请您输入新员工的信息:\n");        break;
    case 18:printf("\n\t 提示:请问您是否要重新输入正确的信息?\n\t 请输入Y或N:");    break;
    case 19:printf("\n\t 提示:操作已成功完成!是否继续?\n\t 请输入Y或N:");    break;
    case 20:printf("\n\t 提示:总共只有一个记录,无需排序!\n");    break;
    case 21:printf("\n\t 提示:系统已经成功保存所有的员工记录!\n");    break;
    case 22:printf("\n\t 提示:请您输入将要在其前面插入的员工的工号:");        break;
    case 23:printf("\n\t 提示:请您输入将要修改的员工的信息:");        break;
    }
}
/*================================函数分隔线====================================*/
void Wrong(int n)                           //函数用于显示错误语句
{
    BoFang(21);
    switch(n)
    {
    case 1:printf("\t您的输入有误,请重新输入:\n");    break;
    case 2:printf("\t您输入的字符数太多!请重新输入:\n");    break;
    case 3:printf("\t您输入的员工工号已经存在!是否重新输入?\n\t 请输入Y或N:");    break;
    case 4:printf("\t您输入的员工工号已经存在!正在返回主菜单!\n");    break;
    }
}
/*================================函数分隔线====================================*/
void NoFound(int n)                        //函数用于显示未找到提示语句
{
    BoFang(11);
    switch(n)
    {
    case 1:printf("\t没有找到员工工资管理系统的历史记录文件!\n\n");    break;
    case 2:printf("\t没有找到公司员工的信息,无项目可显示!\n");    break;
    case 3:printf("\t没有找到公司员工的信息,无法进行操作!\n");    break;
    case 4:printf("\t没有找到公司员工的信息,正在返回主菜单!\n");    break;
    }
}
/*================================函数分隔线====================================*/
void FunTitle(int m)
{
    switch(m)
    {
            case 1:printf("\t您选择的功能是==>输入员工工资记录\n");    break;
            case 2:printf("\t您选择的功能是==>查询员工工资记录\n");    break;
            case 3:printf("\t您选择的功能是==>修改员工工资记录\n");    break;
            case 4:printf("\t您选择的功能是==>插入员工工资记录\n");    break;
            case 5:printf("\t您选择的功能是==>删除员工工资记录\n");    break;
            case 6:printf("\t您选择的功能是==>员工工资从大到小排序\n");    break;
            case 7:printf("\t您选择的功能是==>统计工资各等级人数\n");    break;
            case 8:printf("\t您选择的功能是==>显示员工工资记录表\n");    break;
            case 9:printf("\t您选择的功能是==>保存工资记录至文件\n");    break;
            case 0:printf("\t您选择的功能是==>退出本工资管理系统\n");    break;
    }
}
/*================================函数分隔线====================================*/
void Huang(char str[],int max,int ciShu)   //通过输出空格的数量控制位置,通过cls刷屏命令来清除上次的显示,达到移动效果
{
    for(int n=0;n<ciShu;n++)                        //ciShu为在屏幕上来回的次数,
    {
        for(int i=0;i<max;i++)
        {
            system("cls");                          //Dos命令—刷屏,后移
            for(int n=0;n<i;n++)    printf(" ");
            printf("%s",str);
        }
        for(i=max-1;i>0;i--)
        {
            system("cls");                          //Dos命令—刷屏,前移
            for(int n=0;n<i;n++)    printf(" ");
            printf("%s",str);
        }
    }
}
/*================================函数分隔线====================================*/
void Menu()
{                                                                 //显示主菜单
    printf("\t\t\t    员 工 工 资 管 理 系 统\n");
    printf("\t ***************************主菜单***************************\n");
    printf("\t *  1,输入员工工资记录              6,对员工工资记录排序  *\n");
    printf("\t *  2,查询员工工资记录              7,统计工资各等级人数  *\n");
    printf("\t *  3,修改员工工资记录              8,显示员工工资记录表  *\n");
    printf("\t *  4,插入员工工资记录              9,保存工资记录至文件  *\n");
    printf("\t *  5,删除员工工资记录              0,退出本工资管理系统  *\n");
    printf("\t ************************************************************\n");
    printf("\n");
}
/*================================函数分隔线====================================*/
void PrintHeader()                      //函数用于在以表格形式显示,打印输出表头信息
{
    printf("\t\t\t  员 工 工 资 记 录 表\n");
    printf("_____________________________________________________________________________\n");
    printf("|员工编号|员 工 姓 名 |基本工资|员工奖金|员工扣款|应发工资|员工税款|实发工资|\n");
    printf("|________|____________|________|________|________|________|________|________|\n");
}
/*================================函数分隔线====================================*/
void PrintData(ZGGZ pp)    //函数用于以表格显示的方式,打印输出单个数组元素中的记录信息
{
    JiSuan(&pp);
    printf("|%8s|%12s|%8.1f|%8.1f|%8.1f|%8.1f|%8.1f|%8.1f|\n",pp.num,pp.name,pp.jbgz,pp.jj,pp.kk,pp.yfgz,pp.sk,pp.sfgz);
    printf("|________|____________|________|________|________|________|________|________|\n");
}
/*================================函数分隔线====================================*/
void TongJi(ZGGZ tp[],int n)               //函数用于在数组tp中完成记录的统计工作,统计该公司职工工资的整体分布情况
{
    int c[11]={0};
    char *p[11]={"1 万 以 上","9 千 至 1 万","8 千 至 9 千","7 千 至 8 千","6 千 至 7 千","5 千 至 6 千","4 千 至 5 千","3 千 至 4 千","2 千 至 3 千","1 千 至 2 千","1 千 以 下"};
    int m,i;
    if(n==0)   
    {    NoFound(3);    goto End;    }
    Disp(tp,n);
    Message(15);
    float sfgz;
    for(i=0;i<n;i++)
    {
        sfgz=tp[i].sfgz;
        if(sfgz>10000)                    {c[0]++;    }
        if((sfgz>9000)&&(sfgz<=10000))    {c[1]++;    }
        if((sfgz>8000)&&(sfgz<=9000))    {c[2]++;    }
        if((sfgz>7000)&&(sfgz<=8000))    {c[3]++;    }
        if((sfgz>6000)&&(sfgz<=7000))    {c[4]++;    }
        if((sfgz>5000)&&(sfgz<=6000))    {c[5]++;    }
        if((sfgz>4000)&&(sfgz<=5000))    {c[6]++;    }
        if((sfgz>3000)&&(sfgz<=4000))    {c[7]++;    }
        if((sfgz>2000)&&(sfgz<=3000))    {c[8]++;    }
        if((sfgz>1000)&&(sfgz<=2000))    {c[9]++;    }
        if(sfgz<=1000)                    {c[10]++;    }
    }
    printf("\t\t员工工资分布情况统计表\n");
    printf("_____________________________________________________________________________\n");
    printf("| 员 工 工 资 金 额 分 布 区 间|符 合 的 员 工 数| 员 工 总 数 | 百    比 |\n");
    printf("|______________________________|_________________|_____________|____________|\n");
    for(m=0;m<11;m++)
    {
    printf("|%21s         |%10d       |%8d     |%7.1f%%    |\n",p[m],c[m],n,(float)100.0*c[m]/n);
    printf("|______________________________|_________________|_____________|____________|\n");
    }
End:;
}
/*================================函数分隔线====================================*/
 BoFang(int s)
{
    switch(s)
    {
    case 1:PlaySound(TEXT("C:\\WINDOWS\\Media\\chimes.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 2:PlaySound(TEXT("C:\\WINDOWS\\Media\\chord.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 3:PlaySound(TEXT("C:\\WINDOWS\\Media\\ding.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 4:PlaySound(TEXT("C:\\WINDOWS\\Media\\notify.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 5:PlaySound(TEXT("C:\\WINDOWS\\Media\\recycle.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 6:PlaySound(TEXT("C:\\WINDOWS\\Media\\ringin.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 7:PlaySound(TEXT("C:\\WINDOWS\\Media\\ringout.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 8:PlaySound(TEXT("C:\\WINDOWS\\Media\\start.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 9:PlaySound(TEXT("C:\\WINDOWS\\Media\\tada.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 10:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 菜单命令.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 11:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 错误.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 12:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 打印结束.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 13:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 弹出窗口已阻止.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 14:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 登录音.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 15:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 电池不足.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 16:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 电池电力严重短缺.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 17:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 电话拨出声.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 18:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 电话拨入声.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 19:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 叮当声.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 20:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 关机.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 21:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 关键性终止.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 22:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 还原.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 23:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 回收.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 24:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 惊叹号.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 25:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 开始.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 26:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 默认值.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 27:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 启动.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 28:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 气球.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 29:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 通知.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 30:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 信息栏.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 31:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 硬件插入.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 32:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 硬件故障.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 33:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 硬件删除.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 34:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 注销音.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    case 35:PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 最小化.wav"),NULL,SND_FILENAME|SND_SYNC);break;
    }
}
/*================================函数分隔线====================================*/
搜索更多相关主题的帖子: 姓名 
2011-04-26 11:59
小琴一一
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-26
收藏
得分:0 
自己顶上去先~~~

运行总是说CL.EXE错误,在网上也查询了不少,但是还是没有解决成功

我是虚拟机里的vc6.0,重新装过了VC,还是不行~
2011-04-26 12:03
jiangliminga
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2011-4-2
收藏
得分:3 
这么长的C 仰慕
2011-04-26 15:13
吴军林
Rank: 2
等 级:论坛游民
帖 子:14
专家分:12
注 册:2011-4-19
收藏
得分:3 
真牛逼,这么长的程序,一下子看不出来思路来。。。。
2011-04-26 15:33
帅的让人抽
Rank: 4
来 自:安徽
等 级:业余侠客
帖 子:94
专家分:224
注 册:2010-9-30
收藏
得分:3 
小弟,你牛……

樱花下落的速度依然是秒速五厘米,即使发了一千次短信,
心与心之间也只能靠近一厘米……
2011-04-26 16:24
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:3 
要告诉编译器需要连接 winmm 库
2011-04-26 16:43
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:3 
可以试下调试工具调试
2011-04-26 17:22
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 7楼 kelas
都没办法连接,怎么调试
2011-04-26 17:25
小琴一一
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-26
收藏
得分:0 
错误已经找出,少了一个VOID申明~~~~~~~~~~~~~~~
2011-04-26 18:07
冷火
Rank: 2
等 级:论坛游民
帖 子:16
专家分:12
注 册:2010-10-4
收藏
得分:0 
嗯,bofang那里、。。。
2011-04-26 20:38
快速回复:这里有一个c程序,但是运行不成功,希望大虾可以帮助~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027521 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved