#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 9999
int n,c; //设置全局变量 //基于数组的学生管理系统
struct school //建立结构体
{
char num[20];
char name[50];
char sex;
float Chinese1;
float Math1;
float English1;
float average;
}student[N];
void fanghui() //给全局变量定值
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t\t\t需要管理多少个学生? ");
scanf("%d",&n);
system("cls");
}
int Menu(); //一级菜单
void fun1(struct school student[999]); //学号排序
void fun2(struct school student[999]); //姓名排序
int fun3(); //按照某门课排序
void fun4(struct school student[999]); //平均分排序
void fanghui(); //调用全局变量
void input_data(struct school student[]); //录入信息
void output_data(); //输出信息
void increase(); //增添信息
void strike(); //删减信息
void revise(); //修改信息
int sort(); //排序大函数
int seek(char numb[20]); //查找学号
int menu(); //二级菜单
void Chinese(struct school student[999]); //语文成绩排序
void English(struct school student[999]); //数学成绩排序
void Math(struct school student[999]); //英语成绩排序
int third(); //三级菜单
int main()
{
fanghui(); //调用全局变量
int choose;
while(1) //switch循环,选择功能
{
choose = Menu();
switch(choose)
{
case 1:
input_data(student);
break;
case 2:
output_data();
break;
case 3:
increase();
break;
case 4:
strike();
break;
case 5:
revise();
break;
case 6:
sort();
break;
case 7:
exit(0);
break;
default:
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t请输入正确的选择(按任意键继续)");
break;
}
getch(); //输入回车后继续
}
return 0;
}
int Menu() //一级菜单
{
system("cls");
int choose;
printf("\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\t\t\t\t\t| 学生成绩管理系统V1.0|\t\t\t\n");
printf("\t\t\t\t\t|\t请选择功能\t|\t\t\t\t\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\t\t\t\t\t|\t1.录入信息\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t2.打印信息\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t3.增加信息\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t4.删除信息\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t5.修改信息\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t6.信息排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t7.退出系统\t|\t\t\t\t\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\n");
printf("\t\t\t\t\t请输入您要选择的功能键: ");
scanf("%d",&choose);
return choose;
}
int menu() //二级菜单
{
int cho;
system("cls");
printf("\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\t\t\t\t\t| 二级菜单V1.0 \t|\t\t\t\n");
printf("\t\t\t\t\t|\t请选择功能\t|\t\t\t\t\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\t\t\t\t\t|\t1.学号排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t2.姓名排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t3.学科排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t4.平均分排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t5.返回上一级\t|\t\t\t\t\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\t\t\t\t\t(tip:排序功能一次不成功可反复按)\n");
printf("\n");
printf("\t\t\t\t\t请输入您要选择的功能键: ");
scanf("%d",&cho);
return cho;
}
int third() //三级菜单
{
int p;
system("cls");
printf("\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\t\t\t\t\t| 三级菜单V1.0 \t|\t\t\t\n");
printf("\t\t\t\t\t|\t请选择功能\t|\t\t\t\t\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\t\t\t\t\t|\t1.语文排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t2.数学排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t3.英语排序\t|\t\t\t\t\n");
printf("\t\t\t\t\t|\t4.返回上一级\t|\t\t\t\t\n");
printf("\t\t\t\t\t-------------------------\n");
printf("\n");
printf("\t\t\t\t\t请输入您要选择的功能键: ");
scanf("%d",&p);
return p;
}
void input_data(struct school student[])
{
int i;
system("cls"); //清屏
for(i=0;i<n;i++)
{
printf("\n");
printf("输入学号:");
scanf("%s",student[i].num);
printf("输入姓名:");
getchar();
gets(student[i].name);
printf("输入性别(m or f):");
scanf("%c",&student[i].sex);
printf("输入语数英成绩(0~100):");
scanf("%f%f%f",&student[i].Chinese1,&student[i].Math1,&student[i].English1);
printf("\n");
if(student[i].Chinese1>100 || student[i].Chinese1<0 || //两个if判断是否符合信息
student[i].Math1>100 || student[i].Math1<0 ||
student[i].English1>100 || student[i].English1<0)
{
printf("成绩输入错误!\n按回车返回菜单。");
getch();
Menu(); //不成功返回菜单
}
if(student[i].sex != 'm' && student[i].sex != 'f')
{
printf("性别输入错误!\n按回车返回菜单。");
getch();
Menu();
}
}
printf("录入成功!\n");
printf("按回车继续……");
}
void output_data(struct school student[999]) //输出信息
{
int i;
system("cls");
for(i=0;i<n+c;i++) //计算平均分
{
student[i].average = student[i].Chinese1+student[i].Math1+student[i].English1;
student[i].average = 1.0*student[i].average/3;
}
printf("\t\n\n学生信息:\n");
printf(" 学号 姓名 性别 语文 数学 英语 平均分\n");
printf("--------------------------------------------------------------\n");
for(i=0;i<n+c;i++)
{
printf("%10s%13s%6c%8.2f%8.2f%8.2f%8.2f\n",student[i].num,student[i].name,student[i].sex,student[i].Chinese1,student[i].Math1,student[i].English1,student[i].average);
}
printf("\n\n打印完成...\n");
printf("按回车继续……");
}
void increase() //增加信息
{
int c,i,k;
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t \t添加多少个学生信息? ");
scanf("%d",&c); //输入添加人数
system("cls");
k = n;
for(i=n;i<k+c;i++) //执行添加人数后的输入
{
printf("输入学号:");
getchar();
scanf("%s",student[i].num);
printf("输入姓名:");
getchar();
gets(student[i].name);
printf("输入性别(m or f):");
scanf("%c",&student[i].sex);
printf("输入三门课成绩(0~100):");
scanf("%f%f%f",&student[i].Chinese1,&student[i].Math1,&student[i].English1);
if(student[i].Chinese1>100 || student[i].Chinese1<0 || //两个if判断是否符合信息
student[i].Math1>100 || student[i].Math1<0 ||
student[i].English1>100 || student[i].English1<0)
{
printf("成绩输入错误!\n按回车返回菜单。");
getch();
Menu(); //不成功返回菜单
}
if(student[i].sex != 'm' && student[i].sex != 'f')
{
printf("性别输入错误!\n按回车返回菜单。");
getch();
Menu();
}
printf("\n");
n++;
}
printf("添加成功!\n");
printf("按回车继续……");
}
int seek(char num[20]) //查找学号
{
int i;
for(i=0;i<n;i++)
{
if(!strcmp(student[i].num,num)) //输入学号到该函数,判断该学号是否存在
return i+1;
}
return 0;
}
void strike() //删除学生信息
{
int a,j,i;
char number[20],xuanz;
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t \t输入要删除的学生学号: ");
scanf("%s",number);
system("cls");
a = seek(number); //输入学号到seek函数调用,查找该学号是否存在
if(a!=0)
{
printf("\n\n");
printf("要删除的学生信息如下\n");
printf(" 学号 姓名 性别 语文 数学 英语\n");
printf("-----------------------------------------------------\n");
printf("%10s%13s%6c%8.2f%8.2f%8.2f\n",student[a-1].num,student[a-1].name,student[a-1].sex,student[a-1].Chinese1,student[a-1].Math1,student[a-1].English1);
printf("是否修改该学生信息(Y or N)?");
getchar();
scanf("%c",&xuanz);
if(xuanz == 'Y' || xuanz == 'y')
{
for(i=0;i<n;i++)
{
if(strcmp(number,student[i].num)==0) //如果遇到学号相等实现删除操作
{
for(j=i+1;j<n;j++,i++)
student[i] = student[j];
n--;
printf("删除完成……\n");
printf("按回车继续……");
}
}
}
else
{
printf("失败(按任意键继续)!");
getch();
Menu();
}
}
else
{
printf("\n失败(该学生不存在)!\n");
printf("按回车继续……");
}
}
void revise() //修改学生信息
{
int a;
char xuanz;
char newnum[20],number[20];
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t \t输入要修改的学生学号: ");
scanf("%s",number);
system("cls");
a = seek(number); //调用函数
if(a!=0)
{
printf("\n\n");
printf(" 学号 姓名 性别 语文 数学 英语\n");
printf("-----------------------------------------------------\n");
printf("%10s%13s%6c%8.2f%8.2f%8.2f\n",student[a-1].num,student[a-1].name,student[a-1].sex,student[a-1].Chinese1,student[a-1].Math1,student[a-1].English1);
printf("是否修改该学生信息(Y or N)?");
getchar();
scanf("%c",&xuanz);
if(xuanz == 'Y' || xuanz == 'y') //判断是否
{
system("cls");
printf("输入新的信息:\n");
printf("输入学号:");
scanf("%s",newnum);
printf("输入姓名:");
getchar();
gets(student[a-1].name);
printf("输入性别(m or f):");
scanf("%c",&student[a-1].sex);
printf("输入三门课成绩(0~100):");
scanf("%f%f%f",&student[a-1].Chinese1,&student[a-1].Math1,&student[a-1].English1);
if(student[a-1].Chinese1>100 || student[a-1].Chinese1<0 || //两个if判断是否符合信息
student[a-1].Math1>100 || student[a-1].Math1<0 ||
student[a-1].English1>100 || student[a-1].English1<0)
{
printf("成绩输入错误!\n按回车返回菜单。");
getch();
Menu(); //不成功返回菜单
}
if(student[a-1].sex != 'm' && student[a-1].sex != 'f')
{
printf("性别输入错误!\n按回车返回菜单。");
getch();
Menu();
}
printf("\n");
strcpy(student[a-1].num,newnum);
printf("修改成功!");
printf("按回车继续……");
}
else
{
printf("失败(按任意键继续)!");
getch();
Menu();
}
}
else
{
printf("\n失败(该学生不存在)!\n");
printf("按回车继续……");
}
}
int sort() //排顺序
{
system("cls");
int ch;
//调用菜单函数
while(1)
{
ch = menu();
switch(ch)
{
case 1:
fun1(student);
break;
case 2:
fun2(student);
break;
case 3:
fun3();
break;
case 4:
fun4(student);
break;
case 5:
return(1); //返回上一级
break;
default:
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t请输入正确的选择(按任意键继续)");
break;
}
getch();
}
}
void fun1(struct school student[999]) //姓名排序
{
int i,j;
system("cls");
for(i=0;i<n+c-1;i++) //冒泡法排序
{
for(j=i+1; j<n+c; j++)
if(strcmp(student[i].num,student[i+1].num)>0)
{
student[999] = student[i];
student[i] = student[i+1];
student[i+1] = student[999];
}
}
printf("\n\n姓名由小到大排序");
output_data(student); //调用函数
}
void fun2(struct school student[999]) //学号排序
{
int i,j;
system("cls");
for(i=0;i<n+c-1;i++) //冒泡法
{
for(j=i+1;j<n+c;j++)
if(strcmp(student[i].name,student[i+1].name)>0) //用strcmp比较两个字符串
{
student[999] = student[i];
student[i] = student[i+1];
student[i+1] = student[999];
}
}
printf("\n\n姓名由小到大排序:");
output_data(student);
}
int fun3() //某门课排序
{
system("cls");
int a;
//调用函数
while(1)
{
a = third();
switch(a)
{
case 1:
Chinese(student);
break;
case 2:
Math(student);
break;
case 3:
English(student);
break;
case 4:
return(1);
default:
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t请输入正确的选择(按任意键继续)");
break;
}
getch();
}
}
void fun4(struct school student[999]) //平均分排序
{
system("cls");
int i,j;
for(i=0;i<n+c;i++) //计算平均分
{
student[i].average = student[i].Chinese1+student[i].Math1+student[i].English1;
student[i].average = 1.0*student[i].average/3;
}
for(i=0;i<n+c-1;i++) //冒泡法
{
for(j=i+1;j<n+c;j++)
if(student[i].average>student[i+1].average)
{
student[999] = student[i];
student[i] = student[i+1];
student[i+1] = student[999];
}
}
printf("\n\n平均成绩由小到大排序:");
printf("\t\n\n学生信息:\n");
printf(" 学号 姓名 性别 语文 数学 英语 平均分\n");
printf("--------------------------------------------------------------\n");
for(i=0;i<n+c;i++)
{
printf("%10s%13s%6c%8.2f%8.2f%8.2f%8.2f\n",student[i].num,student[i].name,student[i].sex,student[i].Chinese1,student[i].Math1,student[i].English1,student[i].average);
}
}
void Chinese(struct school student[999]) //语文成绩排序
{
system("cls");
int i,j;
for(i=0;i<n+c-1;i++) //冒泡法
{
for(j=i+1;j<n+c;j++)
if(student[i].Chinese1>student[i+1].Chinese1)
{
student[999] = student[i];
student[i] = student[i+1];
student[i+1] = student[999];
}
}
printf("\n\n语文成绩由小到大排序:");
output_data(student);
}
void Math(struct school student[999])
{
system("cls");
int i,j;
for(i=0;i<n+c-1;i++)
{
for(j=i+1;j<n+c;j++)
if(student[i].Math1>student[i+1].Math1)
{
student[999] = student[i];
student[i] = student[i+1];
student[i+1] = student[999];
}
}
printf("\n\n数学成绩由小到大排序:");
output_data(student);
}
void English(struct school student[999])
{
system("cls");
int i,j;
for(i=0;i<n+c-1;i++)
{
for(j=i+1;j<n+c;j++)
if(student[i].English1>student[i+1].English1)
{
student[999] = student[i];
student[i] = student[i+1];
student[i+1] = student[999];
}
}
printf("\n\n英语成绩由小到大排序:");
output_data(student);
}
希望这篇文章对你有帮助
仅供参考!