注册登录学生管理系统小项目
头文件
#ifndef _LOGINLINK_H_
#define _LOGINLINK_H_
#include<myhead.h>
typedef struct
{int id;char name[20];int age;
}stu,*Pstu;
typedef struct node
{union{int len;stu data;};struct node *next;
}node,*Pnode;
int regist();
int login();
Pnode create();
void input_link(Pnode);
void output_link(Pnode);
void anypos_delete(Pnode,int);
void anypos_insert(Pnode,int);
void anypos_search(Pnode,int);
void anypos_change(Pnode,int);
void head_insert(Pnode);
void rear_insert(Pnode);
void name_delete(Pnode,char*);
void age_change(Pnode,int);
#endif
函数文件
#include "loginlink.h"
int regist()
{char name[20];char code[20];int fp=open("./user.txt",O_CREAT|O_WRONLY|O_APPEND,0664);if(fp==-1){perror("open fp");return -1;}printf("请输入注册账号:");fp=open("./user.txt",O_CREAT|O_WRONLY|O_APPEND,0664);if(fp==-1){perror("open fp");return -1;}scanf("%s",name);printf("请输入注册密码:");scanf("%s",code);
char a=' ';
char b='\n';write(fp,name,strlen(name));write(fp,&a,sizeof(a));write(fp,code,strlen(code));write(fp,&b,sizeof(b));close(fp);printf("注册成功\n");
}
int login()
{ int flag=0;char name[20],code[20],dname[20],dcode[20];FILE *fp=fopen("./user.txt","r");if(fp==NULL){perror("open fp");return -1;}printf("请输入登录账号:");scanf("%s",dname);printf("请输入登录密码:");scanf("%s",dcode);
while(1)
{
int res= fscanf(fp,"%s %s\n",name,code);if(res<0)
{break;
}
if(strcmp(name,dname)==0&&strcmp(code,dcode)==0)
{flag=1;printf("登录成功\n");return 1;
}}
if(flag==0)
{printf("登录失败\n");
}}
Pnode create()
{Pnode L=malloc(sizeof(node));if(L==NULL){printf("申请头节点失败\n");return NULL;}L->len=0;L->next=NULL;printf("初始化成功\n");return L;
}
void input_link(Pnode L)
{stu e;printf("请输入学号:");scanf("%d",&e.id);printf("请输入姓名:");scanf("%s",e.name);printf("请输入年龄:");scanf("%d",&e.age);Pnode p=malloc(sizeof(node));if(p==NULL){printf("申请正常节点失败\n");return; }Pnode t=L;
for(int i=0;i<L->len;i++)
{t=t->next;
}p->data=e;p->next=NULL;t->next=p;L->len++;printf("输入成功\n");
}
void output_link(Pnode L)
{Pnode t=L;printf("学生信息如下\n");for(int i=0;i<L->len;i++){t=t->next;printf("学号:%d\t姓名:%s\t年龄:%d\n",t->data.id,\t->data.name,t->data.age);}
}
void anypos_delete(Pnode L,int pos)
{if(pos<1||pos>L->len||L==NULL||L->len==0){printf("删除失败\n");return;}Pnode t=L;for(int i=0;i<pos-1;i++){t=t->next;}Pnode Q=t->next;t->next=Q->next;free(Q);Q=NULL;L->len--;printf("删除成功\n");
}
void anypos_insert(Pnode L,int pos)
{if(pos<1||pos>L->len+1||L==NULL){printf("插入失败\n");return;}Pnode t=L;for(int i=0;i<pos-1;i++){t=t->next;}Pnode p=malloc(sizeof(node));printf("请输入插入学生的学号:");scanf("%d",&p->data.id);printf("请输入插入学生的姓名:");scanf("%s",p->data.name);printf("请输入插入学生的年龄:");scanf("%d",&p->data.age);p->next=t->next;t->next=p;L->len++;
printf("插入成功\n");
}
void anypos_search(Pnode L,int pos)
{if(pos<1||pos>L->len||L==NULL||L->len==0){printf("查找失败\n");return;}Pnode t=L;for(int i=0;i<pos;i++){t=t->next;}printf("学号:%d\t姓名:%s\t年龄:%d\n",t->data.id,\t->data.name,t->data.age);}
void anypos_change(Pnode L,int pos)
{if(pos<1||pos>L->len||L==NULL||L->len==0){printf("修改失败\n");return;}Pnode t=L;for(int i=0;i<pos;i++){t=t->next;}printf("请输入你要修改的学生学号:");scanf("%d",&t->data.id);printf("请输入你要修改的学生姓名:");scanf("%s",t->data.name);printf("请输入你要修改的学生年龄:");scanf("%d",&t->data.age);printf("修改成功\n");
}
void head_insert(Pnode L)
{if(L==NULL){printf("插入失败\n");return;}Pnode p=malloc(sizeof(node));printf("请输入你要插入的学生学号:");scanf("%d",&p->data.id);printf("请输入你要插入的学生姓名:");scanf("%s",p->data.name);printf("请输入你要插入的学生年龄:");scanf("%d",&p->data.age);p->next=L->next;L->next=p;L->len++;printf("插入成功\n");}
void rear_insert(Pnode L)
{if(L==NULL){printf("插入失败\n");return;}Pnode p=malloc(sizeof(node));printf("请输入你要插入的学生学号:");scanf("%d",&p->data.id);printf("请输入你要插入的学生姓名:");scanf("%s",p->data.name);printf("请输入你要插入的学生年龄:");scanf("%d",&p->data.age);Pnode t=L;for(int i=0;i<L->len;i++){t=t->next;}p->next=NULL;t->next=p;L->len++;printf("插入成功\n");
}
void name_delete(Pnode L,char*name)
{int flag=0;int i;Pnode t=L->next;Pnode Q=L;for(i=0;i<L->len-1;i++){if(strcmp(t->data.name,name)==0){flag=1;break;}t=t->next;Q=Q->next;}if(flag==0){printf("删除失败\n");return;}Q->next=t->next;free(t);t=NULL;L->len--;printf("删除成功\n");
}
void age_change(Pnode L,int age)
{int flag=0;int i;Pnode t=L;for(i=0;i<L->len;i++){t=t->next;if(t->data.age==age){flag=1;break;}}if(flag==0){printf("修改失败\n");return;}
t->data.id=10086;
printf("修改成功\n");}
菜单文件
#include "loginlink.h"
int main(int argc, const char *argv[])
{int ch,a,n;Pnode L=create();char name[20];int pos;int age;
while(1)
{printf("\t\t\t1、注册\n");printf("\t\t\t2、登录\n");printf("\t\t\t0、退出\n");
printf("请输入你的选择:");
scanf("%d",&ch);
getchar();
switch(ch)
{case 1:regist();break;case 2: a=login();if(a==1){goto system;}break;case 0: return 0;break;default:printf("输入错误\n");break;
}}
while(1)
{
system:printf("\t\t\t学生管理系统\n");printf("\t\t\t1、输入学生信息\n");printf("\t\t\t2、输出学生信息\n");printf("\t\t\t3、任意位置删除学生信息\n");printf("\t\t\t4、任意位置插入学生信息\n");printf("\t\t\t5、任意位置查找学生信息\n");printf("\t\t\t6、任意位置修改学生信息\n");printf("\t\t\t7、表头插入学生信息\n");printf("\t\t\t8、表尾插入学生信息\n");printf("\t\t\t9、按照姓名查找学生并删除\n");printf("\t\t\t10、按照年龄查找学生并修改学号为10086\n");printf("\t\t\t0、退出学生系统\n");
printf("请输入你的选择:");
scanf("%d",&ch);
getchar();switch(ch){case 1:printf("请输入学生人数:");scanf("%d",&n);for(int i=0;i<n;i++){input_link(L);}break;case 2:output_link(L);break;case 3:printf("请输入删除学生的位置:");scanf("%d",&pos);anypos_delete(L,pos);break;case 4:printf("请输入插入学生的位置:");scanf("%d",&pos);anypos_insert(L,pos);break;case 5:printf("请输入查找学生的位置:");scanf("%d",&pos);anypos_search(L,pos);break;case 6:printf("请输入修改学生的位置:");scanf("%d",&pos);anypos_change(L,pos); break;case 7:head_insert(L);break;case 8:rear_insert(L);break;case 9:printf("请输入删除学生的姓名:");scanf("%s",name);name_delete(L,name);break;case 10:printf("请输入修改学生的年龄:");scanf("%d",&age);age_change(L,age);break;case 0: return 0;break;default:printf("输入错误\n");break;}}return 0;
}
效果展示
注册功能

登录功能

输入功能

输出功能

删除功能

插入功能

查找功能

修改功能

表头插入

表尾插入

按照姓名查找学生并删除

按照年龄查找学生并修改学号为10086

相关文章:
注册登录学生管理系统小项目
头文件 #ifndef _LOGINLINK_H_ #define _LOGINLINK_H_ #include<myhead.h> typedef struct {int id;char name[20];int age; }stu,*Pstu; typedef struct node {union{int len;stu data;};struct node *next; }node,*Pnode; int regist(); int login(); Pnode create()…...
qt QCompleter详解
1、概述 QCompleter是Qt框架中的一个类,用于为文本输入提供自动完成功能。它可以与Qt的输入控件(如QLineEdit、QTextEdit等)结合使用,根据用户的输入实时过滤数据源,并在输入控件下方或内部显示补全建议列表。用户可以…...
YOLOv11融合特征细化前馈网络 FRFN[CVPR2024]及相关改进思路
YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 一、 模块介绍 论文链接:Adapt or Rerish 代码链接:https://github.com/joshyZhou/AST 论文速览:基于 transformer 的方法在图像恢复任务中取得了有希望的性能,因为…...
【前端知识】JS模块规范
JS模块规范 概述CommonJS 规范 代码示例AMD 规范 代码示例ES6 Module 规范 代码示例IIFE 规范 代码示例全局变量 代码示例 CommonJS 模块和 ES6 模块有什么区别?1. 语法和声明方式2. 动态和静态导入3. 循环依赖4. 默认导出和命名导出5. 文件扩展名6. 环境和应用7. 工…...
vue3展示pag格式动态图
提示:如果是webpack环境的,参考:Pag格式在vue3中的简单使用方法_pag文件-CSDN博客 下面展示的是在vite环境下配置pag 1、安装libpag npm i libpag --save 2、安装rollup-plugin-copy npm i rollup-plugin-copy --save 3、封装pag组件 下…...
代码随想录算法训练营第三十九天|Day39 动态规划
198.打家劫舍 视频讲解:https://www.bilibili.com/video/BV1Te411N7SX https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html 思路 #define max(a, b) ((a) > (b) ? (a) : (b)) int rob(int* nums, int numsSize) {if(numsSize 0){ret…...
qt QMovie详解
1、概述 QMovie 是 Qt 框架中用于处理动画文件的类。它支持多种动画格式,包括 GIF 和一些常见的视频格式(尽管对视频格式的支持依赖于底层平台)。QMovie 类主要用于在 QLabel 或 QGraphicsView 等控件中显示动画。通过加载动画文件ÿ…...
数据集整理
系列博客目录 文章目录 系列博客目录1.Visual Genome数据集2.COCO数据集3.Flickr30k数据集10.集合多个数据集的网站 1.Visual Genome数据集 官网链接:https://homes.cs.washington.edu/~ranjay/visualgenome/index.html Visual Genome数据集梳理 Visual Genome数据…...
认证授权基础概念详解
目录 认证 (Authentication) 和授权 (Authorization)的区别是什么? RBAC 模型了解吗? 什么是 Cookie ? Cookie 的作用是什么? 如何在项目中使用 Cookie 呢? 如何在 Spring Boot 中创建和读取 Cookie 创建 Cookie Cookie 到期日期 安全…...
美国地址生成器站点
推荐一:fakexy 官网地址:https://www.fakexy.com 推荐二:好维持官网地址: https://www.dizhishengcheng.com 官网除了支持生成美国地址信息外,还支持生成英国、加拿大、日朩、澳大利亚、德国、法国、意大利、西班牙、巴…...
微信4.0大版本升级跨平台支持界面全面改版
微信4.0公测版现已正式发布,作为微信的大版本升级,新版微信基于全新架构开发,跨平台支持Windows和MAC系统,界面也全面改版,聊天宝也第一时间适配微信4.0,为广大客户提供快捷回复支持 前言 微信4.0公测版现…...
不想贴秋膘?正确打开秋冬运动姿势
这个秋天想要轻装上阵,想健康入秋更要美美入冬怎么破?这期把正确打开秋冬姿势一次性告诉你哦~ 天气变凉,脂肪可要燃起来~想要无痛入秋,最重要的动起来!每天都抽出一点时间去运动一下,不光让身体燃起来&…...
【AIGC半月报】AIGC大模型启元:2024.11(上)
【AIGC半月报】AIGC大模型启元:2024.11(上) (1) Hunyuan-Large(腾讯开源大模型)(2) FLUX1.1 pro(文生图)(3) CogVideoX v1.5(智谱AI升级文生视频大模型) (1) Hunyuan-Lar…...
纯前端生成PDF(jsPDF)并下载保存或上传到OSS
前言 在工作中遇到了一个需求,就是把前端页面生成PDF并保存在本地,因为前端网站可能会展示各种表格,图表信息内容并带有比较鲜艳的色彩样式,如果让后端生产的PDF的话样式可能和前端页面展示的有所差异,所以这个任务就落…...
海外媒体发稿:旅游业媒体推广12个方面的注意事项-华媒舍
1.社交媒体推广过多 社交媒体是旅游业媒体推广的重要途径之一,过分依赖社交媒体将会成为一个常见误区。尽管社交媒体能够帮助旅行目的地提升知名度和曝光度,但如果过度投入精力与资源,可能忽视别的合理推广方式。 2.忽略SEO优化 搜索引擎提…...
分割回文串(DFS)
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。 示例 1: 输入:s "aab" 输出:[["a","a","b"],["aa","b&qu…...
Qt第三课 ----------容器类控件
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
打印菱形(C语言)
程序: #include <stdio.h> int main() { int i,j; for(i1;i<5;i){ for(j0;j<6-i;j){ printf(" ");} for(j0;j<i*2-1;j){ printf("*");} printf("\n");} …...
Oracle 19c 中启用 scott 用户
Oracle 19c 中启用 scott 用户 文章目录 Oracle 19c 中启用 scott 用户正常操作如果ORA-01918: 用户 SCOTT 不存在?/sqlplus/admin/scott.sql 没有 scott.sql 怎么处理 正常操作 连接到 Oracle 数据库: 使用 sqlplus 工具或者其他 SQL 客户端工具(如 S…...
git commit 校验
commitlint官方链接 1. npm install --save-dev commitlint/config-conventional commitlint/cli 2. 配置commitlint.config.cjs(项目根目录中) module.exports {extends: [commitlint/config-conventional],rules: {type-enum: [2,always,[Feat, Fix, Doc, Style,…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
