双链表实现简单的学生管理系统

学生成绩管理系统C语言版 成绩管理系统C语言版 阅读详情

#include<stdio.h>
#include"stdlib.h"
#include"string.h"

/**************************************************** 

copyright: self_chou 

Filename:  SM.c 

AUthour : self_chou   Version: 1.0     Date: 2012.07 

Description: 用链表实现简单的学生管理系统

Function List: 

                    create();     学生信息插入函数 

                    sort();         排序函数(冒泡排序)

                    my_remove();   删除函数

                    find_print();     查找函数(写的很酱油)  

                    disp();            界面函数  

*******************************************************/ 

 


 

int x;
int n;
int del;                                        //记不清了。。。。。蛋疼
int flag = 0;
struct node *ptr,*qtr;


struct score
{
int ch;
int ma;
int en;                                              //学生信息结构体,写复杂了
int av;
};

typedef struct node
{
char name[10];
int age;
struct score sc;
struct node *next;
struct node *prev;
}node;
struct node *head = NULL;
struct node *last = NULL;

void create(int n)                                //尾插入
{
struct node *p,*q;
char s[10];

int age;
int i=1;
if(head == NULL)
{
printf("请输入第%d个姓名\n",i);
scanf("%s",s);
printf("请输入第%d个年龄\n",i);
scanf("%d",&age);
head=(struct node *)malloc(sizeof(struct node));
strcpy(head->name,s);
head->age=age;
head->sc.ch = rand()0+1;
head->sc.ma = rand()0+1;
head->sc.en = rand()0+1;
head->sc.av = (head->sc.ch+head->sc.ma+head->sc.en)/3;
head->prev = NULL;
head->next = NULL;
p=head;
q=head;
while(n-1!=0)
{ 
i++;
p->next=(struct node *)malloc(sizeof(struct node));
  p=p->next;
printf("请输入第%d个姓名\n",i);
scanf("%s",s);
printf("请输入第%d个年龄\n",i);
scanf("%d",&age);
strcpy(p->name,s);
p->age=age;
  p->sc.ch = rand()0+1;
p->sc.ma = rand()0+1;
p->sc.en = rand()0+1;
  p->sc.av = (p->sc.ch+p->sc.ma+p->sc.en)/3;
p->prev=q;
q=p;
n--;
}
p->next=NULL;
q=NULL;
}
else
{ 
p = last;
q = last;
while(n!=0)
{ 
p->next=(struct node *)malloc(sizeof(struct node));
  p=p->next;
printf("请输入第%d个姓名\n",i);
scanf("%s",s);
printf("请输入第%d个年龄\n",i);
scanf("%d",&age);
strcpy(p->name,s);
p->age=age;
  p->sc.ch = rand()0+1;
p->sc.ma = rand()0+1;
p->sc.en = rand()0+1;
  p->sc.av = (p->sc.ch+p->sc.ma+p->sc.en)/3;
p->prev=q;
q=p;
n--;
i++;

}
p->next=NULL;
q=NULL;
}
last = p;
}


void print(struct node *p)
{ 
while(p!=NULL)
{
printf("(姓名:%s ,平均成绩:%d)",p->name,p->sc.av);
last = p;
p=p->next;
}
printf("\n");
}

 

 

 

void sort()                           //冒泡排序,写复杂了。。。
{
struct node *p, *q;
int i,j,flag;
p = head;
n = 0;
while(p != NULL)
{
n++;
p = p->next;
}

if(n == 1)
{
return 0;
}

for( i=0;i<n-1;i++)
{ 
flag=0;
p=head;
q=p->next;
for( j=0;j < n-i-1;j++)
{
if( p == head)
{
if( q->next == NULL )
{
if( p->sc.av >q->sc.av )
{
q->next = p;
q->prev = NULL;
p->next = NULL;
p->prev = q;
head = q;
return 0;
}
else
return 0;
}
else
{
if(p->sc.av > q->sc.av)
{
p->next = q->next;
q->next->prev = p;
p->prev =q;
q->next = p;
q->prev = NULL;
head = q;
q = p->next;
flag++;
}
else
{
p = q;
q = q->next;
}
}
}
else
if(q->next != NULL)
{
if(p->sc.av > q->sc.av)
{
q->prev = p->prev;
p->prev->next = q;
p->next = q->next;
q->next->prev = p;
q->next = p;
p->prev = q;
q = p->next;
flag++;
}
else
{
p = q;
q = q->next;
}
}
else
{
if( p->sc.av > q->sc.av )
{
p->prev->next = q;
q->prev = p->prev;
q->next = p;
p->prev = q;
p->next = NULL;
flag++;
}
}


}
if(flag == 0)
{
break;
}
}
}



int find_print(int n)      //查找与指定年龄最接近的学生姓名
{
node *p;
p=head;
if(p->sc.av > n)
{
printf("最接近的人的姓名是:%s\n",p->name);
return 0;
}
while(p->next != NULL)
{
if(p->sc.av <= n <= p->next->sc.av )
{
break;
}
else
p=p->next;
}
if(p->next == NULL)
{
printf("最接近的人的姓名是:%s\n",p->name);
return 0;
}
else
{
if( ( n - (p->sc.av) ) < ( (p->next->sc.av) - n) )
{
printf("最接近的人的姓名是:%s\n",p->name);
return 0;
}
else
{
printf("最接近的人的姓名是:%s\n",p->next->name);
return 0;
}
}
}

int my_remove(int y)
{ 
ptr = qtr = head;
if(y == 1)
{
if(head->next != NULL)
{
head = head->next;
free(ptr);
}
else
{
head = NULL;
}
return 0;
}
while( ( (y-1) != 0) && ptr != NULL)
{
qtr = ptr;
ptr = ptr->next;
y--;
}
if(ptr == NULL)
{
printf("数据库中没有此学生\n");
return 0;
}
else
{
qtr->next = ptr->next;
free(ptr);
printf("删除完成\n");
ptr = qtr = head;
return 0;
}
}

void disp()
{
printf("本程序使用的分数是0-100的随机数\n");
while(1)
{
printf("***********************************************************\n");
printf(" 请选择功能\n");
printf(" 1.增加学生信息\n");
printf(" 2.删除学生信息\n");
printf(" 3.排序\n");
printf(" 4.查找\n");
printf(" 5.退出\n");
printf("***********************************************************\n");
printf("请输入选择的功能\n");
scanf("%d",&x);
switch(x)
{
case 1:
{
printf("请输入要插入的学生人数\n");
scanf("%d",&n);
create(n);
printf("插入完成,现有学生如下\n");
print(head);
flag = 0;
break;
}
case 2:
{ 
if(head == NULL)
{
printf("数据库中没有学生\n");
 break;
}
printf("现有学生如下\n");
print(head);
printf("请输入要删除第几个学生\n");
scanf("%d",&del);
my_remove(del);
printf("删除后\n");
print(head);
flag =0;
break;
}
case 3:
{
if(head == NULL)
{
printf("数据库中没数据,无法排序\n");
break;
}
printf("现有学生如下\n");
print(head);
sort();
printf("按平均分排序后\n");
print(head);
flag =1;
break;
}
case 4:
{

if(head == NULL)
{
printf("数据库中没数据,无法排序\n");
break;
}
if(flag == 0)
{
printf("数据已改变,但未排序,请排序后查找\n");
break;
}
printf("现有学生如下\n");
print(head);
printf("请输入要查找的平均成绩\n");
scanf("%d",&n);
find_print(n);
break;
}
case 5:
{
printf("欢迎使用本学生管理系统!\n");
exit(0);
}
default:
{
printf("输入有误,请重新输入\n");
break;
}
}

}
}
int main()
{
disp();
return 0;
}


 延伸:

在ubuntu12.04中安装好sqlite3并掌握SQL语言;服务器把用户登陆密码

表和学生成绩等信息存放在数据库中;客户端通过socket与并发服务器建立连接,可

以进行学生的注册登录,学生只可以常看成绩和网上报名;管理员可以修改服务器上学 

生的信息(管理员账户内置)。

 

并发服务器的建立参看我的另一篇博文

http://blog.youkuaiyun.com/self_chou/article/details/7805035

基于面向对象的双链表学生管理系统设计与实现 设计原则说明封装性数据私有化,通过接口访问构造函数初始化对象状态,加入验证逻辑析构函数清理资源,提升可维护性学生类的核心属性包括学号(studentID)、姓名(name)、年龄(age)等基本信息。这些信息通常具有固定的格式和取值范围,因此在定义时需要考虑数据类型的选取和取值范围的约束。属性名数据类型说明studentID学生唯一标识,不可重复name学生姓名,长度限制ageint。 阅读详情

相关推荐

数据结构双向链表学生成绩管理系统

利用数据结构构建双向链表实现了学生成绩管理,管理包括对学生成绩的相关操作,如双向查找,添加,删除,排序,输出等多种功能。

实现双链表嵌套的简单学生信息管理

题目 链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景:一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1–B5 做一个学生成绩管理系统 学生成绩有语文 数学 英语 功能: 录入成绩 找最三科总分的最高分 最低分 算出平均分 解题 我是定义两个结构体,相当于两个链表,学生信息和班级信息,打算在班级信息结构体中定义一个结构体指针指向学生信息。 参考代码 #include <stdio.h> #include <stdlib.h> #inc

weixin_44234294的博客 2453

C语言实现 学生信息管理系统 双链表

STMS学生信息管理系统; 采用C语言、由双链表实现,有学生、老师、管理员三种角色登陆,每种角色权限功能不一样。

用单链表实现一个简单的学生信息管理系统(利用文件进行数据的存取)附源码

1、利用单链表建立学生基本信息表 2、浏览每个学生的信息 3、根据学号查询某个学生的基本信息 4、添加学生信息到单链表中 5、删除一个学生的信息 6、利用文件实现学生信息的存取

zxcdfb_1的博客 3698

Agv、Rgv 车辆控制调度系统开发第一篇

Agv、Rgv 车辆控制调度系统第一篇为什么要做这个系统先看作品从头讲起算法讲解编程语言从哪里开始继续深入预告 为什么要做这个系统 说白了是为了赚钱,在一个项目中发现公司买别人家的调度系统要几十万,还只是一个项目的实施,从那天起我就决定自己写一套,用了一年的时间写出来后,才发现根本卖不掉,卖不掉就卖不掉吧,反正我现在已经吧写这套系统当成了一种乐趣,如果不让我写了我反而不适应,但是没有人欣赏我的成果我反而很难受,所以决定吧这个系统的创作过程,写下来,给后面的人一些建议,少走点弯路。 先看作品 从头讲起 在

持续分享调度系统开发过程 2万+

欢乐熊大话蓝牙知识16:蓝牙是怎么找设备的?扫描与广播的“对话内幕”

蓝牙是怎么找设备的?扫描与广播的对话技术介绍

hoony123的博客 1380

c语言 链表知识分享 --学生管理系统详解

链表的基础知识详解,基本动态函数的使用;链表构造学生管理系统创建,查找,删除,插入 图书管理系统类似

qq_63982739的博客 1410

LIGGGHTS开源离散元仿真:从基础安装到高级应用实战

本文详细介绍了LIGGGHTS开源离散元仿真软件的基础安装、脚本编写及高级应用实战。从颗粒自由落体模拟到工业级复杂系统建模,涵盖CFD-DEM耦合、高性能计算优化等关键技术,帮助用户快速掌握这一强大的颗粒仿真工具。特别适合需要处理颗粒系统仿真的科研人员和工程师。

l1k9j8h7g6的博客 619

学生管理系统——C语言单链表结构存储

学生管理系统,是用c语言程序设计的一款简便软件项目,能对学生信息进行增删查改、排序、导入、导出,使用链表的结构存储。

学如逆水行舟,不进则退! 4783

IDEA 2023.2.3全平台安装指南:Mac/Windows/Linux一键激活(附最新补丁获取)

本文提供IDEA 2023.2.3在Mac、Windows和Linux三大平台的一键安装与激活指南,包含最新补丁获取方法。详细讲解各系统安装流程、性能调优设置及高效开发技巧,帮助开发者快速配置并提升工作效率。

weixin_28832121的博客 394

智能座舱测试工程师必看:从零搭建自动化测试框架的5个实战技巧

本文为智能座舱测试工程师提供从零搭建自动化测试框架的5个实战技巧,涵盖环境搭建、ADB高级应用、Python脚本工程化、Monkey测试优化及性能调优。通过ADB深度操作和Python脚本封装,帮助测试人员构建高可复用的智能座舱测试解决方案,显著提升测试效率与问题发现率。

python9snake的博客 631

数据结构--链表(学生信息管理系统)

双向链表的学生信息管理系统

梓川枫的博客 2635

YOLOv12 改进 | Backbone改进 3

将CSP中的简单拼接改为可学习的特征选择门控,动态决定哪些特征流向下一层,同样再写这篇。:相比静态CSP的固定50/50分割,门控机制可学习0.3:0.7等最优比例。在输入端加入轻量SR模块,对下采样后的特征进行超分恢复,提升小目标检测能力。(小目标): 从 0.51 AP → 0.63 AP (+24%):采用ESPCN的高效亚像素卷积,避免传统插值的信息损失。:从通道级(SE)到空间级(Spatial)的多粒度控制。:结合浅层细节和深层语义,恢复小目标的纹理信息。

u012133341的博客 839

双链表嵌套实现简单学生成绩管理系统

双链表嵌套实现简单学生成绩管理系统 (师承上官可编程) 场景:一个年级,相当于链表A,该年级5个班,每个班5个人,相当于链表B1–B5。功能:录入学生基本信息和成绩,找出最高分、最低分、平均分。 全代码展示 #include<stdio.h> #include<stdlib.h> #include<string.h> struct Class //班级结构体 { char *Class; struct Class *next; s

m0_47561451的博客 775

TC3XX - MCAL知识点(三十八):AURIX™ TC3xx 的EDSADC实现旋变解码功能(理论知识+手册阅读)

本文系统梳理了英飞凌AURIX系列芯片EDSADC模块的技术手册内容。首先概述了该模块的架构特点,包括模拟/数字输入通道和总线地址信息。重点解析了手册中的关键知识点:1)模拟量输入的差分/单端模式;2)数字量连接的触发、数据源和时钟源选择;3)功能配置中的寄存器操作注意事项;4)输入通道的三种数据来源模式;5)滤波器链的组成和工作原理;6)旋变应用中的载波信号生成和延迟补偿机制。最后对SRM、SAUL、SBLL等专业术语进行了详细解释。全文为理解EDSADC模块的硬件特性和配置方法提供了系统的技术参考。

梦想技术家 589

Linux下的隐藏技术(文件隐藏、进程隐藏、端口隐藏、权限隐藏、命令隐藏)

这种技巧是关键记录删除,或者我们可以暴力点,比如前150行是用户的正常操作记录,150以后是攻击者操作记录。在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。这种情况下我们怎么办?在shell中执行的命令,不希望被记录在命令行历史中,如何在linux中开启无痕操作模式呢?

墨痕诉清风的博客 742

list.h的简单应用

既然我们分析了list.h,那么就要学以致用,因为通过具体的例子我们才能真实感受到双链表的用法。本文首先为你呈现一个最基本的双链表使用方法,然后在引用另外两个例子,大家可以去亲自试试。 1.简单的学生管理系统 这里学生管理系统只是个基本模型:用户输入数据,然后通过输出重定向到stuInfo.txt文件当中。先看学生信息数据结构: 1 struct p

956

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

双链表嵌套实现学生管理系统

#题目:链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景:一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1–B5 做一个学生成绩管理系统 学生成绩有语文 数学 英语 功能: 录入成绩 找最三科总分的最高分 最低分 算出平均分 首先这是一个双链表的题目(也就是两个结构体)首先我们要定义两个结构体,class和student struct Class //A { struct student *top; struct Class *next; }; s

肖肖的博客 1636

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

使用双链表完成学生管理系统

欢迎交流,共同进步。 题目为:学生信息管理系统 使用双链表机制,实现功能如下:插入一个学生数据、删除一个学生数据、修改一个学生数据、查找一个学生数据、遍历显示学生数据、导入表格数据、导出表格数据 。 #include<stdio.h> //标准IO #include<stdlib.h> //标准库 #include<stri...

子歌的博客 938

双链表嵌套的简单学生信息管理系统

摘自:实现双链表嵌套的简单学生信息管理 作者:三速何时sub20 发布时间: 2020-07-20 10:44:40 网址:https://blog.youkuaiyun.com/weixin_44234294/article/details/107458155?spm=1001.2014.3001.5501 题目 链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景:一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1–B5 做一个学生成绩管理系统 学生成绩有语文 数学 英语 .

zhuguanlin121的博客 887

C语言练习——双链表下学生成绩管理系统

双链表实现学生成绩管理系统学生和班级结构体初始化学生:班级:学生链表创建(这里以尾插法为例子!):班级链表创建:输入数据到链表中:求班级里头最高分:求班级里头最低分:求班级平均分:输入班级人数和每个班学生人数:主函数部分:代码演示: 学生和班级结构体初始化 学生: struct Student { int math; // 数学 int chinese; // 语文 int english; // 英语 int StudentID;

正弦定理的博客 1068

一个简单的学生管理系统实现(vs2010)

本文参考自学生管理系统实现(源码) 查看原文: 原文地址 用一个双链表存储数据的学生管理系统: 链表存储逻辑描述:                              ...

running987的博客 1万+

C语言实现简单双链表学生系统(讲解)

代码块参照这篇博文,在Linux系统下能跑出来,本人主要想对这个小项目做些讲解,不过有讲的不对的,请指教,洗耳恭听。 原文链接:https://blog.youkuaiyun.com/weixin_45981936/article/details/108185613 题目要求:链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景:一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1–B5 做一个学生成绩管理系统 学生成绩有语文 数学 英语 功能: 录入成绩 找最三科总分的最高分 ..

yanshimufeng的博客 1001

学生成绩管理系统设计

学生的信息的录入功能: 我实现的学生信息录入学生总分的排序是一体的,每次录入学生信息后立即进行位置排序,因此用双链表 就非常方便,可以很方便地进行插入,而不需要像数组那样拖拽大量元素,这就是我采用双链表的原因。学生总分的排序: 初始化i=1,p指针;但若p.总分=p.next.总 分,则令p的排名为i即可,使下一个的排名不变,实现并列名次。每次通过新的学生学号信息,在双链表中顺序遍历看是否有重复学号,而选择顺序遍历的原因是由于学号 在双链表中的排序是无序的,有序的只要总分的排序,因此采用顺序查找。

perfect_god的博客 4916

简易的学生管理系统

  student.cppstudent.cpp该学生管理系统就是用的是vs2013编辑器,实现了功能如下 (1):用户的登录 (2)运用双连表进行信息的插入 (3)学生信息的查询,删除。 (4)对学生信息的打印 (5)运用双链表对学生分数的排序 (6)释放运行空间,对空间进行回收处理,退出学生管理系统  //student.h #pragma once #include&lt...

trainhui的博客 964

双链表——学生管理系统

printf("链表为空或不存在\n");printf("链表为空或不存在\n");printf("链表为空或不存在\n");printf("链表为空或不存在\n");printf("链表为空或不存在\n");printf("链表为空或不存在\n");printf("链表不存在\n");printf("创建失败\n");printf("销毁成功\n");

weixin_74829157的博客 477
上一篇: 循环双链表加目录IO实现简单的文件检索
下一篇: 关于电子锁问题的推理
zhouxf_cn
博客等级 码龄14年 54粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值