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("nn请选择功能: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("nn请选择功能: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("nn感谢使用学生管理系统 ^_^ Byenn");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("nn感谢使用学生管理系统 ^_^ Byenn");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("nn·请输入您想要输入的学生个数:"); 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("·输入成功nn"); 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; while( p!=NULL ) {printf(" 学号 姓名 数学 程序设计 总分n"); printf("%10d%10s%10d%20d%20dn",p->num,p->name,p->shuxue,p->cchengxu,(p->shuxue+p->cchengxu)); p = p->next ; } } 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%20dn",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%20dn", 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 shuxue)h=h+1; p = p->next ; } k=h+1; printf("数学成绩高于%d的有%d人,你的数学排名为%dn",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 cchengxu)h=h+1; p = p->next ; } k=h+1; printf("程序设计成绩高于%d的有%d人,你的程序设计排名为%dn",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人,你的总分排名为%dn",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 shuxue){max=p->shuxue;p1=p;} p=p->next;} printf("%10ld%10s%10d%20d%20dn", 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 cchengxu){max=p->cchengxu;p1=p;} p=p->next;} printf("%10ld%10s%10d%20d%20dn", 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%20dn", p1->num, p1->name, p1->shuxue, p1->cchengxu, (p1->shuxue+p1->cchengxu)); p1->cchengxu=-1,p1->shuxue=-1; n--;} }



