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

news/2024/11/17 15:53:39/

菜单代码

#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/news/1547754.html

相关文章

npm、yarn、pnpm 切换查看镜像源笔记

默认的官方镜像&#xff1a;https://registry.npmjs.org&#xff0c;切换国内淘宝镜像&#xff0c;访问下载更快。 一、npm设置 npm config set registry https://registry.npmmirror.com/2、查看源 npm config get registry3、切回官方镜像 npm config set registry https:…

基于 CentOS7.6 的 Docker 下载常用的容器(MySQLRedisMongoDB),解决拉取容器镜像失败问题

安装MySQL&Redis&MongoDB mysql选择是8版本&#xff0c;redis是选择4版本、mongoDB选择最新版&#xff0c;也可以根据自己的需要进行下载对应的版本&#xff0c;无非就是容器名:版本号 这样去拉去相关的容器镜像。如果你还不会在服务器中安装 docker&#xff0c;可以查…

信息安全工程师(83)Windows操作系统安全分析与防护

一、Windows操作系统安全分析 系统漏洞&#xff1a; Windows操作系统由于其复杂性和广泛使用&#xff0c;可能存在一些已知或未知的漏洞。这些漏洞可能会被黑客利用&#xff0c;进行恶意攻击。微软会定期发布系统更新和补丁&#xff0c;以修复这些漏洞&#xff0c;提高系统的安…

【实用教程】使用思维导图增强 JavaScript甘特图项目工作流程的可见性

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。DHTMLX Diagram库允许用几行代码构建JavaScript流程图&#xff0c;通过自动布局和实时编辑器&#xff0c;它可以更容易地将复杂数据可…

Spring Boot框架:电商解决方案的创新

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

《PCA 原理推导》18-5线性变换生成的随机变量y_i和y_j的协方差 公式解析

本文是将文章《PCA 原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式 18 - 5 18\text{-}5 18-5 的内容如下&#xff1a; cov ( y i , y j ) a i T Σ a j , i , j 1 , 2 , … , m \text{cov}(y_i, y_j) a_i^T \Sigma a_j, \quad i, j…

Xss挑战(跨脚本攻击)

Xss挑战&#xff08;跨脚本攻击&#xff09; 首先在kali中下载xss 可以使用命令docker search xss-labs 下载xss docker pull vulfocus/xss-labs 运行容器&#xff0c;映射到8088端口加载镜像 Docker run -dt -p 8088:80 vulfocus/xss-labs 用浏览器访问127.0.0.1:8088 开启…

【大数据学习 | flume】flume之常见的channel组件

Channel是连接Source和Sink的组件&#xff0c;大家可以将它看做一个数据的缓冲区&#xff08;数据队列&#xff09;&#xff0c;它可以将事件暂存到内存中也可以持久化到本地磁盘上&#xff0c; 直到Sink处理完该事件&#xff0c;Flume对于Channel&#xff0c;则提供了Memory C…