问题描述
任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:
(1)采用交互工作方式
(2)可以增加、删除、修改信息
(3)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)
(4)查询: a.按姓名查询 ;b.按学号查询 ;c按房号查询
(5)打印任一查询结果(可以连续操作)
算法思想
从文件中读入信息到结构体;根据学号查找学生信息使用折半查找,它的前提是序列有序,所以要在函数中调用按学号排序函数;根据姓名查找学生信息使用设置监视哨的顺序查找,设置第0个元素为哨兵,从后往前进行查找;根据房号查找学生信息采用从后往前顺序查找的方法;根据学号排序采用的是冒泡排序,用一个变量标记某一趟排序是否发生交换,不断进行比较和交换,直到不需要交换为止;根据姓名排序采用堆排序,沿key值较大的孩子结点向下筛选,将其建成升序的大根堆;根据房号排序采用直接插入排序,记录逐个后移,直到找到插入位置;增加学生信息即是直接输入新的信息,加到结构体数组的最后面;删除学生信息为找到该学生,后面的学生信息往前移一个;修改学生信息为找到该学生在数组中的位置,然后重新输入该位置的学生信息。
算法设计
1、菜单void menu()——输出功能选择。
2、打印全部信息void Allprint(Student &Stu)。
3、读信息void Read(Student &Stu)——从文件中读入信息到结构体。
4、按学号排序void NumSort(Student &Stu)——冒泡排序,用一个变量标记某一趟排序是否发生交换,不断进行比较和交换,直到不需要交换为止。
5、调整堆void HeapAdjust(Student &Stu,int s,int m)——将堆调整成大根堆。
6、建初堆void CreatHeap(Student &Stu)——调用调堆函数,调成大根堆。
7、按姓名排序void NameSort(Student &Stu)——堆排序,不断地把堆顶元素和未经排序子序列中最后一个元素做交换。
8、按房号排序void Housesort(Student &Stu)——直接插入排序,记录逐个后移,直到找到插入位置。
9、根据姓名查找void NameSearch(Student &Stu)——使用设置监视哨的顺序查找,设置第0个元素为哨兵,从后往前进行查找。