| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 574 人关注过本帖
标题:请求高手帮我修正程序!!!
只看楼主 加入收藏
jojpst007
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2009-10-29
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
请求高手帮我修正程序!!!
输入了员工信息后,按6保存退出,然后关掉,再进入运行,按5显示出来.在文件读入那里,读入信息异常!
请帮我改正下,我找不出答案!!!!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef struct //定义结构体
{
    int num;
    char name[30];
    char sex[10];
    int age;
    float salary;
    long int tel;
}emt;
emt em[N];
static int l=0;
int caidan();       //自定义菜单函数
int addem();            //自定义工资录入函数
int modifyem();         //自定义工资修改函数
int modify(int i);           
int delem();            //自定义成员删除函数
int del(int local);
int searchem();         //自定义查询函数
int printem();          //输出成员函数
int readFile();         //读取文件
int saveExit();         //保存退出文件
/*以下自定义函数设计*/
int caidan()
{
  int m=0;
  printf("**********工资管理程序*********\n");
  printf("1.员工录入\n");
  printf("2.工资修改\n");
  printf("3.删除员工\n");
  printf("4.查询员工\n");
  printf("5.显示所有员工\n");
  printf("6.保存并退出\n");
  printf("********************************\n");
  printf("请选择:");
  scanf("%d",&m);
  return m;
}
int addem()
{
    printf("职工号:");       //输入第一个成员的信息
    scanf("%d",&em[l].num);
    printf("姓名:");
    scanf("%s",&em[l].name);   
    printf("性别:");
    scanf("%s",&em[l].sex);
    printf("年龄:");
    scanf("%d",&em[l].age);
    printf("工资:");
    scanf("%f",&em[l].salary);
    printf("电话:");
    scanf("%ld",&em[l].tel);
    ++l;
    system("pause");
    return 1;                            //操作成功
}
int modifyem()  //判断符合修改工资的员工
{
  char name[30];
  int i;
  printf("输入要修改员工的名字:");
  scanf("%s",name);
  for(i=0;i<l;i++)
  {
    if(strcmp(em[i].name,name)==0)    //用来比较两字符串的大小
    modify(i);                     
  }
  system("pause");
  return 1;

}
int modify(int i)
{
  float salary;
  printf("其工资为:%.2f",em[i].salary);
  printf("\t输入要修改的工资:");
  scanf("%f",&salary);
  em[i].salary=salary;
  return 1;
}
int delem()//判断符合删除的员工
{
  char name[30];
  int i;
  printf("请输入要删除的人的名字:");
  scanf("%s",name);
  for(i=0;i<l;i++)
  {
    if(strcmp(em[i].name,name)==0)
   del(i);                     
  }
  system("pause");
  return 1;
}
int del(int local)
{
  int i;
  for(i=local;i<l;i++)
  {
     strcpy(em[i].name,em[i+1].name);//把后面所指的字符串复制到前面所指的数组中
     strcpy(em[i].sex,em[i+1].sex);
     em[i].num=em[i+1].num;
     em[i].salary=em[i+1].salary;
     em[i].age=em[i+1].age;
     em[i].tel=em[i+1].tel;
  }
  l--;
  printf("删除成功\n");
  return 1;
}
int searchem()//查询符合要求的员工并输出该员工信息
{
  char name[30];
  int i;
  printf("请输入要查询的员工的名字:");
  scanf("%s",&name);
  for(i=1;i<l;i++)
  {
    if(strcmp(em[i].name,name)==0)
    {
        printf("职工号\t姓名\t性别\t年龄\t工资\t\t电话\t\n");
        printf("%d\t%s\t%s\t%d\t%.2f\t\t%ld\t\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].salary,em[i].tel);                                    
    }                    
  }
  system("pause");
  return 1;
}
int printem()//输出所有员工的信息
{
  int i=1;
  printf("职工号\t姓名\t性别\t年龄\t工资\t\t电话\t\n");
  while(i<l)
  {
    printf("%d\t%s\t%s\t%d\t%.2f\t\t%ld\t\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].salary,em[i].tel);
    ++i;
  }
  getchar();
  getchar();
  return 1;   
}
int readFile()//读取文件
{
  FILE *fp=fopen("data.txt","a+");  
  int i=0;
  l=0;
  float salary;
  while(!feof(fp))
  {
          fscanf(fp,"%d\t",&em[i].num);
          fscanf(fp,"%s\t",em[i].name);
          fscanf(fp,"%s\t",em[i].sex);
          fscanf(fp,"%d\t",&em[i].age);
          fscanf(fp,"%f\t",&salary);
          fscanf(fp,"%ld\t",&em[i].tel);
          em[i].salary=salary;
          ++i;
          ++l;
  }
  fclose(fp);     
  printf("读入信息成功...\n\n");
  return 1;
}
int saveExit()//保存退出文件
{
  FILE *fp=fopen("data.txt","w");                 //以新建方式打开一个文件
  int i;
  fprintf(fp,"职工号\t姓名\t性别\t年龄\t工资\t\t电话\t\n"); //传送格式化输出到一个文件中
  for(i=1;i<l;i++)
  {
    fprintf(fp,"%d\t%s\t%s\t%d\t%.2f\t\t%ld\t\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].salary,em[i].tel);                     
  }
  fclose(fp);
  exit(0);               //结束程序
  return 1;
}
/*主函数调用设计*/
int main ()
{
  int i;
  readFile();
  while(1)
  {
    i=caidan();
    if(i==1)
    {
        addem();
        system("cls");
    }
    if(i==2)
    {
        modifyem();
        system("cls");
    }
    if(i==3)
    {
        delem();
        system("cls");
    }
    if(i==4)
    {
        searchem();
        system("cls");
    }
    if(i==5)
    {
        printem();
        system("cls");
    }
    if(i==6)
        saveExit();
  }
  system("pause");
  return 0;   
}
搜索更多相关主题的帖子: 请求 
2009-12-28 20:51
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:2 
太长了,看了一半就看不下去了
scanf("%s",&em[l].name);这句是不用取地址符的,name就是数组的首地址

qq7434391
2009-12-28 21:48
fqtb16
Rank: 7Rank: 7Rank: 7
来 自:上海
等 级:黑侠
帖 子:96
专家分:504
注 册:2009-12-28
收藏
得分:5 
编程风格不错,看的很舒服,
手边没编译环境,不让可以帮你调试看看
给你发一段自己写读取文件的操作,我一般都用的格式,对于此类的程序我都用链表来做的
Linklist file_open()  //在文件读出数据信息
{
    Linklist L=NULL;
    LNode *s,*r=NULL;
    FILE *fp;
    char buffer[1024];
    L=malloc(sizeof(LNode));
    L->prior=NULL;
    L->next=NULL;
    r=L;
    memset(buffer,'\0',1024);
    if((fp=fopen("list.rec","rb"))==NULL)
    {
        printf("Can not open the file\n");
        return 0;
    }
    while(fgets(buffer,1024,fp)!=NULL)
    {
        s=malloc(sizeof(LNode));
        sscanf(buffer,"%d %s %c %d ",
            &s->num,s->name,&s->sex,&s->age);
        r->next=s;
        s->prior=r;
        s->next=NULL;
        r=s;
        memset(buffer,'\0',1024);
    }
    if(r!=NULL)  r->next=NULL;
    fclose(fp);
    return L;
}

爱拼才会赢
2009-12-29 05:58
xu362726904
Rank: 6Rank: 6
等 级:侠之大者
帖 子:160
专家分:471
注 册:2009-6-18
收藏
得分:1 
int printem()//输出所有员工的信息
{
  int i=1;//i应该等于0
  printf("职工号\t姓名\t性别\t年龄\t工资\t\t电话\t\n");
  while(i<l)
  {
    printf("%d\t%s\t%s\t%d\t%.2f\t\t%ld\t\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].salary,em[i].tel);
    ++i;
  }
  getchar();
  getchar();
  return 1;   
}
2009-12-29 09:15
xu362726904
Rank: 6Rank: 6
等 级:侠之大者
帖 子:160
专家分:471
注 册:2009-6-18
收藏
得分:2 
int readFile()//读取文件
{
  FILE *fp=fopen("data.txt","a+");  
  int i=0;
  l=0;
  float salary;
//在这里给文件定位,你有一个 fprintf(fp,"职工号\t姓名\t性别\t年龄\t工资\t\t电话\t\n"),不需要将它读出来,用字符数组:char a[20];fgets(a,20,fp);
  while(!feof(fp))
  {
          fscanf(fp,"%d\t",&em[i].num);
          fscanf(fp,"%s\t",em[i].name);
          fscanf(fp,"%s\t",em[i].sex);
          fscanf(fp,"%d\t",&em[i].age);
          fscanf(fp,"%f\t",&salary);
          fscanf(fp,"%ld\t",&em[i].tel);
          em[i].salary=salary;
          ++i;
          ++l;
  }
  fclose(fp);     
  printf("读入信息成功...\n\n");
  return 1;
}
2009-12-29 09:18
jojpst007
Rank: 1
等 级:新手上路
帖 子:14
专家分:4
注 册:2009-10-29
收藏
得分:0 
郁闷~没得到解决
2009-12-30 18:47
快速回复:请求高手帮我修正程序!!!
数据加载中...
 
   



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

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