C语言实现了学生成绩管理系统,可以对学生成绩进行录入、查询、修改、删除和排序。
#include
#include
#include
int n; //定义全局变量记录学生数量
struct stu{ //结构体定义
int num;
char name[20];
int shuxue;
int cchengxu;
int zongfen;
struct stu *next;
} ;
struct stu*creat(void); //创建一个链表并返回首地址
struct stu*g1(void); //实现第一个功能(键盘录入学生信息)
struct stu *g2(struct stu *head,struct stu *stud) ; //实现第二个功能(插入数据)
struct stu *g3(struct stu *head , int num) ; //实现第三个功能(删除数据)
void g4_1(struct stu * head ) ;/*数学成绩排序*/ //实现第四个功能(排序)
void g4_2(struct stu * head ) ;/*程序设计成绩排序*/
void g4_3(struct stu * head ) ;/*总分排序*/
struct stu *g5_1(struct stu *head , int num) ;/*学号查询*/ //实现第五个功能(查询)
void g5_2(struct stu *head , char num[20]) ; /*姓名查询*/
struct stu *g5_3(struct stu *head , int num) ;/*数学成绩查询*/
struct stu *g5_4(struct stu *head , int num) ;/*程序设计成绩 查询*/
struct stu *g5_5(struct stu *head , int num) ; /*总分查询*/
void g6(struct stu * head ) ; //实现第六个功能(展示数据)
int main()
{
int k,z;
struct stu *head;
while(1){
printf("┏------------------------------------------------------------------- ┐\n"); //友好界面显示
printf("| 欢迎使用学生成绩管理系统 |\n");
printf("| |\n");
printf("| ┏----------------------------------------------------------- ┐ |\n");
printf("| |请输入您要选择的功能: | |\n");
printf("| | 1.新建数据 | |\n");
printf("| | 2.添加数据 | |\n");
printf("| | 3.删除数据 | |\n");
printf("| | 4.排序 | |\n");
printf("| | 5.查询 | |\n");
printf("| | 6.展示全部数据 | |\n");
printf("| | 0.退出系统 | |\n");
printf("| └----------------------------------------------------------- ┘ |\n");
printf("└------------------------------------------------------------------- ┘\n");
printf("\n·请输入您要选择的功能:");
scanf("%d",&k);
while(k<0||k>6){ //输入报错
printf("\n·您输入的信息有误,请重新输入:");
fflush(stdin);
scanf("%d",&k);}
switch(k){
case 1:{head=g1();break;}
case 2:{struct stu new;
printf("·请输入学生的学号:");
scanf("%d",&(new.num));
printf("·请输入学生的姓名: ");
scanf("%s",&(new.name));
printf("·请输入学生的数学成绩: ");
scanf("%d",&(new.shuxue));
printf("·请输入学生的C程序设计成绩:");
scanf("%d",&(new.cchengxu)) ;
head=g2(head,&new);
break;}
case 3:{int z;printf("请输入要删除的学号:\n");
scanf("%d",&z);head=g3(head,z);
break;}
case 4:{int c;
printf("1.数学成绩排序\n2.程序设计成绩排序\n3.总分排序\n4.返回主菜单");
printf("\n\n请选择功能:\n");
scanf("%d",&c);
if(c==1){printf(" 学号 姓名 数学 程序设计 总分\n");g4_1(head);break;}
else if(c==2){printf(" 学号 姓名 数学 程序设计 总分\n");g4_2(head);break;}
else if(c==3){printf(" 学号 姓名 数学 程序设计 总分\n");g4_3(head);break;}
else if(c==4){break;}
else {printf("输入有误!");break;}
}
case 5:{int c;
printf("1.学号查询\n2.姓名查询\n3.数学成绩查询\n4.程序设计成绩查询\n5.总分查询\n6.返回主菜单");
printf("\n\n请选择功能:\n");
scanf("%d",&c);
if(c==1){int z;printf("请输入学号:");scanf("%d",&z);g5_1(head,z);break;}
else if(c==2){char z[20];printf("请输入姓名:");scanf("%s",z);g5_2(head,z);break;}
else if(c==3){int z;printf("请输入数学成绩:");scanf("%d",&z);g5_3(head,z);break;}
else if(c==4){int z;printf("请输入程序设计成绩:");scanf("%d",&z);g5_4(head,z);break;}
else if(c==5){int z;printf("请输入总分:");scanf("%d",&z);g5_5(head,z);break;}
else if(c==6){break;}
else {printf("输入有误!");break;}
}
case 6:{g6(head);break;}
case 0:{printf("\n\n感谢使用学生管理系统 ^_^ Bye\n\n");exit(0);}
}
printf("您是否要退出系统(0.退出 1.不退出):");
scanf("%d",&z);
while(k<0||k>1){ //输入报错
printf("\n·您输入的信息有误,请重新输入:");
fflush(stdin);
scanf("%d",&k);}
switch(z){
case 0:{printf("\n\n感谢使用学生管理系统 ^_^ Bye\n\n");exit(0);break; }
case 1:{break;}}
}
return 0;}
struct stu*creat(void){ //创建链表
int k;
struct stu *head,*end,*p;
end=NULL;
for(k=1;k<=n;k++){
p=(struct stu*)malloc(sizeof(struct stu));
p->next=NULL;
if(end==NULL){
head=p;
end=p;
}
else{
end->next=p;
end=p;
}
end->next=NULL;
}
return head;
}
struct stu*g1(void){ //功能一 (新建数据)
int i,j,k;
struct stu *top,*q;
i=1;
printf("\n\n·请输入您想要输入的学生个数:");
scanf("%d",&n);
top=creat();
for(q=top;q!=NULL;q=q->next,i++){
printf("·请输入学生的学号:");
scanf("%d",&(q->num));
printf("·请输入学生的姓名: ");
scanf("%s",&(q->name));
printf("·请输入学生的数学成绩: ");
scanf("%d",&(q->shuxue));
printf("·请输入学生的C程序设计成绩:");
scanf("%d",&(q->cchengxu)) ;
}
printf("·输入成功\n\n");
return top;
}
struct stu *g2(struct stu *head,struct stu *stud) //功能二(插入数据)
{struct stu *p0,*p1,*p2;
p1=head; p0=stud;
if(head==NULL) { head=p0; p0->next=NULL; }
else
{ while(( p0->num > p1->num )&&( p1->next!=NULL ))
{ p2=p1; p1=p1->next; }
if(( p0->num > p1->num )&&( p1->next==NULL ))
{p1->next=p0; p0->next=NULL;}
if( p0->num <= p1->num )
{ if(head==p1) head=p0; else p2->next=p0;
p0->next=p1;
}
else { p1->next=p0; p0->next=NULL; }
}
n=n+1;
printf("添加成功!\n");
return(head);
}
struct stu *g3(struct stu *head ,int num) //功能三(删除数据)
{
struct stu *p1,*p2;
p1 = head;
while(num!=p1->num && p1->next!=NULL)
{ p2=p1; p1 = p1->next;} // 定位
if(num==p1->num)
{ if(p1==head) head=p1->next;
else p2->next = p1->next; // 分离
free(p1); n=n-1; // 释放
printf("删除成功!\n");
}
else printf(" 未找到该数据!\n");
return(head);
}
void g6(struct stu * head )
{ struct stu *p;
p = head; /* p指向第一个数据结点 */
while( p!=NULL )
{printf(" 学号 姓名 数学 程序设计 总分\n");
printf("%10d%10s%10d%20d%20d\n",p->num,p->name,p->shuxue,p->cchengxu,(p->shuxue+p->cchengxu));
p = p->next ;
} /* p 指向下一个数据结点 */
}
struct stu *g5_1(struct stu *head , int num) //按学号查询
{ struct stu *p;
p = head;
while((num!=p->num)&&(p->next!=NULL)){p=p->next;}
if(num==p->num){printf(" 学号 姓名 数学 程序设计 总分\n");
printf("%10d%10s%10d%20d%20d\n",p->num,p->name,p->shuxue,p->cchengxu,(p->shuxue+p->cchengxu));}
else {printf("未找到该学生!\n");}
}
void g5_2(struct stu *head , char num[20]){ //按姓名查询
struct stu *p;
p = head;
while(p!=NULL && (strcmp(num, p->name)!=0)) p=p->next;
if(p!=NULL && strcmp(num, p->name)==0){
printf(" 学号 姓名 数学 程序设计 总分\n");
printf("%10d%10s%10d%20d%20d\n", p->num, p->name, p->shuxue, p->cchengxu, (p->shuxue+p->cchengxu));
}
else printf("未找到该学生!\n");
}
struct stu *g5_3(struct stu *head,int num) //数学成绩查询
{struct stu *p; int k,h=0;
p = head;
while( p!=NULL ) {
if(num<p->shuxue)h=h+1;
p = p->next ;
}
k=h+1;
printf("数学成绩高于%d的有%d人,你的数学排名为%d\n",num,h,k);
}
struct stu *g5_4(struct stu *head,int num) //程序设计成绩查询
{struct stu *p; int k,h=0;
p = head;
while( p!=NULL ) {
if(num<p->cchengxu)h=h+1;
p = p->next ;
}
k=h+1;
printf("程序设计成绩高于%d的有%d人,你的程序设计排名为%d\n",num,h,k);
}
struct stu *g5_5(struct stu *head,int num) //总分查询
{struct stu *p; int k,h=0;
p = head;
while( p!=NULL ) {
if(num<(p->shuxue+p->cchengxu))h=h+1;
p = p->next ;
}
k=h+1;
printf("总分高于%d的有%d人,你的总分排名为%d\n",num,h,k);
}
void g4_1(struct stu * head ) //数学成绩排序
{
struct stu *p,*p1;
while(n!=0){p=head;long int max=0;
while( p!=NULL ){
if(max<p->shuxue){max=p->shuxue;p1=p;}
p=p->next;}
printf("%10ld%10s%10d%20d%20d\n", p1->num, p1->name, p1->shuxue, p1->cchengxu, (p1->shuxue+p1->cchengxu));
p1->shuxue=-1;
n--;}
}
void g4_2(struct stu * head ) //程序设计成绩排序
{
struct stu *p,*p1;
while(n!=0){p=head;long int max=0;
while( p!=NULL ){
if(max<p->cchengxu){max=p->cchengxu;p1=p;}
p=p->next;}
printf("%10ld%10s%10d%20d%20d\n", p1->num, p1->name, p1->shuxue, p1->cchengxu, (p1->shuxue+p1->cchengxu));
p1->cchengxu=-1;
n--;}
}
void g4_3(struct stu * head ) //总分排序
{
struct stu *p,*p1;
while(n!=0){p=head;long int max=0;
while( p!=NULL ){
if(max<(p->cchengxu+p->shuxue)){max=(p->cchengxu+p->shuxue);p1=p;}
p=p->next;}
printf("%10ld%10s%10d%20d%20d\n", p1->num, p1->name, p1->shuxue, p1->cchengxu, (p1->shuxue+p1->cchengxu));
p1->cchengxu=-1,p1->shuxue=-1;
n--;}
}