打印

[提问] 谁能帮我改一下这个程序啊

本主题由 yofx 于 2008-5-21 20:44 移动

谁能帮我改一下这个程序啊


这是俺写的一个选课系统,可是有几个错误咋也该不对,其中的选课模块,选课后不能显示已选课程,各位大哥大姐帮帮忙啊
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include <stdlib.h>
#include <conio.h>
#include<fstream.h>
struct course
{
        int cnum;//课序号
        char cname[8];//课程名
        char tname[8];
    float credit;
        int max;
        int hselected;
        course * next;
        course *head,*rear;
};
course * insert(course *&head,course *&rear,course*p)//添加课程
{
        if(head==NULL)
        {
                head=rear=p;
                head->next=0;
        //cout<<"课序号:"<<p->cnum<<'\t'<<"课程名:"<<p->cname<<'\t'<<"任课教师:"<<p->tname<<'\t'<<"学分"<<p->credit<<'\t'<<"课容量:"<<p->max<<"已选人数:"<<p->hselected<<endl;
        }
        else
        {
                rear->next=p;
                rear=rear->next;
                //cout<<"课序号:"<<p->cnum<<'\t'<<"课程名:"<<p->cname<<'\t'<<"任课教师:"<<p->tname<<'\t'<<"学分"<<p->credit<<'\t'<<"课容量:"<<p->max<<"已选人数:"<<p->hselected<<endl;
                p->next=NULL;
        }
        return(head);
}
course *create(course *head,course *rear)
{
        course *p1;
        int cnum;//课序号
        char cname[8];//课程名
        char tname[8];
    float credit;
        int max;
        int hselected=0;
        cout<<"请输入课序号,课程名 ,任课教师 ,学分,课容量,以-1结束;"<<endl;
        cin>>cnum>>cname>>tname>>credit>>max;
        while(cnum!=-1)
        {
                p1=new course;
                p1->cnum=cnum;
                strcpy(p1->cname,cname);
                strcpy(p1->tname,tname);
                p1->credit=credit;
                p1->max=max;
                p1->hselected=0;
                head=insert(head,rear,p1);
                rear=p1;
                //cout<<head<<endl;
                //cout<<rear<<endl;
                cout<<"请输入课序号以-1结束"<<endl;
                cin>>cnum;
                if(cnum!=-1)
                {
                        cout<<"请输入课程名 ,任课教师,学分,课容量"<<endl;
                        cin>>cname>>tname>>credit>>max;
                }        
        }
    if(head)
        {
                p1->next=0;
        }
                return(head);
}
course *deletecourse(course *head,int cnum)//删除课程
{
        course *p1,*p2;
        if(head==0)
        {
                cout<<"无课程记录"<<endl;
                return(0);
        }
        else
        {
                if(head->cnum==cnum)
                {
                        p1=head;
                        head=head->next;
                        delete p1;
                        cout<<"已删除了该课程!"<<endl;
                }
                else
                {
                        p1=p2=head;p2=head->next;
                        while(p2->cnum!=cnum&&p2->next!=0)
                        {
                                p1=p2;p2=p2->next;
                        }
                        if(p2->cnum==cnum)
                        {
                                p1->next=p2->next;
                                delete p2;
                    cout<<"已删除了该课程!"<<endl;
                        }
                        else
                                cout<<"没有找到该课程"<<endl;
                }
        }
        return(head);
}

void output(course *head)//显示所有课程情况
{
        //cout<<head;
        course *p=head;
        //cout<<p;
        cout<<"所有课程信息如下:"<<endl;
        while(p)
        {
                cout<<"课序号:"<<p->cnum<<'\t'<<"课程名:"<<p->cname<<'\t'<<"任课教师:"<<p->tname<<'\t'<<"学分"<<p->credit<<'\t'<<"课容量:"<<p->max<<"已选人数:"<<p->hselected<<endl;
                //cout<<p<<endl;
                p=p->next;
                //cout<<p<<endl;
        }
        cout<<endl;
}
struct student
{
        int sid;
        char sname[8];
        char department[16];
    int Class;
        student *stunext;
        student *front,*last;
};
student * insertstudent(student *&front,student *&last,student*p)//添加学生
{
        if(front==NULL)
        {
                front=last=p;
                front->stunext=0;
        cout<<"学号:"<<p->sid<<'\t'<<"姓名:"<<p->sname<<'\t'<<"系:"<<p->department<<'\t'<<"班级"<<p->Class<<endl;
        }
        else
        {
                last->stunext=p;
                last=last->stunext;
                cout<<"学号:"<<p->sid<<'\t'<<"姓名:"<<p->sname<<'\t'<<"系:"<<p->department<<'\t'<<"班级"<<p->Class<<endl;
                p->stunext=NULL;
        }
        return(front);
}
student *createstudent(student *front,student *last)
{
        student *p1;
        int sid;//课序号
        char sname[8];//课程名
        char department[16];
        int Class;
        cout<<"请输入学号,姓名 ,系 ,班级,以-1结束;"<<endl;
        cin>>sid>>sname>>department>>Class;
        while(sid!=-1)
        {
                p1=new student;
                p1->sid=sid;
                strcpy(p1->sname,sname);
                strcpy(p1->department,department);
                p1->Class=Class;
                front=insertstudent(front,last,p1);
                last=p1;
                cout<<front<<endl;
                cout<<last<<endl;
                cout<<"请输入学号以-1结束"<<endl;
                cin>>sid;
                if(sid!=-1)
                {
                        cout<<"请输入姓名 ,系,班级"<<endl;
                        cin>>sname>>department>>Class;
                }        
        }
    if(front)
        {
                p1->stunext=0;
        }
                return(front);
}
student *deletestudent(student *front,int sid)//删除学生
{
        student *p1,*p2;
        if(front==0)
        {
                cout<<"无学生纪录"<<endl;
                return(0);
        }
        else
        {
                if(front->sid==sid)
                {
                        p1=front;
                        front=front->stunext;
                        delete p1;
                        cout<<"已删除了该学生!"<<endl;
                }
                else
                {
                        p1=p2=front;p2=front->stunext;
                        while(p2->sid!=sid&&p2->stunext!=0)
                        {
                                p1=p2;p2=p2->stunext;
                        }
                        if(p2->sid==sid)
                        {
                                p1->stunext=p2->stunext;
                                delete p2;
                    cout<<"已删除了该学生!"<<endl;
                        }
                        else
                                cout<<"没有找到该学生"<<endl;
                }
        }
        return(front);
}
void outputstudent(student *front)//显示所有学生情况
{
        student *p=front;
        cout<<p<<endl;
        cout<<"所有学生信息如下:"<<endl;
        while(p)
        {
                cout<<"学号:"<<p->sid<<'\t'<<"姓名:"<<p->sname<<'\t'<<"系:"<<p->department<<'\t'<<"班级"<<p->Class<<endl;
                cout<<p<<endl;
                p=p->stunext;
                cout<<p<<endl;
        }
        cout<<endl;
}
struct hcourse
{
    int hcnum;//课序号
        char hcname[8];//课程名
        char htname[8];
    float hcredit;
        float grade;
        hcourse * hnext;
        hcourse *hhead,*hrear;
};
hcourse *createhcourse(hcourse *hhead,course *head,hcourse *hrear,int hcnum)//学生选课
{
        hcourse *p=new hcourse;course *q1,*q2;
        /*if(head->cnum=hcnum)
        {
               
                strcpy(p->hcname,head->cname);
                p->hcnum=head->cnum;
                p->hcredit=head->credit;
                strcpy(p->htname,head->tname);
                p->grade=0;
                head->hselected=head->hselected+1;
                if(hhead==NULL)
                {
                        hhead=hrear=p;
                        hhead->hnext=0;
                        //cout<<hhead<<endl;
                        cout<<"课序号:"<<hhead->hcnum<<'\t'<<"课程名:"<<hhead->hcname<<'\t'<<"任课教师:"<<hhead->htname<<'\t'<<"学分"<<hhead->hcredit<<"成绩:"<<hhead->grade<<endl;
                }
                else
                {
                        hrear->hnext=p;
                        hrear=hrear->hnext;
                        p->hnext=NULL;
                        cout<<"课序号:"<<p->hcnum<<'\t'<<"课程名:"<<p->hcname<<'\t'<<"任课教师:"<<p->htname<<'\t'<<"学分"<<p->hcredit<<'\t'<<"成绩:"<<p->grade<<endl;
                        //cout<<hhead<<endl;
                        //cout<<hhead->hcnum<<p->hcname<<p->hcredit<<endl;
                }
                //return(hhead);
        }
        else*/
        {
                q1=q2=head;q2=q2->next;
                while(q2->cnum!=hcnum&&q2->next!=0)
                {
                        q1=q2;q2=q2->next;
                }
                if(q2->cnum=hcnum)
                {
                        strcpy(p->hcname,q2->cname);
                    p->hcnum=q2->cnum;
                    p->hcredit=q2->credit;
                    strcpy(p->htname,q2->tname);
                        p->grade=0;
                        q2->hselected=q2->hselected+1;
                        
                        if(hhead==NULL)
                        {
                            hhead=hrear=p;
                            hhead->hnext=0;
                            //cout<<hhead<<endl;
                                cout<<"课序号:"<<hhead->hcnum<<'\t'<<"课程名:"<<hhead->hcname<<'\t'<<"任课教师:"<<hhead->htname<<'\t'<<"学分"<<hhead->hcredit<<"成绩:"<<hhead->grade<<endl;
                        }
                    else
                        {
                            hrear->hnext=p;
                            hrear=hrear->hnext;
                            hrear->hnext=NULL;
                                cout<<"课序号:"<<p->hcnum<<'\t'<<"课程名:"<<p->hcname<<'\t'<<"任课教师:"<<p->htname<<'\t'<<"学分"<<p->hcredit<<'\t'<<"成绩:"<<p->grade<<endl;
                            //cout<<hhead<<endl;
                            //cout<<hhead<<endl;
                        }
                //return(hhead);
                }
                else cout<<"暂时没有该课程!"<<endl;
        }
        //cout<<hhead<<endl;
        if(hhead)
        {
                p->hnext=0;
        }
        return(hhead);
        return(hrear);
}
void deletehcourse(hcourse *hhead,int hcnum)//删除已选课程
{
        hcourse *p1,*p2;
        if(hhead->hcnum==hcnum)
        {
                        p1=hhead;
                        hhead=hhead->hnext;
                        delete p1;
                        cout<<"已删除了该课程!"<<endl;
        }
        else
        {
                p1=p2=hhead;p2=hhead->hnext;
                while(p2->hcnum!=hcnum&&p2->hnext!=0)
                {
                        p1=p2;p2=p2->hnext;
                }
                if(p2->hcnum==hcnum)
                {
                        p1->hnext=p2->hnext;
                        delete p2;
                cout<<"已删除了该课程!"<<endl;
                }
                else
                        cout<<"您没有选修该课程"<<endl;
        }
}
void outputhcourse(hcourse *hhead)
{
        cout<<hhead;
        hcourse *m=hhead;
        cout<<m;
        cout<<"所有已选课程信息如下:"<<endl;
        while(m)
        {
                cout<<"课序号:"<<m->hcnum<<'\t'<<"课程名:"<<m->hcname<<'\t'<<"任课教师:"<<m->htname<<'\t'<<"学分"<<m->hcredit<<'\t'<<endl;//"课容量:"<<p->hmax<<"已选人数:"<<p->hselected<<endl;
                cout<<m<<endl;
                m=m->hnext;
                cout<<m<<endl;
        }
        

        /*
        void output(course *head)//显示所有课程情况course *p=head;
        cout<<p;
        cout<<"所有课程信息如下:"<<endl;
        while(p)
        {
                cout<<"课序号:"<<p->cnum<<'\t'<<"课程名:"<<p->cname<<'\t'<<"任课教师:"<<p->tname<<'\t'<<"学分"<<p->credit<<'\t'<<"课容量:"<<p->max<<"已选人数:"<<p->hselected<<endl;
                cout<<p<<endl;
                p=p->next;
                cout<<p<<endl;
        }
        cout<<endl;*/
}

/*void inputgrade(student *front,hcourse *hhead,int sid,int hcnum,float grade)// 成绩录入
{
        
        if(head->cnum=*/
void tuichu()
{
        system("cls");
        cout<<"感谢您使用该系统,再见!!"<<endl;
}

void main()
{
        course *head=NULL,*rear=NULL;
    student *front=NULL,*last=NULL;        int cnum,hcnum;
        hcourse *hhead=NULL,*hrear=NULL;
        int a;int b;int sid;
        do
        {
             cout<<"欢迎使用选课系统"<<endl;
             cout<<"1.学生端"<<endl;
             cout<<"2.管理端"<<endl;
             while(1)
                 {
                     cout<<"请选择登录方式:";
                     cin>>a;
                     switch(a)
                         {
                        
                         do
                         {
                         case 1:
                                  {
                                          cout<<"1:学生选课"<<endl;
                                          cout<<"2:删除已选课程"<<endl;
                                          cout<<"3:显示已选课程详细信息"<<endl;
                                          cout<<"4:已修课程成绩查询"<<endl;
                                          cout<<"0:退出"<<endl;
                                          cout<<"请选择操作方式:";
                                          cin>>b;
                                          switch(b)
                                          {
                                          case 1:
                                                   {
                                                           cout<<"所有课程信息如下:"<<endl;
                                                           output(head);
                                                           cout<<"请输入您要选择的课的课序号:";
                                                           cin>>cnum;
                                                           createhcourse(hhead,head,hrear,cnum);
                                                           break;
                                                   }
                                          case 2:
                                                   {
                                                           cout<<"请输入您要删除的课的课序号:";
                                                           cin>>hcnum;
                                                           deletehcourse(hhead,hcnum);
                                                           break;
                                                   }
                                          case 3:
                                                   {
                                                           cout<<"您已选择的课程信息如下"<<endl;
                                                           outputhcourse(hhead);//outputhcourse(hcourse *hhead)
                                                           break;
                                                   }
                                          /*case 4:
                                                   {
                                                           cout<<"请输入您要查询的课程的课序号;"<<endl;
                                                   }*/
                                          case 0:tuichu();break;         
                                          }
                                  }
                         }while(b);
                         do
                         {
                         case 2:
                                 {
                                         cout<<"1.添加学生。"<<endl;
                                         cout<<"2.删除学生。"<<endl;
                                         cout<<"3.添加课程。"<<endl;
                                         cout<<"4.删除课程。"<<endl;
                                         cout<<"5.录入学生成绩。"<<endl;
                                         cout<<"6.显示所有学生情况。"<<endl;
                                         cout<<"7.显示所有课程情况."<<endl;
                                         cout<<"0.退出."<<endl;
                                         cout<<"请选择操作方式:";
                                         cin>>b;
                                         switch(b)
                                         {
                                         case 1: front=createstudent(front,last);cout<<"按任意键继续……"<<endl;
                                                                                //getch();
                                        //system("cls");
                                                 break;
                                         case 2:cout<<"请输入您要删除的学生的学号:";cin>>sid;deletestudent(front,sid);break;
                                         case 3:head=create(head,rear);break;
                                         case 4:cout<<"请输入您要删除的课程的课序号:";cin>>cnum;deletecourse(head,cnum);break;
                                         //case 5:inputgrade(front,head,sid,hcnum,grade);break;
                                         case 6:outputstudent(front);break;
                                         case 7:output(head);break;
                                         case 0:tuichu();break;
                                         }
                                 }
                         }while(b);
                         }
                 }
        }while(a);
}

[ 本帖最后由 lchhaihai 于 2008-5-21 19:45 编辑 ]

TOP

眼晕!太多了,呵呵,实在看不下去了,迷糊,坐个沙发吧!呵呵!

Processed in 0.148867 second(s), 6 queries, Gzip enabled