#include<stdio.h>
#include<stdlib.h>
#include<string.h> //字符串处理 //调用strcmp函数
#include<windows.h>
int n=10;
struct student //定义一个student结构体
{
int num; //学号
char name[10]; //名字
float score[3]; //成绩
}stud[100];//stud[100]是全局变量,也是结构体变量
int i,choose,a,t=0;
long int num;
int main ()
{
void save();
void input();
void output();
void scoremodify();
void namemodify();
void scorecheck();
void namecheck();
void Addstudent();
void sclsearch();
while(1)
{
printf(" 学生成绩记录簿 \n");
printf("===========================\n");
printf(" 【1】-------------------------- 输入学生信息 \n");
printf(" 【2】-------------------------- 输出所有学生成绩 \n");
printf(" 【3】-------------------------- 添加学生成绩记录 \n");
printf(" 【4】-------------------------- 按照学号查询成绩 \n");
printf(" 【5】-------------------------- 按照姓名查询成绩 \n");
printf(" 【6】-------------------------- 按照学号修改成绩并保存 \n");
printf(" 【7】-------------------------- 按照姓名修改成绩并保存 \n");
printf(" 【8】-------------------------- 显示出某个分数段的学生信息 \n");
printf(" 【0】-------------------------- 退出 \n");
printf(" 请输入相应菜单编号: ");
scanf("%d",&a);
switch(a)
{
case 1:
input(); //输入
save(); //保存
break;
case 2:
output(); //输出
printf("\n");
system("PAUSE");
system("CLS"); //清屏
break;
case 3:
Addstudent();
printf("\n");
system("PAUSE");
break;
case 4:
scorecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 5:
namecheck();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 6:
scoremodify();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 7:
namemodify();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 8:
sclsearch();
printf("\n");
system("PAUSE");
system("CLS");
break;
case 0:exit(0);
default: ;
}
}
return 0;
}
void save()
{
FILE *fp;
if ((fp=fopen("stu.dat","wb"))==NULL)/*以只写的方式打开文件*/
{
printf("无法打开文件!\n");
return ;
}
for(i=0;i<n;i++)
if (fwrite (&stud[i],sizeof(struct student),1,fp)!=1)/*写入字节为 1 的信息在文件中*/
printf("文件写入错误!\n");
fclose(fp);/*关闭文件*/
}
void input()//录入学生成绩
{
int i;
char a;
for(i=0;i<n;i++)
{
printf("\n 请依次输入 学号 姓名 c语言成绩:\n");
scanf("%d%s%f",&stud[i].num,stud[i].name,&stud[i].score[0]);
printf("输入:y(继续),n(终止)!\n");
fflush(stdin); //清除输入缓存
scanf("%c",&a);
if(a=='n' || a=='N') //当输入n或者N时,录入中断
break;
}
n=i+1;
}
void Addstudent()
{
FILE *fp;
struct student s; //创建的一个对象,是局部结构体变量
fp=fopen("stu.dat","ab"); //读取stu数据文件,并以二进制打开文件,添加数据
if((fp=fopen("stu.dat","ab"))==NULL)
printf("File open error!\n");
else
{
printf("请输入所增加学生的 学号 姓名 c语言成绩:\n");
scanf("%d",&s.num );
scanf("%s",s.name);
scanf("%f",&s.score[0]);
fwrite (&s,sizeof(struct student),1,fp);
fclose(fp);/*关闭文件*/
}
printf("写入成功!\n");
}//end function Addstudent;
void output()
{
int i;
//float s;
FILE *fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
printf("\n 学号 姓名 c语言成绩\n");
for(i=0;fread(&stud[i],sizeof(struct student),1,fp)==1;i++)
{
printf("%d %10s % 10.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
fclose(fp);
n=i;
}
void scoremodify()
{
int number,i;
printf("请输入要修改信息的学生学号:");
scanf("%d",&number);
for(i=0;i<n;i++)
if(number==stud[i].num)
break;/*查找判断*/
if(i<n)/*查找判断*/
{
printf("请输入修改后的学生的信息:");
printf("\n 请输入学生的 c语言成绩:");
scanf("%f",&stud[i].score[0]);
printf("\n学号 姓名 c语言成绩\n");
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
save();
}
else
printf("没找到该学生的信息\n");
system("pause");system("cls");
}
void namemodify()
{
int i;
char name[10];
printf("请输入要修改信息的学生姓名:");
scanf("%s",&name);
for(i=0;i<n;i++)
if(strcmp(stud[i].name,name)==0)
break;/*查找判断*/
if(i<n)/*查找判断*/
{
printf("请输入修改后的学生的信息:");
printf("\n 请输入学生的 c语言成绩:");
scanf("%f",&stud[i].score[0]);
printf("\n学号 姓名 c语言成绩\n");
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
save();
}
else
printf("没找到该学生的信息\n");
system("pause");system("cls");
}
void namecheck()
{
char name[10];
printf("按照姓名查询请按\n");
printf("\n 请输入姓名:");
scanf("%s",&name);
printf("查询结果\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
if(strcmp(stud[i].name,name)==0)
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
void scorecheck()
{
int b;
printf("按照学号查询请按\n");
{
printf("\n 请输入学号:");
scanf("%d",&b);
printf("查询结果\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
if(stud[i].num ==b)
{
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}
}
void sclsearch()
{
int i;
printf("90 分以上:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=90)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); //取成绩数组的第一个元素
}
printf("80~89:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=80&&stud[i].score[0]<90)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("60~79:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]>=60&&stud[i].score[0]<80)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
printf("60 分以下:\n");
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
{
if(stud[i].score[0]<60)
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]);
}
}