#include<bits/stdc++.h>
using namespace std;
struct PNode{
int xuehao;
char name[20];
double c;
double m;
double e;
double ans;
};
struct LinkList{
struct PNode data;
struct LinkList *next;
};
struct LinkList *head = NULL;
void add_student() {
cout<<"请选择要添加的人数:"<<endl;
int n;
cin>>n;
for(int i=1;i<=n;i++){
struct LinkList *p, *q;
p = (struct LinkList*)malloc(sizeof(struct LinkList));
printf("请输入学生学号:");
scanf("%d", &p->data.xuehao);
printf("请输入学生姓名:");
scanf("%s", p->data.name);
printf("请输入学生语文成绩:");
scanf("%lf", &p->data.c);
printf("请输入学生数学成绩:");
scanf("%lf", &p->data.m);
printf("请输入学生英语成绩:");
scanf("%lf", &p->data.e);
p->data.ans=p->data.c + p->data.m + p->data.e;
p->next = NULL;
if (head == NULL) {
head = p;
} else {
q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
printf("添加成功!\n");
}
}
void delete_student() {
int xuehao;
struct LinkList *p, *q;
printf("请输入要删除的学生学号:");
scanf("%d", &xuehao);
p = head;
while (p != NULL && p->data.xuehao != xuehao) {
q = p;
p = p->next;
}
if (p == NULL) {
printf("未找到该学生!\n");
} else {
if (p == head) {
head = p->next;
} else {
q->next = p->next;
}
free(p);
printf("删除成功!\n");
}
}
void modify_student() {
int xuehao;
struct LinkList *p;
printf("请输入要修改的学生学号:");
scanf("%d", &xuehao);
p = head;
while (p != NULL && p->data.xuehao != xuehao) {
p = p->next;
}
if (p == NULL) {
printf("未找到该学生!\n");
} else {
printf("请输入学生姓名:");
scanf("%s", p->data.name);
printf("请输入学生语文成绩:");
scanf("%lf", &p->data.c);
printf("请输入学生数学成绩:");
scanf("%lf", &p->data.m);
printf("请输入学生英语成绩:");
scanf("%lf", &p->data.e);
p->data.ans = (p->data.c + p->data.m + p->data.e) / 3.0;
printf("修改成功!\n");
}
}
void query_student() {
cout<<"请选择查找方式:"<<endl;
cout<<"1.按学号查找"<<endl;
cout<<"2.按成绩查找"<<endl;
int a;
cin>>a;
if(a==1){
bool flag =false;
LinkList *p;
p=head;
cout<<"请输入要查找的学号:"<<endl;
int f;
cin>>f;
while(p!=NULL){
if(p->data.xuehao==f){
flag=true;
break;
}
else{
p=p->next;
}
}
if(flag){
cout<<p->data.xuehao<<" "<<p->data.name<<" "<<p->data.ans<<endl;
}
else{
cout<<"查无此人"<<endl;
}
}
else if(a==2){
cout<<"请输入需要按哪科成绩查找:"<<endl;
cout<<"1.语文"<<endl;
cout<<"2.数学"<<endl;
cout<<"3.英语"<<endl;
cout<<"4.总分"<<endl;
int x;
cin>>x;
if(x==1){
cout<<"请输入对应的成绩:"<<endl;
int y;
cin>>y;
LinkList *e;
e=head;
bool flag=false;
while(e!=NULL){
if(e->data.c==y){
flag=true;
cout<<e->data.xuehao<<" "<<e->data.name<<endl;
e=e->next;
}
else{
e=e->next;
}
}
if(!flag){
cout<<"查无此人"<<endl;
}
}
else if(x==2){
cout<<"请输入对应的成绩:"<<endl;
int y;
cin>>y;
LinkList *e;
e=head;
bool flag=false;
while(e!=NULL){
if(e->data.m==y){
flag=true;
cout<<e->data.xuehao<<" "<<e->data.name<<endl;
e=e->next;
}
else{
e=e->next;
}
}
if(!flag){
cout<<"查无此人"<<endl;
}
}
else if(x==3){
cout<<"请输入对应的成绩:"<<endl;
int y;
cin>>y;
LinkList *e1;
e1=head;
bool flag=false;
while(e1!=NULL){
if(e1->data.e==y){
flag=true;
cout<<e1->data.xuehao<<" "<<e1->data.name<<endl;
e1=e1->next;
}
else{
e1=e1->next;
}
}
if(!flag){
cout<<"查无此人"<<endl;
}
}
else{
cout<<"请输入对应的成绩:"<<endl;
int y;
cin>>y;
LinkList *e;
e=head;
bool flag=false;
while(e!=NULL){
if(e->data.ans==y){
flag=true;
cout<<e->data.xuehao<<" "<<e->data.name<<endl;
e=e->next;
}
else{
e=e->next;
}
}
if(!flag){
cout<<"查无此人"<<endl;
}
}
}
else{
cout<<"输入选项错误"<<endl;
}
}
void statistics_student() {
int count = 0;
double sum = 0.0, max = 0.0, min = 100.0;
struct LinkList *p = head;
while (p != NULL) {
count++;
sum += p->data.ans;
if (p->data.ans > max) {
max = p->data.ans;
}
if (p->data.ans < min) {
min = p->data.ans;
}
p = p->next;
}
printf("学生总数:%d\n", count);
printf("平均成绩:%.2lf\n", sum / count);
printf("最高成绩:%.2lf\n", max);
printf("最低成绩:%.2lf\n", min);
}
void display(){
LinkList *p;
p=head;
if(p==NULL){
cout<<"成绩单为空"<<endl;
}
else{
printf("\n-----------------------学生成绩信息展示-----------------------\n");
printf(" 排名\t学号\t姓名\t 语文\t 数学\t 英语\t 总分\n");
int l=1;
while(p!=NULL){
printf("%d\t %d\t %s%12lf %6lf %6lf %6lf\n",l++,p->data.xuehao,p->data.name,p->data.c,p->data.m,p->data.e,p->data.ans);
p=p->next;
}
printf("\n-----------------------学生成绩完成展示-----------------------\n");
}
}
void sortList(){
printf("请输入排序的依据:\n");
printf("1.数学 2.语文 3.英语 4.总分\n");
int a;
scanf("%d",&a);
PNode s;
LinkList *p1,*p2;
p1=head;
switch(a){
case 1:
if(p1==NULL){
cout<<"成绩单为空"<<endl;
}
else{
while(p1->next!=NULL){
p2=p1->next;
while(p2!=NULL){
if(p1->data.m<p2->data.m){
s=p1->data;
p1->data=p2->data;
p2->data=s;
}
p2=p2->next;
}
p1=p1->next;
}
cout<<"排序完成"<<endl;
}
break;
case 2:
if(p1==NULL){
cout<<"成绩单为空"<<endl;
}
else{
while(p1->next!=NULL){
p2=p1->next;
while(p2!=NULL){
if(p1->data.c<p2->data.c){
s=p1->data;
p1->data=p2->data;
p2->data=s;
}
p2=p2->next;
}
p1=p1->next;
}
cout<<"排序完成"<<endl;
}
break;
case 3:
if(p1==NULL){
cout<<"成绩单为空"<<endl;
}
else{
while(p1->next!=NULL){
p2=p1->next;
while(p2!=NULL){
if(p1->data.e<p2->data.e){
s=p1->data;
p1->data=p2->data;
p2->data=s;
}
p2=p2->next;
}
p1=p1->next;
}
cout<<"排序完成"<<endl;
}
break;
case 4:
if(p1==NULL){
cout<<"成绩单为空"<<endl;
}
else{
while(p1->next!=NULL){
p2=p1->next;
while(p2!=NULL){
if(p1->data.ans<p2->data.ans){
s=p1->data;
p1->data=p2->data;
p2->data=s;
}
p2=p2->next;
}
p1=p1->next;
}
cout<<"排序完成"<<endl;
cout<<"是否选择删除最后一名学生"<<endl;
cout<<"1.删除"<<endl;
cout<<"2.保留"<<endl;
int x;
cin>>x;
if(x==1){
struct LinkList *p, *q;
p = head;
while (p->next!= NULL) {
q = p;
p = p->next;
}
q->next=NULL;
cout<<"删除成功"<<endl;
}
else{
cout<<"保留成功"<<endl;
}
}
break;
default:
printf("输入有误!\n");
}
}
int main() {
int choice;
while (1) {
printf("**********学生信息管理系统***********\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 统计学生信息\n");
printf("6. 显示学生信息\n");
printf("7. 给学生排序\n");
printf("8. 退出程序\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
modify_student();
break;
case 4:
query_student();
break;
case 5:
statistics_student();
break;
case 6:
display();
break;
case 7:
sortList();
display();
break;
case 8:
exit(0);
default:
printf("无效操作!\n");
break;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具