我自己写了一个关于C语言的链表程序,,里面有插入学生信息和和成绩排名。。也有查找和删除,插入,但是我没有做修改的功能。。。
是没有界面的我还不会图形的。但是我觉得基本代码也应该还是有用的。你给看下我的。看可不可以帮到你。以后希望多多交流 。。。
#include "iostream.h"
#include "stdio.h"
#define manfen 150
typedef struct student {
char name[20];
double fen[4];
struct student * next;
} student;
int i=1;
int strcmp(char *a, char *b)
{
while((*a++ == *b++)&&(*a))
;
if((*a==NULL)&&(*b==NULL))
return 1;
else
return 0;
}
void SqlistStudent(student *&L,int j=1)
{
void heli(student *,int);
int a;
student *p,*q;
q=p=L=new student;
for(a=0;a<j;a++)
{
cout<<endl;
cout<<"请输入第";
cout<<i;
cout<<"位学生的名字:";
cin>>q->name;
cout<<" 语文分数:";
cin>>q->fen[0];
heli(q,0);
cout<<" 数学分数:";
cin>>q->fen[1];
heli(q,1);
cout<<" 英语分数:";
cin>>q->fen[2];
heli(q,2);
q->fen[3]=q->fen[0]+q->fen[1]+q->fen[2];
q=new student();
p->next=q;
p=q;
q->next=NULL;
i++;
}
cout<<"输入截止"<<endl;
}
void heli(student *t,int e)
{
while(t->fen[e]<0||t->fen[e]>manfen)
{
cout<<"输入的分数不合理,输入范围为:0-"<<manfen<<" 重新输入:"<<endl;
cin>>t->fen[e];
}
}
void shanchu(student *&l)
{
int strcmp(char *a, char *b);
student *q,*p;
char na[20];
int a=0,b=0;
q=p=l;
while(a!=-1)
{
cout<<"输入请删除学生信息的名字"<<endl;
cin>>na;
while(q->next!=NULL)
{
if( strcmp(na,q->name)==1 )
break;
p=q;
q=q->next;
b++;
}
if(strcmp(na,q->name)==1 )
{
if(b==0)
{
l=q->next;
i--;
break;
}
else
{
p->next=q->next;
i--;
break;
}
}
else
cout<<"没有此学生信息,请检查和重新输入"<<endl;
q=p=l;
}
}
void charu(student *&l)
{
int strcmp(char *a, char *b);
void heli(student *t,int e);
student *q,*p;
q=p=l;
int a=0,b=0,c=1,d=1;
char na[20];
student *f;
f=new student;
i++;
cout<<endl;
cout<<"请输入学生的名字";
cin>>f->name;
cout<<" 语文分数:";
cin>>f->fen[0];
heli(f,0);
cout<<" 数学分数:";
cin>>f->fen[1];
heli(f,1);
cout<<" 英语分数:";
cin>>f->fen[2];
heli(f,2);
f->fen[3]=f->fen[0]+f->fen[1]+f->fen[2];
f->next=NULL;
while(d!=0)
{
cout<<"请输入插入结点位置相邻的学生姓名"<<endl;
cin>>na;
while(q->next!=NULL)
{
b=strcmp(na,q->name);
if(b==1)
break;
p=q;
q=q->next;
d++;
}
if(b==1)
{
cout<<"在输入的名字前插入请输入1"<<endl;
cout<<"在输入的名字后插入请输入2"<<endl;
cin>>a;
if(a==1)
{
if(d==1)
{
f->next=l;
l=f;
cout<<"插入完成"<<endl;
break;
}
else
{
p->next=f;
f->next=q;
cout<<"插入完成"<<endl;
break;
}
}
if(a==2)
{
f->next=q->next;
q->next=f;
cout<<"插入完成"<<endl;
break;
}
}
if(b==0)
{
cout<<"没有找到此名字"<<endl;
}
q=p=l;
}
}
void print(student *l)
{
student *q;
q=l;
while(q->next!=NULL)
{
cout<<"学生的名字:"<<q->name<<endl;
cout<<"语文:"<<q->fen[0]<<endl;
cout<<"数学:"<<q->fen[1]<<endl;
cout<<"英语:"<<q->fen[2]<<endl;
cout<<"总分:"<<q->fen[3]<<endl;
q=q->next;
}
}
void anfencha(int a,double b,student *l)
{
student *q;
q=l;
int h=0;
while(q->next!=NULL)
{
if(q->fen[a]==b)
{
cout<<"学生的名字:"<<q->name<<endl;
cout<<"语文:"<<q->fen[0]<<endl;
cout<<"数学:"<<q->fen[1]<<endl;
cout<<"英语:"<<q->fen[2]<<endl;
cout<<"总分:"<<q->fen[3]<<endl;
h++;
}
q=q->next;
}
cout<<"您要查询的学生不存在"<<endl;
}
void anmin(char *na,student *l)
{
student *q;
int h=0;
q=l;
while(q->next!=NULL)
{
if(strcmp(na,q->name)==1)
{
cout<<"学生的名字:"<<q->name<<endl;
cout<<"语文:"<<q->fen[0]<<endl;
cout<<"数学:"<<q->fen[1]<<endl;
cout<<"英语:"<<q->fen[2]<<endl;
cout<<"总分:"<<q->fen[3]<<endl;
h++;
}
q=q->next;
}
if(h==0)
cout<<"没有此学生信息。"<<endl;
}
void paixu(student *l,int e)
{
student *q,*p;
student *a[30];
int b=0,c;
q=p=l;
for(b=0;b<30;b++)
a[b]=q;
b=0;
while(q->next!=NULL)
{
a[b]=q;
q=q->next;
b++;
}
for(b=0;b<i-1;b++)
{
for(c=b+1;c<i-1;c++)
{
if(a[b]->fen[e]<=a[c]->fen[e])
{
p=a[b];a[b]=a[c];a[c]=p;
}
}
}
switch(e)
{
case 0:cout<<"按照语文分数的排名情况是:"<<endl;break;
case 1:cout<<"按照数学分数的排名情况是:"<<endl;break;
case 2:cout<<"按照英语分数的排名情况是:"<<endl;break;
case 3:cout<<"按照总分分数的排名情况是:"<<endl;break;
}
for(b=0;b<i-1;b++)
{
cout<<"第"<<b+1<<"名"<<endl;
cout<<"学生的名字:"<<a[b]->name<<endl;
cout<<" 语文:"<<a[b]->fen[0]<<endl;
cout<<" 数学:"<<a[b]->fen[1]<<endl;
cout<<" 英语:"<<a[b]->fen[2]<<endl;
cout<<" 总分:"<<a[b]->fen[3]<<endl;
cout<<endl;
}
}
void main()
{
student *head;
int a=1,b=1,c=1,d;
char na[20];
cout<<"请输入需要保存的学生人数:"<<endl;
cin>>a;
SqlistStudent(head,a);
while(a!=0)
{
cout<<endl;
cout<<"退出请输入:0"<<endl;
cout<<"要查询请输入:1"<<endl;
cout<<"要插入学生信息请输入:2"<<endl;
cout<<"要查询各科排名情况:3"<<endl;
cout<<"要删除学生信息请输入4"<<endl;
cin>>a;
if(a==0)
break;
if(a==1)
{
cout<<"根据分数查询请输入1"<<endl;
cout<<"根据名字查询请输入2"<<endl;
cout<<"查询所有学生请输入3"<<endl;
cin>>b;
if(b==1)
{
cout<<"根据语文分数查询请输入0"<<endl;
cout<<"根据数学分数查询请输入1"<<endl;
cout<<"根据英语分数查询请输入2"<<endl;
cout<<"根据总分数查询请输入3"<<endl;
cin>>c;
cout<<"请输入要查找科目分数:"<<endl;
cin>>d;
anfencha(c,d,head);
}
if(b==2)
{
cout<<"请输入要查询学生名字:"<<endl;
cin>>na;
anmin(na,head);
}
if(b==3)
print(head);
}
if(a==2)
{
charu(head);
}
if(a==3)
{
cout<<"根据语文分数查询请输入0"<<endl;
cout<<"根据数学分数查询请输入1"<<endl;
cout<<"根据英语分数查询请输入2"<<endl;
cout<<"根据总分数查询请输入3"<<endl;
cin>>c;
paixu(head,c);
}
if(a==4)
shanchu(head);
}
}
追问我没有要求插入删除修改,但是我需要的程序还需要课程成绩分析啊,亲~