C语言学生成绩管理系统(设计报告和全部源码)「建议收藏」

C语言学生成绩管理系统(设计报告和全部源码)「建议收藏」实现如下功能:1)能够实现学生成绩信息的插入、删除和修改;2)能够实现各种查询(分别根据学生学号、姓名、课程名称等);3)能够实现按照考试成绩、总评成绩进行排序;4)能够查询某门课程的最高分、最低分并输出相应学生信息;5)能够查询某门课程的优秀率(90分及以上)、不及格率;学生成绩管理系统设计与实现1)系统功能模块学生成绩管理系统主要功能是。。。。模块结构如“图1-1系统功能结构图”所示。图1-1系统功能结构图我是事先定义了:typedefstructNode{in

大家好,又见面了,我是你们的朋友全栈君。

实现如下功能:
1)能够实现学生成绩信息的插入、删除和修改;
2)能够实现各种查询(分别根据学生学号、姓名、课程名称等);
3)能够实现按照考试成绩、总评成绩进行排序;
4)能够查询某门课程的最高分、最低分并输出相应学生信息;
5)能够查询某门课程的优秀率(90 分及以上)、不及格率;

学生成绩管理系统设计与实现
1) 系统功能模块
学生成绩管理系统主要功能是。。。。 模块结构如“图1-1系统功能结构图”所示。

在这里插入图片描述

图1-1 系统功能结构图
在这里插入图片描述

我是事先定义了:
typedef struct Node
{

int num;
char name[12];
char subject[10];
float ave;
float labscore;
float exam;
float sum;
}student;
① “学生成绩信息输入”主要完成输入学生们的学号、姓名、课程名、平时成绩、实验成绩、考试成绩、总成绩

函数定义:void input( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

② 修改或删除学生成绩信息主要完成学生信息的修改替换或者删除该学生的所有成绩信息
函数定义:void modify( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

函数定义:void del( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

③ 成绩查询主要完成学生成绩信息的查询,可以按姓名查询,也可以按学号查询,还可以按课程名查询,还可以查询总分分数段的学生人数和在此分数段的学生成绩信息……
函数定义:void nameseek( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

函数定义:void numseek( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

函数定义:void subject( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

函数定义:void sumseek( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

④成绩统计主要完成学生成绩信息的统计,可以统计班上学生的总分排名,可以统计分数段的学生人数和学生信息,也可以统计班级及格率(sum>60),还可以统计班级优秀率(sum>85),
函数定义:void sumsort( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

函数定义:void sumseek( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

函数定义:void paserate( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

函数定义:void excellentrate( student *stu) ;
返 回 值:无
形 参:学生信息结构指针

⑤系统终止
当输入操作指令11,value==11时,跳出while循环包含的switch选择结构,系统结束

2).主要模块流程图
①主控模块
在这里插入图片描述

TIP:每个个函数执行后都在函数中重新调用文件指针将改变后的数据输入文件,保存更改后的数据
图2-1 主控模块流程图

②学生信息输入模块(学生基本信息)
在这里插入图片描述

③学生信息查询模块

在这里插入图片描述

文本TXT
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

附录:
主控模块:
int main()
{ 

system("color E1");
int value=-1,i;
float min,max;
char shuru[3],c;
FILE *fp=NULL;
char user[] = "dijia\0";
char key[] = "110\0";
char user2[12],key2[12];
printf("请输入用户名:\n");
scanf("%s",&user2);
printf("请输入密码:\n");
scanf("%s",&key2);
if(strcmp(user,user2) !=0 || strcmp(key,key2) !=0)
{ 

printf("用户名或密码错误!!!");
exit(0);                                              //***
}
printf("密码正确!\n\n");
void menu();                                              //函数声明
void input(student*);
void modify(student*);
void del(student *);
void nameseek(student *);
void numseek(student *);
void subject(student *);
void sumseek(student *,float ,float );
void sumsort(student *);
void paserate(student *);
void excellentrate(student *);
menu();
printf("您是否曾经输入过成绩?(如果曾经输入过,就无需再输入成绩,可直接从之前的保存的文件读入)请输入 'yes' or 'no'\n");
scanf("%s",shuru);
if((strcmp(shuru,"yes"))==0)
{ 

printf("无需再输入!");
if((fp=fopen("stu.txt","r"))==NULL)//打开文本,读入数据
{ 

printf("File open wrong!");
exit(0);
}
while((c=fgetc(fp))!=EOF)
{ 

if(c=='\n')
size++;
}
/*****************************
上面在计算行数的时候文件指针
已经指向文件末尾,所以要从新给
他赋值,让他指向文件头
******************************/
fp=fopen("stu.txt","r");
for(i=0;i<size;i++)
fscanf(fp,"%d %s %s %f %f %f %f",&stu[i].num,stu[i].name,stu[i].subject,&stu[i].ave,&stu[i].labscore,&stu[i].exam,&stu[i].sum);
fclose(fp);
}
else
printf("\n 进行其它操作前请先输入操作指令1输入学生成绩!否则出错概不负责!\n\n"); 
while(value!=11)
{ 

printf("\n");
printf("请选择所要执行的操作:\n");
scanf("%d",&value);
switch(value)
{ 

case 1:
input(stu);
break;
case 2:
modify(stu);
break;
case 3:
del(stu);
break;
case 4:
nameseek(stu);
break;
case 5:
numseek(stu);
break;
case 6:
subject(stu);
break;
case 7:
printf("请输入查询的分数段范围:\n");
printf("最低分数 min=");
scanf("%f",&min);
printf("最高分数 max=");
scanf("%f",&max);
sumseek(stu,min,max);
break;
case 8:
sumsort(stu);
break;
case 9:
paserate(stu);
break;
case 10:
excellentrate(stu);
break;
case 11:
printf("退出成功!");
break;
default:
printf("输入信息有误!!!");
}
}
return 0;
}
输入模块:
void input(student *stu)
{ 

int i,add=0;
FILE *fp;
int count=0;
printf("请输入你要录入学生信息的个数n:");
scanf("%d",&add);
count=size+add;
for(i=size;i<count;i++)
{ 

printf("请输入学生的学号:\n");
scanf("%d",&stu[i].num);
printf("请输入学生的名字:\n");
scanf("%s",&stu[i].name);
printf("请输入学生的课程名:\n");
scanf("%s",&stu[i].subject);
printf("请输入学生的平时成绩:\n");
scanf("%f",&stu[i].ave);
printf("请输入学生的实验成绩:\n");
scanf("%f",&stu[i].labscore);
printf("请输入学生的考试成绩:\n");
scanf("%f",&stu[i].exam);
stu[i].sum=0.2*stu[i].ave+0.3*stu[i].labscore+0.5*stu[i].exam;
size++;
}
if((fp=fopen("stu.txt","w"))==NULL)
{ 

printf("File open wrong!");
exit(0);
}
for(i=0;i<size;i++)
fprintf(fp,"%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].num,stu[i].name,stu[i].subject,stu[i].ave,stu[i].labscore,stu[i].exam,stu[i].sum);
fclose(fp);
}
查询模块:
void nameseek(student *stu)
{ 

int i;
char name1[12];
printf("请输入你要查询的学生名字叫:\n");
scanf("%s",name1);
for(i=0;i<size;i++)
{ 

if(strcmp(stu[i].name,name1)==0)
{ 

printf("学号\t姓名\t课程名\t平时成绩\t实验成绩\t考试成绩\t总成绩\n");
printf("%d\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].subject,stu[i].ave,stu[i].labscore,stu[i].exam,stu[i].sum);
return;
}
}
printf("系统无该学生!\n");
}
void numseek(student *stu)
{ 

int i;
char num1;
printf("请输入你要查询的学生学号为:\n");
scanf("%d",&num1);
for(i=0;i<size;i++)
{ 

if(stu[i].num==num1)
{ 

printf("学号\t姓名\t课程名\t平时成绩\t实验成绩\t考试成绩\t总成绩\n");
printf("%d\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].subject,stu[i].ave,stu[i].labscore,stu[i].exam,stu[i].sum);
return;
}
}
printf("系统无该学生!\n");
}
void subject(student *stu)
{ 

int i,flag=0;
char subject1[10];
printf("请输入你要查询的学生课程名为:\n");
scanf("%s",subject1);
for(i=0;i<size;i++)
{ 

if(strcmp(stu[i].subject,subject1)==0)
{ 

if(flag==0)
printf("学号\t姓名\t课程名\t平时成绩\t实验成绩\t考试成绩\t总成绩\n");
flag=1;
printf("%d\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].subject,stu[i].ave,stu[i].labscore,stu[i].exam,stu[i].sum);
}
}
if(flag==0)
printf("系统无该学生!\n");
}
void sumseek(student *stu,float min,float max)
{ 

int i,flag=1;
for(i=0;i<size;i++)
{ 

if((stu[i].sum>min)&&(stu[i].sum<max))
{ 

if(flag)
printf("学号\t姓名\t课程名\t平时成绩\t实验成绩\t考试成绩\t总成绩\n");
flag=0;
printf("%d\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].subject,stu[i].ave,stu[i].labscore,stu[i].exam,stu[i].sum);
}
}
if(flag==1)
printf("没有在此分数段的学生!");
}
void sumsort(student *stu)
{ 

int i,j,flag=1;
float minsum=100;
student tem;
for(i=0;i<size;i++)
{ 

if(flag==0) break;
else
{ 

flag=0;
for(j=0;j<size-i;j++)
{ 

if(stu[j].sum<stu[j+1].sum)
{ 

tem=stu[j+1];
stu[j+1]=stu[j];
stu[j]=tem;
flag=1;
}
}
}
}
printf("总分成绩排名:\n");
printf("学号\t姓名\t课程名\t平时成绩\t实验成绩\t考试成绩\t总成绩\n");
for(i=0;i<size;i++)
printf("%d\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].subject,stu[i].ave,stu[i].labscore,stu[i].exam,stu[i].sum);
}
void paserate(student *stu)
{ 

int count=0,i;
float pass=60.0;
for(i=0;i<size;i++)
{ 

if(stu[i].sum>=pass)
++count;
}
printf("及格通过率==%.2f\n",(float)count/(float)size);
}
void excellentrate(student *stu)
{ 

int count=0,i;
float excellent=85.0;
for(i=0;i<size;i++)
{ 

if(stu[i].sum>=excellent)
++count;
}
printf("优秀率==%.2f\n",float(count)/(float)size);
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151570.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • PS PhotoShop CS5 CS6 序列号 安装

    PS PhotoShop CS5 CS6 序列号 安装

  • qtabbar设置不同宽度_华为最小宽度默认

    qtabbar设置不同宽度_华为最小宽度默认随手记。因为自己搜没搜到。一行代码搞定。我是加在resizeEvent函数中的。ui.tabWidgetCentral->tabBar()->setMaximumWidth(width);修改后效果原效果

  • apk伪造签名_如何反编译app

    apk伪造签名_如何反编译app反编译apk过程反编译目的需要的环境和工具工具环境反编译流程apktool解包导出apk的源代码修改Smali代码无法选中文本框添加开机自启Smali源码Java源码apktool打包apk签名模拟器安装apk验证apk反编译目的反编译apk:1  对apk应用进行激活成功教程并重新打包,反编译就是逆向的过程。  Androidapk是用高级语言源代码,通常是Java,对apk的逆向智能转换成汇编语言,即Smali。  这次反编译的目的是为了学习apk的软件安全,了解apk的编译过程。现有一个apk的

  • 深度强化学习之模仿学习(Imitation Learning)

    深度强化学习之模仿学习(Imitation Learning)  上一部分研究的是奖励稀疏的情况,本节的问题在于如果连奖励都没有应该怎么办,没有奖励的原因是,一方面在某些任务中很难定量的评价动作的好坏,如自动驾驶,撞死人和撞死动物的奖励肯定不同,但分别为多少却并不清楚,另一方面,手动设置的奖励可能导致不可控的行为。要解决此类问题,可以将人类专家的范例作为强化学习代理的参考去学习,因此模仿学习又叫演示学习(Learningbydemonstration)…

  • 算法学习笔记——贪婪

    算法学习笔记——贪婪

  • webservice 实例 创建与 调用「建议收藏」

    webservice 实例 创建与 调用「建议收藏」webservice实例创建与调用序webservice选型配置代码webservice接口层接口实现实体webservice挂靠配置启动服务测试服务测试:测试地址客户端生成环境配置代码生成序对接SAP系统,指定要用webservice做对接。不然打死也不用webservice,感觉webService也实现不怎么流行了,过程中遇到了不少问题。就javawebservice而言,框架就有不下十种。网上的教程更是五花八门,零零碎碎,并且很多误导。本博将记录下项目里用的webservi

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号