链表线性表的增和删,希望给出详细源代码

设计一个学生档案管理系统,对学生档案进行管理。每个学生的信息包括:学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、各门课成绩(每门课包括课程名与成绩)
顺序表每个数据元素包括学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、成绩链表的头指针;成绩链表每个结点的数据域包括课程名与成绩。

结构体定义:学生信息

 typedef struct snode
{
    char No[10];            //学号 
    char Name[20];  //姓名 
    char Gender[5]; //性别 
    int Cnt;        //所选课程数 
    LNode *cj;      //成绩 
    char brithday[20];//生日 
    double Avg;     //平均成绩
    char party[6];  //是否党员
    char phoneNo[15];//手机号码 
    char addr[20];  //家庭住址 
}SNode;

结构体定义:课程信息

 typedef struct node 
{
    char CName[20];
    int Score;
    struct node *next;
}LNode;

现在需要我输入30170001 然后删除张三的所有信息以及输入学生信息,在文件中可以添加一行
主要就是链表操作那块
图片说明

插入和删除:

 //尾插函数
LNode *linklistPushBack(LNode **head, ElemType value)
{
    //非法输入
    if (head == NULL)
    {
        return NULL;
    }
    //空链表
    if (*head == NULL)
    {
        //直接创建一个新的节点完成元素插入
        *head = CreateNode(value);
        return NULL;
    }
    else
    {
        LNode *cur = *head;
        //遍历链表,让cur指向最后一个元素
        while (cur->next != NULL)
        {
            cur = cur->next;
        }
        //创建一个新节点
        LNode *new_node = CreateNode(value);
        //将最后一个元素的next指向新节点
        cur->next = new_node;
        return new_node;
    }
}
 //删除指定位置的元素(遍历)函数
//时间复杂度为O(n)
void linklistErase(LNode **head, LNode *pos)
{
    //非法输入
    if (head == NULL)
    {
        return;
    }
    //空链表
    if (*head == NULL)
    {
        return;
    }

    //如果pos为头结点的位置
    if (pos == *head)
    {
        //则进行头删
        linklistPopFront(head);
        return;
    }
    else
    {
        //创建新的指针指向头结点
        LNode *cur = *head;
        //遍历链表,遍历完成以后cur的下一个位置就是pos
        while (cur->next != pos)
        {
            cur = cur->next;
        }
        //将cur的next指向pos的next
        cur->next = pos->next;
        //销毁pos节点
        DestroyNode(pos);
    }
}

void Insert(int xuehao1,int math1,int english1,int total1,int n)
{
int i;
student *p=new student;
student *l=new student;
l->xuehao=xuehao1;
l->math=math1;
l->english=english1;
l->total=total1;
p=head;
for(i=0;i {
p=p->next;
}
l->next=p->next;
p->next=l;
size++;
}
void Delete(int n)
{
int i;
student *p=new student();
student *q=new student();
p=head;
for(i=0;i {
p=p->next;
}
q=p->next;
p->next=q->next;
q->next=NULL;
size--;
}