学生信息管理系统2.0

网友投稿 552 2022-10-02

学生信息管理系统2.0

学生信息管理系统2.0

/*@copyright from LZY. @time:23.11.2016.@name:学生信息管理系统@界面:DOS.@版本:2.0 */#include#include#include#include#include #define N 10typedef struct student { char name[8]; unsigned No; float math,Chinese,English; float ave; struct student *next;/*保存下一个stu的地址*/ }NODE,*linklist;void zhu();void scan(int a[],int n){ int i; printf("\n请输入%d个人成绩\n",n); for(i=0;ia[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} } printf("按照升序排列的结果:\n"); for(i=0;ia[j]) { t=a[j];a[j]=a[j+1];a[j+1]=t;} } printf("按照降序排列的结果:\n"); for(i=0;i数据\n "); for(i=0;ia[j]) {t=a[j+1];a[j+1]=a[j];a[j]=t;} }/*****************************************************************************/void print_stu(int a[],int n) { int i; printf("\n将数组stu[10]的内容输出到屏幕上\n"); for(i=0;imath; for(i=0;i<10;i++){ if((p+i)->math>max1){ max1=(p+i)->math; a=i; }} return a; }int Max2(struct student *p){ int i,b; float max2=p->Chinese; for(i=0;i<10;i++){ if((p+i)->Chinese>max2) {max2=(p+i)->Chinese; b=i;}} return b;}int Max3(struct student *p){ int i,c; float max3=p->English; for(i=0;i<10;i++){ if((p+i)->English>max3) {max3=(p+i)->English; c=i;}} return c;}/*****************************************************************************/void print_con(struct student *p) { int m=0,c=0,e=0; m=Max1(p); c=Max2(p); e=Max3(p); printf("\n\n输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩\n"); printf("max math:"); printf("%s\t%d\t%.2f\n",(p+m)->name,(p+m)->No,(p+m)->math); printf("max Chinese:"); printf("%s\t%d\t%.2f\n",(p+c)->name,(p+c)->No,(p+c)->Chinese); printf("max English:"); printf("%s\t%d\t%.2f\n",(p+e)->name,(p+e)->No,(p+e)->English); }/******************************************************************************/ void print_aver(struct student *p,int n) { int i,e=0; float max; for(i=0;imath+(p+i)->Chinese+(p+i)->English; } for(i=0;imax) {max=p[i].ave; e=i;} } printf("\n输出三门课程的平均分数最高的学生的学号、姓名及其平均分\n"); printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",(p+e)->No,(p+e)->name,(p+e)->math,(p+e)->Chinese,(p+e)->English,(p+e)->ave); } /*****************************************************************************/ void sort_aver(struct student *p,int n) { int i,j; struct student t; for(i=0;ip[j].ave){ t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t; } } printf("\n将10个学生按照平均分数从高到低进行排序\n"); printf("number\t\tname\tmath\tChinese\tEnglish\tave\n") ; for(i=0;iNo,(p+i)->name,(p+i)->math,(p+i)->Chinese,(p+i)->English,(p+i)->ave); }/*****************************************************************************/void scan_con_1(FILE *fp,struct student *p,int n){ int i; for(i=0;iname,(p+m)->No,(p+m)->math); fprintf(stdout,"max Chinese:"); fprintf(stdout,"%s\t%d\t%.2f\n",(p+c)->name,(p+c)->No,(p+c)->Chinese); fprintf(stdout,"max English:"); fprintf(stdout,"%s\t%d\t%.2f\n",(p+e)->name,(p+e)->No,(p+e)->English); }/*****************************************************************************/void print_aver1(FILE *fp,struct student *p,int n) { int i,e=0; for(i=0;imath+(p+i)->Chinese+(p+i)->English; } for(i=0;ip[0].ave) e=i;} fprintf(stdout,"\n输出三门课程的平均分数最高的学生的学号、姓名及其平均分\n"); fprintf(stdout,"%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",(p+e)->No,(p+e)->name,(p+e)->math,(p+e)->Chinese,(p+e)->English,(p+e)->ave);} /*****************************************************************************/ void print_aver_con(FILE *fp,struct student *p,int n) { int i,j,e=0; float t=0; for(i=0;imath+(p+i)->Chinese+(p+i)->English; } for(i=0;ip[j].ave){ t=p[j].ave;p[j].ave=p[j+1].ave;p[j+1].ave=t; } } fprintf(stdout,"\n将10个学生按照平均分数从高到低进行排序\n"); fprintf(stdout,"number\t\tname\tmath\tChinese\tEnglish\tave\n") ; for(i=0;iNo,(p+i)->name,(p+i)->math,(p+i)->Chinese,(p+i)->English,(p+i)->ave); }/*****************************************************************************/void print_aver_con2(FILE *fp,struct student *p ){int i;fprintf(stdout,"\n从studsort.dat 文件中读取第2,4,6,8,10个学生的数据。\n");for(i=2;i<=10;i=i+2){ fprintf(stdout,"%d\t%s\t%.2f\t%.2f\t%.2f",(p+i-1)->No,(p+i-1)->name,(p+i-1)->math,(p+i-1)->Chinese,(p+i-1)->English); fprintf(stdout,"\n");}}/******************************************************************************//*struct stu *h;===>NoDE *h or linklist h;等价;定义一个单链表*/ linklist create(int n) { linklist h,f,p; int i; h=(linklist) malloc(sizeof(NODE));/*申请空间*/ f=p=h; printf("请输入姓名,学号以及三门课成绩\n"); scanf("%s%d%f%f%f",(*p).name,&(*p).No,&(*p).math,&(*p).Chinese,&(*p).English); for(i=1;inext=p; } p->next=NULL; return(h); } /*****************************************************************************/ void pt(linklist h) { linklist p=h; printf("\n输出的结果是:\n"); while(p!=NULL) { printf("%s\t%d\t%.2f\t%.2f\t%.2f\n",p->name,p->No,p->math,p->Chinese,p->English); p=p->next; } }/*****************************************************************************/linklist del_xh(linklist h,int num) { linklist current_node=h; linklist previous=0; while(current_node!=0&&(current_node->No!=num)){ previous=current_node; current_node=current_node->next;}if(current_node!=0&&previous==0){ h=current_node->next; delete current_node; printf("学号:%d成功删除 \n",num);}else if(current_node!=0&&previous!=0){ previous->next=current_node->next; delete current_node; printf("学号:%d成功删除 \n",num);}else printf("对不起,链表中没有这个人员的信息 \n");return (h);}/*****************************************************************************/ linklist del_xm(linklist h,char str[]) { linklist current_node=h; linklist previous=0; while(current_node!=0&&strcmp(current_node->name,str)!=0){ previous=current_node; current_node=current_node->next;}if(current_node!=0&&previous==0){ h=current_node->next; delete current_node; printf("姓名:%s成功删除 \n",str);}else if(current_node!=0&&previous!=0){ previous->next=current_node->next; delete current_node; printf("姓名:%s成功删除 \n",str);}else printf("对不起,链表中没有这个人员的信息 \n");return (h); } /*************************链表的插入*****************************************/ linklist insert(linklist head,linklist stud){linklist p1,p2,p3; p1=head; p2=stud; while( (p2->No>p1->No)&&(p1->next!=NULL)) { p3=p1; p1=p1->next;} if(p2->No<=p1->No) { if(head==p1) head=p2; else p3->next=p2; p2->next=p1; } else { p1->next=p2;p2->next=NULL;} return(head);}/*****************************************************************************/ void case1(){ char style; int stu[N]={0}; /* n个学生成绩从高到低排名 */ printf("please input a(升序) or d(降序)\t"); scanf(" %c",&style); scan( stu,N); sort(stu,N, style); printf("按任意键返回主菜单:\n"); getch(); system("cls"); zhu(); }/*****************************************************************************/ void case2(){ char stu_score[20]={0}; int stu[N]; /* 定义一个数组stu[10]存放10个学生的成绩,从键盘输入数据 */ scan_1(stu,N); /* 将数组stu[10]的内容输出到屏幕上 */ print_stu(stu,N); /* 将成绩数组按照从高到低进行排序 */ sort_stu(stu,N); /* 将数组stu[10]的内容输出到屏幕上(排序后) */ print_stu(stu,N); /* 输入字符串"student score ",复制该字符串并输出 */ scan_str(stu_score); printf("\n"); printf("按任意键返回主菜单:\n"); getch(); system("cls"); zhu(); }/*****************************************************************************/ void case3(){ struct student s[N]; float a[N]={0}; /* 从键盘输入10个学生的以上内容 */ scan_con(s,N) ; /* 输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩 */ print_con(s); /* 输出三门课程的平均分数最高的学生的学号、姓名及其平均分 */ print_aver(s,N); /* 将10个学生按照平均分数从高到低进行排序 */ sort_aver(s,N); printf("\n"); printf("按任意键返回主菜单:\n"); getch(); system("cls"); zhu(); } /*****************************************************************************/ void case4(){ struct student s[N]; FILE *fp; /* 从键盘输入10个学生的以上内容,存入文件stud.dat,关闭文件 */if((fp=fopen("stud.dat","w"))==NULL){printf("FILE OPEN ERROR!\n");exit(0);}scan_con_1(fp,s,N);/* 打开stud.dat文件,将数据读出,查看是否正确写入,关闭文件。 */print_con_1(fp,s);fclose(fp);/*打开文件stud.dat文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.dat中。 */if((fp=fopen("stud.dat","r"))==NULL){printf("FILE OPEN ERROR!\n");exit(0);}print_aver_con(fp,s,N);fclose(fp);print_aver_con2(fp,s);printf("\n");printf("按任意键返回主菜单:\n");getch();system("cls");zhu();}/*****************************************************************************/void case5(){ int s,m,j,i=0; char k[8]; linklist l,h,p; NODE stu; printf("请输入学生人数\n"); scanf("%d",&m); l=create(m); pt(l); printf("请根据学号或姓名修改数据:\n1.学号\t2.姓名\n"); printf("你的选择:\t"); scanf("%d",&j); if(j>=1&&j<=2){ switch(j){ case 1:{ printf("\n请输入要删除的学号\t"); scanf("%d",&s); printf("\n"); h=del_xh(l,s); pt(h); printf("\n"); }break; case 2:{ printf("\n请输入要删除的姓名\t"); scanf("%s",k); printf("\n"); h=del_xm(l,k); pt(h); printf("\n");}break; } } p=h; while(p!=NULL) { i++; p=p->next; } if(i4) {printf("输错次数大于6次\n"); getch(); exit(0);} system("cls"); zhu();//密码正确时进入系统 return 0;}/*****************************************************************************/ void zhu(){ int i; while(1){ printf("\t****************************************************************\n"); printf("\t\t1: 根据条件进行学生成绩排名\n\t\t2:用指针优化学生成绩排名\n\t\t3:学生成绩单制作\n\t\t"); printf("4:学生成绩文件管理\n\t\t5:修改学生信息(链表)\n\t\t6: 查看版本信息\n\t\t7: 离开\n"); printf("\t****************************************************************\n\n"); printf("\t\t请选择:\t"); scanf("%d",&i); switch(i) { case 1: system("cls");case1();break; case 2: system("cls");case2();break; case 3: system("cls");case3();break; case 4: system("cls");case4();break; case 5: system("cls");case5();break; case 6: system("cls");case6();break; case 7: exit(0);break; default: {system("cls"); printf("\n输入错误,请重新输入\n"); printf("按任意键返回主菜单:\n"); getch(); system("cls"); zhu(); } } } } /*****************************************************************************/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序不能跳转链接怎么办?(小程序链接不能转发怎么办)
下一篇:学生信息管理系统1.0
相关文章

 发表评论

暂时没有评论,来抢沙发吧~