回 帖 发 新 帖 刷新版面

主题:C语言职工工资管理系统设计编程题 跪求高手

我自己编了个  但是发现很多错误 求高手帮忙修改下 多谢多谢


题目:
职工工资管理系统设计
职工工资表包括:工号、姓名、基本工资、职务工资、岗位津贴、特殊津贴等。 
主要功能:
1、能够完成对职工工资的录入和修改
2、对职工工资进行排序
3、对职工工资进行查询
4、可以对职工号实施删除和添加





#include<stdio.h>
#include <stdlib.h>
#include<string.h> 
struct worker_list{
    int gh;
    char name[10];
    int jbgz;
    int zwgz;
    int gwjt;
    int tsjt;
}s[100];
int count=0;
void new_worker(struct worker_list worker[]);
void alter_worker(struct worker_list worker[]);
void sort_worker(struct worker_list worker[]);
void query_worker(struct worker_list worker[]);
void delete_worker(struct worker_list worker[]);
void append_worker(struct worker_list worker[]);


int main(void)
{
    int choice;
    char name[10];
    struct worker_list worker[100];

    do{
        printf("职工工资管理系统功能选项:1:录入 2:修改 3:排序 4:查询 5:删除 6:修改 0:推出\n");
        printf("请选择功能");
        scanf("%d",&choice);
        switch(choice){
        case 1:
            new_worker(worker);
            break;
        case 2:
            alter_worker(worker);
            break;
        case 3:
            sort_worker(worker);
            break;
        case 4:
            query_worker(worker);
            break;
        case 5:
            delete_worker(worker);
            break;
        case 6:
            append_worker(worker);
            break;
        case 0: break;
        }    
    }while(choice!=0);
    printf("谢谢使用职工工资管理系统\n");
    return 0;
}

void new_worker(struct worker_list worker[])
{
    struct worker_list f;
    if(count==100)
    {
        printf("职工已满!\n");
        return;
    }
    printf("请输入新的工号:");
    scanf("%d",&f.gh);
    printf("请输入新职工姓名:");
    scanf("%s",f.name);
    printf("请基本工资:");
    scanf("%d",&f.jbgz);
    printf("请输入职务工资:");
    scanf("%d",&f.zwgz);
    printf("请输入岗位津贴:");
    scanf("%d",&f.gwjt);
    printf("请输入特殊津贴:");
    scanf("%d",&f.tsjt);
    worker[count]=f;
    count++;
}


void alter_worker(struct worker_list worker[])
{
    int i,j=-1,d,t;
    char m[20];
    printf("What's you want to Modify:");
    printf("1.工号      2.姓名");
    printf("Input your selection: ");
    scanf("%d",&i);
    if(i==1)
    {
        printf("Please input the name:");
        scanf("%s",&m);
        for(i=0;i<count;i++)
        if(strcmp(m,s.name)==0)
           j=i;
    }
    else if(i==2)
          {printf("Please input the gh:");
           scanf("%d",&d);
            for(i=0;i<count;i++)
            if(d==s.gh)
        j=i;
           }
    if(j==-1)
     printf("Not find!\n");
    else { printf("what's your want to modiy?");
    printf("1.工号      2.姓名");
    printf("3.基本工资     4.职务工资");
    printf("5.岗位津贴      6.特殊津贴");
    printf("Input your selection: ");
    scanf("%d",&t);
    switch(t)
    {    
        case 1:printf("change to:");scanf("%d",&s[j].gh);break;
        case 2:printf("change to:");scanf("%s",s[j].name);break;
        case 3:printf("change to:");scanf("%d",&s[j].jbgz);break;
        case 4:printf("change to:");scanf("%d",&s[j].zwgz);break;
        case 5:printf("change to:");scanf("%d",&s[j].gwjt);break;
        case 6:printf("change to:");scanf("%d",&s[j].tsjt);break;
    }
    }
}


void sort_worker(struct worker_list worker[]);
{
    int i,j,h;
    for(i=0;i<N-1;i++)
        for(j=i+1;j<N;j++)
            if(s.jbgz<s[j].jbgz)
            {
                h=s;
                s=s[j];
                s[j]=h;
            }
}


void query_worker(struct worker_list worker[]);
{
    int i,j[20]={-1},d,k,t=0;char m[20];
    printf("What's you want to Query:");
    printf("1.工号      2.姓名");
    printf("Input your selection: ");
    scanf("%d",&k);
    if(k==1)
    {
        printf("Please input the name:");
        scanf("%s",&m);
        for(i=0;i<N;i++)
        if(strcmp(m,s.name)==0)
        {
            j[t]=i;
            t=t+1;
        }
    }
    else if(k==2)
    {
        printf("Please input the gh:");
        scanf("%d",&d);
        for(i=0;i<N;i++)
        if(d==s.gh)
        {
            j[t]=i;
            t++;
        }
    }
    if(j[0]==-1&&t==0)
        printf("Not find!\n");
    if(j[0]!=-1&&t!=0)
        printf("工号   姓名  基本工资  职务工资  岗位津贴  特殊津贴\n");
        printf("%-9d %-10s%-10d%-10d%-10d%-10d%-10d",s[j].gh,s[j].name,s[j].jbgz,s[j].zwgz,s[j].gwjt,s[j].yfgz,s[j].tsgz);
    }
}



void delete_worker(struct worker_list worker[]);
{
    int i,j=-1,d;char m[20];
    printf("What's you want to Delete:");
    printf("1.工号      2.姓名");
    printf("Input your selection: ");
    scanf("%d",&i);
    if(i==1)
    {
        printf("Please input the name:");
        scanf("%s",&m);
        for(i=0;i<N;i++)
        if(strcmp(m,s.name)==0)
                j=i;
    }
    else if(i==2)
    {
        printf("Please input the gh:");
            scanf("%d",&d);
            for(i=0;i<N;i++)
            if(d==s.gh)
                    j=i;
    }
    if(j!=-1)
    {  
        N=N-1;
        for(i=j;i<=N&&j!=-1;i++)
        s=s[i+1];
    }      
    else if(j==-1)
    printf("Not find!\n");               
}


void append_worker(struct worker_list worker[]);
{  
    int n,i;
    printf("How many people you want to add:");
    scanf("%d",&n);N=n+N;
    printf("Now,please add them:\n");
    for(i=1;i<=n;i++)
     {
        printf("工号:");
        scanf("%d",&s[N-n-1+i].gh);
        printf("姓名:");
        scanf("%s",s[N-n-1+i].name);
        printf("基本工资:");
        scanf("%d",&s[N-n-1+i].jbgz);
        printf("职务工资:");
        scanf("%d",&s[N-n-1+i].zwgz);
        printf("岗位津贴:");
        scanf("%d",&s[N-n-1+i].gwjt);
        printf("特殊津贴:");
        scanf("%d",&s[N-n-1+i].tsjt);
    }
}

回复列表 (共6个回复)

沙发

请做好三件事:
把帖子直接发到C/C++讨论区
列举一下你目前遇到的错误,如果是编译错误帖上错误信息(如果是TC环境请换用wintc把错误先贴出来)
为你的代码写好必要的注释

板凳

worker[count]=f;
看到了这个问题。结构体是不能整体直接用赋值号相互赋值的,要逐成员赋过去或者用memcpy命令整块内存转过去

3 楼

很多函数里用到了N,扫了一下你的代码,你实际想用的应该是count吧

4 楼

void sort_worker(struct worker_list worker[]);
{
    int i,j,h;
    for(i=0;i<N-1;i++)
        for(j=i+1;j<N;j++)
            if(s.jbgz<s[j].jbgz)
            {
                h=s;
                s=s[j];
                s[j]=h;
            }
}
这段代码里除了上述问题之外还存在对s的误用,直接调用变量s的话是一个指针型变量,值同s[0]的地址,除了企图直接赋值结构体型变量,还企图进行未定义的类型强制转换(结构体类型和指针类型之间的隐式强制转换,这是一个未定义行为)

5 楼

建议你所有的scanf里的双引号都补一个空格,形如" %d"等等
scanf("%s",&m);
这句话是错的,你在传数组名的时候不用取地址了,数组名本身等同于指针类型

6 楼


万分感谢 哈哈 完成了

我来回复

您尚未登录,请登录后再回复。点此登录或注册