整个可以运行的源代码在文章最后!!!
首先我们先创建一个结构体,用来抽象一个学生的信息,包含该学生的学号,姓名,成绩(这里我们为了程序简单,只包含了一个成绩。也可以自行添加,其他成绩信息,以及性别,年龄等等)
typedef struct
{
int id; //学号
char name[20]; //姓名
double score; //成绩
}st, * pst;
接着我们考虑设计学生成绩管理系统的菜单,以及菜单的选择功能。
大概可以列出入上图几个功能,然后菜单界面大致可以参考上图(图中的三,五是当时我根据自己课设要求编写的,可以不看)
然后我们可以写出下面的代码
void menu(pst S, PNode * node)
{
int a;
//显示菜单
printf("**************学生成绩查询系统***************\n");
printf("****************1.录入信息*******************\n");
printf("*************2.显示所有学生信息**************\n");
printf("***********3.按学号排序后折半查找************\n");
printf("*****************4.保存信息******************\n");
printf("************5.构建二叉排序树查找*************\n");
printf("*************6.按学号删除信息****************\n");
printf("**************7.清空所有信息*****************\n");
printf("*****************0.退出系统******************\n");
printf("请输入您需要操作的对应序号:");
scanf("%d", &a);
//选择功能
switch (a)
{
case 1: add(S); break;
case 2: display(S); break;
case 3: lookfor(S); break;
case 4: save(S); printf("保存成功!\n"); break;
case 5: create(node, S); break;
case 6: del(S); break;
case 7: delall(S); break;
case 0: quit(S); break;
default: printf("输入错误!请重新输入!\n"); break;
}
}
函数中的参数可以暂时不看,函数的定义都在后面。
顺便把函数声明也全写了。
void add(st * S); //添加信息
void display(pst S); //显示学生信息
void save(st * S); //保存文件
void read(st * S); //读取文件
void menu(pst S, PNode * node); //菜单目录
void quit(pst S); //退出程序
void inseart(PNode * root,st key); //二叉排序树插入
void create(PNode* root, pst keyArray); //创建二叉排序树
PNode search(PNode root, int id); //二叉排序树搜索(递归)
int find(pst a,int val); //折半查找
void sort(pst a); //插入排序
void lookfor(pst a); //折半查找功能函数
void del(pst S); //删除
void delall(pst S); //清空
然后我们开始写主函数里面的东西,首先我们可以先创建一个结构体数组,用来操作(增删改查排序)信息以及临时保存信息(后面我们要将其写入文本文件中保存)。然后在把menu()函数在主函数里调用。
int main(void)
{
st S[MAXSIZE]; //这里的MAXSIZE, 我用的是宏定义(100),相当于数字100
//PNode node = NULL;
//读取文件
//read(S);
//显示菜单
while (1)
{
menu(S, &node);
//按任意键继续
system("pause");
//清屏
system("cls");
}
return 0;
}
上面的代码中,注释掉的可以暂时不看。首先创建了结构体数组,至于后面将menu()函数在while()循环中调用,是为了菜单可以一直显示,其他提示信息没用时可以利用清屏,清除。
接着我们实现录入信息的功能函数。在录入中,为了防止输入多个一样的学号,我们进行的判断。详细见如下代码。