读书人

C++功课帮帮忙

发布时间: 2012-09-02 21:00:34 作者: rapoo

C++作业,急啊,帮帮忙
以前上课没用心,现在要交才急了,求帮忙

1.用C语言编写一个程序实现学员成绩管理,每个学员包括3门课的成绩。从键盘输入学员信息,包括学号.姓名.三门课成绩,按照学员平均成绩由大到小排序。

2.插入功能:在排序后的学员成绩表中插入一个学员的信息,要求插入后仍然保持成绩表原有排序。

3.删除功能:要求输入指定的学号,从学员信息表中删除该学员,删除后的成绩表保持原有的排序。

[解决办法]
- _ -!!本来以为很快就能写完,结果写了3个小时,~~代码发下面了。

C/C++ code
#include<stdio.h>#include <stdlib.h>#include<string.h>typedef struct inform{    long int snum;    char name[20];    int ascore;    int bscore;    int cscore;}inform;typedef struct student{ inform data; struct student *next;}stu,*PStu;void IniList(PStu *St)            /*初始化*/{    *St=(PStu)malloc(sizeof(student));    (*St)->next=*St;}void Create_List(PStu St)   /*尾插法建立学生链表*/{    student *s;    int     n=0;    long int snum;    char name[20];    int ascore;    int bscore;    int cscore;    int flag=1;    printf("请输入学生信息(按ctrl+z结束输入):\n");    while(flag)    {        printf("请输入第%d个同学的学号:",n+1);        if(scanf("%ld",&snum)==EOF){break;}        printf("请输入第%d个同学的姓名:",n+1);        if(scanf("%s",&name)==EOF){break;}        printf("请输入第%d个同学的第一门成绩:",n+1);        if(scanf("%d",&ascore)==EOF){break;}        printf("请输入第%d个同学的第二门成绩:",n+1);        if(scanf("%d",&bscore)==EOF){break;}        printf("请输入第%d个同学的第三门成绩:",n+1);        if(scanf("%d",&cscore)==EOF){break;}            s=(student *)malloc(sizeof(stu));            s->data.snum=snum;            strcpy(s->data.name,name);            s->data.ascore=ascore;            s->data.bscore=bscore;            s->data.cscore=cscore;            s->next=St->next;            St->next=s;            n=n+1;    }    St->data.snum=n;}void printfStu(PStu St){    student *p,*q;    long int snum;    char name[20];    int ascore;    int bscore;    int cscore;    p=q=St;    for(p=St->next;p->next!=St;p=p->next)    {        for(q=p->next;q!=St;q=q->next)        {            if((p->data.ascore+p->data.bscore+p->data.cscore)<(q->data.ascore+q->data.bscore+q->data.cscore))            {                                snum=q->data.snum;                q->data.snum=p->data.snum;                p->data.snum=snum;                strcpy(name,q->data.name);                strcpy(q->data.name,p->data.name);                strcpy(p->data.name,name);                ascore=q->data.ascore;                q->data.ascore=p->data.ascore;                p->data.ascore=ascore;                bscore=q->data.bscore;                q->data.bscore=p->data.bscore;                p->data.bscore=bscore;                cscore=q->data.cscore;                q->data.cscore=p->data.cscore;                p->data.cscore=cscore;            }        }    }    p=St;    printf("学员平均成绩由大到小排序\n");    printf("--------------------------------------------------\n");    for(int k=0;k<St->data.snum;k++)    {    p=p->next;    printf("%ld     %s     %d     %d     %d\n",p->data.snum,p->data.name,p->data.ascore,p->data.bscore,p->data.cscore);    }    printf("--------------------------------------------------\n");}void deleteStu(PStu St){    student *s,*p;    long int snum;    int n;    printf("请输入想要删除学生的学号:");    scanf("%ld",&snum);    getchar();    p=s=St;    n=St->data.snum;    while(s->next!=St)    {                if(s->next->data.snum==snum)        {            printf("找到学号为%s的学生\n",s->next->data.name);            s->next=s->next->next;            St->data.snum--;        }        else{s=s->next;}    }    if(n==St->data.snum)    {        printf("对不起,未找到您所要删除的学生学号!\n");    }    else printf("删除成功!\n");    printf("此时学员平均成绩由大到小排序为\n");    printf("--------------------------------------------------\n");    for(int k=0;k<St->data.snum;k++)    {    p=p->next;    printf("%ld     %s     %d     %d     %d\n",p->data.snum,p->data.name,p->data.ascore,p->data.bscore,p->data.cscore);    }    printf("--------------------------------------------------\n");}void insertStu(PStu St){    long int snum;    char name[20];    int ascore;    int bscore;    int cscore;    student *s;        printf("请输入该同学的学号:");        scanf("%ld",&snum);        printf("请输入该同学的姓名:");        scanf("%s",&name);        printf("请输入该同学的第一门成绩:");        scanf("%d",&ascore);        printf("请输入该同学的第二门成绩:");        scanf("%d",&bscore);        printf("请输入该同学的第三门成绩:");        scanf("%d",&cscore);        getchar();        s=(student *)malloc(sizeof(stu));        s->data.snum=snum;        strcpy(s->data.name,name);        s->data.ascore=ascore;        s->data.bscore=bscore;        s->data.cscore=cscore;        s->next=St->next;        St->next=s;        St->data.snum++;        printf("插入成功!\n");}main(){    PStu St;    char c;    IniList(&St);    Create_List(St);    printfStu(St);    while(1){    printf("请输入您现在想要的操作:d代表删除指定学号的学生,i代表插入学生成绩,p代表按平均成绩打印学生成绩,q退出\n\n");    scanf("%c",&c);    while(getchar() != '\n');            switch(c){                case 'd' : deleteStu(St);    break;                case 'i' : insertStu(St);        break;                case 'p' : printfStu(St);        break;                case 'q' : return 0;                default : printf("非法指令,您输入的是%c\n",c);            }       }} 

读书人网 >C++

热点推荐