#include <iostream>
#include <cmath>
#include <cstring>
#include <string.h>
#include <stdlib.h>
typedef long long ll;
typedef long long LL;
using namespace std;
typedef struct student
{
int num;
string name;
int foxscore;
int cscore;
int englishscore;
int sum_score;
student *next;
}student,*linklist;
void Create_linklist(linklist &h)
{
linklist p,q;
int numm;
string na;
int fox;
int cc;
int english;
h = new student();
p = h;
cout<<"请输入学号,姓名,fox成绩,c语言成绩,英语成绩,-1结束."<<endl;
while(cin>>numm && numm!=-1)
{
cin>>na>>fox>>cc>>english;
q=new student();
q->num = numm;
q->name = na;
q->foxscore = fox;
q->cscore = cc;
q->englishscore = english;
p->next = q;
p = q;
}
p->sum_score=p->foxscore+p->cscore+p->englishscore;
p->next = NULL;
p = h->next;
}
void Display(linklist h)
{
linklist p;
p = h->next;
while(p)
{
cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl;
p = p->next;
}
}
void Tongji(linklist h)
{
linklist p;
p = h->next;
int sum;
while(p)
{
sum = 0;
sum = sum+p->cscore+p->englishscore+p->foxscore;
p->sum_score = sum;
cout<<p->name<<"的总分是:"<<sum<<endl;
p = p->next;
}
}
void Score_sort(linklist &h)
{
linklist p,q;
int t;
t=5;
while(t--)
{
p = h->next;
while(p && p->next)
{
if(p->sum_score<p->next->sum_score)
{
q = new student();
q->num = p->num;
q->name = p->name;
q->cscore = p->cscore;
q->englishscore = p->englishscore;
q->foxscore = p->foxscore;
q->sum_score = p->sum_score;
p->num = p->next->num;
p->name = p->next->name;
p->cscore = p->next->cscore;
p->englishscore = p->next->englishscore;
p->foxscore = p->next->foxscore;
p->sum_score = p->next->sum_score;
p->next->num = q->num;
p->next->name = q->name;
p->next->cscore = q->cscore;
p->next->englishscore = q->englishscore;
p->next->foxscore = q->foxscore;
p->next->sum_score = q->sum_score;
}
p = p->next;
}
}
cout<<"已排序,顺序为:"<<endl;
p=h->next;
while(p)
{
cout<<"学号:"<<p->num<<" 姓名:"<<p->name<<" fox成绩:"<<p->foxscore<<" c语言成绩:"<<p->cscore<<" english成绩:"<<p->englishscore<<"总分为:"<<p->sum_score<<endl;
p=p->next;
}
}
void Search(linklist h)
{
int number;
cout<<"请输入要查找的学号:";
cin>>number;
linklist p = h->next;
while(p)
{
if(p->num == number)
{
cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl<<"总分为:"<<p->sum_score<<endl;
return ;
}
p = p->next;
}
cout<<"没有此人信息。"<<endl;
}
void Score_search(linklist h)
{
int score;
cout<<"请输入要查找的总分:";
cin>>score;
linklist p = h->next;
while(p)
{
if(p->sum_score == score)
{
cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl<<"总分为:"<<p->sum_score<<endl;
return ;
}
p = p->next;
}
cout<<"没有此人信息。"<<endl;
}
void Copy(linklist &a,linklist h)
{
a = h;
}
void Name_search(linklist h)
{
string str;
cout<<"请输入要查找的名字:"<<endl;
cin>>str;
linklist p = h->next;
while(p)
{
if(p->name == str)
{
cout<<"学号:"<<p->num<<endl<<" 姓名:"<<p->name<<endl<<" fox成绩:"<<p->foxscore<<endl<<" c语言成绩:"<<p->cscore<<endl<<" english成绩:"<<p->englishscore<<endl<<"总分为:"<<p->sum_score<<endl;
return ;
}
p = p->next;
}
cout<<"没有此人的信息。"<<endl;
}
void C_sum(linklist h)
{
linklist p;
int sum = 0;
p = h->next;
while(p)
{
sum += p->cscore;
p = p->next;
}
cout<<"所有人的C语言总分为:"<<sum<<endl;
}
void Fox_sum(linklist h)
{
linklist p;
int sum = 0;
p = h->next;
while(p)
{
sum += p->foxscore;
p = p->next;
}
cout<<"所有人的fox总分为:"<<sum<<endl;
}
void English_sum(linklist h)
{
linklist p;
int sum = 0;
p = h->next;
while(p)
{
sum += p->englishscore;
p = p->next;
}
cout<<"所有人的英语总分为:"<<sum<<endl;
}
void Add(linklist &h)
{
linklist p,q;
int numm;
string na;
int fox;
int cc;
int english;
p = h;
while(p->next)
{ p = p->next;}
cout<<"请输入学号,姓名,fox成绩,c语言成绩,英语成绩."<<endl;
cin>>numm>>na>>fox>>cc>>english;
q=new student();
q->num = numm;
q->name = na;
q->foxscore = fox;
q->cscore = cc;
q->englishscore = english;
p->next = q;
int sum = 0;
p = p->next;
sum = sum+p->cscore+p->englishscore+p->foxscore;
p->sum_score = sum;
p->next = NULL;
cout<<numm<<"插入成功。"<<endl;
}
void Delete(linklist &h)
{
int number;
cout<<"请输入要删除的人的学号:"<<endl;
cin>>number;
linklist p,q;
p = h;
while(p->next)
{
if(p->next->num == number)
{
q = p->next;
p->next = p->next->next;
free(q);
cout<<number<<"已经删除"<<endl;
}
p = p->next;
}
}
void Error()
{
cout<<"请输入正确的选项."<<endl;
}
void menu()
{
linklist head = NULL;
cout<<"实验一:【学生成绩管理】"<<endl;
int op;
while(1)
{
cout<<"(1):信息输入(INPUT)"<<endl;
cout<<"(2): 插入一个人的信息(ADD_IN)"<<endl;
cout<<"(3): 删除一个人的信息(DELETE)"<<endl;
cout<<"(4):学号查询(QUERY)"<<endl;
cout<<"(5): 姓名查询(NAME_SEARCH)"<<endl;
cout<<"(6): 总分查询(SCORE_SEARCH)"<<endl;
cout<<"(7): 英语成绩合计(ENGLISH_SUM)"<<endl;
cout<<"(8): fox成绩合计(FOX_SUM)"<<endl;
cout<<"(9): C语言成绩合计(C_SUM)"<<endl;
cout<<"(10):总分统计(COUNT)"<<endl;
cout<<"(11):总分排序(SORT)"<<endl;
cout<<"(12): 拷贝(显示全部)(COPY)"<<endl;
cout<<"(0): 退出(EXIT)"<<endl;
cout<<"请输入您要进行的操作,0表示结束"<<endl;
cin>>op;
if(!op)
break;
if(op==1)
{
Create_linklist(head);
cout<<"链表创建完毕,您输入的学生信息是:"<<endl;
Display(head);
cout<<endl<<endl;
continue;
}
if(op == 2)
{
Add(head);
cout<<endl<<endl;
continue;
}
if(op==3)
{
Delete(head);
cout<<endl<<endl;
continue;
}
if(op==4)
{
Search(head);
cout<<endl<<endl;
continue;
}
if(op==5)
{
Name_search(head);
cout<<endl<<endl;
continue;
}
if(op==6)
{
Score_search(head);
cout<<endl<<endl;
continue;
}
if(op == 7)
{
English_sum(head);
cout<<endl<<endl;
continue;
}
if(op == 8)
{
Fox_sum(head);
cout<<endl<<endl;
continue;
}
if(op == 9)
{
C_sum(head);
cout<<endl<<endl;
continue;
}
if(op==10)
{
Tongji(head);
cout<<endl<<endl;
continue;
}
if(op==11)
{
Score_sort(head);
cout<<endl<<endl;
continue;
}
if(op==12)
{
linklist copier;
Copy(copier,head);
cout<<"拷贝完成!"<<endl<<"拷贝后的链表为:"<<endl;
Display(copier);
cout<<endl<<endl;
continue;
}
else
{
Error();
cout<<endl<<endl;
continue;
}
}
}
int main()
{
menu();
cout<<"实验完成!!!!!!!!!!!!!!!!"<<endl;
return 0;
}