#include#include #include #include #include //基于链表的学生管理系统 typedef struct Student //定义结构体 { long num; //学号 char name[20]; //姓名 char sex; //性别 float Chinese; //语文成绩 float Math; //数学成绩 float English; //英语成绩 float aver; //平均分 }student; typedef struct Node //定义链表节点 { student stu; //定义stu数据 struct Node *next; //指向下一个节点 }node; node *h=NULL; //定义h int Menu(); //一级菜单 int menu(); //二级菜单 void creat_link(); //创建新链表,输入信息 void output_link(); //输出 void increase(); //增加学生信息 void delete_link(); //删除信息 void fix(); //修改信息 int sort(); //排序功能 void number(); //学号排序 void aver(); //平均分排序 int main() { int a; while(1) { a = Menu(); switch(a) { case 1:creat_link();break; case 2:output_link();break; case 3:increase();break; case 4:delete_link();break; case 5:fix();break; case 6:sort();break; case 7: system("cls"); printf("nnnnnnnnnnnn"); printf("tttttt已退出...nnnnnnnnnnnn"); exit(0); break; default: system("cls"); printf("nnnnnnnnnnnttttt请输入正确的选择(按任意键继续)"); break; } getch(); } return 0; } int Menu() //一级菜单 { system("cls"); int a; printf("n"); printf("ttttt-------------------------n"); printf("ttttt| 学生成绩管理系统V2.0|tttn"); printf("ttttt|t请选择功能t|ttttn"); printf("ttttt-------------------------n"); printf("ttttt|t1.录入信息t|ttttn"); printf("ttttt|t2.打印信息t|ttttn"); printf("ttttt|t3.增加信息t|ttttn"); printf("ttttt|t4.删除信息t|ttttn"); printf("ttttt|t5.修改信息t|ttttn"); printf("ttttt|t6.信息排序t|ttttn"); printf("ttttt|t7.退出系统t|ttttn"); printf("ttttt-------------------------n"); printf("n"); printf("ttttt请输入您要选择的功能键: "); scanf("%d",&a); return a; } int menu() //二级菜单 { system("cls"); int d; printf("n"); printf("ttttt-------------------------n"); printf("ttttt| 学生成绩管理系统V2.0|tttn"); printf("ttttt|t请选择功能t|ttttn"); printf("ttttt-------------------------n"); printf("ttttt|t1.学号排序t|ttttn"); printf("ttttt|t2.平均分排序t|ttttn"); printf("ttttt|t3.返回上一级t|ttttn"); printf("ttttt|t4.退出系统t|ttttn"); printf("ttttt-------------------------n"); printf("n"); printf("ttttt请输入您要选择的功能键: "); scanf("%d",&d); return d; } void creat_link() { system("cls"); node *p; p = (node *)malloc(sizeof(node)); //创建一个新节点 p->next = NULL; //将新节点初始化 if(h==NULL) //插入节点,判断节点是否存在 h = p; else { p->next = h; h = p; } printf("nnnnnn"); printf("n输入学号:"); getchar(); scanf("%ld",&p->stu.num); printf("n输入姓名:"); getchar(); gets(p->stu.name); printf("n输入性别(m or f):"); scanf("%c",&p->stu.sex); printf("n输入语数英三科成绩(0~100):"); scanf("%f%f%f",&p->stu.Chinese,&p->stu.Math,&p->stu.English); if(p->stu.sex != 'm' && p->stu.sex != 'f') //判断性别 { printf("性别输入错误!(按任意键返回菜单)"); getch(); Menu(); } if(p->stu.Chinese>100 || p->stu.Chinese<0 || //判断成绩 p->stu.Math>100 || p->stu.Math<0 || p->stu.English>100 || p->stu.English<0) { printf("成绩输入错误!(按回车返回菜单)"); getch(); Menu(); } printf("n"); printf("nn录入成功 按回车继续..."); } void output_link() { system("cls"); //清屏 printf("n学生信息:n"); //打印表头 printf("学号t姓名t性别t语文t数学t英语n"); printf("-----------------------------------------------------n"); node *p = h; //遍历链表 while(p!=NULL) { printf("%ldt%st%ct%.2ft%.2ft%.2fn",p->stu.num,p->stu.name,p->stu.sex,p->stu.Chinese,p->stu.Math,p->stu.English); p = p -> next; } printf("nn打印完成(按任意键继续...)"); } void increase() //添加学生信息 { system("cls"); node *p; p = (node *)malloc(sizeof(node)); p->next = NULL; //初始化 if(p == NULL) //插入节点 { h = p; } else { p->next = h; h = p; } printf("nn添加信息:n"); printf("n输入学号:"); getchar(); scanf("%ld",&p->stu.num); printf("n输入姓名:"); getchar(); gets(p->stu.name); printf("n输入性别(m or f):"); scanf("%c",&p->stu.sex); printf("n输入语数英三科成绩(0~100):"); scanf("%f%f%f",&p->stu.Chinese,&p->stu.Math,&p->stu.English); if(p->stu.sex != 'm' && p->stu.sex != 'f') { printf("性别输入错误!(按任意键返回菜单)"); getch(); Menu(); } if(p->stu.Chinese>100 || p->stu.Chinese<0 || p->stu.Math>100 || p->stu.Math<0 || p->stu.English>100 || p->stu.English<0) { printf("成绩输入错误!(按回车返回菜单)"); getch(); Menu(); } printf("nn"); printf("录入完成(按任意键继续...)"); } void delete_link() //删除信息 { system("cls"); node *p,*q; long dnum; //定义要输入的信息 int flag = 0; p = (node *)malloc(sizeof(node)); printf("nnnnnnnnnnnn"); printf("ttttt请输入你要删除的学生学号:"); scanf("%ld",&dnum); p = h; q = h; if(h->stu.num == dnum) { h = h->next; free(p); //释放要删除的信息 flag = 1; system("cls"); printf("nnnnnnnnnnnnttttt删除完成(按任意键继续...)"); } else { while(p != NULL) //遍历链表 { if(p->stu.num == dnum) { flag = 1; break; } q = p; p = p->next; } if(flag == 1) //找到相应的节点 { q->next = p->next; free(p); system("cls"); printf("nnnnnnnnnnnnttttt删除完成(按任意键继续...)"); } else { system("cls"); printf("nnnnnnnnnnnnttttt你要删除的数据不存在!(按任意键继续...)"); } } } void fix() //修改信息 { system("cls"); node *p,*q; long dnum; int flag=0; q = (node *)malloc(sizeof(node)); q->next = NULL; printf("nnnnnnnnnnnn"); printf("ttttt请输入你要修改的学生学号:"); scanf("%ld",&dnum); p = h; //将定义的p和q赋值为h; q = h; if(h->stu.num == dnum) { h = h->next; if(p == NULL) { h = p; } else { p->next = h; h = p; } system("cls"); printf("nnnnnn"); printf("n输入学号:"); getchar(); scanf("%ld",&p->stu.num); printf("n输入姓名:"); getchar(); gets(p->stu.name); printf("n输入性别(m or f):"); scanf("%c",&p->stu.sex); printf("n输入语数英三科成绩(0~100):"); scanf("%f%f%f",&p->stu.Chinese,&p->stu.Math,&p->stu.English); if(p->stu.sex != 'm' && p->stu.sex != 'f') //判断性别 { printf("性别输入错误!(按任意键返回菜单)"); getch(); Menu(); } if(p->stu.Chinese>100 || p->stu.Chinese<0 || //判断成绩 p->stu.Math>100 || p->stu.Math<0 || p->stu.English>100 || p->stu.English<0) { printf("成绩输入错误!(按回车返回菜单)"); getch(); Menu(); } flag = 1; system("cls"); printf("nnnnnnnnnnnnttttt修改完成(按任意键继续...)"); } else { while(p != NULL) //同删减功能 { if(p->stu.num == dnum) { flag = 1; break; } q = p; p = p->next; } if(flag == 1) { h = h->next; q->next = p->next; if(p == NULL) { h = p; } else { p->next = h; h = p; } system("cls"); printf("nnnnnn"); printf("n输入学号:"); getchar(); scanf("%ld",&p->stu.num); printf("n输入姓名:"); getchar(); gets(p->stu.name); printf("n输入性别(m or f):"); scanf("%c",&p->stu.sex); printf("n输入语数英三科成绩(0~100):"); scanf("%f%f%f",&p->stu.Chinese,&p->stu.Math,&p->stu.English); if(p->stu.sex != 'm' && p->stu.sex != 'f') //判断性别 { printf("性别输入错误!(按任意键返回菜单)"); getch(); Menu(); } if(p->stu.Chinese>100 || p->stu.Chinese<0 || //判断成绩 p->stu.Math>100 || p->stu.Math<0 || p->stu.English>100 || p->stu.English<0) { printf("成绩输入错误!(按回车返回菜单)"); getch(); Menu(); } system("cls"); printf("nnnnnnnnnnnnttttt修改完成(按任意键继续...)"); } else { system("cls"); printf("nnnnnnnnnnnnttttt你要修改的数据不存在!(按任意键继续...)"); } } } int sort() //排序 { system("cls"); int d; while(1) { d = menu(); switch(d) { case 1:printf("学号由低到高排序:n");number();break; //学号排序 case 2:printf("平均分由高到低排序:n");aver();break; //平均分排序 case 3:return(1); //返回上一级 case 4:exit(0);break; //退出 default: system("cls"); printf("nnnnnnnnnnnttttt请输入正确的选择(按任意键继续)"); break; } getch(); } } void number() { system("cls"); node *p,*q; p=h; int n=1; while(p!=NULL) { p->stu.aver = (p->stu.Chinese + p->stu.Math + p->stu.English)/3.0; p = p->next; n++; } p=h; int i; long temp; float t1,t2,t3,t4; char t5[25]; char t6; for ( i =1; i < n;i++,p=p->next)//冒泡排序 for (q = p->next;q!= NULL;q=q->next) if (p->stu.num>q->stu.num) { //交换所有信息 t1 = p->stu.Chinese; p->stu.Chinese = q->stu.Chinese; q->stu.Chinese = t1; t2 = p->stu.Math; p->stu.Math = q->stu.Math; q->stu.Math = t2; t3 = p->stu.English; p->stu.English = q->stu.English; q->stu.English = t3; t4 = p->stu.aver; p->stu.aver= q->stu.aver; q->stu.aver = t4; strcpy(t5,p->stu.name); strcpy(p->stu.name ,q->stu.name); strcpy(q->stu.name ,t5); temp=p->stu.num; p->stu.num=q->stu.num; q->stu.num=temp; t6=p->stu.sex; p->stu.sex=q->stu.sex; q->stu.sex=t6; } output_link(); } void aver() { node *p,*q; node *t; p=h; int n=1; while(p!=NULL) { p->stu.aver = (p->stu.Chinese + p->stu.Math + p->stu.English)/3.0; p = p->next; n++; //计算节点数量 } p=h; int i; long temp; float t1,t2,t3,t4; char t5[25]; char t6; //冒泡排序 for ( i =1; i < n;i++,p=p->next) for (q = p->next;q!= NULL;q=q->next) if (p->stu.aver < q->stu.aver) { //交换所有信息 t1 = p->stu.Chinese; p->stu.Chinese = q->stu.Chinese; q->stu.Chinese = t1; t2 = p->stu.Math; p->stu.Math = q->stu.Math; q->stu.Math = t2; t3 = p->stu.English; p->stu.English = q->stu.English; q->stu.English = t3; t4 = p->stu.aver; p->stu.aver= q->stu.aver; q->stu.aver = t4; strcpy(t5,p->stu.name); strcpy(p->stu.name ,q->stu.name); strcpy(q->stu.name ,t5); temp=p->stu.num; p->stu.num=q->stu.num; q->stu.num=temp; t6=p->stu.sex; p->stu.sex=q->stu.sex; q->stu.sex=t6; } output_link(); }
希望这篇文章对你有用 !
仅供参考



