用C++写的学生成绩管理系统,要求输入一个班级的学生基本信息(包括学号,姓名,性别,5门课程成绩)。2、

如题所述

#include<iostream>
using namespace std;

typedef struct student
{
char no[4];
char name[8];
int score[3];
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)
{
printf("内存分配失败!\n");
exit(0);
}
printf("输入学生学号!\n");
scanf("%s",p->data.no);
while(strcmp(p->data.no,"0000"))
{
printf("输入姓名:\n");
scanf("%s",p->data.name);
printf("依次输入英语 语文 数学3门课程的成绩:\n");
for(i=0;i<3;i++)
scanf("%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));
printf("输入学生学号:\n");
scanf("%s",p->data.no);
}
}

void list::displayLink() //显示学生表信息
{
int i;
DLink *p;
p=L->next;
printf("学号 姓名 语文 数学 英语 总分\n");
while(p!=L)
{
printf(" %s ",p->data.no);
printf(" %s ",p->data.name);
for(i=0;i<3;i++)
printf("%d",p->data.score[i]);
printf("%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){
printf("内存分配失败!\n");
exit(0);
}
q=L;
while(j<i&&q->next!=L)
{
j++;
q=q->next;
}
if(q!=L)
{
printf("现在进行插入操作!输入学号:\n");
scanf("%s",p->data.no);
printf("输入姓名:\n");
scanf("%s",p->data.name);
printf("依次输入英语 语文 数学3门课程的成绩:\n");
for(k=0;k<3;k++)
scanf("%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;
printf("输入要删除的学生的姓名:");
scanf("%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];
printf("输入需要修改成绩的学生学号:\n");
scanf("%s",a);
while(p!=L)
{
if(strcmp(p->data.no,a)==0){
printf("依次输入修改后的英语 语文 数学3门课程的成绩:\n");
for(i=0;i<3;i++)
scanf("%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)
printf("!\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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-01
我想赚点 财富值 ..
相似回答