请问我想在单个查询学生信息的时候修改成可根据学号和姓名两张搜索方式,应该怎么改呢
#include
#include
#include
#define LEN sizeof(struct Student)
struct Student{
char number[20]; //学号
char name[10]; //姓名
int Chinese; //语文成绩
struct Student* next; //指向下一个数据的指针
};
struct Student* head = NULL;
struct Student* end = NULL;
void Menu(){
void Menu();
void Add();
void View();
void Delete();
void Repair();
void ViewAll();
system("cls");
printf("1、学生信息录入\n");
printf("2、学生单个成绩查询\n");
printf("3、查询全部学生成绩\n");
printf("4、修改学生信息\n");
printf("5、删除学生信息\n");
printf("6、退出系统\n");
int choice;
printf("请选择要使用的功能:\n");
loop:
scanf("%d",&choice);
switch (choice) {
case 1:
Add();
Menu();
case 2:
View();
Menu();
case 3:
ViewAll();
Menu();
case 4:
Repair();
Menu();
case 5:
Delete();
Menu();
case 6:
exit(0);
default:
printf("输入有误,请重新选择:");
goto loop;
}
}
void Add(){
system("cls");
int count;
printf("请输入要录入信息的个数:");
scanf("%d",&count);
struct Student *s1,*s2,*temp;
s1=s2=(struct Student*)malloc(LEN);
if(head==NULL){
head = s1;
}else{
end->next = s1 ;
}
int i = 1;
while(count>0){
printf("请输入第%d位学生信息:\n",i++);
printf("学号:\n");
scanf("%s",&s1->number);
printf("姓名:\n");
scanf("%s",&s1->name);
printf("语文成绩:\n");
scanf("%d",&s1->Chinese);
count--;
s2->next=s1;
s2=s1;
s1=(struct Student*)malloc(LEN);
printf("添加成功!\n");
system("pause");
system("cls");
}
s2->next= NULL;
end = s2;
printf("全部添加成功!\n");
system("pause");
}
void View(){
system("cls");
struct Student *VS;
printf("输入要查询信息的学生学号:\n");
char num[10];
int flag=1;
scanf("%s",&num);
for(VS=head;VS!=NULL;){
if(strcmp(VS->number,num)==0){
printf("成功找到!\n");
printf("学号:%s\t姓名:%s\n",VS->number,VS->name,VS->sex);
printf("语文:%d",VS->Chinese,VS->Math,VS->English);
flag=0;
break;
}
VS=VS->next;
}
if(flag){
printf("不好意思,未找到!\n");
}
system("pause");
}
void ViewAll(){
system("cls");
struct Student *VA;
if(head!=NULL){
printf("所有学生成绩如下:\n");
for(VA=head;VA!=NULL;){
printf("学号:%s\t姓名:%s\n",VA->number,VA->name,VA->sex);
printf("语文:%d\tn",VA->Chinese,VA->Math,VA->English);
VA=VA->next;
}
}else{
printf("该系统中还未录入信息");
}
system("pause");
}
void Repair(){
system("cls");
struct Student *RS;
char num[10];
int flag = 1;
printf("输入要修改成绩学生的学号:\n");
scanf("%s",num);
for(RS=head;RS!=NULL;){
if(strcmp(RS->number,num)==0){
printf("成功找到该学生");
printf("学号:%s\t姓名:%s\n",RS->number,RS->name,RS->sex);
printf("语文:%d\n",RS->Chinese,RS->Math,RS->English);
flag = 0;
printf("学号:\n");
scanf("%s",&RS->number);
printf("姓名:\n");
scanf("%s",&RS->name);
printf("英语成绩:\n");
scanf("%d",&RS->English);
printf("修改成功");
system("pause");
}
RS=RS->next;
}
if(flag){
printf("输入信息有误,未查询到");
system("pause");
}
}
void Delete(){
system("cls");
int flag =1;
while(flag){
printf("请输入要删除的学生学号:");
char num[10];
scanf("%s",&num);
struct Student * DS,*temp;
for(DS=head;DS!=NULL;){
if(strcmp(DS->number,num)==0){
if(DS==head){
head = DS->next;
flag = 0;
printf("删除成功!\n");
system("pause");
}else{
flag = 0;
printf("删除成功!\n");
temp->next= DS->next;
free(DS);
system("pause");
}
}
temp = DS;
DS=DS->next;
}
if(flag){
printf("未找到该学生学号!\n");
system("pause");
}
}
}
int main(){
void Menu();
void Add();
void View();
void Delete();
void Repair();
void ViewAll();
Menu();
}
基于Monster 组和GPT的调写:
要修改单个查询学生信息的方式,使其可根据学号和姓名两种搜索方式,需要在 View() 函数中添加一个输入选项,根据用户输入选择搜索方式,再进行搜索。
以下是修改过的 View() 函数代码:
void View(){
system("cls");
struct Student *VS;
int choice;
printf("请输入查询方式:\n");
printf("1、按学号查询\n");
printf("2、按姓名查询\n");
loop:
scanf("%d",&choice);
if (choice != 1 && choice != 2) {
printf("输入有误,请重新选择:");
goto loop;
}
char str[20];
if (choice == 1) {
printf("请输入要查询信息的学生学号:\n");
scanf("%s", str);
for(VS=head;VS!=NULL;VS=VS->next){
if(strcmp(VS->number,str)==0){
printf("成功找到!\n");
printf("学号:%s\t姓名:%s\n",VS->number,VS->name);
printf("语文:%d\n",VS->Chinese);
return;
}
}
} else if (choice == 2) {
printf("请输入要查询信息的学生姓名:\n");
scanf("%s", str);
for(VS=head;VS!=NULL;VS=VS->next){
if(strcmp(VS->name,str)==0){
printf("成功找到!\n");
printf("学号:%s\t姓名:%s\n",VS->number,VS->name);
printf("语文:%d\n",VS->Chinese);
return;
}
}
}
printf("不好意思,未找到!\n");
system("pause");
}
在函数中添加了一个输入选项 choice,用于选择搜索方式。如果选择了按学号查询,就输入要查询的学号,遍历链表查找符合条件的节点;如果选择了按姓名查询,就输入要查询的学生姓名,同样遍历链表查找符合条件的节点。最后输出查询结果,如果未找到,则输出“不好意思,未找到!”信息。
你可以查看 这篇文章 看看是否对您有所帮助 https://blog.csdn.net/qq_45410446/article/details/126531376 有记载如何查询的功能 查询后 进行修改
单个查询学生信息的时候可根据学号和姓名两种搜索方式,void View() 函数已修改为: 输入是学号时它自动按学号查询,输入是姓名时他自动按姓名查询。其他几个函数也做了修改完善,改动处见注释,供参考:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student {
char number[20]; //学号
char name[10]; //姓名
char sex[4]; //性别
int Chinese; //语文成绩
int Math; //数学
int English; //英语
struct Student* next;//指向下一个数据的指针
};
struct Student* head = NULL;
struct Student* end = NULL;
void Menu(); // 函数声明 移动到这里 //修改
void Add();
void View();
void Delete();
void Repair();
void ViewAll();
void Menu() {
system("cls");
printf("1、学生信息录入\n");
printf("2、学生单个成绩查询\n");
printf("3、查询全部学生成绩\n");
printf("4、修改学生信息\n");
printf("5、删除学生信息\n");
printf("6、退出系统\n");
int choice;
printf("请选择要使用的功能:\n");
loop:
scanf("%d", &choice);
switch (choice) {
case 1:
Add();
//Menu();
break; //修改
case 2:
View();
//Menu();
break; //修改
case 3:
ViewAll();
//Menu();
break; //修改
case 4:
Repair();
//Menu();
break; //修改
case 5:
Delete();
//Menu();
break; //修改
case 6:
exit(0);
default:
printf("输入有误,请重新选择:");
goto loop;
}
Menu(); //修改
}
void Add() {
system("cls");
int count;
printf("请输入要录入信息的个数:");
scanf("%d", &count);
struct Student* s1, * s2, * temp;
s1 = s2 = (struct Student*)malloc(LEN);
if (head == NULL) {
head = s1;
}
else {
end->next = s1;
}
int i = 1;
while (count > 0) {
printf("请输入第%d位学生信息:\n", i++);
printf("学号:\n");
scanf("%s", &s1->number);
printf("姓名:\n");
scanf("%s", &s1->name);
printf("性别:\n");
scanf("%s", &s1->sex);
printf("语文成绩:\n");
scanf("%d", &s1->Chinese);
s1->English = s1->Math = s1->Chinese;
count--;
s2->next = s1;
s2 = s1;
s1 = (struct Student*)malloc(LEN);
printf("添加成功!\n");
system("pause");
system("cls");
}
s2->next = NULL;
end = s2;
printf("全部添加成功!\n");
system("pause");
}
void View() {
system("cls");
struct Student* VS;
printf("输入要查询信息的学生 学号 或 姓名:\n"); //修改
char num[20];
int flag = 1;
scanf("%s", &num);
for (VS = head; VS != NULL;) {
if (strcmp(VS->number, num) == 0 || strcmp(VS->name, num) == 0) { //修改
printf("成功找到!\n");
printf("学号:%s 姓名:%s 性别:%s ", VS->number, VS->name, VS->sex); //修改
printf("语文:%d 数学:%d 英语:%d\n", VS->Chinese, VS->Math, VS->English);//修改
flag = 0;
break; //修改
}
VS = VS->next;
}
if (flag) {
printf("不好意思,未找到!\n");
}
system("pause");
}
void ViewAll() {
system("cls");
struct Student* VA;
if (head != NULL) {
printf("所有学生成绩如下:\n");
for (VA = head; VA != NULL;) {
printf("学号:%s 姓名:%s 性别:%s ", VA->number, VA->name, VA->sex); //修改
printf("语文:%d 数学:%d 英语:%d\n", VA->Chinese, VA->Math, VA->English);//修改
VA = VA->next;
}
}
else {
printf("该系统中还未录入信息");
}
system("pause");
}
void Repair() {
system("cls");
struct Student* RS;
char num[20];
int flag = 1;
printf("输入要修改成绩学生的学号:\n");
scanf("%s", num);
for (RS = head; RS != NULL;) {
if (strcmp(RS->number, num) == 0) {
printf("成功找到该学生");
printf("学号:%s 姓名:%s 性别:%s ", RS->number, RS->name, RS->sex); //修改
printf("语文:%d 数学:%d 英语:%d\n", RS->Chinese, RS->Math, RS->English);//修改
flag = 0;
printf("学号:");
scanf("%s", RS->number); //scanf("%s", &RS->number);修改
printf("姓名:");
scanf("%s", RS->name); //scanf("%s", &RS->name); 修改
printf("英语成绩:");
scanf("%d", &RS->English);
printf("修改成功");
break; //system("pause"); 修改
}
RS = RS->next;
}
if (flag)
printf("输入信息有误,未查询到");
system("pause");
}
void Delete() {
system("cls");
int flag = 1;
while (flag) {
printf("请输入要删除的学生学号:");
char num[20];
scanf("%s", &num);
struct Student* DS, * temp;
for (DS = head; DS != NULL;) {
if (strcmp(DS->number, num) == 0) {
if (DS == head) //修改
head = DS->next;
else
temp->next = DS->next;
flag = 0; //修改
free(DS);
printf("删除成功!\n");
break; //system("pause"); 修改
}
else { //修改
temp = DS;
DS = DS->next;
}
}
if (flag) {
printf("未找到该学生学号!\n");
break; //修改
}
}
system("pause");
}
int main() //修改
{
Menu();
return 0;
}