📄 信管070219号王金龙.c
字号:
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct studentnode
{int studentnumber;/*学号*/
char name[10];/*姓名*/
float chinese;/*语文成绩*/
float English;/*英语成绩*/
float math;/*数学成绩 */
float average;/*平均成绩*/
float sum;/*总成绩*/
struct studentnode *next;
};
typedef struct studentnode student;
typedef struct studentnode *StudentList;
int function_choose()/*功能选择函数*/
{
int i,k;
for(i=0;i<40;i++)
printf("—");
printf("\t\t\t 班级考试成绩管理系统\n\n\n");
printf(" \t\t\t 班级:信管0702 \n");
for(i=0;i<40;i++)
printf("—");
printf(" 1.输入学生的信息\t\t\t2.对成绩进行排序\t\t\t \n");
printf(" 3.查询学生的成绩\t\t\t4.删除学生的资料\t\t\t \n");
printf(" 5.追加学生信息\t\t\t\t6.显示学生的成绩\t\t\t \n");
printf(" 7.统计学生的成绩\t\t\t8.保存输入的资料 \t\t\t \n");
printf(" 9.各分数段学生数据\t\t\t10.从文件中调入资料 \t\t\t\n");
printf(" 11.显示班级人数\t\t\t12.修改学生数据 \t\t\t\n");
printf(" \t\t\t0.退出系统 \t\t\t \n");
for(i=0;i<40;i++)
printf("—");
printf("请选择功能:");
scanf("%d",&k);
return (k);
}
int amount(StudentList h)/*统计输入学生人数*/
{ int count=0;
while(h!=NULL)
{count++;
h=h->next;
}
printf("班级人数:%d\n\n\n",count);
return count;
}
StudentList data_creat(StudentList h)/*创建链表,采用头插法输入学生数据*/
{
student *s;
int num;
float chi,Eng,mat,ave,su;
char na[10];
printf("请输入学号:");
scanf("%d",&num);
if(num==0)
printf("输入结束\n");
else
{while(num<0)
{
printf("要求学号是正数,请重新输入:");
scanf("%d",&num);
}
printf("请输入学生姓名:");
scanf("%s",na);
printf("请输入语文成绩(0~100):");
scanf("%f",&chi);
while(chi<0||chi>100)
{
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&chi);
}
printf("请输入英语成绩(0~100):");
scanf("%f",&Eng);
while(Eng<0||Eng>100)
{
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&Eng);
}
printf("请输入数学成绩(0~100):");
scanf("%f",&mat);
while(mat<0||mat>100)
{
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&mat);
}
su=chi+Eng+mat;/*计算个人总分*/
ave=su/3;/*计算个人平均分*/
}
while(num!=0)
{
s=(student *)malloc(sizeof(struct studentnode)) ;
s->studentnumber=num;
strcpy(s->name,na);
s->chinese=chi;
s->English=Eng;
s->math=mat;
s->average =ave;
s->sum=su;
s->next=h;
h=s;
printf("请输入学号:");
scanf("%d",&num);
while(num<0)
{ printf("要求学号是正数,请重新输入:");
scanf("%d",&num);
}
if(num==0)/* 输入学号是0时跳出,返回功能菜单*/
printf("输入结束\n");
else
{ printf("请输入学生姓名:");
scanf("%s",na);
printf("请输入语文成绩(0~100):");
scanf("%f",&chi);
while(chi<0||chi>100)
{
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&chi);
}
printf("请输入英语成绩(0~100):");
scanf("%f",&Eng);
while(Eng<0||Eng>100)
{
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&Eng);
}
printf("请输入数学成绩(0~100):");
scanf("%f",&mat);
while(mat<0||mat>100)
{
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&mat);
}
su=chi+Eng+mat;
ave=su/3;
}
}
printf("\n\n\n");
amount(h);/*统计下输入的学生个人*/
return(h);
}
query(StudentList head)/*功能:查询指定学生成绩*/
{
int a,number;char na[10]; student *p1;
printf("按学号查询请按1:\n");
printf("按姓名查询请按2:\n");
scanf("%d",&a);
if(a==1)
{printf("输入要查询的学生的学号:(输入0时返回功能菜单)");
scanf("%d",&number);
while(number!=0)
{
if(head==NULL)
printf("\n表中没有数据!\n");
printf("\n\n\n学号\t姓名\t语文\t英语\t数学\t\n");
p1=head;
while(number!=p1->studentnumber&&p1->next!=NULL)
{p1=p1->next;}
if(number==p1->studentnumber)
printf("%d\t%s\t%.1f\t %.1f\t %.1f\t\n\n\n",p1->studentnumber,p1->name,p1->chinese,p1->English,p1->math);
else
printf("%d不存在此学生!\n",number);
printf("输入要查询的学生的学号:(输入0时返回功能菜单)");
scanf("%d",&number);
}
printf("已经退出了!\n");
printf("\n\n\n");
}
if(a==2)
{printf("输入要查询的学生的姓名:(输入0时返回功能菜单)");
scanf("%s",na);
while(strcmp(na,"0")!=0)
{
if(head==NULL)
printf("\n当前未输入学生信息!\n");
else
{
p1=head;printf("\n\n\n学号\t姓名\t 语文\t 英语\t 数学\t\n");
while(p1!=NULL)
{
if(strcmp(na,p1->name)==0)
printf("%d\t%s\t %.1f\t %.1f\t %.1f\t\n\n",p1->studentnumber,p1->name,p1->chinese,p1->English,p1->math);
p1=p1->next;
}
}
printf("输入要查询的学生的学号:(输入0时返回功能菜单)");
scanf("%s",na);
}
printf("已经退出了!\n");
printf("\n\n\n");
}
}
StudentList add_data(StudentList h)/*头插法增添数据*/
{ student *s;
int num;
float chi,Eng,mat,ave,su;
char na[10];
printf("请输入学号(大于零的整数,输0返回功能菜单):");
scanf("%d",&num);
while(num<0)
{ getchar();
printf("请重新输入学号(大于零的整数):");
scanf("%d",&num);
}
if(num==0)/*输入0时跳出*/
printf("已经退出");
else
{printf("请输入学生姓名:");
scanf("%s",na);
printf("请输入语文成绩(0~100):");
scanf("%f",&chi);
while(chi<0||chi>100)
{ getchar();
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&chi);
}
printf("请输入英语成绩(0~100):");
scanf("%f",&Eng);
while(Eng<0||Eng>100)
{getchar();
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&Eng);
}
printf("请输入数学成绩(0~100):");
scanf("%f",&mat);
while(mat<0||mat>100)
{getchar();
printf("输入有误,请重新输入有效的成绩");
scanf("%f",&mat);
}
su=chi+Eng+mat;
ave=su/3;
while(num!=0)
{ s=(student *)malloc(sizeof(struct studentnode)) ;
s->studentnumber=num;
strcpy(s->name,na);
s->chinese=chi;
s->English=Eng;
s->math=mat;
s->average =ave;
s->sum=su;
s->next=h;
h=s;
printf("请输入学号(大于零的整数,输0返回功能菜单):");
scanf("%d",&num);
while(num<0)
{ printf("请重新输入学号(大于零的整数):");
scanf("%d",&num);
}
if(num==0)
printf("输入结束");
else
{ printf("请输入学生姓名:");
scanf("%s",na);
printf("请输入语文成绩(0~100):");
scanf("%f",&chi);
while(chi<0||chi>100)
{getchar();
printf("输入有误,请重新输入有效的成绩:");
scanf("%f",&chi);
}
printf("请输入英语成绩(0~100):");
scanf("%f",&Eng);
while(Eng<0||Eng>100)
{getchar();
printf("输入有误,请重新输入有效的成绩:");
scanf("%f",&Eng);
}
printf("请输入数学成绩(0~100):");
scanf("%f",&mat);
while(mat<0||mat>100)
{getchar();
printf("输入有误,请重新输入有效的成绩:");
scanf("%f",&mat);
}
su=chi+Eng+mat;
ave=su/3;}
}
}
printf("\n\n\n");
amount(h);/*显示修改之后的学生个数*/
return(h);
}
StudentList delet_data(StudentList h)/*删除数据*/
{
student *p1,*p2;char na[10];
int i,number;
if(h==NULL)
{
printf("\n表中没有数据!!\n");
return(h);
}
else
{printf("按学号删除请按1:");
printf("按姓名删除请按2:");
printf("返回功能菜单按0:");
scanf("%d",&i);
while(i!=0)
{if(i==1)
{printf("输入要删除的学生的学号:");
scanf("%d",&number);
getchar();
p1=h;
while(p1->studentnumber!=number&&p1!=NULL)
{
p2=p1;p1=p1->next;
}
if(number==p1->studentnumber)
{
p2->next=p1->next;
free(p1);
printf("删除成功!\n\n\n");
}
else
printf("%d不存在此学生!\n\n\n",number);
amount(h);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -