修改此程序,使其具有多个班级,并能进行班级内单科成绩排名
#include
#include //包含了控制台窗口操作相关的函数
#include
#define LEN sizeof(struct Student)// 定义结构体类型所占的内存大小
struct Student// 定义结构体类型
{
char name[10];
char number[20];
int C_Language;
int Math;
int English;
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();
void AddOne();
system("cls"); // 清空控制台窗口内容
printf("1.学生信息录入\n");
printf("2.学生单个成绩查询\n");
printf("3.查询全部学生成绩\n");
printf("4.修改学生信息\n");
printf("5.删除学生信息\n");
printf("6.学生单科成绩录入\n");
printf("7.退出系统\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:
AddOne();
Menu();
case 7:
exit(0);
default:
printf("输入有误,请重新选择:");
break;
}
}
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->name);
printf("学号:\n");
scanf("%s",&s1->number);
printf("C语言成绩:\n");
scanf("%d",&s1->C_Language);
printf("数学成绩:\n");
scanf("%d",&s1->Math);
printf("英语成绩:\n");
scanf("%d",&s1->English);
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\t\n",VS->number,VS->name);
printf("C语言:%d\t数学:%d\t英语:%d",VS->C_Language,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\t\n",VA->name,VA->number);
printf("C语言:%d\t数学:%d\t英语:%d\n",VA->C_Language,VA->Math,VA->English);
VA=VA->next;
}
printf("所有不及格科目超过两科的学生名单如下:\n");
for(VA=head;VA!=NULL;)
{
int lostNum = 0;
if(VA->C_Language < 60)
{
lostNum++;
}
if(VA->Math< 60)
{
lostNum++;
}
if(VA->English< 60)
{
lostNum++;
}
if(lostNum > 1)
{
printf("姓名:%s\t\n",VA->name);
}
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\t\n",RS->number,RS->name);
printf("C语言:%d\t数学:%d\t英语:%d\n",RS->C_Language,RS->Math,RS->English);
flag = 0;
printf("姓名:\n");
scanf("%s",&RS->name);
printf("学号:\n");
scanf("%s",&RS->number);
printf("C语言成绩:\n");
scanf("%d",&RS->C_Language);
printf("数学成绩:\n");
scanf("%d",&RS->Math);
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");
}
break;
}
temp = DS;
DS=DS->next;
}
if(flag)
{
printf("未找到该学生学号!\n");
system("pause");
}
}
}
void AddOne()
{
system("cls");
struct Student* DA =(struct Student*)malloc(sizeof(struct Student)); //修改1
DA->next = NULL; //修改,增加这一行
int flag = 1;
while (flag)
{
printf("请输入姓名:\n");
scanf("%s", DA->name);
printf("请输入学号:\n");
scanf("%s", DA->number);
printf("1.录入C语言成绩\n");
printf("2.录入数学成绩\n");
printf("3.录入英语成绩\n");
int select;
scanf("%d", &select);
switch (select)
{
case 1:
printf("请输入C语言成绩\n");
scanf("%d", &DA->C_Language); //修改,增加 &
break;
case 2:
printf("请输入数学成绩\n");
scanf("%d", &DA->Math);//修改,增加 &
break;
case 3:
printf("请输入英语成绩\n");
scanf("%d", &DA->English);//修改,增加 &
break;
default:
printf("输入错误,请重新输入\n");
break;
}
printf("录入成功\n");
flag = 0;
struct Student* DB, * temp; //修改 DA改成DB
//DA插入链表
if (head == NULL)
head = DA;
else
{
for (DB = head; DB->next != NULL;){
DB = DB->next;
}
DB->next = DA;
}
system("pause");
}
}
int main()
{
void Menu();
void Add();
void View();
void Delete();
void Repair();
void ViewAll();
void AddOne();
Menu();
}
基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)
要修改此程序以支持多个班级并进行班级内单科成绩排名,你可以对结构体和相应的函数进行一些调整。首先,为 Student
结构体添加一个表示班级的字段 classID
。然后,在添加学生信息时添加班级字段。最后,实现一个新函数 Rank()
,用于显示每个班级内的单科成绩排名。
以下是修改后的代码:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(struct Student)
struct Student {
char name[10];
char number[20];
int classID;
int C_Language;
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 AddOne();
void Rank();
int main() {
Menu();
return 0;
}
void Menu() {
system("cls");
printf("1.学生信息录入\n");
printf("2.学生单个成绩查询\n");
printf("3.查询全部学生成绩\n");
printf("4.修改学生信息\n");
printf("5.删除学生信息\n");
printf("6.学生单科成绩录入\n");
printf("7.班级内单科成绩排名\n");
printf("8.退出系统\n");
int choice;
printf("请选择要使用的功能:\n");
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:
AddOne();
Menu();
break;
case 7:
Rank();
Menu();
break;
case 8:
exit(0);
break;
default:
printf("输入有误,请重新选择:");
break;
}
}
// 在原有的 Add 函数中添加班级输入
void Add() {
// ... 其他代码不变
while (count > 0) {
printf("请输入第%d位学生信息:\n", i++);
printf("姓名:\n");
scanf("%s", s1->name);
printf("学号:\n");
scanf("%s", s1->number);
printf("班级:\n"); // 新增班级输入
scanf("%d", &s1->classID);
// ... 其他代码不变
}
}
// 新增函数 Rank 用于显示每个班级内的单科成绩排名
void Rank() {
system("cls");
// 排序功能可以使用类似冒泡排序的算法进行排序
struct Student *p, *q;
struct Student temp;
printf("请选择要进行排名的科目:\n");
printf("1.C语言\n");
printf("2.数学\n");
printf("3.英语\n");
int choice;
scanf("%d", &choice);
for (p = head; p != NULL; p = p->next) {
for (q = p->next; q != NULL; q = q->next) {
int need_swap = 0;
switch (choice) {
case 1:
if (p->C_Language < q->C_Language && p->classID == q->classID) {
need_swap = 1;
}
break;
case 2:
if (p->Math < q->Math && p->classID == q->classID) {
need_swap = 1;
}
break;
case 3:
if (p->English < q->English && p->classID == q->classID) {
need_swap = 1;
}
break;
default:
printf("输入有误,请重新选择:");
break;
}
if (need_swap) {
temp = *p;
*p = *q;
*q = temp;
struct Student *temp_next = p->next;
p->next = q->next;
q->next = temp_next;
}
}
}
printf("按照班级和选择的科目进行排名:\n");
for (struct Student *r = head; r != NULL; r = r->next) {
printf("姓名:%s\t学号:%s\t班级:%d\t", r->name, r->number, r->classID);
switch (choice) {
case 1:printf("C语言:%d\n", r->C_Language);
break;
case 2:
printf("数学:%d\n", r->Math);
break;
case 3:
printf("英语:%d\n", r->English);
break;
default:
printf("输入有误,请重新选择:");
break;
}
}
system("pause");
}
//接下来,我们将修改Menu函数,增加一个选项用于进行班级内单科成绩排名:
void Menu() {
...
printf("8.班级内单科成绩排名\n");
...
case 8:
RankBySubjectInClass();
Menu();
...
}
运行结果如下(我这里排名只显示了排名、姓名和对应科目的成绩,如果需要显示全部信息,你在printf语句中添加上就可以了):
完整代码:
#include <stdio.h>
#include <windows.h>//包含了控制台窗口操作相关的函数
#include <stdlib.h>
#define LEN sizeof(struct Student)// 定义结构体类型所占的内存大小
struct Student// 定义结构体类型
{
char name[10];
char number[20];
int classId; //班级
int C_Language;
int Math;
int English;
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();
void AddOne();
void Rank();
system("cls"); // 清空控制台窗口内容
printf("1.学生信息录入\n");
printf("2.学生单个成绩查询\n");
printf("3.查询全部学生成绩\n");
printf("4.修改学生信息\n");
printf("5.删除学生信息\n");
printf("6.学生单科成绩录入\n");
printf("7.班级内单科成绩排名\n");
printf("8.退出系统\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:
AddOne();
Menu();
case 7:
Rank();
Menu();
case 8:
exit(0);
default:
printf("输入有误,请重新选择:");
break;
}
}
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->name);
printf("学号:\n");
scanf("%s", &s1->number);
printf("班级:\n");
scanf("%d", &s1->classId); //添加,录入班级
printf("C语言成绩:\n");
scanf("%d", &s1->C_Language);
printf("数学成绩:\n");
scanf("%d", &s1->Math);
printf("英语成绩:\n");
scanf("%d", &s1->English);
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\t班级:%d\t\n", VS->number, VS->name,VS->classId); //修改,增加班级显示
printf("C语言:%d\t数学:%d\t英语:%d", VS->C_Language, 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\t班级:%d\t\n", VA->name, VA->number,VA->classId); //增加班级显示
printf("C语言:%d\t数学:%d\t英语:%d\n", VA->C_Language, VA->Math, VA->English);
VA = VA->next;
}
printf("所有不及格科目超过两科的学生名单如下:\n");
for (VA = head; VA != NULL;)
{
int lostNum = 0;
if (VA->C_Language < 60)
{
lostNum++;
}
if (VA->Math < 60)
{
lostNum++;
}
if (VA->English < 60)
{
lostNum++;
}
if (lostNum > 1)
{
printf("姓名:%s\t\n", VA->name);
}
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\t班级:%d\t\n", RS->number, RS->name,RS->classId); //增加班级显示
printf("C语言:%d\t数学:%d\t英语:%d\n", RS->C_Language, RS->Math, RS->English);
flag = 0;
printf("姓名:\n");
scanf("%s", &RS->name);
printf("学号:\n");
scanf("%s", &RS->number);
printf("班级:\n");
scanf("%d", &RS->classId);
printf("C语言成绩:\n");
scanf("%d", &RS->C_Language);
printf("数学成绩:\n");
scanf("%d", &RS->Math);
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 = head;
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");
}
break;
}
temp = DS;
DS = DS->next;
}
if (flag)
{
printf("未找到该学生学号!\n");
system("pause");
}
}
}
void AddOne()
{
system("cls");
struct Student* DA = (struct Student*)malloc(sizeof(struct Student)); //修改1
DA->next = NULL; //修改,增加这一行
int flag = 1;
while (flag)
{
printf("请输入姓名:\n");
scanf("%s", DA->name);
printf("请输入学号:\n");
scanf("%s", DA->number);
printf("请输入班级:\n");
scanf("%d", &DA->classId);
printf("1.录入C语言成绩\n");
printf("2.录入数学成绩\n");
printf("3.录入英语成绩\n");
int select;
scanf("%d", &select);
switch (select)
{
case 1:
printf("请输入C语言成绩\n");
scanf("%d", &DA->C_Language); //修改,增加 &
break;
case 2:
printf("请输入数学成绩\n");
scanf("%d", &DA->Math);//修改,增加 &
break;
case 3:
printf("请输入英语成绩\n");
scanf("%d", &DA->English);//修改,增加 &
break;
default:
printf("输入错误,请重新输入\n");
break;
}
printf("录入成功\n");
flag = 0;
struct Student* DB, * temp; //修改 DA改成DB
//DA插入链表
if (head == NULL)
head = DA;
else
{
for (DB = head; DB->next != NULL;) {
DB = DB->next;
}
DB->next = DA;
}
system("pause");
}
}
//链表排序
struct Student* sort_list(struct Student* head, int sec) //排序
{
if (NULL == head) //若链表为空则不用排序
{
return NULL;
}
if (NULL == head->next) //若链表中只有一个数,则不用比较
{
//printf("min is head\n");
return head;
}
struct Student* min_pre = NULL;
struct Student* min = head;
struct Student* tmp = head;
struct Student* new_list = NULL;
struct Student* tail_sort = NULL;
while (head)
{
min = head;
tmp = head;
while (tmp->next)
{
if (sec == 1) //根据C语言成绩排序
{
if (min->C_Language < tmp->next->C_Language)
{
min = tmp->next;
min_pre = tmp;
}
}
else if (sec == 2) //根据math成绩排序
{
if (min->Math < tmp->next->Math)
{
min = tmp->next;
min_pre = tmp;
}
}
else if (sec == 3) //根据english排序
{
if (min->English < tmp->next->English)
{
min = tmp->next;
min_pre = tmp;
}
}
tmp = tmp->next;
}
if (min == head)
{
head = head->next;
}
else
{
min_pre->next = min->next;
min->next = NULL;
}
if (NULL == new_list) //按照尾插将最小的数组成新的链表
{
tail_sort = min;
new_list = tail_sort;
}
else
{
tail_sort->next = min;
tail_sort = min;
}
}
head = new_list;
return head;
}
void Rank()
{
int sec;
struct Student* tmp = 0;
int rk = 1;
int classId;
int flag = 0;
while (1)
{
rk = 1;
flag = 0;
printf("请输入要查询的班级:");
scanf("%d", &classId);
printf("1.按C语言成绩排序\n");
printf("2.按Math成绩排序\n");
printf("3.按English成绩排序\n");
scanf("%d", &sec);
if (sec >= 1 && sec <= 3)
{
head = sort_list(head, sec);
//显示排名
tmp = head;
while (tmp)
{
if (tmp->classId == classId)
{
if (sec == 1)
printf("%d %s %d\n", rk, tmp->name, tmp->C_Language);
else if (sec == 2)
printf("%d %s %d\n", rk, tmp->name, tmp->Math);
else if (sec == 3)
printf("%d %s %d\n", rk, tmp->name, tmp->English);
rk++;
flag = 1;
}
tmp = tmp->next;
}
if (flag == 0)
printf("未找到该班级学生!\n");
}
else
printf("输入错误\n");
printf("1.继续查询\n");
printf("0.结束查询\n");
scanf("%d", &sec);
if (sec == 0)
break;
}
system("pause");
}
int main()
{
void Menu();
void Add();
void View();
void Delete();
void Repair();
void ViewAll();
void AddOne();
Menu();
}
你需要再定义一个结构体
struct ClassInfo
{
struct student stu[100];
};
只要定义 struct Student* headClass[CLASS_NUM] = {NULL};// 定义班级头节点指针
struct Student* tailClass[CLASS_NUM] = {NULL};
就可以实现多个班级,
如果不会可以帮你写一个demo
#include <stdio.h>
#include <windows.h>//包含了控制台窗口操作相关的函数
#include <stdlib.h>
#define LEN sizeof(struct Student)// 定义结构体类型所占的内存大小
struct Student// 定义结构体类型
{
char name[10];
char number[20];
int C_Language;
int Math;
int English;
struct Student* next; // 存储下一个学生的地址
};
struct ClassInfo
{
ClassInfo()
:head(NULL)
,end(NULL){
};
char name[10];
struct Student* head;// 定义头节点指针
struct Student* end;// 定义尾节点指针
struct ClassInfo* next;
};
int gClassNum = 0;
struct ClassInfo* headClass;// 定义头节点指针
struct ClassInfo* endClass;// 定义尾节点指针
int GetClassNum()
{
int nClass = 0;
printf("请输入要操作的班级号码(1~%d):",gClassNum);
scanf("%d",&nClass);
if(nClass<1||nClass>gClassNum)
{
printf("输入错误,只有%d个班级:",gClassNum);
nClass=0;
}
--nClass;
return nClass;
}
void Menu()// 定义菜单函数
{
void Menu();// 声明菜单函数
void Add();
void View();
void Delete();
void Repair();
void ViewAll();
void AddOne();
void AddClass();
void ClassRank();
system("cls"); // 清空控制台窗口内容
printf("1.学生信息录入\n");
printf("2.学生单个成绩查询\n");
printf("3.查询全部学生成绩\n");
printf("4.修改学生信息\n");
printf("5.删除学生信息\n");
printf("6.学生单科成绩录入\n");
printf("7.班级录入\n");
printf("8.班级排名\n");
printf("9.退出系统\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:
AddOne();
Menu();
case 7:
AddClass();
Menu();
case 8:
ClassRank();
Menu();
case 9:
exit(0);
default:
printf("输入有误,请重新选择:");
break;
}
}
void Add()
{
system("cls");
int count;
int nClass = GetClassNum();
if (nClass<0)
{
return;
}
printf("请输入要录入信息的个数:");
scanf("%d",&count);
struct Student *s1,*s2,*temp;
s1=s2=(struct Student*)malloc(LEN);
if(headClass[nClass].head==NULL)
{
headClass[nClass].head = s1;
}
else
{
headClass[nClass].end->next = s1 ;
}
int i = 1;
while(count>0)
{
printf("请输入第%d位学生信息:\n",i++);
printf("姓名:\n");
scanf("%s",&s1->name);
printf("学号:\n");
scanf("%s",&s1->number);
printf("C语言成绩:\n");
scanf("%d",&s1->C_Language);
printf("数学成绩:\n");
scanf("%d",&s1->Math);
printf("英语成绩:\n");
scanf("%d",&s1->English);
count--;
s2->next=s1;
s2=s1;
s1=(struct Student*)malloc(LEN);
printf("添加成功!\n");
system("pause");
system("cls");
}
s2->next= NULL;
headClass[nClass].end = s2;
printf("全部添加成功!\n");
system("pause");
}
void View()
{
system("cls");
struct Student *VS;
int nClass = GetClassNum();
if (nClass<0)
{
return;
}
printf("输入要查询信息的学生学号:\n");
char num[10];
int flag=1;
scanf("%s",&num);
for(VS=headClass[nClass].head;VS!=NULL;)
{
if(strcmp(VS->number,num)==0)
{
printf("成功找到!\n");
printf("姓名:%s\t学号:%s\t\n",VS->number,VS->name);
printf("C语言:%d\t数学:%d\t英语:%d",VS->C_Language,VS->Math,VS->English);
flag=0;
break;
}
VS=VS->next;
}
if(flag)
{
printf("不好意思,未找到!\n");
}
system("pause");
}
void ViewAll()
{
system("cls");
struct Student *VA;
int nClass = GetClassNum();
if (nClass<0)
{
return;
}
if(headClass[nClass].head!=NULL)
{
printf("所有学生成绩如下:\n");
for(VA=headClass[nClass].head;VA!=NULL;)
{
printf("姓名:%s\t学号:%s\t\n",VA->name,VA->number);
printf("C语言:%d\t数学:%d\t英语:%d\n",VA->C_Language,VA->Math,VA->English);
VA=VA->next;
}
printf("所有不及格科目超过两科的学生名单如下:\n");
for(VA=headClass[nClass].head;VA!=NULL;)
{
int lostNum = 0;
if(VA->C_Language < 60)
{
lostNum++;
}
if(VA->Math< 60)
{
lostNum++;
}
if(VA->English< 60)
{
lostNum++;
}
if(lostNum > 1)
{
printf("姓名:%s\t\n",VA->name);
}
VA = VA->next;
}
}
else
{
printf("该系统中还未录入信息");
}
system("pause");
}
void Repair()
{
system("cls");
struct Student *RS;
char num[10];
int flag = 1;
int nClass = GetClassNum();
if (nClass<0)
{
return;
}
printf("输入要修改成绩学生的学号:\n");
scanf("%s",num);
for(RS=headClass[nClass].head;RS!=NULL;)
{
if(strcmp(RS->number,num)==0)
{
printf("成功找到该学生");
printf("姓名:%s\t学号:%s\t\n",RS->number,RS->name);
printf("C语言:%d\t数学:%d\t英语:%d\n",RS->C_Language,RS->Math,RS->English);
flag = 0;
printf("姓名:\n");
scanf("%s",&RS->name);
printf("学号:\n");
scanf("%s",&RS->number);
printf("C语言成绩:\n");
scanf("%d",&RS->C_Language);
printf("数学成绩:\n");
scanf("%d",&RS->Math);
printf("英语成绩:\n");
scanf("%d",&RS->English);
printf("修改成功");
system("pause");
}
RS=RS->next;
}
if(flag)
{
printf("输入信息有误,未查询到");
system("pause");
}
}
void Delete()
{
system("cls");
int flag =1;
int nClass = GetClassNum();
if (nClass<0)
{
return;
}
while(flag)
{
printf("请输入要删除的学生学号:");
char num[10];
scanf("%s",&num);
struct Student * DS,*temp;
for(DS=headClass[nClass].head;DS!=NULL;)
{
if(strcmp(DS->number,num)==0)
{
if(DS==headClass[nClass].head)
{
headClass[nClass].head = DS->next;
flag = 0;
printf("删除成功!\n");
system("pause");
}
else
{
flag = 0;
printf("删除成功!\n");
temp->next= DS->next;
free(DS);
system("pause");
}
break;
}
temp = DS;
DS=DS->next;
}
if(flag)
{
printf("未找到该学生学号!\n");
system("pause");
}
}
}
void AddOne()
{
system("cls");
struct Student* DA =(struct Student*)malloc(sizeof(struct Student)); //修改1
DA->next = NULL; //修改,增加这一行
int flag = 1;
int nClass = GetClassNum();
if (nClass<0)
{
return;
}
while (flag)
{
printf("请输入姓名:\n");
scanf("%s", DA->name);
printf("请输入学号:\n");
scanf("%s", DA->number);
printf("1.录入C语言成绩\n");
printf("2.录入数学成绩\n");
printf("3.录入英语成绩\n");
int select;
scanf("%d", &select);
switch (select)
{
case 1:
printf("请输入C语言成绩\n");
scanf("%d", &DA->C_Language); //修改,增加 &
break;
case 2:
printf("请输入数学成绩\n");
scanf("%d", &DA->Math);//修改,增加 &
break;
case 3:
printf("请输入英语成绩\n");
scanf("%d", &DA->English);//修改,增加 &
break;
default:
printf("输入错误,请重新输入\n");
break;
}
printf("录入成功\n");
flag = 0;
struct Student* DB, * temp; //修改 DA改成DB
//DA插入链表
if (headClass[nClass].head == NULL)
headClass[nClass].head = DA;
else
{
for (DB = headClass[nClass].head; DB->next != NULL;){
DB = DB->next;
}
DB->next = DA;
}
system("pause");
}
}
void AddClass()
{
int count=0;
printf("请输入要录入班级信息的个数:");
scanf("%d",&count);
struct ClassInfo *s1,*s2,*temp;
s1=s2=(struct ClassInfo*)malloc(sizeof(struct ClassInfo));
s1->head=s1->end=s2->head=s2->end=NULL;
s1->next=s2->next=NULL;
if(headClass==NULL)
{
headClass = s1;
}
else
{
endClass->next = s1 ;
}
int i = 1;
while(count>0)
{
printf("请输入第%d班级信息:\n",i++);
printf("班级:\n");
scanf("%s",&s1->name);
count--;
s2->next=s1;
s2=s1;
s1=(struct ClassInfo*)malloc(sizeof(struct ClassInfo));
++gClassNum;
printf("添加成功!\n");
system("pause");
system("cls");
}
s2->next= NULL;
endClass = s2;
printf("全部添加成功!\n");
system("pause");
}
void Swap(struct Student *VA,struct Student *VB)
{
struct Student VTmp = *VA;
struct Student *pTmp = VB->next;
*VA = *VB;
*VB = VTmp;
VB->next = VA->next;
VA->next = pTmp;
}
void ClassRank()
{
struct Student *VA=NULL;
struct Student *VB=NULL;
int nClass = GetClassNum();
if (nClass<0)
{
return;
}
printf("1.C语言成绩排名\n");
printf("2.数学成绩排名\n");
printf("3.英语成绩排名\n");
int select;
scanf("%d", &select);
char *pTypeName[]={"C语言","数学","英语"};
if(headClass[nClass].head!=NULL)
{
for(VA=headClass[nClass].head;VA!=NULL;VA=VA->next)
{
for(VB=VA->next;VB!=NULL;VB=VB->next)
{
switch(select)
{
case 1:
if( VA->C_Language <VB->C_Language )
Swap(VA,VB);
break;
case 2:
if( VA->Math <VB->Math )
Swap(VA,VB);
break;
case 3:
if( VA->English <VB->English )
Swap(VA,VB);
break;
}
}
}
printf("%s %s 成绩排名如下:\n",headClass[nClass].name,pTypeName[select-1]);
for(VA=headClass[nClass].head;VA!=NULL;VA=VA->next)
{
printf("姓名:%s\t学号:%s\t\n",VA->name,VA->number);
printf("C语言:%d\t数学:%d\t英语:%d\n",VA->C_Language,VA->Math,VA->English);
}
}
system("pause");
}
int main()
{
void Menu();
void Add();
void View();
void Delete();
void Repair();
void ViewAll();
void AddOne();
Menu();
}
不知道你这个问题是否已经解决, 如果还没有解决的话: