#include <stdio.h>
#include <stdlib.h>
#include<string.h>
/******定义结构体*******/
typedef struct stud
{
char id[13];
char name[21];
int score1,score2,score3;
int sum;
struct stud *next;
}Lnode, *LinkList;
int m=sizeof(Lnode);
/*******函数声明*******/
void create(LinkList L);
void print(LinkList L);
void listdelete(LinkList L);
void listinsert(LinkList L);
/***************主函数**************/
int main()
{
LinkList head;
int select;
head=(LinkList)malloc(m);
head->next=NULL;
while(1)
{
printf("=================\n");
printf("*欢迎进入学生信息管理系统*\n");
printf("1:创建链表\n");
printf("2:插入元素\n");
printf("3:删除元素\n");
printf("4:显示元素\n");
printf("0:退出系统\n");
printf("================\n");
printf("请选择菜单项\n");
scanf("%d",&select);
switch(select)
{
case 1:
create(head); break;
case 2:
listinsert(head);break;
case 3:
listdelete(head);break;
case 4:
print(head);
printf("\n");
break;
case 0:
exit(0);
}
}
return 0;
}
/***************输出列表********************/
void print(LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
printf("%-20s%-8s%-8d%-8d%-8d%-9d\n",p->id,p->name,p->score1,p->score2,p->score3);
p=p->next;
}
}
/**********************建立列表********************/
void create(LinkList L)
{
LinkList rear,s;
rear=L;
char id[13],name[21];
int score1,score2,score3;
printf("输入若干整数,输入#表示输入结束\n");
while(scanf("%s",id),id[0]!='#')
{
scanf("%s%d%d%d",name,&score1,&score2,&score3);
s=(LinkList)malloc(m);
s->score1=score1;
s->score2=score2;
s->score3=score3;
s->sum=s->score1+s->score2+s-score3;
strcpy(s->id,id);
rear->next=s;
rear=s;
}
rear->next=NULL;
printf("\n新创建链表中学生信息为: \n");
print(L);
printf("\n");
}
/*****************插入列表*****************/
void listinsert(LinkList L)
{
LinkList s,p=L;
int flag;
flag = 0;
printf("当前链表学生信息: \n");
print(L);
printf("\n");
printf("请输入待添加学生信息: \n");
s=(LinkList)malloc(m);
scanf("%s%s%d%d%d",s->id,s->name,&s->score1,&s->score2,&s->score3);
s->sum=s->score1+s->score2+s->score3;
while(p)
{
if(strcmp(s->id,p->id)==0)
{
printf("学号已有,无法添加\n\n");
flag=1;
break;
}
p=p->next;
}
if(flag==1)
{
printf("\n");
print(L);
printf("\n");
}
if(flag==0)
{
p = L;
while(p->next!=NULL)
{
if(strcmp(s->id,p->next->id)< 0)
break;
p=p->next;
}
s->next=p->next;
p->next =s;
print(L);
printf("\n");
}
}
/***************删除列表**************/
void listdelete(LinkList L)
{
LinkList q,p=L;
char id[13];
int flag;
flag=0;
printf("当前链表学生信息为: \n");
print(L);
printf("\n请输入待删学生学号信息: \n");
scanf("%s",id);
while(p->next)
{
if(strcmp(p->next->id,id)==0)
{
flag = 1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("查无此号,无法删除\n");
printf("\n");
}
else
{
printf("待删除学生信息为: \n");
printf("%-20s%-8s%-8d%-8d%-8d%-9d\n",p->next->id,p->next->name,p->next->score1,p->next->score2,p->next->score3);
printf("\n");
q = p->next;
p->next = q->next;
free(q);
}
printf("链表修改后的学生信息为: \n");
print(L);
printf("\n");
}
不知道为何在上一篇代码粘贴不上去,只能在下一篇展示。