学生管理系统
#ifndef __XUE_H__
#define __XUE_H__
typedef struct stu
{
int num;
char name[20];
double score;
struct stu * next;
}Node, *list;
//添加学生信息
list list_add(int a,char* s,double f);
//尾插
list list_insert_tail(list p, int a,char* s,double f);
//遍历
void list_show(list L);
//按位置查找返回节点
list list_search_pos(list F,int pos);
//按位置删除
int list_delete_pos(list F, int pos);
//按位置修改
int list_change_pos(list F, int a,char* s,double f,int pos);
void list_find_name(list L, char c);
#endif
#include <stdio.h>
#include <string.h>
#include "xue.h"
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int num;
char name[20];
double score;
printf("请输入学生的学号\n");
scanf("%d",&num);
printf("请输入学生的的姓名\n");
scanf("%s",name);
printf("请输入学生的成绩\n");
scanf("%lf",&score);
list F=list_add(num,name,score);
list p = F;
char c;
for(;;)
{
printf("是否继续输入学生信息Y/N\n");
getchar();
scanf("%c",&c);
if('N'==c ||'n'==c)
{
break;
}
printf("请输入学生的学号\n");
scanf("%d",&num);
printf("请输入学生的的姓名\n");
scanf("%s",name);
printf("请输入学生的成绩\n");
scanf("%lf",&score);
p=list_insert_tail(p,num,name,score);
}
list_show(F);
printf("请输入第几位学生后添加学生\n");
int pos;
scanf("%d",&pos);
p=list_search_pos(F,pos);
printf("请输入学生的学号\n");
scanf("%d",&num);
printf("请输入学生的的姓名\n");
scanf("%s",name);
printf("请输入学生的成绩\n");
scanf("%lf",&score);
p=list_insert_tail(p,num,name,score);
printf("请输入要删的学生的位置\n");
scanf("%d",&pos);
list_delete_pos(F,pos);
printf("请输入要改的学生位置\n");
scanf("%d",&pos);
printf("请输入学生的学号\n");
scanf("%d",&num);
printf("请输入学生的的姓名\n");
scanf("%s",name);
printf("请输入学生的成绩\n");
scanf("%lf",&score);
list_change_pos(F,num,name,score,pos);
list_show(F);
scanf("%s",name);
list_find_name(F,name);
return 0;
}
#include <stdio.h>
#include <string.h>
#include "xue.h"
#include <stdlib.h>
list list_add(int a,char* s,double f)
{
list p =(list)malloc(sizeof(Node));
if(NULL==p)
{
printf("创建失败\n");
return NULL;
}
p->num=a;
strcpy(p->name,s);
p->score=f;
p->next=NULL;
return p;
}
list list_insert_tail(list p,int a,char* s,double f)
{
if(NULL==p)
{
printf("所给链表不合法\n");
return NULL;
}
list q=list_add(a,s,f);
if(NULL==p)
{
return NULL;
}
p->next=q;
return q;
}
void list_show(list L)
{
if(NULL==L)
{
printf("遍历失败\n");
return;
}
while(L !=NULL)
{
printf("该同学的学号为%d 姓名为%s 分数是%lf\n",L->num,L->name,L->score);
L=L->next;
}
printf("\n");
}
list list_search_pos(list F,int pos)
{
if(NULL==F || pos<=0 )
{
printf("查找失败\n");
return NULL;
}
if(pos==1)
{
return F;
}
list q= F;
for(int i=2; i<=pos;i++)
{
q=q->next;
}
return q;
}
int list_delete_pos(list F,int pos)
{
if(NULL==F||pos<2)
{
printf("删除失败\n");
return -1;
}
list p =list_search_pos(F,pos-1);
list q= p->next;
p->next=q->next;
free(q);
q=NULL;
printf("删除成功\n");
return 0;
}
int list_change_pos(list F, int a,char* s,double f,int pos)
{
if(NULL==F||pos<=0)
{
printf("删除失败\n");
return -1;
}
list p = list_search_pos(F,pos-1);
p->num=a;
strcpy(p->name,s);
p->score = f;
printf("更改成功\n");
return 1;
}
void list_find_name(list F, char c)
{
if(NULL==F)
{
printf("查找失败\n");
return ;
}
while(F !=NULL)
{
if(strcmp(F->name,c)==0)
{
printf("查找成功\n") ;
return ;
}
F=F->next;
}
printf("查找失败\n");
return ;
}