爱问知识人 爱问教育 医院库

学生成绩管理系统 要求:可以求全班或单科的平均分,某个人的多门课的平均分。

首页

学生成绩管理系统 要求:可以求全班或单科的平均分,某个人的多门课的平均分。


        

提交回答

全部答案

    2018-05-02 16:02:44
  •   #include
    #include
    #include
    #include
    #define D "%d"
    #define F "%f"
    #define S scanf
    #define P printf
    #define OK 1
    #define ERROR 0
    #define NULL 0
    #define NC 3//每个学生课程总数
    typedef int Status;
    typedef int NUM;
    typedef float CHINESE;
    typedef float ENGLISH;
    typedef float MATH;
    typedef float EVE_Stusum;//EVE(everyone)
    typedef float AVE_Stu;//AVE(average)每个学生平均分
    typedef float AVE_Course;//每门课平均分
    typedef struct LNode{//定义结点
    NUM num;
    CHINESE ch;
    MATH math;
    ENGLISH eng;
    EVE_Stusum sum;//每个学生总分
    AVE_Stu ave;//每个学生平均分
    struct LNode *next;
    }LNode,*LinkList;
    typedef struct{
    AVE_Course av_ch;
    AVE_Course av_math;
    AVE_Course av_eng;
    }*Average,AVENode;
    void CreatList_L(LinkList &L){//建立链表
    LinkList p=NULL,p1=NULL;//p用来指向每一个新建立的结点,,p1做记录
    p1=L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;//头结点
    P("----请输入各学生学号和成绩(学号为零则输入截止)---- ");
    p=(LinkList)malloc(sizeof(LNode));
    P("请输入第一位学生学号: ");
    S(D,&p->num);
    P("请输入分数: ");
    P("----语文 数学 英语(空格隔开)---- ");
    S("%f%f%f",&p->ch,&p->math,&p->eng);
    while(p->num)
    {
    p1->next=p;
    p1=p;
    p=(LinkList)malloc(sizeof(LNode));
    P("请输入下一位学生学号: ");
    S(D,&p->num);
    if(p->num==0) break;//学号为0则输入结束
    P("请输入分数: ");
    P("----语文 数学 英语---- ");
    S("%f%f%f",&p->ch,&p->math,&p->eng);
    }
    p1->next=NULL;
    }
    int Length_L(LinkList L)//求出带头结点的链表中除头结点外其余结点的数目
    {
    LinkList p=L;
    int i=0;
    while(p->next)
    {
    p=p->next;
    i ;
    }
    return i;
    }
    Status GetNumI_L(LinkList &L,NUM num2){//在带头节点的链表中找出num2所在的位序,头结点后第一个结点为1,后依次为2,3,4。
      。。。。。。
    int i=1;
    LinkList p=L->next;//此时p指向头结点后第一个结点
    while(p&&p->num!=num2)
    {
    p=p->next;
    i ;
    }
    if(!p) {P("没找到该学号--—— ");return ERROR; }
    return i;
    }
    Status ListDelete_L(LinkList &L,int i){//在带头结点的单链表中删除第i个元素
    LinkList p=L,q=NULL;
    int j=0;
    while(p->next&&jnext;
    j ;

    }
    q=p->next;
    p->next=q->next;
    free(q);
    return OK;
    }
    Status ListInsert_L(LinkList &L){//在带头结点的L学号顺序存放链表中插入新的学生信息
    LinkList p=L,s=NULL,p1=NULL;
    p1=p=p->next;
    s=(LinkList)malloc(sizeof(LNode));
    P(" ---请输入想要插入的学生信息--- ");
    P(" 请输入学号: ");
    S(D,&s->num);
    P("请输入分数: ");
    P("----语文 数学 英语---- ");
    S("%f%f%f",&s->ch,&s->math,&s->eng);
    if(s->numnum){L->next=s;s->next=p;return OK;}
    while(p&&s->num>=p->num) {p1=p;p=p->next;}
    p1->next=s;
    s->next=p;
    return OK;
    }
    Status EveryStu_Sum(LinkList &L){//求每个学生总分
    LinkList p=L;
    p=p->next;
    while(p)
    {
    p->sum=p->ch p->eng p->math;
    p=p->next;
    }
    return OK;
    }
    Status EveryStu_EVE(LinkList L){//求每个学生平均分
    LinkList p=L;
    p=p->next;
    while(p)
    {
    p->ave=(p->ch p->eng p->math)/NC;
    p=p->next;
    }
    return OK;
    }
    Status AVE_Every(LinkList L,Average PJF){//求每门课平均分,存放在PJF所指结点
    LinkList p=L;
    int i=Length_L(L);
    float sum1=0,sum2=0,sum3=0;
    p=p->next;
    while(p){
    sum1 =p->ch;
    sum2 =p->math;
    sum3 =p->eng;
    p=p->next;
    }
    PJF->av_ch=sum1/i;
    PJF->av_math=sum2/i;
    PJF->av_eng=sum3/i;
    return OK;
    }
    Status TheMaxAVE(LinkList L){//找出平均分最高的学生
    LinkList p=L;
    LinkList p1=p;
    p=p->next;
    float max=0;
    while(p)
    {
    if((p->ave)>max) {max=p->ave;p1=p;}
    p=p->next;
    }
    p=p1;
    P("平均分最高的学生学号为:%d 平均分:%4。
      2f ",p->num,p->ave);
    return OK;
    }
    Status Max_Every(LinkList L){//找出每门成绩最高分
    LinkList p=L,p1=L,p2=L,p3=L;
    p=p->next;
    float max1=0,max2=0,max3=0;
    while(p)
    {
    if(p->ch>max1){max1=p->ch;p1=p;}
    if(p->math>max2){max2=p->math;p2=p;}
    if(p->eng>max3){max3=p->eng;p3=p;}
    p=p->next;
    }
    P(" 语文最高: 学号:%d 成绩:%4。
      2f ",p1->num,p1->ch);
    P("数学最高: 学号:%d 成绩:%4。2f ",p2->num,p2->math);
    P("英语最高: 学号:%d 成绩:%4。2f ",p3->num,p3->eng);
    return OK;
    }
    Status Min_Every(LinkList L){//找出每门成绩最低分
    LinkList p=L,p1=L,p2=L,p3=L;
    p=p->next;
    float min1=101,min2=101,min3=101;
    while(p)
    {
    if(p->chch;p1=p;}
    if(p->mathmath;p2=p;}
    if(p->engeng;p3=p;}
    p=p->next;
    }
    P(" 语文最低: 学号:%d 成绩:%4。
      2f ",p1->num,p1->ch);
    P("数学最低: 学号:%d 成绩:%4。2f ",p2->num,p2->math);
    P("英语最低: 学号:%d 成绩:%4。2f ",p3->num,p3->eng);
    return OK;
    }
    void PrintAVE_EvryCourse(Average PJF){//打印每门课平均分
    P(" 语文平均 数学平均 英语平均 ");
    P(" %4。
      2f %4。2f %4。2f ",PJF->av_ch,PJF->av_math,PJF->av_eng);
    P(" ");
    }
    void Print_Sum(LinkList L){//打印每个学生总分
    LinkList p=L;
    p=p->next;
    P(" 学号 总分 " );
    while(p)
    {
    P(" %d %4。
      2f ",p->num,p->sum);
    p=p->next;
    }
    }
    void PrintEveryStu_EVE(LinkList L){//打印每个学生平均分
    LinkList p=L;
    p=p->next;
    P(" 学号 平均分 ");
    while(p)
    {
    P(" %d %4。
      2f ",p->num,p->ave);
    p=p->next;
    }
    }
    void Print_L(LinkList L){//打印链表中所有元素
    LinkList p=L;
    p=p->next;
    P(" ------学生信息如下----- ");
    P(" 学号 成绩 ");
    P(" ----------------------------------------- ");
    P(" || | 语文 数学 英语 || ");
    P(" ----------------------------------------- ");
    while(p)
    {
    P(" ||%d | %4。
      2f %4。2f %4。
      2f|| ",p->num,p->ch,p->math,p->eng);
    p=p->next;

    }
    P(" ----------------------------------------- ");
    }
    void menu(){//打印菜单
    P(" ------请选择操作------ ");
    P(" **********MENU********* ");
    P(" ||0---统计学生总数-- || ");
    P(" ||1---插入学生成绩---|| ");
    P(" ||2---删除学生成绩---|| ");
    P(" ||3---求每个学生总分-|| ");
    P(" ||4---求每学生平均分-|| ");
    P(" ||5---求每门课平均分-|| ");
    P(" ||6---平均分最高学生-|| ");
    P(" ||7---每门最高低分---|| ");
    P(" ||8---退出-----------|| ");
    P(" *********************** ");
    }
    void main(){
    LinkList L;//L指向链表头结点;
    Average PJF;//PJF指向存放平均分的一个结点
    PJF=(Average)malloc(sizeof(AVENode));//为存放各科平均分分配一块空间
    NUM num1=0,num0=0;
    int i=0;
    char ch=0,cho=0;
    CreatList_L(L);
    Print_L(L);
    while(1)
    {
    menu();
    P(" your choice:");
    cho=getche();//选择操作
    P(" ");
    switch(cho)
    {
    case '0':
    P("学生总数为:%d ",Length_L(L));
    break;
    case '1':
    while(1)
    {
    ListInsert_L(L);
    Print_L(L);
    P("---q键退出上一层菜单,其他任意键继续--- ");
    ch=getche();
    if(ch=='q'||ch=='Q')break;
    }
    break;
    case '2':
    while(1)
    {
    P("请输入要删除的学号: ");
    S(D,&num1);
    i=GetNumI_L(L,num1);
    if(i==0) continue;
    else
    ListDelete_L(L,i);
    Print_L(L);
    P("---q键退出上一层菜单,其他任意键继续--- ");
    ch=getche();
    if(ch=='q'||ch=='Q')break;
    }
    break;
    case '3':
    EveryStu_Sum(L);//每个学生总分函数
    Print_Sum(L);//打印每个学生总分函数
    break;
    case '4':
    EveryStu_EVE(L);//求每个学生平均分
    PrintEveryStu_EVE(L);//打印每个学生平均分
    break;
    case '5':
    AVE_Every(L,PJF);
    PrintAVE_EvryCourse(PJF);
    break;
    case '6':
    EveryStu_EVE(L);
    TheMaxAVE(L);break;
    case '7':
    Max_Every(L);
    Min_Every(L);
    break;
    case '8':exit(0);
    default:P("请重新选择: ");break;
    }
    }
    getch();
    }。

    美***

    2018-05-02 16:02:44

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):