2020-11-16

由于暂时不会在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;
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个 SQL 语句,用于向借阅表中插入数据。该表包含以下字段:借阅编号、读者编号、书籍编号、借阅日期、归还日期、借阅状态。每条数据表示一次借阅记录。其中借阅编号、读者编号、书籍编号、借阅日期和借阅状态是必填项,归还日期为可选项,如果借阅状态为“已还”则必须填写归还日期。 具体插入的数据如下: - 借阅编号:100001,读者编号:123413,书籍编号:0001,借阅日期:2020-11-05,归还日期:NULL,借阅状态:借阅 - 借阅编号:100002,读者编号:223411,书籍编号:0002,借阅日期:2020-9-28,归还日期:2020-10-13,借阅状态:已还 - 借阅编号:100003,读者编号:321123,书籍编号:1001,借阅日期:2020-7-01,归还日期:NULL,借阅状态:过期 - 借阅编号:100004,读者编号:321124,书籍编号:2001,借阅日期:2020-10-09,归还日期:2020-10-14,借阅状态:已还 - 借阅编号:100005,读者编号:321124,书籍编号:0001,借阅日期:2020-10-15,归还日期:NULL,借阅状态:借阅 - 借阅编号:100006,读者编号:223411,书籍编号:2001,借阅日期:2020-10-16,归还日期:NULL,借阅状态:借阅 - 借阅编号:100007,读者编号:411111,书籍编号:1002,借阅日期:2020-9-01,归还日期:2020-9-24,借阅状态:已还 - 借阅编号:100008,读者编号:411111,书籍编号:0001,借阅日期:2020-9-25,归还日期:NULL,借阅状态:借阅 - 借阅编号:100009,读者编号:411111,书籍编号:1001,借阅日期:2020-10-08,归还日期:NULL,借阅状态:借阅

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值