You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

312 lines
6.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct //
{
double no;
char name[30];
float cscore;
}Student;
FILE *fp;
int i=0;
Student s[50];
void input(); /*输入记录*/
void output(); /*输出记录*/
void modify(); /*修改记录*/
void lookat(); /*学生信息查询*/
void section(); /*学生成绩分段*/
void rank(); /*成绩的排序*/
int fun(); /*目录函数*/
void choose(int n); /*目录的选项*/
int main(void) /*主函数*/
{
int n;
system("cls");
n=fun();
choose(n);
}
int fun() //目录函数
{
int n;
system("cls");
printf("\n\n\t\t\t\t 成绩记录薄");
printf("\n\n\t\t\t");
for(int i=0;i<33;i++)
printf("*");
printf("\n");
printf("\t\t\t ************菜单*************\n");
printf("\t\t\t* 1、创建学生的信息 \t*\n");
printf("\t\t\t* 2、输出所有学生的信息 \t*\n");
printf("\t\t\t* 3、修改成绩 \t*\n");
printf("\t\t\t* 4、查询 \t*\n");
printf("\t\t\t* 5、显示成绩分段的学生信息\t*\n");
printf("\t\t\t* 6、学生成绩排名 \t*\n");
printf("\t\t\t* 7、退出成绩记录薄 \t*\n");
printf("\t\t\t ****设计者:杨兰仕 胡玉凤****\n");
printf("\t\t\t");
for(int i=0;i<33;i++)
printf("*");
printf("\n\n");
printf("\n\t\t\t 请输入选项:");
scanf("%d",&n);
return n;
}
void input() //成绩输入
{
Student s[50];
system("cls");
int i=0;
FILE *fp;
fp=fopen("a.txt","a");
printf("请以0作为输入学生学号信息的结束\n");
do
{
printf("输入学生的学号:");
scanf("%lf",&s[i].no);
printf("输入学生的姓名:");
scanf("%s",s[i].name);
printf("输入学生的C语言成绩");
scanf("%f",&s[i].cscore);
if(s[i].no!=0)
fprintf(fp,"%.0lf %-4s %.1f\n",s[i].no,s[i].name,s[i].cscore);
}while(s[i].no!=0);
fclose(fp);
}
void output() //成绩输出
{
if((fp=fopen("a.txt","r"))==NULL)
{
printf("Cannot open the file!\n");
}
printf("\t\t\t全部的学生信息:\n");
int k=0;
while(fscanf(fp,"%lf%s%f",&s[k].no,s[k].name,&s[k].cscore)!=EOF)
{
printf("\t\t\t%.0lf\t%s\t%.1f\n",s[k].no,s[k].name,s[k].cscore);
k++;
}
fclose(fp);
}
void modify() //成绩修改
{
char st[30];
double x,num;
float nu;
int k=0;
system("cls");
if((fp=fopen("a.txt","r"))==NULL)
{
printf("Cannot open the file!\n");
return;
}
while(fscanf(fp,"%lf%s%f",&s[k].no,s[k].name,&s[k].cscore)!=EOF)
{
k++;
}
fclose(fp);
printf("输入1表示用学号修改输入2表示用姓名修改请选择\n");
scanf("%lf",&x);
if(x==1)
{
printf("请输入修改成绩人的学号:");
scanf("%lf",&num);
for(int i=0;i<k;i++)
if(num==s[i].no)
{
printf("请输入修改的成绩:\n");
scanf("%f",&nu);
s[i].cscore=nu;
fp=fopen("a.txt","w");
for(i=0;i<k;i++)
fprintf(fp,"%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
fclose(fp);
printf("修改成功\n");
return;
}
printf("没有找到该生的信息!\n");
return;
}
if(x==2)
{
printf("请输入修改成绩人的姓名:");
scanf("%s",st);
for(int i=0;i<k;i++)
if(strcmp(s[i].name,st)==0)
{
printf("请输入修改的成绩:\n");
scanf("%f",&nu);
s[i].cscore=nu;
fp=fopen("a.txt","w");
for(i=0;i<k;i++)
fprintf(fp,"%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
fclose(fp);
printf("修改成功\n");
return;
}
printf("没有找到该生的信息!\n");
return;
}
}
void lookat() //成绩查询
{
char st[30];
double x,num;
int k=0;
system("cls");
if((fp=fopen("a.txt","r"))==NULL)
{
printf("Cannot open the file!\n");
return;
}
while(fscanf(fp,"%lf%s%fd",&s[k].no,s[k].name,&s[k].cscore)!=EOF)
{
k++;
}
printf("输入1表示用学号查询输入2表示用姓名查询请选择\n");
scanf("%lf",&x);
if(x==1)
{
printf("请输入查询的学号:");
scanf("%lf",&num);
for(i=0;i<k;i++)
if(num==s[i].no)
{
printf("%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
return;
}
printf("对不起,找不到该生!\n");
return;
}
if(x==2)
{printf("请输入查询的姓名:");
scanf("%s",st);
for(i=0;i<k;i++)
if(strcmp(s[i].name,st)==0)
{
printf("%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
return;
}
printf("对不起,找不到该生!\n");
}
}
void section() //学生成绩分段
{
system("cls");
int k=0;
double c;
if((fp=fopen("a.txt","r"))==NULL)
{
printf("Cannot open the file!\n");
}
while(fscanf(fp,"%lf%s%f",&s[k].no,s[k].name,&s[k].cscore)!=EOF)
{
k++;
}
printf("\t\t\t 90分以上学生的信息!\n");
for(i=0;i<k;i++)
if(s[i].cscore>=90)
printf("\t\t\t%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
printf("\n\n");
printf("\t\t\t 80到89分学生的信息!\n");
for(i=0;i<k;i++)
if(s[i].cscore<90&&s[i].cscore>=80)
printf("\t\t\t%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
printf("\n\n");
printf("\t\t\t 60到79分学生的信息!\n");
for(i=0;i<k;i++)
if(s[i].cscore>=60&&s[i].cscore<80)
printf("\t\t\t%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
printf("\n\n");
printf("\t\t\t 60分以下学生的信息!\n");
for(i=0;i<k;i++)
if(s[i].cscore<60)
printf("\t\t\t%.0lf %s %.1f\n",s[i].no,s[i].name,s[i].cscore);
printf("\n\n");
}
void rank() //成绩的排序
{
Student t;
int k=0;
double sum=0,j=0;
system("cls");
if((fp=fopen("a.txt","r"))==NULL)
{
printf("Cannot open the file!\n");
}
while(fscanf(fp,"%lf%s%f",&s[k].no,s[k].name,&s[k].cscore)!=EOF)
{
k++;
}
for(i=0;i<k;i++)
for(int j=i+1;j<k+1;j++)
if(s[i].cscore<s[j].cscore)
{t=s[i];s[i]=s[j];s[j]=t;}
for(i=0;i<k;i++)
{
if(s[i].cscore>=60)
j++;
}
for(i=0;i<k;i++)
sum=sum+s[i].cscore;
for(i=0;i<k;i++)
printf("\t\t\t第%d名:%.0lf %-4s %.1f\n",i+1,s[i].no,s[i].name,s[i].cscore);
printf("\t\t\t最高分:%.1lf\n",s[0].cscore);
printf("\t\t\t最低分:%.1lf\n",s[k-1].cscore);
printf("\t\t\t及格率:%.2lf\n",j/k);
printf("\t\t\t平均分:%.2lf\n",sum/k);
}
void choose(int n) //目录的选项
{
system("cls");
int y;
switch(n)
{
case 1:input();
printf("\n\n\n\n\t\t\t是否返回输入1表返回输入2表退出\n");
scanf("%d",&y);
if(y==1)
choose(fun());break;
case 2:output();
printf("\n\n\n\n\t\t\t是否返回输入1表返回输入2表退出\n");
scanf("%d",&y);
if(y==1)
choose(fun());break;
case 3:modify();
printf("\n\n\n\n\t\t\t是否返回输入1表返回输入2表退出\n");
scanf("%d",&y);
if(y==1)
choose(fun());break;
case 4:lookat();
printf("\n\n\n\n\t\t\t是否返回输入1表返回输入2表退出\n");
scanf("%d",&y);
if(y==1)
choose(fun());break;
case 5:section();
printf("\n\n\n\n\t\t\t是否返回输入1表返回输入2表退出\n");
scanf("%d",&y);
if(y==1)
choose(fun());break;
case 6:rank();
printf("\n\n\n\n\t\t\t是否返回输入1表返回输入2表退出\n");
scanf("%d",&y);
if(y==1)
choose(fun());break;
case 7:exit(0);break;
default:printf("\n\n\t\t\t 输入没有的选项,请重新输入!\n");
choose(fun());
}
}