数据结构小项目

单链表或者双链表完成学生管理系统。
1、使用fscanf和fprintf实现登录注册界面,登录成功显示学生管理系统菜单界面。
2、学生信息结构体(学号,姓名,年龄)
3、界面功能包含:录入学生信息,输出学生信息,任意位置删除学生信息,任意位置插入学生信息,任意位置修改学生信息,任意位置查找学生信息,表头插入一个学生,表尾插入一个学生信息,按照姓名查找学生并删除,按照年龄查找学生并修改其学号为10086。
4、可以使用单链表或者双链表完成,所有功能都需要人为输入,不能写死参数。
menu.c

#include "log.h"
int main(int argc, const char *argv[])
{int ch;
#if 1while(1){printf("1.注册\n");printf("2.登录\n");printf("3.退出\n");printf("请输入你的选择:");scanf("%d",&ch);getchar();switch(ch){case 1:regist();break;case 2:{int flag=login();if(flag==1)menu();break;}case 3:exit(0);break;}}
#endifreturn 0;
}

log.c

#include "log.h"
void regist()
{char name[20];printf("请输入账号:");fgets(name,sizeof(name),stdin);char pwd[20];printf("请输入密码:");fgets(pwd,sizeof(pwd),stdin);printf("账号:%s",name);printf("密码:%s",pwd);FILE *fp=fopen("./up.txt","a");if(fp==NULL){perror("fopen");return;}fputs(name,fp);//账号放入文件fputs(pwd,fp);//密码放入文件fclose(fp);}
int login()
{int flag=-1;char name[20];printf("登录账号:");fgets(name,sizeof(name),stdin);char pwd[20];printf("登录密码:");fgets(pwd,sizeof(pwd),stdin);printf("登录账号:%s",name);printf("登录密码:%s",pwd);FILE *fp=fopen("./up.txt","r");if(fp==NULL){perror("fopen");return -1;}char dname[20];char dpwd[20];while(1){char *r=fgets(dname,sizeof(dname),fp);if(r==NULL){break;	}fgets(dpwd,sizeof(dpwd),fp);if(strcmp(dname,name)==0&&strcmp(dpwd,pwd)==0){flag=1;	break;}else{flag=0;}}if(flag==0){printf("登录失败\n");}else if(flag==1){printf("登录成功\n");}fclose(fp);return flag;
}
void menu()
{int ch;Link *L=create();while(1){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("10.按照年龄查找学生并修改学号为10086\n");printf("请输入你的选择:");scanf("%d",&ch);switch(ch){case 1:luru(L);break;case 2:shuchu(L);break;case 3:anyposinsert(L);break;case 4:anyposdel(L);break;case 5:anyposfind(L);break;case 6:anyposupdate(L);break;case 7:headinsert(L);break;case 8:rearinsert(L);break;case 9:findbynamedel(L);break;case 10:findbyage10086(L);break;}}}
Link* apply()
{Link *L=malloc(sizeof(Link));if(L==NULL){perror("申请失败");return NULL;}return L;
}
Link* create()
{Link *head=apply();if(head==NULL){perror("创建头节点失败");return NULL;}head->len=0;head->next=NULL;return head;
}
void luru(Link *L)
{printf("请输入要录入的学生个数:");int num;scanf("%d",&num);int i;for(i=0;i<num;i++){Link *p=apply();printf("请输入第%d个学生信息:",i+1);stu e;scanf("%d %s %d",&e.id,e.name,&e.age);p->data=e;p->next=L->next;L->next=p;L->len++;}
}
void shuchu(Link *L)
{int i;Link *p=L->next;if(L->len==0){printf("没有学生呢,无法输出\n");return;}for(i=0;i<L->len;i++){stu e=p->data;printf("第%d个学生:%d,%s,%d\n",i+1,e.id,e.name,e.age);p=p->next;}
}
void anyposinsert(Link *L)
{int pos;printf("请输入学生信息:");stu e;scanf("%d %s %d",&e.id,e.name,&e.age);printf("请输入要插入的位置:");scanf("%d",&pos);if(pos<1||pos>L->len+1){printf("插入失败\n");return;}Link* p=L;int i;for(i=0;i<pos-1;i++){p=p->next;//指向要插入位置的前驱}Link* p2=apply();p2->data=e;p2->next=p->next;p->next=p2;L->len++;
}
void anyposdel(Link *L)
{if(L->len==0){printf("没有学生呢,无法删除\n");return;}printf("请输入要删除的学生位置:");int pos;scanf("%d",&pos);if(pos<1||pos>L->len||L->len==0){printf("删除失败\n");return;}int i;Link* p=L;for(i=0;i<pos-1;i++){p=p->next;//指向要删除位置的前驱}Link *Q=p->next;p->next=p->next->next;free(Q);L->len--;}
Link* anyposfind(Link *L)
{if(L->len==0){printf("没有学生呢,无法查找\n");return NULL;}printf("请输入要查找的学生位置:");int pos;scanf("%d",&pos);if(pos<1||pos>L->len){printf("查找失败\n");return NULL;}int i;Link *p=L;for(i=0;i<pos;i++){p=p->next;}printf("查找到的学生信息:%d,%s,%d\n",p->data.id,p->data.name,p->data.age);return p;}
void anyposupdate(Link *L)
{Link *p=anyposfind(L);printf("请输入要修改的学生信息:");stu e;scanf("%d %s %d",&e.id,e.name,&e.age);p->data=e;
}
void headinsert(Link *L)
{Link *p=apply();printf("请输入要插入表头位置的学生信息:");stu e;scanf("%d %s %d",&e.id,e.name,&e.age);p->data=e;p->next=L->next;L->next=p;L->len++;
}
void rearinsert(Link *L)
{Link *p=apply();printf("请输入要插入表尾位置的学生信息:");stu e;scanf("%d %s %d",&e.id,e.name,&e.age);p->data=e;p->next=NULL;int i;Link *fp=L;for(i=0;i<L->len;i++){fp=fp->next;}fp->next=p;L->len++;
}
void findbynamedel(Link *L)
{if(L->len==0){printf("没有学生呢,无法查找\n");return;}char name[20];printf("请输入要查号的学生姓名:");scanf("%s",name);Link *p=L;int i;int flag=-1;for(i=0;i<L->len;i++){p=p->next;if(strcmp(p->data.name,name)==0){flag=1;break;}}if(flag==-1){printf("没有查找到\n");}else{anyposdel2(L,i+1);	}}
void anyposdel2(Link *L,int pos)
{if(pos<1||pos>L->len||L->len==0){printf("删除失败\n");return;}int i;Link* p=L;for(i=0;i<pos-1;i++){p=p->next;//指向要删除位置的前驱}Link *Q=p->next;p->next=p->next->next;free(Q);L->len--;}
void findbyage10086(Link *L)
{if(L->len==0){printf("没有学生呢,无法查找\n");return;}printf("请输入年龄:");int age;scanf("%d",&age);int i,flag=-1;Link *p=L;for(i=0;i<L->len;i++){p=p->next;if(p->data.age==age){flag=1;p->data.id=10086;break;}}if(flag==-1){printf("没有查找到\n");}else{printf("修改成功\n");}}

log.h

#ifndef _LOG_H
#define _LOG_H
#include <myhead.h>
typedef struct
{int id;char name[20];int age;
}stu;
typedef struct node
{union{int len;stu data;};struct node*next;
}Link;
void regist();
int login();
void menu();
void luru(Link *);
void shuchu(Link *);
void anyposinsert(Link *);
void anyposdel(Link*);
Link* apply();
Link* create();
Link* anyposfind(Link*);
void anyposupdate(Link*);
void headinsert(Link *);
void rearinsert(Link *);
void anyposdel2(Link *,int);
void findbynamedel(Link *);
void findbyage10086(Link *);
#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3集成搜索引擎智能提示API

需求&#xff1a; 如何在项目中实现像百度搜索框一样的智能提示效果&#xff0c;如下图所示&#xff1a; 相关知识&#xff1a; 下面是各厂商提供的免费API 厂商请求百度http://suggestion.baidu.com/su?wd中国&cbwindow.baidu.sug必应http://api.bing.com/qsonhs.as…

一文了解Android的核心系统服务

在 Android 系统中&#xff0c;核心系统服务&#xff08;Core System Services&#xff09;是应用和系统功能正常运行的基石。它们负责提供系统级的资源和操作支持&#xff0c;包含了从启动设备、管理进程到提供应用基础组件的方方面面。以下是 Android 中一些重要的核心系统服…

鸿蒙实战:页面跳转

文章目录 1. 实战概述2. 实现步骤2.1 创建项目2.2 准备图片素材2.3 编写首页代码2.4 创建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 实战概述&#xff1a;本实战通过ArkUI框架&#xff0c;在鸿蒙系统上开发了一个简单的两页面应用。首页显示问候语和“下一页”按钮&…

2023_Spark_实验十五:SparkSQL进阶操作

实验目标 通过实践掌握Spark SQL中复杂查询&#xff08;包括子查询、窗口函数、联接等&#xff09;的实现方式。了解如何通过合理的数据分区和缓存策略进行性能优化。实现一个基于Spark SQL的ETL数据处理流程&#xff0c;应用相关优化技巧。 实验背景 在本实验中&#xff0c…

大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载

随着生成算法、预训练模型、多模态数据分析等AI技术的聚集融合&#xff0c;AIGC技术的实践效用迎来了行业级大爆发。通用大模型技术的成熟推动了新一轮行业生产力变革&#xff0c;在投入提升与政策扶植的双重作用下&#xff0c;以大模型技术为底座、结合专业化金融能力的金融大…

MySQL联合索引(abc)命中测试

1.建表 mysql创建一张表&#xff0c;表名&#xff1a;‘test_models’ id列为 主键&#xff0c;int类型 &#xff0c;自增a,b,c,d,e 全部是int&#xff08;11&#xff09;为&#xff08;a,b,c&#xff09;添加一个联合索引 index_abc 执行语句&#xff1a;创建表 CREATE TA…

Gin 框架入门(GO)-1

1 介绍 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;Gin 最擅长的就是 Api 接口的高并发。 2 Gin 环境搭建 1.下载并安装 gin go get -u github.com/gin-gonic/gin 2.将 gin 引入到代码中&#xff1a; import "github.co…

VUE3+Three.js搭建教程

一、创建VUE项目工程 1、方法一 使用下面命令行快速创建vue项目&#xff0c;Please pick a preset这里我们选择使用VUE3 vue create projectName 创建时可能会遇到的报错 错误原因&#xff1a;当前使用的node版本未全局安装vue-cli脚手架&#xff0c;使用下面命令安装后再使…

【React】状态管理之Redux

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 状态管理之Redux引言1. Redux 的核心概念1.1 单一数据源&#xff08;Single Sou…

自己动手写Qt Creator插件

文章目录 前言一、环境准备1.先看自己的Qt Creator IDE的版本2.下载源码 二、使用步骤1.参考原本的插件2.编写自定义插件1.cmakelist增加一个模块2.同理&#xff0c;qbs文件也增加一个3.插件源码 三、效果总结 前言 就目前而言&#xff0c;Qt Creator这个IDE&#xff0c;插件比…

React Native 全栈开发实战班 -React Native 基础

本课程旨在帮助学员系统掌握 React Native 全栈开发技能&#xff0c;从基础入门到实战项目开发。课程将分为多个模块&#xff0c;第一部分将聚焦于 React Native 的基础知识&#xff0c;包括开发环境搭建、React Native 简介与特点&#xff0c;以及项目结构解析。 第一部分&am…

Leetcode:118. 杨辉三角——Java数学法求解

题目——Leetcode:118. 杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRow…

Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常

组件&#xff0c;可通过nuget安装&#xff0c;直接搜名字&#xff1a; ExcelDataReader using ConsoleAppReadFileData.Model; using ExcelDataReader; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task…

Robot | 用 RDK 做一个小型机器人(更新中)

目录 前言架构图开发过程摄像头模型转换准备校准数据使用 hb_mapper makertbin 工具转换模型 底版开发 结语 前言 最近想开发一个小型机器人&#xff0c;碰巧看到了 RDK x5 发布了&#xff0c;参数对于我来说非常合适&#xff0c;就买了一块回来玩。 外设也是非常丰富&#xf…

jenkins使用cli发行uni-app到h5

官网文档HBuilderX 文档 首先确定是否存在环境变量 正常情况cmd中执行cli 如果提示 cli 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。请先配置环境变量 Freestyle Project项目在Build Steps中增加Execute Windows batch command命令如下 d: cd D:\devsof…

基于Zynq FPGA对雷龙SD NAND的测试

一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND有很多型号&#xff0c;在测试中使用的是CSNP4GCR01-AMW与CSNP32GCR01-AOW。芯片是基于NAND FLASH和 SD控制器实现的SD卡。具有强大的坏块管理和纠错功能&#xff0c;并且在意外掉电的情况下同样能保证数据的安全。 其特点如下&…

【Java语言】String类

在C语言中字符串用字符可以表示&#xff0c;可在Java中有单独的类来表示字符串&#xff08;就是String&#xff09;&#xff0c;现在我来介绍介绍String类。 字符串构造 一般字符串都是直接赋值构造的&#xff0c;像这样&#xff1a; 还可以这样构造&#xff1a; 图更能直观的…

【神经科学学习笔记】基于分层嵌套谱分割(Nested Spectral Partition)模型分析大脑网络整合与分离的局部指标(二)

前言 1.学习背景 前几天笔者学习使用NSP (Network Segregation and Partnership) 算法计算大脑整合分离的全局指标&#xff0c;现在要在之前学习的基础上再来玩玩局部指标。 局部指标的计算主要在两个层面上进行&#xff1a;第一个层面是针对每个独立ROI的指标计算&#xff0…

WPF-控件的属性值的类型转化

控件的属性值需要转成int、double进行运算的&#xff0c;可以使用一下方法 页面代码 <StackPanel Margin"4,0,0,0" Style"{StaticResource Form-StackPanel}"> <Label Content"替换后材料增加金额&#xff…

Python3.11.9下载和安装

一、Python3.11.9下载和安装 1、下载 下载地址&#xff1a;https://www.python.org/downloads/windows/ 选择版本下载&#xff0c;例如&#xff1a;Python 3.11.9 - April 2, 2024 2、安装 双击exe安装 3、配置环境变量 pathD:\Program Files\python3.11.9 pathD:\Progr…