├── str.h ├── disign.c ├── teacher_password.h ├── student.h ├── Students_in_and_out_file.h └── teacher.h /str.h: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | > File Name: Students_in_and_out_file.c 3 | > Author:zhuziyu 4 | > Mail: 5 | > Created Time: 2016年06月01日 星期三 14时10分52秒 6 | ************************************************************************/ 7 | 8 | #include 9 | 10 | 11 | struct grades 12 | { 13 | int chinese; 14 | int math; 15 | int picture; 16 | int C_language; 17 | }; 18 | struct student 19 | { 20 | char snum[9]; 21 | char sname[20]; 22 | struct grades grade; 23 | char level; 24 | int all; 25 | struct student *next; 26 | 27 | }; 28 | 29 | 30 | -------------------------------------------------------------------------------- /disign.c: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | > File Name: /home/zhuziyu/课程设计/disign.c 3 | > Author:zhuziyu 4 | > Mail: 5 | > Created Time: 2016年06月05日 星期日 06时16分56秒 6 | ************************************************************************/ 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include "teacher.h" 13 | int main() 14 | { 15 | int choice=1; 16 | while(choice) 17 | { 18 | printf("输入你的登录方式\n\n"); 19 | printf("1->以教师身份登陆\n\n"); 20 | printf("2->以学生身份登陆\n\n"); 21 | printf("3->退出次界面\n\n"); 22 | scanf("%d",&choice); 23 | if(choice==3) 24 | return 0; 25 | if(choice==1) 26 | manager(); 27 | if(choice==2) 28 | student(); 29 | } 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /teacher_password.h: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | > File Name: teacher_password.c 3 | > Author:zhuziyu 4 | > Mail: 5 | > Created Time: 2016年06月05日 星期日 21时26分43秒 6 | ************************************************************************/ 7 | 8 | #include 9 | #include 10 | #include 11 | struct pa 12 | { 13 | char pass[7]; 14 | }; 15 | 16 | int infile() 17 | { 18 | struct pa *password; 19 | //password=(struct pa *)malloc(sizeof(struct pa)); 20 | char passw[7]; 21 | char pass1[7]; 22 | char pass2[7]; 23 | int i=1; 24 | char path[50]; 25 | FILE *fp; 26 | int num; 27 | printf("如果您已经修改过密码,请按1!没有修改过,请按2\n\n"); 28 | scanf("%d",&num); 29 | if(num==1) 30 | { 31 | return 1; 32 | } 33 | for(i=1;i<=3;i++) 34 | { 35 | printf("请修改密码,默认密码是111111\n\n\n"); 36 | printf("请输入密码\n\n"); 37 | scanf("%s",passw); 38 | if(strcmp(passw,"111111")==0) 39 | { 40 | printf("请输新密码\n\n"); 41 | scanf("%s",pass1); 42 | printf("请再次确定新密码\n\n"); 43 | scanf("%s",pass2); 44 | if(strcmp(pass1,pass2)==0) 45 | { 46 | password=(struct pa *)malloc(sizeof(struct pa)); 47 | strcpy(password->pass,pass2); 48 | //printf("所输入的数据如下!\n\n"); 49 | //printf("%s",password->pass); 50 | printf("现在将数据写入文件!\n\n"); 51 | printf("请输入文件路径或名称!\n\n"); 52 | //printf("所输入的数据如下!\n\n"); 53 | scanf("%s",path); 54 | while((fp=fopen(path,"wb"))==NULL) 55 | { 56 | printf("文件路径错误或者文件名称错误!请从新尝试!\n\n"); 57 | scanf("%s",path); 58 | printf("%s\n\n",path); 59 | } 60 | 61 | fwrite(password,sizeof(struct pa),1,fp); 62 | fclose(fp); 63 | printf("所输入的数据如下!\n\n"); 64 | printf("%s\n\n",password->pass); 65 | printf("数据写入完毕!\n\n"); 66 | return 1; 67 | 68 | } 69 | else 70 | printf("两次输入内容不一致,没有效果,请重新尝试!\n\n\n"); 71 | 72 | } 73 | } 74 | return 1; 75 | } 76 | int outfile() 77 | { 78 | char duiying[7]; 79 | FILE *fp; 80 | char p[50]; 81 | int i=1; 82 | printf("请输入查找是否与您信息匹配的文件路径或名称!\n\n"); 83 | 84 | do 85 | { 86 | if(i>=2) 87 | printf("请再次输该文件的路径和信息!\n\n"); 88 | scanf("%s",p); 89 | printf("您所输入的路径是: %s\n\n",p); 90 | fp=fopen(p,"r"); 91 | i++; 92 | }while(fp==NULL); 93 | struct pa *napath; 94 | napath=(struct pa *)malloc(sizeof(struct pa)); 95 | printf("lalala"); 96 | while(fread(napath,sizeof(struct pa),1,fp)!=0) 97 | { 98 | int i=1; 99 | for(i=1;i<=3;i++) 100 | { 101 | printf("请输入密码!\n\n"); 102 | scanf("%s",duiying); 103 | if(strcmp(duiying,napath->pass)==0) 104 | { 105 | return 1; 106 | } 107 | } 108 | printf("3次密码均错误!\n\n"); 109 | return 0; 110 | } 111 | 112 | printf("文件打开失败!\n\n"); 113 | return 0; 114 | 115 | } 116 | 117 | -------------------------------------------------------------------------------- /student.h: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | > File Name: /home/zhuziyu/课程设计/student.c 3 | > Author:zhuziyu 4 | > Mail: 5 | > Created Time: 2016年06月05日 星期日 05时54分55秒 6 | ************************************************************************/ 7 | 8 | #include 9 | #include"Students_in_and_out_file.h" 10 | void xuehaocha(struct student *phead); 11 | void mingcha(struct student *phead); 12 | void student() 13 | { 14 | struct student *phead=daoin(); 15 | int choice0=1; 16 | while(choice0) 17 | { 18 | printf("请输入选项搜索排名\n\n"); 19 | printf("1->按姓名查询\n\n"); 20 | printf("2->按学号查询\n\n"); 21 | printf("3->退出该界面\n\n"); 22 | scanf("%d",&choice0); 23 | if(choice0==3) 24 | return ; 25 | if(choice0==1) 26 | mingcha(phead); 27 | if(choice0==2) 28 | xuehaocha(phead); 29 | } 30 | return ; 31 | } 32 | void xuehaocha(struct student *phead) 33 | { 34 | char num[9]; 35 | struct student *psearch=phead; 36 | struct student stu; 37 | int ci[5]={1,1,1,1,1}; 38 | printf("请输入自己的学号\n\n"); 39 | fflush(stdin); 40 | scanf("%s",num); 41 | printf("%s",num); 42 | while(psearch!=NULL) 43 | { 44 | if(strcmp(psearch->snum,num)==0) 45 | { 46 | stu=*psearch; 47 | psearch=phead; 48 | printf("已经找到此人!\n\n"); 49 | while(psearch!=NULL) 50 | { 51 | if(psearch->grade.chinese>stu.grade.chinese) 52 | ci[0]++; 53 | if(psearch->grade.math>stu.grade.math) 54 | ci[1]++; 55 | if(psearch->grade.picture>stu.grade.picture) 56 | ci[2]++; 57 | if(psearch->grade.C_language>stu.grade.C_language) 58 | ci[3]++; 59 | if(psearch->all>stu.all) 60 | ci[4]++; 61 | psearch=psearch->next; 62 | } 63 | printf("学号  姓名  语文 语文名次 高数 高数名次 工图 工图名次 c语言 c语言名次 总分数 \n\n"); 64 | printf("%s %s %d %d %d %d %d %d %d %d %d \n\n",stu.snum,stu.sname,stu.grade.chinese,ci[0],stu.grade.math,ci[1],stu.grade.picture,ci[2],stu.grade.C_language,ci[3],stu.all,ci[4]); 65 | return ; 66 | } 67 | 68 | psearch=psearch->next; 69 | } 70 | printf("查找错误!\n\n"); 71 | } 72 | void mingcha(struct student *phead) 73 | { 74 | char name[9]; 75 | struct student *psearch=phead; 76 | struct student stu; 77 | int ci[5]={0,0,0,0,0}; 78 | printf("请输入自己的姓名\n\n"); 79 | scanf("%s",name); 80 | while(psearch!=NULL) 81 | { 82 | if(strcmp(psearch->sname,name)==0) 83 | { 84 | stu=*psearch; 85 | psearch=phead; 86 | printf("已经找到此人!\n\n"); 87 | while(psearch!=NULL) 88 | { 89 | if(psearch->grade.chinese>stu.grade.chinese) 90 | ci[0]++; 91 | if(psearch->grade.math>stu.grade.math) 92 | ci[1]++; 93 | if(psearch->grade.picture>stu.grade.picture) 94 | ci[2]++; 95 | if(psearch->grade.C_language>stu.grade.C_language) 96 | ci[3]++; 97 | if(psearch->all>stu.all) 98 | ci[4]++; 99 | psearch=psearch->next; 100 | } 101 | printf("学号  姓名  语文 语文名次 高数 高数名次 工图 工图名次 c语言 c语言名次 总名次 \n\n"); 102 | printf("%s %s %d %d %d %d %d %d %d %d %d \n\n",stu.snum,stu.sname,stu.grade.chinese,ci[0],stu.grade.math,ci[1],stu.grade.picture,ci[2],stu.grade.C_language,ci[3],stu.all,ci[4]); 103 | return ; 104 | } 105 | 106 | psearch=psearch->next; 107 | } 108 | printf("WRong!\n\n"); 109 | } 110 | 111 | 112 | -------------------------------------------------------------------------------- /Students_in_and_out_file.h: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | > File Name: Students_in_and_out_file.c 3 | > Author:zhuziyu 4 | > Mail: 5 | > Created Time: 2016年06月01日 星期三 14时10分52秒 6 | ************************************************************************/ 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include "str.h" 13 | /* 14 | struct grades 15 | { 16 | int chinese; 17 | int math; 18 | int picture; 19 | int C_language; 20 | }; 21 | struct student 22 | { 23 | char snum[9]; 24 | char sname[20]; 25 | struct grades grade; 26 | char level; 27 | struct student *next; 28 | 29 | }; 30 | */ 31 | /**************************************************************************************************************** 32 | 33 | 函数作用:数据写入文件,给她的参数是链表头节点 34 | 35 | ** *************************************************************************************************************/ 36 | void in_file(struct student *phead) 37 | { 38 | FILE *f; 39 | int cou=0; 40 | char path_name[50]; 41 | memset(path_name,50,0); 42 | struct student *psearch=phead; 43 | do 44 | { 45 | cou++; 46 | printf("请输入文件路径和名称!\n"); 47 | scanf("%s",path_name); 48 | if(cou>=2) 49 | printf("文件路径和名称不对,请重新输入!\n"); 50 | }while((f=fopen(path_name,"wt+"))==NULL); 51 | while(psearch!=NULL) 52 | { 53 | fwrite(psearch,sizeof(struct student),1,f); 54 | psearch=psearch->next; 55 | } 56 | printf("数据已经全部写入文件!\n"); 57 | fclose(f); 58 | 59 | } 60 | /********************************************************************************************************************** 61 | 62 | 函数作用:把一个文件的内容读出,你需要输入文件的路径和名称 63 | 64 | **********************************************************************************************************************/ 65 | void out_file() 66 | { 67 | FILE *fp; 68 | struct student buffer; 69 | char path_name[20]; 70 | memset(path_name,20,0); 71 | printf("开始输入文件路径和名称!\n\n"); 72 | do{ 73 | scanf("%s",path_name); 74 | fp=fopen(path_name,"r"); 75 | }while(fp==NULL); 76 | printf("学号  姓名  语文 高数 工图 c语言 等级\n"); 77 | while( fread(&buffer,sizeof(struct student),1,fp)!=0) 78 | printf("%s %s %d %d %d %d %c\n",buffer.snum,buffer.sname,buffer.grade.chinese,buffer.grade.math,buffer.grade.picture,buffer.grade.C_language,buffer.level); 79 | 80 | } 81 | /******************************************************************************************************************************** 82 | 83 | 函数作用: 将文件内容导入链表方便后面的操作 84 | 85 | ********************************************************************************************************************************/ 86 | struct student *daoin() 87 | { 88 | struct student *phead=NULL; 89 | struct student *pnew,*pend; 90 | FILE *fp; 91 | int daoshu=1; 92 | char path_name[30]; 93 | printf("请输入要打开的文件路径和名称!\n\n"); 94 | scanf("%s",path_name); 95 | while((fp=fopen(path_name,"r"))==NULL) 96 | { 97 | printf("请输入要打开的文件路径和名称!\n\n"); 98 | scanf("%s",path_name); 99 | 100 | } 101 | printf("打开文件成功!\n\n"); 102 | pnew=(struct student *)malloc(sizeof(struct student)); 103 | 104 | while(fread(pnew,sizeof(struct student ),1,fp)!=0) 105 | { 106 | if(daoshu==1) 107 | { 108 | phead=pnew; 109 | pend=pnew; 110 | pnew->next=NULL; 111 | } 112 | else{ 113 | pend->next=pnew; 114 | pnew->next=NULL; 115 | pend=pnew; 116 | } 117 | pnew=(struct student *)malloc(sizeof(struct student)); 118 | daoshu++; 119 | } 120 | return phead; 121 | 122 | } 123 | /**************************************************************************************************************************** 124 | * 125 | * 126 | * 127 | * 测试的主函数: 128 | * 129 | * 130 | ******************************************************************************************************************************/ 131 | /*int main() 132 | { 133 | struct student *s; 134 | s=(struct student *)malloc(sizeof(struct student)); 135 | printf("kaishishuru !\n"); 136 | scanf("%s",s->snum); 137 | scanf("%s",s->sname); 138 | scanf("%d %d %d %d",&s->grade.chinese,&s->grade.math,&s->grade.picture,&s->grade.C_language); 139 | getchar(); 140 | scanf("%c",&s->level); 141 | s->next=NULL; 142 | in_file(s); 143 | out_file( ); 144 | } 145 | */ 146 | -------------------------------------------------------------------------------- /teacher.h: -------------------------------------------------------------------------------- 1 | /************************************************************************* 2 | > File Name: teacher.c 3 | > Author:zhuziyu 4 | > Mail: 5 | > Created Time: 2016年06月01日 星期三 15时21分15秒 6 | ************************************************************************/ 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include "student.h" 13 | #include "teacher_password.h" 14 | 15 | 16 | //这个头文件包含了文件的读入读出,还包含了一个包含结构体的头文件 17 | struct student *create(); 18 | void print(struct student *phead); 19 | void fixdata(struct student *phead); 20 | void fixdata1(struct student *phead,char *s); 21 | void fixdata2(struct student *phead,char *s); 22 | void adddata(struct student *phead); 23 | void adddata1(struct student *phead,int n); 24 | void adddata2(struct student *phead,char *s); 25 | void deldata(struct student *phead); 26 | void deldata1(struct student *phead,char *num); 27 | void deldata2(struct student *phead,char *name); 28 | void deldata3(struct student *phead); 29 | void sondeldata3(struct student *phead); 30 | void paixu(struct student *phead); 31 | void xuehaopai(struct student *phead); 32 | void xingmingpai(struct student *phead); 33 | void zongpai(struct student *phead); 34 | void yuwenpai(struct student *phead); 35 | void gaoshupai(struct student *phead); 36 | void gongtupai(struct student *phead); 37 | void Cpai(struct student *phead); 38 | void nohegepai(struct student *phead); 39 | int manager() 40 | { 41 | 42 | int filei=1; 43 | char filepasspath[50]; 44 | struct student *phead; 45 | int choice0=1; 46 | int choice2; 47 | infile(); 48 | if(outfile()==0) 49 | { 50 | printf("操作无法进行!\n\n"); 51 | return 0; 52 | } 53 | 54 | while(choice0) 55 | { 56 | printf("请教师选择数据的输入方式\n\n"); 57 | printf("1->直接建立数据\n\n"); 58 | printf("2->文件导入数据\n\n"); 59 | printf("3->退出该界面\n\n"); 60 | scanf("%d",&choice0); 61 | if(choice0==3) 62 | return 0; 63 | if(choice0==1) 64 | phead=create(); 65 | if(choice0==2) 66 | phead=daoin(); 67 | choice0=1; 68 | while(choice2) 69 | { 70 | printf("欢迎进入教师管理页面,请选择以下功能!\n"); 71 | printf(" 1->查看学生数据\n"); 72 | printf("     2->修改写入的数据\n"); 73 | printf(" 3->添加学生数据\n"); 74 | printf("     4->删除学生数据\n"); 75 | printf("     5->对学生数据排序\n"); 76 | printf(" 6->把数据写入文件\n"); 77 | printf(" 7->查看文件中的数据\n"); 78 | printf(" 8->退出该界面\n"); 79 | scanf("%d",&choice2); 80 | if(choice2==8) 81 | { 82 | printf("感谢您使用,再见!\n"); 83 | return 0; 84 | } 85 | switch(choice2) 86 | { 87 | case 1 : print(phead);break; 88 | case 2 : fixdata(phead);break; 89 | case 3 : adddata(phead);break; 90 | case 4 : deldata(phead);break; 91 | case 5 : paixu(phead);break; 92 | case 6 : in_file(phead);break; 93 | case 7 : out_file();break; 94 | case 8 : printf("感谢您的使用!\n\n");return 0; 95 | } 96 | } 97 | 98 | } 99 | 100 | } 101 | struct student *create() 102 | { 103 | struct student *phead=NULL; 104 | struct student *pnew,*pend; 105 | int jishu=0; 106 | pend=pnew=(struct student *)malloc(sizeof(struct student)); 107 | printf("开始输入学生的数据,每输入学生的一个数据,请按enter,系统会提示你该项数据输入完毕!,如果你想终止输入,请在学号处输入stop\n"); 108 | printf("开始输入第 %d 个学生的数据,开始输入学号\n\n",jishu+1); 109 | scanf("%s",pnew->snum); 110 | printf("学号输入完毕,开始输入姓名!\n\n"); 111 | scanf("%s",pnew->sname); 112 | printf("姓名输入完毕!开始输入成绩,成绩和成绩之间用空格分隔!\n\n"); 113 | scanf("%d %d %d %d",&pnew->grade.chinese,&pnew->grade.math,&pnew->grade.picture,&pnew->grade.C_language); 114 | printf("成绩输入完毕!\n\n"); 115 | pnew->all=(pnew->grade.chinese+pnew->grade.math+pnew->grade.picture+pnew->grade.C_language); 116 | if(pnew->all>=350) 117 | pnew->level='A'; 118 | else if(pnew->all>=300) 119 | pnew->level='B'; 120 | else if(pnew->all>=250) 121 | pnew->level='C'; 122 | else 123 | pnew->level='D'; 124 | while(strcmp(pnew->snum,"stop")!=0) 125 | { 126 | jishu++; 127 | if(jishu==1) 128 | { 129 | phead=pnew; 130 | pend=pnew; 131 | pnew->next=NULL; 132 | } 133 | if(jishu!=1) 134 | { 135 | pend->next=pnew; 136 | pnew->next=NULL; 137 | pend=pnew; 138 | } 139 | pnew=(struct student *)malloc(sizeof(struct student )); 140 | printf("开始输入第 %d 个学生的数据,开始输入学号\n\n",jishu+1); 141 | scanf("%s",pnew->snum); 142 | if(strcmp(pnew->snum,"stop")==0) 143 | { 144 | printf("学生信息输入完毕!\n\n"); 145 | return phead; 146 | } 147 | printf("学号输入完毕,开始输入姓名!\n\n"); 148 | scanf("%s",pnew->sname); 149 | printf("姓名输入完毕!开始输入成绩,成绩和成绩之间用空格分隔!\n\n"); 150 | scanf("%d %d %d %d",&pnew->grade.chinese,&pnew->grade.math,&pnew->grade.picture,&pnew->grade.C_language); 151 | printf("成绩输入完毕!\n\n"); 152 | pnew->all=(pnew->grade.chinese+pnew->grade.math+pnew->grade.picture+pnew->grade.C_language); 153 | if(pnew->all>=350) 154 | pnew->level='A'; 155 | else if(pnew->all>=300) 156 | pnew->level='B'; 157 | else if(pnew->all>=250) 158 | pnew->level='C'; 159 | else 160 | pnew->level='D'; 161 | } 162 | free(pnew); 163 | return phead; 164 | } 165 | void print(struct student *phead) 166 | { 167 | struct student *psearch=phead; 168 | printf("学号  姓名 语文  高数 工图 C语言 总成绩  等级 \n\n"); 169 | while(psearch!=NULL) 170 | { 171 | printf("%s %s %4d %4d %4d %4d %4d %c\n\n",psearch->snum,psearch->sname,psearch->grade.chinese,psearch->grade.math,psearch->grade.picture,psearch->grade.C_language,psearch->all,psearch->level); 172 | psearch=psearch->next; 173 | } 174 | printf("\n信息已经全部展示完毕!\n"); 175 | } 176 | void fixdata(struct student *phead) 177 | { 178 | int choice1=1; 179 | while(choice1) 180 | { 181 | printf(" 1->按学号修改:\n\n"); 182 | printf("   2->按姓名修改:\n\n"); 183 | printf("   3->退出\n\n"); 184 | printf("请输入你的选择:\n\n"); 185 | scanf("%d",&choice1); 186 | if(choice1==1) 187 | { 188 | char num[9]; 189 | printf("请输入要修改的人的学号!\n"); 190 | scanf("%s",num); 191 | printf("学号输入完毕!\n"); 192 | fixdata1(phead,num); 193 | return ; 194 | } 195 | if(choice1==2) 196 | { 197 | char name[25]; 198 | printf("请输入要修改人的姓名!\n"); 199 | scanf("%s",name); 200 | printf("姓名输入完毕!\n"); 201 | fixdata2(phead,name); 202 | return ; 203 | } 204 | if(choice1==3) 205 | return ; 206 | } 207 | } 208 | void fixdata1(struct student *phead,char *s) 209 | { 210 | struct student *psearch=phead; 211 | while(psearch!=NULL) 212 | { 213 | if(strcmp(psearch->snum,s)==0) 214 | { 215 | char isdel[5]; 216 | printf("该生成绩如下:\n\n"); 217 | printf("学号  姓名  语文 高数 工图 C语言 总分 等级\n\n"); 218 | printf("%s %s %d %d %d %d %d %c\n\n",psearch->snum,psearch->sname,psearch->grade.chinese,psearch->grade.math,psearch->grade.picture,psearch->grade.C_language,psearch->all,psearch->level); 219 | printf("修改? yes or no:\n\n"); 220 | scanf("%s",isdel); 221 | if(strcmp(isdel,"yes")==0) 222 | { 223 | printf("请输入该生的新指标,开始输入学号!\n"); 224 | scanf("%s",psearch->snum); 225 | printf("学号输入完毕,开始输入姓名!\n"); 226 | scanf("%s",psearch->sname); 227 | printf("姓名输入完毕,开始输入成绩!\n"); 228 | scanf("%d %d %d %d",&psearch->grade.chinese,&psearch->grade.math,&psearch->grade.picture,&psearch->grade.C_language); 229 | psearch->all=(psearch->grade.chinese+psearch->grade.math+psearch->grade.picture+psearch->grade.C_language); 230 | if(psearch->all>=350) 231 | psearch->level='A'; 232 | else if(psearch->all>=300) 233 | psearch->level='B'; 234 | else if(psearch->all>=250) 235 | psearch->level='c'; 236 | else 237 | psearch->level='D'; 238 | printf("该生信息已经全部输入完毕!\n\n"); 239 | return ; 240 | } 241 | 242 | } 243 | psearch=psearch->next; 244 | } 245 | printf("没有找到复合要求的内容!\n\n"); 246 | } 247 | void fixdata2(struct student *phead,char *s) 248 | { 249 | struct student *psearch=phead; 250 | while(psearch!=NULL) 251 | { 252 | if(strcmp(psearch->sname,s)==0) 253 | { 254 | char isdel[5]; 255 | printf("该生成绩如下:\n\n"); 256 | printf("学号  姓名  语文 高数 工图 C语言 总分 等级\n\n"); 257 | printf("%s %s %d %d %d %d %d %c\n\n",psearch->snum,psearch->sname,psearch->grade.chinese,psearch->grade.math,psearch->grade.picture,psearch->grade.C_language,psearch->all,psearch->level); 258 | printf("修改? yes or no:\n\n"); 259 | scanf("%s",isdel); 260 | if(strcmp(isdel,"yes")==0) 261 | { 262 | printf("请输入该生的新指标,开始输入学号!\n"); 263 | scanf("%s",psearch->snum); 264 | printf("学号输入完毕,开始输入姓名!\n"); 265 | scanf("%s",psearch->sname); 266 | printf("姓名输入完毕,开始输入成绩!\n"); 267 | scanf("%d %d %d %d",&psearch->grade.chinese,&psearch->grade.math,&psearch->grade.picture,&psearch->grade.C_language); 268 | psearch->all=(psearch->grade.chinese+psearch->grade.math+psearch->grade.picture+psearch->grade.C_language); 269 | if(psearch->all>=350) 270 | psearch->level='A'; 271 | else if(psearch->all>=300) 272 | psearch->level='B'; 273 | else if(psearch->all>=250) 274 | psearch->level='c'; 275 | else 276 | psearch->level='D'; 277 | printf("该生信息已经全部输入完毕!\n\n"); 278 | return ; 279 | } 280 | 281 | } 282 | psearch=psearch->next; 283 | } 284 | printf("没有找到复合要求的内容!\n\n"); 285 | } 286 | void adddata(struct student *phead) 287 | { 288 | int choice1=1; 289 | while(choice1) 290 | { 291 | printf("请输入你的选择!\n"); 292 | printf("1->在第n个人之后添加成员:\n"); 293 | printf("2->在某个叫xxx的学生之后添加成员!\n"); 294 | printf("3->退出该界面!\n"); 295 | scanf("%d",&choice1); 296 | if(choice1==1) 297 | { 298 | int n; 299 | printf("请输入n值:\n"); 300 | scanf("%d",&n); 301 | adddata1(phead,n); 302 | } 303 | if(choice1==2) 304 | { 305 | char name[25]; 306 | printf("请输入这个人的名字!\n"); 307 | scanf("%s",name); 308 | adddata2(phead,name); 309 | } 310 | if(choice1==3) 311 | return ; 312 | } 313 | 314 | } 315 | void adddata1(struct student *phead,int n) 316 | { 317 | struct student *psearch=phead; 318 | struct student *pnew; 319 | if(n<0) 320 | { 321 | printf("您查找的用户不存在,请重新查找!\n\n"); 322 | return ; 323 | } 324 | printf("有此学生!\n\n"); 325 | pnew=(struct student *)malloc(sizeof(struct student)); 326 | printf("开始添加学生的信息,请输入学号:\n"); 327 | scanf("%s",pnew->snum); 328 | scanf("%s",pnew->sname); 329 | scanf("%d %d %d %d",&pnew->grade.chinese,&pnew->grade.math,&pnew->grade.picture,&pnew->grade.C_language); 330 | pnew->all=(pnew->grade.chinese+pnew->grade.math+pnew->grade.picture+pnew->grade.C_language); 331 | if(pnew->all>=350) 332 | pnew->level='A'; 333 | else if(pnew->all>=300) 334 | pnew->level='B'; 335 | else if(pnew->all>=250) 336 | pnew->level='C'; 337 | else 338 | pnew->level='D'; 339 | /*if(n>0) 340 | { 341 | int i=0; 342 | for(;inext; 344 | pnew->next=psearch->next; 345 | psearch->next=pnew; 346 | 347 | } 348 | */ 349 | if(n==0) 350 | { 351 | pnew->next=phead; 352 | phead=pnew; 353 | } 354 | if(n>0) 355 | { 356 | int i=1; 357 | for(;inext; 360 | } 361 | pnew->next=psearch->next; 362 | psearch->next=pnew; 363 | } 364 | printf("\n学生已经添加完毕!\n\n"); 365 | } 366 | void adddata2(struct student *phead,char *name) 367 | { 368 | struct student *psearch,*pnew; 369 | psearch=phead; 370 | while(psearch!=NULL) 371 | { 372 | if(strcmp(psearch->snum,name)==0) 373 | { 374 | printf("开始输入即将添加的学生的信息!开始输入学号!\n"); 375 | pnew=(struct student *)malloc(sizeof(struct student)); 376 | scanf("%s",pnew->snum); 377 | printf("学号输入完毕,开始输入姓名:\n\n"); 378 | scanf("%s",pnew->sname); 379 | printf("姓名输入完毕,开始输入成绩:\n\n"); 380 | scanf("%d %d %d %d",&pnew->grade.chinese,&pnew->grade.math,&pnew->grade.picture,&pnew->grade.C_language); 381 | printf("成绩输入完毕!\n\n"); 382 | pnew->all=(pnew->grade.chinese+pnew->grade.math+pnew->grade.picture+pnew->grade.C_language); 383 | if(pnew->all>=350) 384 | pnew->level='A'; 385 | else if(pnew->all>=300) 386 | pnew->level='B'; 387 | else if(pnew->all>=250) 388 | pnew->level='C'; 389 | else 390 | pnew->level='D'; 391 | pnew->next=psearch->next; 392 | psearch->next=pnew; 393 | return ; 394 | } 395 | psearch=psearch->next; 396 | } 397 | printf("您所查找的学生不存在!\n"); 398 | 399 | } 400 | void deldata(struct student *phead) 401 | { 402 | int choice1=1; 403 | while(choice1) 404 | { 405 | printf("请选则选项:\n\n"); 406 | printf("1-按学号删除\n\n"); 407 | printf("2->按姓名删除\n\n"); 408 | printf("3->全部删除!\n\n"); 409 | printf("4->退出这个界面\n\n"); 410 | scanf("%d",&choice1); 411 | if(choice1==4) 412 | return ; 413 | if(choice1==1) 414 | { 415 | char num[9]; 416 | printf("请输入学号!\n\n"); 417 | scanf("%s",num); 418 | deldata1(phead,num); 419 | } 420 | if(choice1==2) 421 | { 422 | char name[25]; 423 | printf("请输入姓名\n\n"); 424 | scanf("%s",name); 425 | deldata2(phead,name); 426 | } 427 | if(choice1==3) 428 | { 429 | char iskong; 430 | printf("iskong? y or n:\n\n"); 431 | scanf("%c",&iskong); 432 | if(iskong=='y') 433 | deldata3(phead); 434 | } 435 | 436 | } 437 | } 438 | void deldata1(struct student *phead,char *num) 439 | { 440 | struct student *psearch=phead; 441 | struct student *pbefore=phead; 442 | while(psearch!=NULL) 443 | { 444 | char isdel[5]; 445 | if(strcmp(psearch->snum,num)==0&&(psearch==phead)) 446 | { 447 | printf("isdel? yes or no!\n\n"); 448 | scanf("%s",isdel); 449 | if(strcmp(isdel,"yes")==0) 450 | { 451 | phead=phead->next; 452 | printf("删除成功!\n\n"); 453 | } 454 | return; 455 | } 456 | if(strcmp(psearch->snum,num)==0&&(psearch!=phead)) 457 | { 458 | printf("isdel ? yes or no!\n\n"); 459 | scanf("%s",isdel); 460 | if(strcmp(isdel,"yes")==0) 461 | { 462 | pbefore->next=psearch->next; 463 | free(psearch); 464 | printf("删除成功!\n\n"); 465 | } 466 | return ; 467 | } 468 | pbefore=psearch; 469 | psearch=psearch->next; 470 | 471 | } 472 | printf("无法找到您的选项!请重新输入!\n\n"); 473 | } 474 | void deldata2(struct student *phead,char *name) 475 | { 476 | 477 | 478 | struct student *psearch=phead; 479 | struct student *pbefore=phead; 480 | while(psearch!=NULL) 481 | { 482 | char isdel[5]; 483 | if(strcmp(psearch->sname,name)==0&&(psearch==phead)) 484 | { 485 | printf("isdel? yes or no!\n\n"); 486 | scanf("%s",isdel); 487 | if(strcmp(isdel,"yes")==0) 488 | { 489 | phead=phead->next; 490 | printf("删除成功!\n\n"); 491 | } 492 | return; 493 | } 494 | if(strcmp(psearch->sname,name)==0&&(psearch!=phead)) 495 | { 496 | printf("isdel ? yes or no!\n\n"); 497 | scanf("%s",isdel); 498 | if(strcmp(isdel,"yes")==0) 499 | { 500 | pbefore->next=psearch->next; 501 | free(psearch); 502 | printf("删除成功!\n\n"); 503 | } 504 | return ; 505 | } 506 | pbefore=psearch; 507 | psearch=psearch->next; 508 | 509 | } 510 | printf("无法找到您的选项!请重新输入!\n\n"); 511 | } 512 | void sondeldata3(struct student *phead) 513 | { 514 | if(phead->next==NULL) 515 | { 516 | free(phead); 517 | return ; 518 | } 519 | else 520 | sondeldata3(phead->next); 521 | 522 | } 523 | void deldata3(struct student *phead) 524 | { 525 | char isdelall[5]; 526 | printf("isdelall? yes or no:\n\n\n"); 527 | scanf("%s",isdelall); 528 | if(strcmp(isdelall,"yes")==0) 529 | { 530 | sondeldata3(phead); 531 | printf("现在信息已经全部删除了\n\n!"); 532 | printf("您可以选择重新建立学生信息或者退出界面!\n\n"); 533 | return ; 534 | } 535 | printf("您没有选择删除全部信息!\n\n"); 536 | return ; 537 | } 538 | void paixu(struct student *phead) 539 | { 540 | int choice1=1; 541 | while(choice1) 542 | { 543 | printf("请输入你的排序选择!\n\n"); 544 | printf("1->按学号排序!\n\n"); 545 | printf("2->按姓名排序\n\n"); 546 | printf("3->按总成绩排序\n\n"); 547 | printf("4->按语文成绩排序\n\n"); 548 | printf("5->按高数成绩排序\n\n"); 549 | printf("6->按工图成绩排序\n\n"); 550 | printf("7->按C语言成绩排序\n\n"); 551 | printf("8->统计总成绩不合格人数!\n\n"); 552 | printf("9->退出该界面!\n\n"); 553 | scanf("%d",&choice1); 554 | if(choice1==9) 555 | return ; 556 | if(choice1==1) 557 | { 558 | xuehaopai(phead); 559 | break; 560 | } 561 | if(choice1==2) 562 | { 563 | xingmingpai(phead); 564 | break ; 565 | } 566 | if(choice1==3) 567 | { 568 | zongpai(phead); 569 | break; 570 | } 571 | if(choice1==4) 572 | { 573 | yuwenpai(phead); 574 | break ; 575 | } 576 | if(choice1==5) 577 | { 578 | gaoshupai(phead); 579 | break ; 580 | } 581 | if(choice1==6) 582 | { 583 | gongtupai(phead); 584 | break ; 585 | } 586 | if(choice1==7) 587 | { 588 | Cpai(phead); 589 | break ; 590 | } 591 | if(choice1==8) 592 | { 593 | nohegepai(phead); 594 | break ; 595 | } 596 | 597 | } 598 | } 599 | void xuehaopai(struct student *phead) 600 | { 601 | struct student stu[100]; 602 | struct student *psearch=phead; 603 | struct student temp; 604 | 605 | int renshu=0; 606 | int i,j; 607 | for(;psearch!=NULL;) 608 | { 609 | stu[renshu++]=*psearch; 610 | psearch=psearch->next; 611 | }//renshu代表的就是当前的人数; 612 | for(i=0;i0) 616 | { 617 | temp=stu[i]; 618 | stu[i]=stu[j]; 619 | stu[j]=temp; 620 | } 621 | 622 | } 623 | printf("排学号如下!\n\n\n"); 624 | printf("学号  姓名  语文 高数 工图 C语言 总成绩 等级\n\n"); 625 | for(i=0;inext; 640 | }//renshu代表的就是当前的人数; 641 | for(i=0;i0) 645 | { 646 | temp=stu[i]; 647 | stu[i]=stu[j]; 648 | stu[i]=temp; 649 | } 650 | } 651 | 652 | printf("排姓名如下!\n\n\n"); 653 | printf("学号  姓名  语文 高数 工图 C语言 总成绩 等级\n\n"); 654 | for(i=0;inext; 669 | }//renshu代表的就是当前的人数; 670 | for(i=0;inext; 698 | }//renshu代表的就是当前的人数; 699 | for(i=0;inext; 727 | }//renshu代表的就是当前的人数; 728 | for(i=0;inext; 756 | }//renshu代表的就是当前的人数; 757 | for(i=0;inext; 785 | }//renshu代表的就是当前的人数; 786 | for(i=0;inext; 815 | }//renshu代表的就是当前的人数; 816 | for(i=0;i