CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一个大型C语言作业

楼主xuxing13()2006-05-22 22:46:33 在 C/C++ / C语言 提问

不知道咋搞的,这个程序已没问题了,但是功能却不能全显示出来,且读的功能只能读出一个职工的信息,真是想破头脑出想不出来,望大侠帮帮我  
  #include   <conio.h>  
  #include   <stdio.h>  
  #include   <dos.h>  
  #include   <string.h>  
  #include   <stdlib.h>  
  struct   birth       /*出生年月日结构定义*/  
  {  
          int   year;  
          int   month;  
          int   day;  
  };  
  struct   address_str  
  {  
          char   address[60];  
          char   mobile[13];  
          char   family_tel[15];  
          char   mail[25];  
  };  
  struct   achieve  
  {  
          char   degree[20];  
          char   experience[1000];  
  };  
  struct   worker  
  {  
          int   number;  
          char   name[20];  
          char   sex;  
          char   nation[20];  
          struct   birth   birth;  
          struct   address_str   addr;  
          struct   achieve   achieve;  
  }workers[20];  
  FILE*fp;  
  int   a;  
  void   Data_load()  
  {  
          long   c;  
          fp=fopen("worker.txt",   "r+t")   ;  
          if(fp!=NULL)  
          {  
                  for(a=1;a<20;a++)  
                  {  
                          if(fgetc(fp)==EOF)  
                                  return;  
                          c=a-1;  
                          fseek(fp,   c*sizeof(struct   worker),   SEEK_SET);  
                          fread(&workers[a],   sizeof(struct   worker),   1,   fp);  
                          fclose(fp);  
                  }  
          }  
          else  
          {  
                  fp=fopen("worker.txt",   "w");  
                  fclose(fp);  
                  a=1;  
          }  
  }  
  void   Data_Show(int   b)  
  {  
          printf("\n\n\tNo:%3d\n",   workers[b].number);  
          getch();  
          printf("\n\n\tName:%-20s\n\tsex:%c\n\tnation:%s\n",   workers[b].name,   workers[b].sex,   workers[b].nation);  
          getch();  
          printf("\n\n\tBirthday(y/m/d):%4d%2d%2d",   workers[b].birth.year,   workers[b].birth.month,   workers[b].birth.day);  
          getch();  
          printf("\n\n\tAddress:%-60s\n\tMobile:%13d\n\tFamily_tel:%15d\n\tmail:%-25s\n",workers[b].addr.address,   workers[b].addr.mobile,   workers[b].addr.family_tel,   workers[b].addr.mail);  
          getch();  
          printf("\n\n\tDegree:%-20s\n\texperience:%-1000s\n",   workers[b].achieve.degree,   workers[b].achieve.experience);  
          getch();  
  }  
  void   Data_Input(int   b)  
  {  
          fflush(stdin);  
          workers[b].number   =   b;  
          printf("\n\n\tNo%d   record",   b);  
          printf("\n\n\tName:");  
          rewind(stdin);  
          scanf("%s",   &workers[b].name);  
          rewind(stdin);  
          printf("\n\tnation:");  
          scanf("%s",   &workers[b].nation);  
          rewind(stdin);  
          printf("\n\n\tsex(m/f):");  
          scanf("%c",   &workers[b].sex);  
          rewind(stdin);  
          printf("\n\n\tbirthday:");  
          printf("\n\n\tyear:");  
          scanf("%d",   &workers[b].birth.year);  
          printf("\n\n\tmonth:");  
          scanf("%d",   &workers[b].birth.month);  
          printf("\n\n\tday:");  
          scanf("%d"   ,   &workers[b].birth.day);  
          printf("\n\n\taddress:");  
          scanf("%s",   workers[b].addr.address);  
          getchar();  
          printf("\n\n\tmobile:");  
          scanf("%c",   &workers[b].addr.mobile);  
          getchar();  
          printf("\n\n\tfamily_tel:");  
          scanf("%c",   &workers[b].addr.family_tel);  
          getchar();  
          printf("\n\n\tmail:");  
          scanf("%c",     &workers[b].addr.mail);  
          getchar();  
          printf("\n\n\tdegree:");  
          scanf("%s",   &workers[b].achieve.degree);  
          getchar();  
          printf("\n\n\texperience:");  
          scanf("%s",   &workers[b].achieve.experience);  
  }  
  void   Data_Save()  
  {  
          int   b;  
          fp=fopen("worker.txt",   "w");  
          for(b=1;   b<=a;   b++)  
          {  
                  fwrite(&workers[b],   sizeof(struct   worker),   1,   fp);  
          }  
          fclose(fp);  
  }  
  void   main()  
  {  
          int   b,   c;  
          char   ch,   name[20];  
          char   *search_name=name;  
          clrscr();  
          Data_load();  
          a--;  
          printf("\n\n\tFunction   choose:");  
          printf("\n\t1.Read");  
          printf("\n\t2.Append");  
          printf("\n\t3.Delete");  
          printf("\n\t4.Search");  
          printf("\n\t5.Insert");  
          printf("\n\t6.Save   and   exit");  
          printf("\n\t7,   Quit");  
          printf("\n\n");  
          printf("\t   choice:");  
          scanf("%c",   &ch);  
          switch(ch)  
          {  
          case   '1':  
                  b   =   1;  
                  while   (getch()!=0x1b   &&   b<=a)   Data_Show(b++);  
                  if   (b   >   a)  
                          printf("\n\tEnd   of   e_note\n");  
                  break;  
          case   '2':  
                  b   =   2;  
                  while   (getch()!=0x1b   &&   b<20)  
                  {  
                          a++;Data_Input(a);  
                  }  
                  if   (a   ==   20)  
                          printf("\n\te_note   is   filled\n");  
                  break;  
          case   '3':  
                  if(a<1)  
                  {  
                          printf("\n\tPlease   Append   record\n");  
                          break;  
                  }  
                  printf("\n\t   Delete   No:");  
                  scanf("%d",   &c);  
                  for   (b=c;   b<a;   b++)  
                  {  
                          strcpy(workers[b].name,   workers[b+1].name);  
                          workers[b].sex   =   workers[b+1].sex;  
                          strcpy(workers[b].nation,   workers[b+1].nation);  
                          workers[b].birth.year   =   workers[b+1].birth.year;  
                          workers[b].birth.month   =   workers[b+1].birth.month;  
                          workers[b].birth.day   =   workers[b+1].birth.day;  
                          strcpy(workers[b].addr.address,   workers[b+1].addr.address);  
                          strcpy(workers[b].addr.mobile,   workers[b+1].addr.mobile);  
                          strcpy(workers[b].addr.family_tel,   workers[b+1].addr.family_tel);  
                          strcpy(workers[b].addr.mail,   workers[b+1].addr.mail);  
                          strcpy(workers[b].achieve.degree,   workers[b+1].achieve.degree);  
                          strcpy(workers[b].achieve.experience,   workers[b+1].achieve.experience);  
                  }  
                  a--;  
                  break;  
          case'4':getchar();  
                  printf("\n\t   Please   input   name:");  
                  gets(search_name);  
                  for   (b=0;   b<=a;   b++)  
                  {  
                          if   (strcmp(search_name,   workers[b].name)==0)  
                          {  
                                  Data_Show(b);  
                                  break;  
                          }  
                  }  
                  if   (b   >   a)  
                  {  
                          printf("\n\t   No   such   records");  
                  }  
                  break;  
          case   '5':  
                  printf("\n\tinsert   No:");  
                  scanf("%d",   &c);  
                  for   (b=a+1;   b>c;   b--);  
                  {  
                          strcpy(workers[b].name,   workers[b-1].name);  
                          workers[b].sex   =   workers[b-1].sex;  
                          strcpy(workers[b].nation,   workers[b-1].nation);  
                          workers[b].birth.year   =   workers[b-1].birth.year;  
                          workers[b].birth.month   =   workers[b-1].birth.month;  
                          workers[b].birth.day   =     workers[b-1].birth.day;  
                          strcpy(workers[b].addr.address,   workers[b-1].addr.address);  
                          strcpy(workers[b].addr.mobile,   workers[b-1].addr.mobile);  
                          strcpy(workers[b].addr.family_tel,   workers[b-1].addr.family_tel);  
                          strcpy(workers[b].addr.mail,   workers[b-1].addr.mail);  
                          strcpy(workers[b].achieve.degree,   workers[b-1].achieve.degree);  
                          strcpy(workers[b].achieve.experience,   workers[b-1].achieve.experience);  
                  }  
                  Data_Input(c);  
                  a++;  
                  Data_Save();  
                  break;  
          case   '6':  
                  Data_Save();  
                  exit(0);  
                  break;  
          case   '7':  
                  printf("\n\t   Do   you   want   to   save   e_note:(y/n)");  
                  ch   =   getch();  
                  if(ch   ==   'y')  
                  {  
                          Data_Save();  
                          exit(0);  
                  }  
          default:   printf("please   choose   num   1-7.\n");                
          }  
  }  
   
  问题点数:90、回复次数:26Top

1 楼yangshunying()回复于 2006-05-22 22:57:29 得分 0

void   main()  
  {  
          int   b,   c;  
          char   ch,   name[20];  
          char   *search_name=name;  
          clrscr();  
          Data_load();  
          a--;                                       /*   a哪来的??*/  
          printf("\n\n\tFunction   choose:");  
          printf("\n\t1.Read");  
          printf("\n\t2.Append");  
          printf("\n\t3.Delete");  
  Top

2 楼yangshunying()回复于 2006-05-22 22:58:41 得分 0

找到了,定义在中间了Top

3 楼yangshunying()回复于 2006-05-22 23:00:19 得分 0

看太费劲了Top

4 楼xuxing13()回复于 2006-05-22 23:14:54 得分 0

并不是那样的问题呀  
  是掉了个int   a=20;Top

5 楼niatclock(豆豆雅)回复于 2006-05-23 07:20:56 得分 0

markTop

6 楼mr_moran(漠然)回复于 2006-05-23 08:23:53 得分 0

晕,这样的代码,折磨啊...  
  楼主,加点注释吧...Top

7 楼youngsun1983(人品的小孙)回复于 2006-05-23 08:49:11 得分 0

有人罐水。。。Top

8 楼jixingzhong(瞌睡虫·星辰)回复于 2006-05-23 08:53:39 得分 0

文件打开方式和   你的文件操作方式不匹配   ...  
   
    fp=fopen("worker.txt",   "r+t")   ;==》  
      fp=fopen("worker.txt",   "rb")   ;  
  Top

9 楼jixingzhong(瞌睡虫·星辰)回复于 2006-05-23 09:01:12 得分 0

恩,以后楼主可以简单的在你的代码上加点注释,  
  这个还好,  
  函数名字就看出来了   ....  
   
  不过不是每个人都这么看的,  
  也许有人一看没有注释直接就关页面了...  
   
  如果楼主感觉程序比较清晰,  
  也需要对每个函数的功能做个注释,以便于理解   .....Top

10 楼shw014()回复于 2006-05-23 09:06:25 得分 0

if(fp!=NULL)  
          {  
                  for(a=1;a<20;a++)  
                  {  
                          if(fgetc(fp)==EOF)  
                                  return;  
                          c=a-1;  
                          fseek(fp,   c*sizeof(struct   worker),   SEEK_SET);  
                          fread(&workers[a],   sizeof(struct   worker),   1,   fp);  
                          fclose(fp);     //-------你等循环结束了再关闭文件好不好???????  
                  }  
          }  
  Top

11 楼HopeInDark(子弹)回复于 2006-05-23 16:32:35 得分 0

mTop

12 楼zhaomu()回复于 2006-05-23 17:58:14 得分 0

帮你看看Top

13 楼lfangqing2003(芳卿)回复于 2006-05-23 19:26:39 得分 0

看了下,建议考虑一下shw014()   的答案Top

14 楼bombwang(王)回复于 2006-05-23 22:43:32 得分 0

有待研究Top

15 楼ainixian2004()回复于 2006-05-25 16:53:24 得分 0

void   Data_load()  
  {  
          long   c;  
          fp=fopen("worker.txt",   "r+t")   ;  
          if(fp!=NULL)  
          {  
                  for(a=1;a<20;a++)  
                  {  
                          if(fgetc(fp)==EOF)  
                                  return;  
                          c=a-1;  
                          fseek(fp,   c*sizeof(struct   worker),   SEEK_SET);  
                          fread(&workers[a],   sizeof(struct   worker),   1,   fp);  
                       
   
  /*   ——————>   */fclose(fp);  
                   
   
  }  
          }  
          else  
          {  
                  fp=fopen("worker.txt",   "w");  
                  fclose(fp);  
                  a=1;  
          }  
  }  
  for   循环内,不要关闭文件Top

16 楼SAMUEL_NAME()回复于 2006-05-25 21:52:23 得分 0

还好楼主的变量名没有用   a,b,c……     能够看懂能够看懂……  
  Top

17 楼cangmoon(彬仔)回复于 2006-05-25 22:58:21 得分 0

终于理解看没有注释的代码的痛苦了~   哎~     以后还是要勤劳点~Top

18 楼wenhy2001(小鸟~)回复于 2006-05-25 23:23:24 得分 0

感谢楼主让我明白了加注释的重要性........Top

19 楼MagicCarmack(MagiC++)回复于 2006-05-26 12:53:37 得分 0

哈哈  
   
  我们大一的时候也是这个样  
  现在感觉有这样的努力才好Top

20 楼hot225dog(无忌孩儿)回复于 2006-05-26 13:42:44 得分 0

牛XTop

21 楼foxdeng(江洋大刀)回复于 2006-05-26 19:40:40 得分 0

楼主代码的质量还是可以的,虽然没有注释,但是变量名称都做到了望名思意,又不是非常复杂抽象的操作,这样做是很好的.Top

22 楼yheng2013()回复于 2006-05-26 20:03:17 得分 0

程序可以在精简一些吧Top

23 楼yuanarea(Sail before)回复于 2006-05-27 13:36:44 得分 0

恩  
  Top

24 楼stone21cn(STONE)回复于 2006-05-30 17:37:33 得分 0

要是这么多原代码,里面PRINTF出来这么多东西,放到16M的FLASH芯片里面是很占空间的,玩玩还好,以后如果找潜入式开发方面的工作,你死定了.呵呵Top

25 楼ymx0330(~~的士小子~~)回复于 2006-05-30 22:07:51 得分 0

lz学习精神可佳!!!  
  学习学习再学习!  
  帮顶!Top

26 楼sboom(+-LingCh-+)(爱美人不爱VC)回复于 2006-05-30 22:15:12 得分 0

依我看论坛要改进,要语法高亮和缩进。Top

相关问题

关键词

得分解答快速导航

  • 帖主:xuxing13

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo