学生成绩管理系统思路
学生成绩管理系统首先要对系统进行初始化,启动一个新的学生成绩系统。 系统初始化记录学生的姓名、学号、系,然后录入学生各科成绩,包括数学、英语、语文。 记录每个班级的成绩后,可以查看学生的平均成绩,是否及格。 成绩查询包括学号查询、姓名查询、院系查询、全部输出。 可以清楚看到通过人数,按分数排序,最后还可以增删学生成绩,或者更改学生成绩,避免人为输入成绩出错。
基本功能 1.结构
定义一个结构体,结构体的关键字,定义的结构体对象。 学号 char ID[20]; 名称字符名称[10]; 每个分数浮动标记,总分数浮动所有平均分数浮动;
2.条目(无效())
使用循环将数据从[0]输入到各种信息,计数器num+1。
2.删除(无效())
使用循环将数组中的信息与要删除的信息进行比较。 如果相同,则删除此项并将后面的信息前移一位, num-1; 如果没有项目,提示重新输入。
3.修改(无效())
使用循环将数组中的信息与要修改的信息进行比较。 如果相同,则重新复制修改; 如果没有项目,提示重新输入。
4.插入(无效())
提示输入插入的位置,将位置和位置的信息向后移动一位,将新的信息输入位置。 计数器编号+1。
5.排序(无效排序())
取排序的平均分数,依次比较相邻的两个分数,如果顺序小于前者,则交换。 重复访问元素的工作,直到不需要交换相邻元素为止,也就是说元素已经排序完毕。
6.显示(无效())
使用循环打印出输入的信息。
7.查询(无效x())
提示查询该学生的学号二级c语言成绩查询二级c语言成绩查询,使用循环比较,如果相同,打印出这条信息; 如果没有此项,提示重新输入。
8.主函数main()
使用无限循环while和()实现各个函数的调用,系统根据输入的数字控制相应的函数,同时显示可供选择的选项。
#include
#include
#include
#include
struct Student{ //每个学生对应一个结构体
char ID[20];//学号
char Name[10];//姓名
float Mark1;//语文成绩
float Mark2;//数学成绩
float Mark3;//英语成绩
float Mark4;//计算机成绩
float All; //总分
float Average;//平均成绩
}students[1000];
int num=0; //计数器
void Copy(struct Student *arr,int i,int j)
{
strcpy(arr[i].ID,arr[j].ID);
strcpy(arr[i].Name,arr[j].Name);
arr[i].Mark1 = arr[j].Mark1;
arr[i].Mark2 = arr[j].Mark2;
arr[i].Mark3 = arr[j].Mark3;
arr[i].Mark4 = arr[j].Mark4;
arr[i].All = arr[j].All;
arr[i].Average = arr[j].Average;
}
int Student_SearchByName(char name[])//通过姓名来检索学生
{
int i;
for (i=0;i
");
}
else
{
printf("你要修改的学生信息为:
");
Student_DisplaySingle(index);
printf("-- 请输入新值--
");
printf("请输入学号:");
scanf("%s",&students[index].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[index].Name);
getchar();
printf("请输入语文成绩:");
scanf("%f",&students[index].Mark1);
getchar();
printf("请输入数学成绩:");
scanf("%f",&students[index].Mark2);
getchar();
printf("请输入英语成绩:");
scanf("%f",&students[index].Mark3);
getchar();
printf("请输入计算机成绩:");
scanf("%f",&students[index].Mark4); //重新录入一套新的数据替代
getchar();
students[index].All=students[index].Mark1+students[index].Mark2+students[index].Mark3+students[index].Mark4;
students[index].Average=(students[index].Mark1+students[index].Mark2+students[index].Mark3+students[index].Mark4)/4;
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void deletee()//删除学生信息
{
int i;
while(1)
{
char id[20];
int index;
printf("请输入要删除的学生的学号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
if (index==-1)
{
printf("学生不存在!
");
}
else
{
printf("你要删除的学生信息为:
");
Student_DisplaySingle(index);
printf("是否真的要删除?(y/n)");
if (getchar()=='y')
{
for (i=index;inum) {
printf("输入的位置有误,请重新输入,当前共%d条数据
",num);
scanf("%d",&a);}
b=num-1;
for(;b>=a-1;b--)
{
//strcpy(students[b+1].ID,students[b].ID);
//strcpy(students[b+1].Name,students[b].Name);
//students[b+1].Mark1=students[b].Mark1;
//students[b+1].Mark2=students[b].Mark2;
//students[b+1].Mark3=students[b].Mark3;
//students[b+1].Mark4=students[b].Mark4;
//students[b+1].All=students[b].All;
//students[b+1].Average=students[b].Average;
Copy(students,b+1,b); //根据其输入的位置,将其及以后的数据向后移动一个位置
}
num++;
printf("请输入学号:");
scanf("%s",&students[a-1].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[a-1].Name);
getchar();
printf("请输入语文成绩:");
scanf("%f",&students[a-1].Mark1);
getchar();
printf("请输入数学成绩:");
scanf("%f",&students[a-1].Mark2);
getchar();
printf("请输入英语成绩:");
scanf("%f",&students[a-1].Mark3);
getchar();
printf("请输入计算机成绩:");
scanf("%f",&students[a-1].Mark4); //输入新数据
getchar();
students[a-1].All=students[a-1].Mark1+students[a-1].Mark2+students[a-1].Mark3+students[a-1].Mark4;
students[a-1].Average=(students[a-1].Mark1+students[a-1].Mark2+students[a-1].Mark3+students[a-1].Mark4)/4;
}
void search()//查询学生信息
{
while(1)
{
char name[20];
int index;
printf("请输入要查询的学生的姓名:");
scanf("%s",&name);
getchar();
index=Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置
if (index==-1)
{
printf("学生不存在!
");
}
else
{
printf("你要查询的学生信息为:
");
Student_DisplaySingle(index);
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void sort()//根据平均分排序
{
int i,j;
//struct students tmp;
for (i=0;imax)
max=students[a].Mark1;
}
for(a=0;a
max=students[0].Mark2;
for(a=1;amax)
max=students[a].Mark2;
}
for(a=0;amax)
max=students[a].Mark3;
}
for(a=0;amax)
max=students[a].Mark4;
}
for(a=0;a
代码修改如下
1.关于复制包含数组成员的结构体的问题
2.学号唯一性受限(函数)
3.新增文件读写
存在的问题
1.输出格式
2.插入()时,不判断学号的唯一性