C++杂志订阅管理系统Word格式.docx
《C++杂志订阅管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《C++杂志订阅管理系统Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
voidoutput();
//输出函数
voidoutput(ofstream&
outfile);
//写入函数
floatgetprice();
intgetnum();
intgetyear();
//获取期限时间函数
intgetmonth();
stringgetname();
voidorder();
//录入信息
voidmend();
//修改信息
voiddel_select();
voiddel1();
//删除信息
voiddel2();
voidfound();
Order_infor*find(stringn);
boolfind(inty,intm);
voidstatistic();
voidshow();
//显示信息
boolcomp(inty,intm);
//判断当前订阅状况函数
voidsave();
//保存信息
voidbegin();
//初始信息
voidclear();
//清除函数
voidsetg(intk){g=k;
}//设置系统修改标志
intgetg(){returng;
}//返回系统修改标志
}d;
floatOrder_infor:
:
getprice()
returnprice;
}
intOrder_infor:
getnum()
returnnum;
getyear()
returny;
getmonth()
returnm;
stringOrder_infor:
getname()
returnname;
/*888888888888888888888888888888888888888888888888888888888888888888888888*/
classMenu
{
public:
voidabout();
//关于
voidmainmenu();
//主菜单函数
boolland();
//管理员登陆
};
voidMenu:
about()
cout<
<
"
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"
endl
<
\t1."
\t2."
\t3."
\t4."
endl;
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"
/*88888888888888888888888888888888888888888888888888888888888888888888888888*/
boolMenu:
land()
Menub;
//定义菜单类对象
b.about();
//输出系统说明
strings;
inti=0;
//计数变量
请输入管理员密码:
//输出提示信息
while
(1)
{
cin>
>
s;
if(s=="
123456"
)//输入正确
returntrue;
//返回正确
else//输错了
输入密码错误,请重新输入:
;
i++;
//计数变量自加
if(i>
=3)//连输三次错误
break;
//跳出循环
}
输入错误三次!
系统自动退出!
//提示将退出登录
system("
pause"
);
//显示暂停
returnfalse;
//返回错误
mainmenu()
cls"
********************************************************************************"
欢迎使用杂志订阅管理软件"
\t\t0.退出程序4.浏览订阅用户"
\t\t1.增加新订户5.查找用户信息"
\t\t2.删除用户6.修改用户信息"
\t\t3.统计本期杂志订户数7.保存信息"
请输入功能按钮:
switch(s[0])
case'
1'
d.order();
break;
2'
d.del_select();
3'
d.statistic();
4'
d.show();
5'
d.found();
6'
d.mend();
7'
d.save();
default:
return;
voidOrder_infor:
input()
cout<
请输入姓名:
"
while
(1)
{
cin>
name;
//输入姓名
if(cin.fail())//判断输入的数据类型是否有错
{
cout<
\n姓名输入错误,请重新输入:
cin.clear();
//清除错误状态
cin.get();
//重输
}
elsebreak;
//输入正确则跳出循环
}
cout<
请输入性别:
sex;
//输入性别
\n性别输入错误,请重新输入:
请输入地址:
//设置地址
addr;
//输入地址
\n地址输入错误,请重新输入:
请输入电话号码:
//设置电话号码
tel;
//输入电话号码
\n号码输入错误,请重新输入:
请输入杂志单位:
//设置杂志单位
mage;
//输入杂志单位
\n杂志单位输入错误,请重新输入:
请输入单价:
//设置单价
price;
//输入单价
\n单价输入错误,请重新输入:
请输入订阅数:
//设置订阅数
num;
//输入订阅数
\n订阅数输入错误,请重新输入:
请输入订阅限期(年月):
//设置期限
y>
m;
//输入期限
\n订阅限期输入错误,请重新输入:
input(ifstream&
infile)//带参录入函数向链表输入
infile>
name>
sex>
addr>
tel>
mage>
price>
num>
//输入至链表
output()//信息输出函数向显示屏输出
setw(8)<
name<
setw(4)<
sex<
setw(10)<
addr<
setw(13)<
tel<
mage<
setw(6)<
price<
num<
setw
(2)<
y<
/"
m<
output(ofstream&
outfile)//向文件输出信息
outfile<
name//setw()设置输出宽度
<
sex
addr
setw(12)<
tel
mage
price
num
y
m
boolOrder_infor:
comp(inty,intm)//判断是否超期
if(year>
y||(year==y&
&
month>
m))//先比较年,若一样则比较月
returntrue;
//比较当前时间与限期,获得订阅的当前状况,返回表示订阅超期
else
returnfalse;
//返回表示订阅未超期
order()//向链表尾部录入订阅信息
//清屏
Order_infor*p1,*p2=NULL;
//定义对象指针
p1=head;
//将头指针赋给p1
intn=1;
//定义循环控制变量
while(p1->
next)//当头结点后有数据时执行循环,头结点为空也不会执行循环
p1=p1->
next;
//使p能够指向未存放数据的内存,录入信息会存放在所有信息之后
while(n)//此循环执行在链表尾部插入录入的信息
{//通过循环不断开辟新空间录入新的数据
p2=newOrder_infor;
//开辟存储空间,返回地址给p2
p2->
input();
//调用录入函数,为p2所指结点数据赋值
p1->
next=p2;
//p1的next指向新开辟空间,连接了p1和p2
next=NULL;
//p2的next变为空指针
//p1指向新开辟的空间,p1紧随p2之后
Order_infor:
setg
(1);
//标记为修改
\t\t\t按1继续,按0返回:
//控制变量控制循环
n;
//输入n
show()
cout.setf(ios:
left);
订阅基本信息如下:
endl//显示所有订阅信息
姓名"
性别"
地址"
电话"
单位"
单价"
定阅数"
期限"
Order_infor*p;
//定义订阅信息类对象指针
p=head;
//指向链表头部,启用链表信息
while(p->
next)//只要下一结点不为空则执行循环
{//此循环功能在于输出所有订阅信息
p=p->
//P指向下一节点
p->
<
//调用next所指对象的输出信息函数,头结点未存放数据只是初始化了next
found()
stringn;
//定义辅助变量
输入姓名:
cin>
//输入选择
if(!
find(n))//调用find函数查找
\t\t找不到你要查找的内容!
//找不到的话输出相应提示信息
return;
//函数调用结束
Order_infor*Order_infor:
find(stringn)
//定义辅助指针
//指向链表头结点
next)//当链表未至尾部时执行循环
{
if((p->
next)->
getname()==n)//班次匹配上则输出所查到的订阅信息
{
cout.setf(ios:
endl//输出信息
姓名性别地址电话单位单价定阅数期限"
(p->
output();
//调用输出函数
returnp;
//表示找到,返回的是目标结点的前一结点
}
//指向下一节点
returnNULL;
mend()//修改函数
Order_infor*p;
//定义信息类指针变量
stringn;
\t\t\t输入姓名方便查找:
p=find(n);
//调用查找函数
p)//判断是否找到
\t\t找不到你要修改的内容!
请利用程序查询功能确认!
return;
(p->
//调用录入函数对目标结点数据再录入
Order_infor:
del_select()
请选择删除选项:
1.删除过期用户;
2.删除指定用户"
intc;
c;
switch(c)
case1:
d.del2();
case2:
d.del1();
cout<
输入错误!
del1()//删除车辆信息函数
Order_infor*p1,*p2,*p3;
//定义两对象指针用于链表操作
\t\t\t输入姓名:
p1=find(n);
p1)//判断函数返回值是否为NULL
\t\t找不到你要删除的内容!
//输出没找到的提示
}
\n\t\t\t确定删除(y/n)?
//显示将要删除数据信息供用户核对
chara;
a;
//输入指示
if(a=='
y'
||a=='
Y'
)
{//因为头结点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况
if((p1->
next==NULL)//目标结点为尾结点时
p2=p1->
//p2指向目标结点
p1->
//p1连接目标结点的next域重新赋值为空指针
deletep2;
//释放目