第0题 课程程序设计

  不是很会写,只能写一个班级的。4个班级排序不出来。

#include<iostream>
using namespace std;

typedef struct student
{
 char no[4];
 char name[32];
 int score[6];
 int total;
}stu;

typedef struct node{
 stu data;
 struct node *prior,*next;
}DLink;

class list
{
private:
 DLink *L;
public :
 void createList();
 void displayLink();
 void insert();
 void del();
 void modify();
 void order();
};

void list::createList() //创建链表
{
 int i;
 DLink *p,*q;
 q=L;
 p=(DLink *)malloc(sizeof(DLink));
 if(!p)
 {
 cout<<"内存分配失败!\n";
 exit(0);
 }
 cout<<"输入学生学号!\n";
 cin>>"%s",p->data.no;
 while(strcmp(p->data.no,"0000"))
 {
 cout<<"输入姓名:\n";
 cin>>"%s",p->data.name;
 cout<<"依次输入数电 模电 英语 C++ 毛概 体育6门课程的成绩:\n";
 for(i=0;i<6;i++)
 cin>>"%d",&p->data.score[i];
 p->data.total=p->data.score[0]+p->data.score[2];

 q->next=p;
 p->prior=q;
 p->next=L;
 L->prior=p;
 q=p;
 p=(DLink *)malloc(sizeof(DLink));
 cout<<"输入学生学号:\n";
 cin>>"%s",p->data.no;
 }
}
 
void list::displayLink() //显示学生表信息
{
 int i;
 DLink *p;
 p=L->next;
 cout<<"学号 姓名 语文 数学 英语 总分\n";
 while(p!=L)
 {
 cout<<" %s ",p->data.no;
 cout<<" %s ",p->data.name;
 for(i=0;i<3;i++)
 cout<<"%d",p->data.score[i];
 cout<<"%d\n",p->data.total;
 p=p->next;
 }
}

void list::insert() //在第i个位置插入学生信息
{
 int i;
 int j=1,k;
 DLink *p,*q;
 p=(DLink *)malloc(sizeof(DLink));
 if(!p){
 cout<<"内存分配失败!\n";
 exit(0);
 }
 q=L;
 while(j<i&&q->next!=L)
 {
 j++;
 q=q->next;
 }
 if(q!=L)
 {
 cout<<"现在进行插入操作!输入学号:\n";
 cin>>"%s",p->data.no;
 cout<<"输入姓名:\n";
 cin>>"%s",p->data.name;
 cout<<"依次输入数电 模电 英语 C++ 毛概 体育6门课程的成绩:\n";
 for(k=0;k<3;k++)
 cout<<"%d",&p->data.score[k];
 p->data.total=p->data.score[0]+p->data.score[2];

 p->next=q->next;
 q->next->prior=p;
 q->next=p;
 p->prior=p;
 }
}

void list::del() //删除操作
{
 char a[8];
 DLink *p,*q;
 p=L->next;
 cout<<"输入要删除的学生的姓名:";
 cin>>"%s",a;
 while(p!=L)
 {
 if(strcmp(a,p->data.name)==0)
 {
 p->prior->next=p->next;
 p->next->prior=p->prior;
 q=p;
 p=p->next;
 free(q);
 }
 else
 p=p->next;
 }
}

void list::modify() //修改学生成绩
{
 int b[3],i;
 DLink *p;
 p=L->next;
 char a[4];
 cout<<"输入需要修改成绩的学生学号:\n";
 cin>>("%s",a);
 while(p!=L)
 {
 if(strcmp(p->data.no,a)==0){
 cin>>("依次输入修改后的数电 模电 英语 C++ 毛概 体育6门课程的成绩:\n");
 for(i=0;i<3;i++)
 cin>>"%d",&b[i];
 p->data.score[0]=b[0];
 p->data.score[1]=b[1];
 p->data.score[2]=b[2];
 p->data.total=b[0]+b[1]+b[2];
 break;
 }
 p=p->next;
 }
 if(p=L)
 cout<<"!\n";
}

void list::order() //按学生总分降序排列
{
 DLink *p,*q,*r;
 p=L->next;
 if(p!=L)
 {
 r=p->next;
 p->next=L;
 p=r;
 while(p!=L)
 {
 r=p->next;
 q=L;
 while(q->next!=L&&q->next->data.total>p->data.total)
 q=q->next;
 p->next=q->next;
 if(q->next!=L)q->next->prior=p;
 q->next=p;
 p->prior=q;
 p=r;
 }
 }
}

void main()
{
 list l;
 int n;
 cout<<"*******************************"<<endl;
 cout<<"1.创建"<<endl;
 cout<<"2.插入"<<endl;
 cout<<"3.删除"<<endl;
 cout<<"4.更改"<<endl;
 cout<<"5.排序"<<endl;
 cout<<"退出"<<endl;
 cout<<"*******************************"<<endl;
 cout<<"请输入您要选择的功能:";
 cin>>n;
 do{
 switch(n)
 {
 case 1:
 {
 l.createList();
 l.displayLink();
 break;
 }
 case 2:
 {
 l.insert();
 l.displayLink();
 break;
 }
 case 3:
 {
 l.del();
 l.displayLink();
 break;
 }
 case 4:
 {
 l.modify();
 l.displayLink();
 break;
 }
 case 5:
 {
 l.order();
 l.displayLink();
 break;
 }
 default:
 break;
 }
 }while(n>0&&n<6);
 cout<<"退出循环"<<endl;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值