当前位置:网站首页>C语言:学生管理系统(链表版)
C语言:学生管理系统(链表版)
2022-08-04 01:06:00 【白的夜gxw】
这是一个小型的管理系统,使用链表进行实现,好了废话不多说,直接上代码,有需要的同学自取。运行的开发环境是vscode.
//学生管理系统(链表版)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct student{
int num;//学号
char name[20];//姓名
float score;//分数
struct student *next;
}Node;
int count=0;//记录学生个数
//声明函数
Node * CreateLinkList();//创建链表
void PrintLinkList(Node *header);//打印链表
Node * InsertLinkList(Node *header);//插入链表
Node * DeleteLinkList(Node *header);//删除链表
Node * ChangeLinkList(Node *header);//更改链表
void FreeLinkList(Node *header);//释放链表
void Menu();//菜单
//创建链表
Node * CreateLinkList()
{
Node *header=NULL;
Node *prev,*pcurrent;
prev=pcurrent=(Node *)malloc(sizeof(Node));
//判断申请是否成功
if(prev==NULL){
puts("fail");
exit(-1);
}
printf("请输入第%d个学生的学号:",count+1);
scanf("%d",&pcurrent->num);
printf("请输入第%d个学生的姓名:",count+1);
scanf("%s",pcurrent->name);
printf("请输入第%d个学生的分数:",count+1);
scanf("%f",&pcurrent->score);
while(pcurrent->num)
{
count++;
if(count==1)
{
header=pcurrent;
prev=pcurrent;
}
else
{
prev->next=pcurrent;
prev=pcurrent;
}
pcurrent=(Node *)malloc(sizeof(Node));
//判断申请是否成功
if(pcurrent==NULL){
puts("fail");
exit(-1);
}
printf("请输入第%d个学生的学号:",count+1);
scanf("%d",&pcurrent->num);
printf("请输入第%d个学生的姓名:",count+1);
scanf("%s",pcurrent->name);
printf("请输入第%d个学生的分数:",count+1);
scanf("%f",&pcurrent->score);
}
prev->next=NULL;
return header;
}
//插入链表
Node * InsertLinkList(Node *header)
{
Node *pcurrent,*prev;
Node *target;
prev=pcurrent=(Node *)malloc(sizeof(Node));
//判断申请是否成功
if(prev==NULL){
puts("fail");
exit(-1);
}
target=(Node *)malloc(sizeof(Node));
//判断申请是否成功
if(target==NULL){
puts("fail");
exit(-1);
}
printf("请输入插入学生的学号:");
scanf("%d",&target->num);
printf("请输入插入学生的姓名:");
scanf("%s",target->name);
printf("请输入插入学生的分数:");
scanf("%f",&target->score);
pcurrent=header;
if(header==NULL)
{
//插入的节点就是头结点
header=target;
target->next=NULL;
}
else
{
//插入的节点是普通节点
//按照分数从小到大排序
while((pcurrent->score < target->score) && pcurrent->next)
{
prev=pcurrent;
pcurrent=pcurrent->next;
}
if(pcurrent->score > target->score)
{
if(pcurrent==header)
{
header=target;
target->next=pcurrent;
}
else
{
prev->next=target;
target->next=pcurrent;
}
}
else
{
pcurrent->next=target;
target->next=NULL;
}
}
count++;
return header;
}
//删除链表
Node * DeleteLinkList(Node *header)
{
Node *pcurrent=header,*prev;
Node *pdel=malloc(sizeof(Node));
printf("请输入删除学生的学号:");
scanf("%d",&pdel->num);
if(header==NULL)
{
printf("这是一个空链表");
return NULL;
}
else
{
while(pcurrent->num!=pdel->num && pcurrent->next)
{
prev=pcurrent;
pcurrent=pcurrent->next;
}
if(pcurrent->num==pdel->num)
{
if(pcurrent==header)
{
header=pcurrent->next;
}
else
{
prev->next=pcurrent->next;
}
}
else
{
printf("没有这个节点!");
}
}
count--;
free(pdel);
return header;
}
//更改链表
Node * ChangeLinkList(Node *header)
{
Node *pcurrent;
int tnum;
float sc;
pcurrent=(Node *)malloc(sizeof(Node));
//判断申请是否成功
if(pcurrent==NULL){
puts("fail");
exit(-1);
}
pcurrent=header;
printf("请输入需要更改的学生的序号:");
scanf("%d",&tnum);
if(header==NULL)
{
printf("NULL Linklist\n");
return NULL;
}
else
{
while(tnum!=pcurrent->num && pcurrent->next)
{
pcurrent=pcurrent->next;
}
if(tnum==pcurrent->num)
{
printf("你要更改的分数是;");
scanf("%f",&sc);
pcurrent->score=sc;
}
else
{
printf("没有找到!\n");
}
}
return header;
}
//打印链表
void PrintLinkList(Node *header)
{
Node *pcurrent=header;
if(header==NULL)
{
//空链表
printf("这是一个空链表\n");
}
else
{
printf("\n\n一共打印%d个学生的信息\n",count);
printf("============================================\n");
while(pcurrent)
{
printf("学号:%d\t姓名:%s\t分数:%.0f\n",pcurrent->num,pcurrent->name,pcurrent->score);
pcurrent=pcurrent->next;
}
printf("============================================\n");
}
}
//释放链表
void FreeLinkList(Node *header)
{
Node *pcurrent=(Node *)malloc(sizeof(Node));
//判断申请是否成功
if(pcurrent==NULL){
puts("fail");
exit(-1);
}
pcurrent=header;
while(pcurrent)
{
header=pcurrent->next;
free(pcurrent);
pcurrent=header;
}
}
void Menu()
{
printf("\t\t******************************************************\n");
printf("\t\t* 学 生 管 理 系 统 *\n");
printf("\t\t*\t1.创建学生信息 2.添加学生信息 *\n");
printf("\t\t*\t3.删除学生信息 4.更改学生信息 *\n");
printf("\t\t******************************************************\n");
}
int main()
{
Node *stu;
int num;
do
{
Menu();
printf("请输入:(按5进行退出)");
scanf("%d",&num);
switch (num)
{
case 1://创建链表
stu=CreateLinkList();
PrintLinkList(stu);
break;
case 3: //删除节点
stu=DeleteLinkList(stu);
PrintLinkList(stu);
break;
case 2: //插入节点
stu=InsertLinkList(stu);
PrintLinkList(stu);
break;
case 4://更改链表
stu=ChangeLinkList(stu);
PrintLinkList(stu);
break;
case 5://退出
break;
}
}while(num!=5);
FreeLinkList(stu);
system("pause");
return 0;
}
边栏推荐
- iframe通信
- nodejs+express实现数据库mysql的访问,并展示数据到页面上
- Sticker Spelling - Memory Search / Shape Pressure DP
- 有没有jdbc 链接优炫数据库文档及示例?
- Analysis of usage scenarios of mutex, read-write lock, spin lock, and atomic operation instructions xaddl and cmpxchg
- Analysis: What makes the Nomad Bridge hack unique
- typescript53-泛型约束
- MySQL回表指的是什么
- SQL优化的一些建议,希望可以帮到和我一样被SQL折磨的你
- nodejs 安装多版本 版本切换
猜你喜欢

Installation and configuration of nodejs+npm

nodejs+npm的安装与配置

fsdbDump用法

What warehouse management problems can WMS warehouse management system solve in the electronics industry?

jmeter distributed stress test

typescript50-交叉类型和接口之间的类型说明

Web3 安全风险令人生畏?应该如何应对?

优秀的测试/开发程序员,是怎样修炼的?步步为营地去执行......

《Greenplum构建实时数据仓库实践》简介

快速入门EasyX图形编程
随机推荐
ThreadLocal
typescript51 - basic use of generics
Apache DolphinScheduler新一代分布式工作流任务调度平台实战-中
因为一次bug的教训,我决定手撕Nacos源码(先撕客户端源码)
typescript56-泛型接口
typescript58-泛型类
boot issue
.NET Static Code Weaving - Rougamo Release 1.1.0
Is there any jdbc link to Youxuan database documentation and examples?
Shell编程之循环语句(for、while)
VR全景拍摄线上展馆,3D全景带你沉浸体验
.NET静态代码织入——肉夹馍(Rougamo) 发布1.1.0
新一代服务网关Gateway的实践笔记
电子制造企业部署WMS仓储管理系统的好处是什么
MongoDB数据接入实践
共享新能源充电桩充电站建设需要些什么流程及资料?
Electronics manufacturing enterprise deployment WMS what are the benefits of warehouse management system
typescript53-泛型约束
typescript54-泛型约束
NLP resources that must be used for projects [Classified Edition]