strcpy(head->ClassName,"");是撒意思,在線等
SIMS::SIMS()
{ //建構式.
head=new(Class);
strcpy(head->ClassName,"");
head->next=NULL;
head->studentcount=0;
stu=head->student=new(Student);
strcpy(stu->name,"");
strcpy(stu->number,"");
stu->next=NULL;
term=stu->term=new(Term);
term->term=0;
term->next=NULL;
term->achievement.English=0;
term->achievement.Physics=0;
term->achievement.Computer=0;
term->achievement.total=0;
term->achievement.average=0;
classcount=0;
};
SIMS::~SIMS()
{ //解構式.
Class* c;
Student* s;
Term* t;
c=head;
while(c)
{
s=stu=head->student;
while(s)
{
t=term=stu->term;
while(t)
{
term=term->next;
delete(t);
t=term;
}
stu=stu->next;
delete(s);
s=stu;
}
head=head->next;
delete(c);
c=head;
}
}
void SIMS::Main()
{ //主視窗函式.
int choice=-1;
while(choice!=0)
{
cout<<" "<<endl;
cout<<" 學生成績管理系統 "<<endl;
cout<<" "<<endl;
cout<<" 1.插入一個學生的某學期的成績 "<<endl;
cout<<" 2.修改一個學生的某學期的成績 "<<endl;
cout<<" 3.所有班級某學期按平均分排序 "<<endl;
cout<<" 4.查找某學生某學期的成績 "<<endl;
cout<<" 5.列印某班級的學生名單 "<<endl;
cout<<" 6.列印某班級某學期所有學生成績 "<<endl;
cout<<" 7.洗掉學生資訊 "<<endl;
cout<<" 0.退 出 系 統 "<<endl;
cout<<" "<<endl;
cout<<" 請選擇(0-6):";
cin>>choice;
switch(choice)
{
case 0:
break;
case 1:
Insert();
break;
case 2:
Modify();
break;
case 3:
Sort();
break;
case 4:
SearchAchievement();
break;
case 5:
ShowNamelist();
break;
case 6:
ShowAchievement();
break;
case 7: deletestu();break;
default:
choice=-1;
break;
}//switch
}//while
}//Main
void SIMS::Insert()
{ //插入一個學生的某學期的成績
char n[20]; //該生姓名
char num[20]; //該生學號
char cn[50]; //該生所在班級
int te; //要插入該生第幾個學期的成績
int english; //該生英語成績
int physics; //該生物理成績
int computer; //該生計算機成績
cout<<"請輸入該生姓名:";
cin>>n;
cout<<"請輸入該生學號:";
cin>>num;
cout<<"請輸入該生所在班級:";
cin>>cn;
cout<<"請輸入第幾個學期:";
cin>>te;
cout<<"請輸入該生英語成績:";
cin>>english;
cout<<"請輸入該生物理成績:";
cin>>physics;
cout<<"請輸入該生計算機成績:";
cin>>computer;
Class* c=head;
Student* s=NULL;
Term* t=NULL;
while(c->next&&strcmp(c->ClassName,cn))
{
c=c->next;
}
if(strcmp(c->ClassName,cn))
{
c->next=new(Class);
classcount++;
c=c->next;
c->studentcount=0;
strcpy(c->ClassName,cn);
c->next=NULL;
c->student=new(Student);
s=c->student;
strcpy(s->name,"");
strcpy(s->number,"");
s->next=NULL;
s->term=new(Term);
t=s->term;
t->term=0;
t->next=NULL;
t->achievement.English=0;
t->achievement.Computer=0;
t->achievement.Physics=0;
t->achievement.total=0;
t->achievement.average=0;
}
s=c->student;
while(s->next&&strcmp(s->name,n)&&strcmp(s->number,num))
{
s=s->next;
}
if(strcmp(s->name,n)&&strcmp(s->number,num))
{
s->next=new(Student);
++(c->studentcount);
s=s->next;
strcpy(s->name,n);
strcpy(s->number,num);
s->next=NULL;
s->term=new(Term);
t=s->term;
t->term=0;
t->next=NULL;
t->achievement.English=0;
t->achievement.Computer=0;
t->achievement.Physics=0;
t->achievement.total=0;
t->achievement.average=0;
}
t=s->term;
while(t->next&&t->term!=te)
{
t=t->next;
}
if(t->term!=te)
{
t->next=new(Term);
t=t->next;
t->term=te;
t->next=NULL;
t->achievement.English=english;
t->achievement.Computer=computer;
t->achievement.Physics=physics;
t->achievement.total=english+physics+computer;
t->achievement.average=(english+physics+computer)/3;
cout<<"插入成功!"<<endl;
return;
}
cout<<"該生該學期的成績已存在,不可插入!"<<endl;
return;
}
void SIMS::Modify()
{ //修改一個學生的某學期的成績
char n[20]; //該生姓名
char num[20]; //該生學號
char cn[50]; //該生所在班級
int te; //要修改該生第幾個學期的成績
int english; //該生英語成績
int physics; //該生物理成績
int computer; //該生計算機成績
cout<<"請輸入該生姓名:";
cin>>n;
cout<<"請輸入該生學號:";
cin>>num;
cout<<"請輸入該生所在班級:";
cin>>cn;
cout<<"請輸入第幾個學期:";
cin>>te;
cout<<"請輸入該生高等數學成績:";
cin>>english;
cout<<"請輸入該生物理成績:";
cin>>physics;
cout<<"請輸入該生計算機成績:";
cin>>computer;
Class* c=head;
Student* s=NULL;
Term* t=NULL;
while(c->next&&strcmp(c->ClassName,cn))
{
c=c->next;
}
if(strcmp(c->ClassName,cn))
{
cout<<"該學生所在班級不存在."<<endl;
return;
}
s=c->student;
while(s->next&&strcmp(s->name,n)&&strcmp(s->number,num))
{
s=s->next;
}
if(strcmp(s->name,n)&&strcmp(s->number,num))
{
cout<<"該學生不存在."<<endl;
return;
}
t=s->term;
while(t->next&&t->term!=te)
{
t=t->next;
}
if(t->term!=te)
{
cout<<"沒有該學生這個學期的成績記錄."<<endl;
return;
}
t->achievement.English=english;
t->achievement.Computer=computer;
t->achievement.Physics=physics;
t->achievement.total=english+physics+computer;
t->achievement.average=(english+physics+computer)/3;
cout<<"修改成功!"<<endl;
return;
}
void SIMS::ShowNamelist()
{
Class* c=head;
Student* s=stu;
char cn[50]; //該生所在班級
cout<<"請輸入該班級:";
cin>>cn;
while(c->next&&strcmp(c->ClassName,cn))
{
c=c->next;
}
if(strcmp(c->ClassName,cn))
{
cout<<"該班級不存在."<<endl;
return;
}
s=c->student->next;
cout<<endl<<" "<<cn<<"學生名單"<<endl;
cout<<" "<<endl;
while(s!=NULL)
{
cout<<" 姓名:"<<s->name<<" 學號:"<<s->number<<endl;
s=s->next;
}
cout<<" "<<endl;
return;
}
void SIMS::SearchAchievement()
{
char n[20]; //該生姓名
char num[20]; //該生學號
char cn[50]; //該生所在班級
int te; //要查找該生第幾個學期的成績
cout<<"請輸入該生姓名:";
cin>>n;
cout<<"請輸入該生學號:";
cin>>num;
cout<<"請輸入該生所在班級:";
cin>>cn;
cout<<"請輸入第幾個學期:";
cin>>te;
Class* c=head;
Student* s=NULL;
Term* t=NULL;
while(c->next&&strcmp(c->ClassName,cn))
{
c=c->next;
}
if(strcmp(c->ClassName,cn))
{
cout<<"該學生所在班級不存在."<<endl;
return;
}
s=c->student;
while(s->next&&strcmp(s->name,n)&&strcmp(s->number,num))
{
s=s->next;
}
if(strcmp(s->name,n)&&strcmp(s->number,num))
{
cout<<"該學生不存在."<<endl;
return;
}
t=s->term;
while(t->next&&t->term!=te)
{
t=t->next;
}
if(t->term!=te)
{
cout<<"沒有該學生這個學期的成績記錄."<<endl;
return;
}
cout<<" "<<endl;
cout<<"計算機:"<<t->achievement.Computer;
if(t->achievement.Computer<60)
{
cout<<"(不及格)";
}
cout<<endl;
cout<<"高等數學:"<<t->achievement.English;
if(t->achievement.English<60)
{
cout<<"(不及格)";
}
cout<<endl;
cout<<"物 理:"<<t->achievement.Physics;
if(t->achievement.Physics<60)
{
cout<<"(不及格)";
}
cout<<endl;
cout<<"總 分:"<<t->achievement.total<<endl;
cout<<"平均分:"<<t->achievement.average<<endl;
cout<<" "<<endl;
return;
}
//.........................................................................
void SIMS::deletestu()
{ Class* c=head;
Student* s=NULL;
Term* t=NULL;
SearchAchievement();
while(c->next&&strcmp(c->ClassName,NULL))
{
c=c->next;
}
while(s->next&&strcmp(s->name,NULL)&&strcmp(s->number,NULL))
{
s=s->next;
}
while(t->next&&t->term!=NULL)
{
t=t->next;
}
SearchAchievement();cout<<"洗掉操作成功!\n";
}
//
void SIMS::ShowAchievement()
{
char cn[50]; //要查找哪個班級的成績情況
int te; //要查找第幾個學期的成績
cout<<"請輸入要查找哪個班級:";
cin>>cn;
cout<<"請輸入第幾個學期:";
cin>>te;
Class* c=head;
Student* s=NULL;
Term* t=NULL;
while(c->next&&strcmp(c->ClassName,cn))
{
c=c->next;
}
if(strcmp(c->ClassName,cn))
{
cout<<"該班級不存在."<<endl;
return;
}
s=c->student;
cout<<"*******************************************************"<<endl;
while(s->next)
{
s=s->next;
cout<<"姓 名:"<<s->name<<" 學號:"<<s->number<<endl;
t=s->term;
while(t->next&&t->term!=te)
{
t=t->next;
}
if(t->term!=te)
{
cout<<"沒有該學生這個學期的成績記錄."<<endl;
}
else
{
cout<<"計算機:"<<t->achievement.Computer<<endl;
cout<<"英 語:"<<t->achievement.English<<endl;
cout<<"物 理:"<<t->achievement.Physics<<endl;
cout<<"總 分:"<<t->achievement.total<<endl;
cout<<"平均分:"<<t->achievement.average<<endl;
}
cout<<"*******************************************************"<<endl;
}
}
void SIMS::Sort()
{
int te; //要查找第幾個學期的成績
cout<<"請輸入第幾個學期:";
cin>>te;
Class* c;
Student* s;
Term* t;
ClassAchievement* classachievement=new ClassAchievement[classcount];
ClassAchievement temp;
int i=0;
c=head->next;
while(c)
{
s=c->student->next;
classachievement[i].Achievement=0;
classachievement[i].classname=c->ClassName;
while(s)
{
t=s->term;
while(t->next&&t->term!=te)
{
t=t->next;
}
classachievement[i].Achievement+=t->achievement.average;
s=s->next;
}
classachievement[i].Achievement=classachievement[i].Achievement/c->studentcount;
c=c->next;
i++;
}
for(i=classcount-1;i>=0;i--)
{
for(int j=0;j<=i-1;j++)
{
if(classachievement[j].Achievement<classachievement[j+1].Achievement)
{
temp.Achievement=classachievement[j+1].Achievement;
temp.classname=classachievement[j+1].classname;
classachievement[j+1].Achievement=classachievement[j].Achievement;
classachievement[j+1].classname=classachievement[j].classname;
classachievement[j].Achievement=temp.Achievement;
classachievement[j].classname=temp.classname;
}
}
}
cout<<endl<<" 按平均成績降序排序結果"<<endl;
cout<<"**************************************************"<<endl;
for(int w=0;w<=classcount-1;w++)
{
cout<<"第"<<w+1<<"名:";
cout<<classachievement[w].classname;
cout<<"("<<classachievement[w].Achievement<<"分)"<<endl;
}
cout<<"**************************************************"<<endl;
delete(classachievement);
}
void main()
{
SIMS c;
c.Main();
}
uj5u.com熱心網友回復:
將head的classname成員置為 空\0轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/30816.html
標籤:基礎類
上一篇:C語言程式,求大佬分析一下代碼,這個排序方法是什么???
下一篇:在C++Bulider XE3 64位編譯后, try __finally陳述句(有return)不會執行到__finally
