1、学生信息结构体姓名,分数,年龄,电话。
2、其他功能函数自定义,分文件编译。
stu.c
#include"stu.h"
void menu()
{
printf("****************** ");
printf("学生管理系统 ");
printf("******************\n");
printf("0 输出学生信息\n");
printf("1 创建顺序表(堆区)\n");
printf("2 录入学生信息\n");
printf("3 删除一个学生信息\n");
printf("4 按照成绩修改一个学生年龄\n");
printf("5 按照姓名顺序查找一个学生是否存在\n");
}
void select_system(Pnode L,int key)
{
stu stu1[4] ={ {"小红",100,22,"1234"},
{"小白",33,21,"0987"},
{"小黑",99,29,"5678"},
{"小绿",88,20,"4312"},
};
switch(key)
{
case 1:
printf("创建单链表成功\n");
break;
case 2:
for(int i=0;i<4;i++)
{
input_info(L,stu1[i]);
}
break;
case 3:
del_info(L,2);
break;
case 4:
score_change_age(L,30);
break;
case 5:
find_name(L);
break;
case 0:
out_info(L);
default:
break;
}
}
Pnode create_table()
{
Pnode p = malloc(sizeof(Node));
if(p==NULL)
{
printf("创建顺序表失败\n");
return NULL;
}
// memset(p->data,0,sizeof(p->data));
p->next = NULL;
p->len = 0;
printf("创建顺序表成功\n");
return p;
}
int input_info(Pnode p,stu s)
{
if(p==NULL)
{
printf("学生系统不存在\n");
return -1;
}
Pnode t = malloc(sizeof(Node));
t->data = s;
t->next = p->next;
p->next = t;
p->len++;
}
int out_info(Pnode p)
{
if(p==NULL||p->len==0)
{
printf("学生系统不存在\n");
return -1;
}
Pnode t = p;
printf("\n学生信息如下:\n");
for(int i =0;i<p->len;i++)
{
t=t->next;
printf("\n名字:%s,成绩:%d,年龄:%d电话号:%s\n",
t->data.name,
t->data.score,
t->data.age,
t->data.number);
}
}
int del_info(Pnode p,int loc)
{
if(p==NULL||p->len==0||loc>p->len||loc<0)
{
printf("学生系统不存在\n");
return -1;
}
Pnode t = p;
for(int i =0;i<loc-1;i++)
{
t=t->next;//t移动到要删除前驱
}
Pnode Q = t->next;//保留要删除前驱
t->next = Q->next;
free(Q);
Q=NULL;
p->len--;
}
int score_change_age(Pnode p ,int age1 )
{
if(p==NULL||p->len==0)
{
printf("学生系统不存在\n");
return -1;
}
int key;
printf("输入你想查找的成绩:\n");
scanf("%d",&key);
int loc=-1;
Pnode t=p;
for(int i = 0;i<p->len;i++)
{
t=t->next;
if(t->data.score == key)
{
loc = i+1;
t->data.age = age1;
break;
}
}
if(loc==-1)
{
printf("没有这样成绩的学生\n");
}
}
int find_name(Pnode p)
{
if(p==NULL||p->len==0)
{
printf("学生系统不存在\n");
return -1;
}
STR stu_name;
printf("输入你想查找的名字:\n");
scanf("%s",stu_name);
int sub =-1;
Pnode t = p;
for(int i = 0;i<p->len;i++)
{
t=t->next;
if(strcmp(t->data.name,stu_name)==0)
{
sub =i;
}
}
if(sub==-1)
{
printf("查找的名字不存在\n");
}
else{
printf("该同学存在,在第%d个位置\n",sub+1);
}
}
int destroy_table(Pnode p)
{
if(p==NULL)
{
printf("学生系统不存在\n");
return -1;
}
Pnode Q=;
while(Q!=NULL)
{
Q=Q->next;
free(p);
p=Q;
}
printf("销毁成功\n");
return 0;
}
my.c
#include"stu.h"
int main(int argc, const char *argv[])
{
int button;
menu();
Pnode p=create_table();
while(1){
select_system(p,button);
printf("\n请选择你的操作\n");
scanf("%d",&button);
if(button>5||button<0){
printf("你选择的操作有误\n");
break;
}
}
destroy_table(Pnode p);
return 0;
}
stu.h
#ifndef _STU_H_
#define _STU_H_
#include<myhead.h>
typedef char STR[20];
typedef struct student
{
STR name;
int score;
int age;
STR number;
}stu;
typedef struct node
{
union{
int len;
stu data;
};
struct node *next;
}Node,*Pnode;
void select_system(Pnode L ,int key);
void menu();
Pnode create_table();
int input_info(Pnode p,stu s);
int out_info(Pnode p);
int del_info(Pnode p,int loc);
int score_change_age(Pnode p ,int age1 );
int find_name(Pnode p);
int destroy_table(Pnode p);
#endif