原贴地址:
超市作为市民日常生活消费的主要场所,随着社会的发展,超市作为信息资源的集散地的现象日趋明显,各种促销方式,各种消费手段,是超市的业务量更大,收入更高,工作量更大。为了管理超市商品和会员和VIP信息以及计算商品价格和统计收入,我们根据超市收银台所需要的实际管理系统进行了全面的分析处理。通过设计合理的函数,通过C++设计出本程序。
系统针对超市收银系统和商品管理系统,面对大量纷繁复杂的管理操作,对不同商品的增加和删除和更改信息,以及消费者信息的维护,需要设计一个合理的系统,它应包括商品类,会员类,和基于会员类的VIP类和超市的收入信息,建立本超市管理系统8的目的是实现无纸化超市收管理,减轻管理员的工作量,实现收银维护和信息上架的一体化管理,并要求对管理员进行身份验证。
原系统为超市收银系统,分为收银模块,顾客模块,商品模块和账单模块,顾客又分为普通顾客,会员和VIP;会员用户可转为VIP;系统功能丰富,采用文件存储方法,而且是采用分txt的存储方式,与我之前熟悉的单txt存储方式不同,开拓了我的眼界,受益匪浅。
一,完善页面和代码
简单阅读源代码,发现其采用的是单一文件的编写方式,不便于阅读和管理,所以我将源代码按类进行了拆分。在拆分后,发现主函数文件中仍有大量为了优化UI的函数,本着主函数尽量简单的原则,我将这些函数合并为contents类。
下图是拆分后的项目:
拆分完成后,我又发现原系统很少有清屏功能,同时又有界面颜色的转换,使系统在使用时很不整洁,不便于使用(如下图)
所以我为原系统添加了清屏功能,减少了一些界面颜色的转换,使界面更加简洁(如下图)
原系统在指引界面漏写了商品文件夹,使系统无法读取和更改商品数据,我也进行了补充(如下图)
二,修复bug
除了界面问题,原系统还存在一些bug,我也进行了完善:
① 修改VIP用户信息时,会使文件名消失,使后续更改无法进行:
经过测试,我发现这个bug是因为修改了VIP卡号,本系统是依据卡号对顾客信息进行寻找的,如果修改卡号,则会导致bug产生,所以我将这部分代码进行了修改,消除了这个bug:
②在添加,修改顾客电话号码时,总会出现bug,不是只能存下1位电话号码,就是出现乱码:
经过测试,bug是在拆分文件后出现的,因为数据类型在主函数中进行了重新定义,而我在拆分文件时忽略了,所以导致了这个bug。于是我干脆将电话号码的数据类型改为char类型,方便存储,节省空间:
③计算账单功能有bug,在原贴的评论区里也有人发现了这个bug:
这部分的bug有两个原因:
代码使用不准确。计算特定日子总收入时使用了从VIP,会员等各个分文件中读取当日消费总额,写入总txt,最后从总txt中读取并计算,但每次读取时都使用的是ios::app,这种追加的方法,而且没有清空txt的函数。因此每次查询都会将数据留在总txt中,下次读取的数据就是两次查询的累加
代码编写错误。账单在txt中的存储形式如下图,而在代码读取时写了多余的读取,舍弃了有用的数据,使总价计算不正确。
发现上述bug,我将它们进行了修复,现在这个功能已经可以正常使用:
三,增加功能
除了上述修补和美化外,我还为收银员添加了一个简单的密码系统:
四,代码
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
#include "Product.h"
#include "Member.h"
#include "Vip.h"
#include "contents.h"
using namespace std;
int main()
{
contents con;
system("color 06f");
extern string td;
cout<<"请输入当前日期(年/月/ 日):";
cin>>td;
double income=0,flag1=0,flag2=0;
int c=1,cho=1,k,p;
cout<<" ********************************************************"<<endl;
cout<<" 欢迎使用!收银员系统(!请仔细阅读使用说明!) "<<endl;
cout<<" ********************************************************"<<endl;
cout<<" please press 1!"<<endl;
cout<<" 使用说明 "<<endl;
cout<<" 一.请按提示输入要的选项"<<endl;
cout<<" 二.请先在F盘建立文件夹‘收银员系统’"<<endl;
cout<<" 并在其下建立五个文件夹"<<endl;
cout<<" ①收银员 ②会员 ③VIP ④收入 ⑤商品"<<endl;
cout<<" 三.请在收入文件夹中建立三个文件夹"<<endl;
cout<<" ①会员收入 ②VIP收入 ③普通收入"<<endl;
cout<<" 四.如需要改变路径,请联系相关技术人员"<<endl;
cout<<" 五.系统还在测试阶段,谢谢使用!"<<endl;
cin>>c;
if(c!=1)
{
cout<<"please press 1!"<<endl;
cin>>c;
}
while(c!=0)
{
system("cls");
cout<<" ☆☆☆☆☆ 欢 迎 使 用! ☆☆☆☆☆"<<endl;
cout<<" 收银员系统-------------1"<<endl;
cout<<" 退 出-----------------2"<<endl;
cin>>c;
if(c==1)
{
c=con.charge();
}
system("cls");
if(c=='a')
{
cout<<" 收银系统----------------1"<<endl;
cout<<" 返 回------------------2"<<endl;
cout<<" 退 出------------------3"<<endl;
cin>>k;
if(k==2)
{c=2;continue;}
system("cls");
while(k==1)
{
int flag3=0;
if(flag1==0) p=con.shouying_system();
if(p==1) {flag2=con.productpay_system(td);}
else if(p==2) {flag2=con.member_system();}
else if(p==3) {flag2=con.vip_system();}
else if(p==4) {flag2=con.productmanage_system();}
else if(p==5) {flag3=1;flag2=con.showincome_system();}
else if(p==6) {k=2; flag1=0; flag2=0; continue;}
if(flag2==1)
{
if(flag3==0) system("cls");
p=con.shouying_system();
flag1=1;
}
}
if(k==3)
exit(1);
}
if(c==2) exit(1);
}
return 0;
}
#ifndef PRODUCT_H
#define PRODUCT_H
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
using namespace std;
class Product
{
private: //私有数据成员
double price;
char name[30];
long number;
public: //成员函数
double getprice() //获取商品价格
{return price;}
char *getname() //获取商品名
{return name;}
long getnumber() //获取商品条形码
{return number;}
double setprice() //设置价格
{
cout<<"请 输 入 价 格 : ";
cin>>price;
}
string setname() //设置商品名
{
cout<<"请 输 入 商 品 名 : ";
cin>>name;
}
void setnumber() //设置商品条形码
{
cout<<"请 输 入 商 品 条 形 码 : ";
cin>>number;
}
void addproduct(); //增加商品
void search(); //查找商品信息
void change(); // 更改商品信息
void display(); //显示商品信息
int del(int k=0); //删除商品信息
};
#endif
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
#include "Product.h"
#include "Member.h"
#include "Vip.h"
using namespace std;
void Product::addproduct() //增加商品
{
string pnumber,nam;
int k=0;
cout<<"请 输 入 商 品 条 形 码 : ";
cin>>pnumber;
nam="F:\\收银员系统\\商品\\"+pnumber+".txt";
ifstream infile(nam.c_str());
if(infile)
{
cout<<" 该商品已存在,请重新选择!"<<endl;
k=1;
infile.close();
}
infile.close();
if(k==0)
{
ofstream outfile(nam.c_str());
if(!outfile)
{
cout<<" 系统出现错误,请重新保存!"<<endl;
}
if(outfile)
{
outfile<<setw(20)<<"商品条形码:"<<pnumber<<endl;
cout<<"请 输 入 商 品 价 格 : ";
cin>>price;
outfile<<setw(20)<<"商品价格:"<<price<<endl;
cout<<"请 输 入 商 品 名 : ";
cin>>name;
outfile<<setw(20)<<"商品名:"<<name<<endl;
outfile.close();
cout<<" 保存商品成功!"<<endl;
}
}
}
void Product::search() //查找商品信息
{
string pnumber,nam;
cout<<"请 输 入 商 品 条 形 码: ";
cin>>pnumber;
nam="F:\\收银员系统\\商品\\"+pnumber+".txt";
ifstream infile(nam.c_str());
if(!infile)
{
cout<<" 未找到该商品,请核对 !"<<endl;
}
else
{
cout<<" 该商品存在,详情请查询所有信息 !"<<endl;
infile.close();
}
}
void Product::change() // 更改商品信息
{
string pnumber,nam;
int m=0;
m=del(1);
if(m==1)
{
nam="F:\\收银员系统\\商品\\"+pnumber+".txt";
ofstream outfile(nam.c_str());
if(outfile)
{
cout<<" 请 输 入 更 改 后 的 商 品 信 息 !";
cout<<" 商 品 名 : ";
cin>>name;
cout<<" 商 品 条 形 码 : ";
cin>>number;
cout<<" 商 品 价 格 : ";
cin>>price;
outfile<<setw(20)<<"商品条形码:"<<number<<endl;
outfile<<setw(20)<<"商品价格:"<<price<<endl;
outfile<<setw(20)<<"商品名:"<<name<<endl;
outfile.close();
}
}
}
void Product::display() //显示商品信息
{
string pnumber,nam;
cout<<"请 输 入 要 查 找 商 品 条 形 码 :";
cin>>pnumber;
nam="F:\\收银员系统\\商品\\"+pnumber+".txt";
ifstream infile(nam.c_str());
if(!infile)
{
cout<<" 该商品不存在,请核对!"<<endl;
}
else
{
cout<<" 该商品存在!商品信息如下:"<<endl;
string s;
while(getline(infile,s))
{
cout<<s<<endl;
}
}
infile.close();
}
int Product::del(int k) //删除商品信息
{
string pnumber,nam;
cout<<"请 输 入 商 品 条 形 码 : ";
cin>>pnumber;
nam="F:\\收银员系统\\商品\\"+pnumber+".txt";
ifstream infile(nam.c_str());
if(!infile)
{
cout<<" 该商品不存在,请核对!"<<endl;
return 0;
}
else
{
infile.close();
DeleteFile(nam.c_str());
if(k==0) cout<<" 删除成功!"<<endl;
return 1;
}
}
#ifndef MEMBER_H
#define MEMBER_H
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
class Member
{
private:
char name[30];
int number;
char pnumber[11];
public:
void addcustomer(); //增加会员
int search(int k=0); //查找会员
void change(); // 更改会员信息
void display(); //显示会员信息
int del(int k=0); //删除会员信息
};
#endif
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
#include "Product.h"
#include "Member.h"
#include "Vip.h"
using namespace std;
void Member::addcustomer() //增加会员
{
string cnumber,nu;
int k=0;
cout<<"请 输 入 会 员 卡 号 : ";
cin>>cnumber;
nu="F:\\收银员系统\\会员\\"+cnumber+".txt";
ifstream infile(nu.c_str());
if(infile)
{
cout<<" 该会员已存在,请重新输入选择!"<<endl;
k=1;
infile.close();
}
infile.close();
if(k==0)
{
ofstream outfile(nu.c_str());
if(!outfile)
{
cout<<" 系统出现错误,请重新保存!"<<endl;
}
if(outfile)
{ cout<<"请 输 入 会 员 手 机 号 : ";
cin>>pnumber;
cout<<"请 输 入 会 员 姓 名 : ";
cin>>name;
outfile<<setw(20)<<"会员名:"<<name <<endl;
outfile<<setw(20)<<"会员卡号:"<<cnumber<<endl;
outfile<<setw(20)<<"会员手机号:"<<pnumber<<endl;
outfile.close();
cout<<" 保存会员成功!"<<endl;
}
}
}
int Member::search(int k) //查找会员
{
string cnumber,nu;
cout<<"请输入会员卡号";
cin>>cnumber;
nu="F:\\收银员系统\\会员\\"+cnumber+".txt";
ifstream infile(nu.c_str());
if(!infile)
{
cout<<"未找到该会员,请核对!"<<endl;
return 0;
}
if(infile)
{
if(k==0) cout<<"该会员存在,详情请查询所有信息 !"<<endl;
infile.close();
return 1;
}
}
void Member::change() // 更改会员信息
{
string cnumber,nu;
int m=1;
m=del(1);
if(m==1)
{
cout<<" 请输入更改后的会员信息!";
cout<<"会 员 卡 号: ";
cin>>cnumber;
nu="F:\\收银员系统\\会员\\"+cnumber+".txt";
ofstream outfile(nu.c_str());
if(outfile)
{
cout<<"会 员 名 : ";
cin>>name;
cout<<"会 员 手 机 号 :";
cin>>pnumber;
outfile<<setw(20)<<"会员姓名:"<<name<<endl;
outfile<<setw(20)<<"会员卡号:"<<cnumber<<endl;
outfile<<setw(20)<<"会员手机号:"<<pnumber<<endl;
outfile.close();
}
}
}
void Member::display() //显示会员信息
{
string cnumber,nu;
cout<<"请 输 入 要 查 找 会 员 的 会 员 卡 号 :";
cin>>cnumber;
nu="F:\\收银员系统\\会员\\"+cnumber+".txt";
ifstream infile(nu.c_str());
if(!infile)
{
cout<<" 该会员不存在,请核对!"<<endl;
}
else
{
cout<<" 该会员存在!会员信息如下:"<<endl;
string s;
while(getline(infile,s))
{
cout<<s<<endl;
}
}
}
int Member::del(int k) //删除会员信息
{
string cnumber,nu;
cout<<"请 输 入 会 员 卡 号 : ";
cin>>cnumber;
nu="F:\\收银员系统\\会员\\"+cnumber+".txt";
ifstream infile(nu.c_str());
if(!infile)
{
cout<<" 该会员不存在,请核对!"<<endl;
return 0;
}
if(infile)
{
infile.close();
DeleteFile(nu.c_str());
if(k==0) cout<<"删除成功!"<<endl;
return 1;
}
}
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
#include "Product.h"
#include "Member.h"
#include "Vip.h"
using namespace std;
int Vip::addvip() //增加vip
{
string vnumber,vn;
int k=0;
cout<<"请 输 入 VIP 卡 号: ";
cin>>vnumber;
vn="F:\\收银员系统\\VIP\\"+vnumber+".txt";
ifstream infile(vn.c_str());
if(infile)
{
cout<<" 该VIP已存在,请重新选择!"<<endl;
k=1;
infile.close();
}
if(k==0)
{
ofstream outfile(vn.c_str());
if(!outfile)
{
cout<<" 系统出现错误,请重新保存!"<<endl;
}
if(outfile)
{
cout<<"请 输 入 VIP 手 机 号:";
cin>>pnumber;
cout<<"请 输 入 VIP 姓 名: ";
cin>>name;
//cout<<pnumber;
outfile<<setw(20)<<"VIP姓名:"<<name <<endl;
outfile<<setw(20)<<"VIP卡号:"<<vnumber<<endl;
outfile<<setw(20)<<"VIP手机号:"<<pnumber<<endl;
outfile.close();
cout<<" 保存VIP成功!"<<endl;
return 1;
}
}
}
void Vip::searchvip() //查找vip
{
string vnumber,vn;
cout<<"请 输 入 vip 卡 号 : ";
cin>>vnumber;
vn="F:\\收银员系统\\VIP\\"+vnumber+".txt";
ifstream infile(vn.c_str());
if(!infile)
{
cout<<" 未找到该vip,请核对"<<endl;
}
else
{
cout<<" 该vip存在,详情请查询所有信息 !"<<endl;
infile.close();
}
}
void Vip::changevip() // 更改vip信息
{
string vnumber,vn;
int m=0;
m=delvip(1);
if(m==1)
{
vn="F:\\收银员系统\\VIP\\"+vnumber+".txt";
ofstream outfile(vn.c_str());
if(outfile)
{
cout<<" 请输入更改后VIP信息!\n";
cout<<"vip 姓 名 : ";
cin>>name;
cout<<"vip 手 机 号 码 : ";
cin>>pnumber;
outfile<<setw(20)<<"VIP卡号:"<<numbervip<<endl;
outfile<<setw(20)<<"VIP姓名:"<<name<<endl;
outfile<<setw(20)<<"VIP手机号:"<<pnumber<<endl;
outfile.close();
}
}
}
void Vip::displayvip() //显示vip信息
{
string vnumber,vn;
cout<<"请 输 入 要 查 找 vip 的 vip 卡 号:";
cin>>vnumber;
vn="F:\\收银员系统\\VIP\\"+vnumber+".txt";
ifstream infile(vn.c_str());
if(!infile)
{
cout<<" 该vip不存在,请核对!"<<endl;
}
else
{
cout<<" 该vip存在!vip信息如下:"<<endl;
string s;
while(getline(infile,s))
{
cout<<s<<endl;
}
infile.close();
}
}
int Vip::delvip(int k) //删除vip信息
{
string vnumber,vn;
cout<<"请 输 入 vip 卡 号 : ";
cin>>vnumber;
vn="F:\\收银员系统\\VIP\\"+vnumber+".txt";
ifstream infile(vn.c_str());
if(!infile)
{
cout<<" 该vip不存在,请核对!";
return 0;
}
if(infile)
{
infile.close();
DeleteFile(vn.c_str());
if(k==0) cout<<"删除成功!"<<endl;
return 1;
}
}
void Vip::memv() //member变成VIP
{
int flag=0,flag1=0;
Member m;
flag=m.search(1);
if(flag==1)
{
cout<<" 该会员存在!请继续!"<<endl;
while(flag1==0) flag1=addvip();
m.del(1);
}
}
#ifndef VIP_H
#define VIP_H
class Vip : public Member
{
private:
char name[30];
int numbervip;
char pnumber[12];
public:
int addvip(); //增加vip
void searchvip(); //查找vip
void changevip(); // 更改vip信息
void displayvip(); //显示vip信息
int delvip(int k=0); //删除vip信息
void memv();
};
#endif
#ifndef CONTENTS_H
#define CONTENTS_H
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
#include "Product.h"
#include "Member.h"
#include "Vip.h"
class contents
{
public:
int charge();
int shouying_system();
int productpay_system(string td);
int member_system();
int vip_system();
int productmanage_system();
int showincome_system();
// string ReadLine(char *filename,int line);
};
#endif
#include "contents.h"
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<ctime>
#include<windows.h>
#include <string>
#include<conio.h>
#include "Product.h"
#include "Member.h"
#include "Vip.h"
string td;
using namespace std;
int contents::charge() //收银员系统
{
system("cls");
system("color 5f");
int cchoice;
char name[20];
while(cchoice!=0)
{
if(cchoice!=3)
{
cout<<" ╭------------< 收银员 >-----------╮"<<endl;
cout<<" ∣ ∣"<<endl;
cout<<" ├-----------------------------------┤"<<endl;
cout<<" ∣ 1.收银员注册 ∣"<<endl;
cout<<" ∣ 2.收银员登陆 ∣"<<endl;
cout<<" ∣ 3.返 回 ∣"<<endl;
cout<<" ╰-----------------------------------╯"<<endl;
cout<<" 请选择您要服务的类别:";
cin>>cchoice;
system("cls");
if((cchoice!=1)&&(cchoice!=2)&&(cchoice!=3))
{
cout<<" 输入有误,请重新输入!"<<endl;
continue;
}
}
if(cchoice==1)
{
string ad,wn,pw,rpw;
int key=1;
cout<<"请 输 入 工 号 : ";
cin>>ad;
wn="F:\\收银员系统\\收银员\\"+ad+".txt";
ifstream infile(wn.c_str());
if(infile)
{
cout<<" 已注册!"<<endl;
continue;
}
ofstream outfile(wn.c_str());
if(!outfile)
{
cout<<" 有错误,请重试!"<<endl;
continue;
}
cout<<"请 输 入 姓 名 : ";
cin>>name;
while(key){
cout<<"请 输 入 密 码 (不超过10位) :";
// char ch;
// while ((ch=_getch())!=13)
// {
// pw+=ch;//string对象重载了+=
// cout<<"*";
// }
cin>>pw;
// char cho;
cout<<"请 再 次 输 入 密 码,确 保 无 误:";
// while ((cho=_getch())!=13)
// {
// rpw+=cho;//string对象重载了+=
// cout<<"*";
// }
cin>>rpw;
if(pw==rpw){
key=0;
outfile<<setw(10)<<"姓名: "<<name<<endl;
outfile<<setw(10)<<"工号: "<<ad<<endl;
outfile<<pw<<endl;
outfile.close();
}
else{
key=1;
cout<<" 两次输入密码不同,请检查后再次输入"<<endl;
}
}
cout<<" 欢迎!注册成功!"<<endl;
}
if(cchoice==2)
{
string wn,ad,pw,cpw;
int i=0;
cout<<"请 输 入 你 的 工 号 : ";
cin>>ad;
wn="F:\\收银员系统\\收银员\\"+ad+".txt";
ifstream infile(wn.c_str());
{
if(infile)
{
cout<<"请输入密码:";
cin>>pw;
while(getline(infile,cpw)&&i<2){i++;}
if(cpw==pw){
cout<<" ☆☆☆☆☆ 欢 迎 光 临 ☆☆☆☆☆"<<endl;
return 'a';
}
else{
cout<<" 密码错误!"<<endl;
}
}
if(!infile)
{
cout<<" 您的输入有误,请您核对!"<<endl;
}
}
continue;
}
if(cchoice==3)
return 2;
}
return 0;
}
int contents::shouying_system()
{ system("cls");
system("color 3b");
int cho=1;
while(cho!=0)
{
cout<<" ☆☆☆☆☆☆☆☆ 超市收银系统 ☆☆☆☆☆☆☆☆"<<endl;
cout<<" ********************************************************"<<endl;
cout<<" * 商品支付系统---------------------------1 *"<<endl;
cout<<" * 会员管理系统---------------------------2 *"<<endl;
cout<<" * VIP 管理系统---------------------------3 *"<<endl;
cout<<" * 商品管理系统---------------------------4 *"<<endl;
cout<<" * 查看超市收入情况-----------------------5 *"<<endl;
cout<<" * 返 回----------------------------------6 *"<<endl;
cout<<" ********************************************************"<<endl;
cout<<" 请输入您的指令!"<<endl;
cin>>cho;
system("cls");
if(cho==1){return 1;}
if(cho==2){return 2;}
if(cho==3){return 3;}
if(cho==4){return 4;}
if(cho==5){return 5;}
if(cho==6){return 6;}
}
}
int contents::productpay_system(string td)
{ system("cls");
SYSTEMTIME sys;
GetLocalTime(&sys);
system("color 0F" );
double income=0,total,price,quantity;
string pn,pm,mov,s;
int f,k,flag=0,flag1=1,flag2=1;
while(flag==0)
{
if(flag1==2)
{
cout<<" 1.继续支付商品 2.返回收银系统";
cin>>flag2;
}
if(flag2==2) return 1;
if(flag2==1)
{
cout<<"请 输 入 商 品 条 形 码 :";
cin>>pn;
pm="F:\\收银员系统\\商品\\"+pn+".txt";
ifstream infile(pm.c_str());
if(!infile)
{
cout<<" 未找到该商品!"<<endl;
cout<<"1.重 新 输 入 2.返 回";
cin>>k;
if(k==1)
{
k=0;
continue;
}
if(k==2) {f=0,flag=0;flag1=2;}
}
if(infile)
{
while(getline(infile,s))
{
cout<<s<<endl;
}
cout<<"请输入商品单价:";
cin>>price;
cout<<"请输入重量或质量:";
cin>>quantity;
cout<<"1:会员 2:VIP 3:普通顾客"<<endl;
cout<<"(请询问,若是会员或VIP请输入相应数字进入系统)";
cin>>f;
}
while(f==1)
{
string a,mn;
cout<<"请 会 员 卡 号 :";
cin>>a;
mn="F:\\收银员系统\\会员\\"+a+".txt";
ifstream infile(mn.c_str());
if(!infile)
{
cout<<" 未找到该会员!"<<endl;
cout<<"1.重 新 输 入 2.返 回";
cin>>k;
if(k==1)
{
k=0;
continue;
}
if(k==2) {f=0,flag=0;flag1=2;}
}
if(infile)
{
string in;
string date;
total=price*quantity*0.9;
income=income+total;
cout<<"应 付 金 额 :"<<total<<endl;
in="F:\\收银员系统\\收入\\会员收入\\"+td+".txt";
ofstream outfile(in.c_str());
outfile<<income<<'\t'<<sys.wSecond<<'/'<<sys.wMinute<<'/'<<sys.wHour<<endl;
f=0,flag=0;flag1=2;
}
}
while(f==2)
{
string b,vn;
cout<<"请 输 入 VIP 卡 号 :";
cin>>b;
vn="F:\\收银员系统\\VIP\\"+b+".txt";
ifstream infile(vn.c_str());
if(!infile)
{
cout<<" 未找到该vip!"<<endl;
cout<<"1.重 新 输 入 2.返 回";
cin>>k;
if(k==1)
{
k=0;
continue;
}
if(k==2) {f=0,flag=0;flag1=2;}
}
if(infile)
{
infile.close();
total=price*quantity*0.8;
income=income+total;
string in;
string date;
cout<<"应 付 金 额:"<<total<<endl;
in="F:\\收银员系统\\收入\\VIP收入\\"+td+".txt";
ofstream outfile(in.c_str());
outfile<<income<<'\t'<<sys.wSecond<<'/'<<sys.wMinute<<'/'<<sys.wHour<<endl;
f=0,flag=0;flag1=2;
}
}
while(f==3)
{
total=price*quantity;
cout<<"应付金额:"<<total<<endl;
income=income+total;
string in;
string date;
in="F:\\收银员系统\\收入\\普通收入\\"+td+".txt";
ofstream outfile(in.c_str());
outfile<<income<<'\t'<<sys.wSecond<<'/'<<sys.wMinute<<'/'<<sys.wHour<<endl;
f=0,flag=0;flag1=2;
}
}
}
return 1;
}
int contents::member_system()
{system("cls");
system("color 0F");
Member m;
int choic;
while(choic!=0)
{
{
cout<<" 1.增加 2.查找 "<<endl;
cout<<" 3.更改 4.显示 "<<endl;
cout<<" 5.删除 6.返回 "<<endl;
cout<<"请输入您的指令:";
cin>>choic;
}system("cls");
if(choic==1)
{m.addcustomer();continue;}
if(choic==2)
{m.search();continue;}
if(choic==3)
{m.change();continue;}
if(choic==4)
{m.display();continue;}
if(choic==5)
{m.del(0);continue;}
if(choic==6)
{return 1;}
}
}
int contents::vip_system()
{system("cls");
system("color 0F");
Vip v;
int choic;
while(choic!=0)
{
{
cout<<" 1.增加 2.查找 "<<endl;
cout<<" 3.更改 4.显示 "<<endl;
cout<<" 5.删除 6.返回 "<<endl;
cout<<" 7.会员变成VIP "<<endl;
cout<<"请输入您的指令:";
cin>>choic;
}system("cls");
if(choic==1)
{v.addvip();continue;}
if(choic==2)
{v.searchvip();continue;}
if(choic==3)
{v.changevip();continue;}
if(choic==4)
{v.displayvip();continue;}
if(choic==5)
{v.delvip(0);continue;}
if(choic==6)
{return 1;}
if(choic==7)
{v.memv();continue;}
}
}
int contents::productmanage_system()
{ system("cls");
system("color 0F");
Product p;
int ch;
while(ch!=0)
{
cout<<" 1.增加 2.更改 "<<endl;
cout<<" 3.查找 4.删除 "<<endl;
cout<<" 5.显示 6.返回 "<<endl;
cout<<"请输入您的指令: ";
cin>>ch;
system("cls");
if(ch==1)
{p.addproduct();continue;}
if(ch==2)
{p.change();continue;}
if(ch==3)
{p.search();continue;}
if(ch==4)
{p.del(0);continue;}
if(ch==5)
{p.display();continue;}
if(ch==6)
return 1;
}
}
int contents::showincome_system()
{ system("cls");
SYSTEMTIME sys;
GetLocalTime(&sys);
system("color 2e");
double tincome=0,number;
string s,in,dat;
cout<<"请输入要查询的日期:";
cin>>dat;
in="F:\\收银员系统\\收入\\会员收入\\"+dat+".txt";
ifstream infile(in.c_str());
if(!infile)
{
cout<<" -会员当日未消费-" <<endl;
}
else
{
cout<<"当日会员消费如下:"<<endl;
while(getline(infile,s))
{
cout<<s<<endl;
ofstream outfile("F:\\收银员系统\\收入\\totalincome.txt",ios::out);
outfile<<s<<endl;
}
infile.close();
}
string vn;
vn="F:\\收银员系统\\收入\\VIP收入\\"+dat+".txt";
ifstream fin(vn.c_str());
if(!fin)
{
cout<<" -VIP当日未消费-" <<endl;
}
else
{
cout<<"当日VIP消费如下:"<<endl;
while(getline(fin,s))
{
cout<<s<<endl;
ofstream outfile("F:\\收银员系统\\收入\\totalincome.txt",ios::app);
outfile<<s<<endl;
}
infile.close();
}
ifstream input_data;
string pt;
pt="F:\\收银员系统\\收入\\普通收入\\"+dat+".txt";
input_data.open(pt.c_str());
if(!input_data)
{
cout<<" -普通用户当日未消费-"<<endl;
}
else
{
cout<<"当日普通顾客消费如下:"<<endl;
while(getline(input_data,s))
{
cout<<s<<endl;
ofstream outfile("F:\\收银员系统\\收入\\totalincome.txt",ios::app);
outfile<<s<<endl;
}
infile.close();
}
ifstream datafile("F:\\收银员系统\\收入\\totalincome.txt",ios::in);
if(!datafile)
{
cout<<"该文件未能正确打开!"<<endl;
}
while(datafile>>number)
{
int se,m,h;
char d1,d2;
datafile>>se>>d1>>m>>d2>>h;
tincome=tincome+number;
}
datafile.clear();
cout<<"总收入:"<<tincome<<endl;
system("pause");
return 1;
}
五,反思总结
经过这次对他人系统的开发和改进,我受益匪浅。
逆向开发锻炼了我阅读代码的能力,使我懂得了如何厘清大量代码的逻辑,先从主函数开始看起,再根据主函数用到的类,去看那个类的定义,最后看类中函数的定义,功能,明白了这一顺序,使我面对代码时有了豁然开朗,庖丁解牛之感,也不再畏惧多行代码。
同时逆向开发还锻炼了我的编程开发能力,自己写代码时,总是“身在庐山中”,不能看得全貌,容易出现各种各样的问题,通过对他人代码的二次开发,我在修复bug的同时也在反思自己是否存在这样的问题,用与平时不同的视角,便能发现自己平时编程时的思维有很多漏洞,有很多值得改进的地方。