C++购书系统
C++购书系统——来自班里某位同学的小学期作业
这是一个购书系统,模拟网上购书的流程。用户可以在这个小程序里输入对应的数字进行浏览书籍信息,查看用户信息,查找书籍,购买书籍以及查询个人订单的操作。
以下为程序代码:
#include <iostream>
using namespace std;
#include<fstream>
#include<stdlib.h>
#include<conio.h>
#include<sstream>
#include<iomanip>
#include<windows.h>
#include<string>
#include"book.h"
#include"buy.h"
#include"search.h"
//#include"strclass.h"
void main()
{
book gx;
search cz;
search yh;
cout<<" *********************************"<<endl;
cout<<" ** 1.购书人信息 **"<<endl;
cout<<" ** 2.图书信息 **"<<endl;
cout<<" ** 3.图书查找 **"<<endl;
cout<<" ** 4.购书 **"<<endl;
cout<<" ** 5.订单信息 **"<<endl;
cout<<" *********************************"<<endl;
int choice;
cout<<"请输入数字查询:";
cin>>choice;
cout<<endl;
//int i=0,buyerid,flag;
//book * c[2];
switch(choice)
{
case 1:
//cout<<"购书人信息:\n\n";
yh.searchorder();
break;
case 2:
cout<<"\n图书信息:\n\n";
gx.display();
break;
case 3:
cout<<"\n\n图书查找:";
cz.searchorder ();
break;
case 4:
cout<<"购书人编号:";
//cin>>xs;
break;
case 5:
/*cout<<"\n\n";
cout<<"\n\t正在退出系统,请稍等";
cout<<"\n\t\t\t\t\t\t\t\\t\t\t";
cout<<"\n\t期待您下次光临!";
for(i=0;i<25;i++)
{
switch(i%4)
{
case 1:cout<<".";break;
case 2:cout<<".";break;
case 3:cout<<".";break;
case 0:cout<<".";break;
}
}
cout<<endl;
exit(0); */
break;
}
}
class buyer //基类
{
protected:
string name; //姓名
int buyerID; //购书人编号
string address; //购书人地址
double pay; //购书金额
public:
buyer();
buyer(string n,int b,string a,double p);
string getbuyname(); //取姓名
string getaddress(); //取地址
double getpay(); //取应付金额
int getid(); //取购书人编号
virtual void display()=0; //显示函数
virtual void setpay(double=0)=0;
};
class member:public buyer //会员类
{
int leaguer_grade; //会员级别
public:
member(string n,int b,int l,string a,double p):buyer(n,b,a,p)
{leaguer_grade=l;} //构造函数
void display(); //显示函数
void setpay(double p);
};
class honoured_guest:public buyer //贵宾类
{
double discount_rate; //折扣率
public:
honoured_guest(string n,int b,double r,string a,double p):buyer(n,b,a,p)
{
discount_rate=r;} //构造函数
void display(); //显示函数
void setpay(double p); //计算购书金额
};
class layfolk:public buyer //普通人类
{
public:
layfolk(string n,int b,string a,double p):buyer(n,b,a,p)
{ } //构造函数
void display(); //显示函数
void setpay(double p); //计算购书金额
};
buyer::buyer() //基类的构造函数
{
name=" ";
buyerID=0;
address=" ";
pay=0;
}
buyer::buyer(string n,int b,string a,double p) //基类的构造函数
{
name=n;
buyerID=b;
address=a;
pay=p;
}
double buyer::getpay() //取购书金额
{
return pay;
}
string buyer::getaddress() //取购书人地址
{
return address;}
string buyer::getbuyname() //取购书人名字
{return name;}
int buyer::getid() //取购书人编号
{return buyerID;}
void member::display() //会员类的显示函数
{
cout<<"购书人姓名:"<<name<<"\t";
cout<<"购书人编号:"<<buyerID<<"\t";
cout<<"购书人为会员,级别:"<<leaguer_grade<<"\n";
cout<<"地址:"<<address<<"\n";
}
void member::setpay(double p) //会员类的计算购书金额
{
if (leaguer_grade==1) //会员级别为1
pay=.95*p+pay;
else if(leaguer_grade==2) //会员级别为2
pay=.90*p+pay;
else if(leaguer_grade==3) //会员级别为3
pay=.85*p+pay;
else if(leaguer_grade==4) //会员级别为4
pay=.8*p+pay;
else if(leaguer_grade==5) //会员级别为5
pay=.7*p+pay;
else
cout<<"级别错误!";
}
void honoured_guest::display() //贵宾类的显示函数
{
cout<<"购书人姓名:"<<name<<"\t";
cout<<"购书人编号:"<<buyerID<<"\t";
cout<<"购书人为贵宾!折扣率为:"<<discount_rate*100<<"%\n";
cout<<"地址:"<<address<<"\n\n";
}
void honoured_guest::setpay(double p) //贵宾类计算购书金额
{
pay=pay+(1-discount_rate)*p;
}
void layfolk::display() //普通类显示函数
{
cout<<"购书人姓名:"<<name<<"\t";
cout<<"购书人编号:"<<buyerID<<"\t";
cout<<"购书人为普通人"<<"\n";
cout<<"地址:"<<address<<"\n\n";
}
void layfolk::setpay(double p) //普通类计算购书金额
{
pay=pay+p;
}
class search{
public:
//search();
int searchorder();
int search_order(const char *filename,int id);
void searchd(const char *filename);
};
int search::search_order(const char *filename,int id)
{
ifstream in;
in.open("order.txt",ios::in|ios::binary);
if(!in.is_open())
{
cout<<"file open error"<<endl;
return -1;
}
else
{
stringstream ss;
while (in.peek()!=EOF)
{
int start=in.tellg();
string line;
getline(in,line);
ss<<line;
int curID;
ss>>curID;
if(curID==id)
{
in.close();
return start;
}
ss.str("");
}
cout<<"对不起您查找订单编号不存在!"<<endl;
in.close();
}
return -1;
}
void search::searchd(const char *filename)
{
cout<<"请输入你要查找的订单编号:";
int id;
cin>>id;
int pos=search_order("order.txt",id);
string line;
fstream in;
in.open("order.txt",ios::in|ios::binary);
in.seekp(pos,ios::beg);
getline(in,line);
cout.setf(ios::left);
cout<<line<<endl;
}
int search::searchorder()
{
searchd("order.txt");
return 0;
}
#include"string.h"
class string
{friend ostream& operator<<(ostream& S,const string&Str); //重载<<
friend istream& operator>>(istream& S, string&Str); //重载>>
public:
string();
string(const string&Str);
void operator=(const string&Str); //重载=
~string();
string(char*p);
private:
short m_Length; //字符串长度
char*m_Data; //字符串开始地址
};
string::string()
{m_Length=1;
m_Data=new char [m_Length];
memcpy(m_Data,"",m_Length);
};
string::string(const string&Str)
{m_Length=Str.m_Length ;
m_Data=new char[m_Length];
memcpy(m_Data,Str.m_Data ,m_Length);
};
string::string(char*p)
{m_Length=strlen(p)+1;
m_Data=new char [m_Length];
memcpy(m_Data,p,m_Length);
};
void string::operator =(const string&Str)
{if(&Str!=this)
{delete []m_Data;
m_Length=Str.m_Length ;
m_Data=new char[m_Length];
memcpy(m_Data,Str.m_Data ,m_Length);
}
return;
};
string::~string ()
{delete []m_Data;
};
ostream& operator<<(ostream& S,const string& Str)
{short i;
for(i=0;i<Str.m_Length -1;i++)
S<<Str.m_Data [i];
return S;
};
istream& operator>>(istream& S,string& Str)
{const short BUFLEN=256;
char Buf[BUFLEN];
if (S.peek()=='\n')
S.ignore ();
S.getline (Buf,BUFLEN,'\n');
Str=Buf;
return S;
};
整体的购书分为5个模块:
总流程图:

购书流程:
输入1进入购书人信息查找,输入其编号,在buyers.txt中查找对应的信息并输出。输入2后,显示book.txt中所有的图书信息。输入3进入图书查找,输入图书编号,在book.txt中查找对应的信息并输出。输入4进入购书界面,选择选择购买方式(普通购买或会员购买或贵宾购买),在buyers.txt中查找对应的购书人信息并输出。再输入购买图书的编号,在book.txt中查找对应的信息并输出。最后输入所选图书单价,根据是普通人或会员或贵宾的优惠方式计算实付金额并输出。将购书人信息、所购图书信息、实付金额存入order.txt中。输入5进入订单查找,输入编号,在order.txt中查找对应的信息并输出。
以下是运行界面截图:
(1)网上购书结账系统界面:

(2)输入1,查找购书人信息。

若输入不在buyers.txt中的用户编号,显示查找的用户信息不存在。(有错误输入处理)

(3)输入2,查看所有图书信息。

(4)输入3,输入图书编号,查找图书信息。

若输入不在book.txt中的图书编号,显示查找的图书不存在。(有错误输入处理)

(5)输入4,进入购书界面。选择购买方式,输入购书人编号及图书编号,进行购书。

一开始运行代码的时候,中文出现了乱码,在慌乱了一下后我请教了度娘也算是顺利的解决了问题。通过读代码,我发现这门课程的知识还学得有些不扎实,遗忘的知识点还挺多的,刚开始有些不知所云。之后,我把代码相应的课程书籍翻开,看到不明白的地方,就翻书重新学习一遍这个知识点。一点一点,如同蚕食桑叶一般把所有代码看完了,整个过程大概花费了近三个小时。相当于又小小的简单复习了一遍C++。代码整体的流程还是很清晰的,有购书人及书本编号输入错误的提示,运行界面简洁易懂,但是不能随意返回,点错了就只能从头开始。在输入2看到所有图书信息后,还需要记下图书编号,再重新运行代码。之后输入4进入购书界面,输入购买人和图书编号才能完成购买。如果浏览完图书信息能直接选择进入购买界面或者返回上一级菜单会更便于操作。通过这次运行代码把所学过的知识重新温故了一边,实在受益匪浅。
C++购书系统的更多相关文章
- 亲测可用!在线购书系统项目分享(Java)
项目简介 项目来源于:https://gitee.com/suimz_admin/BookShop 一个基于JSP+Servlet+Jdbc的书店系统.涉及技术少,易于理解,适合JavaWeb初学者学 ...
- JSP+Servlet+C3P0+Mysql实现的简单新闻系统
项目简介 项目来源于:https://gitee.com/glotion/servlet-jsp_news 本系统基于JSP+Servlet+C3P0+Mysql.涉及技术少,易于理解,适合JavaW ...
- JSP+Servlet+JDBC+mysql实现的个人日记本系统
项目简介 项目来源于:https://gitee.com/wishwzp/Diary 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少 ...
- Maven+JSP+Servlet+C3P0+Mysql实现的音乐库管理系统
项目简介 项目来源于:https://gitee.com/sunnyandgood/OnlineMusic 本系统基于Maven+JSP+Servlet+C3P0+Mysql实现的音乐库管理系统.简单 ...
- Android学习之路——简易版微信为例(二)
1 概述 从这篇博文开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样, ...
- Java 实验案例(类和对象篇)
实验任务 任务一:手机类的封装 任务二:基于控制台的购书系统 任务三:简单的投票程序 实验内容 任务一:手机类的封装 任务目的 理解和掌握面向对象的设计过程 掌握类的结构和定义过程 掌握构造方法及其重 ...
- 最全的计算机Java毕业设计题目大全 附 源码
本文提供数百个计算机毕设题目可以参考 并提供成品源码下载,都是从网上收集而来 源码技术全部采用java+MySQL开发,并结合了其他技术如ssm,ssh,jsp等等. 下载链接在文末! 以下是项目名称 ...
- [项目分享]JSP+Servlet+JDBC实现的云端汽修后台管理系统
本文存在视频版本,请知悉 项目简介 项目来源于:https://gitee.com/chenlinSir/CloudDemo-servlet 难度等级:简单 基于JSP+Servlet+Jdbc的云端 ...
- [项目分享]JSP+Servlet+JDBC实现的学生信息管理系统
本文存在视频版本,请知悉 项目简介 项目来源于:https://gitee.com/liu_xu111/JavaWeb01 这次分享一个学生管理系统,我感觉这是程序员在大学时期的毕设和课程设计选择最多 ...
随机推荐
- iFace Chain [ 爱妃链 ] 或将凭借人脸密钥技术成为安全领域最大的赢家
前段时间iFace Chain [ 中文音译名称: 爱妃链 ] 安全专家揭密了区块链领域,数字资产存放于无信用钱包中的一些风险,并为区块链玩家解密如何安全保护资产私钥,我们再来回顾分析一下目前跑路钱包 ...
- 【Git之旅】2.Git对象
1.块(blob)对象 (1)文件的每一个版本表示为一个块 (2)二进制大对象(binary large object)的缩写,是计算机领域的常用术语,用来指代某些可以包含任意数据的变量或文件,同时其 ...
- Devexpress常见问题
1.DevExpress控件组中的GridControl控件不能使横向滚动条有效. 现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决:gridView1.Op ...
- Python:bs4的使用
概述 bs4 全名 BeautifulSoup,是编写 python 爬虫常用库之一,主要用来解析 html 标签. 一.初始化 from bs4 import BeautifulSoup soup ...
- C#语法——await与async的正确打开方式
C#5.0推出了新语法,await与async,但相信大家还是很少使用它们.关于await与async有很多文章讲解,但有没有这样一种感觉,你看完后,总感觉这东西很不错,但用的时候,总是想不起来,或者 ...
- 使用LR编写windows sockets协议xml报文格式脚本实战
以下是测试脚本Demo: #include "lrs.h" Action() { char * resultCode;//结果代码 char * time; //系统时间 char ...
- [.NET] 使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复
使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复 目录 一.前提 二.基本配置信息简析 三.配置服务器地址(URL) 四.请求处理 一.前提 先申请微信公众号的授权,找到或配置 ...
- 一文搞定MySQL的事务和隔离级别
一.事务简介 事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供 ...
- 单机Qps上限是多少?
现在这个年代,你要是不懂高并发,你都不好意思说自己是搞互联网的! 一.什么是并发,什么是高并发 并发,两个及以上的行为一起发生,比如你一边吃饭一边看电视 高并发,多个行为(至于是多少,这个没有定数,你 ...
- GraphQL基础篇
最近参与了一个大型项目,大型项目随着系统业务量的增大,不同的应用和系统共同使用着许多的服务接口API,而随着业务的变化和发展,不同的应用对相同资源的不同使用方法最终会导致需要维护的服务API数量呈现爆 ...