#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#define N
100
struct
student //构造、定义、初始化学生结构体类型数组
{
long num; //学生学号
char name[20]; //姓名
float chinese; //性别
float math; //年龄
float english; //住址
struct student *next;
}
stu[N];
void
outdata()
{
FILE * fp;
int i;
fp=fopen("student.dat","wb");
for(i=0;i<N;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
}
void
write() /*学生信息的录入*/
{
int i;
printf("input data:\n");
for(i=0;i<N;i++)
{
scanf("%l",&stu[i].num);
gets(stu[i].name);
scanf("%f%f%f",&stu[i].chinese,&stu[i].math,&stu[i].english);
}
}
void cun() /*信息保存*/
{
outdata();
}
void indata()
{
FILE * fp;
int j;
if((fp=fopen("student.dat","rb"))==NULL)
{
printf("Cannot open file");
exit(0);
}
for(j=0;j<N;j++)
fread(&stu[j],sizeof(struct
student),1,fp);
fclose(fp);
}
void read() /*信息读取*/
{
int j;
printf("output data:\n");
indata(0);
}
void scan() /*信息浏览*/
{
int i;
for(i=0;i<N;i++)
printf("%l%s%f%f%f",&stu[i].num,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
}
void search() //信息查询
{
char ch;
while(ch!=0)
{
system("cls"); //清屏
printf("********************************/n");
printf("****** a.按学号查 ******/n");
printf("****** b.按最高分差 ******/n");
printf("****** c.退出查询 ******/n");
printf("********************************/n");
printf("输入a或b或c:");
ch=getchar();
fflush(stdin);
switch(ch)
{
case 'a':
double searcha();
break;
case 'b':
double searchb();
break;
case 'c':
break;
}
}
}
long query(long *p,long N,long i)
{
long *q=p+N-1;
for(*p<=q;p++)
{
if(*p==i)
return 1;
}
return -1;
}
void
searcha() //按学号查
{
struct student *p1;
long i,*p1;
printf("请输入您要查询的学生的学号\n")
scanf("%l",&i);
p1=stu->num;
query(*p1,N,i);
printf("%l%s%f%f%f"p1->num,p1->name,p1->chinese,p1->math,p1->english\n);
}
long max(long *p1,long *p2) //找成绩中最高分
{
int i,j;
long temp;
for(i=1;i<N;i++)
{
if(*p1<*p2)
{
temp=*p1;
*p1=*p2;
*p2=temp;
}
p2++;
}
}
void searchb() //按最高分查
{
int i;
while(i!=0)
{
system("cls"); //清屏
printf("******************************");
printf("****** 1 语文最高分 ******");
printf("****** 2 数学最高分 ******");
printf("****** 3 英语最高分 ******");
printf("****** 4 退出查询 ******");
printf("******************************");
scanf("%d",&i);
fflush(stdin);
swich(i)
{
case'1': max(&stu[0]->chinese,&stu[1]->chinese);
break;
case'2': max(&stu[0]->math,&stu[1]->math);
break;
case'3': max(&stu[0]->english,&stu[1]->english);
break;
case'4': break;
}
float sum(float i,float j,float m) //求三门学科总分
{
float k;
k=i+j+m;
}
void chan(float *p,int n) //逐个排序
{
float *p1,*p2,t;
for(p1=p;p1<=p+n-2;p1++)
for(p2=p1+1;p2<=p+n-1;p2++)
if(*p1<*p2)
{
t=*p1;
*p1=*p2;
*p2=t;
}
}
void sorta() //按总分排序
{
float a[N],i,*pt1,*pt2;
for(i=0;i<N;i++)
a[i]=sum(stu[i].chinese,stu[i].math,stu[i].english);
chan(a,N);
for(i=0;i<N;i++)
printf("%d",a[i]);
}
void sortb() //按姓名排序
{
int i,j;
struct student temp;
for(i=0;i<N;i++)
{
for(j=0;j<N-i;j++)
if(strcmp(stu[j].name,stu[j+1].name>0))
{
temp=stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp;
}
}
for(i=0;i<N;i++)
printf("%l%s%f%f%f",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english);
}
void sort //信息排序
{
int i;
while(i!=0)
{
system("cls"); //清屏
printf("******************************");
printf("****** 1.按总分排序 ******");
printf("****** 2.按姓名排序 ******");
printf("****** 0.退出排序 ******");
printf("******************************");
scanf("%d",&i);
fflush(stdin);
swich(i)
{
case'1':sorta();
break;
case'2':sort();
break;
case'0': break;
}
void
del() //删除信息
{
int
i,j,;
long k;
printf("请输入要删除的学生的学号:");
scanf("%l",&k);
for(i=0;i<N;i++)
{
if(stu[i].num==k)
{
stu[i]=stu[i+1];
break;
}
}
printf("\n\n删除%l号学生成功!",&k\n);
}
void modify() //修改信息
{
long t;
int i;
float p;
char x,c[50];
printf("请输入您要修改的学生的学号:");
scanf("%l",&t);
for(i=0;i<N;i++);
if(stu[i].num==t)
{
printf("请选择您要修改的部分:");
printf("a.姓名 b.语文成绩 c.数学成绩 d.英语成绩");
scanf("%c",&x);
switch(x)
{
case 'a':
gets(c);
stu[i].name=c[50];
break;
case 'b':
scanf("%f",&p);
stu[i].chinese=p;
break;
case 'c':
scanf("%f",&p);
stu[i].math=p;
break;
case 'd':
scanf("%f",&p);
stu[i].english=p;
break;
}
}
void menu() /*菜单栏*/
{
int i;
while(1)
{
system("cls"); //清屏
printf("*****************************");
printf("***** 1 信息录入 ******");
printf("***** 2 信息浏览
******");
printf("***** 3 信息查询 ******");
printf("***** 4 信息排序 ******");
printf("***** 5 信息删除 ******");
printf("***** 6 信息修改 ******");
printf("***** 7 保存信息 ******");
printf("***** 8 读取信息 ******");
printf("***** 0 退出 ******");
printf("*****************************");
}
scanf("%d",&i);
fflush(stdin);
switch(i)
{
case '1':
write(); //信息录入
break;
case '2':
scan(); //信息浏览
break;
case '3':
search(); //信息查询
break;
case '4':
sort(); //信息排序
break;
case '5':
del(); //信息删除
break;
case '6':
modify(); // 信息修改
break;
case '7':
cun(); //保存信息
break;
case '8':
read(); //读取信息
break;
case '0': //退出
break;
}
if(i==0)
{
printf("程序退出!\n");
}
}
void main() //主函数
{
menu();
}