本人C++大一小白,最近有闲着的时间,就写了个学生信息管理系统,全文件操作,有些地方复杂度太大,还有很大的修改空间。

功能结构图


后期关于成绩修改和信息修改实现没写,思想跟已经实现的修改密码一样,你若感兴趣可以补上此功能!

功能实现思路

学生端

  1. 登录:设计及一个账号登录类,主要通过读取文件中的存储的账号和密码来和用户所输入的密码进行对比,若一致则登录成功,否则登录失败。
  2. 查询学籍信息:继承登录类,学籍信息文件中的开头都是所对应的账号,通过读取账号来和当前账号用户对比,实现信息的定向查找,从而输出学生学籍信息。
  3. 查询期末成绩:与查询学籍思想一致
  4. 修改密码:首先将文件内的所有账号密码进行存储,然后再写入文件内,当所写的账号为修改密码账号时,写入修改后的密码即可。

管理员端

  1. 登录:与学生端登录验证思想一致。
  2. 添加学生账号:将所输入的学生账号写入文件(默认密码为账号)
  3. 注销学生账号:在文件中查找账号,查到后将账号进行存储,同时也要将所有账号密码进行存储,写入文件时,当写入账号与注销账号一致时,不写入。
  4. 查询学生信息:通过继承学生端来使用学生端的信息查询接口
  5. 查询学生期末成绩:通过继承学生端来使用学生端的期末成绩查询机接口。
    全部功能都是通过账号进行识别学生的!

源码提取处

基于文件操作的学生信息管理系统.zip

实现代码

student login.h
#pragma once
#include<iostream>
#include<string>
#include<fstream>
#define Max 1024
using namespace std;
class student_login
{protected:string account;//账号string password;//密码
public:student_login(string account = "###", string password = "###");//初始化账号密码bool student_judge();//登录端口void modify_password();//修改密码端口
};
student login.cpp
#include"student login.h"
student_login::student_login(string account, string password)
{this->account = account;this->password = password;
}
bool student_login::student_judge()
{string user_account, user_password;fstream user_file("学生账号密码.txt", ios::in | ios::app);//读取原数据if (!user_file.is_open())//判断是否打开{return false;}while (user_file >> user_account >> user_password)//读取文件数据{if (user_account == this->account && user_password == this->password)//登录成功{user_file.close();return true;}}return false;
}
void student_login::modify_password()
{fstream file("学生账号密码.txt", ios::in);//读取文件原数据if (!file.is_open()){cerr << "the file is not be opened!" << endl;return;}//暂存账号密码string user_account[Max];string user_password[Max];for (int i = 0; i < Max; i++){user_account[i] = "###";user_password[i] = "###";}string Account, Password;int i = 0, j = 0;while (file >> Account >> Password,!file.eof()){user_account[i++] = Account;user_password[j++] = Password;}file.close();fstream File("学生账号密码.txt", ios::out);string modify_password;cout << "请重置您的密码!" << endl;cin >> modify_password;i = 0, j = 0;bool modify_flag = false;for (int k = 0; user_account[k] != "###"; k++)//重置文件数据{if (user_account[k] == this->account){File << user_account[k] << " " << modify_password << endl;modify_flag = true;}else File << user_account[k] << " " << user_password[k] << endl;}File.close();if (!modify_flag){cerr << "密码修改失败!" << endl;return;}else cout << "密码修改成功!" << endl;
}
student information.h
#pragma once
#include"student login.h"
class student_information:public student_login
{protected:string user_name;//学生姓名string user_number;//学生学号string user_address;//学生家庭住址double user_score;//学生高考分数string major;//学生专业string classroom;//学生班级
public:student_information(string account="###",string name = "#", string number = "000000", string address = "无家庭住址", double score = 480, string Major = "无专业", string Classroom = "无班级");//480为最低录取线void save_information();//查询学生基本学籍信息
};
class student_final_grades:public student_login
{protected:double higher_mathematics;//高等数学double discrete;//离散数学double english;//英语double c;//高程语言double physics;//大学物理public:student_final_grades(string account="###",double math = 0, double Distrete = 0, double English = 0, double C = 0, double Physics = 0);void save_grades();//查询学生期末成绩
};
student information.cpp
#include"student information.h"
student_information::student_information(string account,string name,string number, string address, double score, string Major, string Classroom)
{this->account = account;user_name = name;user_number = number;user_address = address;user_score = score;major = Major;classroom = Classroom;
}
student_final_grades::student_final_grades(string account,double math, double Discrete, double English, double C, double Physics)
{this->account = account;higher_mathematics = math;discrete = Discrete;english = English;c = C;physics = Physics;
}
void student_information::save_information()
{fstream StudentInformation("学生基本信息.txt", ios::in);//打开学生信息数据文件if(!StudentInformation.is_open())//打开失败{cerr << "the file is not be opened!" << endl;return;}string information;//存放文件学生信息数据bool flag = false;//查询状态string user_account;while (StudentInformation>>user_account){if (this->account==user_account)//查询成功{cout << "姓名" << " " << "学号" << " " << "家庭住址" << " " << "高考分数" << " " << "所在专业" << " " << "班级" << endl;getline(StudentInformation, information);cout << information << endl;flag = true;StudentInformation.close();break;}}if (!flag){cerr << "学生信息查找失败!" << endl;return;}
}
void student_final_grades::save_grades()
{fstream StudentGrades("学生期末成绩.txt", ios::in);if (!StudentGrades.is_open()){cerr << "the StudentGrades file is not be opened" << endl;return;}string grades;//存放学生成绩string user_account;bool flag = false;//查询状态while (StudentGrades >> user_account){if (this->account == user_account)//查找成功{cout << "姓名" << " " << "高数" << " " << "离散数学" << " " << "英语" << " " << "C++" << " " << "大学物理" << endl;getline(StudentGrades, grades);cout << grades << endl;flag = true;StudentGrades.close();break;}}if (!flag){cerr << "学生成绩查询失败!" << endl;return;}
}
student user.h
#pragma once
#include"student information.h"
class student :public student_information,public student_final_grades
{public:void set_login();//登录接口void set_information();//基本学籍信息接口void set_grades();//成绩查询接口void set_modify();//密码修改接口void student_choice();//学生端操作void student_menu();//学生端操作菜单
};
static string LoginAccount, LoginPassword;//登录账号和密码变元
student user.cpp
#include"student user.h"
bool flag = false;
void student::set_login()
{cout << "请输入您的账号!" << endl;cin >> LoginAccount;cout << "请输入您的密码!" << endl;cin >> LoginPassword;student_login s1(LoginAccount, LoginPassword);//进入学生登录端if (s1.student_judge()){cout << "登录成功!" << endl;flag = true;}else cerr << "账号或密码错误!" << endl;
}
void student::set_information()
{student_information s2(LoginAccount);//进入学生信息端s2.save_information();
}
void student::set_grades()
{student_final_grades s3(LoginAccount);//进入学生成绩端s3.save_grades();
}
void student::set_modify()
{student_login s4(LoginAccount, LoginPassword);s4.modify_password();
}
void student::student_menu()
{cout << "\t\t\t\t\t\t\t1.登录账号" << endl;cout << "\t\t\t\t\t\t\t2.查询个人信息" << endl;cout << "\t\t\t\t\t\t\t3.查询期末成绩" << endl;cout << "\t\t\t\t\t\t\t4.修改个人密码" << endl;
}
void student::student_choice()
{int choice;cout << "\t\t\t\t\t\t您已经成功进入学生端,祝您使用愉快!" << endl;student_menu();cout << "请选择你要进行的操作" << endl;cin >> choice;switch (choice){case 1: {set_login(), system("pause"), system("cls"), student_choice(); break; }case 2:{if (!flag){cerr << "请您先登录账号!" << endl;system("pause");system("cls");student_choice();break;}else { set_information(), system("pause"), system("cls"), student_choice(); break; }}case 3:{if (!flag){cerr << "请您先登录账号!" << endl;system("pause");system("cls");student_choice();break;}else { set_grades(), system("pause"), system("cls"), student_choice(); break; }}case 4:{if (!flag){cerr << "请您先登录账号!" << endl;system("pause");system("cls");student_choice();break;}else { set_modify(),system("pause"),system("cls"), student_choice(); break; }}default:system("cls"), student_choice(); break;}
}
administrator login.h
#pragma once
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class administrator_login
{private:string account;//管理员账号string password;//管理员密码
public:administrator_login(string account = "###", string password = "###");//构造函数bool administrator_judge();//管理员登录端口
};
administrator login.cpp
#include"adimistrator login.h"
administrator_login::administrator_login(string account,string password)
{this->account = account;this->password = password;
}
bool administrator_login::administrator_judge()
{fstream administrator_file("管理员账号密码.txt", ios::in);if (!administrator_file.is_open()){cerr << "文件打开失败!" << endl;return false;}string administrator_account, administrator_password;while (administrator_file >> administrator_account >> administrator_password){if (this->account == administrator_account && this->password ==administrator_password)//登录成功{administrator_file.close();return true;}}return false;
}
administrator manage student.h
#pragma once
#include"student user.h"
#include"adimistrator login.h"
#define Max 1024
class ManageStudent:public administrator_login,public student
{public:void AddStudent();//增加学生信息void ReduceStudent();//删除学生信息void InquireStudentMessage();//查询学生信息void InquireStudentGrades();//查询学生期末成绩
};
administrator manage student.cpp
#include"adiministrator manage student.h"
void ManageStudent::AddStudent()
{fstream Add_account("学生账号密码.txt", ios::out | ios::app);if (!Add_account.is_open()){cerr << "the file is not be opened!" << endl;return;}cout << "正在为您录入学生信息!请为其设置学生端账号密码(初始密码为账号)" << endl;string account;cout << "请设置账号!" << endl;cin >> account;Add_account << account << " " << account << endl;cout << "学生账号创建成功!" << endl;Add_account.close();fstream Add_message("学生基本信息.txt", ios::out | ios::app);if (!Add_message.is_open()){cerr << "the file is not be opened!" << endl;return;}cout << "正在为您录入学生信息!请输入学生学籍信息" << endl;string name, number, address, score, major, classroom;cout << "请输入学生姓名!" << endl;cin >> name;cout << "请输入学生学号!" << endl;cin >> number;cout << "请输入学生住址!" << endl;cin >> address;cout << "请输入学生高考分数!" << endl;cin >> score;cout << "请输入学生录取专业!" << endl;cin >> major;cout << "请输入学生所在班级!" << endl;cin >> classroom;Add_message << account << " " << name << " " << number << " " << address << " " << score << " " << major << " " << classroom << endl;cout << "学生基本学籍信息录入完毕!" << endl;Add_message.close();cout << "正在为您录入学生信息!请输入学生期末成绩" << endl;fstream Add_grades("学生期末成绩.txt", ios::out | ios::app);if (!Add_grades.is_open()){cerr << "the file is not be opened!" << endl;return;}cout << "请输入学生高等数学成绩!" << endl;cin >> number;cout << "请输入学生离散数学成绩!" << endl;cin >> address;cout << "请输入学生C++成绩!" << endl;cin >> score;cout << "请输入学生英语成绩!" << endl;cin >> major;cout << "请输入学生大学物理成绩!" << endl;cin >> classroom;Add_grades << account <<" "<< name << " " << number << " " << address << " " << score << " " << major <<" "<<classroom<< endl;cout << "学生期末成绩录入完毕!" << endl;Add_grades.close();
}
void ManageStudent::ReduceStudent()//直接注销学生账号,但信息保存,限制学生查看信息
{string number;cout << "正在为您注销学生账号!请输入您要删除学生的学号" << endl;cin >> number;fstream Reduce_account("学生账号密码.txt", ios::in);if (!Reduce_account.is_open()){cerr << "the file is not be opened!" << endl;return;}string buffer_account[Max], buffer_password[Max];for (int i = 0; i < Max; i++){buffer_account[i] = "#";buffer_password[i] = "#";}string tempory_account, tempory_password;int i = 0,j = 0;while (Reduce_account >> tempory_account >> tempory_password,!Reduce_account.eof()){buffer_account[i++] = tempory_account;buffer_password[j++] = tempory_password;}Reduce_account.close();fstream Modify_account("学生账号密码.txt", ios::out);bool flag1 = false;//账户存在性for (int i = 0; buffer_account[i] != "#";i++)if (buffer_account[i] == number) flag1 = true;if (flag1){for (int k = 0; buffer_account[k] != "#"; k++){if (buffer_account[k] != number) Modify_account << buffer_account[k] << " " << buffer_password[k] << endl;else continue;}cout << "账号注销成功!" << endl;}elsecout << "该学生不存在!" << endl;
}
void ManageStudent::InquireStudentMessage()
{cout << "正在为您查询学生学籍信息!请输入学生学号" << endl;string account;cin >> account;student_information s1(account);s1.save_information();
}
void ManageStudent::InquireStudentGrades()
{cout << "正在为您查询学生期末成绩!请输入学生学号" << endl;string account;cin >> account;student_final_grades s1(account);s1.save_grades();
}
administrator user.h
#pragma once
#include"adiministrator manage student.h"
class administrator:public administrator_login,public ManageStudent
{public:void setAdministrator();//管理员登录void administrator_menu();//管理员端操作菜单void administrator_choice();//管理员端操作
};
static string AdministratorAccount, AdministratorPassword;//管理员账号密码变元
administrator user.cpp
#include"administrator user.h"
bool Loginflag = false;
void administrator::administrator_menu()
{cout << "\t\t\t\t\t1.管理员登录" << endl;cout << "\t\t\t\t\t2.查询学生信息" << endl;cout << "\t\t\t\t\t3.查询学生期末成绩" << endl;cout << "\t\t\t\t\t4.录入新生学籍信息" << endl;cout << "\t\t\t\t\t5.删除学生学籍信息" << endl;
}
void administrator::administrator_choice()
{cout << "\t\t\t\t您已经成功进入管理员端,祝您使用愉快!" << endl;administrator_menu();int choice;cout << "请选择您要进行的操作" << endl;cin >> choice;switch (choice){case 1:{setAdministrator();Loginflag = true;system("pause");system("cls");administrator_choice();break;}case 2:{if (!Loginflag){cout << "请您先登录管理员账号" << endl;system("pause");system("cls");administrator_choice();}InquireStudentMessage();system("pause");system("cls");administrator_choice();break;}case 3:{if (!Loginflag){cout << "请您先登录管理员账号" << endl;system("pause");system("cls");administrator_choice();}InquireStudentGrades();system("pause");system("cls");administrator_choice();break;}case 4:{if (!Loginflag){cout << "请您先登录管理员账号" << endl;system("pause");system("cls");administrator_choice();}AddStudent();system("pause");system("cls");administrator_choice();break;}case 5:{if (!Loginflag){cout << "请您先登录管理员账号" << endl;system("pause");system("cls");administrator_choice();}ReduceStudent();system("pause");system("cls");administrator_choice();break;}default:system("cls"), administrator_choice();}
}
void administrator::setAdministrator()
{cout << "请输入您的管理员账号!" << endl;cin >> AdministratorAccount;cout << "请输入您的管理员密码!" << endl;cin >> AdministratorPassword;administrator_login A(AdministratorAccount, AdministratorPassword);if (A.administrator_judge()){cout << "登录成功!" << endl;Loginflag = true;}else cerr << "管理员账号或密码错误!" << endl;
}
manage system.cpp
#include"student user.h"
#include"administrator user.h"
void menu();
void user_choice();
int main()
{user_choice();return 0;
}
void menu()
{cout << "\t\t\t\t欢迎使用学生信息管理系统!(系统创造者——皮皮晗)" << endl;cout << "\t\t\t\t\t\t1.进入学生端" << endl;cout << "\t\t\t\t\t\t2.进入管理员端" << endl;cout << "请选择进入端口!" << endl;
}
void user_choice()
{menu();int choice;cin >> choice;switch (choice){case 1:{system("cls");student s1;s1.student_choice();break;}case 2:{system("cls");administrator a1;a1.administrator_choice();break;}default:system("cls"), user_choice();}
}

部分功能展现








总结

这是我写完简单贪吃蛇后的第二个小项目,总感觉不太满意,虽然有几个地方达到了预期效果,但离我的目标还很远!希望自己能在编程这条路上走得更远。遇到困难不要放弃,办法总比困难多,我们都可以!距离期末考还有三周,相信自己,我可以!


基于文件操作的学生信息管理系统(含登录验证)相关推荐

  1. Python tkinter+文件操作 实现学生信息管理系统

    选题:学生信息管理系统 项目介绍: 这个项目主要包含了UI界面和后台程序,该项目是通过文件存储的方式来保存学生信息的,主要包含的操作有学生信息的增删改查功能,还有用户的登录功能,涵盖的信息有学生的学号 ...

  2. c语言结构体编辑学生成绩管理,C语言基于结构体的学生信息管理系统实现

    宋福英 摘  要: 中国高校为保证学生信息安全,各分院的学生信息都在一个相对封闭的闭环内共享.中国高校在校生人数逐年递增,给高校的信息管理带来不小压力.C语言兼具高级语言和汇编语言的特点,简洁.紧凑. ...

  3. C#基于asp.net的学生信息管理系统(Web)

    新建项目 如图: 在最后选择时选中空,然后在右侧添加文件夹和核心引用下勾选Web窗体,点击创建即可. 进入项目之后,右键单击项目名,点击新建项,新建一个Web窗体,我们就可以在其中布置页面.编写代码啦 ...

  4. Java课程设计-基于Java Swing的学生信息管理系统-版本二

    Java课程设计-基于Java Swing的学生信息管理系统-版本二 1.介绍 2.相关技术 3. 代码仓库 4.所需环境 5.安装教程 6.运行截图 7.相关博客 1.介绍 设计一个简单学生个人信息 ...

  5. 基于SSM搭建的学生信息管理系统项目源码+学习视频

    基于SSM搭建的学生信息管理系统 目录 基于SSM搭建的学生信息管理系统 1.为什么要编写学生信息管理系统 1.1编写项目的起因: 2.编写学生信息管理系统的过程 2.1项目成果的展示: 登录界面: ...

  6. linux实现学生信息管理系统,Linux下基于shell脚本实现学生信息管理系统

    LINUX Linux操作系统 Linux下基于shell脚本实现学生信息管理系统 #该管理系统是参考两位博主(时间有点远了,我忘了,请博主看到后联系我)后自行修改添加的.登录过程还有很多不完善,我就 ...

  7. 基于PHP+MySQL的学生信息管理系统(源码)

    项目名称:基于PHP+MySQL的学生信息管理系统 本系统是一个用于管理学生信息的管理系统,包括基本的增删改查,系统使用PHP语言开发,使用MySQL数据库,可以供初学者参考使用. 系统环境 MySQ ...

  8. 学生信息管理系统java的总结,基于Java web的学生信息管理系统

    源码编号:B-E00012  点击查看分类规则 项目类型:Java EE项目(java web项目) 项目名称:基于java web的学生信息管理系统(StudentManagerWeb) 当前版本: ...

  9. 基于java的学生信息管理系统(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 内容摘要    - 2 - 引言    - 4 - 学生信息管理系统开发的意义和目的    - ...

最新文章

  1. java http输出,Java HTTP Client输出空JSON
  2. 对人脑如何控制手的新认识:我们为什么削水果时,拿的是刀柄而不会拿刀刃?...
  3. WebStorm、PHPStorm、IntelliJ IDEA配置scss自动编译
  4. 3.1.10 OS之基本分段存储管理(段表、地址变换、信息共享)
  5. 高内聚、低耦合的理解
  6. 02、如何进行网站性能优化或怎么加快页面的加载速度
  7. linux的grub损坏,如何利用Grub命令启动损坏的Linux系统?
  8. 实用教程丨官方下载Oracle各版本安装软件及补丁包
  9. SpringBoot之AOP切面的使用
  10. Android AsyncTask 详解及注意事项
  11. 实验室服务器系统设计,实验室教学管理系统设计与实现
  12. php 代码的分离和调用及注意事项(版本、变量及cookie与session的区别,PHP包含文件函数include、include_once、require、require_once区别和总结)
  13. 如何做到数百万台车联网设备同时在线 0 故障
  14. 从0教你用Python写网络爬虫,内容详细代码清晰,适合入门学习
  15. 人口普查中应该具备的计算机知识,人口普查知识问答
  16. 新宝市场分析近期大涨的抱团板块个股大多高位收阴或者黄昏星的感觉
  17. 佳能430二代_简单好用 佳能430EX III-RT闪光灯评测
  18. 获取微信开放平台申请移动应用时的应用签名和应用包名
  19. 如何解决笔记本键盘突然失灵的问题
  20. 棋盘覆盖问题 (分治)

热门文章

  1. RTX 3060Ti和rtx2080Super的区别
  2. 两台计算机能否共用一个ip地址,多台电脑共用一个WIFI,IP地址是不是一样?
  3. python默认深拷贝_python深拷贝和浅拷贝的区别
  4. 深度学习·理论篇(2023版)·第001篇快速了解人工智能与Pytorch:机器/表示/深度学习定义+端到端的学习+神经网络在计算机视觉应用+深度学习的技术蓝图
  5. 简单有效解决onenote无法设置或修改默认的英文字体“Calibri”(简单实用)
  6. go标准库的中文翻译
  7. 扇入Fan-in和扇出Fan-out
  8. fcpx插件:PremiumVFX Comic Titles(手绘漫画风格的标题和背景
  9. 中国移动家庭智能网关超级账号密码(广西桂林)
  10. 推荐一个制作卡通头像的网站(超强)