标题:求教大神 C语言程序出错怎么修改啊 组建为什么出错编译没错啊
只看楼主
寂寞围城
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-12-25
结帖率:100%
 问题点数:0 回复次数:3 
求教大神 C语言程序出错怎么修改啊 组建为什么出错编译没错啊
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

#define N 100

struct employee//职工基本情况
{
int num;       //工号
char name[10];     //姓名
int sex;    //性别
int position;      //职位
int age;           //年龄
int cult;          //学历
int salary;        //工资
int state;         //健康情况
long tel;    //联系电话
char adr[50];   //住址
}em[N];

int num[N]={0};
struct employee newem;
void mainmenu();    //主菜单
void input();     //输入模块
void display();     //显示模块

void del();      //删除模块
void add();      //添加模块
void count();     //统计模块

void change();     //修改模块
int changeposition();   //修改职位
int changecult();    //修改学历
int changesalary();    //修改工资
int changestate();    //修改身体状况
void changmany();    //修改多项信息
void print();     //打印函数

void select();     //查询模块
void numselect();    //按工号查询
void nameselect();    //按姓名查询
void cultselect();    //按学历查询
void positionselect();   //按职位查询
void stateselect();    //按身体状况查询
void sexselect();    //按性别查询
void ageselect();    //按年龄区间查询
void salaryselect();   //按工资区间查询

void paixu();     //排序模块
void numpx();     //按工号排序  
void cultpx();     //按学历排序
void positionpx();    //按职位排序
void statepx();     //按身体状况排序
void agepx();     //按年龄排序
void salarypx();    //按工资排序


void main()      //主函数
{
char password[7]="1";
    char s[7];
    int flag=0;
    int n=3;
system("mode con: lines=100 cols=120 ");
do
{
   printf("请你输入密码:\n");
   scanf("%s",s);
   if(!strcmp(s,password))    //若密码正确
    {
     printf("恭喜你成功登陆了\n\n\n");
     flag=1;
     break;
    }
   else
   {
   printf("输入有错误请重新输入:\n");
   n--;
   }
}while(n>0);
if(!flag)
{
   printf("你的输入次数已到再见\n");
   exit(0);
}
printf("请按任意键继续!\n");
getch();
mainmenu();

}


void mainmenu()       //主菜单
{
int choicemanage=0;
while(1)
{
   system("cls");
   printf("\t\t欢迎进入职工信息管理系统\n");
   printf("\t\t============================\n");
   printf("\t\t请你选择操作类型:\n");
   printf("\t\t1输入职工信息\n");
   printf("\t\t2显示职工信息\n");
   printf("\t\t3查询职工信息\n");
   printf("\t\t4修改职工信息\n");
   printf("\t\t5追加一个职工信息\n");
   printf("\t\t6删除一个职工信息\n");
   printf("\t\t7统计职工信息\n");
   printf("\t\t8对职工信息进行排序\n");
   printf("\t\t0退出\n");
   printf("\t\t===========================\n");
   scanf("%d",&choicemanage);
switch(choicemanage)
{
case 1:
   input();   //输入职工信息
   break;
case 2:
   display(); //显示职工信息
   break;
case 3:
   select();   //查询职工信息
   break;
case 4:
   change(); //修改职工信息
      break;
case 5:
   add();   //追加一个职工信息
   break;
case 6:
   del();   //删除一个职工信息
   break;
case 7:
   count();   //统计职工信息
   break;
case 8:
   paixu();   //对职工信息进行排序
   break;
case 0:
   printf("谢谢你的使用再见\n");
   exit(0);
default:
   printf("你的输入有错请重新输入\n");
}
}
      

}

void input()        //输入模块
{
FILE *fp;
int k,j,flag=0,i=0;
char choice;
system("cls");
if((fp=fopen("employee.txt","w"))==NULL)
   exit(0);
srand(time(NULL));
while(1)
{
   i++;
   system("cls");
   printf("第%d个职工\n",i);
   printf("\n");
   do
   {
   em[i].num=rand()%6000+2000; //自动生成工号
   for(j=0;num[j];j++)
   {
    if(num[j]==em[i].num)
    {
     flag=1;
     break;
    }
   }
   if(flag!=1)
   {
    num[i]=em[i].num;
    break;
   }
  
   }while(1);
   printf("工号:%d\n",num[i]);
   printf("请输入姓名:\n"); //输入姓名
   scanf("%s",em[i].name);
   printf("\n");
   do
   {
   printf("请选择性别以1为男2为女:\n"); //输入性别
   scanf("%d",&k);
   if(k>=1&&k<=2)
   {
    em[i].sex=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
   }while(1);
   printf("\n");
   do
   {
   printf("请选择职位1.董事长2.总经理3.副总经理4.经理5.副经理6.秘书7.技术员8.领班9.普通员工:\n");//输入职位
   scanf("%d",&k);
   if(k>=1&&k<=9)
   {
    em[i].position=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
   }while(1);
   printf("\n");
   printf("请输入年龄:");
   scanf("%d",&em[i].age);
   printf("\n");
   do
   {
   printf("请选择文化程度1为专家2为博士3为硕士4为学士5为其他:\n");//输入文化程度
   scanf("%d",&k);
   if(k>=1&&k<=5)
   {
    em[i].cult=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
   }while(1);
   printf("\n");
   printf("请输入工资:\n");//输入工资
   scanf("%d",&em[i].salary);
   printf("\n");
   do
   {
   printf("请你选择身体情况1好2为一般3为差:\n");//身体情况
   scanf("%d",&k);
   if(k>=1&&k<=3)
   {
    em[i].state=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
   }while(1);
   printf("\n");
   printf("请输入联系电话:");
   scanf("%ld",&em[i].tel);
   printf("\n");
   printf("请输入地址:");
   scanf("%s",em[i].adr);
   printf("\n");
   fwrite(&em[i],sizeof(struct employee),1,fp);
   printf("是否继续输入?(y/n)\n");
   scanf("%s",&choice);
   if(choice=='n'||choice=='N')
    break;
}

fclose(fp);
if((fp=fopen("num.txt","w"))==NULL)
   exit(0);
for(i=0;num[i];i++)
   fwrite(&num[i],sizeof(int),1,fp);
fclose(fp);
printf("输入完毕,任意键返回\n");
getch();

      
}

void display()       //显示职工信息
{
FILE *fp;
int i;
system("cls");
if((fp=fopen("employee.txt","r+"))==NULL)
{
   printf("文件不存在或为空,请先输入员工信息!\n");
   mainmenu();
}

printf("输出结果:\n");
printf("工号 \t姓名 \t年龄 \t性别 \t职位\t \t文化程度 \t身体情况 \t工资 \t电话 \t住址\n");
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)

{
  
   print(em[i]);

}
   printf("完毕按任意键返回\n");
   getch();
   fclose(fp);

}

void change()       //修改模块
{
FILE *fp;
int i,k,l=0;
int chnum;
int choicechange;
system("cls");
printf("请你输入要修改的人的工号:\n");
scanf("%d",&chnum);
if((fp=fopen("employee.txt","r+"))==NULL)
{
   printf("不能够打开这个文件\n");
   exit(0);
}
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
   ;
k=i;
fclose(fp);

if((fp=fopen("employee.txt","w+"))==NULL)
{
   printf("不能够打开这个文件\n");
   exit(0);
}

for(i=0;i<k;i++)
{
   if(chnum==em[i].num)
   {
    l=1;
    printf("这是你要修改的人的信息\n");
    printf("工号 \t姓名 \t年龄 \t性别 \t职位\t \t文化程度 \t身体情况 \t工资 \t电话 \t住址\n");
    print(em[i]);
    printf("------------------------------------------------------------\n");
    printf("请选择要修改的部分:\n");
    printf("\t\t===============================\n");
    printf("\t\t1仅修改职位\n");
    printf("\t\t2仅修改文化程度\n");
    printf("\t\t3仅修改工资\n");
    printf("\t\t4仅修改身体情况\n");
    printf("\t\t5修改多项\n");
    printf("\t\t0返回主菜单\n");
    printf("\t\t============================\n");
    printf("请选择\n");
    scanf("%d",&choicechange);
    switch(choicechange)
    {
    case 1:
     em[i].position=changeposition();
     break;
    case 2:
     em[i].cult=changecult();
     break;
    case 3:
     em[i].salary=changesalary();
     break;
    case 4:
     em[i].state=changestate();
     break;
    case 5:
     newem=em[i];
     changmany();
       em[i]=newem;
     break;
    case 0:
     mainmenu();
    default :
    printf("输入有错误");
    }
  
   }
   fwrite(&em[i],sizeof(struct employee),1,fp);
}
fclose(fp);
if(l==0)
{printf("该员工不存在,请查证后再输入!\n");
select();
}
else
printf("操作完成按任意键返回主菜单\n");
getch();

}

int changeposition()
{
int newposition;
printf("请选择新职位1为董事长2为总经理3为副总经理4为经理5为副经理6为秘书7为技术员8为领班9为普通员工:\n");
scanf("%d",&newposition);
return(newposition);
}

int changecult()
{
int newcult;
printf("请选择新的文凭1为专家2为博士3为硕士4为学士5为其他:\n");
scanf("%d",&newcult);
return(newcult);
}

int changesalary()
{
int newsalary;
printf("请输入新的工资:\n");
scanf("%d",&newsalary);
return(newsalary);
}

int changestate()
{
int newstate;
printf("请选择现在的身体情况1好2为一般3为差:\n");
scanf("%d",&newstate);
return(newstate);
}
void changmany()
{
int k;
system("cls");
printf("请依次输入该员工的新信息\n");
do
{
   printf("请选择职位1.董事长2.总经理3.副总经理4.经理5.副经理6.秘书7.技术员8.领班9.普通员工:\n");//输入职位
   scanf("%d",&k);
   if(k>=1&&k<=9)
   {
    newem.position=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
}while(1);
   printf("\n");
   printf("请输入年龄:");
   scanf("%d",&newem.age);
   printf("\n");
do
{
   printf("请选择文化程度1为专家2为博士3为硕士4为学士5为其他:\n");//输入文化程度
   scanf("%d",&k);
   if(k>=1&&k<=5)
   {
    newem.cult=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
}while(1);
printf("\n");
printf("请输入工资:\n");//输入工资
scanf("%d",&newem.salary);
printf("\n");
do
{
   printf("请你选择身体情况1好2为一般3为差:\n");//身体情况
   scanf("%d",&k);
   if(k>=1&&k<=3)
   {
    newem.state=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
}while(1);
printf("\n");
printf("请输入联系电话:");
scanf("%ld",&newem.tel);
printf("\n");
printf("请输入地址:");
scanf("%s",newem.adr);
printf("\n");

}

void add()//追加一个职工信息
{
struct employee emp;
FILE *fp;
int l,k,j,flag=0,i=0;
system("cls");
if((fp=fopen("num.txt","r+"))==NULL)
   exit(0);
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
   ;
l=i;
fclose(fp);
if((fp=fopen("employee.txt","ab+"))==NULL)
{
   printf("不能够打开这个文件\n");
   getch();
   exit(0);
}
printf("请你输入新人的内容:\n");
   srand(time(NULL));
do
{
   emp.num=rand()%6000+2000; //自动生成工号
   for(j=0;num[j];j++)
   {
    if(num[j]==emp.num)
    {
     flag=1;
     break;
    }
   }
   if(flag!=1)
   {
    num[l]=emp.num;
    l++;
    break;
   }
}while(1);

printf("请输入姓名:\n"); //输入姓名
scanf("%s",emp.name);
printf("\n");
do
{
   printf("请选择性别以1为男2为女:\n"); //输入性别
   scanf("%d",&k);
   if(k>=1&&k<=2)
   {
    emp.sex=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
}while(1);
printf("\n");
do
{
   printf("请选择职位1.董事长2.总经理3.副总经理4.经理5.副经理6.秘书7.技术员8.领班9.普通员工:\n");//输入职位
   scanf("%d",&k);
   if(k>=1&&k<=9)
   {
    emp.position=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
}while(1);
printf("\n");
printf("请输入年龄:");
scanf("%d",&emp.age);
printf("\n");
do
{
   printf("请选择文化程度1为专家2为博士3为硕士4为学士5为其他:\n");//输入文化程度
   scanf("%d",&k);
   if(k>=1&&k<=5)
   {
    emp.cult=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
}while(1);
printf("\n");
printf("请输入工资:\n");//输入工资
scanf("%d",&emp.salary);
printf("\n");
do
{
   printf("请你选择身体情况1好2为一般3为差:\n");//身体情况
   scanf("%d",&k);
   if(k>=1&&k<=3)
   {
    emp.state=k;
    break;
   }
   else
    printf("您的输入有误,请重新输入!\n");
}while(1);
printf("\n");
printf("请输入联系电话:");
scanf("%ld",&emp.tel);
printf("\n");
printf("请输入地址:");
scanf("%s",emp.adr);
printf("\n");
fwrite(&emp,sizeof(struct employee),1,fp);
rewind(fp);
fclose(fp);
if((fp=fopen("num.txt","w+"))==NULL)
   exit(0);
for(i=0;i<l;i++)
   fwrite(&num[i],sizeof(int),1,fp);
fclose(fp);

printf("插入完毕,按任意键返回\n");
getch();
}

void del()//删除一个职工信息
{
int i=0,j=0,l=0,k,b;
char choice;
int delnum;
FILE *fp;
if((fp=fopen("employee.txt","r+"))==NULL)
{
   printf("文件为空,不能够打开\n");
   printf("按任意键返回\n");
   getch();
   mainmenu();
}
printf("请你输入要删除的人的工号:\n");//删除的职工的信息
scanf("%d",&delnum);
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
   if(em[i].num==delnum)
   {
    j=i;
    l=1;
   }
}
k=i;
fclose(fp);
if(l==0)
{printf("该员工不存在!\n");
mainmenu();
}
printf("你要删除的职工信息为:\n");
printf("工号 \t姓名 \t年龄 \t性别 \t职位\t \t文化程度 \t身体情况 \t工资 \t电话 \t住址\n");
    print(em[j]);
printf("是否真的删除该职工信息[y/n]\n");
scanf("%s",&choice);
if(choice=='n'||choice=='N')
{
   printf("取消删除,按任意键返回主菜单!\n");
   getch();
   mainmenu();
}
if((fp=fopen("employee.txt","w+"))==NULL)
{
   printf("文件为空,不能够打开\n");
   printf("按任意键返回\n");
   getch();
   mainmenu();
}
for(i=0;i<k;i++)
   {
   if(i!=j)
   fwrite(&em[i],sizeof(struct employee),1,fp);
   }
fclose(fp);
if((fp=fopen("num.txt","r+"))==NULL)
   exit(0);
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
   ;
b=i;
fclose(fp);
if((fp=fopen("num.txt","w+"))==NULL)
   exit(0);
for(i=0;i<k;i++)
{
   if(num[i]!=delnum)
   fwrite(&num[i],sizeof(int),1,fp);
}
fclose(fp);

printf("删除成功,按任意键返回!\n");
getch();

}

void count()
{
FILE *fp;
int i=0;
int num=0;//总人数统计
int mnum=0,fnum=0;//性别人数统计
int zjnum=0,bsnum=0,ssnum=0,xsnum=0,othernum=0;//学位人数统计
int dsznum=0,zglnum=0,fzglnum=0,glnum=0,fglnum=0;//职位人数统计
int mishunum=0,jsynum=0,lbnum=0,ygnum=0;
system("cls");
if((fp=fopen("employee.txt","r+"))==NULL)
{
   printf("不能够打开这个文件\n");
   exit(0);
}
do
{
   fread(&em[i],sizeof(struct employee),1,fp);
   if(feof(fp))
    break;
   num++;
   if(em[i].sex==1)    //性别统计
    mnum++;
   if(em[i].sex==2)
    fnum++;
   if(em[i].cult==1)    //文凭统计
    zjnum++;
   if(em[i].cult==2)
    bsnum++;
   if(em[i].cult==3)
    ssnum++;
   if(em[i].cult==4)
    xsnum++;
   if(em[i].cult==5)
    othernum++;
   if(em[i].position==1)   //职位统计
    dsznum++;
   if(em[i].position==2)
    zglnum++;
   if(em[i].position==3)
    fzglnum++;
   if(em[i].position==4)
    glnum++;
   if(em[i].position==5)
    fglnum++;
   if(em[i].position==6)
    mishunum++;
   if(em[i].position==7)
    jsynum++;
   if(em[i].position==8)
    lbnum++;
   if(em[i].position==9)
    ygnum++;
   i++;
}while(1);
printf("总人数为%d\n",num);
printf("=======性别分类========\n");
printf("男人数为%d\n",mnum);
printf("女人数为%d\n",fnum);
printf("========文凭分类========\n");
printf("专家数为%d\n",zjnum);
printf("博士数为%d\n",bsnum);
printf("硕士数为%d\n",ssnum);
printf("学士数为%d\n",xsnum);
printf("其他的数为%d\n",othernum);
printf("========职位分类===========\n");
printf("董事长数为%d\n",dsznum);
printf("总经理数为%d\n",zglnum);
printf("副总经理数为%d\n",fzglnum);
printf("经理数为%d\n",glnum);
printf("副经理数为%d\n",fglnum);
printf("秘书数为%d\n",mishunum);
printf("技术员数为%d\n",jsynum);
printf("领班人数为%d\n",lbnum);
printf("普通员工数为%d\n",ygnum);

printf("统计完毕,按任意键返回\n");
getch();
fclose(fp);

}

搜索更多相关主题的帖子: employee position 联系电话 include C语言 
2015-01-04 15:16
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
太长了

貌似以下3个函数 只有声明 没有实现  链接时自然找不到入口点

 error LNK2001: 无法解析的外部符号 _print
1>w9.obj : error LNK2001: 无法解析的外部符号 _paixu
1>w9.obj : error LNK2001: 无法解析的外部符号 _select

DO IT YOURSELF !
2015-01-04 15:31
寂寞围城
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-12-25
得分:0 
回复 2楼 wp231957
大神你好,能讲解的详细些吗?不太理解,你能把程序修改些吗?亲,是不是缺少排序的模块,谢谢大神,我是屌丝男
2015-01-04 20:55
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
我那么说你都不懂
难道说你的代码是抄的吗

如果是的话   你该干啥就干啥去
就当我啥都没说

DO IT YOURSELF !
2015-01-04 22:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-440677-1-1.html




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

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