你好,我这个学生信息管理系统封代码是正确的可以运行,但是在这个的查找功能的基础上我想问一下怎么能够根据学生的学号、姓名、性别等属性进行单关键字或多关键字的查询,然后最后的查询结果按学号排序。
#include<stdio.h>
#include<string>
#define MAX 120
//定义结构体记录学生基本信息
typedef struct student{
char name[MAX];//姓名
char gender[MAX];//性别
int age;//年龄
long stu_id;//学号
char professional[MAX];//专业
long phone;//联系方式
char nation[MAX];//民族
}student;
//定义结果体管理学生
typedef struct class_room {
student person[MAX];//每个学生
int count;//学生人数
}class_room;
//初始化学生人数为0
void init_class_room(class_room* cr) {
cr->count = 0;
}
//添加学生信息
bool add_student(class_room* cr,char name[MAX],char gender[MAX],int age,long stu_id,char professional[MAX],long phone,char nation[MAX]) {
int count = cr->count;
for (int i = 0; i < count; i++) {
long id = cr->person[i].stu_id;
if (id == stu_id) {
return false;
}
}
snprintf(cr->person[cr->count].name,sizeof(name)+1,name);
snprintf(cr->person[cr->count].gender,sizeof(gender)+1,gender);
snprintf(cr->person[cr->count].professional,sizeof(professional)+1,professional);
snprintf(cr->person[cr->count].nation,sizeof(nation)+1,nation);
cr->person[cr->count].age = age;
cr->person[cr->count].stu_id = stu_id;
cr->person[cr->count].phone = phone;
cr->count++;
return true;
}
//修改学生信息
bool update_student(class_room* cr,long stu_id, char name[MAX], char gender[MAX], int age,char professional[MAX],long phone,char nation[MAX]) {
int count = cr->count;
for (int i = 0; i < count; i++) {
if (stu_id == cr->person[i].stu_id) {
snprintf(cr->person[i].name, sizeof(name) + 1, name);
snprintf(cr->person[i].gender, sizeof(gender) + 1, gender);
snprintf(cr->person[cr->count].professional,sizeof(professional)+1,professional);
snprintf(cr->person[i].nation,sizeof(nation) + 1,nation);
cr->person[i].age = age;
return true;
}
}
return false;
}
//删除学生信息
bool delete_student(class_room* cr,long stu_id) {
int count = cr->count;
if (count == 1 && cr->person[cr->count - 1].stu_id == stu_id) {
cr->count--;
return true;
}
if (cr->person[cr->count - 1].stu_id == stu_id) {
cr->count--;
return true;
}
for (int i = 0; i < count - 1 ; i++) {
if (stu_id == cr->person[i].stu_id) {
cr->person[i] = cr->person[i + 1];
cr->count--;
return true;
}
}
return false;
}
//打印学生信息
int show_student(class_room* cr) {
int count = cr->count;
if (count == 0) {
return -1;
}
for (int i = 0; i < count; i++) {
printf("学生 %d 姓名:%s\n",i + 1,cr->person[i].name);
printf(" 性别:%s\n",cr->person[i].gender);
printf(" 年龄:%d\n",cr->person[i].age);
printf(" 学号:%d\n",cr->person[i].stu_id);
printf(" 专业:%s\n",cr->person[i].professional);
printf(" 联系方式:%d\n",cr->person[i].phone);
printf(" 民族:%s\n",cr->person[i].nation);
printf("\n");
}
}
//查找学生信息
bool find_student(class_room* cr,long stu_id) {
int count = cr->count;
for (int i = 0; i < count; i++) {
if (stu_id == cr->person[i].stu_id) {
printf("学生 %d 姓名:%s\n", i + 1, cr->person[i].name);
printf(" 性别:%s\n", cr->person[i].gender);
printf(" 年龄:%d\n", cr->person[i].age);
printf(" 学号:%d\n", cr->person[i].stu_id);
printf(" 专业:%s\n",cr->person[i].professional);
printf(" 联系方式:%d\n",cr->person[i].phone);
printf(" 民族:%s\n",cr->person[i].nation);
return true;
}
}
return false;
}
//定义主菜单
void menu() {
printf("\t\t\t\t\t=============**===============\n");
printf("\t\t\t\t\t========****欢迎****==========\n");
printf("\t\t\t\t\t=====****学生管理系统****=====\n");
printf("\t\t\t\t\t============****==============\n");
printf("\t请输入选项进行操作:\n");
printf("\t1.添加学生信息\t2.删除学生信息\t3.查找学生信息\t4.修改学生信息\t5.展示学生信息\t6.退出\n");
}
//主函数
int main(void) {
//初始化
struct class_room cr;
init_class_room(&cr);
while (true) {
menu();
int choice;
scanf("%d", &choice);
switch (choice)
{
case 1: {//添加学生
printf("请输入学生姓名:\n");
char name[MAX];
scanf("%s",name);
printf("请输入学生性别:\n");
char gender[MAX];
scanf("%s",gender);
printf("请输入学生年龄:\n");
int age;
scanf("%d",&age);
printf("请输入学生学号:\n");
long stu_id;
scanf("%d",&stu_id);
printf("请输入学生专业:\n");
char professional[MAX];
scanf("%s",professional);
printf("请输入学生联系方式:\n");
long phone;
scanf("%d",&phone);
printf("请输入学生民族:\n");
char nation[MAX];
scanf("%s",nation);
bool result = add_student(&cr,name,gender,age,stu_id,professional,phone,nation);
if (result) {
printf("添加学生信息成功!!\n");
}else{
printf("添加学生信息失败,该学生学号已存在!!\n");
}
}break;
case 2: {//删除学生
printf("请输入需要删除学生信息的学生学号:\n");
long id;
scanf("%d",&id);
bool result = delete_student(&cr,id);
if (!result) {
printf("删除学生信息失败,请确认学生学号后再次尝试!!\n");
}else {
printf("删除学生信息成功!!\n");
}
}break;
case 3: {//查找学生
printf("请输入学生学号来查询学生信息:\n");
long stu_id;
scanf("%d",&stu_id);
bool result = find_student(&cr,stu_id);
if (!result) {
printf("无该学生信息,请确认学号后再次输入!!\n");
}
}break;
case 4: {//修改学生
printf("请输入要修改学生的学号:\n");
long id;
scanf("%d",&id);
printf("修改后学生姓名:\n");
char name[MAX];
scanf("%s",name);
printf("修改后学生性别:\n");
char gender[MAX];
scanf("%s",gender);
printf("修改后学生年龄:\n");
int age;
scanf("%d",&age);
printf("请输入要修改学生的专业:\n");
char professional[MAX];
scanf("%s",professional);
printf("请输入要修改学生的联系方式:\n");
long phone;
scanf("%d",&phone);
printf("修改后学生民族:\n");
char nation[MAX];
scanf("%s",nation);
bool result = update_student(&cr,id,name,gender,age,professional,phone,nation);
if (!result) {
printf("修改学生信息失败!!请确认学生学号后修改!!\n");
}
}break;
case 5: {//打印学生
int result = show_student(&cr);
if (result == -1) {
printf("暂无学生信息,请输入学生信息后查询!!\n");
}
}break;
case 6: {//退出
printf("谢谢使用!!\n");
exit(-1);
}break;
default:
printf("");
break;
}
}
system("pause");
return 0;
}
```