weixin_39275663 2017-06-28 02:50 采纳率: 0%
浏览 1050
已结题

学生成绩管理系统排序无法运行,求大神改或者重新编辑!

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define Length sizeof(struct student) //用来开辟空间
int n=0;
struct student
{

char name[20]; //名字
char num[20]; //学号
char sex[20]; //性别
char Class[20]; //班级
char major[20]; //专业
int age; //年龄
int cgrade; //C语言成绩
int mgrade; //数学成绩
int egrade; //英语成绩
int pgrade; //体育成绩
int lgrade; //语文成绩
int avg; //平均分
struct student next;
}*head,*p,*p1,*p2; //head表示开头 p表示不同位置的数据
void add( ) //添加
{ p1=(struct student *)malloc(Length); //开辟存储空间
if(n==0) //判断链表开头
head=p1; //n=0代表输入的是第一个数据 //p2的结尾所指向的地址是p1
else p2->next=p1; //n!=0 就它们连接起来

system("cls");
printf("请输入学生基本信息:\n姓名:");
scanf("%s",&p1->name);
printf("学号:");
scanf("%s",&p1->num);
printf("性别:");
scanf("%s",&p1->sex);
printf("年龄:");
scanf("%d",&p1->age);
printf("班级:");
scanf("%s",&p1->Class);
printf("专业:");
scanf("%s",&p1->major);
printf("C语言成绩: ");
scanf("%d",&p1->cgrade);
printf("数学成绩:");
scanf("%d",&p1->mgrade);
printf("英语成绩:");
scanf("%d",&p1->egrade);
printf("体育成绩:");
scanf("%d",&p1->pgrade);
printf("语文成绩:");
scanf("%d",&p1->lgrade);
p2=p1; //p2指向p1所在的地址
p2->next=NULL; //链表结束标志
n+=1; //n判断是不是第一个数据
system("pause"); //等待命令

system("cls");

}
void print()
{

if(n!=0)
{

p=head; //p先指向开头
system("cls");
printf("姓名\t学号\t性别\t\t班级\t年龄\t专业\tC语言成绩 数学成绩 英语成绩 体育成绩 语文成绩 平均分\n");
do
{ p1->avg=(p1->cgrade+p1->mgrade+p1->egrade+p1->pgrade+p1->lgrade)/5;
printf("%-8s%-8s%-8s%-8s%-8d%-16s%-8d%-8d%-8d%-8d%-8d%5.2d\n",p->name,p->num,p->sex,p->Class,p->age,p->major,p->cgrade,p->mgrade,p->egrade,p->pgrade,p->lgrade,p->avg);
p=p->next; //p打印结束 把p指向next以判断下一个区域有没有内容
}while(p!=NULL);//只要p指向的内存区域有数据 就打印内容
}
else
printf("
*****您还没有添加数据哟!\n");
system("pause");
system("cls");
}
void find() //查找
{

void find1(); /*按姓名查找*/
void find2(); /*按学号查找*/
if(n!=0)
{
int a;
system("cls");
printf("1.按姓名查找\n2.按学号查询\n");
scanf("%d",&a);
switch(a)
{
case 1:
find1(); /*跳转到按姓名查找*/
break;
case 2:
find2(); /*跳转到按学号查找*/
break;
}
}
else
{printf("******您还没有添加数据哟!\n");system("pause");}
}
void Delete()
{
if(n!=0)
{
struct student f,*l; //定义新的指针 f使用来指向要删除的数据用来释放内存!
char a[20];
printf("请输入要删除的姓名:");
scanf("%s",&a);
p=head;
if(strcmp(head->name,a)==0)
{f=head;head=head->next;free(f);}
else
{
do
{
if(strcmp(p->name,a)==0)
{f=p;l->next=p->next;free(f);break;}
l=p; //不满足if表示这不是要删除的那一个节点,l暂时指向p 之后p再指向下一个节点,如果这个是要删除的节点那么l指向这个节点的next的地址
p=p->next;
}while(p!=NULL);
}
}
else
printf("
*****您还没有添加数据哟!\n");
printf("数据已经被删除\n");
system("pause"); //等待命令
system("cls");
}
void amend()
{
if(n!=0)
{
int c;
char a[20];
printf("请输入要修改的姓名:");
scanf("%s",&a);
p=head;
do
{
if(strcmp(a,p->name)==0)
{p1->avg=(p1->cgrade+p1->mgrade+p1->egrade+p1->pgrade+p1->lgrade)/5;
printf("\n被修改人信息如下:\n姓名\t学号\t性别\t\t班级\t年龄\t专业\tC语言成绩 数学成绩 英语成绩 体育成绩 语文成绩 平均分\n");
printf("%-8s%-8s%-8s%-8s%-8d%-16s%-8d%-8d%-8d%-8d%-8d%5.2d\n",p->name,p->num,p->sex,p->Class,p->age,p->major,p->cgrade,p->mgrade,p->egrade,p->pgrade,p->lgrade,p->avg);
break;
}
p=p->next; ////指针指向下一个节点
}while(p!=NULL);
printf("\n\n1.修改姓名\n2.修改学号\n3.修改性别\n4.修改班级\n5.修改年龄\n6.修改专业\n7.修改C语言成绩\n8.修改数学成绩\n9.修改英语成绩\n10.修改体育成绩\n11.修改语文成绩\n12.退出修改\n\n");
scanf("%d",&c);
switch(c)
{
case 1:
printf("姓名修改为:");
scanf("%s",&p->name);break;
case 2:
printf("学号修改为:");
scanf("s",&p->num);break;
case 3:
printf("性别修改为:");
scanf("%s",&p->sex);break;
case 4:
printf("班级修改为:");
scanf("%s",&p->Class);break;
case 5:
printf("年龄修改为:");
scanf("%d",&p->age);break;
case 6:
printf("专业修改为:");
scanf("%s",&p->major);break;
case 7:
printf("C语言成绩修改为:");
scanf("%d",&p->cgrade);break;
case 8:
printf("数学成绩修改为:");
scanf("%d",&p->mgrade);break;
case 9:
printf("英语成绩修改为:");
scanf("%d",&p->egrade);break;
case 10:
printf("体育成绩修改为:");
scanf("%d",&p->pgrade);break;
case 11:
printf("语文成绩修改为:");
scanf("%d",&p->lgrade);break;
case 12:
break;
}
printf("\n\n操作成功!\n\n");
}
else
printf("******您还没有添加数据哟!\n");
system("pause");
system("cls");
}
void sort()
{

struct student p; /为原链表剩下用于直接插入排序的节点头指针*/

struct student t; /临时指针变量:插入节点*/

struct student first; /临时指针变量*/

struct student q; /临时指针变量*/

p=head->next;
head->next = NULL;
while (p!= NULL)
{

for (t=p,q=head;((q!=NULL)&&(q->avgavg));first=q,q=q->next); /*无序节点在有序链表中找插入的位置*/

/*退出for循环,就是找到了插入的位置*/

p=p->next; /*无序链表中的节点离开,以便它插入到有序链表中。*/

if (q==head) /*插在第一个节点之前*/

{

head=t;

}

else

{

p->next=t;

}

t->next=q; /*完成插入动作*/

}while(t!=NULL);
printf("******您还没有添加数据哟!\n");
system("pause");
system("cls");
}

void main() //主函数
{

int a=1;
while(a!=0)
{
system("cls");
printf("—————————* 学 生 成 绩 管 理 系 统 —————————\n");
printf("—————————
( 1.输入学生信息 ) —————————\n");
printf("—————————
( 2.显示全部信息 ) —————————\n");
printf("—————————
( 3.查询学生信息 ) —————————\n");
printf("—————————
( 4.删除学生信息 ) —————————\n");
printf("—————————
( 5.修改学生信息 ) —————————\n");
printf("—————————
( 6.排序学生成绩 ) —————————\n");
printf("—————————
( 0. 退出系统 ) *—————————\n");
printf("请选择:");
scanf("%d",&a);
if(a>=0&&a<=9)
{
switch(a)
{
case 1:
add();
break;
case 2:
print();
break;
case 3:
find();
break;
case 4:
Delete();
break;
case 5:
amend();
break;
case 6:
sort();
break;
case 7:
break;

        }
    }
    else
    {
        printf(" 您输入的不符合要求,将返回主菜单!\n");
        system("pause");
    }
}

}
void find1 ()
{
char a[20];
printf("请输入要查找的姓名:");
scanf("%s",&a);
p=head;
do
{
if(strcmp(a,p->name)==0)
{ p1->avg=(p1->cgrade+p1->mgrade+p1->egrade+p1->pgrade+p1->lgrade)/5;
printf("\n信息已被找到:\n姓名\t学号\t性别\t\t班级\t年龄\t专业\tC语言成绩 数学成绩 英语成绩 体育成绩 语文成绩 平均分\n");
printf("%-8s%-8s%-8s%-8s%-8d%-16s%-8d%-8d%-8d%-8d%-8d%5.2d\n",p->name,p->num,p->sex,p->Class,p->age,p->major,p->cgrade,p->mgrade,p->egrade,p->pgrade,p->lgrade,p->avg);
}
p=p->next; ////指针指向下一个节点
}while(p!=NULL);
system("pause");
system("cls");

}
void find2 ()
{
char a[20];
printf("请输入要查找的学号:");
scanf("%s",&a);
p=head;
do
{
//指针指向开头
if(strcmp(a,p->num)==0)
{ p1->avg=(p1->cgrade+p1->mgrade+p1->egrade+p1->pgrade+p1->lgrade)/5;
printf("\n信息已被找到:\n姓名\t学号\t性别\t\t班级\t年龄\t专业\tC语言成绩 数学成绩 英语成绩 体育成绩 语文成绩 平均分\n");
printf("%-8s%-8s%-8s%-8s%-8d%-16s%-8d%-8d%-8d%-8d%-8d%5.2d\n",p->name,p->num,p->sex,p->Class,p->age,p->major,p->cgrade,p->mgrade,p->egrade,p->pgrade,p->lgrade,p->avg);
}
p=p->next; //指针指向下一个节点
}while(p!=NULL);
system("pause");
system("cls");
}

  • 写回答

2条回答 默认 最新

  • zy010101 2017-06-29 11:51
    关注

    运行错误还是无法运行

    评论

报告相同问题?

悬赏问题

  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型