📄 cpp1.cpp
字号:
n++;
if(head==NULL)
{
head=c_new;
c_new->next=NULL;
return;
}
if(chanumber==head->number)
{
c_new->next=head;
head=c_new;
return;
}
while(c_end->next->next!=NULL&&c_end->next->number!=chanumber)
c_end=c_end->next;
c_new->next=c_end->next;
c_end->next=c_new;
return;
}
/*修改*/
void xiugai()
{
int xiunumber, p;
Student *xiu_end;
xiu_end=head;
if(head==NULL)
{
printf("学生记录为空!\n\n");
cout<<"请按回车继续!"<<endl;
getchar();
getchar();
return;
}
printf("请输入要修改的学生记录的学号:");
scanf("%d",&xiunumber);
while(xiu_end!=NULL)
{
if(xiu_end->number==xiunumber)
{
cout << "原记录如下:";
cout << "学号:" << xiu_end->number << endl;
cout << "姓名:" << xiu_end->name << endl;
cout << "平时成绩:" << xiu_end->pingshi << endl;
cout << "期中成绩:" << xiu_end->qizhong << endl;
cout << "期末成绩:" << xiu_end->qimo << endl;
cout << "总分:" << xiu_end->zongfen << endl;
cout <<endl<<endl<<endl;
printf("修改学号按1\n");
printf("修改姓名按2\n");
printf("修改平时成绩按3\n");
printf("修改期中成绩按4\n");
printf("修改期末成绩按5\n");
printf("退出按0\n");
printf("请选择需要修改的信息:");
scanf("%d",&p);
switch(p)
{
case 0:
break;
case 1:
cout << endl << "请输入新的学号:";
cin >> xiu_end->number;
break;
case 2:
cout << endl << "请输入新的姓名:";
cin >> xiu_end->name;
break;
case 3:
cout << endl <<"请输入新的平时成绩:";
cin >> xiu_end->pingshi;
break;
case 4:
cout << endl << "请输入新的期中成绩:";
cin >> xiu_end->qizhong;
break;
case 5:
cout << endl <<"请输入新的期末成绩:";
cin >> xiu_end->qimo;
break;
default:
cout << endl <<"Sorry,您输入错误,请重新输入";
// xiugai();
}
return;
}
xiu_end=xiu_end->next;
}
printf("\n要修改的记录不存在!\n");
}
/*计算总分*/
void jifen()
{
Student *j_end;
j_end=head;
if(j_end==NULL)
return;
while(j_end!=NULL)
{
j_end->zongfen=j_end->pingshi*0.2+j_end->qizhong*0.2+j_end->qimo*0.6;
j_end=j_end->next;
}
return;
}
/*排序*/
Student* paixu(Student *head)
{
Student *p,*min;
int i,j,k;
float fen;
char t[10];
if(head==NULL)
{
printf("\n没有学生资料,请先建立\n");
return (head);
}
p=min=head;
printf("按总评分排序如下!\n");
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
min=p;
p=p->next;
if(min->zongfen<p->zongfen)
{
fen=min->zongfen;
min->zongfen=p->zongfen;
p->zongfen=fen;
/*交换前后结点中的总分,使得总分大者移到后面的结点中*/
k=min->number;
min->number=p->number;
p->number=k;
/*交换前后结点中的学号,使之与总分相匹配*/
strcpy(t,min->name);
strcpy(min->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使之与总分相匹配*/
fen=min->pingshi;
min->pingshi=p->pingshi;
p->pingshi=fen;
/*交换前后结点中的平时成绩,使之与总分相匹配*/
fen=min->qizhong;
min->qizhong=p->qizhong;
p->qizhong=fen;
/*交换前后结点中的期中成绩,使之与总分相匹配*/
fen=min->qimo;
min->qimo=p->qimo;
p->qimo=fen;
/*交换前后结点中的期末成绩,使之与总分相匹配*/
}
}
min=head;
p=head;/*重新使max,p指向链表头*/
}
xianshi(head);
return (0);/*打印值排序后的链表内容*/
}
void tongji(Student *head)
{
int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
Student *p;
p=new Student;
p=head;
getchar();
while (1)
{
if(p->zongfen>=0&&p->zongfen<60)
sum1++;
if(p->zongfen>=60&&p->zongfen<=69)
sum2++;
if(p->zongfen>=70&&p->zongfen<=79)
sum3++;
if(p->zongfen>=80&&p->zongfen<=89)
sum4++;
if(p->zongfen>=90&&p->zongfen<=100)
sum5++;
p=p->next;
if (p==NULL)
break;
}
printf("\n总分在60以下的人有%d个\n",sum1);
printf("总分在60-69的人有%d个\n",sum2);
printf("总分在70-79的人有%d个\n",sum3);
printf("总分在80-89的人有%d个\n",sum4);
printf("总分在90-100的人有%d个\n",sum5);
Student *p_end;
FILE *fp;
p_end=head;
fp=fopen("total.txt","wt+");
fprintf(fp,"**************************************\n");
fprintf(fp,"60以下 60-69 70-79 80-89 90-100\n");
fprintf(fp,"**************************************\n");
fprintf(fp,"%d\t%d\t%d\t%d\t%d\n",sum1,sum2,sum3,sum4,sum5);
fclose(fp);
printf("统计结果已保存到total.txt文件中!\n");
return ;
}
void pjf(Student *head)
{
Student *p_end;
float j1=0,j2=0,j3=0,zong=0;
int k=0;
p_end=head;
if(p_end==NULL)
{
printf("无学生记录,请先建立!");
return;
}
printf("\n请输入各项加权!\n");
printf("请输入平时成绩所占的比例:");
scanf("%f",&j1);
printf("\n请输入期中成绩所占的比例:");
scanf("%f",&j2);
printf("\n请输入期末成绩所占的比例:");
scanf("%f",&j3);
while(1)
{
p_end->zongfen=p_end->pingshi*j1+p_end->qizhong*j2+p_end->qimo*j3;
zong=zong+p_end->zongfen;
k++;
p_end=p_end->next;
if(p_end==NULL||p_end->number<0)
break;
}
Student* x_end;
x_end=head;
printf("********************************************************************\n");
printf("*学号 姓名 平时成绩 期中成绩 期末成绩 总分 *\n");
printf("********************************************************************\n");
while(1)
{
printf("%d\t%s\t%f\t%f\t%f\t%f",x_end->number,x_end->name,x_end->pingshi,x_end->qizhong,x_end->qimo,x_end->zongfen);
printf("\r\n");
x_end=x_end->next;
if(x_end==NULL||x_end->number<0)
break;
}
zong=zong/k;
printf("\n全班平均分为:%f\n",zong);
return;
}
void main()
{
int q;
int k=0;
for (;;)
{
printf("----------------------------------\n");
printf("\t新建记录: 1\n");
printf("\t从文件调入记录: 2\n");
printf("\t显示数据: 3\n");
printf("\t删除记录: 4\n");
printf("\t查询记录: 5\n");
printf("\t插入记录: 6\n");
printf("\t修改记录: 7\n");
printf("\t计算平均分 8\n");
printf("\t统计学生成绩: 9\n");
printf("\t保存输入资料: 10\n");
printf("\t对成绩进行排序: 11\n");
printf("\t退出:0\n");
printf("----------------------------------\n");
printf("请输入你想进行的操作:");
scanf("%d", &q);
switch(q)
{
case 0:
exit(0);
break;
case 1:
// system("cls");
input();
jifen();
printf("\n\n\n");
break;
case 2:
head=loadfile(head);
printf("\n\n\n");
break;
case 3:
jifen();
xianshi(head);
printf("\n\n\n");
break;
case 4:
// system("cls");
delet();
printf("\n\n\n");
break;
case 5:
// system("cls");
select(head);
printf("\n\n\n");
break;
case 6:
charu();
jifen();
printf("\n\n\n");
break;
case 7:
xiugai();
printf("\n\n\n");
break;
case 8:
pjf(head);
printf("\n\n\n");
break;
case 9:
tongji(head);
printf("\n\n\n");
break;
case 10:
savefile();
printf("\n\n\n");
break;
case 11:
paixu(head);
printf("\n\n\n");
break;
default:
printf("\n您输入错误,请重新输入\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -