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

数组

by网络进哥

/*--------------------------------
【程序填空】功能:数组名作为函数参数,求平均成绩。
---------------------------*/
#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("\ninput 5 scores:\n");
  for(i=0;i<5;i++)
  /***********SPACE***********/
    scanf("%f",&sco[i]);
  /***********SPACE***********/
  av=aver(sco);
  printf("average score is %5.2f\n",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)!='\0';i++) ;
/***********SPACE***********/
   return(i);
}
void main( )
{
        char *str="abcdefg";
        printf("%d\n",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\n",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='\0';
}
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] ='\0';
}
main()
{
  char  s[100], t[100];
  printf("\nPlease enter string S:"); scanf("%s", s);
  fun(s, t);
  printf("\nThe result is: %s\n", 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("\nThe original string is :  %s\n",s);
        fun(s,&t);
        printf("\nThe result is :  %d\n",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]!='\0'; 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("\n\n");
}

/*----------------------------------
【程序改错】
功能:实现交换两个整数的值。
例如:给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\n",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\n\n",a,b,c);
        fun(&a,&b,&c);
        printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",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("\nEnter  n(<=1000) :");
                scanf("%d",&n);
        }
        while(n > 1000);
        num= fun(a,n);
        printf("\n\nThe result :\n");
        for(i=0; i<num; i++)
                printf("%5d",a[i]);
        printf("\n\n");
}

结构体



/*---------------------------------
【程序填空】功能:输入学生成绩并显示。
--------------------------------*/
# 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的成绩:\n", 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("\n");
  }
  output(stu);
}

void output(struct student stu[2])
{
  int i, j;
  printf("学号  姓名  成绩1  成绩2  成绩3\n");
  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");
  }
}

/*----------------------------------
【程序设计】题目:学生的记录由学号和成绩组成,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",n,ave);
        for(i=0;i<n; i++)
                printf("%s  %d\n",h[i].num,h[i].s);
        printf("\n");
        //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\n");
       }
   /***********SPACE***********/
       while(!feof(fp))
        {
          fgetc(fp);
          num++;
        }
  /***********SPACE***********/
     printf("num=%ld\n",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("\n please input No. %d score:\n",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\n");
    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.\n");
    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.\n");
       exit(0);
   }
   printf("input a string:\n"); 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\n",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\n");
    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\n");
  for(i=1;i<=3;i++)
  {
    fread(p,sizeof(struct student),1,fp);
    /**********FOUND**********/
    scanf("%4d %-10s %4d\n",(*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("\n\n\n\n\n\t\t\t\t管理系统核心部件丢失,请联系技术人员维护\n\n\n");return 0;}
        fread(&str,20,1,fp);
        fclose(fp);

    printf("\n\n\n\n\n\t\t\t\t欢迎使用欢迎使用驾校学员信息管理系统!\n\n\t\t\t\t请输入位管理员密码【初始密码(kdd)】:");//asdfg
     while (1)
    {
        c=getch();
        if (c=='\n'||c=='\r')  //windows下getch输入回车会返回\r\n
        {
            b[i]=0;
            break;
        }
        putchar('*');
        b[i++]=c;
    }
    printf("\n");
  if(strcmp(b,str)){
        printf("\t\t\t\t密码错误!!!!!");system("pause");
        return 0;}
    printf("\n\t\t\t\t是否打开背景颜色?打开请输入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("\n\n\n");
 printf("\t\t\t\t|********欢迎使用驾校学员信息管理系统**********|\n");//为了让图形界面更加好看采用4*\t的形式让输出居中
 printf("\t\t\t\t|**********************************************|\n");
 printf("\t\t\t\t|*1、信息维护(会建立全新的文件,请谨慎使用)   *|\n");
 printf("\t\t\t\t|*2、信息展示                                 *|\n");
 printf("\t\t\t\t|*3、信息查询                                 *|\n");
 printf("\t\t\t\t|*4、排序功能                                 *|\n");
 printf("\t\t\t\t|*5、追加数据                                 *|\n");
 printf("\t\t\t\t|*6、删除数据                                 *|\n");
 printf("\t\t\t\t|*7、修改密码                                 *|\n");
 printf("\t\t\t\t|*8、信息修改                                 *|\n");
 printf("\t\t\t\t|*0、退出                                     *|\n");
 printf("\t\t\t\t|**********************************************|\n");
 printf("\t\t\t\t请输入你们的选择:");
 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("输入的数据有误,请重新输入\n");
 }
 }
 return 0;
}
   struct driver *wlist()
    {
      struct driver *head;
      struct driver *p1,*p2;
      p2=p1=(struct driver *)malloc(sizeof(M));
       printf("\t\t\t\tPlease enter the name :");
      scanf("%s", p1->name);
      printf("\t\t\t\tPlease enter the aeve :");
      scanf("%d", &p1->aeve);
      printf("\t\t\t\tPlease enter the cost :");
      scanf("%d", &p1->cost);
      printf("\t\t\t\tPlease enter the Particular year :");
      scanf("%d", &p1->rdata[0]);
      printf("\t\t\t\tPlease enter the Month :");
      scanf("%d", &p1->rdata[1]);
      printf("\t\t\t\tPlease enter the day :");
      scanf("%d", &p1->rdata[2]);
      printf("\t\t\t\tPlease 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("\t\t\t\tPlease enter the name :");
            scanf("%s", p1->name);
            printf("\t\t\t\tPlease enter the aeve :");
            scanf("%d", &p1->aeve);
            printf("\t\t\t\tPlease enter the cost :");
            scanf("%d", &p1->cost);
            printf("\t\t\t\tPlease enter the Particular year :");
            scanf("%d", &p1->rdata[0]);
            printf("\t\t\t\tPlease enter the Month :");
            scanf("%d", &p1->rdata[1]);
            printf("\t\t\t\tPlease enter the day :");
            scanf("%d", &p1->rdata[2]);
            printf("\t\t\t\tPlease 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("\t\t\t\topen error");
       do
       {
        fwrite(head,M,1,fp);
        head=head->next;
       }while(head!=0);
        fclose(fp);
        printf("\t\t\t\t写入完成,");
        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("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
     for(i=0;i<j-1;i++)
     printf("\t\t\t\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",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("\t\t\t\t查询完成,");
    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("\t\t\t\terror");
    while(!(feof(fp))){
    fread(&a[i],M,1,fp);//将文件读出
     i++;j++;}
     printf("\t\t\t\t请输入需要查询的类容\n\t\t\t\t(1)如果是查询某个分数请输入1\n\t\t\t\t(2)如果是是查询某个费用请输入2\n\t\t\t\t(3)如果是查询某个名字请输入3\n\t\t\t\t(4)费用小于某个数请输入4\n\t\t\t\t(5)分数小于某个数请输入5\n\t\t\t\t(6)查询某个类型的驾照请输入6:");
     scanf("%d",&h);
     if(h==1)
    {
     printf("\t\t\t\t请输入需要的数据");
     scanf("%d",&c);
        for(b=0;b<j-1;b++)
    {
        if(a[b].aeve==c){
        f[e]=a[b];e++;}
    }
      printf("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
    for(b=0;b<e;b++)
    printf("\t\t\t\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",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("\t\t\t\t查询完成,");
    system("pause");
    }
    if(h==2)
    {
     printf("\t\t\t\t请输入需要的数据");
     scanf("%d",&c);
        for(b=0;b<j-1;b++)
    {
        if(a[b].cost==c){
        f[e]=a[b];e++;}
    }
   printf("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
    for(b=0;b<e;b++)
    printf("\t\t\t\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",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("\t\t\t\t查询完成,");
    system("pause");
    }
    if(h==3)
    {
     printf("\t\t\t\t请输入需要的数据");
     scanf("%s",d);
        for(b=0;b<j-1;b++)
    {
        if(!(strcmp(a[b].name,d)))
        {
        f[e]=a[b];e++;
        }

    }
   printf("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
    for(b=0;b<e;b++)
    printf("\t\t\t\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",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("\t\t\t\t查询完成,");
    system("pause");
    }
     if(h==4)
    {
     printf("\t\t\t\t请输入需要的数据");
     scanf("%d",&c);
        for(b=0;b<j-1;b++)
    {
        if(a[b].cost<=c){
        f[e]=a[b];e++;}
    }
   printf("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
    for(b=0;b<e;b++)
     printf("\t\t\t\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",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("\t\t\t\t查询完成,");
    system("pause");
    }
    if(h==5)
    {
     printf("\t\t\t\t请输入需要的数据");
     scanf("%d",&c);
        for(b=0;b<j-1;b++)
    {
        if(a[b].aeve<=c){
        f[e]=a[b];e++;}
    }
    printf("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
    for(b=0;b<e;b++)
   printf("\t\t\t\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",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("\t\t\t\t查询完成,");
    fclose(fp);
    system("pause");
    }
    if(h==6)
    {
     printf("\t\t\t\t请输入需要的数据");
     scanf("%s",g);
        for(b=0;b<j-1;b++)
    {
        if(!(strcmp(a[b].dtype,g))){
        f[e]=a[b];e++;}
    }
    printf("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
    for(b=0;b<e;b++)
     printf("\t\t\t\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",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("\t\t\t\t查询完成,");
    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("\t\t\t\t(1)如果对成绩排序请输入1\n\t\t\t\t(2)如果对费用排序请输入2\n\t\t\t\t(3)如果对驾照等级排序请输入3:");
scanf("%d",&b);
    if (!(fp=fopen("dat.bat","r")))//用只读的方式打开文件夹
        printf("\t\t\t\terror");
    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("\t\t\t\tcost\taeve\tyear\tmonth\tday\tdtype\tname\n");
             for(c=0;c<j-1;c++)
             if(!(strcmp(a[c].dtype,str1))){

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值