数组
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
- int 建议为一个机器字长,32位环境下为4字节,64位环境下为8字节
指针
/*-----------------------------
【程序填空】题目:以下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");//每执行都有停留的时间,方便用户观察
}