标签:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <malloc.h> #define MAX 100 typedef int elemType; typedef int elemInfo; typedef struct { elemType num; //学号 elemType cls; //班级 char* name; //名字 elemType score[10]; //分数 }stuInfo; typedef struct{ stuInfo stu[MAX]; elemType length; // 存储的个数 }stuType; void DisplayMenu(){ //选择菜单 printf("MENU\n"); printf("---------*******************************************************---------\n"); printf("---------*1. 批量输入学生信息 *---------\n"); printf("---------*2. 通过键盘输入某位学生某次的分数 *---------\n"); printf("---------*3. 输出所有学生信息 *---------\n"); printf("---------*4. 初始化学生信息 *---------\n"); printf("---------*5. 给定学号,显示某位学生作业完成情况 *---------\n"); printf("---------*6. 给定某位学生的学号,修改该学生的信息 *---------\n"); //修改 printf("---------*7. 删除学生信息 *---------\n"); printf("---------*8. 给定某个班级的班号,显示该班所有学生的作业完成情况*---------\n"); printf("---------*9. 输出某个班级某次作业学生的排名 *---------\n"); printf("---------*10.输出全部学生某次作业的排名 *---------\n"); printf("---------*******************************************************---------\n"); } int choiceItem(){ //选择菜单 int choice ; do{ DisplayMenu(); printf("请选择一个你要执行的功能序号:"); scanf("%d",&choice); }while(choice<0 || choice >10); return choice; } void Init (stuType *s){ s->length=0; } void inputAInfo(stuInfo* as,stuType* s){ //通过键盘输入某位学生某次的分数 printf("输入学号:\n"); int j,num; scanf("%d",&num); for(j=0;j<s->length;j++){ if(s->stu[j].num==num){ printf("学号已存在,请重新输入学号:"); scanf("%d",&num),j=0; } } as->num=num; printf("输入班级:\n"); scanf("%d",&as->cls); as->name=(char*)malloc(30); printf("输入姓名:"); scanf("%s",as->name); int i; for (i = 0; i < 10; ++i) { printf("输入该学生第 %d 次的成绩:\n",i+1); scanf("%d",&as->score[i]); } } int printAEqu(stuType s,int index){ // 输出一个学生的信息inidex 学生的平均分 int i,sum=0; for (i = 0; i < 10; ++i) { sum+=s.stu[index].score[i]; } return (sum/10); } void printAInfo(stuType s,int index){ // 输出一个学生的信息 if(index!=-1) { int i,sum=0; printf("%-11d%-6s%-6d",s.stu[index].num,s.stu[index].name,s.stu[index].cls); for (i = 0; i < 10; ++i) { printf("%-5d",s.stu[index].score[i]); sum+=s.stu[index].score[i]; } printf("%4d\n",sum/10); } else printf("没有这个学生!"); } void inputAllInfo(stuType *s ,int length){ //输入全部学生的信息 printf("您正在加入 %d 个学生信息 \n",length); int i; for (i = 0; i < length; ++i) { if(s->length==MAX){ printf("超出限制!\n"); break; } inputAInfo(&s->stu[s->length],s); s->length++; } } void printAllInfo(stuType s){ // 输出全部学生信息 if(s.length==0){ printf("没有学生信息,请录入!\n"); return ; } printf(" 学号 姓名 "); printf("班级 "); int j; for(j=0;j<10;j++) { printf("%dth ",j+1); } printf("平均分");printf("\n"); int i; for ( i = 0; i < s.length; ++i) { printAInfo(s,i); } } int search(stuType s){ int num; printf("输入学号:\n"); scanf("%d",&num); int i; for (i = 0; i < s.length; ++i) { if(s.stu[i].num==num) return i; } return -1; } void modify(stuType*s ,stuType stu){ //修改学生信息 int num,scoreIndex,FuckYou=0; if(s->length==0) printf("没有学生信息!\n"); else { printf("输入学号:"); scanf("%d",&num); int i,j; for ( i = 0; i <= s->length; ++i) { if (stu.stu[i].num==num) { printf("输入你要修改的是第几次成绩:"); scanf("%d",&scoreIndex); printf("新修改的成绩为:"); scanf("%d",&s->stu[i].score[scoreIndex-1]); FuckYou=1; } } if(!FuckYou) printf("没有这个学生\n"); } } void del(stuType* s,int index){ //删除学生信息 if(s->length==0) //判断存储学生的 stuType stu数组的长度 printf("没有这个学生 !\n"); else{ if(index!=-1) // 在调用 search()函数的时候输入学号 后返回index index为 该学生的小标 该学生表示为 s->stu[index] { for(;index < s->length;index++) // 资料 《数据结构教程》 P34 删除数据元素思想 。到从下标 index开始,后一个替代前一个元素。 s->stu[index]=s->stu[index+1]; s->length--; // 一直向前移动.到 整个数组长度减一 依次实现删除数据。 } } } void searchCls(stuType* s){ // 按班级搜索 int cls,i; printf("输入班级:\n"); scanf("%d",&cls); if (!cls) printf("没有这个班级\n"); else for (i = 0; i < s->length; ++i) { if(s->stu[i].cls==cls) printAInfo(*s,i); } } { // 班级内部分数排序 int cls,i,k,scoreIndex,passnum=0; int a[20]; printf("输入班级:\n"); stuInfo ohshit; scanf("%d",&cls); if (!cls) // printf("没有这个班级\n"); else { printf("需要哪次作业成绩排名或者输入111输出平均分排名:"); scanf("%d",&scoreIndex); printf(" 名字 学号 "); scoreIndex==111?printf("平均分\n"):printf("第%d次\n",scoreIndex); int j=0; for (i = 0; i < s->length; ++i) // 对整个存储学生的 stu 进行遍历 { if(s->stu[i].cls==cls) //判断 学生的 班级cls 是否是要查询的班级 { a[j]=i; //如果该学生是这个班级的学生 记录下这个学生的下标保存到数组 a[] j++; } } j--; // 遍历以后 数组 a[j] 里面存储的都是 所查询班级的学生的 s->stu[] 下标 for(i=0;i<j;i++) // 资料 《数据结构教程》P293 冒泡排序 . 开始 { for(k=j;k>i;k--) { if((scoreIndex==111)?printAEqu(*s,a[k])> printAEqu(*s,a[k-1]):s->stu[a[k]].score[scoreIndex-1] > s->stu[a[k-1]].score[scoreIndex-1]) { ohshit=s->stu[a[k]]; s->stu[a[k]]=s->stu[a[k-1]]; s->stu[a[k-1]]=ohshit; } } } // 冒泡排序结束 for(i=0;i<=j;i++){ if(s->stu[i].score[scoreIndex-1]>=60 || printAEqu(*s,a[i])>=60) passnum++; printf("%-10s",s->stu[a[i]].name); printf("%-14d ",s->stu[a[i]].num); printf("%-5d\n",(scoreIndex==111)?printAEqu(*s,a[i]):s->stu[a[i]].score[scoreIndex-1]); } printf("及格人数为 %d,总人数为 %d\n",passnum,j+1); } } void allInSort(stuType *s) { int i,j,scoreIndex,passnum=0; printf("需要哪次作业成绩排名或者输入111输出平均分排名:"); scanf("%d",&scoreIndex); printf(" 名字 学号 "); scoreIndex==111?printf("平均分\n"):printf("第%d次\n",scoreIndex); stuInfo tmp; for(i=0;i<s->length-1;i++) // 资料 《数据结构教程》P293 冒泡排序 . 开始 { for(j=s->length-1;j>i;j--) { if((scoreIndex==111)?printAEqu(*s,j)> printAEqu(*s,j-1):s->stu[j].score[scoreIndex-1] > s->stu[j-1].score[scoreIndex-1]) { tmp=s->stu[j]; s->stu[j]=s->stu[j-1]; s->stu[j-1]=tmp; } } // 冒泡排序结束 } for(i=0;i<s->length;i++){ if(s->stu[i].score[scoreIndex-1]>=60 || printAEqu(*s,i)>=60) passnum++; printf("%-10s",s->stu[i].name); printf("%-14d ",s->stu[i].num); printf("%-5d\n",(scoreIndex==111)?printAEqu(*s,i):s->stu[i].score[scoreIndex-1]); } printf("及格人数为:%d,总人数为:%d\n",passnum,s->length); } int main(){ //主函数 stuType student; student.length=0; int choice,index; Init(&student); int ch; do{ choice=choiceItem(); switch(choice){ case 1: printf("输入你要输入学生信息的个数:"); scanf("%d",&index); inputAllInfo(&student,index);break; case 2: inputAllInfo(&student,1);break; case 3: printAllInfo(student);break; case 4: Init(&student);break; case 5: printAInfo(student,search(student));break; case 6: modify(&student, student);break; case 7: del(&student,search(student));break; case 8: searchCls(&student);break; case 9: clsInSort(&student);break; case 10:allInSort(&student);break; } system("pause"); //按任意键继续运行 } while(choice); return 0; }
标签:
原文地址:http://www.cnblogs.com/webers/p/4168427.html