C程序简单学生成绩管理系统

来源:互联网 发布:易幻网络发展前景 编辑:程序博客网 时间:2024/04/28 17:38
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<string.h>
#define N 1000 /*定义符号常量,代表学生人数最大值*/
int count=0; /*全局变量,用于记录数组的当前位置*/
int addn=0; /*全局变量,用于记录插入的学生的编号*/
struct student /*定义结构体类型,代表学生信息*/  
{
char name[9]; /*学生姓名*/
char number[13]; /*学生学号*/
float chinese,math,english; /*语文成绩,数学成绩,英语成绩*/
char sex;
int age;
};
void input(struct student *stu); /*函数声明,输入学生信息*/
void sort(struct student *stu); /*函数声明,按总分排序*/
void search(struct student *stu); /*函数声明,查找某位学生信息*/
void add(struct student *stu);
int main()
{
char selmenu; /*定义局部变量,用于记录用户选择的功能编号*/
struct student stud[N]; /*定义结构体数组,用于记录学生信息*/
do /*利用循环显示界面*/
{
system("cls");/*清屏函数*/
printf("\n\n");
printf("\t\t\t*********************************\n");
printf("\n\t\t\t\t    *欢迎进入*\n");
printf("\t\t\t\t *学生成绩管理系统* \n\n");
printf("\t\t\t    *昆明理工大学电子信息工程*\n");
printf("\t\t\t*********************************\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");
printf("\t\t\t\t5.退出管理系统\n\n");
printf("\t\t\t请输入功能选择编号(1-5):");
fflush(stdin);/*清空输入缓冲区*/
scanf("%c",&selmenu);/*接受用户选择的功能编号*/
switch(selmenu) /*输入不同功能编号调用相应函数来完成功能*/
{
case'1':
   input(stud); /*调用输入学生信息函数,参数为学生信息数组名*/
   break;
case'2':
   sort(stud); /*调用按总分排榜函数,参数是数组名*/
   break;
case'3':
   search(stud); /*调用按学号和姓名查找学生信息函数*/
   break;
case'4':
   add(stud);
   break;
}
}while(selmenu!='5'); /*判断是否退出*/
system("cls");
printf("\n\n\n\n\n");
printf("\n\n\t\t\t----------------谢谢使用----------------\n\n");
printf("\t\t\t**设计人:\t飞应贤\t\t**\n");
printf("\n\n\t\t\t----------------谢谢使用----------------\n\n");
} /*输出告别词*/
void input(struct student *stu) /*定义输入学生信息函数*/
{
char ch; /*用于接收用户指令*/
do /*利用循环,由用户控制输入学生成绩*/
{
system("cls");
printf("\n输入第%d个学生的信息:\n请输入学生姓名:",count+1);
scanf("%s",stu[count].name);
printf("\n请依次输入学生信息:\n学号 \t\t性别(m/w) \t年龄 \t语文 数学 外语:\n");
scanf("%s %c %d %f %f %f",
   &stu[count].number,
   &stu[count].sex,
   &stu[count].age,
   &stu[count].chinese,
   &stu[count].math,
   &stu[count].english);
if(stu[count].sex != 'm' && stu[count].sex != 'w')
{
    printf("性别输入错误!");
} /*输入性别不是m或w时自动报错并要求重输*/
else
if(stu[count].chinese > 100 || stu[count].math > 100 || stu[count].english > 100)
{
    printf("分数输入错误!");
} /*输入成绩大于100分时报错重输*/
else
{
count++; /*记录当前输入的学生资料的个数*/
}
printf("\n是否继续输入(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y'); /*判断用户指令,是否继续输入*/
}
void sort(struct student *stu) /*定义按总分排榜函数*/
{
 char ch;
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((stu[k].chinese+stu[k].math+stu[k].english)<(stu[k].chinese+stu[j].math+stu[j].english))
     k=j;
    if(k!=i) /*如果最小数不是比较数列中第一个,对调*/
    {
     t=stu[k];
     stu[k]=stu[i];
     stu[i]=t;
    }
}
do
{
system("cls");/*清屏函数*/
printf("\n1、按降序排名,2、按升序排名:");
ch=getchar();
}while(ch!='1'&&ch!='2');


printf("\n****总分排榜(%s)****\n\n",ch=='1'?"降序":"升序");
printf("姓名\t学号\t\t性别\t年龄\t语文\t数学\t英语\t总分\t平均\t名次\n\n");
if(ch=='1')
{
for(j=0;j<count;j++) /*输出按总分降序排榜后的学生成绩和名次*/
    printf("%-6s\t%-12s\t%-1c\t%-2d\t%-6.1f\t%-6.1f\t%-6.1f\t%-6.1f\t%-6.1f\t%-5d\n",
stu[j].name,
stu[j].number,
stu[j].sex,
stu[j].age,
stu[j].chinese,
stu[j].math,
stu[j].english,
stu[j].chinese+stu[j].math+stu[j].english,
(stu[j].chinese+stu[j].math+stu[j].english)/3,
j+1);
}
else
{
for(j=count-1;j>=0;j--) /*输出按总分升序排榜后的学生成绩和名次*/
    printf("%-6s\t%-12s\t%-1c\t%-2d\t%-6.1f\t%-6.1f\t%-6.1f\t%-6.1f\t%-6.1f\t%-5d\n",
    stu[j].name,
stu[j].number,
stu[j].sex,
stu[j].age,
stu[j].chinese,
stu[j].math,
stu[j].english,
stu[j].chinese+stu[j].math+stu[j].english,
(stu[j].chinese+stu[j].math+stu[j].english)/3,
    j+1);
}
}
printf("\n回车键返回主程序\n");
fflush(stdin);
getchar();
}
void search(struct student *stu) /*定义查找函数*/
{
int j;
char name[9]; /*用于接收用户输入的学生姓名*/
char number[13]; /*用于接收用户输入的学生学号*/
system("cls"); /*清屏函数*/
printf("\n请输入要查找的学生资料:\n");
printf("\n学生姓名:");
scanf("%s",name);
printf("\n学生学号:");
scanf("%s",number);
for(j=0;j<count;j++) /*使用字符串比较函数查找并输出符合条件的学生成绩*/
{
if((strcmp(name,stu[j].name)==0)&&(strcmp(number,stu[j].number)==0))
{
   printf("\n姓名\t学号\t\t性别\t年龄\t语文\t数学\t英语\t总分\t平均\n");
   printf("%-6s\t%-12s\t%-1c\t%-2d\t%-6.1f\t%-6.1f\t%-6.1f\t%-6.1f\t%-6.1f\n",
    stu[j].name,
stu[j].number,
stu[j].sex,
stu[j].age,
stu[j].chinese,
stu[j].math,
stu[j].english,
stu[j].chinese+stu[j].math+stu[j].english,
(stu[j].chinese+stu[j].math+stu[j].english)/3
);
   break;
}
}
if(j>=count) /*如果没找到,会从循环条件退出*/
printf("\n未找到该学生纪录,请核对后重新查找!\n");          /*清空输入缓冲区*/
printf("\n回车键返回上一功能菜单\n");
fflush(stdin); /*清空输入缓冲区*/
getchar();
}
void add(struct student *stu)
{
char ch; /*用于接收用户指令*/
do /*利用循环,由用户控制输入学生成绩*/
{
system("cls");
printf("\n插入第%d个学生的信息:\n请输入插入的学生姓名:",addn+1);
scanf("%s",stu[count].name);
printf("\n请依次输入插入的学生信息:\n学号 \t\t性别(m/w) \t年龄 \t语文 数学 外语:\n");
scanf("%s %c %d %f %f %f",
   &stu[count].number,
   &stu[count].sex,
   &stu[count].age,
   &stu[count].chinese,
   &stu[count].math,
   &stu[count].english);
if(stu[count].sex != 'm' && stu[count].sex != 'w')
{
    printf("性别输入错误!");
}  /*输入性别不是m或w时自动报错并要求重输*/
else
if(stu[count].chinese > 100 || stu[count].math > 100 || stu[count].english > 100)
{
    printf("分数输入错误!");
}  /*输入成绩大于100分时报错重输*/
else
{
count++;
addn++;  /*记录当前输入的学生资料的个数*/
}
printf("\n是否继续输入(y/n)\n");
fflush(stdin); /*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y'); /*判断用户指令,是否继续输入*/

}



/*以上程序为在校初学C之作品,仅供C初学者学习参考只用,大家多多指教!!不胜感激*/

原创粉丝点击