学生信息输入模块 进入 依次输入各项信息 选择自符ch 判断ch!='n'&& ch!='N' 返回 2、输出与排序模块
输出学生信息模块 进入 P=head 输出对应学生信息 P=p->next P!=NULL 结束 总分排序情况 进入 ★冒泡法排序 总成绩由大到小排序 输出 结束
3、删除与修改信息模块
删除学生信息模块 进入 输入学生的姓名 从头指针依次查找 P=p->next Head=NULL 执行删除操作 该学生不存在 结束 4、统计信息模块
修改学生信息模块 进入 输入学生姓名 从头指针依次查找 P=p->next 判断strcmp(p->name.a)!=o 否 是 该学生不存在 修改该学生的信息 结束
学生成绩统计模块 进入 统计最高分 P=head P!=NULL 通过冒泡排序 第一个学生的信息 统计成功 结束 4、查找信息模块
查找学生信息模进入 从主函数得到头指针 按学号查找 按姓名查找 将学号存在变量b 将姓名存在变量a P!=NULL P=p->next 是 是 strcmp(p->num.b)!=0 strcmp(p->name.a)!=0 找到该学生的信息 输出信息 结束
3.重点设计及编码
此程序的重点是既能把学生信息保存到文件中,又能保存到磁盘中,方便实用与读取,代码
如下:
struct student *creat(struct student *p)//创建链表 { struct student *p1 = NULL; p1 = (struct student*)malloc(sizeof (struct student)); p -> next = p1; p1 -> next = NULL; printf(\请输入要添加的学生的信息\\n\ printf(\学号:\ scanf(\ printf(\姓名: \ scanf(\ printf(\数学成绩:\ printf(\英语成绩:\ printf(\成绩:\ scanf(\ p1 -> sum = 0; p1 -> sum = p1 -> scorem + p1 -> scorec + p1 -> scoree; printf(\总分:%d\ return p1; }
void save1(struct student *p)//将链表从内存保存到文件中 { FILE *fp; if ((fp = fopen(\学生成绩管理系统.txt\ printf(\创建失败!\\n\ while(p != NULL) { fwrite(p,sizeof(struct student),1,fp); p = p -> next; } fclose(fp); printf(\保存成功!\\n\}
void save2(struct student *p)//将以变动的链表信息存入到文件中 { FILE *fp; if ((fp = fopen(\学生成绩管理系统.txt\ printf(\创建失败!\\n\ while(p != NULL) { fwrite(p,sizeof(struct student),1,fp); p = p -> next; } fclose(fp); }
struct student *read()//把文件中的数据读到链表中