学生信息管理系统

  • 格式:doc
  • 大小:15.29 KB
  • 文档页数:17

第一种:#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>struct student{int id;char name[10];int age;char sex[10];char birthady[20];int tel;char nativeplace[50];}st[50];int i=0;void shuru() {char a;do{printf("\n请输入学号:");scanf("%d",&st[i].id);fflush(stdin);printf("\n请输入姓名:");gets(st[i].name);printf("\n") ;printf("请输入年龄:");scanf("%d",&st[i].age);fflush(stdin);printf("\n请输入姓别:");gets(st[i].sex);fflush(stdin);printf("\n请输入生日:");gets(st[i].birthady);printf("\n请输入电话:");scanf("%d",&st[i].tel);fflush(stdin);printf("\n请输入籍贯:");gets(st[i].nativeplace);printf("\n是否继续输入另外一个学生信息?(y/n)"); fflush(stdin);a=getchar();i++;}while(a=='y' && i<=50);void xianshi(){int j;printf("\t学号\t姓名\t年龄\t性别\t生日\t\t电话\t籍贯\n");for(j=0;j<i;j++)printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].tel,st[j].nativepla ce);}void paixu() //按年龄从大到小排序函数{int j,k;int temp;for(j=0;j<i;j++){for(k=0;k<i-1-j;k++){if(st[k].age<st[k+1].age){temp=st[k].age;st[k].age=st[k+1].age;st[k+1].age=temp;}}}xianshi(); //排序后输出}void chazhao(){int m;char name[20],b;do{printf("\n请输入想查找的学生姓名:");fflush(stdin);gets(name);for(m=0;m<i;m++){if(strcmp(name,st[m].name)==0){printf("\n\t您查找的学生在第%d个位置找到了!!!\n",m+1);break;}}if(m>=20)printf("\n\t没有找到这个学生!!!\n");else{printf("\t学号\t姓名\t年龄\t性别\t生日\t\t电话\t籍贯\n");printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].tel,st[m].nativepla ce);}printf("\n是否查找另一个学生的信息?(y/n)");fflush(stdin);b=getchar();}while(b=='y');}void shanchu(){char name[20],c;int a,b;do{printf("\n请输入要删除的学生姓名:\n");fflush(stdin);gets(name);for(a=0;a<i;a++){if(strcmp(name,st[a].name)==0)break;}for(b=a;b<i;b++)st[b]=st[b+1];if(a>i)printf("\t没有找到这个学生!!!\n");else{i--;xianshi();}printf("\n是否继续删除另一个学生信息?(y/n) ");fflush(stdin);c=getchar();}while(c=='y');}void charu(){shuru();paixu();}void main() //主函数{int change;do{system("cls");printf("============================学生信息管理系统===================================\n");printf("\t\t一:输入学生信息\n");printf("\t\t二:显示学生信息\n");printf("\t\t三:查找学生信息\n");printf("\t\t四:删除学生信息\n");printf("\t\t五:插入学生信息\n");printf("\t\t六:退出程序\n");fflush(stdin);printf("\t\t请输入功能选项:");scanf("%d",&change);switch(change){case 1:shuru(); break;case 2:xianshi(); break;case 3:chazhao(); break;case 4:shanchu(); break;case 5:charu(); break;case 6:break;}getch();}while(change!=6);}第二种#include<stdio.h>#include<conio.h>#include<string.h>typedef struct STUDENT{char studentNumber[10];/*学生学号*/ char studentName[20];/*学生姓名*/char studentSEX[10];/*学生性别*/char className[20];/*班级名称*/float mark1;/*第1门成绩*/float mark2;/*第2门成绩*/float mark3;/*第3门成绩*/float mark4;/*第4门成绩*/float mark5;/*第5门成绩*/struct STUDENT *next;}STUDENT;STUDENT *headLink;/*链表表头指针*//*以下是函数声明*/void ReadInfoFormFile(void);void DesplayMenu(void);void CreateHeadLink(void);STUDENT *MallocNode(void);void GetInformation(STUDENT *t);void OutputInformation(void);void DesplayInfoBystudentName(void); void DesplayInfoBystudentNumber(void); void DesplayOneNode(STUDENT *t);void InsertOneNode(STUDENT *t);void DeleteNodeBystudentNumber(void); void ChangeMarkByName(void);void ChangeMarkByNumber(void);void SaveLinkToFile(void);void DesplayMarkSegment(void);void CompositorByTotalMark(void);int choose;/*用于接受用户的选择*//*主函数*/void main(){CreateHeadLink();ReadInfoFormFile();DesplayMenu();}/************************************函数功能:从文件中读学生信息到链表中************************************/void ReadInfoFormFile(void){FILE *fp;STUDENT *p;fp=fopen("student.txt","r");if(!fp){printf("文件不存在\n");return;}p=MallocNode();while(fscanf(fp,"%s%s%s%s%f%f%f",p->studentNumber,p->studentSEX,p->studentName,p ->className,&(p->mark1),&(p->mark2),&(p->mark3),&(p->mark4),&(p->mark5))>0) {InsertOneNode(p);p=MallocNode();}fclose(fp);}/************************************函数功能:显示菜单,根据用户的输入完成相应的功能************************************/void DesplayMenu(void){STUDENT *p;printf("-------请选择相应功能------------\n\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("| 11 退出 |\n\n");scanf("%d",&choose);/*取得用户的选择*/switch(choose){case 1:OutputInformation();/*显示所有学生的信息*/break;case 2:DesplayInfoBystudentName();break;case 3:DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/ break;case 4:p=MallocNode();/*先申请一个新结点*/GetInformation(p);/*要求用户输入信息到新结点中*/InsertOneNode(p);/*将新结点加到链表中*/break;case 5:DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/ break;case 6:ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/break;case 7:ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/break;case 8:SaveLinkToFile();/*保存数据*/break;case 9:DesplayMarkSegment();/*显示各分数段的学生成绩*/break;case 10:CompositorByTotalMark();break;case 11:SaveLinkToFile();/*保存数据后再退出*/free(headLink);exit(1);break;default:break;}DesplayMenu();/*递归调用*/}/************************************ 函数功能:建立链表表头************************************/ void CreateHeadLink(void){STUDENT *p;p=(STUDENT*)malloc(sizeof(STUDENT)); headLink=p;p->next=NULL;}/************************************ 函数功能:申请一个新结点,并将其初始化************************************/ STUDENT *MallocNode(void){STUDENT *p;int i;p=(STUDENT*)malloc(sizeof(STUDENT)); if(p==NULL)return NULL;for(i=0;i<10;i++)p->studentNumber[i]='\0';for(i=0;i<20;i++)p->studentName[i]='\0';for(i=0;i<10;i++)p->studentSEX[i]='\0';for(i=0;i<20;i++)p->className[i]='\0';p->mark1=0.0;p->mark2=0.0;p->mark3=0.0;p->mark4=0.0;p->mark5=0.0;p->next=NULL;return p;}/************************************ 函数功能:取得用户输入的学生信息************************************/void GetInformation(STUDENT *t){printf("请输入学生学号:\n");scanf("%s",t->studentNumber);printf("请输入学生姓名:\n");scanf("%s",t->studentName);printf("请输入学生性别:\n");scanf("%s",t->studentSEX);printf("请输入该生所在班级:\n");scanf("%s",t->className);printf("请输入第1门成绩:\n");scanf("%f",&(t->mark1));printf("请输入第2门成绩:\n");scanf("%f",&(t->mark2));printf("请输入第3门成绩:\n");scanf("%f",&(t->mark3));printf("请输入第4门成绩:\n");scanf("%f",&(t->mark4));printf("请输入第5门成绩:\n");scanf("%f",&(t->mark5));}/************************************函数功能:在链表的结尾处增加一个结点************************************/void InsertOneNode(STUDENT *t){STUDENT *p;p=headLink;while(p->next){p=p->next;}p->next=t;}/************************************函数功能:根据用户输入的学生姓名显示该学生的信息************************************/void DesplayInfoBystudentName(void){STUDENT *p;char studentName[20];char flag=0;p=headLink->next;printf("请输入学生姓名:\n");scanf("%s",studentName);while(p){if(strcmp(p->studentName,studentName)==0){printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");DesplayOneNode(p);flag=1;break;}p=p->next;}if(!flag)printf("对不起,不存在姓名为 %s 的学生\n",studentName);}/************************************函数功能:根据用户输入的学号显示该学生的信息************************************/void DesplayInfoBystudentNumber(void){STUDENT *p;char studentNumber[10];char flag=0;p=headLink->next;printf("请输入学生学号:\n");scanf("%s",studentNumber);while(p){if(strcmp(p->studentNumber,studentNumber)==0){printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");DesplayOneNode(p);flag=1;break;}p=p->next;}if(!flag)printf("对不起,不存在学号为 %s 的学生\n",studentNumber);}/************************************函数功能:输出一个结点的信息************************************/void DesplayOneNode(STUDENT *t){printf("%s\t",t->studentNumber);printf("%s\t",t->studentName);printf("%s\t",t->studentSEX);printf("%s\t",t->className);printf("%.2f\t",t->mark1);printf("%.2f\t",t->mark2);printf("%.2f\t",t->mark3);printf("%.2f\t",t->mark4);printf("%.2f\t",t->mark5);printf("%.2f\t",t->mark1+t->mark2+t->mark3+t->mark4+t->mark5);printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3+t->mark4+t->mark5)/5); }/************************************函数功能:根据用户输入的学号删除该学生************************************/void DeleteNodeBystudentNumber(void){char studentNumber[10];STUDENT *p,*q;char flag=0;printf("请输入要删除的学生学号:");scanf("%s",studentNumber);p=headLink;q=headLink->next;while(q){if(strcmp(q->studentNumber,studentNumber)==0){p->next=q->next;free(q);flag=1;break;}p=p->next;q=q->next;}if(!flag){printf("不存在该学号的学生\n");return;}printf("成功删除\n");}/************************************函数功能:显示所有学生的信息************************************/void OutputInformation(void){STUDENT *p;p=headLink->next;if(p==NULL){printf("现在没有学生信息,请先输入学生信息\n\n");return;}printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");while(p){DesplayOneNode(p);p=p->next;}}/************************************函数功能:根据输入的姓名修改成绩************************************/void ChangeMarkByName(void){STUDENT *p;char studentName[20];char flag=0;float mark1,mark2,mark3,mark4,mark5;p=headLink->next;printf("请输入学生姓名:\n");scanf("%s",studentName);while(p){if(strcmp(p->studentName,studentName)==0){printf("请输入新的第1门成绩:\n");scanf("%f",&mark1);printf("请输入新的第2门成绩:\n");scanf("%f",&mark2);printf("请输入新的第3门成绩:\n");scanf("%f",&mark3);printf("请输入新的第4门成绩:\n");scanf("%f",&mark4);printf("请输入新的第5门成绩:\n");scanf("%f",&mark5);p->mark1=mark1;p->mark2=mark2;p->mark3=mark3;p->mark4=mark4;p->mark5=mark5;flag=1;printf("修改成功\n");break;}p=p->next;}if(!flag)printf("对不起,不存在姓名为 %s 的学生\n",studentName); }/************************************函数功能:根据输入的学号修改成绩************************************/void ChangeMarkByNumber(void){STUDENT *p;char studentNumber[20];char flag=0;float mark1,mark2,mark3,mark4,mark5;p=headLink->next;printf("请输入学生学号:\n");scanf("%s",studentNumber);while(p){if(strcmp(p->studentNumber,studentNumber)==0){printf("请输入新的第1门成绩:\n");scanf("%f",&mark1);printf("请输入新的第2门成绩:\n");scanf("%f",&mark2);printf("请输入新的第3门成绩:\n");scanf("%f",&mark3);printf("请输入新的第4门成绩:\n");scanf("%f",&mark4);printf("请输入新的第5门成绩:\n");scanf("%f",&mark5);p->mark1=mark1;p->mark2=mark2;p->mark3=mark3;p->mark4=mark4;p->mark5=mark5;flag=1;printf("修改成功\n");break;}p=p->next;}if(!flag)printf("对不起,不存在学号为 %s 的学生\n",studentNumber);}/************************************函数功能:保存链表数据到文件中************************************/void SaveLinkToFile(void){STUDENT *p;FILE *fp;p=headLink->next;if(p==NULL){printf("现在没有学生信息,请先输入学生信息\n\n");return;}fp=fopen("student.txt","w+");if(!fp){printf("文件不存在\n");return;}while(p){fprintf(fp,"%s %s %s %s %f %f %f %f %f\n",p->studentNumber,p->studentName,p->stu dentSEX,p->className,p->mark1,p->mark2,p->mark3,p->mark4,p->mark5);p=p->next;}fclose(fp);}/************************************函数功能:显示优秀和不及格学生成绩************************************/void DesplayMarkSegment(void){STUDENT *p;int count=0;p=headLink->next;printf("60分以下(不及格)的学生成绩如下:\n");printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");while(p){if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10)))| |(6>((int)(p->mark4/10)))||(6>((int)(p->mark5/10))))/*只要有一科不及格就认为该生不及格*/{count++;DesplayOneNode(p);}p=p->next;}printf("不及格的学生一共有%d人\n",count);p=headLink->next;printf("成绩优秀的学生成绩如下:\n");printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");count=0;while(p){if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10) ))&&(8<=((int)(p->mark4/10)))&&(8<=((int)(p->mark5/10)))){count++;DesplayOneNode(p);}p=p->next;}printf("成绩优秀的学生一共有%d人\n",count);}/************************************函数功能:按总成绩排序************************************/void CompositorByTotalMark(void){STUDENT exchange,*r,*p,*q;r=headLink->next;if(r==NULL){printf("现在还没学生信息,请先输入学生信息\n");return;}while(r)/*两层while循环实现排序*/{p=r;q=r->next;while(q){if((q->mark1+q->mark2+q->mark3+q->mark4+q->mark5)>(p->mark1+p->mark2+p->mark3+p->mark4+p->mark5)){strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/ strcpy(exchange.studentName,q->studentName);strcpy(exchange.className,q->className);exchange.mark1=q->mark1;exchange.mark2=q->mark2;exchange.mark3=q->mark3;exchange.mark4=q->mark4;exchange.mark5=q->mark5;strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/strcpy(q->studentName,p->studentName);strcpy(q->studentSEX,p->studentSEX);strcpy(q->className,p->className);q->mark1=p->mark1;q->mark2=p->mark2;q->mark3=p->mark3;q->mark4=p->mark4;q->mark5=p->mark5;strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/ strcpy(p->studentName,exchange.studentName);strcpy(p->className,exchange.className);p->mark1=exchange.mark1;p->mark2=exchange.mark2;p->mark3=exchange.mark3;p->mark4=exchange.mark4;p->mark5=exchange.mark5;}q=q->next;}r=r->next;}OutputInformation(); }。