#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node { char sclass[10]; char scourse[10]; char sno[10]; char sname[10]; char ssex[2]; int score; struct node *next; }student; typedef student *linklist; student *head; void display(); //函数声明 student *init() //建立一个空的单链表 { return NULL; } void shuru() //输入学生信息函数 { linklist p,q; int count=0; char flag='1'; q=(linklist)malloc(sizeof(student)); p=head=NULL; while(flag=='1') { printf("\n"); printf("请输入学生的学号: "); scanf("%s",&q->sno); printf("请输入学生的班级: "); scanf("%s",&q->sclass); printf("请输入学生的课程: "); scanf("%s",&q->scourse); printf("请输入学生的姓名: "); scanf("%s",&q->sname); printf("请输入学生的性别: "); scanf("%s",&q->ssex); printf("请输入学生的成绩: "); scanf("%d",&q->score); setbuf(stdin,NULL); if(head==NULL) { head=q; p=head; } else { p->next=q; p=q; } q=(linklist)malloc(sizeof(student)); printf("按1继续输入,否则退出\n"); flag=getch(); setbuf(stdin,NULL); } free(q); printf("输入完毕!\n "); p->next=NULL; } void charu() //插入学生信息函数 { int j=0,i; linklist p,q; p=head; printf("请输入要插入的位置: "); scanf("%d",&i); if(i<0) printf("输入位置不正确!\n"); else { while (p&&i!=j) { p=p->next;j++; } if(!p&&i!=0) printf("未找到该结点不能插入!\n"); else { q=(linklist)malloc(sizeof(student)); printf("请输入学生的学号: "); scanf("%s",&q->sno); printf("请输入学生的班级: "); scanf("%s",&q->sclass); printf("请输入学生的课程: "); scanf("%s",&q->scourse); printf("请输入学生的姓名: "); scanf("%s",&q->sname); printf("请输入学生的性别: "); scanf("%s",&q->ssex); printf("请输入学生的成绩: "); scanf("%d",&q->score); if(i==0) { q->next=head; head=q; } else { q->next=p->next; p->next=q; } } } } void xiugai() //修改学生信息函数 { linklist q; int m=0; char sno[15]; q=head; printf("请输入要修改的学生学号:"); scanf("%s",&sno); if(!q) printf("修改失败,没有学生信息!\n"); else { while(q!=NULL) { if(strcmp(q->sno,sno)==0) { printf("请输入学生的班级: "); scanf("%s",&q->sclass); printf("请输入学生的课程: "); scanf("%s",&q->scourse); printf("请输入学生的学号: "); scanf("%s",&q->sno); printf("请输入学生的姓名: "); scanf("%s",&q->sname); printf("请输入学生的性别: "); scanf("%s",&q->ssex); printf("请输入学生的成绩: "); scanf("%d",&q->score); setbuf(stdin,NULL); m=1; printf("修改成功!\n\n"); break; } else q=q->next; } if(m==0) printf("修改失败,没有该学生信息!\n\n"); } } void shanchu() //删除学生信息函数 { linklist pre,q; char sno[12]; pre=head; q=head; printf("请输入要删除的学生学号:"); scanf("%s",&sno); if(!q) printf("没有学生信息,无法删除!\n\n"); else { while(q) { if(strcmp(q->sno,sno)==0) { if(q==head) { head=q->next; free(q); } else { pre->next=q->next; free(q); } printf("删除成功!\n"); break; } else { pre=q; q=q->next; } } } } void chaxun() //查询学生信息函数 { linklist p; int m=0; char sno[15]; p=head; printf("请输入需查询的学生学号:"); scanf("%s",&sno); if(!p) printf("没有学生信息,无法查询!\n\n"); else { while(p) { if(strcmp(p->sno,sno)==0) { printf("班级:%s\n",p->sclass); printf("课程:%s\n",p->scourse); printf("学号:%s\n",p->sno); printf("姓名:%s\n",p->sname); printf("性别:%s\n",p->ssex); printf("成绩:%d\n",p->score); m=1; break; } else p=p->next; } if(m==0) printf("查询失败,没有该生信息!\n"); } } void paixu() //对学生成绩排序 { linklist p,q,r; student temp; r=head; if(r==NULL) printf("没有学生成绩,请先添加学生成绩!\n"); else { while(r) { p=r; q=r->next; while(q) { if(p->score < q->score) { strcpy(temp.sclass,p->sclass); strcpy(temp.scourse,p->scourse); strcpy(temp.sno,p->sno); strcpy(temp.sname,p->sname); strcpy(temp.ssex,p->ssex); temp.score=p->score; strcpy(p->sclass,q->sclass); strcpy(p->scourse,q->scourse); strcpy(p->sno,q->sno); strcpy(p->sname,q->sname); strcpy(p->ssex,q->ssex); p->score=q->score; strcpy(q->sclass,temp.sclass); strcpy(q->scourse,temp.scourse); strcpy(q->sno,temp.sno); strcpy(q->sname,temp.sname); strcpy(q->ssex,temp.ssex); q->score=temp.score; } q=q->next; } r=r->next; } printf("****排序完毕,按由大到小的成绩排序!"); display(); } } void display() //输出学生信息函数 { student *p; p=head; if(!p) printf("暂无学生成绩!\n"); else { printf("学生成绩为:\n"); while(p) { printf("班级:%s ",p->sclass); printf("课程:%s ",p->scourse); printf("学号:%s ",p->sno); printf("姓名:%s ",p->sname); printf("性别:%s ",p->ssex); printf("成绩:%d ",p->score); p=p->next; } } } void baocun(){//保存当前学生信息(清除文件信息写入函数) FILE *fp1; student *p; int i; if((fp1=fopen("D:\\a.txt","w"))==NULL) return ; for(i=0; i<10; i++) { fprintf(fp1,"%s %s %s %s %s %d",p->sclass, p->scourse,p->sno,p->sname,p->ssex,p->score); } fclose(fp1); printf("保存成功\n"); } void menu() { int choose; printf("**************学生信息管理系统*****************\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("*----------- 0.退出系统-----------------------*\n"); printf("***********************************************\n"); printf("\n"); printf("请输入你的选择:"); scanf("%d",&choose); switch(choose) { case 1:shuru();break; case 2:charu();break; case 3:xiugai();break; case 4:shanchu();break; case 5:chaxun();break; case 6:paixu();break; case 7:display();break; case 8:baocun();break; case 0:exit(0);break; default:printf("请输入正确数字!\n"); } menu(); } int main() { head=init(); menu(); return 0; }