用C语言编辑一个学生成绩管理系统

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define N 50 /*定义符号常量,代表学生人数最大值*/

int count=0; /*全局变量,用于记录数组的当前位置*/

struct student /*定义结构体类型,代表学生信息*/

{

char name[9]; /*学生姓名*/

char number[10]; /*学生学号*/

float math; /*数学成绩*/

float english; /*英语成绩*/

};

void input(struct student *arr); /*函数声明,输入学生信息*/

void sort(struct student *arr); /*函数声明,按总分排序*/

void find(struct student *arr); /*函数声明,查找某位学生信息*/

main()

{

char selmenu; /*定义局部变量,用于记录用户选择的功能编号*/

struct student stud[N]; /*定义结构体数组,用于记录学生信息*/

do /*利用循环显示界面*/

{

system("cls"); /*清屏函数*/

printf("\n\n");

printf("\t\t\t\t 学生成绩管理系统 \n\n");

printf("\t\t\t\t1.输入学生成绩\n");

printf("\t\t\t\t2.按总分排榜\n");

printf("\t\t\t\t3.查找学生信息\n");

printf("\t\t\t\t4.退出\n\n");

printf("\t\t\t请输入功能选择编号(1-4):");

fflush(stdin); /*清空输入缓冲区*/

scanf("%c",&selmenu); /*接受用户选择的功能编号*/

switch(selmenu) /*输入不同功能编号调用相应函数来完成功能*/

{

case'1':

input(stud); /*调用输入学生信息函数,参数为学生信息数组名*/

break;

case'2':

sort(stud); /*调用按总分排榜函数,参数是数组名*/

break;

case'3':

find(stud); /*调用按学号和姓名查找学生信息函数*/

break;

}

}while(selmenu!='4'); /*判断是否退出*/

printf("\n\n\t\t\t----------------谢谢使用----------------\n\n"); /*输出告别词*/

}

void input(struct student *arr) /*定义输入学生信息函数*/

{

char ch; /*用于接收用户指令*/

do /*利用循环,由用户控制输入学生成绩*/

{

system("cls");

printf("\n输入第%d个学生的信息:\n输入学生姓名:",count+1);

scanf("%s",arr[count].name);

printf("\n输入学生学号:");

scanf("%s",arr[count].number);

printf("\n输入数学成绩:");

scanf("%f",&arr[count].math);

printf("\n输入英语成绩:");

scanf("%f",&arr[count].english);

count++; /*记录当前输入的学生资料的个数*/

printf("\n是否继续输入(y/n)\n");

fflush(stdin); /*清空输入缓冲区*/

ch=getchar();

}while(ch=='y'||ch=='Y'); /*判断用户指令,是否继续输入*/

}

void sort(struct student *arr) /*定义按总分排榜函数*/

{

int i,j,k; /*定义循环变量i,j,最小数位置k*/

struct student t; /*定义交换临时变量*/

if(count==0) /*判断数组中学生成绩是否存在*/

printf("无学生成绩,请先录入学生信息\n");

else

{

for(i=0;i<count-1;i++) /*用选择法按总分对学生成绩排序*/

{

k=i;

for(j=i+1;j<count;j++) /*k为arr[i]到arr[count-1]中最小数的位置*/

if((arr[k].math+arr[k].english)<(arr[j].math+arr[j].english))

k=j;

if(k!=i) /*如果最小数不是比较数列中第一个,对调*/

{

t=arr[k];

arr[k]=arr[i];

arr[i]=t;

}

}

printf("\n总分排榜:\n\n");

printf("\t姓名\t学号\t数学\t英语\t总分\t名次\n");

for(j=0;j<count;j++) /*输出按总分排榜后的学生成绩和名次*/

printf("\t%-6s\t%-4s\t%-6.1f\t%-6.1f\t%-6.1f\t%-5d\n",

arr[j].name,arr[j].number,arr[j].math,arr[j].english,arr[j].math+arr[j].english,

j+1);

}

printf("\n回车键返回主程序\n");

fflush(stdin);

getchar();

}

void find(struct student *arr) /*定义查找函数*/

{

int j;

char name[9]; /*用于接收用户输入的学生姓名*/

char number[10]; /*用于接收用户输入的学生学号*/

system("cls"); /*清屏函数*/

printf("\n请输入要查找的学生资料:\n");

printf("\n学生姓名:");

scanf("%s",name);

printf("\n学生学号:");

scanf("%s",number);

for(j=0;j<count;j++) /*使用字符串比较函数查找兵书出符合条件的学生成绩*/

{

if((strcmp(name,arr[j].name)==0)&&(strcmp(number,arr[j].number)==0))

{

printf("\n\t姓名\t学号\t数学\t英语\t总分\n");

printf("\t%-6s\t%-4s\t%-6.1f\t%-6.1f\t%-6.1f\n",

arr[j].name,arr[j].number,arr[j].math,arr[j].english,arr[j].math+arr[j].english);

break;

}

}

if(j>=count) /*如果没找到,会从循环条件退出*/

printf("\n未找到该学生纪录,请核对后重新查找!\n");

fflush(stdin); /*清空输入缓冲区*/

printf("\n回车键返回上一功能菜单\n");

getchar();

}