C++实现学生管理系统示例解析

此项目为一个小型学生管理系统,仅供初学者学习交流使用,使用者可以在此项目中用已学的C++基础知识进行实战演练,加深对所学知识的了解。
可以从github直接克隆项目(项目地址)

1. 项目要点

1、在每次进入最初登陆界面时,由于要再次加载文件内容,因此需先将list underst 和 list ad 中的内容使用clear()函数清空后再读入。
2、在读取文件时,由于使用!infile.eof()函数会导致最后一行读取两次。因此,在读文件循环内加入infile.get(),目的是在读完一行后立即换行。

2. 功能介绍

从上图可以看出,此项目主要有三个功能模块:开通管理员账户、管理员功能界面(管理员身份登录)、本科生功能界面(本科生省份登录)。第一次运行本项目时,首先要开通管理员账户才能进行其他的操作。

2.1 管理员功能界面

从上图可以看到管理员共有五项功能。

  • 查看所有学生信息
  • 按姓名查看学生信息
  • 按学号查看学生信息录
  • 入学生信息按学号
  • 删除学生信息

2.2 学生功能界面

从上图可以看到学生共有两项功能。

查看个人信息修改密码

需要注意的是,在登录学生账户之前首先要登进管理员系统创建学生信息之后才可以使用该账户登录学生界面。

3. code(以下代码均在VS2017上编译运行通过)

/*Administer.h 此文件为Administer类的头文件*/
#pragma once
#include<iostream>
#include<string>
using namespace std;
class Administer
{
private:
	string name;
	string ID;
	string password;
public:
	Administer() {}
	Administer(string na, string id, string passw);
	string get_id(){return ID;}
	string get_name(){return name;}
	string get_password(){	return password;	}
	void display();
};
/*Administer.cpp 此文件为Administer类的实现*/
#include"Administer.h"
Administer::Administer(string na, string id, string passw) :name(na), ID(id), password(passw)
{}
void Administer::display()
{
	cout << endl << "******************" << endl;
	cout << endl << "* 姓名:" << name;
	cout << endl << "* 账号:" << ID;
	cout << endl << "******************" << endl;
}
/*UnderStudent.h 此文件为UnderStuent类的头文件*/
#pragma once
#include<iostream>
#include<string>
using namespace std;
class Understudent
{
private:
	string name;
	string ID;
	string password;
	float grade;
	string sex;
public:
	Understudent() {}
	Understudent(string na, string id, string passw, float gra, string s);
	string get_name(){return name;}
	string get_id(){return ID;}
	string get_password(){return password;}
	float get_grade() { return grade; }
	string get_sex() { return sex; }
	void display();
	bool operator == (const Understudent &u)const	//注意此处参数必须为const类型,才能与STL中list的内置函数匹配
	{
		return ID == u.ID;
	}
	void set_password(string passw)
	{
		password = passw;
	}
};
/*UnderStudent.cpp 此文件为UnderStudent类的实现*/
#include"UnderStudent.h"
Understudent::Understudent(string na, string id, string passw, float gra, string s):name(na),ID(id),password(passw),grade(gra), sex(s)
{}
void Understudent::display()
{
	cout << "******************"<< endl;
	cout << "* 姓名:" << name << endl;
	cout << "* 学号:" << ID <<endl ;
	cout << "* 性别:" << sex <<endl ;
	cout << "* 绩点:" << grade << endl;
	cout << "******************"<< endl;
}
/*System.h 此文件为System的头文件*/
#pragma once
#include<list>
#include<fstream>
#include"UnderStudent.h"
#include"Administer.h"
class System
{
private:
	list<Understudent> underst;
	list<Administer> ad;
	static int underst_count;
	static int ad_count;
public:
	virtual void load_interface();			//登陆界面
	void exit_system();					 //退出系统
	void understudent_functionshow();		//学生用户功能界面
	void administer_functionshow();			//管理员功能界面
	void set_ad_account();					//设置管理员账户
	void enter_ad_account();				//管理员身份登陆
	void enter_underst_account();			//本科生身份登陆
	void save_undst();						//保存本科生数据
	void save_ad();							//保存管理员数据
	void load_undst();						//读取本科生数据
	void load_ad();							//读取管理员数据
	/*管理员功能*/
	void input_underst_info();				//录入本科生信息
	void look_all_underst();				//查看所有本科生信息
	void look_underst_by_name(string name);			//根据姓名查看本科生信息
	void look_underst_by_id(string id);				//根据ID查看本科生信息
	void delete_underst_by_id(string id);			//根据ID删除本科生信息
	/*本科生功能*/
	void change_password(string id);			//修改密码
};
/*System.cpp 此文件为System类的实现*/
#include"System.h"

int System::underst_count = 0;
int System::ad_count = 0;

//登陆界面
void System::load_interface()
{
	int i;
	do
	{
		system("cls");
		load_ad();
		load_undst();
		cout << "********************" << endl;
		cout << "1)开通管理员账户!" << endl;
		cout << "2)管理员身份登陆!" << endl;
		cout << "3)本科生身份登陆!" << endl;
		cout << "4)退出系统!" << endl;
		cout << "********************" << endl;
		cout << "请输入操作:";
		cin >> i;
		while (i < 1 || i>4)
		{
			cout << "请输入正确的序号!" << endl;
			cout << "请重新输入:";
			cin >> i;
		}
		switch (i)
		{
		case 1:
			set_ad_account();
			break;
		case 2:
			enter_ad_account();
			break;
		case 3:
			enter_underst_account();
			break;
		case 4:
			exit_system();
			break;
		default:
			break;
		}
		//cin.get();
	} while (true);
}

//退出系统
void System::exit_system()
{
	cout << "****************感谢使用!******************" << endl;
	exit(0);
}

//本科生功能界面
void System::understudent_functionshow()
{
	cout << "***************************" << endl;
	cout << "1)查看个人信息" << endl;
	cout << "2)修改密码" << endl;
	cout << "3)返回上一级菜单!" << endl;
	cout << "*****************************" << endl;
	cout << "请选择你要进行的操作:";
}

//管理员功能界面
void System::administer_functionshow()
{
	cout << "***************************" << endl;
	cout << "1)查看所有学生信息!" << endl;
	cout << "2)按姓名查找学生信息!" << endl;
	cout << "3)按学号查找学生信息!" << endl;
	cout << "4)录入学生信息" << endl;
	cout << "5)按学号删除学生信息" << endl;
	cout << "6)返回上一级菜单!" << endl;
	cout << "*****************************" << endl;
	cout << "请选择你要进行的操作:";
}

//设置管理员账户
void System::set_ad_account()
{
	string name;
	string id;
	string password;
	string password2;
	cout << endl<<"请输入姓名:";
	cin >> name;
	cout << endl << "请输入ID:";
	cin >> id;
	cout << endl << "请输入密码:";
	cin >> password;
	cout << endl << "请再次输入密码:";
	cin >> password2;
	while (password != password2)
	{
		cout << "两次密码不一致,请再次确认:";
		cin >> password2;
	}
	Administer adm(name, id, password);
	ad.push_back(adm);
	cout << "开户成功!" << endl;
	cin.get();
	ad_count++;
	save_ad();
}

//管理员身份登陆
void System::enter_ad_account()
{
	string udst_name;	//要查询的学生的名字
	string udst_id;		//要查询学生的ID
	string id;
	string passw;
	list<Administer>::iterator iter;
	cout << "请输入账户:";
	cin >> id;
	int flag = 1;
	for (iter = ad.begin(); iter != ad.end(); iter++)
	{
		if (id == iter->get_id())
		{
			flag = 0;
			break;
		}
	}
	if (flag)
	{
		cout << endl<<"账户不存在!" << endl;
		return;
	}
	cout << endl << "请输入密码:";
	cin >> passw;
	while (passw != iter->get_password())
	{
		cout << endl<<"密码错误,请重新输入:";
		cin >> passw;
	}
	cin.get();
	int n;
	do
	{
		system("cls");
		administer_functionshow();
		cin >> n;
		while (n < 1 || n>6)
		{
			cout << "请输入正确的选项:";
			cin >> n;
		}
		switch (n)
		{
		case 1:
			look_all_underst();
			break;
		case 2:
			cout << "请输入要查询学生的名字:";
			cin >> udst_name;
			look_underst_by_name(udst_name);
			break;
		case 3:
			cout << "请输入要查询学生的ID:";
			cin >> udst_id;
			look_underst_by_id(udst_id);
			break;
		case 4:
			input_underst_info();
			break;
		case 5:
			cout << "请输入要删除学生的ID:";
			cin >> udst_id;
			delete_underst_by_id(udst_id);
			break;
		case 6:
			return;
			break;
		default:
			break;
		}
	} while (1);
}

//本科生身份登陆
void System::enter_underst_account()
{
	list<Understudent>::iterator iter;
	string id;
	string passw;
	cout << "请输入账户:";
	cin >> id;
	int flag = 1;
	for (iter = underst.begin(); iter != underst.end(); iter++)
	{
		if (id == iter->get_id())
		{
			flag = 0;
			break;
		}
	}
	if (flag)
	{
		cout << endl << "账户不存在!" << endl;
		return;
	}
	cout << endl << "请输入密码:";
	cin >> passw;
	while (passw != iter->get_password())
	{
		cout << endl << "密码错误,请重新输入:";
		cin >> passw;
	}
	int n;
	do
	{
		system("cls");
		understudent_functionshow();
		cin >> n;
		while (n < 1 || n>3)
		{
			cout << endl << "请输入正确的操作:";
			cin >> n;
		}
		system("cls");
		switch (n)
		{
		case 1:
			iter->display();
			break;
		case 2:

			change_password(id);
			break;
		case 3:
			return;
			break;
		default:
			break;
		}
		system("pause");

	} while (true);
}

//保存管理员数据
void System::save_ad()
{
	ofstream outfile("administer.dat",ios::out);
	list<Administer>::iterator iter;
	outfile << ad_count << endl;
	for (iter = ad.begin(); iter != ad.end(); iter++)
	{
		outfile << iter->get_name() << "\t" << iter->get_id() << "\t" << iter->get_password() << endl;
	}
	outfile.close();
}

//保存本科生数据
void System::save_undst()
{
	ofstream outfile("understudent.dat",ios::out);
	list<Understudent>::iterator iter;
	outfile << underst_count << endl;
	for (iter = underst.begin(); iter != underst.end(); iter++)
	{
		outfile << iter->get_name() << "\t" << iter->get_id() << "\t" << iter->get_password() << "\t" << iter->get_grade() << "\t"
			<< iter->get_sex() << endl;
	}
	outfile.close();
}

//读取本科生数据
void System::load_undst()
{
	ifstream infile("understudent.dat");
	if (!infile)
	{
		cout << "无本科生资料!" << endl;
		return;
	}
	string name;
	string ID;
	string password;
	float grade;
	string sex;
	infile >> underst_count;//读取本科生总人数
	infile.get();
	if (!underst.empty())
		underst.clear();
	while (!infile.eof() && infile.peek() != EOF)
	{
		infile >> name >> ID >> password >> grade >> sex;
		Understudent undst(name, ID, password, grade, sex);
		underst.push_back(undst);
		infile.get();
	}
	infile.close();
	cout << "读取本科生资料正常。" << endl;

}

//读取管理员数据
void System::load_ad()
{
	ifstream infile("administer.dat");
	if (!infile)
	{
		cout << "无管理员资料!" << endl;
		return;
	}
	string name;
	string ID;
	string password;
	infile >> ad_count;//读取管理员总人数
	infile.get();
	if (!ad.empty())
		ad.clear();
	while (!infile.eof()||infile.peek()!=EOF)
	{
		infile >> name >> ID >> password;
		Administer adm(name, ID, password);
		ad.push_back(adm);
		infile.get();
	}
	infile.close();
	cout << "读取管理员资料正常。" << endl;
}

/*
管理员权限:
*/

//1)查看所有本科生信息
void System::look_all_underst()
{
	system("cls");
	if (underst.empty())
	{
		cout << "无本科生数据!" << endl;
		system("pause");
		return;
	}
	list<Understudent>::iterator iter;
	cout << "姓名" << "\t" << "ID" << "\t" << "\t" <<"性别" << "\t" << "绩点" << endl;
	for (iter = underst.begin(); iter != underst.end(); iter++)
		cout << iter->get_name() << "\t" << iter->get_id() << "\t" << iter->get_sex() << "\t" << iter->get_grade() << endl;
	cout << endl << "学生总人数:" << underst_count << endl;
	system("pause");
}

//2)按姓名查看本科生数据
void System::look_underst_by_name(string udst_name)
{
	system("cls");
	if (underst.empty())
	{
		cout << "无本科生数据!" << endl;
		system("pause");
		return;
	}
	list<Understudent>::iterator iter;
	for (iter = underst.begin(); iter != underst.end(); iter++)
	{
		if (iter->get_name() == udst_name)
		{
			cout << "姓名" << "\t" << "ID" << "\t" << "\t" << "性别" << "\t" << "绩点" << endl;
			cout << iter->get_name() << "\t" << iter->get_id() << "\t" << iter->get_sex() << "\t" << iter->get_grade() << endl;
			//姓名可以重复,因此遍历所有
		}
		if (iter == --underst.end())
		{
			system("pause");
			return;
		}
	}
	cout << "无该生数据!" << endl;
	system("pause");
	return;
}

//3)按ID查看本科生数据
void System::look_underst_by_id(string udst_id)
{
	system("cls");
	if (underst.empty())
	{
		cout << "无本科生数据!" << endl;
		system("pause");
		return;
	}
	list<Understudent>::iterator iter;
	for (iter = underst.begin(); iter != underst.end(); iter++)
	{
		if (iter->get_id()==udst_id)
		{
			cout << "姓名" << "\t" << "ID" << "\t" << "\t" << "性别" << "\t" << "绩点" << endl;
			cout << iter->get_name() << "\t" << iter->get_id() << "\t" << iter->get_sex() << "\t" << iter->get_grade() << endl;
			system("pause");
			return;	//ID不能有重复
		}
	}
	cout << "无该生数据!" << endl;
	system("pause");
	return;
}

//4)录入本科生信息
void System::input_underst_info()
{

	string name;
	string ID;
	string password;
	float grade;
	string sex;
	char s;	//是否继续录入flag
	do
	{
		system("cls");
		cout << endl << "请输入学生姓名:";
		cin >> name;
		cout << endl << "请输入学生ID:";
		cin >> ID;
		cout << endl << "请输入学生初始密码:";
		cin >> password;
		cout << endl << "请输入学生绩点:";
		cin >> grade;
		cout <<endl<< "请输入学生性别:";
		cin >> sex;
		Understudent undst(name, ID, password, grade, sex);
		underst.push_back(undst);
		underst_count++;
		cout << endl << "是否继续录入?(Y/N)";
		cin >> s;
		while (s != 'Y'&&s != 'N'&&s != 'y'&&s != 'n')
		{
			cout << endl << "请输入正确操作(Y/N):";
			cin >> s;
		}
	} while (s == 'Y'||s=='y');
	save_undst();
}

//5)按ID删除学生信息
void System::delete_underst_by_id(string udst_id)
{
	system("cls");
	if (underst.empty())
	{
		cout << "无本科生数据!" << endl;
		system("pause");
		return;
	}
	list<Understudent>::iterator iter;
	string name;
	string ID;
	string password;
	float grade;
	string sex;
	for (iter = underst.begin(); iter != underst.end(); iter++)
	{
		if (iter->get_id() == udst_id)
		{
			name = iter->get_name();
			ID = iter->get_id();
			password = iter->get_password();
			grade = iter->get_grade();
			sex = iter->get_sex();
			Understudent undst(name, ID, password, grade, sex);
			underst.remove(undst);
			underst_count--;
			cout << "删除成功!" << endl;
			system("pause");
			save_undst();
			return;	//ID不能有重复
		}
	}
	cout << "无该生数据!" << endl;
	system("pause");
	return;
}

/*
本科生权限
*/
//2)修改密码
void System::change_password(string id)
{
	string password, passw;
	cout << "请输入新密码:";
	cin >> password;
	cout <<endl<<"请再次输入:";
	cin >> passw;
	while (password != passw)
	{
		cout << endl<<"两次密码不一致,请重新输入:";
		cin >> passw;
	}
	list<Understudent>::iterator iter;
	for (iter = underst.begin(); iter != underst.end(); iter++)
	{
		if (iter->get_id() == id)
			break;
	}
	iter->set_password(password);
	cout << "修改密码成功!" << endl;
	save_undst();
}
/*mai.cpp 此文件为主函数所在文件*/
#include"System.h"
int main()
{
	System s;
	s.load_interface();
	system("pause");
	return 0;
}

代码目录结构

到此这篇关于C++实现学生管理系统示例解析的文章就介绍到这了,更多相关C++学生管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++基础学生管理系统

    本文实例为大家分享了C++基础学生管理系统的实现代码,供大家参考,具体内容如下 适用于c++6.0,codeblocks等常用工具 1. 链表处理部分 #include<stdio.h> #include<string.h> #include<stdlib.h> #include"linklist.h" #include"elem.h" void dispnode(linklist h) { node *p; p=h->ne

  • C++实现学生管理系统

    本文实例为大家分享了本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <iostream.h> // 学生信息结构体 typedef struct _STRU_STU_SCORE_{ unsigned int nStuId; char cpName[256

  • C++实现简单的学生管理系统

    C++实现简单的学生管理系统 //Student.cpp #include<iostream> using namespace std; struct Stu { char no[10]; char name[16]; int math; int chi; double ave; }; class Student { public: Stu st; Student * next; public: Student(){} Student(Stu s) { st=s; next=NULL; st.

  • C++实现学生管理系统示例解析

    此项目为一个小型学生管理系统,仅供初学者学习交流使用,使用者可以在此项目中用已学的C++基础知识进行实战演练,加深对所学知识的了解. 可以从github直接克隆项目(项目地址) 1. 项目要点 1.在每次进入最初登陆界面时,由于要再次加载文件内容,因此需先将list underst 和 list ad 中的内容使用clear()函数清空后再读入. 2.在读取文件时,由于使用!infile.eof()函数会导致最后一行读取两次.因此,在读文件循环内加入infile.get(),目的是在读完一行后立

  • Python实现GUI学生管理系统的示例代码

    目录 序 言 代码解析 一.登录页面 二.主页面显示 三 .页面显示 四.查询数据 五.删除数据 六.修改数据 七.关于部分 八.数据保存,保存信息 序 言 哈喽兄弟们,好久不见!最近实在太忙了,所以又双叒叕断更了~ 表弟大学快毕业了,学了一个学期Python居然还不会写学生管理系统,真的给我丢脸啊,教他又不肯学,还让我直接给他写,我真想两巴掌上去,最终还是写了给他,谁让他是我表弟呢,关键时候还是得帮他一把! 写完了放在那也是放着,所以今天分享给大家吧! 话不多说,咱们直接开始吧! 代码解析 一

  • php学生管理系统

    本文实例为大家分享了php学生管理系统源码,供大家参考,具体内容如下 功能: 1.添加/删除/修改 2.数据存储. 界面分布: index.php --->主界面 add.php --->stu添加 action ---> sql中add/del/update (处理html表单-->mysql的数据存储 && 页面跳转) edit.php --->stu修改 menu.php -->首页 1. index.php <!DOCTYPE html&g

  • Android版学生管理系统

    用户可以输入姓名.性别.年龄三个字段,通过点击添加学生按钮,将学生信息展示到开始为空的ScrollView控件中,ScrollView控件只能包裹一个控件,我这里包裹的是LinearLayout.点击保存数据按钮将数据通过XmlSerializer对象将数据保存到sd卡中,当点击恢复数据按钮时将sd卡文件中的数据读取出来回显到ScrollView中.大概功能就是这样的,下面我们来看看具体的代码吧. 因为要读写文件,所以要在清单文件中添加两个权限: <uses-permission android

  • PDO实现学生管理系统

    这里实现一个简单的学生管理系统,供大家参考,具体内容如下 需要建立如下文件: index.php menu.php //菜单栏 add.php  //添加数据 edit.php // 编辑数据 action.php // 添加,删除,编辑的实现 分别写一下每个文件的代码: menu.php: <html> <h2>学生信息管理</h2> <a href="index.php" rel="external nofollow"

  • 用python实现学生管理系统

    学生管理系统 相信大家学各种语言的时候,练习总是会写各种管理系统吧,管理系统主要有对数据的增删查改操作,原理不难,适合作为练手的小程序 数据的结构 要保存数据就需要数据结构,比如c里面的结构体啊,python里面的列表,字典,还有类都是常用的数据类型 在这里,我使用了链表来作为学生数据的数据结构, 即 Node类 和 Student_LinkList类,来实现链表 数据的持久化 我们在程序中产生的数据是保存在内存中的,程序一旦退出,下次就不能恢复此次的数据了,因此需要把内存种的数据,保存到文件或

  • python实现简单的学生管理系统

    本文实例为大家分享了python实现简单学生管理系统的具体代码,供大家参考,具体内容如下 学生管理系统 相信大家学各种语言的时候,练习总是会写各种管理系统吧,管理系统主要有对数据的增删查改操作,原理不难,适合作为练手的小程序 数据的结构 要保存数据就需要数据结构,比如c里面的结构体啊,python里面的列表,字典,还有类都是常用的数据类型 在这里,我使用了链表来作为学生数据的数据结构, 即 Node类 和 Student_LinkList类,来实现链表 数据的持久化 我们在程序中产生的数据是保存

  • MySQL数据库基础篇SQL窗口函数示例解析教程

    目录 本文简介 正文介绍 聚合函数 + over() 排序函数 + over() ntile()函数 + over() 偏移函数 + over() 本文简介 前段时间,黄同学写了一篇<MySQL窗口实战>文章(文章如下),但是里面大多数是以实战练习为主,没有做详细的解释. 传送门:MySQL实战窗口函数SQL分析班级学生考试成绩及生活消费 于是,私信了月牙美女,看看她能否写一篇<窗口函数基础篇>,正好和之前那篇文章配套.这不,很快她就写好了,今天就给大家做一个分享,旨在和大家交流学

  • php实现学生管理系统

    本文实例为大家分享了php学生管理系统源码,供大家参考,具体内容如下 功能: 1.添加/删除/修改 2.数据存储. 界面分布: index.php --->主界面 add.php --->stu添加 action ---> sql中add/del/update (处理html表单-->mysql的数据存储 && 页面跳转) edit.php --->stu修改 menu.php -->首页 1. index.php <!DOCTYPE html&g

  • go语言数组及结构体继承和初始化示例解析

    目录 分类 数组 数组定义 结构体 结构体继承 结构体初始化 成员的操作 同名字段 其它匿名字段 非结构体类型 结构体指针类型 结构体字段实现接口 分类 类型 名称 长度 默认值 说明 pointer 指针   nil   array 数组   0   slice 切片   nil 引⽤类型 map 字典   nil 引⽤类型 struct 结构体       数组 如果要存储班级里所有学生的数学成绩,应该怎样存储呢?可能有同学说,通过定义变量来存储.但是,问题是班级有80个学生,那么要定义80

随机推荐