📄 c语言成绩记录查询系统.cpp
字号:
}
/*查询成绩*/
void search()
{
int i,k=0;
info *p; /* 移动指针*/
char number[10],number_[10],judge[20];
do
{
system("cls");
printf("请输入学生学号或姓名进行查找:");
gets(number);
p=read();/*将头指针赋给p*/
while(strcmp(number,ltoa(p->num,number_,10))&&strcmp(p->name,number)&&p->next!=NULL) /*当记录的姓名或学号不是要找的,或指针不为空时*/
p=p->next; /*移动指针,指向下一结点*/
if(p->next!=NULL)
{
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 学号 姓名 分数 \n");
printf(" %-6ld %-20s %-3d \n", p->num,p->name,p->score);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
else
{
for(i=0;i<strlen(number);i++)
{
if(number[i]<'0'||number[i]>'9')
{
k=1;
break;
}
}
if(k!=1)
printf("\n对不起,没有学号为%s学生成绩记录!\n",number);
else
printf("\n对不起,没有姓名为%s学生成绩记录!\n",number);
}
printf("\n是否要返回目录?\nY返回,任意键+回车继续."); /*提示是否要回目录*/
gets(judge);
if((judge[0]=='y'&&judge[1]=='\0')||(judge[0]=='Y'&&judge[1]=='\0')) break;
else continue;
}while(1);
}
/*删除记录*/
void delete_()
{
int i=0,k=0;
info *head,*p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/
char judge[20],number[20],number_[10];
do
{
system("cls");
p1=head=read(); /*给p1和p2赋初值头指针*/
if(p1==NULL)
{
printf("\n\n\t没有任何学生成绩记录...");
printf("\n是否要返回目录?\nY返回,任意键+回车继续."); /*提示是否要回目录*/
gets(judge);
if((judge[0]=='y'&&judge[1]=='\0')||(judge[0]=='Y'&&judge[1]=='\0')) break;
else continue;
}
else
{
printf("请输入要删除学生的的学号或姓名: ");
gets(number);
while(strcmp(number,ltoa(p1->num,number_,10))&&strcmp(number,p1->name)&&p1->next!=NULL) /*当记录的学号或姓名不是要找的,或指针不为空时*/
{
p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/
p1=p1->next; /*将p1指针指向下一条记录*/
}
if(strcmp(number,ltoa(p1->num,number_,10))==0||strcmp(number,p1->name)==0) /*学号*/
{
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 学号 姓名 分数 \n");
printf(" %-6ld %-20s %-3d \n", p1->num,p1->name,p1->score);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(;;)
{
printf("\n是否要删除?\nY删除,任意键+回车返回."); /*提示是否要删除,输入Y删除,N则退出*/
gets(judge);
if((judge[0]=='y'&&judge[1]=='\0')||(judge[0]=='Y'&&judge[1]=='\0'))/*如果不删除,则跳出本循环*/
{
if(p1==head) /*若p1==head,说明被删结点是首结点*/
head=p1->next; /*把第二个结点地址赋予head*/
else
p2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/
for(i=0;i<strlen(number);i++)
{
if(number[i]<'0'||number[i]>'9')
{
k=1;
break;
}
}
if(k!=1)
printf("\n学号为%s学生已被删除!\n",number);
else
printf("\n姓名为%s学生已被删除!\n",number);
break;
}
else
break;
}
save_(head);
}
else
printf("\n学号或姓名为%s的学生不存在",number); /*找不到该结点*/
printf("\n是否要返目录?\nY返回,任意键+回车继续."); /*提示是否要回目录*/
gets(judge);
if((judge[0]=='y'&&judge[1]=='\0')||(judge[0]=='Y'&&judge[1]=='\0')) break;
else continue;
}
}while(1);
}
/*修改记录*/
void amend()
{
int i=0,k=0,w=0,score_;
info *head,*p; /*p1为查找到要删除的结点指针,p2为其前驱指针*/
char judge[20],number[20],number_[10],score[20];
do
{
system("cls");
p=head=read(); /*给p1和p2赋初值头指针*/
if(p==NULL)
{
printf("\n\n\t对不起,目前没有任何学生成绩记录...");
printf("\n是否要返回目录?\nY返回,任意键+回车继续."); /*提示是否要回目录*/
gets(judge);
if((judge[0]=='y'&&judge[1]=='\0')||(judge[0]=='Y'&&judge[1]=='\0')) break;
else continue;
}
else
{
printf("请输入要修改成绩的学生的学号或姓名: ");
gets(number);
while(strcmp(number,ltoa(p->num,number_,10))&&strcmp(number,p->name)&&p->next!=NULL) /*当记录的学号或姓名不是要找的,或指针不为空时*/
p=p->next; /*将p1指针指向下一条记录*/
if(strcmp(number,ltoa(p->num,number_,10))==0||strcmp(number,p->name)==0) /*学号或姓名找到了*/
{
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 学号 姓名 分数 \n");
printf(" %-6ld %-20s %-3d \n", p->num,p->name,p->score);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(;;)
{
for(;;)
{
do
{
printf("输入成绩:");/*提示开始输入成绩*/
gets(score);
w=1;
for(i=0;i<strlen(score);i++)
{
if(score[i]<'0'||score[i]>'9')
{
printf("成绩输入错误,请重新输入:");
w=0;
break;
}
}
}while(w==0);
score_=atoi(score);
if(score_>=0&&score_<=100)
break;
printf("成绩输入错误,请重新输入:");
}
printf("\n是否要修改,输入Y修改,任意键+回车返回."); /*提示是否要删除,输入Y删除,N则退出*/
gets(judge);
if((judge[0]=='y'&&judge[1]=='\0')||(judge[0]=='Y'&&judge[1]=='\0'))/*如果不删除,则跳出本循环*/
{
p->score=score_;
for(i=0;i<strlen(number);i++)
{
if(number[i]<'0'||number[i]>'9')
{
k=1;
break;
}
}
if(k!=1)
printf("\n学号为%s学生已修改成功!\n",number);
else
printf("\n姓名为%s学生已修改成功!\n",number);
break;
}
else
break;
}
save_(head);
}
else
printf("\n对不起,学号或姓名为%s的学生不存在",number); /*找不到该结点*/
printf("\n是否要返回菜单,输入Y返回,任意键+回车继续."); /*提示是否要回目录*/
gets(judge);
if((judge[0]=='y'&&judge[1]=='\0')||(judge[0]=='Y'&&judge[1]=='\0')) break;
else continue;
}
}while(1);
}
/*排序*/
info *order(info *head)
{
info *h,*n1,*n2,*temp,*n3;
h=head;
n1=NULL;
while(h!=NULL)
{
temp=(info *)malloc(LEN);
temp->score=h->score;
temp->num=h->num;
strcpy(temp->name,h->name);
temp->next=NULL;
if(n1==NULL)
{
n1=temp;
h=h->next;
continue;
}
if(n1->score<=temp->score)
{
temp->next=n1;
n1=temp;
h=h->next;
continue;
}
n2=n1;
while(n2!=NULL)
{
if(n2->next==NULL)
{
n2->next=temp;
h=h->next;
break;
}
if(n2->score>temp->score&&n2->next->score<temp->score)
{
temp->next=n2->next;
n2->next=temp;
n2=temp;
h=h->next;
break;
}
n2=n2->next;
}
}
return n1;
}
/*分类显示输出学生的成绩菜单*/
void sort()
{
char action[2];
while(1)
{
do
{
system("cls");
printf("\n\n\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~显示指定分数段学生成绩~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
"\n\t\t 1、显示90分以上学生记录"
"\n\t\t 2、显示80-90上学生记录"
"\n\t\t 3、显示70-80上学生记录"
"\n\t\t 4、显示60-70上学生记录"
"\n\t\t 5、显示60分以下上学生记录"
"\n\t\t 0、返回");
printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\n\t\t\t请选择(0~5):");
gets(action);
}while(action[0]<'0'||action[0]>'5'||action[1]!='\0'); /*如果选择项不在0-5之间则重输*/
if(action[0]=='0'&&action[1]=='\0')/*如果选择0则退出*/
break;
if(action[0]=='1'&&action[1]=='\0')
{ print_(atoi(action));continue; }
if(action[0]=='2'&&action[1]=='\0')
{ print_(atoi(action));continue; }
if(action[0]=='3'&&action[1]=='\0')
{ print_(atoi(action));continue; }
if(action[0]=='4'&&action[1]=='\0')
{ print_(atoi(action));continue; }
if(action[0]=='5'&&action[1]=='\0')
{ print_(atoi(action));continue; }
}
}
/*分类显示输出学生的成绩*/
void print_(int sort)
{
int i=0,score,score_; /* 统计记录条数*/
info *head,*p; /*移动指针*/
head=order(read());
system("cls");
switch(sort)
{
case 1:score=90;score_=100;break;
case 2:score=80;score_=89;break;
case 3:score=70;score_=79;break;
case 4:score=60;score_=69;break;
case 5:score=0;score_=59;
}
if(head==NULL)
printf("\n\n\t打不开文件或文件为空文件...");
else
{
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 学号 姓名 分数 \n");
p=head;
do
{
if(p->score>=score&&p->score<=score_)
{
i++;
printf(" %-3d %-6d %-20s %-3d \n",i, p->num,p->name,p->score);
}
p=p->next;
}while(p!=NULL);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
printf("\n\n\t按回车键结束...");
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -