[设计] C++课程设计-ATM (纪念大一)
来源:互联网 发布:重庆博拉网络董事长 编辑:程序博客网 时间:2024/05/17 22:57
#include <iostream>#include <fstream>#include <string>#include <cstring>#include <vector>#include <cstdlib>#include <cstdio>using namespace std;void shaohou() { for(int i = 0; i < 6; i++) { printf("."); for(int j = 0; j < 40000000; j++) { ; } }}class AccountItem {private:string account; // 账号string passwd; // 密码string name; // 姓名 double pay; // 存款余额public: AccountItem() : account(""), passwd(""), name(""), pay(0) {}AccountItem(string m_account, string m_passwd, string m_name, const double m_pay) { account = m_account; passwd = m_passwd; name = m_name; pay = m_pay;}void display() { // 显示对象 cout << "账号 :\n" << account << endl; cout << "密码 :\n" << passwd << endl; cout << "姓名 :\n" << name << endl; cout << "余额 :\n" << pay << endl;}void write(ofstream& s); // 修改账目void read(ifstream& s); // 读入账目数据bool checkAccount(string m_account) { // 检测信号 if(account == m_account) return true; return false; }string getAccount() { return account; } // 取账号string getPasswd() { return passwd; } // 取密码string getName() { return name; } // 取帐号姓名double getPay() { return pay; } // 得到余额void subPay(double m_pay) { pay -= m_pay; } // 取款后-修改余额 void addPay(double m_pay) { pay += m_pay; } // 存款后-修改存款余额 void modifyPasswd(string m_passwd) { passwd = m_passwd; } // 修改密码 void saveNew(); // 开户用---存入新的数据成员 void addPerson(); // 此函数用于增加新的数据成员bool isNull() { if(account == "") return true; return false; }};void AccountItem::write(ofstream& s) { s << account << endl; s << passwd << endl; s << name << endl; s << pay << endl;}void AccountItem::read(ifstream& s) { //从输入流读入数据 s >> account; s >> passwd; s >> name; s >> pay;};void AccountItem::saveNew() { //--------往里面写用的函数,存入新的成员----------- ofstream outputStream("Account.in", ios::app); if (!outputStream) { cout << "\n对不起!!!打开文件失败!!!!\n" << endl; cout << "按 Enter 键继续" << endl; cin.get(); return; } outputStream << account << "\n" << passwd << "\n" << name << "\n" << pay <<endl; outputStream.close();}void AccountItem::addPerson() { cout << "\n根据下面提示输入新开户人信息\n" << endl; cout << "账号 :"; cin >> account; fflush(stdin); // stdin是默认的输入流文件,对应输入缓冲区,fflush(stdin)的作用就是清空输入缓冲区,避免缓冲区内残存读取函数无法取走的内容! cout << "密码 :"; cin >> passwd; fflush(stdin); cout << "姓名 :"; cin >> name; fflush(stdin); cout << "开户金额 : "; cin >> pay; fflush(stdin); saveNew(); cout << "\n\n\t开户成功,您的账号是 : " << account;cout << "请牢记!" << endl; cout << "\n\n\t您的可用余额为 : " << pay << endl; cout << "\n\n新的账户信息已经保存好!!!!!\n" << endl; cout << "按 Enter 键继续" << endl; cin.get(); //直观的讲就是显示:”按任意键继续。。。“}///* 以下 Accountbook 为帐号表单类。*//////* 新增加一个新的Accountbook类 *//////* 把修改后的账目存储到文件 *///class Accountbook {private : vector<AccountItem> v_Account; // Account 对象数组 size_t accountCount; // 数组中的对象个数public:Accountbook(); //构造函数size_t loadAccountbook(ifstream& inputStream); // 读入账目本void storeAccountbook(ofstream& outputStream); // 为修改账目本写文件AccountItem findItem(string m_account); // 在账目本中一个一个查询,看参数(No-形参)是否与(类似李雷这种)对象的账号匹配bool updateItem(AccountItem item); // 按所给对象修改对象内容,但是账号不能改哦! 修改账目中的一个记录};Accountbook::Accountbook() {v_Account = vector<AccountItem> (100);accountCount = 0;}size_t Accountbook::loadAccountbook(ifstream& inputStream) {size_t i = 0; /// 从文件中读入i个对象while(true) { v_Account[i].read(inputStream); ++i; if(inputStream.fail()) break;}inputStream.close(); // 关闭文件accountCount = i;return accountCount; // 返回读入对象的个数}void Accountbook::storeAccountbook(ofstream& outputStream) {for(size_t i = 0; i < accountCount; ++i) // 将对象组通过流输出到文件 v_Account[i].write(outputStream);outputStream.close();}// 按给定账号在账目本中查询AccountItem Accountbook::findItem(string m_account) {for(size_t i = 0; i < accountCount; ++i) {if(v_Account[i].getAccount() == m_account) return v_Account[i];}return AccountItem(); // 若未查询到,返回一个空对象}//按所给对象修改对象内容,但是账号不能改哦bool Accountbook::updateItem(AccountItem item) {string number = item.getAccount();//按账号在账目本中查询账号与所给对象相同的对象for(size_t i = 0; i < accountCount; i++) {if(v_Account[i].getAccount() == number) {v_Account[i] = item;return true;}}return false;}void g_login() {ifstream inputStream("Account.in");string accNo;Accountbook myAccountbook; // myAccountbook 为 Accountbook 的一个对象AccountItem myItem; // myItem 为 AccountItem 的一个对象 myAccountbook.loadAccountbook(inputStream); // 读入账目本cout << " 请插卡(即输入账号):"; cin >> accNo;myItem = myAccountbook.findItem(accNo); // 在账目本中查询if(myItem.isNull()) {cout << " ★★ 账号不存在!\n\n\n\t☆★\t立宾提醒您重新操作" << endl;return;}//读入密码cout << " 请输入您的个人密码:"; char *pw = new char[20];cin >> pw;//判断密码是否正确if(myItem.getPasswd() != pw) {cout<<"\t您输入的密码错误!\n\n\n\t☆★\t立宾提醒您重新操作"<<endl;return;}double oldPay = myItem.getPay(); //取原存款余额char w = '#'; do { cout << "请选择交易密码 : " << endl; cout << "\n\tG (取钱)" << endl; cout << "\n\tE (存款)" << endl; cout << "\n\tC (查询余额)" << endl; cout << "\n\tX (修改密码)" << endl; cout << "\n\tZ (转账)" << endl; cout << "\n\tT (退卡)" << endl; string sel; cin >> sel; /// 判断用户需要做什么! if(sel == "C" || sel == "c") { //查询存款余额 cout << "\n\n\t余额是 : " << myItem.getPay() << endl; shaohou(); } else if(sel == "X" || sel == "x") { //修改密码 cout<<"\t请输入原密码:"; string pwd; cin >> pwd; if(myItem.getPasswd() != pwd) { cout << "您输入的密码错误!\n\n\n\t☆★\t立宾提醒您重新操作"; } else { cout << "\n\n\t请输入新密码:"; cin >> pwd; string rpwd; cout << "\n\n\t请再输入一次新密码:"; cin >> rpwd; if(rpwd != pwd) { cout << "\n\n\t你输入的两次密码不相同, 请重新操作!" << endl; } else { myItem.modifyPasswd(rpwd); myAccountbook.updateItem(myItem); cout << "\n\n\t密码修改成功,请牢记!" << endl; } /// 修改后的密码写到文件中 ofstream outputStream("Account.in"); myAccountbook.storeAccountbook(outputStream); } } else if(sel == "T"|| sel == "t") {//退卡 cout << " \n\n\n ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★" << endl; cout << "\n\n\n\t 感谢你对本银行的支持,欢迎下次光临!"<< endl; cout << " \n\n ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★" << endl; cout << "\n\n\t☆★ 请取卡 ......" << endl; cout << "\n\n ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★\n"; exit(0); } else if(sel == "E" || sel == "e") { /// 存款 cout << "请选择存款的数量 : " << endl; cout << "\n\t\t1 (存100)" << endl; cout << "\n\t\t2 (存200)" << endl; cout << "\n\t\t5 (存500)" << endl; cout << "\n\t\tA (存1000)" << endl; cout << "\n\t\tB (存2000)" << endl; char count; double ap; cin >> count; if(count == '1') ap = 100; else if(count == '2') ap = 200; else if(count == '5') ap = 500; else if(count == 'A') ap = 1000; else if(count == 'B') ap = 2000; else { cout << "\t\t选择错误" << endl; return; } cout<<"\n\n ★☆★☆请按您选择的存款数量,塞入人民币☆★☆★ "; for(size_t i = 0; i < 4; ++i) { shaohou(); shaohou(); } /// 修改对象的存款余额 myItem.addPay(ap); myAccountbook.updateItem(myItem); ofstream outputStream("Account.in"); myAccountbook.storeAccountbook(outputStream); cout << "\n\n\n ★☆★☆存款成功。您存入了" << ap << "元. ☆★☆★ "; for(size_t i = 0; i < 5; ++i) { shaohou(); } } else if(sel == "Z" || sel == "z") { // 转账 cout << "\t请输入要转到账户的账号:"; string otherAccount; cin >> otherAccount; AccountItem otherItem = myAccountbook.findItem(otherAccount); if(otherItem.isNull()) { cout << " ★★ 账号不存在!\n\n\n\t☆★\t立宾提醒您重新操作" << endl; return; } else { cout << "\t请输入转账金额 : "; double zhuane; cin >> zhuane; oldPay = myItem.getPay(); if(oldPay < zhuane) { cout << "\n\t存款余额不够!\n\n\n\t☆★\t立宾提醒您" << endl; } else { // 修改对象的存款余额 myItem.subPay(zhuane); myAccountbook.updateItem(myItem); //将修改后的账目本写到文件中 ofstream outputStream1("Account.in"); myAccountbook.storeAccountbook(outputStream1); outputStream1.close(); otherItem.addPay(zhuane); /// 修改账目本 myAccountbook.updateItem(otherItem); /// 将修改后的账目本写到文件中 ofstream outputStream2("Account.in"); myAccountbook.storeAccountbook(outputStream2); cout << "转账成功!\n\n\n\t☆★\t立宾提醒您" << endl; outputStream2.close(); shaohou(); shaohou(); shaohou(); } } } else if(sel == "G" || sel == "g") {// 取款 cout << "\t请选择取钱的数量:" << endl; cout << "\n\t\t1 (取100)" << endl; cout << "\n\t\t2 (取200)" << endl; cout << "\n\t\t5 (取500)" << endl; cout << "\n\t\tA (取1000)" << endl; cout << "\n\t\tB (取2000)" << endl; char count; double ap; cin >> count; if(count == '1') ap = 100.; else if(count == '2') ap = 200.; else if(count == '5') ap = 500.; else if(count == 'A') ap = 1000.; else if(count == 'B') ap = 2000.; else { cout << "选择错误" << endl; return; } //判断存款余额是否够 if(oldPay < ap) { cout << "\n\t存款余额不够!" << endl; } else { //修改对象的存款余额 myItem.subPay(ap); //修改账目本 myAccountbook.updateItem(myItem); cout << "\t请取钱!" << endl; //将修改后的账目本写到文件中 ofstream outputStream("Account.in"); myAccountbook.storeAccountbook(outputStream); } } shaohou(); shaohou(); cout << "\n\t你想继续进行其他操作吗?(y/n)" << endl; cin >> w; } while (w == 'y');}int main() { AccountItem tempAccount; while(true) { char xz; cout << "\n\n\t欢迎使用立宾国际ATM系统\n"; cout << "\n\n\t请选择您要执行的操作:\n"; cout << "\n\n\tA.开户服务\n"; cout << "\n\n\tB.登录服务\n"; cout << "\n\n\tC.退出。\n"; cout << "\n\n\t请选择:"; scanf("%c", &xz); switch(xz) { case 'a' : case 'A' : { cout << "\n\n\t【开户服务】"; /// tempAccount.addPerson(); /// 添加新人 break; } case 'b' : case 'B' : { g_login(); break; } case 'c' : case 'C' : { cout << " \n\n\n ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★" << endl; cout << "\n\t★★☆ 感谢您对本本银行的支持,欢迎下次光临! ☆★★\n"; exit(0); } default : { cout << "\n\t您的选择错误!\n\n\n\t☆★\t立宾提醒您重新选择!" << endl; } } cout << "\n\n\t请选择您要执行的操作:\n"; } return 0;}
--------- Account.in ----------
001lilei李雷1000002hanmei韩梅梅1000003wangwenhao王文豪3900004maoxu王冒旭4000005hongwu于洪武2000006xiaofei王小飞900007zhangli张丽丽1000
// ---------------其他美观--------------
void AccountItem::welcome() { for(int i = 0; i < 2; i++) { //可以改变i的值,以美观 cout << "\n\n\n\n\n\n\n\n"; cout << "\t\t\t ●☆★◇◆○●☆★◇◆○●☆★◇◆○\n"; cout << "\t\t\t◎ 欢迎使用立宾国际ATM系统 ●\n"; cout << "\t\t\t ●☆★◇◆○●☆★◇◆○●☆★◇◆○\n"; cout << "\n\n\t\t ★希望立宾国际ATM系统可以时刻给您带来方便!★"; cout << "\n\n\n\n\t\t\t\t 陈立宾将竭诚为您提供优质的服务"; shaohou(); system("cls"); cout << "\n\n\n\n\n\n\n\n"; cout << "\t\t\t ○★☆◆◇●○★☆◆◇●○★☆◆◇●\n"; cout << "\t\t\t● 欢迎使用立宾国际ATM系统 ◎\n"; cout << "\t\t\t ○★☆◆◇●○★☆◆◇●○★☆◆◇● \n"; cout << "\n\n\t\t ☆希望立宾国际ATM系统可以时刻给您带来方便!☆"; cout << "\n\n\n\n\t\t\t\t 陈立宾将竭诚为您提供优质的服务"; shaohou(); system("cls"); }};
- [设计] C++课程设计-ATM (纪念大一)
- 大一C语言课程设计--飞机订票系统
- 大一课程设计(TTMS单机版)
- 北京工业大学 大一C语言课程设计--四子棋(Bingo)(连子游戏)in TurboC 3.0
- 大一结束时候写的课程设计:C词法分析
- 大一上学期课程设计
- C++课程设计----ATM机
- 纪念我的大一
- ATM自助终端及后台管理系统(课程设计)
- 初学java 课程设计ATM机 简易系统(卡片布局)
- 数据结构课程设计——通讯录系统设计(C语言)
- 大一课程设计的几个题目
- Calculator Beta 1.0 (大一课程设计)
- 课程设计:ATM机模拟系统
- 大一的第一篇的C语言课程设计完成了,链表的选择排序
- 大一第一学期c语言课程设计,黑框框简易版学生信息管理系统
- TCP/IP与ATM设计(二)
- ATM取款机数据库设计(完整版)
- Linux C 网络编程——多线程的聊天室实现(客户端)
- #、##和__VA_ARGS__
- 建造模式C语言实现
- Java和C++的对照
- 后缀数组
- [设计] C++课程设计-ATM (纪念大一)
- 神人:http://video.sina.com.cn/playlist/5589145-1880392153-2.html#98417833
- LeetCode Count and Say
- 重学C51之DATA、BDATA、XDATA的区别
- 获取可用驱动器(本地磁盘,光驱,U盘)列表
- UIWebView设置高度
- grub 内核启动参数(kernel command-line parameters)
- XMPP协议简介-什么是XMPP协议?
- 如果数据库提取的数据和所想要的排列顺序有出入的话。