Creat_St
udentoutput_StudentInsert_StudentLocate_Student、Delete_StudentSeek_StudentQueue_StudentFilter_Studentexit1、添加2、输出3、插入4、删除5、查找6、排序7、筛选0、退出开始输入功能选项c结束三、详细设计
1、添加学生: 2、输出学生: 创建节点s LinkList *p=L->next;
输入学生信息,计算总分与加权分 for(m=1;m<=总人数&&p!=NULL;m++) r->next=s;r=s;(尾插法插入链表)
count=count+1;学生总数加1
6
输出学生信息,p=p->next
开始LinkList *p=L->next;m+1m<=n&&p!=NNULL?Y输出学生信息p=p->nextm++结束
3、插入学生 输入要插入的位置 scanf(\ 调用插入函数 Insert_Student(h,w); 的流程图如下:
Insert_Student 函数
开始创建节点s并输入学生信息将节点s用尾插法插入学生链表输入jYIf (j==1)N结束
4、删除学生
数字选择删除方式 按编号删除和学号删除 1编号 调用Delete_Student
2学号 调用Locate_Student找到
学生位置,在用Delete_Student
Delete_Student的函数流程图: 7
开始开始LinkList *p=L,*s;j=0;LinkList *p=L,*s;j=0;Nj
Locate_Student函数的流程图与如下:Locate_Student1的流程图类似,不再重复了
开始LinkList *p=L;i=1;Np!=NULL&&strcmp(p->mun,mun)!=0?Yi++;p=p->next;return(i)
结束
8
5查找学生:调用Seek_Student函数,分为按学号查找和按姓名查找
1按编号 调用Locate_Student函数返回i在调用Out_one_Student输出第i个学生 2 按姓名调用Locate_Student1函数返回i在调用Out_one_Student输出第i个学生
6排序函数 调用Queue_Student函数:其中有按学号,总分,各科成绩排序 我这里采用的是冒泡排序法进行排序,分别定义了两个节点指针q指向头指针p指向q的下一个节点,在进入双重循环进行比较排序 流程图如下:
开始LinkList *q,*p,*t1,*t2;q=L,p=L->nextq->next!=NULL?Np->next!=NULL?NNq的数据>p的数据?Y交换位置YYq=q->next结束
排序的方法都类似,知识比较数据不同,所以就没有一一画出来了
9
7 筛选
创建另一个链表r用于存筛选出来的学生,并调用output_Student函数输出 筛选程序流程图如下:
开始输入筛选的数据L里的数据>输入的数据?YN将该学生存入新的学生节点s将节点s用尾插法插入到链表r中调用output_Student输出链表r结束
筛选程序又分为1 按总分选 2 全部及格的人 3 按各科成绩
1 而总分筛选主要是输入一个数值,判断数据是否大于输入数据,大于的都输出 2 去不几个的人通过比较每一科成绩是否都大于60分,大于的就选出插入新链表并输出
3 各科成绩的话是只比较其中一科来创建链表并输出
其比较流程图都如上图所示,这里便不再一一画出来了。
10