您的位置:首页 > 其它

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

2011-12-11 22:09 477 查看
#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
; /*定义结构体数组,用于记录学生信息*/

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初学者学习参考只用,大家多多指教!!不胜感激*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c struct system search input math