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