if(strcmp(str,str1)==0)/* 密码验证 */ { } else { }
scanf(\ if(i==0) {
printf(\您的原密码为:%s\\n\\n\请输入新密码:\\n\scanf(\
printf(\您输入的新密码为:%s\\n\确认请键入:yes,重新键入请:no\\n\\n\scanf(\if(strcmp(x,\{
strcpy(str,str2);
printf(\密码修改成功。请按回车确认\\n\fp=fopen(\ /* 密码导入文件并保存 */
printf(\密码错误,请重新输入:\\t\ /* 密码错误时,可再输入一次 */ scanf(\
if(strcmp(str,str1)==0) { } else { }
printf(\密码再次错误,程序结束!!\\n\ /* 2次输入都错误,程序将结束 */ exit(0);
system(\密 码 正 确,欢 迎 使 用 \\t^_^\\n\\n\
printf(\修 改 密 码 请 按 0 ;学 生 成 绩 管 理 请 按 1。\\n\
system(\密 码 正 确,欢 迎 使 用 \\t^_^\\n\\n\ printf(\修 改 密 码 请 按 0 ;学 生 成 绩 管 理 请 按 1\\n\
}
Student *cin(void); Student *sort_1(Student *head,int); void sort_2(Student *head); void print(Student *head); Student *sort_all(Student *head); void find(Student *head); Student *add_new(Student *head);
/*函数的声明 */
} if(i==1) return 1; }
fclose(fp); /*文件关闭 */ }
else if(strcmp(x,\{ } else
printf(\不合法输入!!!\\n\
printf(\请重新输入密码(不可再错):\\n\ /* 密码2次修改 */ scanf(\
printf(\您输入的新密码为:%s\\n\请按回车确认。\\n\strcpy(str,str2);
printf(\密码修改成功。请按回车确认\\n\
fputs(str2,fp);
fclose(fp); getch();
return 1; /* 返回值为1,主函数 继续 */
fp=fopen(\
fputs(str2,fp);
fclose(fp); getch();return 1;
Student *cin() /* 成绩输入函数 */ { int flag; /* flag为选择标志 */
Student *head,*p1,*p2; /* 定义指向结构体的指针 */ n=0;
head=(Student *)malloc(LEN); /* 分配内存,强制转换 */ p2=head; /* p2指向表头 */
printf(\请输入第%d名学生的学号(学号为0表示结束输入):\ scanf(\ while(getchar()!='\\n');
for(;flag;) /* 只要flag不为0,循环依旧 */ { n++;
p1=(Student *)malloc(LEN); p1->num=flag;
printf(\请输入第%d名学生的姓名:\ scanf(\
printf(\请输入第%d名学生的语文成绩:\ /*在当前的节点的数据域中中存储成绩 scanf(\
printf(\请输入第%d名学生的数学成绩:\ scanf(\
printf(\请输入第%d名学生的英语成绩:\
scanf(\
printf(\请输入第%d名学生的计算机成绩:\ scanf(\
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3]; /* 求和 */ p2->next=p1; /* p1指向p2的指针域 */ p2=p1;
printf(\请输入第%d名学生的学号,没有此学生则输入0表示结束:\
*/
}
Student *sort_all(Student *head)/* 排序函数,返回 结构体类型的指针,形参也为 结构体类型的指针 */ { {
printf(\学生成绩统计排序 # # # #\\n\
printf(\按学生学号排序\\t \\n\
int choose;
for(;;) /* for语句死循环 */ }
p2->next=NULL; /* 最后一个节点的指针域置空 */
printf(\scanf(\
return head; /* 返回表头 */
printf(\按学生总分排序\\t \\n\ printf(\按学生语文成绩排序\\t \\n\ printf(\按学生数学成绩排序\\t \\n\ printf(\按学生英语成绩排序\\t \\n\ printf(\按学生计算机成绩排序\\t \\n\ printf(\单科高分及均分\\t \\n\ printf(\显示当前学生成绩\\t \\n\ printf(\返回上一级菜单\\t \\n\
printf(\ printf(\请输入你要执行的操作:\ scanf(\
{
while(getchar()!='\\n'); switch(choose)
/* 选择排序条件 */
case 1: case 2: case 3: case 4: case 5:
case 6:head=sort_1(head,choose);break;/* 调用排序子函数 形参为 排序条件*/ case 7:print(head);sort_2(head);break;/* 显示所有成绩,最高分,最低分及平均分 */ case 8:print(head);break;/* 所有成绩 */ case 0:return head; /* 返回上一级菜单 */
default: printf(\您的输入有误!请重新输入:\\n\\n\
}
} }
Student *sort_1(Student *head,int choose) { Student *p1,*p2=head->next,*pm,*px; /* 表头的指针域指向p2 */ Student mid; /* 中转结构体 */ if (!p2)/* 如果没有已录入的成绩,*/ return head;/*返回上一级菜单 */ for(p1=p2;p1->next!=NULL;p1=p1->next) /* p1的指针域不为空,继续循环 */ {
pm=p1;
for(p2=p1->next;p2!=NULL;p2=p2->next) switch(choose) /* 基于排序条件的排序 */ {
case 1:if (pm->num>p2->num) pm=p2;break;
case 2:if (pm->sum
case 3:if (pm->score[0]
case 4:if (pm->score[1]
/* p1指向它的下一个节点*/