用C++语言设计一个简单的学生成绩管理系统,主要功能包括:

1. 输入学生的各科成绩;
2. 计算总分;
3. 计算平均分;
4. 计算名次(按平均分);
5. 可查询任一学生的成绩情况;
6. 计算可科目的优秀率和合格率。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
typedef char ElemType;
#define OK 1
#define ERROR 0
#define OVER -1
typedef struct node
{
int number;
char name[20];
int chinese,math,english;
struct node *next;
} LinkList;
LinkList *InitList()
{
LinkList *H;
H=(LinkList *)malloc(sizeof(LinkList));
H->next=NULL;
return(H);
}
int Length_list(LinkList *H)
{
LinkList *p;
int j=0;
p=H;
while(p->next!=NULL)
{ p=p->next;
j++;
}
return j;
}
void CreateList(LinkList *H,int n)
{
int i;
LinkList *s,*last;
char ch;
last=H;
for(i=1;i<=n;i++)
{ s=(LinkList *)malloc(sizeof(LinkList));
printf("\n请输入第%d个学生的学号:",i);
scanf("%d",&s->number);
printf("\n请输入第%d个学生的姓名:",i);
scanf("%s",&s->name);
printf("\n请输入第%d个学生的语文、数学和英语成绩:",i);
scanf("%d%d%d",&s->chinese,&s->math,&s->english);
s->next=NULL;
last->next=s;
last=s;
}
}
LinkList *Locate(LinkList *H,int num)
{
LinkList *p;
p=H->next;
while(p!=NULL&&p->number!=num)
p=p->next;
return p;
}
LinkList *GetList(LinkList *H,int i)
{
LinkList *p;
int j=0;
p=H;
while(p->next!=NULL &&j<i)
{
p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
int InsList(LinkList *p,LinkList x)
{
LinkList *s;
s=(LinkList *)malloc(sizeof(LinkList));
s->number=x.number;
strcpy(s->name,x.name);
s->chinese=x.chinese;
s->math=x.math;
s->english=x.english;
s->next=p->next;
p->next=s;
return OK;
}
int Ins_List(LinkList *H,int i,LinkList x)
{
LinkList *p;
p=GetList(H,i-1);
if(p!=NULL)
{
InsList(p,x);
return OK;
}
else
return ERROR;
}
int DelList(LinkList *p,LinkList *x)
{
LinkList *s;
s=p->next;
x->number=s->number;
strcpy(x->name,s->name);
x->chinese=s->chinese;
x->math=s->math;
x->english=s->english;
p->next=s->next;
free(s);
return OK;
}
int Del_List(LinkList *H,int i,LinkList *x)
{
LinkList *p;
p=GetList(H,i-1);
if(p!=NULL&&p->next!=NULL)
{
DelList(p,x);
return OK;
}
else
return ERROR;
}
out()
{
printf("\n*****************************************");
printf("\n请输入序号(0-4)选择要进行的操作:");
printf("\n0-------退出");
printf("\n1-------建立一个学生信息表");
printf("\n2-------插入一个学生信息");
printf("\n3-------删除一个学生信息");
printf("\n4-------查找一个学生是否在该学生信息表中");
printf("\n*****************************************\n");
}
void DisLinkList(LinkList *H)
{
LinkList *p;
printf("\n所有学生的信息如下:");
printf("\n 学号 姓名 语文 数学 英语\n");
p=H->next;
while(p!=NULL)
{
printf("%2d%10s%9d%9d%9d\n",p->number,p->name,p->chinese,p->math,p->english);
p=p->next;
}
}
void main()
{
LinkList *H,*p,*q,x;
int i,n,menux,flag,num;
//clrscr();
out();
H=InitList();
scanf("%d",&menux);
do{switch(menux)
{
case 0: exit(0); break;
case 1:
printf("\n请输入要生成学生信息表的元素各数:");
scanf("%d",&n);
CreateList(H,n);
printf("建立的学生信息表为:\n");
DisLinkList(H);
break;
case 2:
printf("\n请输入要插入的学生位置:");
scanf("%d",&i);
printf("\n请输入要插入的学生信息:");
printf("\n请输入学生的学号:");
scanf("%d",&x.number);
printf("\n请输入学生的姓名:");
scanf("%s",&x.name);
printf("\n请输入学生的语文 数学和英语成绩:");
scanf("%d%d%d",&x.chinese,&x.math,&x.english);
flag=Ins_List(H,i,x);
if(flag)
{
printf("\n插入后的学生信息表为:");
DisLinkList(H);
}
break;
case 3:
printf("请输入要删除的学生的位置:");
scanf("%d",&i);
flag=Del_List(H,i,&x);
if(flag)
{
printf("\n删除第%d个学生后,表中信息为:",i);
DisLinkList(H);
}
break;
case 4:
printf("\n请输入查找的学生学号:\n");
scanf("%d",&num);
if((q=Locate(H,num))!=NULL)
{
printf("\n在学生信息表中存在着学号为%d的学生!",num);
printf("\n学号 姓名 语文 数学 英语\n");
printf("%2d%10s%9d%9d%9d",q->number,q->name,q->chinese,q->math,q->english);
}
else
printf("\n在学生信息表中不存在着学号为%d的学生!",num);
break;
default:
printf("\n输入选项错误,请重新输入(0-4)!");
}
out();
scanf("%d",&menux);
}while(1);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-21

邮箱啊