#include #include #include #include #include struct student { char id[12]; char name[20]; char sex[3]; int age; char note[100]; struct student *next; }; void setposition(int x,int y) { HANDLE win = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos = {x,y}; SetConsoleCursorPosition(win,pos); } void menu() { system("cls"); printf("\n\n\n\n\n"); printf("\t\t|-------------班级档案管理系统----------------|\n"); printf("\t\t|\t a.学生基本信息录入 |\n"); printf("\t\t|\t b.学生基本信息显示 |\n"); printf("\t\t|\t c.学生基本信息保存 |\n"); printf("\t\t|\t d.学生基本信息删除 |\n"); printf("\t\t|\t e.学生基本信息修改 |\n"); printf("\t\t|\t f.学生基本信息查询 |\n"); printf("\t\t|\t g.退出系统 |\n"); printf("\t\t|---------------------------------------------|\n"); } void Rank() { FILE *fp; void R_Save(struct student *phead); fp=fopen("D:\\学生信息.txt","r"); struct student *phead1=NULL; struct student *pEnd1,*pNew1,*pNow1; pNew1=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew1->id); fscanf(fp,"%s",pNew1->name); fscanf(fp,"%s",pNew1->sex); fscanf(fp,"%d",&pNew1->age); fscanf(fp,"%s",pNew1->note); pNew1->next=NULL; pEnd1=pNew1; phead1=pNew1; while(!feof(fp)) { pNew1=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew1->id); fscanf(fp,"%s",pNew1->name); fscanf(fp,"%s",pNew1->sex); fscanf(fp,"%d",&pNew1->age); fscanf(fp,"%s",pNew1->note); pNew1->next=NULL; pEnd1->next=pNew1; pEnd1=pNew1; } pNow1 = phead1; while(pNow1->next->next!=NULL) { pNow1 = pNow1->next; } pNow1->next=NULL; fclose(fp); struct student *i,*j,pTemp; if(phead1 == NULL) return; for(i = phead1; i->next!=NULL;i = i->next) { for(j = phead1; j->next!=NULL; j = j->next) { if(strcmp(j->id , j->next->id)>0) { strcpy(pTemp.id,j->id); strcpy(j->id,j->next->id); strcpy(j->next->id,pTemp.id); strcpy(pTemp.name,j->name); strcpy(j->name,j->next->name); strcpy(j->next->name,pTemp.name); strcpy(pTemp.sex,j->sex); strcpy(j->sex,j->next->sex); strcpy(j->next->sex,pTemp.sex); strcpy(pTemp.note,j->note); strcpy(j->note,j->next->note); strcpy(j->next->note,pTemp.note); pTemp.age=j->age; j->age=j->next->age; j->next->age=pTemp.age; } } } R_Save(phead1); } struct student* Create() { /*void Save(struct student *phead);*/ struct student* phead=NULL; struct student *pEnd,*pNew; pNew=(struct student*)malloc(sizeof(struct student)); printf("\t\t\t######请输入学生基本信息######\n"); printf("\t\t\t学号:"); scanf("%s",pNew->id); printf("\t\t\t姓名;"); scanf("%s",pNew->name); printf("\t\t\t性别;"); scanf("%s",pNew->sex); printf("\t\t\t年龄;"); scanf("%d",&pNew->age); printf("\t\t\t备注:");scanf("%s",pNew->note); pNew->next=NULL; pEnd=pNew; phead=pNew; char key; printf("\t\t\t是否继续录入(y/任意):\n"); key = getch(); while(key=='y') { pNew=(struct student*)malloc(sizeof(struct student)); printf("\t\t\t#####请输入学生基本信息######\n"); printf("\t\t\t学号:"); scanf("%s",pNew->id); printf("\t\t\t姓名;"); scanf("%s",pNew->name); printf("\t\t\t性别;"); scanf("%s",pNew->sex); printf("\t\t\t年龄;"); scanf("%d",&pNew->age); printf("\t\t\t备注:");scanf("%s",pNew->note); pNew->next=NULL; pEnd->next=pNew; pEnd=pNew; printf("\t\t\t是否继续录入(y/任意):\n"); key = getch(); } struct student *pTemp; pTemp=phead; FILE *fp; if((fp=fopen("D:\\学生信息.txt","a"))!=NULL) { while(pTemp!=NULL) { fprintf(fp,"%s ",pTemp->id); fprintf(fp,"%s ",pTemp->name); fprintf(fp,"%s ",pTemp->sex); fprintf(fp,"%d ",pTemp->age); fprintf(fp,"%s ",pTemp->note); pTemp=pTemp->next; } } system("pause"); fclose(fp); } void Print() { printf("\t\t\t******学生基本信息*******\n"); FILE *fp; fp=fopen("D:\\学生信息.txt","r+"); char a[4][100]; int b; fscanf(fp,"%s%s%s%d%s",a[0],a[1],a[2],&b,a[3]); while(!feof(fp)) { printf("学号:%s\n",a[0]); printf("姓名;%s\n",a[1]); printf("性别;%s\n",a[2]); printf("年龄;%d\n",b); printf("备注:%s\n\n",a[3]); fscanf(fp,"%s%s%s%d%s",a[0],a[1],a[2],&b,a[3]); } fclose(fp); system("pause"); } void Save(struct student *phead) { struct student *pTemp; pTemp=phead; FILE *fp; if(pTemp!=NULL) { if((fp=fopen("D:\\学生信息.txt","w"))!=NULL) { while(pTemp!=NULL) { fprintf(fp,"%s ",pTemp->id); fprintf(fp,"%s ",pTemp->name); fprintf(fp,"%s ",pTemp->sex); fprintf(fp,"%d ",pTemp->age); fprintf(fp,"%s ",pTemp->note); pTemp=pTemp->next; } fclose(fp); } else printf("文件打开失败\n"); } Rank(); system("pause"); } void R_Save(struct student *phead) { struct student *pTemp; pTemp=phead; FILE *fp; if(pTemp!=NULL) { if((fp=fopen("D:\\学生信息.txt","w"))!=NULL) { while(pTemp!=NULL) { fprintf(fp,"%s ",pTemp->id); fprintf(fp,"%s ",pTemp->name); fprintf(fp,"%s ",pTemp->sex); fprintf(fp,"%d ",pTemp->age); fprintf(fp,"%s ",pTemp->note); pTemp=pTemp->next; } fclose(fp); } else printf("文件打开失败\n"); } } struct student* Delete() { char s[20]; struct student *pTemp,*pre; FILE *fp; fp=fopen("D:\\学生信息.txt","r"); struct student *phead=NULL; struct student *pEnd,*pNew,*pNow; pNew=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew->id); fscanf(fp,"%s",pNew->name); fscanf(fp,"%s",pNew->sex); fscanf(fp,"%d",&pNew->age); fscanf(fp,"%s",pNew->note); pNew->next=NULL; pEnd=pNew; phead=pNew; while(!feof(fp)) { pNew=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew->id); fscanf(fp,"%s",pNew->name); fscanf(fp,"%s",pNew->sex); fscanf(fp,"%d",&pNew->age); fscanf(fp,"%s",pNew->note); pNew->next=NULL; pEnd->next=pNew; pEnd=pNew; } pNow = phead; while(pNow->next->next!=NULL) { pNow = pNow->next; } pNow->next=NULL; printf("\t\t\t请输入学号:"); renew: pre=pTemp=phead; int i=1; scanf("%s",s); while(strcmp(pTemp->id,s)) { i++; pTemp=pTemp->next; if(pTemp==NULL) { printf("\t\t\t学号输入有误!!!\n"); printf("\t\t\t请重新输入:"); goto renew; } } if(i>1) { pre=pTemp=phead; int j; for(j=1;jnext; } pre->next=pTemp->next; free(pTemp); } else { pTemp=phead; phead=phead->next; free(pTemp); } fclose(fp); system("pause"); return phead; } void search() { struct student *pTemp; FILE *fp; fp=fopen("D:\\学生信息.txt","r"); struct student *phead=NULL; struct student *pEnd,*pNew,*pNow; pNew=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew->id); fscanf(fp,"%s",pNew->name); fscanf(fp,"%s",pNew->sex); fscanf(fp,"%d",&pNew->age); fscanf(fp,"%s",pNew->note); pNew->next=NULL; pEnd=pNew; phead=pNew; while(!feof(fp)) { pNew=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew->id); fscanf(fp,"%s",pNew->name); fscanf(fp,"%s",pNew->sex); fscanf(fp,"%d",&pNew->age); fscanf(fp,"%s",pNew->note); pNew->next=NULL; pEnd->next=pNew; pEnd=pNew; } pNow = phead; while(pNow->next->next!=NULL) { pNow = pNow->next; } pNow->next=NULL; fclose(fp); char x; char s[20]; printf("\t\t\t请选择查询方式\n1.学号查询\n2.姓名查询\n3.性别查询\n4.年龄查询\n"); RE: x=getch(); fflush(stdin); //清空缓冲区 RE1: pTemp=phead; int Y=0; int flag = 1; switch(x) { case'1': printf("\t\t\t请输入学号:"); break; case'2': printf("\t\t\t请输入姓名:"); break; case'3': printf("\t\t\t请输入性别:"); break; case'4': printf("\t\t\t请输入年龄:"); scanf("%d",&Y); goto jump; break; default: printf("\t\t\t输入有误!\n\t\t\t请重新选择:\n"); goto RE; } scanf("%s",s); jump: while(pTemp!=NULL) { switch(x) { case'1': if(strcmp(s,pTemp->id)==0) { printf("学号:%s\n",pTemp->id); printf("姓名;%s\n",pTemp->name); printf("性别;%s\n",pTemp->sex); printf("年龄;%d\n",pTemp->age); printf("备注:%s\n",pTemp->note); flag = 0; } break; case'2': if(strcmp(s,pTemp->name)==0) { printf("学号:%s\n",pTemp->id); printf("姓名;%s\n",pTemp->name); printf("性别;%s\n",pTemp->sex); printf("年龄;%d\n",pTemp->age); printf("备注:%s\n",pTemp->note); flag = 0; } break; case'3': if(strcmp(s,pTemp->sex)==0) { printf("学号:%s\n",pTemp->id); printf("姓名;%s\n",pTemp->name); printf("性别;%s\n",pTemp->sex); printf("年龄;%d\n",pTemp->age); printf("备注:%s\n",pTemp->note); flag = 0; } break; case'4': if(Y==pTemp->age) { printf("学号:%s\n",pTemp->id); printf("姓名;%s\n",pTemp->name); printf("性别;%s\n",pTemp->sex); printf("年龄;%d\n",pTemp->age); printf("备注:%s\n",pTemp->note); flag = 0; } break; } pTemp=pTemp->next; } if(flag) { printf("\t\t\t未查询到相关信息,请重试!\n"); goto RE1; } system("pause"); } struct student* Change() { struct student *pTemp; FILE *fp; fp=fopen("D:\\学生信息.txt","r"); struct student *phead=NULL; struct student *pEnd,*pNew,*pNow; pNew=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew->id); fscanf(fp,"%s",pNew->name); fscanf(fp,"%s",pNew->sex); fscanf(fp,"%d",&pNew->age); fscanf(fp,"%s",pNew->note); pNew->next=NULL; pEnd=pNew; phead=pNew; while(!feof(fp)) { pNew=(struct student*)malloc(sizeof(struct student)); fscanf(fp,"%s",pNew->id); fscanf(fp,"%s",pNew->name); fscanf(fp,"%s",pNew->sex); fscanf(fp,"%d",&pNew->age); fscanf(fp,"%s",pNew->note); pNew->next=NULL; pEnd->next=pNew; pEnd=pNew; } pNow = phead; while(pNow->next->next!=NULL) { pNow = pNow->next; } pNow->next=NULL; char s[20]; char m[10]; int flag=1; RE1: printf("\t\t\t请输入密码: "); scanf("%s",m); if(strcmp(m,"123456")==0) { RE: pTemp=phead; printf("\t\t\t请输入要修改学生的学号:"); scanf("%s",s); while(pTemp!=NULL) { if(strcmp(s,pTemp->id)==0) { printf("\t\t\t学号:%s\t\t\t修改学号:",pTemp->id); scanf("%s",pTemp->id); printf("\t\t\t姓名;%s\t\t\t修改姓名:",pTemp->name); scanf("%s",pTemp->name); printf("\t\t\t性别;%s\t\t\t修改性别:",pTemp->sex); scanf("%s",pTemp->sex); printf("\t\t\t年龄;%d\t\t\t修改年龄:",pTemp->age); scanf("%d",&pTemp->age); printf("\t\t\t备注:%s\t\t\t修改备注:",pTemp->note); scanf("%s",pTemp->note); flag = 0; break; } pTemp=pTemp->next; } } else { printf("\t\t\t密码输入错误,请重新输入!\n"); goto RE1; } if(flag) { printf("\t\t\t学号输入错误,请重新输入!\n"); goto RE; } system("pause"); fclose(fp); return phead; } int main() { /*system("mode con cols=80 lines=30");*/ system("color F5"); char x=0; char m[7]; struct student *head=NULL; Re: setposition(40,14); printf("请输入密码: "); setposition(39,13); printf("*********************"); setposition(39,15); printf("*********************"); setposition(39,14); printf("*"); setposition(59,14); printf("*"); setposition(51,14); scanf("%s",m); if(strcmp(m,"aaaaaa")==0) { while(1) { if(x=='g') exit(0); switch(x) { case'a': Create(); break; case'b': Print(); break; case'c': Save(head); break; case'd': head=Delete(); break; case'e': head=Change(); break; case'f': search(); break; } menu(); printf("\t\t\t请选择你要执行的操作:"); scanf("%c",&x); } } else { setposition(40,14); printf("\t\t\t密码错误!\n"); // 有问题 goto Re; } return 0; }