学生成绩管理系统源代码

作者在 2013-03-20 19:18:51 发布以下内容
/*程序名称:学生成绩管理系统*/
/*程序设计者:致远          */
/*设计时间:2013-3-15       */

/**************************************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N  50
struct student
{
    char num[15];
    char name[20];
    int score[3];
    float av;
}stu[N];


/**************************************************************************************************/
save(int n)   
{
    FILE *p;
    int i;
    p=fopen("stud","wb");
    for (i=0;i<n;i++)
        fwrite(&stu[i],sizeof(struct student),1,p);
    fclose(p);
    return (n);
}


/**************************************************************************************************/
count()
{
    FILE *p;
    int i;
if((p=fopen("stud","rb"))==NULL)
{p=fopen("stud","wb");}
    else 
{
p=fopen("stud","rb");
for(i=0;!feof(p);i++)
fread(&stu[i],sizeof(struct student),1,p);
}
    fclose(p);
    return(i-1);
}


/**************************************************************************************************/
void average(int n)
{
    int i,j,sum;
    for(i=0;i<n;i++)
    {
        sum=0;
        for(j=0;j<3;j++)
            sum+=stu[i] .score[j];
        stu[i].av=sum/3.0;
    }
}


/**************************************************************************************************/
void creat()
{
    int i,j,n;
    if(count()!=0)
    {printf("\n亲! 已录入学生的记录,是否要添加记录?\n\t是,请选择“2”!\n\n");}
    else
    {
        printf("\t请输入首次录入的数量:");
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            printf("\n请输入第%d个学生数据:\n",i+1);
            printf("学号:");
            scanf("%s",&stu[i] .num );
            printf("姓名:");
            scanf("%s",&stu[i] .name );
            for(j=0;j<3;j++)
            {
                printf("成绩%d:",j+1);
                scanf("%d",&stu[i].score[j]);
            }            
        }
    average (n);
    save (n);
    }
}


/**************************************************************************************************/
void add()
{
    int i,j,n,k,sum=0;
n=count();
printf("\t请输入添加记录的个数:");
scanf("%d",&k);
for(i=0;i<k;i++)
    {
        printf("\n请输入需添加的第%d个学生数据:\n",i+1);
        printf("学号:");
        scanf("%s",&stu[n+i].num );
        printf("姓名:");
        scanf("%s",&stu[n+i].name );
        for(j=0;j<3;j++)
        {
            printf("成绩%d:",j+1);
            scanf("%d",&stu[n+i].score[j]);
            sum+=stu[n+i].score[j];            
        }
    stu[n+i].av =sum/3.0;
    sum=0;
    }
    save (n+k);
}


/**************************************************************************************************/
void modify()
{
    int i,j,n,k=-1;
    struct student s;
    n=count();
if(count( )==0) printf("\t\t还没学生数据!\n\t\t此操作无效!\n\t   请选择“1”录入信息。\n");
else
{
    printf("\t请输入要修改学生的学号:");
    scanf("%s",&s .num);
    for(i=0;i<n;i++)
        if(strcmp(s .num,stu[i].num)==0)
        {k=i;break;}
        if(k==-1) printf("\t该学号不存在!\n");
        else
        {
            printf("学号\t\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
            printf("%s\t%s\t",stu[k].num,stu[k].name);
            for(j=0;j<3;j++)
                printf("%d\t",stu[k].score[j]);
            printf("%.2f\n",stu[k].av );
            printf("\n");
            printf("\n请重新输入该学生数据:\n");
            printf("学号:");
            scanf("%s",&stu[k].num);
            printf("姓名:");
            scanf("%s",&stu[k].name);
            for(j=0;j<3;j++)
            {
                printf("成绩%d:",j+1);
                scanf("%d",&stu[k].score[j]);
            }
            stu[k].av =(stu[k].score[0]+stu[k].score[1]+stu[k].score[2])/3.0;
        }
        save(n);
}
}


/**************************************************************************************************/
void del()
{
    int i,j,k=-1,n;
    struct student s;
    n=count( );
if(count( )==0) printf("\t\t还没学生数据!\n\t\t此操作无效!\n\t   请选择“1”录入信息。\n");
else
{
printf("\n\n--------------学生信息表--------------\n\n");
printf("学号\t\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t",stu[i].num ,stu[i].name);
for(j=0;j<3;j++)
printf("%d\t",stu[i].score[j]);
printf("%.2f\n",stu[i].av);
printf("\n");
}
printf("\t请输入要删除的学生的学号:");
scanf("%s",&s.num);
for(i=0;i<n;i++) 
if(strcmpi(s.num,stu[i].num)==0)
{k=i;break;}
if(k==-1) printf("\t该学号不存在!\n");
else
{
printf("学号\t\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
printf("%s\t%s\t",stu[k].num ,stu[k].name );
for(j=0;j<3;j++)
printf("%d\t",stu[k].score [j]);
printf("%.2f\n",stu[k].av);
printf("\n");
for(i=k;i<n-1;i++)
stu[i]=stu[i+1];
n=n-1;
save(n);
}
}
}


/**************************************************************************************************/
void show()
{
    int i,j,n;
    n=count();
if(count()==0) printf("\t\t还没学生数据!\n\t\t此操作无效!\n\t   请选择“1”录入信息。\n");
else
{


        printf("\n\n----------------------学生信息表---------------------\n\n");
        printf("学号\t\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
        for(i=0;i<n;i++)
            {
                printf("%s\t%s\t",stu[i].num ,stu[i].name );
                for(j=0;j<3;j++)
                printf("%d\t",stu[i].score[j]);
            printf("%.2f\n",stu[i].av);
            }
}
}


/**************************************************************************************************/
void search()
{
    int i,j,n,k=-1;
    struct student s;
    n=count();
if(count( )==0) printf("\t\t还没学生数据!\n\t\t此操作无效!\n\t   请选择“1”录入信息。\n");
else
{
    printf("\t请输入要查找的学生的学号:");
    scanf("%s",&s.num);
    for(i=0;i<n;i++)
        if(strcmpi(s.num,stu[i].num)==0)
        {k=i;break;}
        if(k==-1) printf("\t该学号不存在!\n");
        else
        {
            printf("学号\t\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
            printf("%s\t%s\t",stu[k].num ,stu[k].name );
            for(j=0;j<3;j++)
                printf("%d\t",stu[k].score[j]);
            printf("%.2f\n",stu[k].av);
        }
}
}


/**************************************************************************************************/
void sort()
{
    int i,j,n;
    struct student temp;
    n=count();
if(count( )==0) printf("\t\t还没学生数据!\n\t\t此操作无效!\n\t   请选择“1”录入信息。\n");
else
{
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
            if(stu[i].av <stu[j].av)
            {
                temp=stu[i];
                stu[i]=stu[j];
                stu[j]=temp;
            }
        printf("-------------------学生信息表--------------------\n");
        printf("学号\t\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
        for(i=0;i<n;i++)
        {
            printf("%s\t%s\t",stu[i].num ,stu[i].name);
            for(j=0;j<3;j++)
                printf("%d\t",stu[i].score[j]);
            printf("%.2f\n",stu[i].av);
        }
}
}


/**************************************************************************************************/
void showmenu()
{
    printf("            学生成绩管理系统            \n");
    printf("========================================\n");
    printf("               1.录入信息               \n");
    printf("               2.添加记录               \n");
    printf("               3.修改记录               \n");
    printf("               4.删除记录               \n");
    printf("               5.显示记录               \n");
    printf("               6.查找记录               \n");
    printf("               7.成绩排序               \n");
    printf("               0.退出系统               \n");
    printf("========================================\n");
    printf("\n请输入您的选择(0-7):");}


/**************************************************************************************************/
int main ()
{
int choice;
showmenu();
scanf("%d",&choice);
while (choice!=0)
{
switch(choice)
{
case 1:creat();printf("———————————————————————————\n");break;
case 2:add();printf("—————————————————————————————\n");break;
case 3:modify();printf("————————————————————————————\n");break;
case 4:del();printf("—————————————————————————————\n");break;
case 5:show();printf("————————————————————————————\n");break;
case 6:search();printf("————————————————————————————\n");break;
case 7:sort();printf("—————————————————————————————\n");break;
}
showmenu();
scanf("%d",&choice);
}
return 0;
}
默认分类 | 阅读 1911 次
文章评论,共3条
zhangqi_gsts
2013-03-20 22:15
1
没技术含量,从你定义的结构体里数组的大小就可以看出水平
小小小火柴
2013-04-12 22:10
2
  哈哈!
现实太抽象
2013-04-15 22:25
3
  还不错了  
游客请输入验证码
浏览1911次
文章分类
文章归档