【C语言】学生管理系统:完整模拟与实现(一)https://developer.aliyun.com/article/1617248
4.3 实现学生成绩管理系统接口(主要是对顺序表接口的复用)
4.3.1学生信息的初始化
void Achievement_Init(Achievement* ac) { SLInit(ac); }
4.3.2 学生信息的销毁
void Achievement_Destroy(Achievement* ac) { SLDestroy(ac); }
4.3.3 添加学生信息
void Achievement_Add(Achievement* ac) { AInfo info; printf("请分别输入学生的名字、性别、学号、成绩\n"); scanf("%s %s %s %d", info._name, info._sex, info._registration, &info._grades); //往(顺序表)中插入数据 SLPushBack(ac, info); }
4.3.4 查找指定学生的下标
int FindSTName(Achievement* ac, char name[]) { for (int i = 0; i < ac->_size; i++) { if (strcmp(ac->_a[i]._name, name) == 0 ) { return i; } } return -1; }
4.3.5 删除学生信息
void Achievement_Del(Achievement* ac) { assert(ac); //根据用户的名字进行删除 printf("请输入你需要删除的学生姓名\n"); char name[NAME_MAX]; scanf("%s", name); int findidex = FindSTName(ac, name); if (findidex < 0) { printf("你需要删除的学生信息不存在\n"); return; } //找到了进行删除操作 SLErase(ac, findidex); }
4.3.6 查看学生成绩信息
void Achievement_Show(Achievement* ac) { printf("系统正在加载中....\n"); Sleep(3000); printf("系统加载完成!\n"); //打印表头信息 printf("%s %s %-10s %s\n", "学生姓名", "学生性别", "学生学号", "学生成绩"); for(int i =0; i < ac->_size; i++) { printf("%-10s %-5s %-8s %-d分\n", ac->_a[i]._name, ac->_a[i]._sex, ac->_a[i]._registration, ac->_a[i]._grades); } }
4.3.7 修改学生信息
void Achievement_Modify(Achievement* ac) { assert(ac); //根据用户的名字进行修改 成绩 printf("请输入你需要修改的学生姓名\n"); char name[NAME_MAX]; scanf("%s", name); int findidex = FindSTName(ac, name); if (findidex < 0) { printf("你需要修改的学生信息不存在\n"); return; } printf("系统正在加载中....\n"); Sleep(3000); printf("系统加载完成!\n"); printf("请重新分别输入学生的名字、性别、学号、成绩\n"); scanf("%s %s %s %d", ac->_a[findidex]._name, ac->_a[findidex]._sex, ac->_a[findidex]._registration, &ac->_a[findidex]._grades); printf("修改成功!\n"); }
4.3.8 查找指定学生信息
void Achievement_Find(Achievement* ac) { assert(ac); //根据用户的名字进行修改 成绩 printf("请输入你需要查找的学生姓名\n"); char name[NAME_MAX]; scanf("%s", name); int findidex = FindSTName(ac, name); if (findidex < 0) { printf("你需要查找的学生信息不存在\n"); return; } printf("系统正在加载中....\n"); Sleep(3000); printf("系统加载完成!\n"); printf("以下是你需要查找的学生信息\n"); printf("%-10s %-5s %-8s %-d分\n", ac->_a[findidex]._name, ac->_a[findidex]._sex, ac->_a[findidex]._registration, ac->_a[findidex]._grades); }
4.3.9 按照名字或者成绩排序
//按照名字或者成绩排序 void Achievement_Sort(Achievement* ac) { enum AcInfo select; printf("请输入你需要按照什么类型排序:(1->Name,2->Registration,3->Grades)\n"); // 清空输入缓冲区 fflush(stdin); scanf("%u", &select); if (select < Name || select > Grades) { printf("输入的排序类型无效!\n"); return; // 或者采取其他合适的处理方式 } //这个名字就代表什么数据 switch (select) { case Name: qsort(ac->_a, ac->_size, sizeof(ac->_a[0]), Name_Compare); break; case Registration: qsort(ac->_a, ac->_size, sizeof(ac->_a[0]), Registration_Compare); break; case Grades: qsort(ac->_a, ac->_size, sizeof(ac->_a[0]), Grades_Compare); break; default: break; } printf("排序成功\n"); }
【C语言】学生管理系统:完整模拟与实现(三)https://developer.aliyun.com/article/1617255