/*学生管理系统使用一级指针链表完成*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define NAME_SIZE 10
//#define MAX_SIZE 100
typedef int DATATYPE;
typedef struct stu{
char name[NAME_SIZE];
char sex[10];
DATATYPE grade;
DATATYPE id;
struct stu *next;
}STD;//定义学生链表结构体
//创建一个列表
//student* creative(STD* Lstudent)//要返回一个结构类型的变量
void creative(STD *Lstudent)
{
int i;
int n;
STD *r;
r = Lstudent;//创建一个从头节点开始向下偏移的结构体指针
printf("请输入学生个数\n");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
STD *newStudent = (STD *)malloc(sizeof(STD));
printf("请输入学生学号,姓名, 性别, 成绩\n");
scanf("%d%s%s%d", &newStudent->id, newStudent->name, newStudent->sex, &newStudent->grade);
r->next = newStudent;
r = newStudent;
}
r->next = NULL;
//return Lstudent;
}
//添加学生即链表添加
int add(STD *Lstudent)
{
STD *r;
char ch;
int i = 1;
r = Lstudent;
p2:
printf("请输入添加学生的学号\n");
scanf("%d", &i);
if(r->next == NULL)
{
printf("链表是空的\n");
goto p2;
}
while(r->next && r->next->id != i)
{
r = r->next;
}
if(r->next == NULL || r->next->id != i)
{
printf("该位置不存在,请重新输入\n");
goto p2;
}
STD *newStudent = (STD*)malloc(sizeof(STD));//分配新节点
printf("请输入学生学号,姓名,性别,成绩\n");
scanf("%d%s%s%d", &newStudent->id, newStudent->name, newStudent->sex, &newStudent->grade);
//printf("检测1");
newStudent->next = r->next;
//printf("检测2");
r->next = newStudent;
//printf("检测3");
printf("添加成功\n");
printf("是否继续添加(y/n)\n");
scanf("%c", &ch);
if (ch == 'y')
{
goto p2;
}
else if(ch == 'n')
{
return 0;
}
}
void printSTD(STD *Lstudent)
{
STD *r;
r = Lstudent->next;
while(r)
{
printf("学号 = %d, 姓名 = %s, 性别 = %s, 成绩 = %d\n", r->id, r->name, r->sex, r->grade);
r = r->next;
}
}
int DelSTD(STD *Lstudent)
{
int flag = 0, a;
STD *r, *t;
r = Lstudent;
printf("当前信息\n");
printSTD(Lstudent);
printf("请输入要删除的学号\n");
scanf("%d", &a);
if (r->next == NULL)
{
printf("当前链表是空的,請添加\n");
return 0;
}
while(r->next != NULL )
{
if(a == r->next->id)
{
flag = 1;
break;
}
r = r->next;
}
if(flag = 0)
{
printf("该学号不存在\n");
}
t = r->next;
r->next = r->next->next;
free(t);
}
void modifySTD(STD* Lstudent)
{
}
void menu()
{
printf("------------------------------------\n");
printf("------------请输入操作---------------\n");
printf("-----------1 创建学生表-------------\n");
printf("-----------2 添加学生信息-----------\n");
printf("-----------3 删除学生信息-----------\n");
printf("-----------4 查询学生信息-----------\n");
printf("-----------5 修改学生信息-----------\n");
printf("-----------0 退出系统---------------\n");
}
int main()
{
STD *Lstudent = (STD *)malloc(sizeof(STD));
Lstudent->next = NULL;//创建头节点
while(1)
{
int i;
menu();
scanf("%d", &i);
switch(i)
{
case 1:creative(Lstudent);break;
case 2:add(Lstudent);break;
case 3:DelSTD(Lstudent);break;
case 4:printSTD(Lstudent);break;
case 5:modifySTD(Lstudent);break;
case 0:return 0;
default: printf("输入错误,请重新输入\n");break;
}
}
return 0;
}
/*学生管理系统使用二级指针链表完成*/
/*学生管理系统使用链表完成*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define NAME_SIZE 10
//#define MAX_SIZE 100
typedef int DATATYPE;
typedef struct stu{
DATATYPE id;
char name[NAME_SIZE];
char sex[10];
DATATYPE grade;
struct stu *next;
}std;//定义学生链表结构体
typedef struct stu *student;
//创建一个列表
//student* creative(STD* Lstudent)//要返回一个结构类型的变量
void creative(student *L)
{
int i;
int n;
student r,newStudent;
*L = (student)malloc(sizeof(std));
(*L)->next = NULL;//创建头节点
r = *L;//创建一个从头节点开始向下偏移的结构体指针
printf("请输入学生个数\n");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
newStudent = (student)malloc(sizeof(std));
printf("请输入学生学号,姓名, 性别, 成绩\n");
scanf("%d%s%s%d", &newStudent->id, newStudent->name, newStudent->sex, &newStudent->grade);
r->next = newStudent;
r = newStudent;
}
r->next = NULL;
//return Lstudent;
}
//添加学生即链表添加
int add(student *L)
{
student r,newStudent;
char ch;
int stuPosition = 1;
int i = 1;
r = *L;
p1:
printf("请输入添加学生的位置\n");
scanf("%d", &i);
if(r->next==NULL)
{
printf("链表是空的\n");
goto p1;
}
while(r && stuPosition < i)
{
r = r->next;
stuPosition++;
}
if(!(r->next) || stuPosition > i)
{
printf("该位置不存在,请重新输入\n");
}
goto p1;
newStudent = (student)malloc(sizeof(std));//分配新节点
printf("请输入学生学号,姓名,性别,成绩\n");
scanf("%d%s%s%d", &newStudent->id, newStudent->name, newStudent->sex, &newStudent->grade);
//printf("检测1");
newStudent->next = r->next;
printf("检测2");
r->next = newStudent;
printf("检测3");
printf("添加成功\n");
printf("是否继续添加(y/n)\n");
scanf("%c", &ch);
if (ch == 'y')
{
goto p1;
}
else if(ch == 'n')
{
return 0;
}
}
void printSTD(student *L)
{
student r;
r = *L;
while(r)
{
printf("学号 = %d, 姓名 = %s, 性别 = %s, 成绩 = %d\t", r->id, r->name, r->sex, r->grade);
r = r->next;
}
printf("\n");
}
void menu()
{
printf("------------------------------------\n");
printf("------------请输入操作---------------\n");
printf("-----------1 创建学生表-------------\n");
printf("-----------2 添加学生信息-----------\n");
printf("-----------3 删除学生信息-----------\n");
printf("-----------4 查询学生信息-----------\n");
printf("-----------5 修改学生信息-----------\n");
printf("-----------0 退出系统---------------\n");
}
int main()
{
student sd;
while(1)
{
int i;
menu();
scanf("%d", &i);
switch(i)
{
case 1:creative(&sd);break;
case 2:add(&sd);break;
case 3:printSTD(&sd);break;
case 0:return 0;
default: printf("输入错误,请重新输入\n");break;
}
}
return 0;
}
学生信息管理系统--链表
最新推荐文章于 2022-12-20 14:49:46 发布