以下是别人编写的一个“网上购书系统”的代码。
#include<iostream>
using namespace std;
#include<fstream>
#include<stdlib.h>
#include<string>
#include<conio.h> //getch的头文件
#include <sstream>
#include <iomanip>
#include <windows.h>
#define WIDTH 20
#define space setw(WIDTH) //读取相邻数据的间隔
#define NEWLINE "\r\n"
#include"buy.h"
#include"book.h"
#include"order.h"
//函数提前声明部分
void logo1();
void logo2();
void function1();
void function2();
void function3();
//对象
book booker;
buyer buyerr;
order orderr;
//---------------------------------------------------界面流程模块----------------------------------------------------------
void interface1() //程序的第一个界面
{
cout<<"------------------------------------------------------"<<endl;
cout<<" 欢迎来到网上购书系统 "<<endl;
cout<<"------------------------------------------------------"<<endl;
cout<<" 1.管理员 "<<endl;
cout<<" 2.用户 "<<endl;
cout<<"请选择您的身份:"<<endl;
}
void interface2() //登录与注册界面
{
cout<<"------------------------------------------------------"<<endl;
cout<<" 欢迎来到网上购书系统 "<<endl;
cout<<"------------------------------------------------------"<<endl;
cout<<" 1.登录 "<<endl;
cout<<" 2.返回上一界面 "<<endl;
cout<<"请选择您要进行的操作:"<<endl;
}
void interface3() //管理员登录后界面
{
cout<<"------------------------------------------------------"<<endl;
cout<<" 欢迎来到网上购书系统 "<<endl;
cout<<"------------------------------------------------------"<<endl;
cout<<" 操作图书信息 "<<endl;
cout<<"请选择您要进行的操作:"<<endl;
}
//------------------------------------------------登录模块-----------------------------------------------------------
struct user
{
string password;
string name;
};
//管理员登录
void logo1()
{
char *password = new char [20];
string name;
cout << "用户名:"<<endl;
cin>>name;
cout <<" 密码:"<<endl;
char test;int i=0;
while((test=getch())!='\r')
{
if(test==8)//ASC2码8为退格
{
if(i>0)
{
cout << test << " " << test;
password[i--]='\0';
}
}
else
{
if(i<20)
cout << "*";
password[i]=test;
i++;
}
}
password[i]='\0';
ifstream fin;
fin.open("admis.txt",ios_base::in);
if(fin.fail())
{
cout << "文件打开失败";
}
user c;int f1;
while(fin>>c.name>>c.password)
{
if(c.name==name&&c.password==password)
{
cout << "登陆成功";
f1=1;//登录成功标志
interface3();
int m;
cin>>m;
switch(m)
{
case 1:function1();break;
case 2:function2();break;
}
}
}
if(f1==0)//f1==0登录失败
{
cout << "用户名或密码错误";
logo1();
}
}
//用户登录
void logo2()
{
char *password = new char [20];
string name;
cout << "用户名:"<<endl;
cin>>name;
cout <<" 密码:"<<endl;
char test;int i=0;
while((test=getch())!='\r')
{
if(test==8)//ASC2码8为退格
{
if(i>0)
{
cout << test << " " << test;
password[i--]='\0';
}
}
else
{
if(i<20)
cout << "*";
password[i]=test;
i++;
}
}
password[i]='\0';
ifstream fin;
fin.open("user.txt",ios_base::in);
if(fin.fail())
{
cout << "文件打开失败";
}
user c;int f1;
while(fin>>c.name>>c.password)
{
if(c.name==name&&c.password==password)
{
cout << "登陆成功";
f1=1;//登录成功标志
function3();
}
}
if(f1==0)//f1==0登录失败
{
cout << "用户名或密码错误";
logo2();
}
}
//-------------------------------------管理员添加,读取,删除和修改图书信息部分----------------------------------------------
//管理员的功能模块
void function1()
{
book booker;
const char *filename = "books.txt";
while(true)
{
cout<<"--------------------------"<<endl;
cout<<"0、查看全部信息"<<endl;
cout<<"1、新增图书信息"<<endl;
cout<<"2、删除图书信息"<<endl;
cout<<"3、修改图书信息"<<endl;
cout<<"4、查找图书信息"<<endl;
cout<<"5、返回上一界面"<<endl;
int cmd;
cin>>cmd;
system("cls");
switch(cmd)
{
case 0:booker.readt("books.txt");break;
case 1:booker.writet("books.txt");break;
case 2:booker.delt("books.txt");break;
case 3:booker.editt("books.txt");break;
case 4:booker.searcht("books.txt");break;
case 5:
{
interface3();
int m;
cin>>m;
switch(m)
{
case 1:function1();break;
case 2:function2();break;
}
}
break;
}
}
}
//----------------------------------------用户查看图书信息,购书,查看订单和结算模块-----------------------------------------
//用户功能模块
void function3()
{
const char *filename = "orders.txt";
while(true)
{
cout<<"--------------------------"<<endl;
cout<<"1、图书信息"<<endl;
cout<<"2、购书"<<endl;
cout<<"3、查看订单信息"<<endl;
//cout<<"4、结算"<<endl;
cout<<"请选择您要进行的操作:";
int cmd;
cin>>cmd;
system("cls");
switch(cmd)
{
case 1:booker.readt("books.txt");break;
case 2:orderr.options1();break; //还没成功
case 3:orderr.searcho("orders.txt");break;
//case 4:settlement();break;
}
}
}
//------------------------------------------------------主程序流程--------------------------------------------------------------
void maind()
{
interface1();
int i,j;
cin>>i;
switch(i)
{
case 1:interface2();cin>>j; //管理员
switch(j)
{
case 1:logo1();break; //登录
case 2:maind();break;
}
break;
case 2:interface2();cin>>j; //用户
switch(j)
{
case 1:logo2();break; //登录
case 2:maind();break;
}
break;
}
}
int main()
{
maind();
return 0;
}
------------------------------------------------------------------------------------
总得来说,我感觉这个代码总体上还比较完整,思路也比较清晰且函数封装的很好。
首先有一个界面流程模块,简单又清晰的展示了整个程序的界面流程。
接下去的各区域模块也划分了管理员和用户两个不同的界面,方便用户或管理员进行购物或者对物品的修改。
再然后,管理员可以添加或修改图书信息,可以实时更改图书信息以方便用户进行挑选。同时顾客可以在界面内挑选自己喜欢的书籍并选择购买,随后可以生成顾客已经挑选的图书订单,进性结算或者修改。综上所诉,该程序操作简便可以满足部分人的购书需求。
但也有一些缺点,比如在用户注册过程上有些不明确以及对图书信息内容的介绍也有点模糊,这是我感觉较为突出的薄弱项。其次我认为可以给管理员和用户增加几个功能模块。例如
1.管理员可以删除用户账户信息或者删除用户订单信息模块。
2.可以增加一个退款功能模块,如果用户突然不需要已经结算的图书了,可以申请退款,再交由管理员处理。
这样处理可能能将该系统用户体验上得到优化。以下是按照管理员添加,修改图书信息模块改写的新的功能模块用于删除用户信息或者订单信息的功能模块。
void function2()
{
const char *filename = "users.txt";
while(true)
{
cout<<"--------------------------"<<endl;
cout<<"1、删除用户信息"<<endl;
cout<<"2、查看用户信息"<<endl;
cout<<"3、删除用户订单信息"<<endl;
cout<<"4、返回上一界面"<<endl;
int cmd;
cin>>cmd;
system("cls");
switch(cmd)
{
case 1:buyerr.dely("users.txt");break;
case 2:buyerr.ready("users.txt");break;
case 3:buyerr.searchy("users.txt");break;
case 4:
{
interface3();
int m;
cin>>m;
switch(m)
{
case 1:function1();break;
case 2:function2();break;
}
}
break;
}
}
}
以上便是我对该系统的愚见和心得。