这里是一只大一的菜狗,要完成老师布置的一个程序,目的是做一个学生信息系统:学生信息包括:学号,姓名,语文、数学和英语课的成绩。其中包括以下子函数:链表创建函数、链表输出函数、链表插入函数和链表删除函数。
#include <iostream>
#include <string.h>
#include <cstring>
#include<cstdlib>
using namespace std;
class student{
private:
int num;
char name[10];
double score[3];
student *next;
public:
student()
{cout<<"...."<<endl;}
student(int num1,char *name1,double *score1) //拷贝构造函数
{ double*p=score1;
num=num1;
strcpy(name,name1);
*p=score[0];
*(p+1)=score[1];
*(p+2)=score[2];
next=NULL;
}
double aveage()//平均成绩函数
{
int i;
double sum;
for(i=0;i<3;i++){
sum=sum+score[i];
}
return sum/3;
}
void setnext(student *n)
{next=n;}
student *getnext()
{return next;}
int getnum()
{return num;}
char *getname()
{return name;}
double *getscore()
{return score;}
};
class studentlist{
private:
student *head;
int sum;
public:
studentlist(){
head=NULL;
sum=0;
cout<<"欢迎使用学生信息管理系统"<<endl;
}
~studentlist(){
cout<<"感谢使用"<<endl;
}
void show(){
cout<<"输入学生列表请按1"<<endl;
cout<<"插入学生信息请按2"<<endl;
cout<<"删除学生信息请按3"<<endl;
cout<<"查看学生列表请按4"<<endl;
cout<<"退出学生系统请按5"<<endl;
cout<<"查看学生平均成绩请按6"<<endl;
}
void print() //输出函数
{
student *p=head;
while(p!=NULL){
cout<<p->getnum()<<" "<<p->getname()<<" "<<p->getscore()<<" "<<p->getscore()+1<<" "<<p->getscore()+2<<" "<<endl;
p->getnext();
}
}
void new1()
{head=new student;}
void creat(){
int num;
double score[3];
char name[10];
student *p=head;
cout<<"请输入学号"<<endl;
cin>>num;
cout<<"请输入姓名"<<endl;
cin>>name;
cout<<"请输入三门课的成绩"<<endl;
cin>>score[0]>>score[1]>>score[2];
student *p1=new student(num,name,score);
for(int i=0;i<sum;i++)
{p=p->getnext();}
p->setnext(p1);
sum++;
}
void insert() //插入函数
{
student *p1,*p2,*insert1;
int num11;
char name11[10];
double score11[3];
cout<<"请输入学号"<<endl;
cin>>num11;
cout<<"请输入姓名"<<endl;
cin>>name11;
cout<<"请输入三门课的成绩"<<endl;
cin>>score11[0]>>score11[1]>>score11[2];
insert1=new student(num11,name11,score11);
p2=p1=head;
if(head==NULL){head=insert1;} //可能有点问题。
else
{while((p1->getnum()<num11)&&(p1->getnext()!=NULL)) //同上
{p2=p1;
p1=p1->getnext();
}
if(p1->getnum()>=num11)
{if(p1==head)head=insert1; //同上
else
p2->setnext(insert1);
insert1->setnext(p1);
}
else
{p2->setnext(insert1);
}
}
sum++;
}
void del()
{ int delnum;
cout<<"请输入要删除的学生学号"<<endl;
cin>>delnum;
student *p1,*p2;
p1=p2=head;
if(head==NULL){cout<<"查无此项"<<endl;}
while((p1->getnum()!=delnum)&&(p1->getnext()!=NULL))
{p2=p1;
p1=p1->getnext();
}
if(p1->getnum()==delnum)
{
if(p1->getnext()==NULL)p2->setnext(NULL);
else
{p1->getnext();
p2->setnext(p1);
}
sum--;
}
}
void getave()
{ int num;
cout<<"请输入要查询的学生学号"<<endl;
cin>>num;
student *p1;
p1=head;
if(head==NULL){cout<<"查无此项"<<endl;}
while(p1->getnum()!=num)
{
p1=p1->getnext();
}
if(p1->getnum()==num)
{
cout<<p1->getnum()<<"的平均成绩是"<<p1->aveage()<<endl;
}
else
cout<<"查无此项"<<endl;
}
};
int main(int argc, char *argv[]) {
studentlist www;
int choice;
while(1)
{www.show();
cin>>choice;
switch (choice)
{
case 1:
www.creat();
break;
case 2:
www.insert();
break;
case 3:
www.del();
break;
case 4:
www.print();
case 5:
exit(1);
break;
case 6:
www.getave();
break;
}
}
return 0;
}
可能代码不是很简洁,我我我尽力了。请大佬们将就看。
调试的时候就出现了题头的那个错误:Program received signal SIGSEGV, Segmentation fault,系统提示的断点是在38行getnext那个函数