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

📄 program of student file.c

📁 可以查询学生详细信息(学号、姓名、性别、入学时间、出生年月、电话、家庭住址······)
💻 C
字号:
 #include "stdio.h"
 #include "string.h"
 #include "malloc.h"
 

typedef struct           /* 声明结构体类型 */
 {
  char name[24];
  char num[16];
  char birth[16];
  char schtim[16];        /* 数组成员 */
  char addr[28];
  char tel[16];
  char age[8];
  char sex[8];
 }student;

 void search(void);  /* 实现详细查询信息的功能 */    /* 以下8行是声明各个被调用的函数,且在函数的外部 */
 void consearch(void);  /* 实现简明查询信息的功能 */
 void input(void);   /* 实现输入信息的功能 */ 
 void del(void);     /* 实现删除信息的功能 */ 
 void rew(void);     /* 实现修改重写信息的功能 */ 
 void next(void);    /* 实现浏览信息的功能 */ 
 void getinf(void);  /* 实现读入信息的功能 */  
 void output(void);  /* 实现输出信息的功能 */
 
 
 FILE *fp;           /* fopen函数,用来打开文件 */
 student *p;
 int length, len;
 int stunum, stupos;

 int main(void)                 /* 主函数 */
 {
  char ch; int k=1;
  
  printf("                ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
  printf("                ☆             *学生档案信息管理系统*           ☆\n");
  printf("                ☆                   *欢迎您*                   ☆\n");
  printf("                ☆                                              ☆\n");
  printf("                ☆Prodtcer:   金开春     刘莉                   ☆\n");
  printf("                ☆                                              ☆\n");
  printf("                ☆Assistant Teacher:   刘素华                   ☆\n");
  printf("                ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
   
  
  printf("The student's 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(详细查询)/(c)onsearch(简明查询)/(i)nput/(d)elet/(r)ewrite/(n)ext/(q)uit:\n ");   
   scanf("%c",&ch); getchar();  /* 输入要执行的命令 */
   switch(ch)                  /* 多分支选择语句 */
   {
    case 'S' :
    case 's' :    search();   break;  /* 执行搜索学生信息命令 */
    case 'C' :
    case 'c' :    consearch();   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)       /* 定义getinf函数,实现读入学生信息 */
 {
  printf("full name: ");  
  gets(p->name);        /* 读入学生姓名 */
  printf("school number: ");
  gets(p->num);        /* 读入学生学号 */
  printf("sex ---female/male: ");
  gets(p->sex);         /* 读入学生性别 */
  printf("age: ");
  gets(p->age);         /* 读入学生年龄 */
  printf("birthday: ");
  gets(p->birth);        /* 读入学生出生年月 */
  printf("time of attending the school: ");
  gets(p->schtim);          /* 读入学生入学时间 */
  printf("home address: ");
  gets(p->addr);            /* 读入学生住址 */
  printf("telephone number ---if no, input 'no': ");
  gets(p->tel);            /* 读入学生电话 */
  
 }

 void output(void)        /* 定义output函数,实现输出学生信息,各语句的功能不再赘述 */
 {
  printf("--------------------------------------------------------------\n");
  printf("name: ");
  puts(p->name);
  printf("school number: ");
  puts(p->num);
  printf("sex: ");
  puts(p->sex);
  printf("age: ");
  puts(p->age);
  printf("birthday: ");
  puts(p->birth);
  printf("time of attending the school: ");
  puts(p->schtim);
  printf("address: ");
  puts(p->addr);
  printf("telephone: ");
  puts(p->tel);
  
 }

 
 
 void next(void)      /* 定义next函数,实现翻页浏览功能 */
 {
  if(stupos<stunum)
  {
   fread(p,length,1,fp); output(); stupos++;   /* 输出下一个学生信息 */
  }
  else printf("Not found information!\n");     /* 若“下一个学生不存在”,则无输出结果 */
 }


 
 void input(void)        /* 定义input函数,实现输入学生信息 */
 {
  long k=(long)(stunum*length+len);
  getinf();
  fseek(fp,k,0);
  fwrite(p,length,1,fp);
  stunum++; stupos=stunum;
 }

 
 
 void rew(void)        /* 定义rew函数,实现修改重写学生信息 */
 {
  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)         /* 定义del函数,实现删除学生信息 */
 {
  char ch; long k;
  printf("Warning! 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)         /* 定义search函数,实现详细查询功能 */
 {
  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/sch(t)ime: ");
  scanf("%c",&ch); getchar();        /* 输入要执行的命令 */
  printf("Please input the information of the student:\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->schtim,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);
  }
 }


void consearch(void)         /* 定义search函数,实现简明查询功能 */
 {
  int m,n=0; long k; char ch; char mode[24];
  printf("--------------------------------------------------------------\n");
  printf("Please input the consearch way!\n");
  printf("(n)ame/num(b)er/(a)ge/sch(t)ime: ");
  scanf("%c",&ch); getchar();            /* 输入要执行的命令 */
  printf("Please input the information of the student\n");
  gets(mode);
  k=(long)len;
  fseek(fp,k,0);
  printf("--------------------------------------------------------------\n");
  for(stupos=0;stupos<stunum;stupos++)
  {
   fread(p,length,1,fp);
   switch(ch)        /* 多分支选择语句,根据选择结果的不同,执行不同的语句 */
   {
    case 'N' :                          /* 按姓名查找 */
    case 'n' :    if(!strcmp(p->name,mode))
		{ 
		printf("name: ");puts(p->name);
		printf("age: ");puts(p->age);
		printf("--------------------------------------------------------------\n");
		n++; 
		m=stupos;} break;         
    case 'B' :                /* 按学号查找 */
    case 'b' :    if(!strcmp(p->num,mode)) 
		{ 
		printf("name: ");puts(p->name);
		printf("age: ");puts(p->age);
        printf("--------------------------------------------------------------\n");
		n++;
		m=stupos;} break;   
    case 'A' :                         /* 按年龄查找 */
    case 'a' :    if(!strcmp(p->age,mode))  
		{ 
		printf("name: ");puts(p->name);
		printf("age: ");puts(p->age);
        printf("--------------------------------------------------------------\n");
		n++;
		m=stupos;} break;   
    case 'T' :                       /* 按入学时间查找 */
    case 't' :    if(!strcmp(p->schtim,mode)) 
		{ 
		printf("name: ");puts(p->name);
		printf("age: ");puts(p->age);
        printf("--------------------------------------------------------------\n");
		n++;
		m=stupos;} break;  
    default  :    printf("Unknown or bad order!\n");
   }
  }
  
  if(!n) printf("Not found!\n");    /* 找不到符合要求的信息 */
  else
  {
   printf("Have found %d student(s)!\n",n);    /* 找到符合要求的信息 */
    stupos=m+1;
   k=(long)(stupos*length+len);
   fseek(fp,k,0);
   }
 }

⌨️ 快捷键说明

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