学生信息管理系统2.0

来源:互联网 发布:json乱码转换成中文 编辑:程序博客网 时间:2024/05/17 14:14

奋斗奋斗奋斗

/*@copyright from LZY. @time:23.11.2016.@name:学生信息管理系统@界面:DOS.@版本:2.0 */#include<stdio.h>#include<stdlib.h>#include<process.h>#include<string.h>#include<conio.h> #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;i<n;i++)     scanf("%d",&a[i]);}/*****************************************************************************/void sort(int a[],int n, char style){ int i,j,t;if(style=='a') {  for(i=0;i<n-1;i++)   for(j=0;j<n-1-i;j++)   {if(a[j]>a[j+1])     {t=a[j];a[j]=a[j+1];a[j+1]=t;}   }   printf("按照升序排列的结果:\n");   for(i=0;i<n;i++)    printf("%d\t",a[i]);    printf("\n");    }      if(style=='d') {     for(i=0;i<n-1;i++)       for(j=0;j<n-1-i;j++)       {          if(a[j+1]>a[j])         { t=a[j];a[j]=a[j+1];a[j+1]=t;}       }    printf("按照降序排列的结果:\n");    for(i=0;i<n;i++)    printf("%d\t",a[i]);    printf("\n");       }}/*****************************************************************************/void scan_1(int a[],int n){    int i;printf("定义一个数组stu[10]存放10个学生的成绩,从键盘输入数据\n ");    for(i=0;i<n;i++)     scanf("%d",&a[i]);}/*****************************************************************************/void sort_stu (int a[],int n)    {        int i,j,t;printf("\n将成绩数组按照从高到低进行排序\n");        for(i=0;i<n-1;i++)         for(j=0;j<n-1-i;j++)         if(a[j+1]>a[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;i<n;i++)         printf("%d\t",a[i]);         printf("\n");    }/*****************************************************************************/void  scan_str(char str[])    {       int i=0;        printf("输入字符串‘student score’ ,复制该字符串并输出\n");         fflush(stdin);        gets( str);        printf("输出该字符串\n");        printf("%s",str);        printf("\n");    }    /*****************************************************************************/   void  scan_con(struct student *p,int n){    int i;    printf("格式:姓名,学号,成绩(数学,语文,英语)\n\n");     for(i=0;i<n;i++,p++)    {   printf("请输入第%d个学生数据\n",i+1);    scanf("%s%d%f%f%f",(*p).name,&(*p).No,&(*p).math,&(*p).Chinese,&(*p).English);    }    }/*****************************************************************************/int  Max1(struct student *p){int i,a;float max1=p->math;  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;i<n;i++){         p[i].ave=(p+i)->math+(p+i)->Chinese+(p+i)->English; }         for(i=0;i<n;i++){          p[i].ave=(1.0/3.0)*p[i].ave;         }         max=p[0].ave;      for(i=0;i<n;i++){if(p[i].ave>max)   {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;i<n-1;i++)             for(j=0;j<n-1-i;j++)              {                if(p[j+1].ave>p[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;i<n;i++)            printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",(p+i)->No,(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;i<n;i++,p++)    {    fprintf(stdout,"请输入第%d个学生数据(姓名,学号,成绩(数学,语文,英语))\n",i+1);    fscanf(stdin,"%s%d%f%f%f",(*p).name,&(*p).No,&(*p).math,&(*p).Chinese,&(*p).English);    }    }/*****************************************************************************/void  print_con_1(FILE *fp,struct student *p)    {       int m=0,c=0,e=0;    m=Max1(p);    c=Max2(p);    e=Max3(p);    fprintf(stdout,"\n\n输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩\n");     fprintf(stdout,"max math:");          fprintf(stdout,"%s\t%d\t%.2f\n",(p+m)->name,(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;i<n;i++){         p[i].ave=(p+i)->math+(p+i)->Chinese+(p+i)->English; }         for(i=0;i<n;i++){          p[i].ave=(1.0/3.0)*p[i].ave;         }      for(i=0;i<n;i++){if(p[i].ave>p[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;i<n;i++){         p[i].ave=(p+i)->math+(p+i)->Chinese+(p+i)->English; }         for(i=0;i<n;i++){          p[i].ave=(1.0/3.0)*p[i].ave;         }            for(i=0;i<n-1;i++)             for(j=0;j<n-1-i;j++)              {                if(p[j+1].ave>p[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;i<n;i++)            fprintf(stdout,"%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",(p+i)->No,(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;i<n;i++)   {   f=p;      p=(linklist) malloc(sizeof(NODE));/*申请空间*/     scanf("%s%d%f%f%f",(*p).name,&(*p).No,&(*p).math,&(*p).Chinese,&(*p).English);   f->next=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(i<m){   printf("请输入新的数据:\t\n");   printf("格式:姓名,学号,成绩\n");   scanf("%s%d%f%f%f",&stu.name,&stu.No,&stu.math,&stu.Chinese,&stu.English);    h=insert(h,&stu);   pt(h);   }      printf("按任意键返回主菜单:\n");   getch();  system("cls");  zhu();    }/*****************************************************************************/ void case6(){printf("\n\n\n\t****************************************************************\n");printf("\t\tcopyright from liangZY\n");printf("\t\t学号:15115011040 班级:计科一班\n");printf("\t****************************************************************\n");printf("按任意键返回主菜单:\n");getch();system("cls");zhu();  } /*****************************************************************************/  int main(){   int j;     printf("\n\n\n\t=======================================================\n");  printf("\t=======================================================\n");  printf("\t**************欢迎进入学生管理系统*********************\n");  printf("\t=======================================================\n");  printf("\t=======================================================\n\n\n");charf[]="888888";    printf("请输入密码并以回车键结束:");      scanf("%s",f);  if(strcmp(f,"15115011040")==0)   {    system("cls");  zhu();//密码正确时进入系统  }  else    j=1;   printf("密码错误!请重新选择按键!\n");  printf("请输入第2次\t");  scanf("%s",f);  while(strcmp(f,"149074303")!=0&&j<=4)  {  printf("密码错误!请重新选择按键!\n");  printf("请输入第%d次\t",j+2);scanf("%s",f); j++;  }  if(j>4) {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();  } }  }  } /*****************************************************************************/ 

1 0