//综合实践八:学生成绩管理系统结构体应用设计
#include<stdio.h>
#define N 5
typedef struct student{
int num;
char name[10];
float score[3],sum,ave;
}STU;
int login(char *name,char *psw){
if(strcmp(name,"admin")==0 &&strcmp(psw,"123456")==0)
return 1;
else return 0;
}
void input(STU stu[],int num){
int i,j;
printf("输入%d条记录:\n",num);
for(i=0;i<num;i++){
scanf("%d%s",&stu[i].num,stu[i].name);
stu[i].sum=0;
for(j=0;j<3;j++){
scanf("%f",&stu[i].score[j]);
stu[i].sum+=stu[i].score[j];
}
stu[i].ave=stu[i].sum/3;
}
}
void output(STU stu[],int num){
int i,j;
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总分\t平均分\n");
for(i=0;i<num;i++){
printf("%d\t%s\t",stu[i].num,stu[i].name);
for(j=0;j<3;j++){
printf("%.2f\t",stu[i].score[j]);
}
printf("%.2f\t%.2f\n",stu[i].sum,stu[i].ave);
}
}
int insert(STU stu[],int num,STU ss){
int i;
i=num-1;
while(i>=0&&stu[i].num<ss.num){
stu[i+1]=stu[i];
i--;
}
stu[i+1]=ss;
num++;
return num;
}
int find(STU stu[],int num,int num_x){
int i,k=-1;
for(i=0;i<num;i++){
if(num_x==stu[i].num){
k=i;
break;
}
}
return k;
}
void sort(STU stu[],int num){
int i,j,k;
STU s;
for(i=0;i<num-1;i++){
k=i;
for(j=i+1;j<num;j++){
if(stu[k].num<stu[j].num)
k=j;
}
s=stu[i];
stu[i]=stu[k];
stu[k]=s;
}
printf("降序排序完成!\n");
}
int dele(STU stu[],int num,int num_x){
int i=0;
while(i<num&&stu[i].num!=num_x){
i++;
}
if(i<num){
while(i<num-1){
stu[i]=stu[i+1];
i++;
}
num--;
}
return num;
}
main(){
STU stu[N],ss;
int i,j,k,n,num,m,num_x;
char name[10],psw[10];
printf("用户名:");
gets(name);
printf("密码:");
gets(psw);
if(login(name,psw)==1){
while(1){
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");
printf("请输入你的选择:");
scanf("%d",&n);
switch(n){
case 1:printf("输入成绩个数(<%d):",N);
scanf("%d",&num);
input(stu,num);
break;
case 2:printf("输入要插入的记录:");
scanf("%d%s",&ss.num,ss.name);
for(j=0;j<3;j++){
scanf("%f",&ss.score[j]);
ss.sum+=ss.score[j];
}
ss.ave=ss.sum/3;
num=insert(stu,num,ss);
break;
case 3:printf("输入要查询的学号:");
scanf("%d",&num_x);
m=find(stu,num,num_x);
if(m!=-1)
printf("序号:%d\n",m+1);
else printf("记录不存在!\n");
break;
case 4:sort(stu,num);
break;
case 5:printf("输入要删除的记录学号:");
scanf("%d",&num_x);
m=num;
num=dele(stu,num,num_x);
if(m!=num)
printf("记录删除成功!\n");
else printf("记录不存在!\n");
break;
case 6:printf("记录输出:\n");
output(stu,num);
break;
case 0:return;
default:printf("选择错误!\n");
}}}
else printf("用户名或密码错误!\n");
}