c/c++简单教务系统的实现--学生/教师/管理员三方登录

2024-03-04 05:40

本文主要是介绍c/c++简单教务系统的实现--学生/教师/管理员三方登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序介绍:

整体实现:本程序为c++编写的教务管理系统的简单实现,全部以命令行的方式呈现,总体思想采用面向过程的思想,将程序的各个功能划分为多个函数实现,其中数据采用文件读写的方法储存在同目录下的s.txt和t.txt中,前者储存学生数据,后者储存教师数据(目的是可实现数据的储存以及多次使用),运行程序后会先读取两个目录中的数据形成“数据库”,选择对应登录方式时会遍历“数据库”中的数据进而实现简单登录判断(学生和教师)。
权限划分:管理员拥有最高权限,可增删改查教师/学生的信息。教师其次,仅拥有添加学生信息和查询学生信息的权限。学生权限最低,只能查询自己的成绩以及全体学生的成绩及排名。
可优化的地方:1.程序并未经过充分的测试,可能部分地方存在bug。2.程序运行时画面不够优美,可以通过<windows.h>头文件引入cmd中的cls进行清屏保证画面的清洁,可以用sleep()函数延迟使得更有动态交互的感觉。

代码实现:

#include <bits/stdc++.h>//管理员账号密码 admin amdin 
#include <windows.h>
#include <fstream>
using namespace std;
struct ss{	int num;string name;char sex;int age;string class1;int math;int chinese;int all;
}as;
struct tt{	int num;string name;char sex;int age;string class1;
}sa;
bool cmp(ss a,ss b){return a.all>b.all;
}vector <ss> s;vector <tt> s2;
void  duqu(){fstream f,f2;f.open("s.txt",ios::in);while(f.peek()!=EOF){f>>as.num>>as.name>>as.sex>>as.age>>as.class1>>as.math>>as.chinese;as.all=as.chinese+as.math;s.push_back(as);}f.close();f2.open("t.txt",ios::in);while(f2.peek()!=EOF){f2>>sa.num>>sa.name>>sa.sex>>sa.age>>sa.class1;s2.push_back(sa);}f2.close();
}
void  lrxs(){cout<<"num:";cin>>as.num;cout<<"name:";cin>>as.name;cout<<"sex:";cin>>as.sex;cout<<"age:";cin>>as.age;cout<<"class:";cin>>as.class1;cout<<"math:";cin>>as.math;cout<<"chinese:";cin>>as.chinese;as.all=as.math+as.chinese;s.push_back(as);
}
void  lrls(){cout<<"num:";cin>>sa.num;cout<<"name:";cin>>sa.name;cout<<"sex:";cin>>sa.sex;cout<<"age:";cin>>sa.age;cout<<"class:";cin>>sa.class1;s2.push_back(sa);
}
void paiming(){sort(s.begin(),s.end(),cmp);for(int i=0;i<s.size();i++){cout<<"学号:"<<s[i].num<<' '<<"姓名:"<<s[i].name<<' '<<"性别:"<<s[i].sex<<' '<<"年龄:"<<s[i].age<<' '<<"班级:"<<s[i].class1<<' '<<"数学成绩:"<<s[i].math<<' '<<"语文成绩:"<<s[i].chinese<<' '<<"综合成绩:"<<s[i].all<<"综合排名:"<<i+1<<endl;}
}
void paiming2(){for(int i=0;i<s2.size();i++){cout<<"教师编号:"<<s2[i].num<<' '<<"姓名:"<<s2[i].name<<' '<<"性别:"<<s2[i].sex<<' '<<"年龄:"<<s2[i].age<<' '<<"班级:"<<s2[i].class1<<endl;
}
}
void shanchu(){cout<<"请输入要删除学生的学号:";int x;cin>>x;for(int i=0;i<s.size();i++){if(s[i].num==x) s.erase(s.begin()+i);}
}
void shanchu2(){cout<<"请输入要删除老师的编号:";int x;cin>>x;for(int i=0;i<s2.size();i++){if(s2[i].num==x)s2.erase(s2.begin()+i);}
}
void chaxun(){if(s.size()==0)cout<<"抱歉,无数据";else{cout<<"请输入学号:"; int x;cin>>x;for(int i=0;i<s.size();i++){if(s[i].num==x)cout<<"学号:"<<s[i].num<<' '<<"姓名:"<<s[i].name<<' '<<"性别:"<<s[i].sex<<' '<<"年龄:"<<s[i].age<<' '<<"班级:"<<s[i].class1<<' '<<"数学成绩:"<<s[i].math<<' '<<"语文成绩:"<<s[i].chinese<<' '<<"综合成绩:"<<s[i].all<<"综合排名:"<<i+1<<endl;}
}}
void xiugai(){cout<<"输入修改学生的学号:";int x,ok=0;cin>>x;for(int i=0;i<s.size();i++) if(s[i].num==x)ok=1;if(ok==0)cout<<"无该学生信息,即将退出\n";else{cout<<"目标元数据:\n";for(int i=0;i<s.size();i++){if(s[i].num==x)cout<<"学号:"<<s[i].num<<' '<<"姓名:"<<s[i].name<<' '<<"性别:"<<s[i].sex<<' '<<"年龄:"<<s[i].age<<' '<<"班级:"<<s[i].class1<<' '<<"数学成绩:"<<s[i].math<<' '<<"语文成绩:"<<s[i].chinese<<' '<<"综合成绩:"<<s[i].all<<"综合排名:"<<i+1<<endl;}cout<<"请重新编辑:\n";for(int i=0;i<s.size();i++){if(s[i].num==x){cout<<"num:";cin>>s[i].num;cout<<"name";cin>>s[i].name;cout<<"sex:";cin>>s[i].sex;cout<<"age:";cin>>s[i].age;cout<<"class:";cin>>s[i].class1;cout<<"math:";cin>>s[i].math;cout<<"chinese:";cin>>s[i].chinese;s[i].all=s[i].math+s[i].chinese;
}
}
ok=0;
}
}
void xiugai2(){cout<<"输入修改老师的编号:";int x;cin>>x;int ok=0;for(int i=0;i<s2.size();i++) if(s2[i].num==x)ok=1;if(ok==0)cout<<"抱歉,无数据";else{cout<<"目标元数据:\n";for(int i=0;i<s2.size();i++){if(s2[i].num==x)cout<<s2[i].num<<' '<<s2[i].name<<' '<<s2[i].sex<<' '<<s2[i].age<<' '<<s2[i].class1<<endl;}cout<<"请重新编辑:\n";for(int i=0;i<s2.size();i++){if(s2[i].num==x){cout<<"num:";cin>>s2[i].num;cout<<"name";cin>>s2[i].name;cout<<"sex:";cin>>s2[i].sex;cout<<"age:";cin>>s2[i].age;cout<<"class:";cin>>s2[i].class1;}}ok=0;
}
}
void menu(){cout<<" ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀\n";cout<<" ♀            1.学生登录                        ♀\n";cout<<" ♀            2.教师登录                        ♀\n";cout<<" ♀            3.root登录                        ♀\n";cout<<" ♀            4.退出                            ♀\n"; cout<<" ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀ ♀\n";
}
void menu1(){cout<<"1.查询全体成绩以及排名\n";cout<<"2.查询自己各科成绩及排名\n";cout<<"3.退出系统\n";
}
void menu2(){cout<<"1.展示学生信息\n";cout<<"2.查询学生信息\n";cout<<"3.添加学生信息\n";cout<<"4.退出系统\n";
}
void menu3(){cout<<"1.展示学生信息\n";cout<<"2.展示老师信息\n";cout<<"3.添加学生信息\n";cout<<"4.添加老师信息\n";cout<<"5.修改学生信息\n";cout<<"6.修改老师信息\n";cout<<"7.删除学生信息\n";cout<<"8.删除老师信息\n";cout<<"9.退出并保存\n";
}
void login1(){cout<<"请输入学生学号及密码(默认密码为姓名全拼):";string b,c;int a;cin>>a>>b;for(int i=0;i<s.size();i++){if(s[i].num==a)c=s[i].name;}while(b!=c){cout<<"登录失败,请重新输入:";cin>>a>>b;}cout<<"登录成功\n";
}
void login2(){cout<<"请输入教师编号以及密码(默认密码为姓名全拼):";string b,c;int a;cin>>a>>b;for(int i=0;i<s2.size();i++){if(s2[i].num==a)c=s2[i].name;}while(b!=c){cout<<"登录失败,请重新输入:";cin>>a>>b;}cout<<"登录成功\n";
}
void login3(){cout<<"请输入账号和密码(空格隔开):";string a,b;cin>>a>>b;while(a!="admin"||b!="admin"){cout<<"登录失败,请重新输入:";cin>>a>>b; }cout<<"登录成功\n";
}
void tuichu(){fstream h,h2;h.open("s.txt",ios::out|ios::trunc);for(int i=0;i<s.size();i++){h<<s[i].num<<' '<<s[i].name<<' '<<s[i].sex<<' '<<s[i].age<<' '<<s[i].class1<<' '<<s[i].math<<' '<<s[i].chinese;if(i!=s.size()-1)  h<<endl;}h.close();h2.open("t.txt",ios::out|ios::trunc);for(int i=0;i<s2.size();i++){h2<<s2[i].num<<' '<<s2[i].name<<' '<<s2[i].sex<<' '<<s2[i].age<<' '<<s2[i].class1;if(i!=s2.size()-1) h2<<endl;}h2.close();
}
int main(){system("color fd");system("title 教务管理系统1.0");duqu();menu();cout<<"请选择登录方式:";int c;cin>>c;switch(c){case 1:{login1();menu1();cout<<"请选择相应功能:";int d;cin>>d;while(d!=3){switch(d){case 1:{paiming();break;}case 2:{chaxun();break;}}cout<<"请选择相应功能:";cin>>d;}break;}case 2:{login2();menu2();cout<<"请选择相应功能:";int d;cin>>d;while(d!=4){switch(d){case 1:{paiming();break;}case 2:{chaxun();break;}case 3:{lrxs();break;}}cout<<"请选择相应功能:";cin>>d;}break;}case 3:{login3(); menu3();cout<<"请选择相应功能:";int d;cin>>d;while(d!=9){switch(d){case 1:{paiming(); break;}case 2:{paiming2();break;}case 3:{lrxs();break;}case 4:{lrls();break;}case 5:{xiugai();break;}case 6:{xiugai2();break;}case 7:{shanchu();break;}case 8:{shanchu2();break;}}menu3();cout<<"选择:\n";cin>>d;}break;}}tuichu();return 0;
}

``

运行实例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于c/c++简单教务系统的实现--学生/教师/管理员三方登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772166

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设