C语言管理系统,全套知识点

数组

/*--------------------------------
【程序填空】功能:数组名作为函数参数,求平均成绩。
---------------------------*/
#include <stdio.h>
float aver(float a[ ])             /*定义求平均值函数,形参为一浮点型数组名*/
{
 int i;
 float av,s=a[0];
 for(i=1;i<5;i++)
 /***********SPACE***********/
 s+=a[i];
 av=s/5;
 /***********SPACE***********/
 return av;
}
void main()
{
 float sco[5],av;
 int i;
 printf(" input 5 scores: ");
 for(i=0;i<5;i++)
 /***********SPACE***********/
   scanf("%f",&sco[i]);
 /***********SPACE***********/
 av=aver(sco);
 printf("average score is %5.2f ",av);
}

|类型| 16位| 32 位 |64位|

|char| 1| 1 |1|

|short int |2 |2 |2|

|int            |2  |   4|  4|
|unsigned int |2 | 4| 4|
|float   |4 |4 |4 |
|double     |8 |8 |8 |
|long   |4 |4 |8 |
|long long |8 | 8| 8|
|unsigned long |4 |4   | 8|

———————————————— 首先来看字符类型,这里单指char , char变量在内存中存储的是字符对应的ASCII码值。所以长度也是固定的,不管在哪种编译器下,均为1个字节。

再来看 浮点类型,C中的浮点类型有俩种,float和double,与整数不同的是,浮点数的长度适中的固定的,float占用4个字节,double占用8个字节。

最后来看 整型类型,查阅资料后发现虽然16位、32位或者64位的机子各种类型并不一样,但有几条规则(ANSI/ ISO制定):

  • short 至少占用2个字节

    • int 建议为一个机器字长,32位环境下为4字节,64位环境下为8字节

      • short 的长度不能大于int, long 的长度不能小于int

指针

/*-----------------------------
【程序填空】题目:以下mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回.
------------------------*/
#include <stdio.h>
int mystrlen( char *str)
{
   int i;
/***********SPACE***********/
   for(i=0;*(str+i)!='';i++) ;
/***********SPACE***********/
  return(i);
}
void main( )
{
       char *str="abcdefg";
       printf("%d ",mystrlen(str));

}
/*-----------
【程序填空】功能:输入3个数a,b,c,按从小到大的顺序输出。
-----------------------------*/
#include <stdio.h>
main()
{
 void swap(int *p1, int *p2);
 int n1,n2,n3;
 int *pointer1,*pointer2,*pointer3;
 printf("please input 3 number:n1,n2,n3:");
 scanf("%d,%d,%d",&n1,&n2,&n3);
 pointer1=&n1;
 pointer2=&n2;
 pointer3=&n3;
 /***********SPACE***********/
 if(n1>n2) swap(pointer1,pointer2);
 /***********SPACE***********/
 if(n1>n3) swap(pointer1,pointer3);
 /***********SPACE***********/
 if(n2>n3) swap(pointer2,pointer3);
 printf("the sorted numbers are:%d,%d,%d ",n1,n2,n3);
}
/***********SPACE***********/
void swap(int *p1,int *p2)

{
 int p;
 p=*p1;*p1=*p2;*p2=p;
}
//输入和输出必须保持一致
/*-------------------------------------
【程序填空】功能:将一个字符串中下标为m的字符开始的全部字符复制成为另一个字符串。
--------------------------------*/

#include<stdio.h>
void strcopy(char *str1,char *str2,int m)
{
  char *p1,*p2;
  /***********SPACE***********/
  p1= str1 + m;
  p2=str2;
  while(*p1){
  /***********SPACE***********/
  *(p2++)=*(p1++);}
  /***********SPACE***********/
  *p2='';
}
main()
{
  int m;
  char str1[80],str2[80];
  gets(str1);
  scanf("%d",&m);
  /***********SPACE***********/
  strcopy(str1,str2,m);
  puts(str1);puts(str2);
}
/*-------------------------------
【程序填空】
功能:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
例如:当s串为"ABCD"时,则t串的内容应为"ABCDDCBA"。
-----------------------------*/

#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun (char  *s, char  *t)
{
 int   i, d;
 /***********SPACE***********/
 d = strlen(s);
 /***********SPACE***********/
 for (i = 0; i<d; i++)
   t[i] = s[i];
 for (i = 0; i<d; i++)
   /***********SPACE***********/
   t[d+i] = s[d-1-i];
 /***********SPACE***********/
 t[d+i] ='';
}
main()
{
 char  s[100], t[100];
 printf(" Please enter string S:"); scanf("%s", s);
 fun(s, t);
 printf(" The result is: %s ", t);
}
/*-------------------------------------
【程序填空】题目:给定程序中,函数fun的功能是:统计形参s所指的字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。
例如:若形参s所指的字符串为"abcdef35adgh3kjsdf7",则输出结果为4。
---------------------------------*/
#include <stdio.h>

void fun(char  *s, int  *t)
{
       int i, n;
       n=0;
/***********SPACE***********/
       for(i=0; s[i]!=0; i++)
/***********SPACE***********/
               if(s[i]>='0'&&s[i]<= '9' ) n++;

/***********SPACE***********/
           *t=n ;
}
main()
{
       char  s[80]="abcdef35adgh3kjsdf7";
       int t;
       printf(" The original string is : %s ",s);
       fun(s,&t);
       printf(" The result is : %d ",t);
}
/*-----------------------------------
【程序填空】
功能:求一批数据(数组)的最大值并返回下标。
--------------------------------------*/
#include <stdio.h>
int max(int *p,int n,int *index)
{
 int i,in=0,m;
/***********SPACE***********/
m=*p;
 /***********SPACE***********/
 for (i=1;i<n;i++)
     if(m<*(p+i))
    {
       m=*(p+i);
/***********SPACE***********/
       in=i;
    }
  *index=in;
 /***********SPACE***********/
  return m;
}
void main()
{
 int i,a[10]={3,7,5,1,2,8,6,4,10,9},m;
 /***********SPACE***********/
 m=max(a,10,&i);
/***********SPACE***********/
 printf("最大值%d,下标%d",m,i);
}
/*------------------------------
【程序改错】题目:下列给定程序中函数fun的功能是:删除s所指字符中所有的小写字母c 。
--------------------------------*/
#include <stdio.h>
void  fun( char  *s )
{
       int  i,j;
       for(i=j=0; s[i]!=''; i++)
               if(s[i]!='c')
       /***********FOUND***********/
                       s[j++]=s[i];

/***********FOUND***********/
               s[j]=0;
}
main()
{
       char  s[80];
       printf("Enter a string:       ");
       gets(s);
       printf("The original string: ");
       puts(s);
       fun(s);
       printf("The string after deleted : ");
       puts(s);printf(" ");
}
/*----------------------------------
【程序改错】
功能:实现交换两个整数的值。
例如:给a和b分别输入3和6 ,输出为a=6 b=3
------------------------*/
#include <stdio.h>
/**********FOUND**********/
void fun (int *a,int *b)
{
 int t;
 /**********FOUND**********/
 t=*a;
 /**********FOUND**********/
 *a=*b;
 /**********FOUND**********/
 *b=t;
}

main()
{
 int a,b;
 printf("enter a,b:");scanf("%d%d",&a,&b);
 fun(&a,&b);
 printf("a=%d b=%d ",a,b);
}
/*--------------------------------
【程序改错】题目:下列给定程序中函数fun的功能是:把从主函数中输入的3个数,最大的数放在a中,中间的数放在b中,最小的数放在c中。
例如:若输入的数为:55 12 34,输出的结果应当是:a=55.0,b=34.0,c=12.0。
--------------------------*/
#include <stdio.h>

void  fun(float *a,float *b,float *c)
{
/***********FOUND***********/
       float   k;
       if( *a<*b )
      {
               k=*a;
               *a=*b;
               *b=k;
      }
/***********FOUND***********/
       if( *a<*c )
      {
               k=*c;
               *c=*a;
               *a=k;
      }
       if( *b<*c )
      {
               k=*b;
               *b=*c;
               *c=k;
      }
}
main()
{
       float   a,b,c;
       printf("Input a b c: ");
       scanf("%f%f%f",&a,&b,&c);
       printf("a = %4.1f, b = %4.1f, c = %4.1f ",a,b,c);
       fun(&a,&b,&c);
       printf("a = %4.1f, b = %4.1f, c = %4.1f ",a,b,c);
}
/*-------------------------------
【程序改错】题目:下列给定程序中,函数fun的功能是:找出100~n(不大于1000)之间三个位上的数字都相等的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。
-----------------------*/
#include <stdio.h>

#define N 100

int  fun(int *s, int  n)
{
       int i,j,k,a,b,c;
       j=0;
       for(i=100; i<n; i++)
      {
/***********FOUND***********/
               k=i;
               a=k%10;
               k/=10;
/***********FOUND***********/
               b=k%10;
               c=k/10;
               if(a==b && a==c)
                       s[j++]=i;
      }
       return  j;
}
void main()
{
       int  a[N], n,num=0, i;
       do
      {
               printf(" Enter n(<=1000) :");
               scanf("%d",&n);
      }
       while(n > 1000);
       num= fun(a,n);
       printf(" The result : ");
       for(i=0; i<num; i++)
               printf("%5d",a[i]);
       printf(" ");
}

结构体




/*---------------------------------
【程序填空】功能:输入学生成绩并显示。
--------------------------------*/
# include <stdio.h>
struct student
{
 char number[6];
 char name[6];
 int  score[3];
} stu[2];
void output(struct student stu[2]);
void main()
{
 int i, j;
 /***********SPACE***********/
 for(i=0; i<2; i++)
{
   printf("请输入学生%d的成绩: ", i+1);
   printf("学号:");
   /***********SPACE***********/
   scanf("%s", stu[i].number);
   printf("姓名:");
   scanf("%s", stu[i].name);
   for(j=0; j<3; j++)
  {
     printf("成绩 %d. ", j+1);
     /***********SPACE***********/
     scanf("%d", &stu[i].score[j]);
  }
   printf(" ");
}
 output(stu);
}

void output(struct student stu[2])
{
 int i, j;
 printf("学号 姓名 成绩1 成绩2 成绩3 ");
 for(i=0; i<2; i++)
{
 /***********SPACE***********/
 printf("%-6s%-6s", stu[i].number, stu[i].name);
 for(j=0; j<3; j++)
   printf("%-8d", stu[i].score[j]);
   printf(" ");
}
}
/*----------------------------------
【程序设计】题目:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun ,其功能是:把低于平均分的学生数据放入b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
---------------------------------*/
#include <stdio.h>
//void wwjt();
#define   N   8
typedef  struct
{
       char  num[10];
       int   s;
} STREC;
double  fun( STREC  *a, STREC *b, int *n )
{
       /**********Program**********/
       int i,j=0;
       double av=0.0;
       for(i=0;i<N;i++)
           av=av+a[i].s;
       av=av/N;
       for(i=0;i<N;i++)
if(a[i].s<av)
       b[j++]=a[i];
       *n=j;
return av;

       /********** End **********/
}

main()
{
       STREC  s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
              {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};
       STREC  h[N];
       int  i,n;
       double  ave;
       ave=fun( s,h,&n );
       printf("The %d student data which is lower than %7.3f: ",n,ave);
       for(i=0;i<n; i++)
               printf("%s %d ",h[i].num,h[i].s);
       printf(" ");
       //wwjt();

}

文件操作

  while(!(feof(fp))){
   fread(&b[i],M,1,fp);
    i++;j++;}
/*-----------
【程序填空】说明:下面程序的功能是统计文件fname.dat中字符个数,现文件中的内容为: 1234567890
-----------------------------*/
#include "stdio.h"
void  main()
{
  /***********SPACE***********/
   File *fp;
  long  num=0L;
     if((fp=fopen("fname.dat","r"))==NULL)
      {
        printf("Open error ");
      }
  /***********SPACE***********/
      while(!feof(fp))
      {
         fgetc(fp);
         num++;
      }
 /***********SPACE***********/
    printf("num=%ld ",num-1);
    fclose(fp);
}
/*---------
【程序填空】功能:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,设原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
---------------------------*/

#include <stdio.h>
struct student
{
 char num[6];
 char name[8];
 int score[3];
 double avr;
} stu[5];

main()
{
 int i,j,sum;
 FILE *fp;
 /*input*/
 for(i=0;i<5;i++)
{
   printf(" please input No. %d score: ",i);
   printf("stuNo:");
   scanf("%s",stu[i].num);
   printf("name:");
   scanf("%s",stu[i].name);
   sum=0;
   /***********SPACE***********/
   for(j=0;j<3;j++)
  {
     printf("score %d.",j+1);
     scanf("%d",&stu[i].score[j]);
     /***********SPACE***********/
     sum+=stu[i].score[j];
  }
   stu[i].avr=sum/3.0;
}
 fp=fopen("stud","w");
 /***********SPACE***********/
 for(i=0;i<5;i++)
 /***********SPACE***********/
   if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
     printf("file write error ");
   fclose(fp);
}
/*---------------------------------
【程序填空】
功能:文件操作。
--------------------------*/

# include <stdio.h>
# include <stdlib.h>

void main()
{
 /* 定义一个文件指针fp */
 /***********SPACE***********/
 FILE *fp;
 char filename[10];
 printf("Please input the name of file: ");
 scanf("%s", filename);  /* 输入字符串并赋给变量filename */
 /* 以读的使用方式打开文件filename */
 /***********SPACE***********/
 if((fp=fopen(filename, "r")) == NULL)
{
   printf("Cannot open the file. ");
   exit(0);  /* 正常跳出程序 */
}
 /* 关闭文件 */
 /***********SPACE***********/
fclose(fp);
}
/*-------------------------------
【程序填空】功能:从键盘上输入一个字符串, 将该字符串升序排列后输出到文件test.txt中,然后从该文件读出字符串并显示出来。
--------------------------------*/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main()
{
  FILE  *fp;
  char t,str[100],str1[100];    int n,i,j;
  if((fp=fopen("test.txt","w"))==NULL)
  {
      printf("can't open this file. ");
      exit(0);
  }
  printf("input a string: "); gets(str);
  /***********SPACE***********/
  n=strlen(str);
  /***********SPACE***********/
  for(i=0; i<n ;i++)
    for(j=0;j<n-i-1;j++)
    /***********SPACE***********/
    if(str[j]>str[ j + 1 ])
    {
       t=str[j];
       str[j]=str[j+1];
       str[j+1]=t;
    }
  /***********SPACE***********/
  fputs(str,fp);
  fclose(fp);
  fp=fopen("test.txt","r");
  fgets(str1,100,fp);
  printf("%s ",str1);
  fclose(fp);
}
/*------------------------------
【程序改错】功能:将若干学生的档案存放在一个文件中,并显示其内容。
--------------------*/
#include <stdio.h>
struct student
{
 int num;
 char name[10];
 int age;
};

struct student stu[3]={{001,"Li Mei",18},
                      {002,"Ji Hua",19},
                      {003,"Sun Hao",18}};

#include <stdio.h>

void main()
{
 /**********FOUND**********/
 struct student *p;
 /**********FOUND**********/
 FILE *fp;
 int i;
 if((fp=fopen("stu_list","wb"))==NULL)
{
   printf("cannot open file ");
   return;
}
 /**********FOUND**********/
 for(p=stu;p<stu+3;p++)
   fwrite(p,sizeof(struct student),1,fp);
 fclose(fp);
 fp=fopen("stu_list","rb");
 printf(" No. Name       age ");
 for(i=1;i<=3;i++)
{
   fread(p,sizeof(struct student),1,fp);
   /**********FOUND**********/
   scanf("%4d %-10s %4d ",(*p).num,p->name,(*p).age);
}
 fclose(fp);
}

程序设计

#include<stdio.h>
#include <windows.h>//加入头文件就可调用API函数
#include<string.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#define N 100
#define M sizeof(struct driver)
struct driver
{
   int cost;//司机的学费
   int aeve;//司机的分数achievement
   char dtype[20];
   char name[20];//司机的名字
   int rdata[3];
   struct driver *next;
} stu;
int n=0;//全局变量,用来记录存放了多少数据。
int main()
{
int a,i=0,t;
char b[20],c,str[20];
FILE *fp;

   void maintain();//信息维护的函数
   void query();//信息查询的函数
   void statistics();//信息统计的函数
   void qsort();//信息排序的函数
   void change();//密码修改的函数
   void append();//信息追加的函数
   void dlete();//信息删除
   void ichange();//信息修改
  if(!(fp=fopen("pword.bat","r"))){//密码用文件的形式保存,达到文件的方便存在)
       printf(" 管理系统核心部件丢失,请联系技术人员维护 ");return 0;}
       fread(&str,20,1,fp);
       fclose(fp);

   printf(" 欢迎使用欢迎使用驾校学员信息管理系统! 请输入位管理员密码【初始密码(kdd)】:");//asdfg
    while (1)
  {
       c=getch();
       if (c==' '||c==' ')  //windows下getch输入回车会返回
      {
           b[i]=0;
           break;
      }
       putchar('*');
       b[i++]=c;
  }
   printf(" ");
 if(strcmp(b,str)){
       printf(" 密码错误!!!!!");system("pause");
       return 0;}
   printf(" 是否打开背景颜色?打开请输入1,不打开请输入任意数:");
   scanf("%d",&t);
   if(t==1)
  {
       HWND hWnd=GetForegroundWindow();

HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);

SetWindowText(hWnd,"管理系统");//标题

SetConsoleTextAttribute(handle,FOREGROUND_RED|BACKGROUND_INTENSITY);//前景、背景颜色
  }
   while(a!=0)
{system("cls");//完成相应的功能后对屏幕清屏
printf(" ");
printf(" |********欢迎使用驾校学员信息管理系统**********| ");//为了让图形界面更加好看采用4* 的形式让输出居中
printf(" |**********************************************| ");
printf(" |*1、信息维护(会建立全新的文件,请谨慎使用)   *| ");
printf(" |*2、信息展示                                 *| ");
printf(" |*3、信息查询                                 *| ");
printf(" |*4、排序功能                                 *| ");
printf(" |*5、追加数据                                 *| ");
printf(" |*6、删除数据                                 *| ");
printf(" |*7、修改密码                                 *| ");
printf(" |*8、信息修改                                 *| ");
printf(" |*0、退出                                     *| ");
printf(" |**********************************************| ");
printf(" 请输入你们的选择:");
scanf("%d",&a);
switch(a)
{
case 1:maintain();break;
case 2:query();break;
case 3:statistics();break;
case 4:qsort();break;
case 5:append();break;
case 6:dlete();break;
case 7:change();break;
case 8:ichange();break;
case 0:return 0;
default:printf("输入的数据有误,请重新输入 ");
}
}
return 0;
}
  struct driver *wlist()
  {
     struct driver *head;
     struct driver *p1,*p2;
     p2=p1=(struct driver *)malloc(sizeof(M));
      printf(" Please enter the name :");
     scanf("%s", p1->name);
     printf(" Please enter the aeve :");
     scanf("%d", &p1->aeve);
     printf(" Please enter the cost :");
     scanf("%d", &p1->cost);
     printf(" Please enter the Particular year :");
     scanf("%d", &p1->rdata[0]);
     printf(" Please enter the Month :");
     scanf("%d", &p1->rdata[1]);
     printf(" Please enter the day :");
     scanf("%d", &p1->rdata[2]);
     printf(" Please enter the dtype :");
     scanf("%s", p1->dtype);
     head=NULL;//最开始将指针指向NULL;
     n=0;
       while( p1->cost )//如果花费为0代表输入数据结束
    {
           n++;
           if( 1 == n )
          {
                 head = p1;
          }
           else
          {
                 p2->next = p1;
          }

           p2 = p1;
           p1 = (struct driver *)malloc(M);

           printf(" Please enter the name :");
           scanf("%s", p1->name);
           printf(" Please enter the aeve :");
           scanf("%d", &p1->aeve);
           printf(" Please enter the cost :");
           scanf("%d", &p1->cost);
           printf(" Please enter the Particular year :");
           scanf("%d", &p1->rdata[0]);
           printf(" Please enter the Month :");
           scanf("%d", &p1->rdata[1]);
           printf(" Please enter the day :");
           scanf("%d", &p1->rdata[2]);
           printf(" Please enter the dtype :");
           scanf("%s", p1->dtype);
    }
     p2->next = NULL;

     return head;
  }
    void wfile(struct driver *head)//写入文件的函数
    {
       FILE *fp;
       int i=0;
      if (!(fp=fopen("dat.bat","wb")))
       printf(" open error");
      do
      {
       fwrite(head,M,1,fp);
       head=head->next;
      }while(head!=0);
       fclose(fp);
       printf(" 写入完成,");
       system("pause");
    }
   void maintain()
  {
       struct driver *head;
       head=wlist();
       wfile(head);//写入文件的操作
  }



void query()
{
   FILE *fp;
    int i=0,j=0;
   struct driver a[N];

   if (!(fp=fopen("dat.bat","r")))
       printf("error");
   while(!(feof(fp))){
   fread(&a[i],M,1,fp);
    i++;j++;}
   printf(" cost aeve year month day dtype name ");
    for(i=0;i<j-1;i++)
    printf(" %d %d %d %d %d %s %s ",a[i].cost,a[i].aeve,a[i].rdata[0],a[i].rdata[1],a[i].rdata[2],a[i].dtype,a[i].name);
   fclose(fp);
       printf(" 查询完成,");
   system("pause");
}


void statistics()
{

   FILE *fp;
    int i=0,j=0,h,b,c,e=0;
    char d[20],g[20];
   struct driver a[N],f[N];

   if (!(fp=fopen("dat.bat","r")))
       printf(" error");
   while(!(feof(fp))){
   fread(&a[i],M,1,fp);//将文件读出
    i++;j++;}
    printf(" 请输入需要查询的类容 (1)如果是查询某个分数请输入1 (2)如果是是查询某个费用请输入2 (3)如果是查询某个名字请输入3 (4)费用小于某个数请输入4 (5)分数小于某个数请输入5 (6)查询某个类型的驾照请输入6:");
    scanf("%d",&h);
    if(h==1)
  {
    printf(" 请输入需要的数据");
    scanf("%d",&c);
       for(b=0;b<j-1;b++)
  {
       if(a[b].aeve==c){
       f[e]=a[b];e++;}
  }
     printf(" cost aeve year month day dtype name ");
   for(b=0;b<e;b++)
   printf(" %d %d %d %d %d %s %s ",f[b].cost,f[b].aeve,f[b].rdata[0],f[b].rdata[1],f[b].rdata[2],f[b].dtype,f[b].name);
       printf(" 查询完成,");
   system("pause");
  }
   if(h==2)
  {
    printf(" 请输入需要的数据");
    scanf("%d",&c);
       for(b=0;b<j-1;b++)
  {
       if(a[b].cost==c){
       f[e]=a[b];e++;}
  }
  printf(" cost aeve year month day dtype name ");
   for(b=0;b<e;b++)
   printf(" %d %d %d %d %d %s %s ",f[b].cost,f[b].aeve,f[b].rdata[0],f[b].rdata[1],f[b].rdata[2],f[b].dtype,f[b].name);
       printf(" 查询完成,");
   system("pause");
  }
   if(h==3)
  {
    printf(" 请输入需要的数据");
    scanf("%s",d);
       for(b=0;b<j-1;b++)
  {
       if(!(strcmp(a[b].name,d)))
      {
       f[e]=a[b];e++;
      }

  }
  printf(" cost aeve year month day dtype name ");
   for(b=0;b<e;b++)
   printf(" %d %d %d %d %d %s %s ",f[b].cost,f[b].aeve,f[b].rdata[0],f[b].rdata[1],f[b].rdata[2],f[b].dtype,f[b].name);
       printf(" 查询完成,");
   system("pause");
  }
    if(h==4)
  {
    printf(" 请输入需要的数据");
    scanf("%d",&c);
       for(b=0;b<j-1;b++)
  {
       if(a[b].cost<=c){
       f[e]=a[b];e++;}
  }
  printf(" cost aeve year month day dtype name ");
   for(b=0;b<e;b++)
    printf(" %d %d %d %d %d %s %s ",f[b].cost,f[b].aeve,f[b].rdata[0],f[b].rdata[1],f[b].rdata[2],f[b].dtype,f[b].name);
       printf(" 查询完成,");
   system("pause");
  }
   if(h==5)
  {
    printf(" 请输入需要的数据");
    scanf("%d",&c);
       for(b=0;b<j-1;b++)
  {
       if(a[b].aeve<=c){
       f[e]=a[b];e++;}
  }
   printf(" cost aeve year month day dtype name ");
   for(b=0;b<e;b++)
  printf(" %d %d %d %d %d %s %s ",f[b].cost,f[b].aeve,f[b].rdata[0],f[b].rdata[1],f[b].rdata[2],f[b].dtype,f[b].name);
       printf(" 查询完成,");
   fclose(fp);
   system("pause");
  }
   if(h==6)
  {
    printf(" 请输入需要的数据");
    scanf("%s",g);
       for(b=0;b<j-1;b++)
  {
       if(!(strcmp(a[b].dtype,g))){
       f[e]=a[b];e++;}
  }
   printf(" cost aeve year month day dtype name ");
   for(b=0;b<e;b++)
    printf(" %d %d %d %d %d %s %s ",f[b].cost,f[b].aeve,f[b].rdata[0],f[b].rdata[1],f[b].rdata[2],f[b].dtype,f[b].name);
       printf(" 查询完成,");
   fclose(fp);
   system("pause");
  }
}
void qsort()//排序
{
 FILE *fp;
    int i=0,j=0,c,t,b;
    char str1[]="A",str2[]="B",str3[]="C";
    struct driver f;
   struct driver a[N];
printf(" (1)如果对成绩排序请输入1 (2)如果对费用排序请输入2 (3)如果对驾照等级排序请输入3:");
scanf("%d",&b);
   if (!(fp=fopen("dat.bat","r")))//用只读的方式打开文件夹
       printf(" error");
   while(!(feof(fp))){
   fread(&a[i],M,1,fp);
    i++;j++;}
    if(b==1){
    for(c=0;c<j-1;c++)
       for(t=0;t<j-2-c;t++)
       if(a[t].aeve>a[t+1].aeve){
       f=a[t];
       a[t]=a[t+1];
       a[t+1]=f;}}
       if(b==2)
      {
            for(c=0;c<j-1;c++)
       for(t=0;t<j-2-c;t++)
       if(a[t].cost>a[t+1].cost){
       f=a[t];
       a[t]=a[t+1];
       a[t+1]=f;}
      }
       if(b==3)
      {
            printf(" cost aeve year month day dtype name ");
            for(c=0;c<j-1;c++)
            if(!(strcmp(a[c].dtype,str1))){

     printf(" %d %d %d %d %d %s %s ",a[c].cost,a[c].aeve,a[c].rdata[0],a[c].rdata[1],a[c].rdata[2],a[c].dtype,a[c].name);
      }for(c=0;c<j-1;c++)
       if(!(strcmp(a[c].dtype,str2))){


    printf(" %d %d %d %d %d %s %s ",a[c].cost,a[c].aeve,a[c].rdata[0],a[c].rdata[1],a[c].rdata[2],a[c].dtype,a[c].name);
      }for(c=0;c<j-1;c++)
      if(!(strcmp(a[c].dtype,str3))){


    printf(" %d %d %d %d %d %s %s ",a[c].cost,a[c].aeve,a[c].rdata[0],a[c].rdata[1],a[c].rdata[2],a[c].dtype,a[c].name);
      system("pause");
      return;
      }}
        printf(" cost aeve year month day dtype name ");
       for(b=0;b<j-1;b++)
     printf(" %d %d %d %d %d %s %s ",a[b].cost,a[b].aeve,a[b].rdata[0],a[b].rdata[1],a[b].rdata[2],a[b].dtype,a[b].name);
       fclose(fp);
       printf(" 排序完成");
       system("pause");
}
void append()
{
    FILE *fp;
    struct driver a;
    printf(" 请输入需要追加人的费用:");
    scanf("%d",&a.cost);
    printf(" 请输入需要追加人的成绩:");
    scanf("%d",&a.aeve);
    printf(" 请输入需要追加人的年份:");
    scanf("%d",&a.rdata[0]);
    printf(" 请输入需要追加人的月份:");
    scanf("%d",&a.rdata[1]);
    printf(" 请输入需要追加人的日期:");
    scanf("%d",&a.rdata[2]);
    printf(" 请输入需要追加人的驾照类型:");
    scanf(" %s",a.dtype);
    printf(" 请输入需要追加人的名字:");
    scanf("%s",a.name);
    if (!(fp=fopen("dat.bat","ab+")))//用追加的方式打开文件夹
       printf("error");
      fwrite(&a,M,1,fp);
      fclose(fp);
      printf(" 追加完成,");

    system("pause");//每执行都有停留的时间,方便用户观察
}
void change()
{
    FILE *fp;
    char a[20];
    if(!(fp=fopen("pword.bat","wb")))
       printf(" open error");
       printf(" 请输入新密码:");
    scanf("%s",a);
    fwrite(&a,20,1,fp);
    fclose(fp);
    printf(" 密码修改完成,");
    system("pause");
}
void dlete()
{
   int i=0,j,f=0;
   FILE *fp;
   char b[20];
   printf(" 请输入需要删除的人的姓名:");
   scanf("%s",b);
   struct driver a[N],q;
   if (!(fp=fopen("dat.bat","r")))
       printf("error");
   while(!(feof(fp))){
   fread(&a[i],M,1,fp);
   i++;}
   for(j=0;j<i-1;j++)
       if(!(strcmp(a[j].name,b))){f++;
           q=a[j];
           a[j]=a[i-2];
           a[i-1]=q;
          }
           fclose(fp);
       if (!(fp=fopen("dat.bat","wb")))
       printf(" open error");
   for(j=0;j<i-1-f;j++)
      fwrite(&a[j],M,1,fp);
   fclose(fp);
   printf(" 数据删除完成,");
   system("pause");
}
void ichange()
{
   FILE *fp;
   struct driver b[N],f;
   char a[20];
   int c,i=0,j=0;
   if(!(fp=fopen("dat.bat","r")))
       printf("error");
  while(!(feof(fp))){
   fread(&b[i],M,1,fp);
    i++;j++;}
    fclose(fp);
   printf(" 请输入需要修改人的名字:");
   scanf("%s",a);
   for(c=0;c<j-1;c++)
       if(!(strcmp(b[c].name,a))){
       f=b[c];b[c]=b[j-2];b[j-2]=f;}
       if (!(fp=fopen("dat.bat","wb")))
       printf(" open error");
        for(j=0;j<i-2;j++)
   fwrite(&b[j],M,1,fp);
   fclose(fp);
   printf(" 请选择修改的项目 ");
   printf(" (1)year (2)month (3)day (4)cost (5)aeve (6)dtype:");
   scanf("%d",&c);
   if(c==1){
   printf(" 请输入年份:");
   scanf("%d",&f.rdata[0]);}
   if(c==2){
   printf(" 请输入月份:");
   scanf("%d",&f.rdata[1]);}
   if(c==3){
   printf(" 请输入天:");
   scanf("%d",&f.rdata[2]);}
   if(c==4){
   printf("-+ 请输入费用:");
   scanf("%d",&f.cost);}
   if(c==5){
   printf(" 请输入成绩:");
   scanf("%d",&f.aeve);}
   if(c==6){
   printf(" 请输入驾照类型:");
   scanf("%s",f.dtype);}
    if (!(fp=fopen("dat.bat","ab+")))//用追加的方式打开文件夹
       printf("error");
      fwrite(&f,M,1,fp);
      fclose(fp);
      printf(" 修改完成,");

    system("pause");//每执行都有停留的时间,方便用户观察
}



原文地址:https://www.cnblogs.com/hackering/p/12992648.html