⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 student.c

📁 档案管理简单算法
💻 C
字号:
 #include "stdio.h"
 #include "string.h"
 #include "malloc.h"

 typedef struct
 {
  char name[24];
  char bir[16];
  char addr[64];
  char tel[64];
 }student;

 void search(void);
 void input(void);
 void del(void);
 void rew(void);
 void next(void);
 void getinf(void);
 void output(void);

 FILE *fp;
 student *p;
 int length, len;
 int stunum, stupos;

 int main(void)
 {
  char ch; int k=1;
  printf("Students' information:\n");
  p=(student *)malloc(sizeof(student));
  if(!p) {printf("Overflow\n"); return 0;}
  length=sizeof(student); len=sizeof(int);
  stunum=0; stupos=0;
  fp=fopen("student","rb+");
  if(!fp)
  {
   printf("File not exit! Please input the informatoin first!\n");
   fp=fopen("student","wb+");
   if(!fp) {printf("Cannot open file!\n"); return 0;}
   fwrite(&stunum,len,1,fp);
  }
  else
  {
   fread(&stunum,len,1,fp); next();
  }
  while(k)
  {
   printf("--------------------------------------------------------------\n");
   printf("Please select the operation!\n");
   printf("(s)earch/(i)nput/(d)elet/(r)ewrite/(n)ext/(q)uit: ");
   scanf("%c",&ch); getchar();
   switch(ch)
   {
    case 'S' :
    case 's' :    search();   break;
    case 'I' :
    case 'i' :    input();    break;
    case 'D' :
    case 'd' :    del();      break;
    case 'R' :
    case 'r' :    rew();      break;
    case 'N' :
    case 'n' :    next();     break;
    case 'Q' :
    case 'q' :    k=0;        break;
    default  :    printf("Unknown or bad command!\n");
   }
  }
  rewind(fp);
  fwrite(&stunum,len,1,fp);
  fclose(fp);
  free(p);
  return 1;
 }

 void getinf(void)
 {
  printf("full name: ");
  gets(p->name);
  printf("birthday: ");
  gets(p->bir);
  printf("home address: ");
  gets(p->addr);
  printf("telephone number ");
  gets(p->tel);
 }

 void output(void)
 {
  printf("--------------------------------------------------------------\n");
  printf("name:\t\t");
  puts(p->name);
  printf("birthday:\t");
  puts(p->bir);
  printf("address:\t");
  puts(p->addr);
  printf("telephone:\t");
  puts(p->tel);
 }

 void next(void)
 {
  if(stupos<stunum)
  {
   fread(p,length,1,fp); output(); stupos++;
  }
  else printf("Not found information!\n");
 }

 void input(void)
 {
  long k=(long)(stunum*length+len);
  getinf();
  fseek(fp,k,0);
  fwrite(p,length,1,fp);
  stunum++; stupos=stunum;
 }

 void rew(void)
 {
  long k=(long)((stupos-1)*length+len);
  printf("Please input the new information:\n");
  getinf();
  fseek(fp,k,0);
  fwrite(p,length,1,fp);
  printf("Rewrite OK!\n");
 }

 void del(void)
 {
  char ch; long k;
  printf("Warring! This student's information will be deleted!\n");
  printf("Are you sure? ---y/n: ");
  scanf("%c",&ch); getchar();
  if(ch=='Y'||ch=='y')
  {
   k=(long)((stunum-1)*length+len);
   fseek(fp,k,0);
   fread(p,length,1,fp);
   k=(long)((stupos-1)*length+len);
   fseek(fp,k,0);
   fwrite(p,length,1,fp);
   fseek(fp,k,0);
   stunum--; stupos--;
   printf("This student's information has been deleted!\n");
  }
 }

 void search(void)
 {
  int m,n=0; long k; char ch; char mode[24];
  printf("--------------------------------------------------------------\n");
  printf("Please input the search way!\n");
  printf("(n)ame/(b)irthay/(t)elepone: ");
  scanf("%c",&ch); getchar();
  printf("Please input the information of the studen\n");
  gets(mode);
  k=(long)len;
  fseek(fp,k,0);
  switch(ch)
  {
   case 'N' :
   case 'n' :
    for(stupos=0;stupos<stunum;stupos++)
    {
    fread(p,length,1,fp);
    if(!strcmp(p->name,mode))
     {output(); n++; m=stupos;}
    } break;
   case 'B' :
   case 'b' :
    for(stupos=0;stupos<stunum;stupos++)
    {
    fread(p,length,1,fp);
    if(!strcmp(p->bir,mode))
     {output(); n++; m=stupos;}
    } break;
   case 'T' :
   case 't' :
    for(stupos=0;stupos<stunum;stupos++)
    {
    fread(p,length,1,fp);
    if(!strcmp(p->tel,mode))
     {output(); n++; m=stupos;}
    } break;
   default  :    printf("Unknown or bad command!\n");
  }
  if(!n) printf("Not found!\n");
  else
  {
   printf("Have found %d student!\n",n);
   stupos=m+1;
   k=(long)(stupos*length+len);
   fseek(fp,k,0);
  }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -