| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 427 人关注过本帖
标题:关于循环链表问题,求高手修改下
取消只看楼主 加入收藏
cjiao724
Rank: 1
来 自:四川广安
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-10-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:0 
关于循环链表问题,求高手修改下
/*利用链式存储结构存储学生的成绩信息,设计一个学生成绩管理系统,具有以下功能:
(1)定义学生结构体类型struct Student,每个学生包括学号、姓名、3门功课(课程名自己定义)、总分。
(2)建立单向循环链表:输入若干学生的信息(当输入学生的学号为"end"时结束,要求自动计算总分),
并按输入的顺序建立单向循环链表;
(3)输出学生成绩信息:遍历单向循环链表,输出所有学生的完整信息到屏幕;
(4)查找指定学号的学生信息。如果查找成功,输出所有学生信息,否则输出失败。
(5)插入学生信息:将新的学生成绩信息插入到指定位置;
(6)删除学生信息:给出学生姓名,删除链表所有相同姓名的学生的信息(即姓名相同的结点);
(7)修改学生信息:给出学生学号,修改该生的三门课程成绩信息;
(8)按总分排序:在原来的单向循环链基础上按总分降序进行就地排列。即不能增加额外的空间开销*/
#include<iostream>
using namespace std;

typedef struct Student{
    int number;
    char name[20];
    double c1;
    double c2;
    double c3;
    double total;
    struct Student *next;
}student,* stt;


void input(student *l);
double to(student *l1);
void show(student *l);
void search(student *l,int n);
void insert(student *l,int nu);
void del(student *l,char na[]);
void reset(student *l);
void paixu(student *l);


void main()
{

    stt l=new student;
    l=l->next;
    input(l);
    show(l);
    int n;
    cout<<"输入查找学号:"<<endl;
    cin>>n;
    search(l,n);
    int nu;
    cout<<"输入插入学号:"<<endl;
    cin>>nu;
    insert(l,nu);
    char na[20];
    cout<<"输入要删除学生姓名:"<<endl;
    cin>>na;
    del(l,na);
    reset(l);
    paixu(l);
}
void input(student *l)
{
    stt l2=l;
    cout<<"请输入学号 姓名 课程1成绩 课程2成绩 课程3成绩 "<<endl;
    do
    {
        stt l1;
        cin>>l1->number>>l1->name>>l1->c1>>l1->c2>>l1->c3;
        if(l1->number==0)
        {
            cout<<"input end!";
            exit(1);
        }   
        l2->next=l1;
        l1->next=l;
        l2=l1;
        cout<<endl;            
    }while(1);
   
}
double to(student *l1)
{
    double t=l1->c1+l1->c2+l1->c3;
    return t;
}
void show(student *l)
{
    stt l1=l;
    cout<<"学号  姓名 课程1成绩 课程2成绩 课程3成绩 总成绩"<<endl;
    do
    {
        cout<<l1->number<<"  "<<l1->name<<"    "<<l1->c1<<"   "<<l1->c2<<"    "<<l1->c3;
        cout<<"  "<<to(l1)<<endl;
        l1=l1->next;
    }while(l1->next!=l);
}
void search(student *l,int n)
{
    int num;
    cout<<"请输入要查找的学号: ";
    cin>>num;
    stt l1=l;
    do
    {
        if(num==l1->number)
        {
            cout<<l1->number<<"  "<<l1->name<<"    "<<l1->c1<<"   "<<l1->c2<<"    "<<l1->c3;
            cout<<"  "<<to(l1)<<endl;
        }
        else{cout<<"查无此人!";exit(1);}
        l1=l1->next;
    }while(l1!=l);
}
void insert(student *l,int nu)
{

    stt l1=l;
    cin>>nu;
    do
    {
        l1=l1->next;
    }while(l1->number!=nu);

    student * x=new student;
    cout<<"学号  姓名 课程1成绩 课程2成绩 课程3成绩 "<<endl;
    cin>>x->number>>x->name>>x->c1>>x->c2>>x->c3;
    x->next=l1->next;
    l1->next=x;
}
        
void del(student *l,char na[])
{
    stt l1=l;
    stt l2=l1;
    do{l2->next=l1;l1=l1->next;}while(l1->name!=na);
    l2->next=l1->next;
}

void reset(student *l)
{
    int num;
    cout<<"输入要修改学生的学号: ";
    cin>>num;
    stt l1=l;
    do
    {
        if(l1->number==num)
        {
            cout<<"课程1成绩 课程2成绩 课程3成绩:";
            cin>>l1->c1>>l1->c2>>l1->c3;
        }
        l1=l1->next;
    }while(l1!=l);
}
        
void paixu(student *l)
{
    stt l1=l->next;
    stt l2=l1->next;
    do
    {
        do
        {
            if(l2->total>l1->total)
            {
                l->total=l1->total;
                l1->total=l2->total;
                l2->total=l->total;
            }
            l2=l2->next;
        }while(l2!=l);
        l1=l1->next;        
    }while(l1->next!=l);
}

输入的时候老是有问题,就是不晓得哪里错了,请高手指点下。感激不尽。
搜索更多相关主题的帖子: 结构体 姓名 
2011-04-21 21:34
快速回复:关于循环链表问题,求高手修改下
数据加载中...
 
   



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

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