1、题目要求:
设计一个学生成绩管理系统,主要用来管理学生基本信息和成绩,涉及知识点:函数;循环;选择;结构体等。
2.
2、系统功能要求:
- 输入功能:可建立学生信息(包括学号、姓名、成绩等),每个学生信息作为一条记录。
- 显示功能:完成学生记录的显示,能给出每个学生的总分、平均分、绩点等成绩信息。
- 查找功能:能够根据个人信息和成绩信息中的某一项查找到该生的基本信息和相关记录,并显示。
- 排序功能:根据序号或成绩等信息,安照一定的顺序进行排序。
- 修改功能,可修改该学生的信息,并在使用修改功能时要求输入密码,密码正确才能修改信息,否则不行。
- 其他功能(可自行设计增加)。
3、代码如下:
#include <stdio.h>
#include <string.h>
#define Max 50 //定义Max最大值为50
struct Student //定义一个学生结构体,里面含有名字,学号,成绩(绩点),年龄,性别
{
char name[25];
int number;
float score[5];
int age;
char sex[5] ;
};
struct class_room //定义一个班级结构体
{
struct Student stu[Max]; //定义一个学生结构体数组
int num; //用来记录学生人数
};
int main(void)
{
float score_sum(float s1,float s2,float s3,float s4,float s5); //声明一个5科总分的函数
void add_student(struct class_room *jixie7); //定义一个可添加学生信息的函数
void show_student(struct class_room *jixie7); //声明一个学生信息展现的函数
void printf_menu(); //声明一个菜单函数
float jidian_score(float s1,float s2,float s3,float s4,float s5); //声明一个绩点计算函数
int find_student(struct class_room *jixie7); //声明一个以学号number查找学生信息的函数
void change_student(struct class_room *jixie7); //声明一个修改学生信息的函数
void sort_student(struct class_room *jixie7); //声明一个排序学生序号的函数
struct class_room jixie7; //定义一个机械7班来记录学生的各种信息
jixie7.num = 0; //初始化学生人数为0
while(1)//无限循环
{
loop:
printf_menu();//调用主菜单函数输出主菜单
int choose;//定义一个序号
scanf("%d",&choose);
switch(choose)
{
case 1:
add_student(&jixie7);//添加学生
break;
case 2:
show_student(&jixie7);//显示学生
break;
case 3:
find_student(&jixie7);//查询学生
break;
case 4:
sort_student(&jixie7); //排序学生
break;
case 5:
change_student(&jixie7);//修改学生
break;
case 6:
return 0;//退出程序
default://若输出错误的序号,则跳转至重新输出
printf("输出错误,请重新输入!\n");
goto loop;
}
}
}
float sore_sum(float s1,float s2,float s3,float s4,float s5) //定义一个5科总分函数
{
float score_sum;
score_sum = s1+s2+s3+s4+s5;
return score_sum;
}
void add_student(struct class_room *jixie7)//添加学生信息,其中struct class_room *WLW为结构体指针
{
printf("请输入学生的姓名:\n");
scanf("%s",jixie7->stu[jixie7->num].name); //数组名代表首地址
printf("请输入学生的年龄:\n");
scanf("%d",&jixie7->stu[jixie7->num].age); //取变量的地址
printf("请输入学生的学号:\n");
scanf("%d",&jixie7->stu[jixie7->num].number);
printf("请输入学生的性别:\n");
scanf("%s",jixie7->stu[jixie7->num].sex);
printf("请按顺序输入学生的5科成绩(高数【5.5学分】,英语【4.0学分】,工程制图【3.0学分】,线性代数【2.0学分】,C语言程序设计【1.5学分】):\n");
scanf("%f%f%f%f%f",&jixie7->stu[jixie7->num].score[0],&jixie7->stu[jixie7->num].score[1],&jixie7->stu[jixie7->num].score[2],&jixie7->stu[jixie7->num].score[3],&jixie7->stu[jixie7->num].score[4]);
jixie7->num++;//班级人数加一
}
float jidian_score(float s1,float s2,float s3,float s4,float s5)
{
float GPA;
float xuefen_sum = 5.5+4.0+3.0+2.0+1.5;
GPA = ((s1-50)/10*5.5+(s2-50)/10*4.0+(s3-50)/10*3.0+(s4-50)/10*2.0+(s5-50)/10*1.5)/xuefen_sum;
return GPA;
}
void show_student(struct class_room *jixie7)//显示所有学生信息
{
int index;
for(index=0;index<jixie7->num;index++) //num为当前班级的人数,利用指针
{
printf("the %d student name is %s\n",index+1,jixie7->stu[index].name);
printf("the %d student age is %d\n",index+1,jixie7->stu[index].age);
printf("the %d student number is %d\n",index+1,jixie7->stu[index].number);
printf("the %d student sex is %s\n",index+1,jixie7->stu[index].sex);
printf("the %d student five socres is %f,%f,%f,%f,%f\n",index+1,jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4]);
printf("the %d student sum score is %f\n", index+1,sore_sum(jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4]));
printf("the %d student average score is %f\n", index+1,sore_sum(jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4])/5);
printf("the %d student jidian sovre is %f\n",index+1,jidian_score(jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4]));
}
}
int find_student(struct class_room *jixie7)//查找指定学生
{
int number,index;
printf("请输入要查找的学生number:\n");
scanf("%d",&number);
for(index=0;index<jixie7->num;index++) //遍历所有学号,有就打印
{
if(number==jixie7->stu[index].number)
{
printf("the %d student name is %s\n",index+1,jixie7->stu[index].name);
printf("the %d student age is %d\n",index+1,jixie7->stu[index].age);
printf("the %d student number is %d\n",index+1,jixie7->stu[index].number);
printf("the %d student sex is %s\n",index+1,jixie7->stu[index].sex);
printf("the %d student five socres is %f,%f,%f,%f,%f\n",index+1,jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4]);
printf("the %d student sum score is %f\n", index+1,sore_sum(jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4]));
printf("the %d student average score is %f\n", index+1,sore_sum(jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4])/5);
printf("the %d student jidian sovre is %f\n",index+1,jidian_score(jixie7->stu[index].score[0],jixie7->stu[index].score[1],jixie7->stu[index].score[2],jixie7->stu[index].score[3],jixie7->stu[index].score[4]));
return index;
}
}
printf("the student is not exist!\n"); //没有就输出没有该学生
return -1;
}
void change_student(struct class_room *jixie7)//修改学生信息
{
int panduan,choose,key_code;
panduan=find_student(jixie7);
loop2:
printf("请输入5位数密码:\n");
scanf("%d",&key_code);
if(key_code == 12345)
{
if(panduan!=-1)
{
loop1: //打个标签
printf("请选择修改学生信息的哪一项\n");
printf("1、姓名\n");
printf("2、年龄\n");
printf("3、number\n");
printf("4、性别\n");
printf("5,成绩\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("请输入新的学生姓名:\n");
scanf("%s",jixie7->stu[panduan].name);
break;
case 2:
printf("请输入新的学生年龄:\n");
scanf("%d",&jixie7->stu[panduan].age);
break;
case 3:
printf("请输入新的学生number:\n");
scanf("%d",&jixie7->stu[panduan].number);
break;
case 4:
printf("请输入新的学生性别:\n");
scanf("%s",jixie7->stu[panduan].sex);
break;
case 5: printf("成绩已经由教务处确定,不能随便更改,仍有疑问,可查原卷!!!\n");
break;
default:
printf("输出错误,请重新输入!\n");
goto loop1; // 返回到标签
}
}
}
else
{
printf("密码错误,请重新输入");
goto loop2;
}
}
void sort_student(struct class_room *jixie7)
{
int index,k,j,tmp,index1,tmp1;
char name[25];
for(index=0;index<jixie7->num-1;index++)//用选择排序法进行排序
{
for (j = index + 1; j < jixie7->num ; j++)
{
if (jixie7->stu[index].number > jixie7->stu[j].number)
{
tmp = jixie7->stu[index].number;
strcpy(name,jixie7->stu[index].name);
jixie7->stu[index].number =jixie7->stu[j].number;
strcpy(jixie7->stu[index].name,jixie7->stu[j].name);
jixie7->stu[j].number = tmp;
strcpy(jixie7->stu[j].name,name);
}
}
}
for(index=0;index<jixie7->num;index++)
{
printf(" the number %d student, name:%s\n",jixie7->stu[index].number,jixie7->stu[index].name);
}
}
void printf_menu() //打印主菜单函数
{
printf(" 学生管理系统 \n");
printf("1、添加学生信息 |\n");
printf("2、显示所有学生信息 |\n");
printf("3、查询学生信息 |\n");
printf("4、排序学生信息(以序号为标准) |\n");
printf("5、修改学生信息 |\n");
printf("6、退出 |\n");
printf("请输入相应的序号选择! \n");
}
4.有些自定义函数借鉴书上和一些博客的代码。