Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92864
  • 博文数量: 18
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-16 01:15
个人简介

。。。。

文章分类

全部博文(18)

文章存档

2015年(6)

2014年(3)

2012年(9)

我的朋友

分类: LINUX

2012-11-19 22:51:43


 

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>
  5. #include <errno.h>
  6. struct User{
  7.  char name[20];
  8.  int telnum;
  9. };
  10. static struct User* UserList;
  11. struct User* Now;
  12.  void
  13. showUser(struct User u)
  14. {
  15.  printf("姓名:%s --- 号码:%d\n",u.name,u.telnum);
  16. }
  17.  struct User
  18. addUser()
  19. {
  20.  Now = sbrk(0);
  21.  Now = sbrk(sizeof(struct User));
  22.  printf("输入添加用户名\n");
  23.  scanf("%s",Now->name);
  24.  printf("输入号码\n");
  25.  scanf("%d",&(Now->telnum));
  26.  printf("添加成功\n");
  27.  return *Now;
  28. }

  29. struct User*
  30. find(const char* name)
  31. {
  32.  struct User* p = UserList;
  33.  struct User* end = sbrk(0);
  34.  for(;p!=end;p++)
  35.  {
  36.   if(!strcmp(name,p->name)) {
  37.    printf("已找到\n"
  38.      "姓名:%s --- 号码:%d\n",p->name,p->telnum);
  39.    return p;
  40.   }
  41.  }
  42.  printf("未找到\n");
  43.  return NULL;
  44. }
  45. void
  46. selectByName()
  47. {
  48.  printf("输入要查找的姓名\n");
  49.  char name[20];
  50.  scanf("%s",name);
  51.  find(name);
  52.  return ;
  53. }
  54.  void
  55. delUser()
  56. {
  57.  printf("输入要删除的姓名:\n");
  58.  char name[20];
  59.  scanf("%s",name);
  60.  struct User *p = find(name);
  61.  if(p==NULL){
  62.   return;
  63.  }else{
  64.   //*p = (struct User)NULL;
  65.   p->name[0] = '\0';
  66.   printf("删除成功\n");
  67.   return;
  68.  }
  69. }
  70.  void
  71. saveFile()
  72. {
  73.  umask(0022);
  74.  int fd = open("USER.DAT",O_RDWR|O_CREAT|O_TRUNC,0666);
  75.  if(fd==-1){
  76.   perror("FILE NO EXCT");
  77.   return;
  78.  }
  79.  struct User* p = UserList;
  80.  struct User* end = sbrk(0);
  81.  for(;p!=end;p++)
  82.  {
  83.   if(p->name[0]!='\0')
  84.    pwrite(fd,p,sizeof(struct User),lseek(fd,0,SEEK_END));
  85.  }
  86.  printf("文件储存完成\n");
  87.  close(fd);
  88.  return;
  89. }
  90.  void
  91. showAll()
  92. {
  93.  struct User* p = UserList;
  94.  struct User* end = sbrk(0);
  95.  for(;p!=end;p++)
  96.  {
  97.   if(p->name[0]!='\0')
  98.    showUser(*p);
  99.  }
  100.  return;
  101. }
  102. void
  103. loadFromFile()
  104. {
  105.  char file[50];
  106.  printf("输入文件路径\n");
  107.  scanf("%s",file);
  108.  int fd = open(file,O_RDONLY);
  109.  if(fd==-1){
  110.   printf("file error\n");
  111.   loadFromFile();
  112.  }
  113.  off_t beg = lseek(fd,0,SEEK_SET);
  114.  off_t end = lseek(fd,0,SEEK_END);
  115.  off_t size = end - beg;
  116.  lseek(fd,0,SEEK_SET);
  117.  read(fd,UserList,size);

  118.  printf("load success!!!\n");
  119.  return ;
  120. }
  121.  int
  122. main()
  123. {
  124.  UserList = sbrk(0);
  125.  Now = sbrk(0);
  126.  int fd = open("USER.DAT",O_RDONLY);
  127.  if(fd==-1){
  128.   printf("file error\n");
  129.   return -1;
  130.  }
  131.  lseek(fd,0,SEEK_SET);
  132.  read(fd,(struct User*)UserList,end-beg);
  133.  close(fd);
  134.  printf("*************************************************\n"
  135.    "通讯录小程序\n"
  136.    "*************************************************\n"
  137.    "[1]显示所有记录\n"
  138.    "[2]添加记录\n"
  139.    "[3]查找记录\n"
  140.    "[4]删除记录\n"
  141.    "[5]文件保存\n"
  142.    "[6]导入文件记录\n"
  143.    "[0]退出\n");
  144.  while(1)
  145.  {
  146.   printf("请选择\n");
  147.   int num = 0;
  148.   scanf("%d",&num);
  149.   switch(num){
  150.    case 1:showAll();break;
  151.    case 2:addUser();break;
  152.    case 3:selectByName();break;
  153.    case 4:delUser();break;
  154.    case 5:saveFile();break;
  155.    case 6:printf("导入文件记录\n");break;
  156.    case 0:saveFile();brk(UserList);exit(0);
  157.   }
  158.  }
  159. }


 

阅读(1468) | 评论(0) | 转发(0) |
0

上一篇:几种排序算法

下一篇:信号知识简单梳理

给主人留下些什么吧!~~