📄 cpp1.cpp
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>
struct Student
{
long number;
char name[20];
float pingshi, qizhong, qimo, zongfen;
Student* next;
};
Student* head;
int n;
/*输入新的纪录*/
void input()
{
Student *in, *in_end, *i;
char ch='y';
in=in_end=i=new Student;
head=in;
n=0;
while(ch=='y'||ch=='Y')
{
if(head->next==NULL)
head->next=in;
else
in_end->next=in;
in_end=in;
in=new Student;
n2: printf("\n请输入以下信息,注意学号应为大于0的整数。\n\n");
printf( "学号:" );
scanf("%d",&in_end->number);
n1: if(in_end->number<=0) // 学号必须大于0
{
printf( "输入错误,请重新输入学号:");
scanf("%d",&in_end->number);
goto n1;
}
i=head;
if(n>0)
{
for(int j=0;j<n;j++)
{
if(in_end->number!=i->number)
i=i->next;
else
{
printf("学号重复,请重新输入!\n");
goto n2;
}
}
}
printf("姓名:");
scanf("%s",&in_end->name);
printf( "平时成绩(0-100):") ;
scanf("%f",&in_end->pingshi);
while(in_end->pingshi<0||in_end->pingshi>100)
{
getchar();
printf("输入错误,请重新输入!\n");
printf("平时成绩(0-100):");
scanf("%f",&in_end->pingshi);
}
printf( "期中成绩(0-100):") ;
scanf("%f",&in_end->qizhong);
while(in_end->qizhong<0||in_end->qizhong>100)
{
getchar();
printf("输入错误,请重新输入!\n");
printf("期中成绩(0-100):");
scanf("%f",&in_end->qizhong);
}
printf( "期末成绩(0-100):") ;
scanf("%f",&in_end->qimo);
while(in_end->qimo<0||in_end->qimo>100)
{
getchar();
printf("输入错误,请重新输入!\n");
printf("期末成绩(0-100):");
scanf("%f",&in_end->qimo);
}
getchar();
in_end->next=in;
in_end=in_end->next;
in_end->next=NULL;
printf("是否还要输入:(y/n)");
scanf("%c", &ch);
n++;
i=head;
}
printf("输入学生记录%d个!\n",n);
return;
}
/*显示所有记录*/
void xianshi(Student* x_head)
{
Student* x_end;
x_end=x_head;
printf("********************************************************************\n");
printf("*学号 姓名 平时成绩 期中成绩 期末成绩 总分 *\n");
printf("********************************************************************\n");
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");
while(1)
{
if(x_end->next==NULL)
break;
else if(x_end->next->number<0)
break;
x_end=x_end->next;
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");
}
cout<<"请按回车继续!"<<endl;
getchar();
getchar();
return;
}
/*从文件读入学生记录*/
Student *loadfile(Student *head)
{
Student* l_end,*l,*pf,*pb;
FILE *fp;
int m=0;
n=0;
fp=fopen("rgrade.txt","r+");
printf("**********************************************************************\n");
printf("*学号 姓名 平时成绩 期中成绩 期末成绩 总分 *\n");
printf("**********************************************************************\n");
while(!feof(fp))
{
m++;
l_end=new Student;
fscanf(fp,"%d%s%f%f%f%f",&l_end->number,l_end->name,&l_end->pingshi,&l_end->qizhong,&l_end->qimo,&l_end->zongfen);
if(l_end->number<0)
return(head);
printf("%d\t%s\t%f\t%f\t%f\t%f\n",l_end->number,l_end->name,l_end->pingshi,l_end->qizhong,l_end->qimo,l_end->zongfen);
n=n+1;
if(n==1)
{
head=l_end;
l=l_end;
}
else
l->next=l_end;
l=l_end;
}
l->next=NULL;
fclose(fp);
n=m;
return (head);
}
/*保存文件*/
void savefile()
{
Student *s_end;
FILE *fp;
s_end=head;
fp=fopen("wgrade.txt","wt+");
fprintf(fp,"**********************************************************************\n");
fprintf(fp,"*学号 姓名 平时成绩 期中成绩 期末成绩 总分 *\n");
fprintf(fp,"**********************************************************************\n");
while(1)
{
fprintf(fp,"%d\t%s\t%f\t%f\t%f\t%f\n",s_end->number,s_end->name,s_end->pingshi,s_end->qizhong,s_end->qimo,s_end->zongfen);
s_end=s_end->next;
if (s_end==NULL)
break;
else if (s_end->number<0)
break;
}
fclose(fp);
printf("记录已保存到wgrade.txt文件中!\n");
return;
}
/*删除*/
void delet()
{
Student *d_end, *d;
int delnumber;
d_end=head->next;
printf( "请输您想删除的学生记录的学号:");
scanf("%d",&delnumber);
if(head->number==delnumber)
{
d=head;
head=head->next;
delete d;
// head=head->next;
cout << "学号为"<< delnumber <<"的记录删除成功!"<<endl;
return;
}
d=head;
while(1)
{
if(d_end->number==delnumber)
if(d_end->next==NULL)
{
d->next=NULL;
delete d_end;
cout << "学号为"<< delnumber <<"的记录删除成功!"<<endl;
return;
}
else
{
d->next=d_end->next;
delete d_end;
cout << "学号为"<< delnumber <<"的记录删除成功!"<<endl;
return;
}
d=d_end;
d_end=d_end->next;
if(d_end==NULL)
break;
}
cout << "学号为" << delnumber <<"的记录不存在!"<<endl;
d1: cout<<"请按回车继续!"<<endl;
getchar();
getchar();
}
/*查询*/
void select(Student *s_head)
{
Student *s_end;
s_end=s_head;
int selnumber;
printf( "请输您想查找的学生记录的学号:");
scanf("%d",&selnumber);
while(1)
{
if(s_end->number==selnumber)
{
cout << endl << "您查找的学生记录如下:" <<endl;
cout << "学号:" << s_end->number << endl;
cout << "姓名:" << s_end->name << endl;
cout << "平时成绩:" << s_end->pingshi << endl;
cout << "期中成绩:" << s_end->qizhong << endl;
cout << "期末成绩:" << s_end->qimo << endl;
cout << "总分:" << s_end->zongfen << endl;
break;
}
else
s_end=s_end->next;
if (s_end==NULL)
{
printf("您要查询的纪录不存在!\n");
break;
}
}
}
/*插入*/
void charu()
{
Student * c_end,*c_new,*c;
c_end=head;
int chanumber,j;
c_new=new Student;
printf("请输入插入位置(学号):");
scanf("%d",&chanumber);
c2:
printf("\n请输入以下信息,注意学号应为大于0的整数。\n\n");
printf( "学号:" );
scanf("%d",&c_new->number);
c1: if(c_new->number<=0) // 学号必须大于0
{
printf( "输入错误,请重新输入学号:");
scanf("%d",&c_new->number);
goto c1;
}
else
{
c=head;
if(n>0)
{
for(j=0;j<1;j++)
{
if(c_new->number!=c->number)
c=c->next;
else
{
printf("学号重复,请重新输入!\n");
goto c2;
}
}
}
}
printf("姓名:");
scanf("%s",&c_new->name);
printf( "平时成绩(0-100):") ;
scanf("%f",&c_new->pingshi);
while(c_new->pingshi<0||c_new->pingshi>100)
{
getchar();
printf("输入错误,请重新输入!\n");
printf("平时成绩(0-100):");
scanf("%f",&c_new->pingshi);
}
printf( "期中成绩(0-100):") ;
scanf("%f",&c_new->qizhong);
while(c_new->qizhong<0||c_new->qizhong>100)
{
getchar();
printf("输入错误,请重新输入!\n");
printf("期中成绩(0-100):");
scanf("%f",&c_new->qizhong);
}
printf( "期末成绩(0-100):") ;
scanf("%f",&c_new->qimo);
while(c_new->qimo<0||c_new->qimo>100)
{
getchar();
printf("输入错误,请重新输入!\n");
printf("期末成绩(0-100):");
scanf("%f",&c_new->qimo);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -