📄 student.cpp
字号:
// 函数头文件
#include<stdio.h> //输入输出函数 文件调用
#include<stdlib.h> //exit函数和清屏函数 文件调用
#include<string.h> //字符串函数 文件调用
// 函数声名
void sr(); //数据输入
void hz(); //数据汇总
void cx(); //数据查询
void pm(); //数据排序
// 结构体的定义
struct student //结构体的类型
{
char name[10];
double Chiese;
double Math;
double English;
double zongfen;
};
// 主函数
void main()
{
int q=0;
while (q != 5)
{
system("cls"); //清屏函数
printf("\n------------------------------------------\n");
printf("\t1. Input Name&score(输入姓名和分数)\n");
printf("\t2. Total Score(分数汇总)\n");
printf("\t3. Check(查询)\n");
printf("\t4. Sort (排名)\n");
printf("\t5. Exit(退出)\n");
printf("\n------------------------------------------\n");
printf("\n请选择1-5:");
scanf("%d",&q);
switch (q)
{
case 1:
sr();
break;
case 2:
hz();
break;
case 3:
cx();
break;
case 4:
pm();
break;
case 5:
exit(0); //退出函数(退出程序)
break;
}
}
}
// 输入学生信息函数
void sr()
{
struct student stu; //结构体的声名
char h='y',z;
FILE *fp; // 文件指针
// if ((fp=fopen ("xinxi.txt","w"))== NULL)
// {
// printf("文件打开有错误!");
// exit(1);
// }
while (h=='y' || h=='Y')
{
printf("请输入学生姓名:");
scanf("%s",stu.name);
printf("请输入语文成绩:");
scanf("%lf",&stu.Chiese );
printf("请输入数学成绩:");
scanf("%lf",&stu.Math );
printf("请输入英语成绩:");
scanf("%lf",&stu.English );
//结构体的引用 用结构体的名字加点(.)访问结构体里的成员
stu.zongfen=stu.Chiese+stu.English+stu.Math;
printf("是否保存?(y/n)");
scanf(" %c",&z);
if(z=='y' || z=='Y')
{
if ((fp=fopen ("xinxi.dat","ab"))== NULL) //打开文件并判断是否有错误
{
printf("文件打开有错误!");
exit(1);
}
fwrite(&stu,sizeof(struct student),1,fp); //把数据写入文件
fclose(fp); //关闭文件
}
printf("是否继续输入信息?(y/n)");
scanf(" %c",&h);
}
}
// 分数汇总函数
void hz()
{
FILE *fp;
struct student stu; //结构体的声名
if ((fp=fopen ("xinxi.dat","rb"))== NULL)
{
{
printf("文件打开有错误!");
exit(1);
}
}
printf("\n\tName\t\tTotal\n");
while(fread(&stu,sizeof(struct student),1,fp)==1) //把数据从文件读出来
{
printf("\t%s\t\t%.lf\n",stu.name,stu.zongfen);
}
printf("请按Enter返回!");
getchar();
getchar(); //接收Enter键
fclose(fp);
}
// 分数查询函数
void cx()
{
FILE *fp;
struct student stu,str;
char temp[10];
strcpy(str.name,""); //str.name赋值为空,为下面判断做准备
if ((fp=fopen ("xinxi.dat","rb"))== NULL)
{
{
printf("文件打开有错误!");
exit(1);
}
}
printf("请输要查询姓名:");
scanf("%s",temp);
while(fread(&stu,sizeof(struct student),1,fp)==1) //从文件读数据
{
if(strcmp(temp,stu.name)==0) //判断文件里的数据与你输入的是否相同
{
str=stu; //把找到的数据赋给一个新变量
}
}
if(strcmp(str.name,"")!=0) //判断新变量是否为空
{
printf("-----------------------------------------------------------\n\n");
printf("\n\tName\t\tChiese\t\tMath\t\tEnglish\t\tTotal\n");
printf("\t%s\t\t%.lf\t\t%.lf\t\t%.lf\t\t%.lf\n",str.name,str.Chiese,str.Math,str.English,str.zongfen); //输出查询到的所有数据
printf("\n-----------------------------------------------------------\n\n");
}
else
{
printf("-----------------------------------------------------------\n\n");
printf("查无此人!");
printf("\n-----------------------------------------------------------\n\n");
}
printf("请按Enter返回!");
getchar();
getchar();
fclose(fp);
}
// 分数排明函数
void pm()
{
FILE *fp;
int i,j,k=0;
struct student str[10],temp;
if ((fp=fopen ("xinxi.dat","rb"))== NULL)
{
{
printf("文件打开有错误!");
exit(1);
}
}
while(fread(&temp,sizeof(struct student),1,fp)==1) //读文件
{
str[k]=temp; //把文件里的数据存储到一个结构体数组
k++; //计算读文件的次数(文件里存储学生的个数)
}
fclose(fp); //关闭文件
// 冒泡排序法
for(i=0;i<k-1;i++)
for(j=i+1;j<k;j++)
if(str[i].zongfen < str[j].zongfen)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
// 输出前3名的数据
printf("\n\tName\t\tChiese\t\tMath\t\tEnglish\t\tTotal\n");
for(i=0;i<3;i++)
{
printf("\t%s\t\t%.lf\t\t%.lf\t\t%.lf\t\t%.lf\n",str[i].name,str[i].Chiese,str[i].Math,str[i].English,str[i].zongfen);
}
printf("请按Enter返回!");
getchar();
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -