基于C++实现(控制台)校园卡管理系统【100010752】
校园卡管理项目设计
一、实验目的
设计一个校园卡管理系统,包含以下核心功能:
查看卡主和校园卡信息
充值
消费
查余
查询个人消费记录
充值记录
实验环境
本实验可基于 Visual Studio Code 等平台开发,参考主流的编码规范,如 Google C++Style
二、Guide(中文版) 2.1 编程语言和开发工具
编程语言: ANSI C/C++ 开发工具: Visual Studio Code、Dev C++
2.1 编码规范
要求遵循良好的程序设计风格来设计和编写程序。基本编码规范:
标识符的命名要到达顾名思义的程度;
关键代码提供清晰、准确的注释;
程序版面要求:
不同功能块用空行分隔;
一般一个语句一行;
语句缩进整齐、层次分明。 3.实验内容
# include <cstdlib>
# include <cstring>
# include <deque>
# include <iomanip>
# include <iostream>
# include <string>
# include "Student.cpp"
# include "Student.hpp"
# include "Card.cpp"
# include "Card.hpp"
#define MAX 10000
using namespace std;
void ManagerFunction();
void StudentFunction();
Student *students[MAX] = {NULL};
Card *cards[MAX] = {NULL};
int main()
{
int select;
do
{
cout << "欢迎使用校园卡管理系统!请选择您的身份(输入序号):
" << endl;
cout << "1:校园卡管理员" << endl;
cout << "2: 学生用户" << endl;
cout << "3: 退出系统" << endl;
cin >> select;
switch (select)
{
case 1:
ManagerFunction();
break;
case 2:
StudentFunction();
break;
case 3:
break;
default:
cout << "抱歉,该身份无效!" << endl;
break;
}
cout << endl;
} while (select!=3);
cout << endl;
cout << "已退出系统!" << endl;
for (int i = 0; i < MAX; i++) {
if(students[i]!=NULL)
delete students[i];
if(cards[i]!=NULL)
delete cards[i];
}
return 0;
}
根据校园卡或管理员身份设计功能,其中校园卡管理员的权利包括:
void ManagerFunction()
{ void CreateStudent();
void CreateCard();
void Transfer();
void DeleteCard();
void DeleteStudent();
……
}
学生类的权利包括:
void Check();
void Activate();
void Charge();
void ChargeCard();
void ChargeWater();
void Consume();
void Loss();
……
分析与设计简要描述程序设计的过程,包括设计思路,设计要点及特色;程序的不足与改进等。要求画出程序的简单流程图。
三、需求分析:
校园卡管理员
导入学生信息:向系统中导入学生信息(名字、学院、年级、班级、专业、学号)
给在校生绑定校园卡(卡号,余额、充值记录、消费记录、校园卡状态、水控服务)
转移校园卡内的金额:学生本人申请办理新卡时,可将原账户的余额转移到新卡中
注销校园卡:校园卡一经注销后无法使用。丢失校园卡后要重新办理的学生,需将原来绑定的校园卡注销后再办理新卡。
删除学生信息:当学生毕业或退学,管理员可将系统中的学生信息删除。
学生用户
查看校园卡信息(卡号,余额、充值记录、消费记录、校园卡状态、水控服务)
激活校园卡:设置密码
充值校园卡:校园卡充值限额为 100~500 元
消费:学生可到食堂超市(第一饭堂、第二饭堂、第三饭堂、第四饭堂、行政楼餐厅、清真食堂、教育超市、快乐多超市)进行消费。可通过热水账户的金额使用热水(洗澡)。
挂失与解挂:校园卡丢失后,学生可进行挂失,挂失后的校园卡无法使用。若校园卡被找回,可进行解挂,解挂后校园卡可以继续使用。
四,系统功能图
4.2 流程图
类结构设计
4.3 学生类
class Student {
const string Name;
int ID,Department, Major, Grade, Class;
Card *card;
5.
public:
Student(string Name_, int ID_,int Department_, int Major_, int G rade_, int Class_);
void setCard(Card *);
void Check();
void Activate();
void Charge();
void ChargeCard();
void ChargeWater();
void Consume();
void Loss();
16.
string getName()const {
return Name;
}
int getID()const {
return ID;
}
int getDepartment()const {
return Department;
}
int getMajor()const {
return Major;
}
int getGrade()const {
return Grade;
}
int getClass()const {
return Class;
}
23.
24. Card *getCard() const {
return card;
}
25.
};
校园卡类
class Card{
const int Number;
string Password;
double Value, WaterAccount;
state State;
Student *student;
deque<ChargeRecord*> charge_record;
deque<ConsumeRecord*> consume_record;
deque<WaterRecord*> water_record;
public:
Card(int Num, Student *);
bool isChecked();
void add(double amount);
void minus(double amount);
void addWater(double amount);
void minusWater(double amount);
void setState(state);
void setPassword(string);
void recordCharge(ChargeRecord *);
void recordConsume(ConsumeRecord *);
void recordWater(WaterRecord *);
void printCharge() const;
void printConsume() const;
void printWater() const;
int getNum()const { return Number; }
double getValue()const { return Value; }
double getWaterAccount()const { return WaterAccount; }
int getState()const { return State; }
};
记录类及其派生出的充值记录类、消费记录类、热水使用记录类
class Record{
int Month, Day, Hour, Minute, Second;
double Amount;
public:
Record(double amount=0);
void set(double amount) { Amount = amount; }
void Print_Record()const;
};
class ChargeRecord:public Record{
int Method;
public:
ChargeRecord(double amount );
void Print_ChargeRecord() const;
};
class ConsumeRecord:public Record{
int Place;
public:
ConsumeRecord(double amount);
void Print_ConsumeRecord() const;
};
class WaterRecord:public Record{
int Time;
public:
WaterRecord(int );
void Print_WaterRecord() const;
};
类关系图:
细节设计
int select;
do {
… cout << "3: 退出" << endl;
cin >> select;
switch (select)
{
case … case 3:
break;
default:
cout << "抱歉,该身份无效!" << endl;
break;
}
cout << endl;
} while (select!=3);
每一次选择都保证选项有效,且只有用户选择退出时才退出。
cout << "\n 请输入学生学号:" << endl;
cin >> ID;
while (ID < 0 || ID >= MAX)
{
cout << "\n 学号格式错误!请输入正确的学号:" << endl;
cin >> ID;
}
if (students[ID] != NULL)
{
cout << "\n 该学生信息已存在!请重新输入:" << endl;
return;
}
cout << "\n 请输入转出账户卡号:" << endl;
cin >> from;
while (from < 0 || from >= MAX)
{
cout << "\n 卡号格式有误!请重新输入:" << endl;
cin >> from;
}
while (cards[from] == NULL)
{
cout << "\n 该账户不存在!请重新输入:" << endl;
cin >> from;
}
每次输入学号或卡号都会检查学号和卡号的正确性,若学号或卡号的格式正确,将会判断该学生信息或校园卡是否存在系统中。
…
case 2:if(students[ID]->getCard()->getState()==LOST){
cout << endl;
cout << "此卡处于挂失状态无法充值!" << endl;
}
else
students[ID]->Charge();
break;
case 3:if(students[ID]->getCard()->getState()==LOST){
cout << endl;
cout << "此卡处于挂失状态无法进行消费!" << endl;
}
else
students[ID]->Consume();
break;
当校园卡处于挂失状态时无法进行充值和消费。
4.
if (students[ID]->getCard()->getState() == OFF)
{
cout << "您的校园卡尚未激活,是否激活校园卡?\n输入1激活,输入0退出:" << endl;
cin >> select;
if (select) students[ID]->Activate();
else return;
}
… case 4:if (students[ID]->getCard()->isChecked())
students[ID]->Loss();
…
若学生要激活校园卡、挂失或解挂,将要验证密码。
bool Card::isChecked() {
string temp;
for (int i = 9; i >= 0; i--) {
cout << endl;
cout << "请输入校园卡密码:" << endl;
cin >> temp;
if(temp==Password) {
cout << "密码正确!" << endl;
return true;
}
else cout << "密码错误!还剩 " << i << " 次机会" << endl;
}
cout << "机会已用完!验证失败。" << endl;
return false;
}
验证密码共有 10 次机会,若密码正确则返回 true,若 10 次输入都密码错误将返回 false,同时提示验证失败。
…
case 1:
cout << endl;
cout << "当前余额为:" << card->getValue() << " 元" << endl;
cout << "请输入消费金额:" << endl;
in >> amount;
if(amount > card->getValue())
cout << "校园卡余额不足!" << endl;
else{
card->minus(amount);
card->recordConsume(new ConsumeRecord(amount));
cout << endl;
cout << "成功消费 " << amount << " 元!" << endl;
cout << "当前余额:" << card->getValue() << " 元" << endl;
}
break;
Record::Record(double amount):Amount(amount){
cout << "\n 请输入日期(月、日,用空格隔开):" << endl;
cin >> Month >> Day;
cout << "\n 请输入当前时间(时、分、秒,用空格隔开):" << endl;
cin >> Hour >> Minute >> Second;
}
ChargeRecord::ChargeRecord(double amount):Record(amount){
cout << endl;
cout << "请选择支付方式:" << endl;
for (int i = 0; i < 3;i++){
cout << i + 1 << ":" << method[i] << endl;
}
cin >> Method;
cout << endl;
cout << "成功充值 " << amount << " 元!" << endl;
}
学生每次进行充值、消费、使用热水都会进行记录,记录金额、日期(月、日)、时间(时、分、秒)、支付方式或消费地点等信息。
实验结果样例说明:
1 1 //新生入学,校园卡管理员为新生录入学生信息 0123
//学号 张三 //姓名 1
//选择院系,数据科学与计算机学院 1
//选择专业,计算机系 2019
//年级,即入学年份 3
//班级 2
//绑定校园卡,卡号随机且具有唯一性 0123 6
//退出 2
//登入学生系统 0123
//输入学号 1
//激活校园卡 000000
//输入初始密码 123456
//输入新密码 2
//充值校园卡 1
//余额充值 600
//输入充值金额,大于限额(500 元)时提示充值失败 100
//输入正确金额,充值成功 12 25
//输入充值的日期(月、日) 12 12 12
//时间(时、分、秒) 1 //选择支付方式。生成充值记录。 3
//退出 3 //消费 1
//饭堂超市消费 101
//消费金额大于余额时,消费失败 1
//重新选择饭堂超市消费 10
//输入消费金额 12 25
//输入信息生成消费记录 12 12 13 1 3
//退出 1
//查询 3
//查看充值记录 4
//查看消费记录 6
/退出查询 5
//退出学生系统 3
//退出系统,关闭程序
实验结果:
♻️ 资源
大小: 2.21MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87430282
注:如当前文章或代码侵犯了您的权益,请私信作者删除!
相关文章
- 托管C++线程锁实现 c++11线程池
- [c++菜鸟]《Accelerate C++》习题解答
- C++ 通讯录管理系统
- 开源免费的C/C++网络库(c/c++ sockets library)补充
- 基于QT(C++)实现学生成绩管理系统【100010715】
- 基于C++实现的(控制台)景区管理系统【100010671】
- 基于C++实现的(控制台)酒店管理系统【100010667】
- 基于QT(C++)+Oracle实现的(界面)教务管理系统【100010664】
- 基于C++实现(控制台)学籍管理系统【100010507】
- 基于C++实现(控制台)家谱管理系统【100010501】
- 基于C++实现(控制台)校友录管理系统【100010421】
- 基于QT(C++)实现(图形界面)选课管理系统【100010320】
- 基于QT(C++)OOP 实现(界面)酒店预订与管理系统【100010195】
- 基于C++实现(控制台)简易学生学籍管理系统【100010146】
- 基于QT(C++)+SQLServer实现(WinForm)超市管理系统【100010143】
- 基于C++实现(控制台)计费管理系统【100010055】
- 基于C++开发的(控制台)学生管理系统【100010039】
- 基于C++实现(WinForm)家谱管理系统【100010033】
- 基于C++实现(控制台)仓库管理系统【100010021】
- 基于C++实现(控制台)模拟网上购书订单管理系统【100010011】
- 教务管理系统C++文件系统【100010006】
- C++实现【通讯录】管理系统