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

📄 student.c

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

 typedef struct
 {
  char name[24];
  char num[16];
  char tim[16];
  char addr[128];
  char tel[16];
  char age[8];
  char sex[8];
 }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("school number: ");
  gets(p->num);
  printf("regedit time ---XXXX/XX/XX: ");
  gets(p->tim);
  printf("home address: ");
  gets(p->addr);
  printf("telephone number ---if no, input 'no': ");
  gets(p->tel);
  printf("age: ");
  gets(p->age);
  printf("sex ---female/male: ");
  gets(p->sex);
 }

 void output(void)
 {
  printf("--------------------------------------------------------------\n");
  printf("name: ");
  puts(p->name);
  printf("number: ");
  puts(p->num);
  printf("time: ");
  puts(p->tim);
  printf("address: ");
  puts(p->addr);
  printf("telephone: ");
  puts(p->tel);
  printf("age: ");
  puts(p->age);
  printf("sex: ");
  puts(p->sex);
 }

 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/num(b)er/(a)ge/(t)ime: ");
  scanf("%c",&ch); getchar();
  printf("Please input the information of the studen\n");
  gets(mode);
  k=(long)len;
  fseek(fp,k,0);
  for(stupos=0;stupos<stunum;stupos++)
  {
   fread(p,length,1,fp);
   switch(ch)
   {
    case 'N' :
    case 'n' :    if(!strcmp(p->name,mode)) {output(); n++; m=stupos;} break;
    case 'B' :
    case 'b' :    if(!strcmp(p->num,mode))  {output(); n++; m=stupos;} break;
    case 'A' :
    case 'a' :    if(!strcmp(p->age,mode))  {output(); n++; m=stupos;} break;
    case 'T' :
    case 't' :    if(!strcmp(p->tim,mode))  {output(); n++; m=stupos;} break;
    default  :    printf("Unknown or bad order!\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 + -