使用单链表形式完成学生管理系统以下操作

代码如下:

头文件 head.h

#ifndef __HEAD_H__
#define __HEAD_H__#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct{int id;char name[20];float score;
}datatype;typedef struct student{union{datatype data;int len;};struct student *next;
}STU;//菜单
void menu();
//创建链表
STU* create();
//判空
int empty(STU *S);
//申请学生节点
STU* apply();
//新增学生信息(头插)
int add(STU *S);
//遍历学生信息
void show(STU *S);
//根据位置插入学生信息
int insert_pos(STU *S,int pos);
//按学号查询学生信息
STU* search_id(STU *S,int id);
//按姓名查询学生信息
STU* search_name(STU *S,char *name);
//删除指定学号学生信息
int delete_id(STU *S,int id);
//改名字
int change_id(STU *S,int old_id,int new_id);
//按成绩降序排列
void sort_down(STU *S);
//转置链表
void rever_list(STU *S);
//清空全部信息
void free_link(STU *S);#endif

功能函数文件 func.c

#include "head.h"//menu
void menu()
{printf("********学生管理系统*********\n");printf("*******1.新增学生信息********\n");printf("*******2.查看信息************\n");printf("*******3.查找信息************\n");printf("*******4.插入信息************\n");printf("*******5.更改信息************\n");printf("*******6.成绩排名************\n");printf("*******7.成绩逆序************\n");printf("*******8.删除信息************\n");printf("*******9.清空信息************\n");printf("*******0.退出系统************\n");}//创建链表
STU* create()
{//判断逻辑STU* S=(STU*)malloc(sizeof(STU));if(NULL==S){puts("创建失败");return NULL;}//头节点初始化S->next=NULL;S->len=0;//puts("创建成功");return S;
}
//判空
int empty(STU *S)
{return S->next==NULL?1:0;
}
//申请学生节点
STU* apply()
{//申请新节点STU *S=(STU*)malloc(sizeof(STU));if(NULL==S){puts("节点申请失败");return NULL;}//给新申请节点赋值S->next=NULL;printf("请输入学生信息:\n");printf("学号:");scanf("%d",&S->data.id);getchar();printf("姓名:");gets(S->data.name);printf("成绩:");scanf("%f",&S->data.score);getchar();//返回申请节点return S;
}
//新增学生信息(头插)
int add(STU *S)
{//判断逻辑if(NULL==S){puts("新增失败");return -1;}//申请新节点STU *p=apply();//头插p->next=S->next;S->next=p;//表的变化S->len++;puts("插入成功");return 0;
}
//遍历学生信息
void show(STU *S)
{//判断逻辑if(NULL==S){puts("遍历失败");return;}if(empty(S)){puts("无信息");return;}//定义遍历指针遍历输出STU *p=S->next;printf("学号\t\t姓名\t\t成绩\n");while(p){printf("%d\t\t%s\t\t%.2f\n",p->data.id,p->data.name,p->data.score);p=p->next;}
}
//根据位置插入学生信息
int insert_pos(STU *S,int pos)
{//判断逻辑if(NULL==S ||pos<=0 ||pos>S->len){puts("插入失败");return -1;}//申请新节点STU *q=apply();if(NULL==q) return -1;//指针指向要插入前一个节点STU *p=S;for(int i=0;i<pos;i++){p=p->next;}//插入操作q->next=p->next;p->next=q;//表的变化S->len++;puts("插入成功");return 0;
}
//按位置查询学生信息
STU* search_pos(STU*S,int pos)
{//判断逻辑if(NULL==S || pos<1 ||pos>S->len){return NULL;}//定义遍历指针STU *p=S->next;//找到目标节点并返回for(int i=1;i<pos;i++){p=p->next;}return p;
}
//按学号查询学生信息
STU* search_id(STU *S,int n)
{//判断逻辑if(NULL==S ||empty(S)){puts("无法查询");return NULL;}//定义遍历指针STU *p=S->next;//循环遍历查找目标节点while(p){if(p->data.id==n){break;}p=p->next;}//判断结果并返回if(NULL==p){return NULL;}else{return p;}
}
//按姓名查询学生信息
STU* search_name(STU *S,char *na)
{//判断逻辑if(NULL==S ||empty(S)){puts("无法查询");return NULL;}STU *p=S;while(p){if(strcmp(na,p->data.name)==0){break;}p=p->next;}if(NULL==p){return NULL;}else{return p;}
}
//删除指定学号学生信息
int delete_id(STU *S,int id)
{//判断逻辑if(NULL==S ||empty(S)){puts("删除失败");return -1;}//标记要删除节点STU *p=search_id(S,id);if(NULL==p){puts("没有找到该学号");return -2;}//指针指向要删除前一个节点STU *q=S;while(q->next!=p){q=q->next;}//删除节点q->next=p->next;free(p);p=NULL;//表的变化S->len--;puts("删除成功");return 0;
}
//改学号
int change_id(STU *S,int old_id,int new_id)
{//判断逻辑if(NULL==S){puts("查找失败");return -1;}//调用查找函数,找到目标节点STU *p=search_id(S,old_id);if(NULL==p){puts("查找失败");return -2;}//修改目标节点学号p->data.id=new_id;puts("修改成功");return 0;
}
//按成绩降序排列
void sort_down(STU *S)
{//判断逻辑if(NULL==S ||empty(S)){puts("无法排序");return;}//申请中间节点STU *p=(STU*)malloc(sizeof(STU));//冒泡排序for(int i=1;i<S->len;i++){for(int j=1;j<=S->len-i;j++){if(search_pos(S,j)->data.score < search_pos(S,j+1)->data.score){p->data=search_pos(S,j)->data;search_pos(S,j)->data=search_pos(S,j+1)->data;search_pos(S,j+1)->data=p->data;}}}//释放临时节点空间free(p);p=NULL;puts("排序完成");return;
}
//转置链表
void rever_list(STU *S)
{//判断逻辑if(NULL==S ||S->len==0 ||S->len==1){return;}//定义遍历指针STU *p=S->next;//孤立头结点S->next=NULL;//定义搬运指针STU*q=NULL;//遍历后头插while(p){q=p;p=p->next;q->next=S->next;S->next=q;}puts("逆序成功");return;
}
//清空全部信息
void free_link(STU *S)
{//判断逻辑if(NULL==S){return;}//使用头删法,循环释放链表空间while(S->next){STU *p=S->next;S->next=p->next;free(p);p=NULL;}puts("数据已清空");
}

主函数(main.c)

#include "head.h"int main(int argc, const char *argv[])
{//创建链表STU *S=create();if(NULL==S) return -1;while(1){menu();printf("请输入您的选择:");int n;scanf("%d",&n);getchar();switch(n){case 1:      //新增学生信息{int num;printf("请输入学生个数 :");scanf("%d",&num);getchar();for(int i=1;i<=num;i++){add(S);}};break;case 2:       //查看信息{show(S);    };break;case 3:       //查找信息{int id,n1;char name[20];printf("请输入查询方式(1学号,2姓名) :");scanf("%d",&n);getchar();switch(n){case 1:{printf("请输入要查询的学号:");scanf("%d",&id);getchar();STU *p=search_id(S,id);if(NULL==p){puts("未查询到");}else{printf("查询到了:\n");printf("学号:%d\t姓名:%s\t成绩:%.2f\n",p->data.id,p->data.name,p->data.score);}};break;case 2:{printf("请输入要查询的姓名:");gets(name);STU *p=search_name(S,name);if(NULL==p){puts("未查询到");}else{printf("查询到了:\n");printf("学号:%d\t姓名:%s\t成绩:%.2f\n",p->data.id,p->data.name,p->data.score);}                      }}};break;case 4:       //插入信息{int pos;printf("请输入要插入的位置:");scanf("%d",&pos);getchar();insert_pos(S,pos);};break;case 5:       //更改信息{int id1,id2;printf("请输入要更改的学号和目的学号:");scanf("%d%d",&id1,&id2);getchar();change_id(S,id1,id2);};break;case 6:      //成绩排名{sort_down(S);};break;case 7:      //成绩逆序{rever_list(S);};break;case 8:      //删除信息{int id3;printf("请输入要删除的学生id:");scanf("%d",&id3);delete_id(S,id3);};break;case 9:      //清空信息{free_link(S);};break;case 0: exit(0); break;default :printf("输入选项不存在,请重新输入!\n");}}return 0;
}

功能实现:

*******学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:1
请输入学生个数 :3
请输入学生信息:
学号:1
姓名:tom
成绩:88
插入成功
请输入学生信息:
学号:2
姓名:jerry
成绩:60
插入成功
请输入学生信息:
学号:3
姓名:zs
成绩:43
插入成功
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:2
学号      姓名      成绩
3       zs      43.00
2       jerry       60.00
1       tom     88.00
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:3
请输入查询方式(1学号,2姓名) :1
请输入要查询的学号:2
查询到了:
学号:2 姓名:jerry 成绩:60.00
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:4
请输入要插入的位置:4
插入失败
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:4
请输入要插入的位置:3
请输入学生信息:
学号:4
姓名:wwe
成绩:66
插入成功
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:2
学号      姓名      成绩
3       zs      43.00
2       jerry       60.00
1       tom     88.00
4       wwe     66.00
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:5
请输入要更改的学号和目的学号:4 14
修改成功
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:2
学号      姓名      成绩
3       zs      43.00
2       jerry       60.00
1       tom     88.00
14      wwe     66.00
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:6
排序完成
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:2
学号      姓名      成绩
1       tom     88.00
14      wwe     66.00
2       jerry       60.00
3       zs      43.00
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:7
逆序成功
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:2
学号      姓名      成绩
3       zs      43.00
2       jerry       60.00
14      wwe     66.00
1       tom     88.00
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:8
请输入要删除的学生id:14
删除成功
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:2
学号      姓名      成绩
3       zs      43.00
2       jerry       60.00
1       tom     88.00
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:9
数据已清空
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:2
无信息
********学生管理系统*********
*******1.新增学生信息********
*******2.查看信息************
*******3.查找信息************
*******4.插入信息************
*******5.更改信息************
*******6.成绩排名************
*******7.成绩逆序************
*******8.删除信息************
*******9.清空信息************
*******0.退出系统************
请输入您的选择:0

单链表学生管理系统(0723-林雪阵)相关推荐

  1. C++单链表学生管理系统(有登录界面)

    C++单链表 学生管理系统 这个程序是我好几天的心血,欢迎大家指正!!! 该程序需要新建三个txt文件.1.login.txt用来存放注册用户的用户名与密码. 2.login2.txt用于登录时将lo ...

  2. php+Vue单页面学生管理系统

    Php学生管理系统 引言:学生实训,老师要求用php代码写学生管理系统作为实训内容.之前作业都是拜托同学交,此次作业是自由发挥的,故从星期天学习Php的基本语法.如字符串拼接,function的写法, ...

  3. C语言基础篇02:单链表实现学生成绩管理系统

    单链表实现学生成绩管理系统 前言 需求分析 详细设计 增加成绩信息 删除成绩信息 修改成绩信息 查询学生信息和浏览学生信息 总结 前言 上篇已经讲过单链表的基本实现,这篇将以一个简单的管理系统入手. ...

  4. c语言用链表实现成绩管理系统,C语言基于单链表得学生成绩管理系统

    前言 传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统.首先给年夜家总结下为什么你们学习C语言会觉得难,尤其是对单链表这块,主要原因得是因为 ...

  5. 学生信息管理系统C语言单链表文件实现

    功能概述:分有教师端和学生端 1.录入学生信息     2.排列学生信息    3.修改学生信息     4.删除学生信息       5.查找学生信息     6.修改系统密码       7.获取 ...

  6. c语言实现学生二科成绩的单链表,c++链表实现学生成绩管理系统(简易版)

    #include using namespace std; typedef struct student{ int id;//学号 string sex; string name; int cpp;/ ...

  7. 学生管理系统(第一写)用C语言写,单链表实现,插入,查询,浏览,修改,删除的功能源码

    标题 学生管理系统 #define _CRT_SECURE_NO_WARNINGS #include <malloc.h> #include #include <stdio.h> ...

  8. 数据结构—单链表实现学生信息管理系统

    代码 main.cpp #include<iostream>using namespace std;typedef struct STU {char name[20];char sno[2 ...

  9. 成绩管理单链表文件c语言,c语言学生信息管理完整.docx

    学生信息管理系统 本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉 C 语言的文件和单链表的各种基本操作.本程序中涉及结构体.单链表.文件等方面的知 识.通过本程序的训练,使学 ...

  10. 学生管理系统——用链表实现

    前言 该程序是大一上学期的课设,在上学期的基础上对此程序进行了细节上的优化,以及将程序分成多个文件,第一次对多文件开发有了了解(再也不要将几千行代码放在一个文件内了) 一. 软件功能描述 假设学生成绩 ...

最新文章

  1. 【机器学习】Apriori 算法进行关联分析和FP-growth算法
  2. Thread优先级之让步
  3. python 抓取“煎蛋妹子图”并分页存在本地(普通版和多线程版)
  4. python3鄙视python2_Python3 正在毁灭 Python的原因分析
  5. 二叉堆时间复杂度 php,二叉堆(Binary Heap)
  6. 谈谈Java与大数据之间的关系你们都了解了清楚了吗?
  7. 微信公众号开发(—)接口与服务器关联
  8. scp 、ssh非22端口的服务器方法
  9. 计算机操作系统模拟试题,最新考研计算机-操作系统模拟试题.doc
  10. postgresql 备份 java_用JAVA执行CMD命令备份PG数据库,解决需要输入口令的问题
  11. python用pandas读取excel_使用Pandas或其他模块在Python中读取没有隐藏列的Excel文件...
  12. Spring MVC BindingResult异常
  13. VC++ 求绝对值函数
  14. 对应node版本_骚操作,Node.js接入Paddle Lite,网站也能AI推理
  15. Ubuntu中超级终端-minicom
  16. 项目日报模板_中山首个地下综合管廊项目取得重大进展
  17. 【Proteus仿真】74LS138译码器流水灯
  18. 印章如何去蜡_PS怎么制作蜡封印章的效果?
  19. 读懂 PetaLinux:让 Linux 在 Zynq 上轻松起“跑”(转)
  20. python 服务器和客户端 学习http请求和响应报文头

热门文章

  1. 图片验证码识别 python_Python识别字符型图片验证码
  2. mac 上的android 模拟器下载地址,在MAC上运行Android手机模拟器
  3. Rayman的绝顶之路——Leetcode每日一题打卡4
  4. Word表格中文字如何居中?
  5. 解决edge可以访问github,谷歌却无法访问的问题
  6. 加拿大MSB牌照简介
  7. 8K V-by-One LVDS信号发生器
  8. WEB交互设计方法中”页面表达原则”
  9. Python文本特征及分类
  10. 如何提高mysql的update速度_如何提高数据库update更新的速度