| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 546 人关注过本帖
标题:学生成绩管理系统求解释
只看楼主 加入收藏
夜色的温柔
Rank: 1
来 自:山东青岛
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-9-28
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:4 
学生成绩管理系统求解释
#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#include<string.h>
struct stu
{
    unsigned long int number;        
    char name[30];                    
    float score[3];               
    float aver_score;               
    float total_score;               
};
typedef struct stu DATATYPE;//定义一个名为DATATYPE的新的结构体类型
typedef struct tagLINKLIST//定义一个名为tagLINKLIST的数据类型
{
    DATATYPE elem[MAXSIZE];//定义一个DATATYPE类型的名为elem的数组(含有100个元素)
    int length;//--------------------------------------------------------------这里就是我不懂的地方----------------------------------------------
}LINKLIST;//定义一个名为LINKLIST的结构体类型
LINKLIST Student;//定义一个LINKLIST类型的名为Student的变量



int ListIsFull(void)
{
    return (Student.length >= MAXSIZE)?1:0;//---------------------------------------------length怎么用-------------------------------------------
}


int AddSTU(void)
{
    int i;
    struct stu temp;//定义一个stu类型的名为temp的结构体变量
    printf("***************************************************************\n");
    printf("**********  请输入学生的学号:");
    scanf("%ld",&temp.number);
    printf("**********  请输入学生的姓名:");
    scanf("%s",&temp.name);
    printf("**********  请输入学生的三科成绩:\n");
    printf("**********\t\t语文:");
    scanf("%f",&temp.score[0]);
    printf("**********\t\t数学:");
    scanf("%f",&temp.score[1]);
    printf("**********\t\t英语:");
    scanf("%f",&temp.score[2]);
    temp.total_score = temp.score[0] + temp.score[1] + temp.score[2];
    temp.aver_score = temp.total_score/3;
    if(ListIsFull())        // 如果表格是满的
    {
        return 1;
    }
    for(i=0;i<Student.length;i++)//查找学号是否重复//----------------Student.length应该有值才对,但我没发现它们的值---------------------------------
    {
        if(Student.elem[i].number == temp.number)
        {
            return 2;
        }
    }   
    Student.elem[Student.length] = temp;//添加学生
    Student.length++;//---------------------------这里三行的代码的作用我也不明白,尤其是这个自增运算符,具体有什么用?----------------------------------
    return 0;
}




int chaxun(void)
{
    int i,j=0,menu1;
    unsigned long int t;
    char name[20];
    printf("***************************************************************\n");
    printf("**********  请选择要查询学员的   1:学号  2:名字 *************\n");
    scanf("%d",&menu1);
    if(menu1==1)
    {
        printf("***************************************************************\n");
        printf("请输入学员的学号:");
        scanf("%ld",&t);
        for(i=0;i<Student.length;i++)
        {
            if(Student.elem[i].number == t)
            {
                printf("***************** %-6s的信息为: ****************************\n",Student.elem[i].name);
                printf(" 学 号      姓 名           语文  数学  英语  平均分 总分 \n");
                printf("%-10ld  %-16s",Student.elem[i].number,Student.elem[i].name);   
                printf("%-5.2f %-5.2f ",Student.elem[i].score[0],Student.elem[i].score[1]);
                printf("%-5.2f %-5.2f ",Student.elem[i].score[2],Student.elem[i].aver_score);
                printf("%-5.2f  \n",Student.elem[i].total_score);
                printf("***************************************************************\n");
                return 0;
            }
        }
        return 1;   
    }
    else if(menu1==2)
    {
        printf("***************************************************************\n");
        printf("请输入学员的名字:");
        scanf("%s",name);
        for(i=0;i<Student.length;i++)//---------------------------------这个for循环用到了Student.length后我瞬间崩溃了,看不懂
        {
            for(j=0;j<sizeof(name);j++)
            {
                if(Student.elem[i].name[j] != name[j])
                {                    
                    return 1;
                }
                else
                {
                    printf("************* %-6s的信息为: ********************************\n",Student.elem[i].name);
                    printf(" 学 号      姓 名           语文  数学  英语  平均分 总分 \n");
                    printf("%-10ld  %-16s",Student.elem[i].number,Student.elem[i].name);   
                    printf("%-5.2f %-5.2f ",Student.elem[i].score[0],Student.elem[i].score[1]);
                    printf("%-5.2f %-5.2f ",Student.elem[i].score[2],Student.elem[i].aver_score);
                    printf("%-5.2f  \n",Student.elem[i].total_score);
                    printf("***************************************************************\n");
                    return 0;
                }
            }
        }
        return 1;
    }
    else
    {
        printf("**************** 选择错误!  请重新选择!*********************");
    }
    return 1;
}


int chaxun1(void)
{
    int i,j=0,menu1;
    unsigned long int t;
    char name[20];
    printf("***************************************************************\n");
    printf("**********  请选择要查询学员的   1:学号  2:名字 *************\n");
    scanf("%d",&menu1);
    if(menu1==1)
    {
        printf("***************************************************************\n");
        printf("请输入学员的学号:");
        scanf("%ld",&t);
        for(i=0;i<Student.length;i++)//----------------------------------这个for循环也看不懂---------------------------------------
        {
            if(Student.elem[i].number == t)
            {
                printf("*************** %-6s的平均分和总分 **************************\n",Student.elem[i].name);
                printf("\t平均分=%-5.2f\t",Student.elem[i].aver_score);
                printf("\t总  分=%-5.2f\n",Student.elem[i].total_score);
                printf("***************************************************************\n");
                return 0;
            }
        }
        return 1;   
    }
    else if(menu1==2)
    {
        printf("***************************************************************\n");
        printf("请输入学员的名字:");
        scanf("%s",name);
        for(i=0;i<Student.length;i++)//------------------------一样看不懂-----------------------------
        {
            for(j=0;j<sizeof(name);j++)
            {
                if(Student.elem[i].name[j] != name[j])
                {                    
                    return 1;
                }
                else
                {
                    printf("************* %-6s的信息为: ********************************\n",Student.elem[i].name);
                    printf("\t平均分=%-5.2f\t",Student.elem[i].aver_score);
                    printf("\t总  分=%-5.2f\n",Student.elem[i].total_score);
                    printf("***************************************************************\n");
                    return 0;
                }
            }
        }
        return 1;
    }
    else
    {
        printf("**************** 选择错误!  请重新选择!*********************");
    }
    return 1;
}




int DeleteList(void)
{
    int i,j=0,menu1;
    unsigned long int t;
    char name[20];
    printf("***************************************************************\n");
    printf("*********  请选择输入待删除学员的   1:学号  2:名字 **********\n");
    scanf("%d",&menu1);
    switch(menu1)
    {
    case 1:{
        printf("***************************************************************\n");
        printf("请输入待删除学员的学号:");
        scanf("%ld",&t);
        for(i=0;i<Student.length;i++)
        {
            if(Student.elem[i].number == t)
            {   
                printf("********** 待删除的学员%-6s的信息为: ***********************\n",Student.elem[i].name);
                printf(" 学 号      姓 名           语文  数学  英语  平均分 总分 \n");        
                printf("%-10ld  %-16s",Student.elem[i].number,Student.elem[i].name);   
                printf("%-5.2f %-5.2f ",Student.elem[i].score[0],Student.elem[i].score[1]);
                printf("%-5.2f %-5.2f ",Student.elem[i].score[2],Student.elem[i].aver_score);
                printf("%-5.2f  \n",Student.elem[i].total_score);
                printf("***************************************************************\n");
                for(j=i;j<Student.length;j++)//删除
                    Student.elem[j]=Student.elem[j+1];
                Student.length--;//---------------------------------------这个删除怎么实现?----------------------------
                return 0;
            }}
        }
           }
    case 2:{printf("***************************************************************\n");
        printf("请输入待删除学员的名字:");
        scanf("%s",name);
        for(i=0;i<Student.length;i++)//----------------------------------求解释---------------------------------------------
        {
            for(j=0;j<sizeof(name);j++)//-------这里用name的长度做啥?
            {
                if(Student.elem[i].name[j] != name[j])
                {
                    return 1;
                }
                else
                {
                    printf("********** 待删除的学员%-6s的信息为: ***********************\n",Student.elem[i].name);
                    printf(" 学 号      姓 名           语文  数学  英语  平均分 总分 \n");
                    printf("%-10ld  %-16s",Student.elem[i].number,Student.elem[i].name);   
                    printf("%-5.2f %-5.2f ",Student.elem[i].score[0],Student.elem[i].score[1]);
                    printf("%-5.2f %-5.2f ",Student.elem[i].score[2],Student.elem[i].aver_score);
                    printf("%-5.2f  \n",Student.elem[i].total_score);
                    printf("***************************************************************\n");
                    //删除
                    for(i;i<Student.length;i++)
                        Student.elem[i]=Student.elem[i+1];
                    Student.length--;
                    return 0;
                }   
            }
        }
        return 1;
    }
    return 1;
           }
    }




int print(void)
{
    int i;
    printf("*********  根据总分进行降序排列,并输出所有学员的信息  ********\n");
    printf(" 学 号      姓 名           语文  数学  英语  平均分 总分  名次\n");
    for(i=0;i<Student.length;i++)
    {
        printf("%-10ld  %-16s",Student.elem[i].number,Student.elem[i].name);   
        printf("%-5.2f %-5.2f ",Student.elem[i].score[0],Student.elem[i].score[1]);
        printf("%-5.2f %-5.2f ",Student.elem[i].score[2],Student.elem[i].aver_score);
        printf("%-5.2f  %d\n",Student.elem[i].total_score,i+1);
    }
    printf("***************************************************************\n");
    printf("\n");
    return 0;
}





void paixu(int n)
{
    int i,j;
    struct stu t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(Student.elem[j].total_score<Student.elem[j+1].total_score)                //根据总分进行降序排列
            {
                t=Student.elem[j];
                Student.elem[j]=Student.elem[j+1];
                Student.elem[j+1]=t;        
            }
        }
    }
}





int main(void)
{
    int i,menu;
    int flag;
    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");
    while(1)
    {
        scanf("%d",&menu);
        switch(menu)
        {
            case 1:{            
                        flag = AddSTU();      
                        if(flag==0)
                        {
                            printf("******************** 添加学员成功! ****************************\n");
                        }
                        else if(flag==1)
                        {
                            printf("******************* 系统已满! *********************************\n");
                        }
                        else if(flag==2)
                        {
                            printf("******************* 学号重复! *********************************\n");
                        }
                    };break;
            case 2:{
                    chaxun1();
                   };break;
            case 3:{
                        i=Student.length;
                        paixu(i);   
                        printf("************* 总分最高的学生信息: ****************************\n",i);
                        printf(" 学 号      姓 名           语文  数学  英语  平均分 总分 \n");
                        printf("%-10ld  %-16s",Student.elem[0].number,Student.elem[0].name);   
                        printf("%-5.2f %-5.2f ",Student.elem[0].score[0],Student.elem[0].score[1]);
                        printf("%-5.2f %-5.2f ",Student.elem[0].score[2],Student.elem[0].aver_score);
                        printf("%-5.2f  \n",Student.elem[0].total_score);
                        printf("***************************************************************\n");
                    };break;
            case 4:{
                        i=Student.length;
                        paixu(i);
                        print();
                    };break;
            case 5:{
                        flag=chaxun();
                        if(flag == 0)
                        {
                            printf("******************** 查询学员成功! ****************************\n");
                        }
                        else if(flag == 1)
                        {
                            printf("******************* 查询的信息不存在! *************************\n");
                            fflush(stdin);// 清空输入缓冲区
                        }
                    }break;
            case 6:{
                        flag=DeleteList();
                        if(flag == 0)
                        {
                            printf("******************** 删除学员成功! ****************************\n");
                        }
                        else if(flag == 1)
                        {
                            printf("******************* 要删除的信息不存在! ***********************\n");
                            fflush(stdin);// 清空输入缓冲区
                        }
                    }break;
            case 0:{
                        printf("*************** 信息录入完毕!按任意键退出!*******************\n");
                        exit(0);
                    }break;
            default:{
                        printf("*************** 选择错误!请重新选择!*************************\n");
                        fflush(stdin);// 清空输入缓冲区
                    }break;
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 管理系统 include number 结构体 
2015-05-22 17:14
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
这不是你自己写的吗,还需要别人解释

一片落叶掉进了回忆的流年。
2015-05-22 18:51
夜色的温柔
Rank: 1
来 自:山东青岛
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-9-28
收藏
得分:0 
回复 2楼 诸葛欧阳
不是哦,我在网上借鉴了别人的,一部分经过我的改动,但是有一些我看不懂,所以不好改
2015-05-22 18:56
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:20 
length标记链表长度,当添加的人数超过length时就添加不进去

一片落叶掉进了回忆的流年。
2015-05-23 11:54
夜色的温柔
Rank: 1
来 自:山东青岛
等 级:新手上路
帖 子:21
专家分:0
注 册:2014-9-28
收藏
得分:0 
回复 4楼 诸葛欧阳
谢了,还没学数据结构,所以一些东西看不懂,大体明白了
2015-05-25 19:22
快速回复:学生成绩管理系统求解释
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037978 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved