#include<stdioh>
#include <stringh>
#define Num_score 6 // 此处为6门的成绩
#define Num_stu 3 // 此处为3个学生 可自己修改个数
#define score_H 90 //用于成绩筛选
#define score_L 60
typedef struct
{
int id; //编号
char name[30]; //姓名
char gender[10]; //性别
float sc[Num_score]; //存储Num_score门课的分数
float sum; //总成绩
} stu;
int main()
{
stu s[Num_stu];
int i,j;
for(i = 0; i < Num_stu; i++)
{
printf("请输入学生学号\n");
scanf("%d", &s[i]id);
printf("请输入姓名\n");
scanf("%s",s[i]name);
printf("请输入性别\n");
scanf("%s",s[i]gender);
printf("请输入%d门课的成绩\n",Num_score);
for(j = 0; j < Num_score; j++)
scanf("%f",&s[i]sc[j]);
s[i]sum = 0; //计算成绩总和;
for(int k = 0 ; k < Num_score; k++)
s[i]sum = s[i]sum + s[i]sc[k];
// s[i]ave = s[i]sum / Num_score; //平均成绩
}
for(i = 0; i < Num_stu; i++)
{
printf("学号%d的同学%s(%s)的总分为:%2f \n",s[i]id, s[i]name,s[i]gender,s[i]sum);
for (j = 0; j < Num_score; j++)
{
printf("第%d门成绩为:%2f \n", j + 1, s[i]sc[j]);
}
}
//按总成绩升序排列
stu stu_temp;
for (i = 1; i < Num_stu; i++)
{
for (j = 0; j < Num_stu - i; j++)
{
if (s[j]sum > s[j + 1]sum)
{
stu_temp = s[j];
s[j] = s[j + 1];
s[j + 1] = stu_temp;
}
}
}
//output
printf("按总成绩排序后:\n");
for(i = 0; i < Num_stu; i++)
{
printf("学号%d的同学%s(%s)的总分为:%2f \n",s[i]id, s[i]name,s[i]gender,s[i]sum);
for (j = 0; j < Num_score; j++)
{
printf("第%d门成绩为:%2f \n", j + 1, s[i]sc[j]);
}
}
// 成绩查询
int sid;
printf("请输入学号进行查询:\n");
scanf("%d",&sid);
int flag = 0;
for (i = 0; i < Num_stu; i++)
{
if (sid == s[i]id)
{
flag = 1;
for (j = 0; j < Num_score; j++)
{
printf("%s同学第 %d 门课程成绩为:%2f \n", s[i]name, j + 1, s[i]sc[j]);
}
printf("该同学的总分为:%2f \n",s[i]sum);
break;
}
}
if (flag == 0)
{
printf("你输入的信息有误\n");
}
//成绩筛选 >90 || < 60
for (i = 0 ; i < Num_score; i++)
{
printf("第%d门成绩高于%d的同学\n", i + 1, score_H);
for (j = 0; j < Num_stu; j++)
{
if (s[j]sc[i] > score_H)
{
printf("%s %2f \n", s[j]name, s[j]sc[i]);
}
}
}
for (i = 0; i < Num_score; i++)
{
printf("第%d门成绩低于%d的同学\n", i + 1, score_L);
for (j = 0; j < Num_stu; j++)
{
if (s[j]sc[i] < score_L)
{
printf("%s %2f \n", s[j]name, s[j]sc[i]);
}
}
}
return 0;
}
附录 综合实例——学生成绩查询系统
这是一个用c语言编写的小软件——学生成绩查询系统,同学们可以将其作为一个综合实例,对其进行仔细的阅读和研究,体验编程处理问题的过程,加深对编程语言的理解,提高处理问题的综合能力。
1、程序的功能:
1)可以根据用户输入的输入、输出文件名,读入学生成绩,完成数据的初始化。
2)可以查询指定学生的成绩,可以是指定科目的成绩,也可以是全部科目的成绩。
3)友好退出。
2、使用说明:
1)将输入文件放到指定的目录下(即/student/)
图1
2)启动管理程序studentexe
3)在程序的使用界面,首先输入输入文件名和输出文件名,完成程序的初始化, *** 作如下图所示
图2
然后,按照按照提示,输入学生姓名和需要程序的成绩(此软件暂时只设置了五成成绩,同学们可以按照需要扩展)科目代码,也可以输入查询所有成绩的代码。程序成绩,如下图所示
图3
4)输入代码“q”退出程序。
3、程序代码
#include
#include
#include
FILE f1,f2;
char file1[20],file2[20],name[200][20],name1[15];
int n,m,data[200][10];
void init(){
int i,j;
char ch=' ';
printf("%20c欢迎使用班级成绩管理系统\n\n",ch);
printf("请输入输入和输出文件名(中间用一个空格隔开):\n");
scanf("%s %s",file1,file2);// 1)该条语句的功能是什么?
f1=fopen(file1,"r");
f2=fopen(file2,"w");
fscanf(f1,"%d%d",&n,&m); // 2)该条语句的功能是什么?
for(i=1;i<=n;i++)
{
fscanf(f1,"%s",name[i]); // 3)该条语句的功能是什么?
data[i][0]=0; // 4)该条语句的功能是什么?没有这条语句可不可以?
for(j=1;j<=m;j++)
{
fscanf(f1,"%d",&data[i][j]);
data[i][0]+=data[i][j]; // 5)该条语句的功能是什么?
}
}
fprintf(f2,"name\tyuwen\tshuxue\tyingyu\twuli\thuaxue\tzongfen\n ");
for(i=1;i<=n;i++)
{
fprintf(f2,"%s\t",name[i]);
for(j=1;j<=m;j++)
fprintf(f2,"%d\t",data[i][j]);
fprintf(f2,"%d\n",data[i][0]);
}
fclose(f1);// 6)问什么可以在这关闭输入文件?
fclose(f2);
}
void search(char na[],char num){
int i=1,j;
while((i<=n)&&(strcmp(na,name[i])!=0))i++;
if(i<=n){
switch(num){
case '1':printf("%s的语文成绩为%d!\n",na,data[i][1]);break;
case '2':printf("%s的数学成绩为%d!\n",na,data[i][2]);break;
case '3':printf("%s的英语成绩为%d!\n",na,data[i][3]);break;
case '4':printf("%s的物理成绩为%d!\n",na,data[i][4]);break;
case '5':printf("%s的化学成绩为%d!\n",na,data[i][5]);break;
case 'a':
printf("%s的各科成绩为:\n",name[i]);
printf("语文\t数学\t英语\t物理\t化学\t总成绩\n");
for(j=1;j<=m;j++)
printf("%d\t",data[i][j]);
printf("%d\n",data[i][0]);
break;
default: printf("没有这种查询方式,请确认后再次输入!\n");
}
}
else printf("查无此人,请确认后再次查询!\n");
printf("\n\n");
}
main(){
init();//数据初始化
printf("数据初始化结束!\n\n");
printf("------------------------------------------------\n\n");
char na[20];
char num;
while(1){ // 7)该条语句的功能是什么?
//scanf("%s%c%c",na,&num,&num); // 8)此处的输入可不可以用这条语句?
printf("请输入学生的姓名和要查询成绩的科目代码(中间用一个空格隔开):\n(1 语文 2 数学 3 英语 4 物理 5 化学 a 所有科目成绩 q 退出)\n");
scanf("%s",na);
if(strcmp(na,"q")==0)break; // 9)问什么要用这条语句strcmp(na,"q")==0?
scanf("%c%c",&num,&num); // 10)为什么用了两次&num?
search(na,num);
printf("------------------------------------------------\n\n");
printf("\n请输入新的查询:\n\n");
}
system("pause");
}
这是我以前的一个程序,你改改吧,应该很好改
#include "stdioh"
#include "stringh"
struct student
{
char num[10];
int cscore;//yu wen
int iscore;//ying yu
char name[20]
};
void main()
{
struct student qq[3];
int i;
for(i = 0;i < 3;i++)
{
printf("请输入 语文成绩 英语成绩 学号 姓名:\n");
scanf("%d %d %s %s",&qq[i]cscore,&qq[i]iscore,qq[i]num,qq[i]name);
printf("语文成绩%d 英语成绩%d 学号%s 姓名%s\n",qq[i]cscore,qq[i]iscore,qq[i]num,qq[i]name);
printf("---%d ---%d --%s --%s\n",qq[i]cscore,qq[i]iscore,qq[i]num,qq[i]name);
}
//下面是查询
char nnm[10];
printf("请输入 学号:\n");
scanf("%s",nnm);
for(i = 0;i < 3;i++)
{
if(memcmp(nnm,qq[i]num,strlen(nnm)) == 0)
{
printf("语文成绩%d 英语成绩%d 学号%s 姓名%s\n",qq[i]cscore,qq[i]iscore,qq[i]num,qq[i]name);
break;
}
else
printf("未找到\n");
}
}
这个是我自己做的类式的,你可以按自己的要求改下·不难的和你的差不多,给分哦
#include<stdlibh>
#include<stdioh>
#include<stringh>
#include<conioh>
#define N 10
/定义结构体/
typedef struct students /标记为students/
{
char num[10]; /学生学号/
char name[10]; /学生姓名/
int age; /年龄/
char sex[10]; /性别/
float cyy; /C语言成绩/
float computer; /计算机成绩/
float english; /英语成绩/
float pj; /平均成绩/
}STU;
STU temp;
void sort(STU students[],int n); //排序
void save(STU students[] ,int n);//导出
int Locate(STU students[],int n);//查询
/--------------显示菜单--------------------/
char displaymenu()
{
char k;
system("cls");
printf(" 学生成绩管理 \n");
printf("-----------------------------------应用菜单-------------------------------------\n");
printf(" 1 输入学生成绩\n\n");
printf(" 2 输出学生成绩\n\n");
printf(" 3 查询学生成绩\n\n");
printf(" 4 修改学生成绩\n\n");
printf(" 5 查看成绩排序\n\n");
printf(" 6 查看成绩统计\n\n");
printf(" 7 保存数据\n\n");
printf(" 8 读取数据\n\n");
printf(" 9 退出系统\n\n");
printf(" 请选择你想进行的 *** 作:");
k=getchar();
return k;
}
/定义输出函数/
void printheader() /格式化输出表头/
{
printf("\n\n学生成绩管理系统\n\n\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | C语言成绩 |计算机成绩 | 英语成绩| 平均成绩 | \n");
}
void printdata(STU pp) /格式化输出表中数据/
{
STU p;
p=&pp;
printf("| %-5s| %-5s | %-4d| %-4s| %-60f| %-60f| %-50f| %-60f|\n",p->num,p->name,p->age,p->sex,p->cyy,p->computer,p->english,p->pj);
}
/添加学生信息/
int add(STU students[] ,int n)
{
int i=0;
system("cls");
printf(" \n");
printf(" 请输入学生信息 \n");
printf(" 退出请在学生号处输入:0 \n");
printf("请输入学生学号:\n ");
scanf("%s",students[i]num);
while(strcmp(students[i]num,"0") )//当输入的学号为0时结束输入
{
printf("请输入学生姓名:\n ");
scanf("%s",students[i]name);
printf("\n\n\n");
printf("请输入学生年龄:\n ");
scanf("%d",&students[i]age);
printf("\n\n\n");
printf("请输入学生性别:\n");
scanf("%s",students[i]sex);
printf("\n\n\n");
printf("请输入C语言成绩:\n ");
scanf("%f",&students[i]cyy);
printf("\n\n\n");
printf("请输入计算机成绩:\n ");
scanf("%f",&students[i]computer);
printf("\n\n\n");
printf("请输入英语成绩:\n ");
scanf("%f",&students[i]english);
printf("\n\n\n");
students[i]pj=(students[i]cyy+students[i]computer+students[i]english)/3;
printf("学生平均成绩: %-80f\n",students[i]pj);
i++;
printf("\n\n\n");
printf("请输入学生学号:\n ");
scanf("%s",students[i]num);
}
n=i;
save(students ,i);
return i;
}
/查询学生信息函数/
int Locate(STU students[],int n)
{
int k,m=-1;
char num[10],name[20];
int i=0;
system("cls");
printf(" 退出请输入:0 \n");
printf("请选择以什么方式查询:1)按学生学号查询 2)按学生姓名查询 \n");
scanf("%d",&k);
if(k==1)
{
printf("请输入你要查询的学生学号:\n");
scanf("%s",num);
while(i<n)
{
if(strcmp(students[i]num,num)==0) /若找到学号/
{
printf(">>学生学号:%s\n学生姓名:%s\n学生年龄:%d\n学生性别:%s\n>C语言成绩:%-80f\n>计算机成绩:%-80f\n>>英语成绩:%-80f\n>>平均成绩:%-80f\n",students[i]num,students[i]name,students[i]age,students[i]sex,students[i]cyy,students[i]computer,students[i]english,students[i]pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("没有所找学生信息\n");
getchar();
}
else if(k==2)
{
printf("请输入你要查询的学生姓名:\n");
scanf("%s",name);
while(i<n)
{
if(strcmp(students[i]name,name)==0) /若找到姓名/
{ printf("学生学号:%s\n学生姓名:%s\n学生年龄:%d\n学生性别:%s\n学生C语言成绩:%-80f\n计算机成绩:%-80f\n英语成绩:%-80f\n平均成绩:%-80f\n",students[i]num,students[i]name,students[i]age,students[i]sex,students[i]cyy,students[i]computer,students[i]english,students[i]pj);
m=i;
getchar();
break;
}
i++;
}
if(i>=n)
printf("没有所找学生信息\n");
}
return m;/返回一个根m便于修改学生信息/
getchar();
}
/显示函数/
void input(STU students[],int n)
{
int i;
system("cls"); //清屏
if(n==0) /表示没有学生信息记录/
{
printf("\n没有学生记录!\n");
}
printf("\n\n");
printheader(); /输出表格头部/
i=0;
while(i<n) /逐条输出数组中存储的学生信息/
{
printdata(students[i]);
i++;
}
getchar();
}
/修改子程序/
void Modify(STU students[],int n)
{
int i;
if(n<=0)
{
system("cls");
printf(" \n退出请输入:0 \n");
printf("\n----------not found!----------\n");
getchar();
return ;
}
system("cls");
printf("修改学生信息");
input(students,n);
i=Locate(students,n); /查询到该数组元素,并返回下标值/
if(i!=-1) /若i!=-1,表明已经找到该数组元素/
{
printf("请输入新的学生信息: \n");
printf(" 学号: ");
scanf("%s",students[i]num);
printf(" 姓名: ");
scanf("%s",students[i]name);
printf(" 年龄: ");
scanf("%d",&students[i]age);
printf(" 性别: ");
scanf("%s",students[i]sex);
printf(" C语言: ");
scanf("%f",&students[i]cyy);
printf(" 英语: ");
scanf("%f",&students[i]english);
printf(" 计算机: ");
scanf("%f",&students[i]computer);
students[i]pj=(students[i]cyy+students[i]english+students[i]computer)/3;
printf("平均成绩: %-90f\n",students[i]pj);
save(students ,n);
printf("\n-------------修改成功!-------------\n");
}
else
printf("not found!\n");
getchar();
}
/学生成绩排序子程序/
void sort(STU students[],int n)
{
int i,j,a,b,c,d,e,f,k;
float p;
printf(" \n退出请输入:0 \n");
printf("成绩排序方式选择: 1按C语言 2按英语 3按平均 \n ");
scanf("%d",&k);
if(k==1) /用选择法对C语言排序/
{
for(i=0; i<n; i++)
for(j=0;j<n-1;j++)
{
if(students[i]english<students[j+1]english)
{
temp=students[i];
students[i]=students[j+1];
students[j+1]=temp;
}
}
}
else if(k==2)/英语用冒泡法/
{
for(a=0; a<n-1; a++)
{
c=a;
for(b=a+1; b<n; b++)
if(students[b]cyy>students[c]cyy)
c=b;
if (c!=a)
{
temp=students[a];
students[a]=students[c];
students[c]=temp;
}
}
}
if(k==3) /平均成绩用插入法/
{
for(d=1;d<n;d++)
{
p=students[d]pj;
for(e=0;e<d;e++)
if(students[e]pj<p)
break;
if(e==d)
continue;
for(f=d;f>e;f--)
students[f]=students[f-1];
students[e]=temp;
}
}
input(students,n); /显示排序后的所有记录/
save(students ,n);
printf("\n 排序完成!\n");
}
/统计学生分数在各等级的人数子程序/
void Tongji(STU students[],int n)
{
int count6085=0,count85=0,count60=0;
int i=0;
system("cls");
printf(" \n退出请输入:0 \n");
input(students,n);
i=0;
while(i<n)
{
if(students[i]pj>85) {count85++;i=i+1;continue;} /平均成绩=>85/
if(students[i]pj>=60&&students[i]pj<=85) {count6085++;i=i+1;continue;} /60<平均成绩<85/
if(students[i]pj<60) {count60++;i=i+1;continue;} /平均成绩<60/
}
printf("\n统计结果\n\n");
printf("平均成绩高于85分的人数:%d \n",count85);
printf(" \n");
printf("平均成绩在65分和80分之间的人数:%d \n",count6085);
printf(" \n");
printf("平均成绩低于60分的人数:%d \n",count60);
printf(" \n");
printf("\n\n统计结束");
getchar();
}
/导出或保存数据/
void save(STU students[],int n)
{
FILE fp;
int i=0;
fp=fopen("students","wb+");/以读写方式打开创建一个二进制文件/
if(fp==NULL) /打开文件失败/
{
printf("\n打开文件错误!\n");
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&students[i],sizeof(STU),1,fp)==1)/每次写一条记录或一个结构数组元素至文件/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n共导出%d个学生信息\n",i);
getchar();
}
else
{
system("cls");
printf("没有信息导出\n");
getchar();
}
fclose(fp); /关闭此文件/
}
/导入数据/
void Read(STU students[],int n)
{
FILE fp;
int i=0;
fp=fopen("students","rb");/以只读方式打开一个已有的二进制文件/
if(fp==NULL) /打开文件失败/
{
printf("\n打开文件错误!\n");
exit(0);
}
for(i=0;i<N;i++)
{
if(fread(&students[i],sizeof(STU),1,fp)==1)/每次读一条记录或一个结构数组元素至文件/
continue;
else
break;
}
n=i;
if(i>0)
{
printf("\n\n共导入:%d 个学生信息 \n",i);
getchar();
}
else
{ system("cls");
printf("没有信息导入!\n");
getchar();
}
getchar();
fclose(fp); /关闭此文件/
}
/主函数/
void main()
{
STU students[N];
int n;
char s1[3],s2[3]={"1"};
int i,k;
printf("\n\n");
printf("\n");
printf("^ < 欢迎使用本软件> ^\n\n");
printf("^ <版本 : oooo> ^\n\n\n");
printf("^ <姓名>:卢景光 <班级>: 09623 <学号>:34 ^\n");
printf("^ ^\n");
printf("\n");
printf("\n\n");
for(i=0;i<3;i++)
{
printf("\n请输入密码:");
gets(s1);
if(strcmp(s1,s2)==0)
break;
else
printf("\n>密码错误,请重新输入");
}
if(i>2)
{
printf("\n您已连续3次输错,系统将退出!\n");
exit(0);
}
else
{
while(1)
{
k=displaymenu();
switch(k)
{
case '1' : add(students,&n); break;
case '2' : Read(students,&n);input(students,n) ;break;
case '3' : Read(students,&n);Locate(students,n);break;
case '4' : Read(students,&n);Modify(students,n);;break;
case '5' : Read(students,&n);sort(students,n);break;
case '6' : Read(students,&n);Tongji(students,n); break;
case '7' : save(students,n) ;break;
case '8' : Read(students,&n);break;
case '9' : system("cls");
printf("\n 谢谢您的使用\n");exit(0);break;
default : printf("\n\n输入错误,输入必须是0~9之间的一个数字!请重新输入\n");getchar();getchar();
}
}
}
}
以上就是关于c语言 成绩管理程序全部的内容,包括:c语言 成绩管理程序、C语言 学生成绩管理系统、C语言,按学号查询学生成绩等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)