#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>//getch();kibhit()的头文件struct student{int id;char name[20];char password[11];char classs[6];struct like{float physics;//物理float biology;//生物float chemistry;//化学}grade;int age;int ranking;};typedef struct student ST;//为已有的数据类型命名struct administrator{char name[20];char password[11];}ad={"lichao","12343456"};void Chushihua();//系统初始化函数void Stucpw(int i);//学生改密函数void Ssave(ST stu[30],int r);//系统保存函数void Stuadd();//添加学生函数int Save_enquiry();//修改确定询问函数void Studelete();//删除学生函数void Stualter();//修改学生函数void Sturefer();//学生查询函数void Sturank(ST stu0[30],int i);//终极排名函数void Stuclassesrank();//学生班级挑选函数void Stuallout();//少女通灵之术char* Passwordinputhide();int main(){int flag0=0;//选择登陆方式的标志int flag1;//密码错误次数标志int flag3;//选择操作方式的标志char ad_name[20];//输入的管理员名字char ad_password[11];//输入的管理员密码char stu_name[20];//输入的学生名字char stu_password[11];//输入的学生密码Chushihua();//判断系统是否需要初始化FILE *fp1,*fp2;ST stu[30];int i;//for控制变量int j;//临时控制变量int r;//学生人数/*printf("学生人数为%d。
\n",r);printf("学号:%d\n姓名:%s\n密码:%s\n班级:%s\n年龄:%d\n排名:%d\n",stu[2].id,stu[2].name,stu[2].password,stu[2].classs,stu[2].age,stu[2].ranking);*/ while(flag0!=3){//读取本地信息fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(i=0;i<r;i++){fread(&stu[i],sizeof(ST),1,fp1);}fclose(fp1);//系统开始system("cls");printf("/* *******************学生信息管理系统****************** */\n");printf("欢迎登陆学生管理系统!");printf("请选择管理员登陆/学生登陆/退出系统(1/2/3):");scanf("%d",&flag0);flag1=3;//定义密码出错上限switch(flag0){case 1:while(flag1>0){fflush(stdin);printf("请输入管理员账户名:");gets(ad_name);printf("请输入管理员密码:");strcpy(ad_password,Passwordinputhide());if((!strcmp(ad_name,))&&(!(strcmp(ad_password,ad.password)))){printf("登陆成功!亲爱的管理员李超,欢迎回来!\n");system("cls");break;}else{flag1--;printf("管理员账户名或密码错误!您还有%d次机会",flag1);}}if(flag1==0){flag0=3;//让出现三次密码错误的家伙退出}else{flag3=1;while(flag3){system("cls");//清屏函数printf("请输入您想进行的操作:\n1,添加新学生信息;\n2,删除学生信息;\n3,修改学生信息;\n4,查询学生信息;\n5,为学生排序;\n6,退出登陆;\n7,少女召集之术。
\n");fflush(stdin);scanf("%d",&i);switch(i){case 1:Stuadd();system("pause");//系统暂停函数break;case 2:Studelete();system("pause");//系统暂停函数break;case 3:Stualter();system("pause");//系统暂停函数break;case 4:Sturefer();system("pause");//系统暂停函数break;case 5:Stuclassesrank();system("pause");//系统暂停函数break;case 6:flag3=0;system("pause");//系统暂停函数break;case 7:system("cls");printf("忍法,多重少女通灵之术!");Stuallout();system("pause");//系统暂停函数break;default:printf("输入有误!");system("pause");//系统暂停函数}}}break;case 2:while(flag1>0){fflush(stdin);printf("请输入学生姓名:");gets(stu_name);for(i=0;i<r;i++){if(!strcmp(stu[i].name,stu_name)){printf("你好,%s同学!请输入密码:",stu[i].name);break;}}/*fflush(stdin);gets(stu_password);*/strcpy(stu_password,Passwordinputhide());if(!strcmp(stu[i].password,stu_password)){printf("滴……滴……学生卡,登陆成功!");system("cls");break;}else{flag1--;printf("学生姓名或学生密码有误!你还有%d次机会\n",flag1);}}if(flag1==0){flag0=3;//让出现三次密码错误的家伙退出}else{system("cls");//清屏函数printf("亲爱的%s!大人\n",stu[i].name);printf("学生信息\nID:%d\n姓名:%s\n班级:%s\n年龄:%d\n学生成绩:\n物理:%.1f分\n生物:%.1f分\n化学:%.1f\n排名:%d\n",stu[i].id,stu[i].name,stu[i].classs,stu[i].age,stu[i].grade.physics,stu[i].grade.biology,stu [i].grade.chemistry,stu[i].ranking);while(1){printf("请选择你想进行的操作:\n1,修改登陆密码;\n2,给管理员留言;\n3,退出登陆\n");scanf("%d",&j);switch(j){case 1:Stucpw(i);system("pause");//系统暂停函数break;case 2:printf("该功能已经被管理员禁用!\n");system("pause");//系统暂停函数break;case 3:flag0=3;system("pause");//系统暂停函数break;default:printf("输入有误!请重现选择!\n");system("pause");//系统暂停函数}if(flag0=3){system("pause");//系统暂停函数break;}}}break;case 3:printf("成功退出!");break;default:printf("输入有误!");system("pause");//系统暂停函数}}printf("感谢您的使用!老司机再见!\n");system("pause");return 0;}void Chushihua(){FILE *fp1,*fp2;int i;STstu[5]={{1,"Yaya","1234","16-01",{70,70,70},24,5},{2,"Nico","1234","16-01",{75,75,75},24,4},{3," Miku","1234","16-01",{80,80,80},24,3},{4,"Kurumi","1234","16-01",{85,85,85},24,2},{5,"Ayame"," 1234","16-01",{100,100,100},24,1}};fp1=fopen("D:\\学生信息.txt","r");fp2=fopen("D:\\学生数目.txt","r");if((fp1==NULL)||(fp2==NULL)){printf("本地没有记录,系统开始初始化……");fp1=fopen("D:\\学生信息.txt","w+");for(i=0;i<5;i++){fwrite(&stu[i],sizeof(ST),1,fp1);}fclose(fp1);fp2=fopen("D:\\学生数目.txt","w+");fprintf(fp2,"%d",5);fclose(fp2);}}void Stucpw(int i){char str[11],str1[11],str2[11];//从文件读取数据int r;//人数int m;//控制变量ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);//开始修改密码printf("请输入旧密码:");fflush(stdin);gets(str);if(!strcmp(stu[i].password,str)){printf("请输入新密码:");fflush(stdin);gets(str1);printf("请再次输入新密码:");fflush(stdin);gets(str2);if(!strcmp(str1,str2)){strcpy(stu[i].password,str1);printf("新密码为%s!",stu[i].password);Ssave(stu,r);printf("密码修改成功!请重新登录~");}else{printf("新密码两次输入不一致,修改失败!\n");}}else{printf("旧密码不正确!");}}void Ssave(ST stu[30],int r){int i;FILE *fp1,*fp2;printf("正在将修改写入文件……");fp1=fopen("D:\\学生信息.txt","w+");for(i=0;i<r;i++){fwrite(&stu[i],sizeof(ST),1,fp1);}fclose(fp1);fp2=fopen("D:\\学生数目.txt","w+");fprintf(fp2,"%d",r);fclose(fp2);}void Stuadd(){//从文件读取数据int r;//人数int m;//控制变量printf("正在调用学生信息添加功能……");ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);//开始添加新学生信息printf("准备完毕,let's go!\n");printf("新学生的id自动生成为%d\n",r);stu[r].id=r;printf("请输入新学生的姓名;");fflush(stdin);gets(stu[r].name);printf("新学生的密码自动初始化为1234!\n");strcpy(stu[r].password,"1234");printf("请输入新学生的班级(xx-xx):");fflush(stdin);gets(stu[r].classs);printf("请输入新学生的成绩:(物理/生物/化学)\n");scanf("%f/%f/%f",&stu[r].grade.physics,&stu[r].grade.biology,&stu[r].grade.chemistry);printf("请输入学生的年龄:");scanf("%d",&stu[r].age);stu[r].ranking=0;printf("新学生信息\nID:%d\n姓名:%s\n班级:%s\n年龄:%d\n学生成绩:\n物理:%.1f 分\n生物:%.1f分\n化学:%.1f\n排名:%d\n",stu[r].id,stu[r].name,stu[r].classs,stu[r].age,stu[r].grade.physics,stu[r].grade.biology,st u[r].grade.chemistry,stu[r].ranking);if(Save_enquiry()){r++;Ssave(stu,r);printf("新学生添加完毕!");}else{printf("新学生添加失败!");}}int Save_enquiry(){char c1,c2;printf("您即将对系统信息进行修改,是否继续?(y/n)");fflush(stdin);c1=getchar();printf("您即将对系统信息进行修改,请再次确定是否继续?(y/n)");fflush(stdin);c2=getchar();if((c1=='y')&&(c2=='y')){printf("系统开始修改,请稍候片刻……");return 1;}else{printf("信息修改取消……");return 0;}}void Studelete(){int flag=0;//是否找到目标标志char str[20];int i;//从文件读取数据int r;//人数int m;//控制变量printf("正在调用学生信息删除功能……");ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);//删除程序printf("请输入你想删除的学生姓名:");fflush(stdin);gets(str);for(i=0;i<r;i++){if(!strcmp(stu[i].name,str)){flag=1;break;}}if(flag){for(m=i;m<r-1;m++){stu[m].id=m;strcpy(stu[m].name,stu[m+1].name);strcpy(stu[m].password,stu[m+1].password);strcpy(stu[m].classs,stu[m+1].classs);stu[m].grade.physics=stu[m+1].grade.physics;stu[m].grade.biology=stu[m+1].grade.biology;stu[m].grade.chemistry=stu[m].grade.chemistry;stu[m].age=stu[m].age=stu[m+1].age;}if(Save_enquiry()){r--;Ssave(stu,r);printf("学生%s信息删除完毕!",str);}{printf("删除失败!");}}else{printf("未找到该学生信息!");}}void Stualter(){int n;//选择标志int flag=0;//是否找到目标标志int flag1=0;//是否输入错误标志char str[20];//被修改学生的姓名char str1[20];//新姓名char str2[11];//新密码char str3[6];//新班级//从文件读取数据int r;//人数int m;//控制变量printf("正在调用学生信息删除功能……");ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);//修改程序printf("请输入你想修改的学生姓名:");fflush(stdin);gets(str);for(m=0;m<r;m++){if(!strcmp(stu[m].name,str)){flag=1;break;}if(flag){printf("请输入你想修改哪种信息:\n1,姓名\n2,密码\n3,班级\n4,年龄\n学生成绩:\n5,物理\n6,生物\n7,化学");scanf("%d",&n);switch(n){case 1:printf("请输入新的姓名:");fflush(stdin);gets(str1);strcpy(stu[m].name,str1);flag1++;break;case 2:printf("请输入新的密码:");fflush(stdin);gets(str2);strcpy(stu[m].password,str2);flag1++;break;case 3:printf("请输入新的班级(xx-xx):");fflush(stdin);gets(str3);strcpy(stu[m].classs,str3);flag1++;break;case 4:printf("请输入新的年龄:");scanf("%d",&stu[m].age);flag1++;break;case 5:printf("请输入新的物理成绩:");scanf("%f",&stu[m].grade.physics);flag1++;break;case 6:printf("请输入新的生物成绩:");scanf("%f",&stu[m].grade.biology);flag1++;break;case 7:printf("请输入新的化学成绩:");scanf("%f",&stu[m].grade.chemistry);flag1++;break;default:printf("输入有误!默认您放弃此次更改……");}if(flag1){if(Save_enquiry()){Ssave(stu,r);}}}else{printf("未找到该学生信息!");}}void Sturefer(){char str[20];int flag=0;//从文件读取数据int r;//人数int m;//控制变量printf("正在调用学生信息查询功能……");ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);//查询程序printf("请输入你想修改的学生姓名:");fflush(stdin);gets(str);for(m=0;m<r;m++){if(!strcmp(stu[m].name,str)){flag=1;break;}}if(flag){printf("学生信息\nID:%d\n姓名:%s\n班级:%s\n年龄:%d\n学生成绩:\n物理:%.1f分\n生物:%.1f分\n化学:%.1f\n排名:%d\n",stu[m].id,stu[m].name,stu[m].classs,stu[m].age,stu[m].grade.physics,stu[m].grade.bi ology,stu[m].grade.chemistry,stu[m].ranking);}else{printf("未找到该学生信息!");}}void Sturank(ST stu0[30],int i){printf("\n开始排名……");float temp;//中间变量int m;int p,q;//冒泡控制变量float gradesum[30];for(m=0;m<i;m++){/*printf("%.1f",stu0[m].grade.physics);*/gradesum[m]=stu0[m].grade.physics+stu0[m].grade.biology+stu0[m].grade.chemistry;/*printf("%.1f",gradesum[m]);*/}//冒泡排序for(p=0;p<i-1;p++)//总共需要冒i-1次泡{for(q=0;q<i-1-p;q++)//第p次冒泡需要比较q次{if(gradesum[q]<gradesum[q+1])//将较小值后移{temp=gradesum[q+1];gradesum[q+1]=gradesum[q];gradesum[q]=temp;}}}for(m=0;m<i;m++){printf("%.1f\t",gradesum[m]);}//根据数组顺序修改排名值printf("\n少女们开始报数!");for(m=0;m<i;m++)//依次重现数组数据{q=gradesum[m];printf("%.1f\t",q);for(p=0;p<i;p++)//重复结构体的每个数据{temp=stu0[p].grade.physics+stu0[p].grade.biology+stu0[p].grade.chemistry;printf("%.1f\t",temp);if(temp==q)//挑出数组与结构体对应的值{stu0[p].ranking=m+1;//得出排名printf("%s\t",stu0[p].name);}}}printf("\n成功ranking……");//从文件读取数据int r;//人数printf("正在调用学生信息查询功能……");ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);//部分结构体与总结构体进行比较for(p=0;p<i;p++){for(q=0;q<r;q++){if(!strcmp(stu0[p].name,stu[q].name))//找出同名人{stu[q].ranking=stu0[p].ranking;//修改成正确的排名}}}system("cls");printf("新的排名为:\n");for(m=0;m<i;m++){printf("ID:%d\t姓名:%s\t理综分数:%.1f\t排名:%d\n",stu0[m].id,stu0[m].name,(stu0[m].grade.physics+stu0[m].grade.biology+stu0[m].grad e.chemistry),stu0[m].ranking);}Ssave(stu,r);//保存数据printf("排名完成!\n");}void Stuclassesrank(){//从文件读取信息int m;int r;//人数printf("正在准备……");ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);//开始分班ST stu1[30];//16-01班ST stu2[30];//16-02班ST stu3[30];//16-03班ST stu4[30];//16-04班int p,q=0;for(p=0;p<r;p++){if(!strcmp(stu[p].classs,"16-01")){stu1[q].id=q+1;strcpy(stu1[q].name,stu[p].name);strcpy(stu1[q].password,stu[p].password);strcpy(stu1[q].classs,stu[p].classs);stu1[q].grade.physics=stu[p].grade.physics;stu1[q].grade.biology=stu[p].grade.biology;stu1[q].grade.chemistry=stu[p].grade.chemistry;stu1[q].age=stu[m].age=stu[p].age;printf("%.1f\t",stu1[q].grade.physics);++q;}}Sturank(stu1,q);}void Stuallout(){int i;//从文件读取数据int r;//人数int m;//控制变量printf("正在积攒查克拉……\n");ST stu[30];FILE *fp1,*fp2;fp2=fopen("D:\\学生数目.txt","r");fscanf(fp2,"%d",&r);fclose(fp2);fp1=fopen("D:\\学生信息.txt","r");for(m=0;m<r;m++){fread(&stu[m],sizeof(ST),1,fp1);}fclose(fp1);printf("咻咻咻……\n");for(i=0;i<r;i++){printf("ID:%d\t姓名:%s\t班级:%s\t年龄:%d\n学生成绩:物理:%.1f分\t生物:%.1f分\t化学:%.1f\t排名:%d\n",stu[i].id,stu[i].name,stu[i].classs,stu[i].age,stu[i].grade.physics,stu[i].grade.biology,stu [i].grade.chemistry,stu[i].ranking);}}char* Passwordinputhide(){char str[11];int i;char ch;for(i=0;i<10;i++){fflush(stdin);ch=getch();if(ch==13)//输入是回车符时就结束{break;}else if(ch==8){printf("\b \b");i-=2;}else{putchar('*');str[i]=ch;}}str[i]='\0';return str;}。