#include
#include
#include
#define LEN sizeof(struct stu)
struct stu
{
char name[20];
char number[20];
char clas[10];
char sex[4];
int score1;
int score2;
int score3;
int score4;
int score5;
struct stu* next;
};
struct stu* head = NULL;
struct stu* end = NULL;
void Menu(){
void Menu();
void Add();
void Repair();
void Delete();
void View();
void ViewAll();
void View1();
void ave();
void sort();
void sta();
system("cls");//清屏
printf(" 成绩管理\n");
printf("=================\n");
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");
printf("0.退出\n");
int choice;
printf("请选择要使用的功能:\n");
loop:
scanf("%d",&choice);
switch (choice) {
case 1:
Add();
Menu();
case 2:
Repair();
Menu();
case 3:
Delete();
Menu();
case 4:
ViewAll();
Menu();
case 5:
ave();
Menu();
case 6:
View();
Menu();
case 7:
View1();
Menu();
case 8:
sort();
Menu();
case 9:
sta();
Menu();
case 0:
printf("感谢使用!!!");
exit(0);
default:
printf("输入有误,请重新选择:");
goto loop;//迭代循环
}
}
void Add()//添加函数
{
system("cls");
int count;
printf("请输入要录入信息的个数:");
scanf("%d",&count);
struct stu *s1,*s2,*temp;
s1=s2=(struct stu*)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->clas);
printf("姓名:\n");
scanf("%s",&s1->name);
printf("性别:\n");
scanf("%s",&s1->sex);
printf("成绩1:\n");
scanf("%d",&s1->score1);
printf("成绩2:\n");
scanf("%d",&s1->score2);
printf("成绩3:\n");
scanf("%d",&s1->score3);
printf("成绩4:\n");
scanf("%d",&s1->score4);
printf("成绩5:\n");
scanf("%d",&s1->score5);
count--;
s2->next=s1;
s2=s1;
s1=(struct stu*)malloc(LEN);
printf("添加成功!\n");
system("pause");
system("cls");
}
s2->next= NULL;
end = s2;
printf("全部添加成功!\n");
system("pause");
}
void Repair()//修改函数
{
system("cls");
struct stu *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班级:%s\t性别:%s\n",RS->number,RS->name,RS->clas,RS->sex);
printf("成绩1:%d\t成绩2:%d\t成绩3:%d\t成绩4:%d\t成绩5:%d\n",RS->score1,RS->score2,RS->score3,RS->score4,RS->score5);
flag = 0;
printf("学号:\n");
scanf("%s",&RS->number);
printf("姓名:\n");
scanf("%s",&RS->name);
printf("班级:\n");
scanf("%s",&RS->clas);
printf("性别:\n");
scanf("%s",&RS->sex);
printf("成绩1:\n");
scanf("%d",&RS->score1);
printf("成绩2:\n");
scanf("%d",&RS->score2);
printf("成绩3:\n");
scanf("%d",&RS->score3);
printf("成绩4:\n");
scanf("%d",&RS->score4);
printf("成绩5:\n");
scanf("%d",&RS->score5);
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 stu * 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");
}
}
}
void View()//查询函数
{
system("cls");
struct stu *VS;
int a;
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班级:%s\t性别:%s\n",VS->number,VS->name,VS->clas,VS->sex);
printf("成绩1:%d\t成绩2:%d\t成绩3:%d\t成绩4:%d\t成绩5:%d",VS->score1,VS->score2,VS->score3,VS->score4,VS->score5);
flag=0;
break;
}
else if(strcmp(VS->name,num)==0) {
printf("成功找到!\n");
printf("学号:%s\t姓名:%s\t班级:%s\t性别:%s\n",VS->number,VS->name,VS->clas,VS->sex);
printf("成绩1:%d\t成绩2:%d\t成绩3:%d\t成绩4:%d\t成绩5:%d",VS->score1,VS->score2,VS->score3,VS->score4,VS->score5);
flag=0;
break;
}
VS=VS->next;
}
if(flag){
printf("不好意思,未找到!\n");
}
system("pause");
}
void ViewAll()//总分函数
{
system("cls");
struct stu *VA;
int sum;
if(head!=NULL){
printf("所有学生成绩如下:\n");
for(VA=head;VA!=NULL;){
printf("学号:%s\t姓名:%s\t班级:%s\t性别:%s\n",VA->number,VA->name,VA->clas,VA->sex);
sum=VA->score1+VA->score2+VA->score3+VA->score4+VA->score5;
printf("总分:%d\n",sum);
VA=VA->next;
}
}else{
printf("该系统中还未录入信息");
}
system("pause");
}
void View1() //班级函数
{
system("cls");
struct stu *Vb;
char x[5];
printf("请输入班级:\n");
scanf("%s",&x);
for(Vb=head;Vb!=NULL;){
if(strcmp(Vb->clas,x)==0){
printf("学号:%s\t姓名:%s\t班级:%s\t性别:%s\n",Vb->number,Vb->name,Vb->clas,Vb->sex);
printf("成绩1:%d\t成绩2:%d\t成绩3:%d\t成绩4:%d\t成绩5:%d\n",Vb->score1,Vb->score2,Vb->score3,Vb->score4,Vb->score5);
}
Vb=Vb->next;
}
system("pause");
}
void ave()//平均函数
{
system("cls");
struct stu *Vp;
int um;
float aver;
if(head!=NULL){
printf("所有学生平均成绩如下:\n");
for(Vp=head;Vp!=NULL;){
printf("学号:%s\t姓名:%s\t班级:%s\t性别:%s\n",Vp->number,Vp->name,Vp->clas,Vp->sex);
um=Vp->score1+Vp->score2+Vp->score3+Vp->score4+Vp->score5;
aver=um/5.00;
printf("平均分:%.2f",aver);
Vp=Vp->next;
}
}else{
printf("该系统中还未录入信息");
}
system("pause");
}
void sort()//排序函数
{
system("cls");
}
void sta();//按班级统计学科总分、平均分
{
system("cls");
}
int main()
{
Menu();
system("pause");
return 0;
}
“Devil组”引证GPT后的撰写:
这里提供一个用选择排序来对链表进行排序的示例代码:
void sort() {
struct stu *p1, *p2, *min;
struct stu temp;
p1 = head;
while (p1 != NULL) {
min = p1;
p2 = p1->next;
while (p2 != NULL) {
if (strcmp(p2->name, min->name) < 0) {
min = p2;
}
p2 = p2->next;
}
if (min != p1) {
temp = *p1;
*p1 = *min;
*min = temp;
}
p1 = p1->next;
}
printf("排序完成!\n");
system("pause");
}
该函数的基本思路是先遍历整个链表,每次找到链表中剩余未排序部分的最小值,将其与当前位置的值进行交换,如此循环直到整个链表都排序完成。这里的比较操作是按照学生姓名进行的,可以根据实际需求修改排序规则。
另外,需要注意的是,在交换节点值的时候,要使用一个临时变量temp来存储某个节点的值,否则会出现错误。