📄 link.cpp
字号:
#include "stdafx.h"
#include "manager.h"
#include <stdlib.h>
#include <string.h>
int k;//用来标记有多少个链表在添加链表排序中有用。
char str[]=" sum average ID name ";
//显示学生的链表
//参数:头指针,科目数目,科目内容。
void DispStudent(stu *head,int coursenumber,char subject[][15])
{
stu *p;
int i=0;
if(head==NULL)
{
printf("Wrong! you need to add at least one student!Empty!\n");
}
else
{
p=head;
for(i=0;i<coursenumber;i++)
{
printf(" %s ",subject[i]);
}
printf("%s",str);
printf("\n");
do{
for(i=0;i<coursenumber;i++)
printf("%6d",p->score[i]);
printf("%6d%8.2f%15d%20s",p->sum,p->average,p->num,p->name);
printf("\n");
p=p->next;
}while(p!=NULL);
}
}
//建立第一个链表。即:建立第一个同学的信息。
//参数:学生ID,姓名,分数,总和,科目的分数;
stu *CreateStudent(int num,char name[],int score[],int sum,int coursenumber)
{
int i;
stu *p;
p=(stu *)malloc(sizeof(stu));
if(p==NULL)
{
printf("Wrong!No enough memory!");
exit(0);
}
p->next=NULL;
p->num=num;
for(i=0;i<coursenumber;i++)
p->score[i]=score[i];
strcpy(p->name,name);
p->sum=sum;
p->average=(float)sum/coursenumber;
printf("The Studnet have been create!\n");
printf("\n");
k=1;
return p;
}
//添加一个学生信息,然后排好顺序,返回头指针。
//参数:头指针,学生的姓名,ID,总分,科目的数目.
stu *AddStudent(stu *head,int num,char name[],int score[],int sum,int coursenumber)
{
int i;
stu *pr,*p,*pr2;
p=(stu *)malloc(sizeof(stu));
if(p==NULL)
{
printf("Have no enough memory!");
exit(0);
}
p->next=NULL;
p->num=num;
for(i=0;i<coursenumber;i++)
p->score[i]=score[i];
strcpy(p->name,name);
p->sum=sum;
p->average=(float)sum/coursenumber;
pr=head;
if(k==1)//判断是不是只存在一个同学k=1时说明只有一个同学
{
if(pr->sum<sum)
{
p->next=head;
head=p;
return head;
}
if(pr->sum>=sum)
pr->next=p;
}
else//下面的是不是一个学生的时候
{
while(pr->sum>sum && pr->next!=NULL)
{
pr2=pr;
pr=pr->next;
}
if(pr==head)
{
p->next=head;
head=p;
return head;
}
if(pr->next==NULL)
{
if(pr->sum>sum)
pr->next=p;
else
{
p->next=pr2->next;
pr2->next=p;
}
}
else
{
p->next=pr2->next;
pr2->next=p;
}
}
k++;
return head;
}
//删除学生
//参数是学生的学号.返回头指针
stu *DelStudent(stu *head,int num)
{
stu *p,*pr;
if(head==NULL)
{
printf("No Link exist");
return head;
}
p=head;
while(p->num!=num && p->next!=NULL)
{
pr=p;
p=p->next;
}
if(p->num==num)
{
if(p==head)
{
head=p->next;
}
else
{
pr->next=p->next;
free(p);
printf("Delete the Student\n");
}
}
else
printf("Can't not find it ,it is not exist!\n");
return head;
}
//查找一个学生的信息。
//返回查找到了的指针
stu *SearchStudent(stu *head,int num)
{
stu *pr;
pr=head;
while(pr->num!=num)
{
pr=pr->next;
if(pr==NULL)
{
printf("Wrong!The students is not exist\n");
return NULL;
break;
}
}
return pr;
}
//删除所有人的信息
stu *DelAllStudent(stu *head)
{
stu *pr,*pr2;
pr=head;
do
{
pr2=pr;
pr=pr->next;
free(pr2);
}while(pr!=NULL);
return NULL;
}
//修改一个学生的信息。
void ChangeStudent(stu *head,int num,char subject[][15],int coursenumber)
{
int i;
stu *pr;
pr=SearchStudent(head,num);
printf("Please enter the new information:\n");
printf("Please enter the ID and name\n");
scanf("%d%s",&pr->num,pr->name);
printf("Please input the score!\n");
for(i=0;i<coursenumber;i++)
{
printf(" %s ",subject[i]);
}
printf("\n");
for(i=0;i<coursenumber;i++)
scanf("%d",&pr->score[i]);
printf("The student has been change press '1' to check\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -