1. 程式人生 > >單鏈表設計一個學生成績系統

單鏈表設計一個學生成績系統

#include<iostream.h>
struct Node
{
    int number;
char* name;
char* Class;
float math_grade;
Node *next;
};
class Student
{
public:
Student();
Student(char*n[],char*c[],int num[],float m[],int l);
~Student();
void Insert(char*n,char*c,int num,float m,int l);//姓名,班級,學號,成績
void Delete(int l);
void Locate(int l);
void Print();
private:
Node *first;
};


Student::Student()
{
Node *first=new Node;
first->next=NULL;
}
Student::~Student()
{
Node *q=NULL;
    while(first!=NULL)
{
q=first;
        first=first->next;
        delete q;
}
}
Student::Student(char*n[],char*c[],int num[],float m[],int l)
{
Node *s,*r;
first=new Node;
r=first;
for(int i=0;i<l;i++)
{
s=new Node;
s->name=n[i];
        s->Class=c[i];
        s->number=num[i];
        s->math_grade=m[i];
r->next=s;
r=s;
}
r->next=NULL;
 }
void Student::Insert(char*n,char*c,int num,float m,int l)
{
Node *r,*s;
    int count=0;
    r=first;
    while(r!=NULL&&count<l-1)
{
r=r->next;
        count++;
}
    if(r==NULL) cout<<"位置過大"<<endl;
    else
{
s=new Node;
        s->name=n;
        s->Class=c;
s->number=num;
s->math_grade=m;
        s->next=r->next;
        r->next=s;
}
}
void Student::Delete(int l)
 {

Node *r,*s;
    int count=0;
    r=first;
    while(r!=NULL&&count<l-1)
{
r=r->next;
        count++;
}
    if(r==NULL) cout<<"這個位置為空"<<endl;
    else
{
s=r->next;
        r->next=s->next;
cout<<s->name<<"的資料已被刪除"<<endl;
        delete s;
}
}
void Student::Locate(int l)
{
Node *s;
    int count=0;
    s=first;
    while(s!=NULL)
{
s=s->next;
        count++;
}
if(s==NULL) cout<<"這個位置為空"<<endl;
    else
{
cout<<"第"<<l<<"位的資料為:"<<endl;
cout<<"姓名:"<<s->name<<endl;
cout<<"班級"<<s->Class<<endl;
cout<<"學號"<<s->number<<endl;
        cout<<"數學成績"<<s->math_grade<<endl;
cout<<endl;
}
}
void Student::Print()
{
    Node *s;
s=first->next;
cout<<"姓名      班級      學號    數學成績"<<endl;
    while(s!=NULL)
{
cout<<s->name<<"    ";
cout<<s->Class<<"    ";
cout<<s->number<<"     ";
cout<<s->math_grade<<endl;
s=s->next;
}
}

int main()
{
int p;
int y;
float z;
    char x[5];
char r[10];
char*n[4]={"小明","小紅","小花","小青"};
char*c[4]={"信管1171","信管1172","計科1171","信管1161"};
int num[4]={2011,2012,2014,2017};
float m[4]={80,90,100,89.5};
Student a(n,c,num,m,4);
    cout<<"錄入的資料為:"<<endl;
    a.Print();
cout<<endl;
cout<<"插入資料"<<endl;
cout<<endl;
    cout<<"輸入你要列入的姓名:";
    cin>>x;
    cout<<"輸入你要列入的班級:";
    cin>>r;
cout<<"輸入你要列入的學號:";
    cin>>y;
cout<<"輸入你要列入的數學成績:";
    cin>>z;
    cout<<"輸入你要列入的位置:";
cin>>p;
cout<<endl;
a.Insert(x,r,y,z,p);
a.Print();
cout<<endl;
cout<<"要刪除的位置:";
cin>>p;
a.Delete(p);
cout<<endl;
cout<<"要查詢的資料的位置:";
cin>>p; 
a.Locate(p);
cout<<endl;
cout<<"各成員資料如下:"<<endl;
a.Print();
    return 0;

}

執行結果: