简易的学生信息管理系统制作——C语言实现

devtools/2024/11/17 3:13:49/

菜单代码

#include "head.h"
int main(int argc, const char *argv[])
{int ch,k;//登录注册while(1){printf("\t1、注册\n");printf("\t2、登录\n");printf("\t0、退出\n");printf("请输入你的选择:");scanf("%d",&ch);getchar();switch(ch){case 1:{regist();//注册函数}break;case 2:{k = login();//登录函数}break;case 0:{exit(EXIT_SUCCESS);//退出函数}break;}if(k == 1){break;}}while(1){printf("\t------学生管理系统首页------\n");printf("\t1、录入学生信息\n");printf("\t2、输出学生信息\n");printf("\t3、任意位置删除学生信息\n");printf("\t4、任意位置插入学生信息\n");printf("\t5、任意位置修改学生信息\n");printf("\t6、任意位置查找学生信息\n");printf("\t7、表头插入一个学生信息\n");printf("\t8、表尾插入一个学生信息\n");printf("\t9、按照姓名查找学生信息并删除\n");printf("\t10、按年龄查找学生并修改学号为10086\n");printf("\t0、退出\n");printf("请输入你的选择:");scanf("%d",&ch);Plink L;switch(ch){case 1:{L = create();input_link(L);}break;case 2:{output_link(L);}break;case 3:{int pos;printf("请输入需要删除的学生位置:");scanf("%d",&pos);del_pos(L,pos);}break;case 4:{insert_pos(L);}break;case 5:{int pos;printf("请输入需要修改的学生位置:");scanf("%d",&pos);edit_pos(L,pos);}break;case 6:{int pos;printf("请输入需要查找的学生位置:");scanf("%d",&pos);find_pos(L,pos);}break;case 7:{stu e;printf("表头插入一个学生信息\n");printf("请输入需要插入学生的信息:");scanf("%d%s%d",&e.id,e.name,&e.age);insert_front(L,e);}break;case 8:{stu e;printf("表尾插入一个学生信息\n");printf("请输入需要插入学生的信息:");scanf("%d%s%d",&e.id,e.name,&e.age);insert_rear(L,e);}break;case 9:{int fage;printf("请输入需要查找的年龄:");scanf("%d",&fage);find_age(L,fage);}break;case 10:{int fage;printf("请输入需要查找的年龄:");scanf("%d",&fage);find_age_id(L,fage);}break;case 0:{exit(EXIT_SUCCESS);}break;}}return 0;
}

功能函数代码

#include "head.h"
//登录注册部分函数
int regist()
{char regist_name[20];//注册登录用户名char regist_code[20];//注册密码printf("请输入注册用户名和密码:");fgets(regist_name,sizeof(regist_name),stdin);//scanf("%s",regist_name);fgets(regist_code,sizeof(regist_code),stdin);//scanf("%s",regist_code);regist_name[strlen(regist_name)-1] = '\0';regist_code[strlen(regist_code)-1] = '\0';//将数据写入用户数据文件FILE *fp1;fp1 = fopen("./user_data.txt","a");if(fp1 == NULL){perror("fp1");return -1;}fprintf(fp1,"%s %s ",regist_name,regist_code);printf("注册成功!\n");fclose(fp1);return 0;
}int login()
{char regist_name[20];char regist_code[20];char login_name[20];char login_code[20];int login_max = 5;for(int i=0;i<login_max;i++){printf("这是你第%d次输入,你还有%d次输入机会\n",i+1,login_max-i);printf("请输入用户名和密码:");fgets(login_name,sizeof(login_name),stdin);fgets(login_code,sizeof(login_code),stdin);login_name[strlen(login_name)-1] = '\0';login_code[strlen(login_code)-1] = '\0';FILE *fp2;fp2 = fopen("./user_data.txt","r");if(fp2 == NULL){perror("fp2");return -1;}int flag = 0;while(1){//从用户数据文件夹提取数据int ret = fscanf(fp2,"%s %s",regist_name,regist_code);//读取到文件末尾if(ret < 0){break;}if(strcmp(regist_name,login_name)==0&&strcmp(regist_code,login_code)==0){flag = 1;printf("登录成功!\n");return 1;}}if(flag == 0){printf("登录失败!\n");}fclose(fp2);}printf("输入次数已用尽,系统锁定\n");while(1);
return 0;
}//管理学生信息部分函数//空间申请函数
Plink apply()
{Plink p = malloc(sizeof(Link));if(p == NULL){printf("申请失败\n");return NULL;}return p;
}
//创建链表函数
Plink create()
{Plink p = apply();if(p == NULL){printf("创建失败!\n");return NULL;}p->len = 0;p->next = NULL;return p;
}//头插法创建
void insert_front(Plink L,stu e)
{if(L == NULL){printf("插入失败!\n");return;}Plink p = apply();if(NULL == p){printf("申请正常节点失败!\n");}p->data = e;p->next = L->next;L->next = p;L->len++;}//信息输入函数
void input_link(Plink L)
{stu e;int n,i;printf("请输入学生数量:");scanf("%d",&n);for(i=0;i<n;i++){printf("请输入学生信息:");scanf("%d%s%d",&e.id,e.name,&e.age);insert_front(L,e);}
}//信息输出函数
void output_link(Plink L)
{if(L == NULL){printf("输出失败!\n");return;}Plink t = L->next;while(t != NULL){printf("学号:%d\t姓名:%s\t年龄:%d\n",t->data.id,t->data.name,t->data.age);t = t->next;}
}//任意位置删除学生信息void del_pos(Plink L,int pos)
{if(pos<1||pos>L->len||L == NULL||L->len ==0){printf("删除失败!\n");return;}Plink t = L;int i;for(i=0;i<pos-1;i++){t = t->next;}Plink Q = t->next;t->next = Q->next;free(Q);Q = NULL;L->len--;;}//任意位置插入学生信息
void insert_pos(Plink L)
{int pos,i;stu e;printf("请输入需要插入信息的位置:");scanf("%d",&pos);if(pos<1||pos>L->len+1){printf("插入失败!\n");return;}Plink t = L;for(i=0;i<pos-1;i++){t = t->next;}Plink p = apply();printf("请输入需要插入的学生信息:");scanf("%d%s%d",&e.id,e.name,&e.age);p->data = e;p->next = t->next;t->next = p;L->len++;
}//任意位置查找学生信息
void find_pos(Plink L,int pos)
{Plink t = L;if(pos<1||pos>L->len||L->len == 0||L == NULL){printf("查找失败!\n");return;}for(int i=0;i<pos;i++){t = t->next;}printf("第%d位学生的信息:学号:%d姓名:%s年龄:%d\n",pos,t->data.id,t->data.name,t->data.age);
}//任意位置修改学生信息
void edit_pos(Plink L,int pos)
{Plink t = L;if(pos<1||pos>L->len||L == NULL||L->len == 0){printf("修改失败!\n");return;}for(int i=0;i<pos;i++){t=t->next;}stu e;printf("请输入需要修改的学生信息:");scanf("%d%s%d",&e.id,e.name,&e.age);t->data = e;
}//表头插入一个学生(头插法插入一个学生)直接调用头插法//表尾插入一个学生信息
void insert_rear(Plink L,stu e)
{Plink t = L;if(L == NULL){printf("插入失败\n");return;}for(int i=0;i<L->len;i++){t= t->next;}Plink p = apply();p->data = e;p->next = NULL;t->next = p;L->len++;
}//按年龄查找学生信息
void find_age(Plink L,int fage)
{int pos=1;Plink t = L->next;while(t != NULL){if(t->data.age == fage){printf("%d年龄的学生有:学号:%d姓名:%s年龄:%d\n",fage,t->data.id,t->data.name,t->data.age);printf("该年龄的学生位置为:%d\n",pos);Plink Q = t->next;del_pos(L,pos);t = Q;printf("删除成功!\n");}else{pos = pos+1;t = t->next;}}}//按年龄查找学生信息,修改学号为10086
void find_age_id(Plink L,int fage)
{Plink t = L->next;while(t != NULL){if(t->data.age == fage){printf("将%d年龄的学生学号修改为10086\n",fage);t->data.id = 10086;t=t->next;}else{t= t->next;}}
}

头文件代码

#ifndef _HEAD_H_
#define _HEAD_H_
#include <myhead.h>
#define MAX 30typedef struct students
{int id;char name[20];int age;
}stu;typedef struct node
{union{int len;stu data;};struct node *next; 
}Link,*Plink;int regist();int login();Plink apply();Plink create();void insert_front(Plink,stu);void input_link(Plink);void output_link(Plink);void del_pos(Plink,int);void insert_pos(Plink);void find_pos(Plink,int);void edit_pos(Plink,int);void insert_rear(Plink,stu);void find_age(Plink,int);void find_age_id(Plink,int);
#endif


http://www.ppmy.cn/devtools/134604.html

相关文章

STM32 ADC --- 任意单通道采样

STM32 ADC — 单通道采样 文章目录 STM32 ADC --- 单通道采样cubeMX配置代码修改&#xff1a;应用 使用cubeMX生成HAL工程 需求&#xff1a;有多个通道需要进行ADC采样&#xff0c;实现每次采样只采样一个通道&#xff0c;且可以随时采样不同通道的功能。 cubeMX配置 这里我们…

FPGA使用Verilog实现CAN通信

FPGA实现CAN通信&#xff08;Verilog&#xff09; 1.作者使用的方法是通过FPGA芯片&#xff08;如Xilinx公司的型号为XC7K325TFFG676-2&#xff09;控制SJA1000T芯片&#xff08;CAN控制器芯片&#xff09;实现CAN通信&#xff0c;如下图所示&#xff1a; 2.熟悉连接方式之后&…

【计网不挂科】计算机网络第五章< 传输层 >习题库(含答案)

前言 大家好吖&#xff0c;欢迎来到 YY 滴计算机网络 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的计算机网络题目&#xff0c;供yy应对期中考试复习。大家可以参考 本章为分章节的习题内容题库&#x…

CTF攻防世界小白刷题自学笔记12

1.easyupload&#xff0c;难度&#xff1a;1&#xff0c;方向&#xff1a;Web&#xff0c; 题目来源:CTF 题目描述:一名合格的黑客眼中&#xff0c;所有的上传点都是开发者留下的后门 给一下题目链接&#xff1a;攻防世界Web方向新手模式第15题。 打开一看果然可以上传图片…

TensorFlow实现

TensorFlow将神经网络的这三层顺序串在一起。第二步是你必须让TensorFlow编译模型并问的关键步骤TensorFlow的编译模型是指定你要使用的最后一个函数是什么。在这种情况下&#xff0c;我们将使用稀疏分类交叉熵&#xff08;是交叉熵损失函数的一种变体&#xff0c;特别适用于具…

数字IC后端实现之Innovus specifyCellEdgeSpacing和ICC2 set_placement_spacing_rule的应用

昨天帮助社区IC训练营学员远程协助解决一个Calibre DRC案例。通过这个DRC Violation向大家分享下Innovus和ICC2中如何批量约束cell的spacing rule。 数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案 下图所示为T12nm A55项目的Ca…

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…

MTU-内核态(数据链路层或网络接口上能够传输的最大数据包大小)

MTU&#xff08;最大传输单元&#xff0c;Maximum Transmission Unit&#xff09;是网络中用于表示数据链路层或网络接口上能够传输的最大数据包大小。 1. 工作原理 MTU 决定了一个数据包&#xff08;包括头部和数据部分&#xff09;的最大长度。它影响到数据的传输&#xff…