由于暂时不会在github上上传代码,因此暂时放在此处了。。。
(一个小的管理饭卡的系统,相当于是一个下午匆忙完成的,没考虑太多细节)
Student 头文件:
#pragma once
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class Student
{
private:
string name;
bool gender;
double money;
public:
Student(const string& _name = "no name", bool _gender = 0, double _money = 0.0)
:name(_name), gender(_gender), money(_money) {}
~Student() {}
Student(Student& st);
const string& Name()const { return name; }
double Money()const { return money; }
void Charge(double _add);
Student& operator=(Student st);
friend ostream& operator<<(ostream& os, const Student& st);
};
Student::Student(Student& st)
{
name = st.name;
gender = st.gender;
money = st.money;
}
void Student::Charge(double _add)
{
if (_add < 0)
{
cout << "充值金额不能为负数!" << endl;
exit(EXIT_FAILURE);
}
money += _add;
}
Student& Student::operator=(Student st)
{
if (this == &st)return *this;
else {
name = st.name;
gender = st.gender;
money = st.money;
return *this;
}
}
ostream& operator<<(ostream& os, const Student& st)
{
os << "姓名:" << st.name << endl;
os << "余额: " << st.money << endl;
return os;
}
学生管理系统.cpp:
#include"Student.h"
#include<vector>
vector<Student*> vec; //使用vector存储学生信息
void menu();
void mend(); // menu end 的缩写
void Find();
void Add();
void Charge();
void Delete();
void Output();
void SaveInfo();
int main()
{
while (1)
{
char ch;
menu();
cin >> ch;
switch (ch)
{
default: break;
case '1': Find(); break;
case '2':Add(); break;
case '3':Charge(); break;
case '4':Delete(); break;
case '5':Output(); break;
case '6':SaveInfo(); break;
}
mend();
cin.ignore();
char ch2;
cout << "是否还想做打开菜单?" << endl;
cout << "输入Y确认,选择其他将退出程序。" << endl;
cout << "此时将自动保存信息。" << endl;
cin >> ch2;
if (ch2 != 'Y')
{
SaveInfo();
break;
}
}
}
void menu()
{
cout << "----------学生饭卡管理系统------------" << endl;
cout << "输入您想进行的操作前面的数字,若要退出" << endl;
cout << "请输入任意字母。 " << endl << endl;
cout << "1、根据姓名查询信息。" << endl;
cout << "2、加入一个新的学生。" << endl;
cout << "3、充值操作。" << endl;
cout << "4、删除一个旧的学生。" << endl;
cout << "5、查看所有学生。" << endl;
cout << "6、保存信息。" << endl;
}
void mend()
{
cout << "已经执行完一次过程。" << endl;
cout << "---------------------------" << endl;
cout << "---------------------------" << endl;
}
void Find()
{
cout << "寻找学生信息:" << endl;
cout << "请输入学生姓名:";
cin.ignore();
string str;
getline(cin, str);
size_t i;
for (i = 0; i < vec.size(); i++)
{
if (str == vec[i]->Name())
{
cout << "已成功找到学生:" << endl;
cout << *(vec[i]) << endl;
break;
}
}
if (i == vec.size() && vec[vec.size() - 1]->Name() != str) {
char ch;
cout << "并未找到该学生,是否重新输入姓名?" << endl;
cout << "输入 y 表示继续进行,其他键退出。" << endl;
cin >> ch;
if (ch == 'y')Find();
}
}
void Add()
{
cout << "添加新的学生:" << endl;
cin.ignore();
cin.clear();
string N;
cout << "请输入学生姓名:";
getline(cin, N);
bool G;
char ch;
cout << "请输入学生性别:(男/女)" << endl;
cin >> ch;
if (ch == '男')G = 0;
else G = 1;
Student* ptr = new Student(N, G, 0.0);
vec.push_back(ptr);
cout << "学生:" << vec[vec.size() - 1]->Name() << "录入成功!" << endl;
cout << "当前账户余额:" <<ptr->Money() << "元." << endl;
cin.ignore();
cout << "输入 C 以跳转至充值程序,输入 A 以再次添加学生,输入其他键退出。" << endl;
char ch2;
cin >> ch2;
switch (ch2)
{
case 'C':Charge();
break;
case 'A':Add();
break;
default:break;
}
}
void Charge()
{
cin.ignore();
cout << "寻找学生信息:" << endl;
cout << "请输入学生姓名:";
string str;
getline(cin, str);
size_t i;
for (i = 0; i < vec.size(); i++)
{
if (str.c_str() == vec[i]->Name())
{
cout << "已找到学生:" << str << endl;
double M;
cout << "想要充值多少?" << endl;
cin >> M;
vec[i]->Charge(M);
cout << "充值成功,余额:" << vec[i]->Money() << endl;
}
}
if (i == vec.size() && vec[vec.size() - 1]->Name() != str){
char ch;
cout << "并未找到该学生,是否重新输入姓名?" << endl;
cout << "输入 y 表示继续进行,其他键退出。" << endl;
cin >> ch;
if (ch == 'y')Charge();
}
}
void Delete()
{
cout << "目前有:" << vec.size() << "个学生在系统中。" << endl;
if (vec.size() == 0)
{
cout << "系统中没有学生,无法删除!" << endl;
exit(EXIT_FAILURE);
}
cout << "删除学生信息:" << endl;
cout << "请输入学生姓名:";
cin.ignore();
cin.clear();
string N;
getline(cin, N);
size_t i;
for (i = 0; i < vec.size(); i++)
{
if (N == vec[i]->Name())
{
if (i != vec.size() - 1)
{
Student* Temp = vec[i];
vec[i] = vec[vec.size() - 1];
vec[vec.size() - 1] = Temp;
}
vec.pop_back();
cout << "学生已经成功删除,目前系统中还有" << vec.size() << "个学生。" << endl;
}
}
if (i == vec.size() && vec[vec.size() -1]->Name() != N)
{
cin.ignore();
cout << "并未找到相应学生,是否重新输入姓名?" << endl;
cout << "输入 y 表示继续进行,其他键退出。" << endl;
char ch;
cin >> ch;
if (ch == 'y')Delete();
}
}
void Output()
{
cout << "目前有:" << vec.size() << "个学生在系统中。" << endl;
if (vec.size() == 0)
{
cout << "系统中已无数据,不能再进行输出。" << endl;
}
else
{
for (size_t i = 0; i < vec.size(); i++)
{
cout << *(vec[i]) << endl;
}
cout << "全部信息已经展示完毕。" << endl;
}
}
void SaveInfo()
{
ofstream fout("StudentsInfo.txt", ios_base::app);
for (size_t i = 0; i < vec.size(); i++)
{
fout << vec[i]->Name() << endl;
fout << vec[i]->Money() << endl;
cout << *(vec[i]) << "输入完毕。" << endl;
}
fout.close();
cout << "所有信息存储完毕,存储目录:StudentsInfo.txt" << endl;
}