发布时间 : 星期五 文章(桂电)学生成绩管理系统(论文加源代码) 数据结构与算法课设(C语言)更新完毕开始阅读c3cf3d1743323968011c9265
━━━┫\\n\}
/*************************************************************************** 功能:对某项成绩中所有元素总和求平均
参数:参数struct Student stud[ ]代表结构体数组首地址, n代表成员个数,o代表该项成绩的下标。 返回值:某项成绩所有成员的平均值 */
float class_avr(struct Student stud[], int n, int o) {
int i; //用于控制for循环次数
float ach_avr = 0; //用来存放平均值
for (i = 0; i < n; i++) /*求总和*/ {
ach_avr = ach_avr + stud[i].score[o]; //累加 }
ach_avr = ach_avr/n; //求平均 return ach_avr; //返回平均值 }
/*************************************************************************** 功能:将某项成绩的所有元素按降序排列
参数:参数*a代表结构体数组首地址,n代表调用部分包含成员个数,o代表该项成绩的下标 返回值:空 */
void desc_stu(struct Student stud[], int n, int o) {
int i,j; //用来控制循环次数
struct Student temp; //用于交换
printf(\学号\\t\\t姓名\\t\\t分数\
for (i = 0; i < n-1; i++) /*冒泡排序*/ {
for(j = i+1; j < n; j++) {
if (stud[j].score[o] > stud[i].score[o]) /*如果j为下标的成绩大于i为下标成绩则交换*/ {
temp = stud[i]; /*交换2个下标对应的所有学员信息*/ stud[i] = stud[j]; stud[j] = temp; } } }
for (i = 0; i < n; i++) /*输出排序后的学号姓名及排序的成绩*/ {
printf(\
printf(\ }
printf(\}
24
void chenji_stu(struct Student stud[], int n, int o) {
int i,j; //用来控制循环次数
struct Student temp; //用于交换 printf(\
printf(\┏━━━━━━┳━━━━━━━━┳━━━┳━━━┳━━━┳━━━┳━━━━━┓\\n\
printf(\┃学号 ┃ 姓名 ┃数据库┃ 算法 ┃ C语言┃总成绩┃ 平均成绩 ┃\\n\
printf(\┣━━━━━━╋━━━━━━━━╋━━━╋━━━╋━━━╋━━━╋━━━━━┫\\n\
for (i = 0; i < n-1; i++) /*冒泡排序*/ {
for(j = i+1; j < n; j++) {
if (stud[j].score[o] > stud[i].score[o]) /*如果j为下标的成绩大于i为下标成绩则交换*/ {
temp = stud[i]; /*交换2个下标对应的所有学员信息*/ stud[i] = stud[j]; stud[j] = temp; } } }
for (i = 0; i < n; i++) /*循环输出学员信息*/ {
int j; //用于控制循环依次输出三门成绩
printf(\┃ %-10s┃%-15s\ for(j = 0; j < 3; j++) /*依次输出三门成绩*/ {
printf(\┃%.1f \ }
printf(\┃%.1f\输出总成绩 printf(\┃ %.1f\输出平均成绩 printf(\┃\\n\
printf(\┣━━━━━━╋━━━━━━━━╋━━━╋━━━╋━━━╋━━━╋━━━━━┫\\n\ }
printf(\┗━━━━━━┻━━━━━━━━┻━━━┻━━━┻━━━┻━━━┻━━━━━┛\\n\输出单个学员信息 }
/*************************************************************************** 功能:对某项成绩进行统计(求平均成绩,优生人数,及格人数,优生率,及格率)并格式化输出 参数:参数*a代表结构体数组首地址,n代表调用部分包含成员个数,o代表该项成绩的下标 返回值:空 */
25
void stat_stu(struct Student stud[], int n, int o) {
int i; //控制循环次数
float stat[5]; //用来存放5个统计数据
printf(\平均成绩\\t及格率\\t\\t优生率\\t\\t及格人数\\t优生人数\\n\
printf(\---------\
stat[0] = class_avr(stud, n, o); //调用求平均函数求出平均成绩
stat[4] = 0; /*求优生人数*/ for (i = 0; i < n; i++) {
if (stud[i].score[o] >= 80) {
stat[4]++; } }
stat[3] = 0; /*求及格人数*/ for (i = 0; i < n; i++) {
if (stud[i].score[o] >= 60) {
stat[3]++; } }
stat[2] = (stat[4]/n)*100; //求优生率 stat[1] = (stat[3]/n)*100; //求及格率
printf(\格式化输出5项成绩*/ stat[0], stat[1], stat[2], int(stat[3]), int(stat[4]));
printf(\---------\}
/*************************************************************************** 功能:接收用户的选择分别按姓名或学号查找用户需要的信息
参数:参数struct Student stud[]代表结构数组首地址,n代表数组调用长度 返回值:返回值不为零则返回的是与查找到的信息对应的下标有数学关系的值 返回值为0则表示查找失败 */
int find_stu(struct Student stud[], int n) {
int i; //用于控制循环次数
int flag = 0; //用于接收用户的选择及判断 int sign = 0; //存放函数的返回值
char you_choice[16]; //接收用户输入的查找信息
fflush(stdin); /*接收用户的选择*/
printf(\请选择您要查询的方式:( 1:按学号 2:按名字; )\ scanf(\
while (flag < 1 || flag > 2) /*判断用户选择是否有误有误则重新输入选择*/ {
printf(\输入有误,请重新输入选择!\
26
fflush(stdin);
scanf(\ }
printf(\请输入该学生信息:\接收用户的查找信息*/ fflush(stdin);
scanf(\
if (flag == 2) /*如果用户选择按姓名查找*/ {
/*根据输入信息查找相关信息并根据查找情况得出不同返回值*/ for (i = 0; i < n; i++) //依次查找 {
if (strcmp(stud[i].name, you_choice) != 0) //如果第i项与查找信息不匹配 {
sign = 0;//令sign为0表示查找失败 }
else //如果第i项与查找信息匹配 {
sign = i+1;//令sign的值在0到n-1之间,并且等于该匹配项下标i加1 break; //查找到则中断查找循环 } } } else {
/*根据输入信息查找相关信息并根据查找情况得出不同返回值*/ for (i = 0; i < n; i++) {
if (strcmp(stud[i].num, you_choice) != 0) //如果第i项与查找信息不匹配 {
sign = 0; //令sign为0表示查找失败 }
else //如果第i项与查找信息匹配 {
sign = -i-1; //令sign的值在-(n-1)到o之间,并且等于该匹配项下标i加1求反
break;//查找到则中断查找循环 } } }
return sign;//返回sign的值以供下步操作判断 }
/*************************************************************************** 功能:根据查找函数的返回值找到对应信息并删除
参数:参数struct Student stud[]代表结构数组首地址
,n代表数组长度,y与要删除的数对应的下标有固定数学关系 返回值:空 */
void delete_stu(struct Student stud[], int n, int y) {
int i; //用于控制循环次数
char sign; //用于接收用户的选择
printf(\确认您要进行删除吗?(y/n)\提醒用户是否确定进行删除操作
27