搜档网
当前位置:搜档网 › 学生成绩管理系统

学生成绩管理系统

#include
#include
#include
#include
#include
typedef struct
{
int ID; //学生的学号
char name[20]; //学生的名字
int age; //学生的年龄
char sex[5]; //学生的性别
int year; //学生出生年
int month; //学生出生月
char address[60]; //学生的地址
char phone_number[20]; //学生的电话号码
int score[10]; //学生的成绩
}Student;
struct student1
{
char name1; //通过输入查找的学生姓名
};
static int stu_num; //记录学生总数
void input_student_information(Student student[]); //录入学生的基本信息
void output_student_information(Student student[],int num); //输出学生的基本信息
void sort_information1(Student student[], int num); //对学生的信息以学号由低到高排序“用气泡排序法”
void sort_information2(student student[], int num); //对学生的信息以学号由低到高排序“用直接排序法”
void sort_information3(student student[], int num); //对学生的信息以成绩由低到高排序“用气泡排序法”
void sort_information4(student student[], int num); //对学生的信息以成绩由低到高排序“用直接排序法”
int search_information1(Student student[], int num); //按学号查询学生的信息“用线性搜索法”
int search_information2(Student student[], int num); //按学号查询学生的信息“用对分搜索法”
int search_information3(Student student[], int num); //按姓名查询学生的信息“用线性搜索法”
int search_information4(Student student[], int num); //按姓名查询学生的信息“用对分搜索法”
int search_information5(Student student[], int num); //按成绩查询学生的信息“用线性搜索法”
int search_information6(Student student[], int num); //按成绩查询学生的信息“用对分搜索法”
void cancle_information(Student student[]); //删除学生的信息
int judge_number(int num); //判断系统中剩下的学生数目
int main()
{
Student student[1000]; //新建结构体变量
int choice, counter, search_number, judge;
char reply;
system("color 12"); //设置背景色为蓝色,前景色为绿色
do
{
system("cls"); //清理屏幕
/*
** 主操作菜单
*/
printf("\n**********************************************************************\n");
printf(" ╔════════════════════════╗\n");
printf(" ║************欢迎使用学生成绩管理系统************║\n");
pr

intf(" ╠════════════════════════╣\n");
printf(" ║1 录入学生的的基本信息: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║2 学生的信息浏览(输出所有学生信息): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║3 学生信息排序(按学号从小到大“气泡排序法”): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║4 学生信息排序(按学号从小到大“直接排序法”): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║5 学生信息排序(按成绩从低到高“气泡排序法”): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║6 学生信息排序(按成绩从低到高“直接排序法”): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║7 按学号查询学生信息(线性搜索法查找): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║8 按学号查询学生信息(对分搜索法查找): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║9 按姓名查询学生信息(线性搜索法查找): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║10 按姓名查询学生信息(对分搜索法查找): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║11 按成绩查询学生信息(线性搜索法查找): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║12 按成绩查询学生信息(对分搜索法查找): ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║13 修改学生的信息: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║14 学生信息注销: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║0 退出系统: ║\n");
printf(" ╚════════════════════════╝\n");
printf("\n****请输入您想要进行的操作的选项前面的数字:");
scanf("%d",&choice);
printf("\n");
switch (choice

)
{
case 1:
do
{
system("cls");
printf("******************************************************\n");
stu_num ++;
printf("请输入第%d位学生的信息:\n",stu_num);
input_student_information(student); //调用函数,录入学生的基本信息
printf("是否继续录入学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
system("cls");
break;
case 2:
system("cls");
judge = judge_number(stu_num);
if (judge) //若系统中没有学生信息,则退出子菜单,进入主菜单
{
break;
}
for (counter=1; counter<=stu_num; counter++)
{
output_student_information(student,counter); //调用函数,输出学生的基本信息
printf("\n****************************************************\n");
}
printf("按任意键返回主菜单:");
getch();
system("cls");
break;
case 3:
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
sort_information1(student, stu_num);
for (counter=1; counter<=stu_num; counter++)
{
output_student_information(student,counter); //学生信息排序(按学号从小到大“气泡排序法”
printf("\n****************************************************\n");
}
printf("按任意键返回主菜单:");
getch();
system("cls");
break;
case 4:
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
sort_information2(student, stu_num);
for (counter=1; counter<=stu_num; counter++)
{
output_student_information(student,counter); //学生信息排序(按学号从小到大“直接排序法”)
printf("\n****************************************************\n");
}
printf("按任意键返回主菜单:");
getch();
system("cls");
break;
case 5:
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
sort_information3(student, stu_num);
for (counter=1; counter<=stu_num; counter++)
{
output_student_information(student,counter); //学生信息排序(按成绩从低到高“气泡排序法”)
printf("\n****************************************************\n");
}
printf("按任意键返回主菜单:");
getch();
system("cls");
break;
case 6:
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
sort_information4(student, stu_num);
for (counter=1; counter<=stu_num; counter++)
{
output_student_information(student,counter); //学生信息排序(按成绩从低到高“直接排序法”)
printf("\n****************************************************\n");
}
printf("按任意键返回主菜单:");
getch();
system("cls");
break;
case 7:
do
{
system("cls");
jud

ge = judge_number(stu_num);
if (judge)
{
break;
}
search_number = search_information1(student,stu_num); //按学号查询学生信息(线性搜索法查找)
output_student_information(student,search_number);
printf("是否继续输入查询学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
system("cls");
break;
case 8:
do
{
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
search_number = search_information2(student,stu_num); //按学号查询学生信息(对分搜索法查找)
output_student_information(student,search_number);
printf("是否继续输入查询学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
system("cls");
break;
case 9:
do
{
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
search_number = search_information3(student,stu_num); //按姓名查询学生信息(线性搜索法查找)
output_student_information(student,search_number);
printf("是否继续输入查询学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
system("cls");
break;
case 10:
do
{
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
search_number = search_information4(student,stu_num); //按姓名查询学生信息(对分搜索法查找))
output_student_information(student,search_number);
printf("是否继续输入查询学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
system("cls");
break;
case11:
do
{
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
search_number = search_information5(student,stu_num); //按成绩查询学生信息(线性搜索法查找)
for(counter=1; counter<=stu_num; counter++)
{
if(student[search_number].score==student[counter].score)
output_student_information(student,counter);
}
printf("是否继续输入查询学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
system("cls");
break;
case 12:
do
{
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
search_number = search_information6(student,stu_num); //按成绩查询学生信息(对分搜索法查找)
for(counter=1; counter<=stu_num; counter++)
{
if(student[search_number].score==student[counter].score)
output_student_information(student,counter);
}
printf("是否继续输入查询学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((r

eply=='Y')||(reply=='y'));
system("cls");
break;
case 13:
do
{
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
search_number = search_information1(student,stu_num); //找到要修改的学生的学号

/*
** 修改学生信息菜单
*/
printf("\n**********************************************************************\n");
printf(" ╔════════════════════════╗\n");
printf(" ║************欢迎使用学生成绩管理系统************║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║1 修改学生的学号: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║2 修改学生的姓名:: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║3 修改学生的年龄: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║4 修改学生的性别: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║5 修改学生的出生年月: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║6 修改学生的地址: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║7 修改学生的电话: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║8 修改学生的成绩: ║\n");
printf(" ╠════════════════════════╣\n");
printf(" ║0 完成修改,进入主菜单: ║\n");
printf(" ╚════════════════════════╝\n");
printf("\n****请输入您想要进行的操作的选项前面的数字:");
scanf("%d",&choice);
printf("\n");

switch (choice)
{
case 1:
printf("**请输入修改后的学号:");
scanf("%d", &student[search_number].ID);
getchar();
break;
case 2:
printf("**请输入修改后的姓名:");
scanf("%s", &student[search_number].name);
getchar();
break;
case 3:
printf("**请输入修改后的年龄:");
scanf("%d", &student[search_number].age);
getchar();
break;
case 4:
printf("**请输入修改后的性别:");
scanf("%s", &student[se

arch_number].sex);
getchar();
break;
case 5:
printf("**请输入修改后的出生年月:");
scanf("%4d%2d", &student[search_number].year,&student[search_number].month);
getchar();
break;
case 6:
printf("**请输入修改后的地址:");
scanf("%s", &student[search_number].address);
getchar();
break;
case 7:
printf("**请输入修改后的电话:");
scanf("%s", &student[search_number].phone_number);
getchar();
break;
case 8:
printf("**请输入修改后的成绩:");
scanf("%s", &student[search_number].score);
getchar();
break;
default:
break;
}
printf("是否继续输入修改学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
printf("按任意键返回主菜单:");
getch();
system("cls");
break;
case 14:
do
{
system("cls");
judge = judge_number(stu_num);
if (judge)
{
break;
}
cancle_information(student);
printf("是否继续删除学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
} while ((reply=='Y')||(reply=='y'));
system("cls");
break;
case 0:
{
getchar(); //吸收进入子菜单时输入的回车符
printf("是否希望退出程序?(Y/N)或者(y/n)");
scanf("%c",&reply);
getchar();
if ((reply=='y')||(reply=='Y'))
{
exit(0);
}
}
}
}while (1); //程序未使用退出子菜单时,循环一直进行

getch();
return 0;
}
void input_student_information(Student student[])
{
printf("****学号:"); //录入学号
scanf("%d", &student[stu_num].ID);
getchar(); //吸收回车符
printf("****姓名(姓名之间不要插入空格):"); //录入学生的姓名
scanf("%s", &student[stu_num].name);
getchar();
printf("****年龄:"); //录入学生的年龄
scanf("%d", &student[stu_num].age);
getchar();
printf("****性别:"); //录入学生的性别
scanf("%s", &student[stu_num].sex);
getchar();
printf("****出生年月(例如:194901(1949年1月)):"); //录入学生的出生日期
scanf("%4d%2d", &student[stu_num].year,&student[stu_num].month);
getchar();
printf("****地址(地址之间不要插入空格):");
scanf("%s", &student[stu_num].address);
getchar();
printf("****电话:");
scanf("%s", &student[stu_num].phone_number);
getchar();
printf("****score:");
scanf("%s", &student[stu_num].score);
getchar();

printf("━━━━━━━━━━━━━━━━━━━━\n");
printf("新学生信息录入成功,当前共有%d个学生记录。\n", stu_num);
printf("━━━━━━━━━━━━━━━━━━━━\n");

}

void output_student_information(Student student[],int num)
{
printf("第%

d位学生信息:\n",num);
printf("****学号:%d\n", student[num].ID);
printf("****姓名:%s\n", student[num].name);
printf("****年龄:%d\n", student[num].age);
printf("****性别:%s\n", student[num].sex);
printf("****出生年月:%d年%d月\n", student[num].year,student[num].month);
printf("****地址:%s\n", student[num].address);
printf("****电话:%s\n", student[num].phone_number);
printf("****score:%s\n", student[num].score);
}

void sort_information1(Student student[], int num) //使用气泡法排序对学号进行排序
{
Student temp;
int i, j;
for (i=1; i{
for (j=i; j<=num; j++)
{
if (student[j].ID < student[i].ID)
/*
** 当后一个学号小于目前默认的最小学号,则交换两个信息的位置
*/
{
temp = student[j];
student[j]=student[i];
student[i]=temp;
}
}
}

}
void sort_information2(Student student[], int num) //使用直接排序法对学号进行排序
{
student temp
int i,j,k,min;
for(i=0;i{
k=i+1;
min=i;
for(j=k;jif(student[i].IDmin=j;
temp=student[i];
student[i]=student[min];
student[min]=temp;
}
}
void sort_information3(Student student[], int num) //使用气泡排序法对成绩进行排序
{
student temp
int i,j;
for(i=0;i{
for(j=i;j<=num;j++)
{
if(student[j].score/*
** 当后一个学生成绩小于目前默认的最小学生成绩,则交换两个信息的位置
*/
{
temp = student[j];
student[j]=student[i];
student[i]=temp;
}
}
}
}
void sort_information4(Student student[], int num) //使用直接排序法对成绩进行排序
{
student temp
int i,j,k,min;
for(i=0;i{
k=i+1;
min=i;
for(j=k;jif(student[i].scoremin=j;
temp=student[i];
student[i]=student[min];
student[min]=temp;
}
}
int search_information1(Student student[], int num) //使用线性搜索法搜索学生学号
{
int i, ID_number;
do
{
printf("请输入学生的学号:");
scanf("%d", &ID_number);
getchar();
for (i=1; i<=num; i++)
{
if (ID_number == student[i].ID)
/*
** 若找到学号,则退出循环,返回值为该学生的位置
*/
{
break;
}

}
if (i>num)
{
printf("未找到该学生的学号,请检查是否输入正确!\n");
}
} while (i>num);

return i;
}
int search_information2(Student student[], int num) //使用对分搜索法搜索学生学号
{
int i,n,m,x;
n=0;
m=num-1;
printf("请输入学生的学号:");
scanf("%d",&ID_number);
while(n<=m)
{
i=(n+m)/2;
if(student[i].ID==ID_number)break;
if(student[i].IDif(student[i].ID>ID_number) m=i-1;
}
if(student[i].ID!=ID_nu

mber)
printf("未找到该学生的学号,请检查是否输入正确!\n");
return i;
}
int search_information3(Student student[], int num) //使用线性搜索法搜索学生姓名
{
struct student1 student1[1];
int p,i;
printf("请输入学生的姓名:");
scanf("%s",student1[1].name1);
for(i=0;i{
p=strcmp(student[i].name,student1[1].name1);
if(p==0)
break;
}
if(p!=0)
printf("未找到该生的姓名,请检查是否输入正确!\n");
return i;
}
int search_information4(Student student[], int num) //使用对分搜索法搜索学生姓名
{

struct student1 student1[1],temp;
int p,i,j,p1,n,m;
for(j=0;jfor(i=0;i{
p=strcmp(student[i].name ,student[i+1].name);
if(p>0)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
n=0;
m=num-1;
printf("输入学生姓名:");
scanf("%s",student1[1].name1);
while(n<=m)
{
i=(n+m)/2;
p1=strcmp(student[i].name,student1[1].name1);
if(p1==0)break;
if(p1<0) n=i+1;
if(p1>0) m=i-1;
}
if(p1==0)
printf("未找到该生的姓名,请检查是否输入正确!\n");
return i;
}
int search_information5(Student student[], int num) //使用线性搜索法搜索学生成绩
{
int i, score_number;
do
{
printf("请输入学生的成绩:");
scanf("%d", &score_number);
getchar();
for (i=1; i<=num; i++)
{
if (score_number == student[i].score)
/*
** 若找到学生的成绩,则退出循环,返回值为该学生的位置
*/
{
break;
}

}
if (i>num)
{
printf("未找到该学生的成绩,请检查是否输入正确!\n");
}
} while (i>num);

return i;
}
}
int search_information6(Student student[], int num) //使用对分搜索法搜索学生成绩
{
int i,n,m,score_number;
n=0;
m=num-1;
printf("请输入学生的成绩:");
scanf("%d",&score_number);
while(n<=m)
{
i=(n+m)/2;
if(student[i].score==score_number)break;
if(student[i].scoreif(student[i].score>score_number) m=i-1;
}
if(student[i].score!=score_number)
printf("未找到该学生的学号,请检查是否输入正确!\n");
return i;
}

void cancle_information(Student student[])
{
int i, counter, ID_number, j=0;
char reply;
i = search_information1(student,stu_num);
for (counter=i; counter/*
** 将要删掉的学生后一个的学生信息赋值给其前一个,抹掉要删除的学生的信息
*/
{
student[counter]=student[counter+1];
}
stu_num--;
printf("学号为%d的学生信息已经删除,还剩%d位学生。\n",student[i].ID,stu_num);
printf("是否继续输入学号以删除学生的信息?(Y/N)或者(y/n)");
scanf("%c",&reply);
}
int judge_number(int num)
{
if (0 == num) //若系统中没有学生,返回值为1
{
printf

("\n**************************************************\n");
printf("系统没有保存任何学生的信息,请录入后再进行此操作。\n");
printf("按任意键退出子菜单,进入主菜单。\n");
getch();
return 1;
}
else
return 0;
}

相关主题