功能:成绩管理系统包含了学生的全部信息,每个学生是一个记录,包括学号,姓名,性别,班级,各科成绩(语数外)。
系统功能:
1.信息录入——录入学生信息;
2.信息输出——显示所有信息;
3.信息查询——查询单个学生信息(按学号或按姓名),按性别,班级查询;
4.信息排序——分别按各科成绩,平均成绩,学号,姓名,总分排名;
5.信息插入——插入一学生信息(中间插入和最后插入);
6.信息删除——删除一学生信息;(先打出学生信息然后确认删除);
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 1000
typedef struct
{
int no;
char name[];
char sex[];
char cla[];
int Chinese,math,Eng,sum,average;
}Datatype; typedef struct
{
Datatype data[MAXSIZE];
int len;
}SeqList; /*录入学生信息*/
void input(SeqList *L)
{
int i;
printf("请输入学生的人数:");
scanf("%d",&L->len);
printf("请输入学生的学号、姓名、性别、班级、语数英成绩:\n");
printf("(之间用Tab键隔开)\n\n");
printf("学号 姓名 性别 班级 语文 数学 英语\n");
for(i=;i<=L->len;i++)
{
scanf("%d%s%s%s%d%d%d",&L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,&L->data[i].Chinese,&L->data[i].math,&L->data[i].Eng);
L->data[i].sum=L->data[i].Chinese+L->data[i].math+L->data[i].Eng;
L->data[i].average=(int)L->data[i].sum/;
}
} /*浏览学生信息*/
void display(SeqList *L)
{
int i;
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
} /*按学号查找学生信息*/
int search_no(SeqList *L,Datatype x)
{
int i=;
while(i<=L->len&&L->data[i].no!=x.no)
{
i++;
}
if(i>L->len)
{
return ;
}
else
{
return i;
} } /*按姓名查找学生信息*/
int search_name(SeqList *L,Datatype x)
{
int i=;
while(i<=L->len&&strcmp(L->data[i].name,x.name)!=)
{
i++;
}
if(i>L->len)
{
return ;
}
else
{
return i;
}
} /*按性别查找学生信息*/
void search_sex(SeqList *L,Datatype x)
{
int i;
for(i=;i<=L->len;i++)
{
if(i<=L->len&&strcmp(L->data[i].sex,x.sex)==)
{
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
} /*按班级查找学生信息*/
void search_cla(SeqList *L,Datatype x)
{
int i;
for(i=;i<=L->len;i++)
{
if(i<=L->len&&strcmp(L->data[i].cla,x.cla)==)
{
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
} /*按语文成绩排序*/
void sort_Chinese(SeqList *L)
{
Datatype hold;
int pass,i;
for(pass=;pass<((L->len)-);pass++)
{
for(i=;i<L->len;i++)
{
if(L->data[i].Chinese<L->data[i+].Chinese)
{
hold=L->data[i];
L->data[i]=L->data[i+];
L->data[i+]=hold;
}
}
}
} /*按数学成绩排序*/
void sort_math(SeqList *L)
{
Datatype hold;
int pass,i;
for(pass=;pass<((L->len)-);pass++)
{
for(i=;i<L->len;i++)
{
if(L->data[i].math<L->data[i+].math)
{
hold=L->data[i];
L->data[i]=L->data[i+];
L->data[i+]=hold;
}
}
}
} /*按英语成绩排序*/
void sort_Eng(SeqList *L)
{
Datatype hold;
int pass,i;
for(pass=;pass<((L->len)-);pass++)
{
for(i=;i<L->len;i++)
{
if(L->data[i].Eng<L->data[i+].Eng)
{
hold=L->data[i];
L->data[i]=L->data[i+];
L->data[i+]=hold;
}
}
}
} /*按平均分成绩排序*/
void sort_average(SeqList *L)
{
Datatype hold;
int pass,i;
for(pass=;pass<((L->len)-);pass++)
{
for(i=;i<L->len;i++)
{
if(L->data[i].average<L->data[i+].average)
{
hold=L->data[i];
L->data[i]=L->data[i+];
L->data[i+]=hold;
}
}
}
} /*按学号排序*/
void sort_no(SeqList *L)
{
Datatype hold;
int pass,i;
for(pass=;pass<((L->len)-);pass++)
{
for(i=;i<L->len;i++)
{
if(L->data[i].no>L->data[i+].no)
{
hold=L->data[i];
L->data[i]=L->data[i+];
L->data[i+]=hold;
}
}
}
} /*按姓名排序*/
void sort_name(SeqList *L)
{
Datatype hold;
int pass,i;
for(pass=;pass<((L->len)-);pass++)
{
for(i=;i<L->len;i++)
{
if(strcmp(L->data[i].name,L->data[i+].name)>)
{
hold=L->data[i];
L->data[i]=L->data[i+];
L->data[i+]=hold;
}
}
}
} /*按总分排序*/
void sort_sum(SeqList *L)
{
Datatype hold;
int pass,i;
for(pass=;pass<((L->len)-);pass++)
{
for(i=;i<L->len;i++)
{
if(L->data[i].sum<L->data[i+].sum)
{
hold=L->data[i];
L->data[i]=L->data[i+];
L->data[i+]=hold;
}
}
}
} /*插入学生信息*/
void insert(SeqList *L,Datatype x)
{
int i=,j;
while(i<=L->len&&(L->data[i].no<x.no))
{
i++;
}
if(L->len==MAXSIZE-)
{
printf("系统存储空间已满,无法增加学生信息!!");
}
else
{
for(j=L->len;j>=i;j--)
{
L->data[j+]=L->data[j];
}
L->data[i]=x;
L->len++;
}
} /*删除学生信息*/
void del(SeqList *L,Datatype x)
{
int i,j;
i=search_no(L,x);
if(i==)
{
printf("学号有误!!\n");
}
else
{
for(j=i+;j<=(L->len);j++)
{
L->data[j-]=L->data[j];
}
L->len--;
}
}
void menu()
{
printf("*************************************\n");
printf("* 大学生成绩管理系统 *\n");
printf("*1----------------------录入学生信息*\n");
printf("*2----------------------浏览学生信息*\n");
printf("*3----------------------查找学生信息*\n");
printf("*4------------------------------排序*\n");
printf("*5----------------------插入学生信息*\n");
printf("*6----------------------删除学生信息*\n");
printf("*0----------------------退出管理系统*\n");
printf("*************************************\n");
} int main()
{
Datatype x;
SeqList *L;
int sel,k,s,i;
L=(SeqList *)malloc(sizeof(SeqList));
L->len=;
printf(" 欢迎使用大学生成绩管理系统 \n");
do
{
menu();
printf("\n请输入你的选择:");
scanf("%d",&sel);
switch(sel)
{
case :printf("\n你选择了录入学生信息:\n\n");
input(L);
break;
case :printf("\n你选择了浏览学生信息:\n\n");
display(L);
break;
case :printf("\n你选择了查找学生信息:\n\n");
printf("**************************************\n");
printf("*按<学号>查找请按1,按<姓名>查找请按2*\n");
printf("*按<性别>查找请按3,按<班级>查找请按4*\n");
printf("**************************************\n");
scanf("%d",&s);
if(s==)
{
printf("请输入要查找的学生的学号:");
scanf("%d",&x.no);
k=search_no(L,x);
if(k==)
{
printf("学号有误!!\n");
}
else
{
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average);
}
}
else if(s==)
{
printf("请输入要查找的学生的姓名:");
scanf("%s",x.name);
k=search_name(L,x);
if(k==)
{
printf("姓名有误!!\n");
}
else
{
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average);
}
}
else if(s==)
{
printf("请输入性别(男或女):\n");
scanf("%s",x.sex);
search_sex(L,x);
}
else
{
printf("请输入班级:\n");
scanf("%s",x.cla);
search_cla(L,x);
}
break;
case :printf("\n你选择了排序:\n\n");
printf("*********************************************\n");
printf("*按<语文成绩>排序请按1,按<数学成绩>排序请按2*\n");
printf("*按<英语成绩>排序请按3,按<平均成绩>排序请按4*\n");
printf("* 按<学号>排序请按5,按<姓名>排序请按6 *\n");
printf("* 按<总分>排序请按7 *\n");
printf("*********************************************\n");
scanf("%d",&s);
if(s==)
{
sort_Chinese(L);
printf("按语文成绩排序:\n");
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
if(s==)
{
sort_math(L);
printf("按数学成绩排序:\n");
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
if(s==)
{
sort_Eng(L);
printf("按英语成绩排序:\n");
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
if(s==)
{
sort_average(L);
printf("按平均分排序:\n");
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
if(s==)
{
sort_no(L);
printf("按学号排序:\n");
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
if(s==)
{
sort_name(L);
printf("按姓名排序:\n");
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
if(s==)
{
sort_sum(L);
printf("按总分排序:\n");
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
for(i=;i<=L->len;i++)
{
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average);
}
}
break;
case :printf("\n你选择了插入学生信息:\n\n");
printf("请输入要插入的学生的学号、姓名、性别、班级、语数英成绩:\n");
printf("学号 姓名 性别 班级 语文 数学 英语\n");
scanf("%d%s%s%s%d%d%d",&x.no,x.name,x.sex,x.cla,&x.Chinese,&x.math,&x.Eng);
x.sum=x.Chinese+x.math+x.Eng;
x.average=(int)x.sum/;
insert(L,x);
break;
case :printf("\n你选择了删除学生信息:\n\n");
printf("请输入要删除的学生的学号:");
scanf("%d",&x.no);
k=search_no(L,x);
if(k==)
{
printf("学号有误!!\n");
}
else
{
printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n");
printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average);
printf("\n是否要删除此学生的信息?\n");
printf("(是请按1,否请按0)\n");
printf("你的选择是:");
scanf("%d",&s);
if(s==)
{
del(L,x);
}
}
break;
}
}while(sel!=);
printf("谢谢使用此系统!!");
return ;
}