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

📄 源程序.c

📁 本程序用于简单的成绩管理,如多学生成绩的输入,,查找,插入,和排序,并能保存并调出以输入的文件进行处理等。
💻 C
📖 第 1 页 / 共 2 页
字号:
   if(p==NULL)         /*如果指针为空*/
      printf("\nlist no %s \n",i);   /*显示没有该学生*/
   else           /*显示找到的记录信息*/
   {
      printf("\n\n*****************************havefound***************************\n");
      printf("|      Name     |        Units       |    Tel    |\n");
      printf("|---------------|--------------------|-----------|\n");
      printf("|%-15s|%-20s|%-11s|\n",p->name,p->unit,p->tel);
      printf("********************************end*********************************\n");
   }
}


/*保存数据到文件*/
void save(ADDRESS *h)
{
   FILE *fp;         /*定义指向文件的指针*/
   ADDRESS *p;    /* 定义移动指针*/
   char outfile[10];  /*保存输出文件名*/
   printf("Enter outfile name,for example x:\\x\\x.txt:\n"); /*提示文件名格式信息*/
   scanf("%s",outfile);
   if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/
   {
      printf("Can not open file\n");
      exit(1);
   }
   printf("\nSaving file ^_^\n");  /*打开文件,提示正在保存*/
   p=h;                    /*移动指针从头指针开始*/
   while(p!=NULL)        /*如p不为空*/
   {
      fwrite(p,sizeof(ADDRESS),1,fp);/*写入一条记录*/
      p=p->next;        /*指针后移*/
   }
   fclose(fp);      /*关闭文件*/
   printf("-----Save success! R_R----\n");  /*显示保存成功*/
}


/* 从文件读数据*/
ADDRESS *load()
{
   ADDRESS *p,*q,*h=NULL;    /*定义记录指针变量*/
   FILE *fp;            /* 定义指向文件的指针*/
   char infile[10];       /*保存文件名*/
   printf("Enter infile name,for example x:\\x\\x.txt:\n");   scanf("%s",infile);  /*输入文件名*/
   if((fp=fopen(infile,"rb"))==NULL)   /*打开一个二进制文件,为读方式*/
   {
      printf("can not open file\n");    /*如不能打开,则结束程序*/
      exit(1);
   }
   printf("\n -----Loading file!-----\n");
   p=(ADDRESS *)malloc(sizeof(ADDRESS));   /*申请空间*/
   if(!p)
   {
      printf("Out of memory!\n");    /*如没有申请到,则内存溢出*/
      return h;       /*返回空头指针*/
   }
   h=p;         /*申请到空间,将其作为头指针*/
   while(!feof(fp))  /*循环读数据直到文件尾结束*/
   {
      if(1!=fread(p,sizeof(ADDRESS),1,fp))
     break;  /*如果没读到数据,跳出循环*/
      p->next=(ADDRESS *)malloc(sizeof(ADDRESS));  /*为下一个结点申请空间*/
      if(!p->next)
      {
     printf("Out of memory!\n");  /*如没有申请到,则内存溢出*/
     return h;
      }
      q=p;   /*保存当前结点的指针,作为下一结点的前驱*/
      p=p->next;   /*指针后移,新读入数据链到当前表尾*/
   }
   q->next=NULL;   /*最后一个结点的后继指针为空*/
   fclose(fp);       /*关闭文件*/
   printf("---You have success read data from file!!!---\n");
   return h;   /*返回头指针*/
}


ADDRESS *insert(ADDRESS *head)   /*插入记录*/
{
  ADDRESS *p,*q,*info; /*p1指向插入位置,p2是前驱指针,info是新插入记录*/
  char x[18]; /*保存插入点位置的名字*/
  printf("Please enter location before the Name\n");
  scanf("%s",x); /*输入插入点姓名*/
  printf("\nPlease new record\n");
  info = (ADDRESS *)malloc(sizeof(ADDRESS));  /*申请空间*/
  if(!info)
  {
     printf("Nout of memory");  /*如果没有申请到,内存溢出*/
     return NULL;
  }
  inputs("Enter Name:",info->name,18); /*输入姓名*/
  inputs("Enter Unit:",info->unit,20); /*输入单位*/
  inputs("Enter TEL :",info->tel,11); /*输入电话*/
  info->next=NULL;     /*设后继指针为空*/
   p=head;               /*将指针赋值给p*/
   q=head;             /*将指针赋值给q*/
  while(strcmp(p->name,x)&&p!=NULL)  /*查找插入位置*/
  {
   q=p;     /*保存指针p,作为下一个p1的前驱*/
   p=p->next;  /*将指针p后移*/
   }
   if(p==NULL)   /*如果p指针为空,说明没有指定结点*/
      if(p==head)  /*同时p等于head,说明链表为空*/
          head=info;  /*新记录则为头结点*/
      else
          q->next=info; /*p为空,但p不等于h,将新结点插在表尾*/

   else
       if(p==head)   /*p不为空,则找到了指定结点*/
          {
          info->next=p;  /*如果p等于head,则新结点插入在第一个结点之前*/
          head=info;
          }      /*新结点为新的头结点*/
      else
      {
      info->next=p;   /*不是头结点,则是中间某个位置,新结点的后继为p*/
      q->next=info;
      }     /*新结点作为q的后继结点*/
   printf("\n-----Have inserted %x name-----\n",info->name);
   printf("---Please save!\n");
   return(head);
}


/*文件拷贝*/
void copy()
{
   char outfile[10],infile[10];
   FILE *sfp,*tfp;        /*源和目标文件指针*/
   ADDRESS *p=NULL;   /*移动指针*/
   clrscr();    /*清屏*/
   printf("Enter infile name,for example x:\\x\\x.txt:\n");
   scanf("%s",infile);         /*输入源文件名*/
   if((sfp=fopen(infile,"rb"))==NULL)   /*二进制读方式打开源文件*/
   {
      printf("Can not open input file\n");
      exit(0);
   }
   printf("Enter outfile name,for example x:\\x\\x.txt:\n");   /*提示输入目标文件名*/
   scanf("%s",outfile);  /*输入目标文件名*/
   if((tfp=fopen(outfile,"wb"))==NULL)  /*二进制写方式打开目标文件*/
   {
      printf("can not open output file \n");
      exit(0);
   }
   while(!feof(sfp))   /*读文件直到文件尾*/
   {
      if(1!=fread(p,sizeof(ADDRESS),1,sfp))
     break; /*块读*/
      fwrite(p,sizeof(ADDRESS),1,tfp);   /*块写*/
   }
   fclose(sfp);    /*关闭源文件*/
   fclose(tfp);   /*关闭目标文件*/
   printf("You have success copy  file^_^\n");   /*显示成功拷贝*/
}


/*按号码查找记录*/
void search2 (ADDRESS *h)
{
   ADDRESS *p;    /*  移动指针*/
   char t[11];    /*存放号码的字符数组*/
   clrscr();    /*清屏幕*/
   printf("please enter Telephone for search\n");
   scanf("%s",t);    /*输入号码*/
   p=h;    /*将头指针赋给p*/
   while(strcmp(p->tel,t)&&p!=NULL)  /*当记录的号码不是要找的,或指针不为空时*/
   p=p->next;     /*移动指针,指向下一结点*/
   if(p==NULL)         /*如果指针为空*/
      printf("\nList not have  %s \n",t);   /*显示没有该号码*/
   else           /*显示找到的记录信息*/
   {
      printf("\n\n*****************************havefound***************************\n");
      printf("|      Name     |        Units       |    Tel    |\n");
      printf("|---------------|--------------------|-----------|\n");
      printf("|%-15s|%-20s|%-11s|\n",p->name,p->unit,p->tel);
      printf("********************************end*********************************\n");
   }
}
/*排序*/
ADDRESS *sort(ADDRESS *h)
{
   ADDRESS *p,*q,*t,*h1;  /*定义临时指针*/
   h1=h->next;    /*将原表的头指针所指的下一个结点作头指针*/
   h->next=NULL;   /*第一个结点为新表的头结点*/
   while(h1!=NULL)  /*当原表不为空时,进行排序*/
   {
      t=h1;        /*取原表的头结点*/
      h1=h1->next;   /*原表头结点指针后移*/
      p=h;   /*设定移动指针p,从头指针开始*/
      q=h;   /*设定移动指针q做为p的前驱,初值为头指针*/
      while(strcmp(t->name,p->name)>0&&p!=NULL)  /*作姓名比较*/
      {
     q=p;           /*当排序点字母大,应往后插,所以新表指针后移*/
     p=p->next;
      }
      if(p==q)   /*p==q,说明待排序字母小,应排在首位*/
      {
     t->next=p;  /*待排序点的后继为p*/
     h=t;    /*新头结点为待排序点*/
      }
      else     /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/
      {
     t->next=p;    /*t的后继是p*/
     q->next=t;     /*q的后继是t*/
      }
   }
   printf("Index sucess! ^.^\n");  /*按姓名排序成功*/
   return h;    /*返回头指针*/
}


/*设置动态密码*/
inputcode()
{char ch;
 FILE *fp;
 if((fp=fopen("password.txt","w"))==NULL)
   {printf("cannot open file\n");
    exit(0);}
  printf("please set your 6 bit password,end with '#':");
  ch=getchar();
  while(ch!='#')
   {fputc(ch,fp);putchar(ch);ch=getchar();}
   fclose(fp);
   getch();
   }

⌨️ 快捷键说明

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