博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言——学生成绩管理系统
阅读量:3948 次
发布时间:2019-05-24

本文共 7598 字,大约阅读时间需要 25 分钟。

/*1.用到链表  2.增删改查  3.各种排序显示*/ #include
#include
struct Score { //定义成绩的结构体 int math; int C; int english;};struct student{ //定义学生个人信息的结构体 char name[20]; long num; char sex[10]; struct Score score; struct student *next;};struct student *creat(int number) //创建链表 { int index; //用于循环变量 struct student *head; struct student *p1,*p2,*p; head = p2 = (struct student *) malloc(sizeof(struct student)); //分配空间 for(index = 0;index
next = p1; p2 = p1; //将链表向前推进 } p2->next = NULL; //使链表最后的结点为空 /*输入学生的信息*/ p = head; //使p2先指向链表头 while(p->next!=NULL) //输入成绩 { printf("请输入学生的姓名:"); scanf("%s",&p->name); printf("请输入学生的学号:"); scanf("%d",&p->num); printf("请输入学生的性别:"); scanf("%s",&p->sex); printf("请分别输入学生的高数、C语言、英语成绩:"); scanf("%d%d%d",&p->score.math,&p->score.C,&p->score.english); p = p->next; //往链表后边推进 } return head; //将链表头返回 }void add(struct student *head) //插入学生信息 { struct student *p0,*p1,*p2; p1 = head; p2 = head->next; system("cls"); p0=(struct student *)malloc(sizeof(struct student)); printf("请输入增加学生的姓名:"); //将所有需要插入的内容存储到P0中 scanf("%s",&p0->name); printf("学生的学号:"); scanf("%d",&p0->num); printf("学生的性别:"); scanf("%s",&p0->sex); printf("分别输入学生的高数、C语言、英语成绩"); scanf("%d%d%d",&p0->score.math,&p0->score.C,&p0->score.english); p1->next = p0; p0->next = p2; }void decrease(struct student *head) //删除学生信息 { int number; struct student *p2,*p1; printf("请输入所需要删除人的学号:\n"); scanf("%d",&number); //输入需要删除的人的学号 p1=head; //使链表从头开始 p2=head->next; //p2在前,p1在后 if(number==head->num) head = p2; else while(p2->next!=NULL) //循环查找所需要删除的学生学号 { if(number==p2->num) { p1->next=p2->next; //将所需要删除的学生信息存储的节点从链表中去除 break; } p1=p1->next; p2=p2->next; } }void change(struct student *head) //修改学生信息 { int n = 0; int number; int judge = 1; struct student *p1,*p2; p1 = (struct student *) malloc(sizeof(struct student)); while(judge) { system("cls"); printf("请输入你要修改的学号:\n"); scanf("%d",&number); p2 = head; while(p2->next!=NULL) //循环查找需要修改的学生信息 { if(number==p2->num) //查找到需要修改学生学号,对其进行数据覆盖 { printf("学生的姓名为:"); printf("%s\n",p2->name); printf("学生的学号为:"); printf("%d\n",p2->num); printf("学生的性别为:"); printf("%s\n",p2->sex); printf("学生的高数、C语言、英语成绩分别为:"); printf("%d %d %d\n",p2->score.math,p2->score.C,p2->score.english); judge = 0; n++; } p2=p2->next; } if(n==0) //若未查找到所需要修改的学生,则报错 { printf("查无此人!"); judge = 1; } } printf("请输入修改后学生的姓名:"); //对查找到的学生信息数据覆盖 scanf("%s",&p1->name); printf("学生的学号:"); scanf("%d",&p1->num); printf("学生的性别:"); scanf("%s",&p1->sex); printf("分别输入学生的高数、C语言、英语成绩:"); scanf("%d%d%d",&p1->score.math,&p1->score.C,&p1->score.english); p2=p1;} void sort_num(struct student *head) //按总分排序,列出学生成绩 { struct student *p1,*p2,*p3; long num[100]; int score[100]; int index = 0,indexj = 0,i = 0,j = 0; p3=head; while(p3->next!=NULL) { num[j] = p3->num; j++; p3=p3->next; } p1=head; while(p1->next!=NULL)//循环控制b的内容(单个学生的总成绩) { score[i]=p1->score.math+p1->score.C+p1->score.english;//将学生所有科目成绩相加 i++; p1=p1->next; } for(index = 0;index
next!=NULL) { num[j] = p3->num; j++; p3=p3->next; } p1=head; while(p1->next!=NULL)//循环控制b的内容(单个学生的总成绩) { score[i]=p1->score.math;//将学生所有科目成绩相加 i++; p1=p1->next; } for(index = 0;index
next!=NULL) { num[j] = p3->num; j++; p3=p3->next; } p1=head; while(p1->next!=NULL)//循环控制b的内容(单个学生的总成绩) { score[i]=p1->score.C;//将学生所有科目成绩相加 i++; p1=p1->next; } for(index = 0;index
next!=NULL) { num[j] = p3->num; j++; p3=p3->next; } p1=head; while(p1->next!=NULL)//循环控制b的内容(单个学生的总成绩) { score[i]=p1->score.english;//将学生所有科目成绩相加 i++; p1=p1->next; } for(index = 0;index
next!=NULL) //循环查找输入的学生学号 { if(i==p2->num) //输入查找的学号已找到 { system("cls"); printf("\n\n\n\t您所要查找的学生的姓名为:");//输出查找到的学生信息 printf("%s\n",p2->name); printf("\t学生的学号为:"); printf("%d",p2->num); printf("\t学生的性别为:"); printf("%s\n",p2->sex); printf("\t学生的高数、C语言、英语成绩分别为:"); printf("%d %d %d \n",p2->score.math,p2->score.C,p2->score.english); n++; break; } p2=p2->next;//使链表向前推进 } if(n==0)//判断是否找到需要查找的学号 printf("\t\t查无此人!"); system("pause");}void find_name(struct student *head)//按照姓名查找函数{ char a[30];//定义字符数组,用于存储需要查找的学生姓名 int n=0; struct student *p2;//定义指针 printf("请输入你所需要查找的姓名:"); scanf("%s",a);//输入所需要查找的学生姓名 p2=head;//使链表从头开始 while(p2->next!=NULL)//循环查找输入的姓名 { if(strcmp(a,p2->name)==0)//对链表中的信息与输入的姓名进行对比 { system("cls"); printf("学生的姓名为:"); printf("%s\n",p2->name); printf("学生的学号为:"); printf("%d",p2->num); printf("学生的性别为:"); printf("%s\n",p2->sex); printf("学生的高数、C语言、英语成绩分别为:"); printf("%d %d %d\n",p2->score.math,p2->score.C,p2->score.english);n++; system("pause"); } p2=p2->next; } if(n==0)//判断是否找到需要查找的姓名 { printf("\t\t查无此人!"); system("pause"); } }void cover() //定义封面函数 { printf("\n\n\n\n\n\n\n\n\n"); printf("\t\t\t\t\t\t****************\n"); printf("\t\t\t\t\t\t----------------\n"); printf("\t\t\t\t\t\t学生成绩管理系统\n"); printf("\t\t\t\t\t\t----------------\n"); printf("\t\t\t\t\t\t****************\n"); printf("\n\t\t\t\t\t\t 欢迎您 \n"); printf("\t\t\t\t\t\t----------------\n"); printf("\n\n\n\n\n\n\n\t\t\t\t\t\t"); system("color 0e"); //调整颜色为黑色背景黄色字体 system("pause"); //暂停,防止里面弹回功能界面 }void function() //定义功能界面函数 { system("cls"); //清屏 printf("\n\n\n\n\n\n\n\n\n"); printf("\t\t\t\t\t\t**************** \n"); printf("\t\t\t\t\t\t---------------- \n"); printf("\t\t\t\t\t\t 功能区 \n"); printf("\t\t\t\t\t\t---------------- \n"); printf("\t\t\t\t\t\t1.------输入信息 \n"); printf("\t\t\t\t\t\t2.------进行排序 \n"); printf("\t\t\t\t\t\t3.------按学号查询 \n"); printf("\t\t\t\t\t\t4.------按姓名查询 \n"); printf("\t\t\t\t\t\t5.------增加学生 \n"); printf("\t\t\t\t\t\t6.------删除学生 \n"); printf("\t\t\t\t\t\t7.------修改学生信息 \n"); printf("\t\t\t\t\t\t8.------关于成绩管理系统\n"); printf("\t\t\t\t\t\t9.------退出 \n"); printf("\n\t\t\t\t\t\t选择要执行的功能 "); }void version() //定义版本信息 { system("cls"); printf("\n\n\n\n\n"); printf("\t\t\t\t\t------------------------------- \n"); printf("\t\t\t\t\t******************************* \n"); printf("\t\t\t\t\t------------------------------- \n"); printf("\t\t\t\t\t-------成绩管理系统 1.0--------\n\n"); printf("\t\t\t\t\t By____18060207104\n\n"); printf("\t\t\t\t\t--------------------- 2019/1/10\n\n"); printf("\t\t\t\t\t版本更新------ 已经是最新版本\n\n"); printf("\t\t\t\t\t\t"); system("pause"); }int main(){ struct student * head; int n; // struct student *creat(); cover(); int h = 1,choose; while(h==1) //while语句可以再次进行switch选择 { function(); //显示功能界面 scanf("%d",&choose); //选择执行的操作 switch(choose) { case 1:system("cls");printf(" 请输入您所要创建的学生人数(接下来步骤请按照提示完成):"); scanf("%d",&n); //输入creat的参数,控制创建节点的数量 head = creat(n);break; //选择1进行输入信息操作 case 2:sort(head);break; //选择2进行排序操作 case 3:find_number(head);break; //选择3进行按学号查找操作 case 4:find_name(head);break; //选择4进行按姓名查找操作 case 5:add(head);break; case 6:decrease(head);break; case 7:change(head);break; case 8:version(head);break; //选择5进行输出操作 case 9:h=0;break; //选择7进行退出操作 } system("cls"); //清屏 printf("\n\n\n\n\n\n\n"); printf("\t\t\t\t\t\t感谢您的使用!\n"); printf("\t\t\t\t\t\t\t\t期待与您的再次相遇!\n"); printf("\t\t\t\t\t\t"); } }

 

转载地址:http://sqwzi.baihongyu.com/

你可能感兴趣的文章
惰性求值,可组合和模块化的JavaScript
查看>>
How to Extend Django User Model 如何扩展Django用户模型
查看>>
两个行业的故事:编程语言与富裕国家和发展中国家之间的差异
查看>>
15个用于管理MySQL服务器mysqladmin命令
查看>>
服务器端I / O性能:Node,PHP,Java与Go
查看>>
多行文本编辑时,同一行编辑不同类型的字符时自动换行的问题
查看>>
如何使开机动画只播一次
查看>>
如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
查看>>
restore factory属性的enable和disable
查看>>
Android LOG机制流程图
查看>>
如何在JNI中抛异常
查看>>
Android应用程序的完全退出
查看>>
Task和Activity相关的一些属性
查看>>
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>
Android中打印代码的调用层次
查看>>
成功者十三个价值连城的习惯
查看>>
特别成功的人会做6件事
查看>>
Android: 用jni 获取MAC地址
查看>>
字符串列表的C语言实现:c_strlist
查看>>