C++杂志订阅管理系统.docx
- 文档编号:11014469
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:22
- 大小:19.92KB
C++杂志订阅管理系统.docx
《C++杂志订阅管理系统.docx》由会员分享,可在线阅读,更多相关《C++杂志订阅管理系统.docx(22页珍藏版)》请在冰豆网上搜索。
C++杂志订阅管理系统
#include
#include
#include
#include
#include
usingnamespacestd;//命名空间
intyear,month;
classOrder_infor
{
stringname;//用户姓名
stringsex;//用户性别
stringaddr;//用户地址
stringtel;//用户号码
stringmage;//杂志单位
floatprice;//杂志单价
intnum;//订阅数目
inty,m;//订阅限期
intg;
public:
Order_infor*head;//信息类头指针
Order_infor*next;//信息类next域
voidinput();//录入函数
voidinput(ifstream&infile);//读取函数
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;
}
intOrder_infor:
:
getyear()
{
returny;
}
intOrder_infor:
:
getmonth()
{
returnm;
}
stringOrder_infor:
:
getname()
{
returnname;
}
classMenu
{
public:
voidabout();//关于
voidmainmenu();//主菜单函数
boolland();//管理员登陆
};
voidMenu:
:
about()
{
cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< <<"\t1."< <<"\t2."< <<"\t3."< <<"\t4."< cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< } boolMenu: : land() { Menub;//定义菜单类对象 b.about();//输出系统说明 strings; inti=0;//计数变量 cout<<"请输入管理员密码: "< while (1) { cin>>s; if(s=="123456")//输入正确 returntrue;//返回正确 else//输错了 { cout<<"输入密码错误,请重新输入: ";//输出提示信息 i++;//计数变量自加 if(i>=3)//连输三次错误 break;//跳出循环 } } cout<<"输入错误三次! 系统自动退出! "< system("pause");//显示暂停 returnfalse;//返回错误 } voidMenu: : mainmenu() { system("cls"); strings; cout<<"********************************************************************************"< cout<<"欢迎使用杂志订阅管理软件"< cout<<"********************************************************************************"< cout<<"\t\t0.退出程序4.浏览订阅用户"< cout<<"\t\t1.增加新订户5.查找用户信息"< cout<<"\t\t2.删除用户6.修改用户信息"< cout<<"\t\t3.统计本期杂志订户数7.保存信息"< cout<<"请输入功能按钮: "; cin>>s; switch(s[0]) { case'1': d.order();break; case'2': d.del_select();break; case'3': d.statistic();break; case'4': d.show();break; case'5': d.found();break; case'6': d.mend();break; case'7': d.save();break; default: return; } } voidOrder_infor: : input() { cout<<"请输入姓名: "; while (1) { cin>>name;//输入姓名 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n姓名输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } cout<<"请输入性别: "; while (1) { cin>>sex;//输入性别 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n性别输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } cout<<"请输入地址: ";//设置地址 while (1) { cin>>addr;//输入地址 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n地址输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } cout<<"请输入电话号码: ";//设置电话号码 while (1) { cin>>tel;//输入电话号码 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n号码输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } cout<<"请输入杂志单位: ";//设置杂志单位 while (1) { cin>>mage;//输入杂志单位 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n杂志单位输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } cout<<"请输入单价: ";//设置单价 while (1) { cin>>price;//输入单价 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n单价输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } cout<<"请输入订阅数: ";//设置订阅数 while (1) { cin>>num;//输入订阅数 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n订阅数输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } cout<<"请输入订阅限期(年月): ";//设置期限 while (1) { cin>>y>>m;//输入期限 if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n订阅限期输入错误,请重新输入: "; cin.clear();//清除错误状态 cin.get();//重输 } elsebreak;//输入正确则跳出循环 } } voidOrder_infor: : input(ifstream&infile)//带参录入函数向链表输入 { infile>>name>>sex>>addr>>tel>>mage>>price>>num>>y>>m;//输入至链表 } voidOrder_infor: : output()//信息输出函数向显示屏输出 { cout< (2)< } voidOrder_infor: : output(ofstream&outfile)//向文件输出信息 { outfile< < < < < < < < < < } boolOrder_infor: : comp(inty,intm)//判断是否超期 { if(year>y||(year==y&&month>m))//先比较年,若一样则比较月 returntrue;//比较当前时间与限期,获得订阅的当前状况,返回表示订阅超期 else returnfalse;//返回表示订阅未超期 } voidOrder_infor: : order()//向链表尾部录入订阅信息 { system("cls");//清屏 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 p2->next=NULL;//p2的next变为空指针 p1=p1->next;//p1指向新开辟的空间,p1紧随p2之后 Order_infor: : setg (1);//标记为修改 cout<<"\t\t\t按1继续,按0返回: ";//控制变量控制循环 cin>>n;//输入n } } voidOrder_infor: : show() { system("cls");//清屏 cout.setf(ios: : left); cout<<"订阅基本信息如下: "< < < < Order_infor*p;//定义订阅信息类对象指针 p=head;//指向链表头部,启用链表信息 while(p->next)//只要下一结点不为空则执行循环 {//此循环功能在于输出所有订阅信息 p=p->next;//P指向下一节点 cout< < } } voidOrder_infor: : found() { system("cls");//清屏 stringn;//定义辅助变量 cout<<"输入姓名: ";//输出提示信息 cin>>n;//输入选择 if(! find(n))//调用find函数查找 { cout<<"\t\t找不到你要查找的内容! "< return;//函数调用结束 } } Order_infor*Order_infor: : find(stringn) { system("cls");//清屏 Order_infor*p;//定义辅助指针 p=head;//指向链表头结点 while(p->next)//当链表未至尾部时执行循环 { if((p->next)->getname()==n)//班次匹配上则输出所查到的订阅信息 { cout.setf(ios: : left); cout<<"订阅基本信息如下: "< <<"姓名性别地址电话单位单价定阅数期限"< (p->next)->output();//调用输出函数 returnp;//表示找到,返回的是目标结点的前一结点 } p=p->next;//指向下一节点 } returnNULL; } voidOrder_infor: : mend()//修改函数 { system("cls");//清屏 Order_infor*p;//定义信息类指针变量 stringn; cout<<"\t\t\t输入姓名方便查找: ";//输出提示信息 cin>>n; p=find(n);//调用查找函数 if(! p)//判断是否找到 { cout<<"\t\t找不到你要修改的内容! 请利用程序查询功能确认! "< return;//函数调用结束 } (p->next)->input();//调用录入函数对目标结点数据再录入 Order_infor: : setg (1); } voidOrder_infor: : del_select() { cout<<"请选择删除选项: "< cout<<"1.删除过期用户;2.删除指定用户"< intc; cin>>c; switch(c) { case1: d.del2();break; case2: d.del1();break; default: cout<<"输入错误! "; } } voidOrder_infor: : del1()//删除车辆信息函数 { system("cls");//清屏 Order_infor*p1,*p2,*p3;//定义两对象指针用于链表操作 stringn; cout<<"\t\t\t输入姓名: ";//输出提示信息 cin>>n; p1=find(n);//调用查找函数 if(! p1)//判断函数返回值是否为NULL { cout<<"\t\t找不到你要删除的内容! "< return;//函数调用结束 } cout<<"\n\t\t\t确定删除(y/n)? ";//显示将要删除数据信息供用户核对 chara; cin>>a;//输入指示 if(a=='y'||a=='Y') {//因为头结点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况 if((p1->next)->next==NULL)//目标结点为尾结点时 { p2=p1->next;//p2指向目标结点 p1->next=NULL;//p1连接目标结点的next域重新赋值为空指针 deletep2;//释放目标空间 } else {//目标结点为中间节点时 p2=p1->next;//p2指向目标结点 p3=(p1->next)->next;//p3指向目标结点下一结点 p1->next=p3;//连接目标结点前后结点 deletep2;//释放目标结点 } Order_infor: : setg (1);//标记为修改 } } voidOrder_infor: : del2() { system("cls");//清屏 Order_infor*p1,*p2,*p3;//定义两对象指针用于链表操作 intn; charc; p1=head; while(p1->next) { n=p((p1->next)->y,(p1->next)->m); if(n) { system("cls"); cout<<"订阅基本信息如下: "< <<"姓名性别地址电话单位单价定阅数期限"< (p1->next)->output(); cout<<"是否删除(y/n)"; cin>>c; if(c=='y'||c=='Y') {//因为头结点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况 if((p1->next)->next==NULL)//目标结点为尾结点时 { p2=p1->next;//p2指向目标结点 p1->next=NULL;//p1连接目标结点的next域重新赋值为空指针 deletep2;//释放目标空间 return; } else {//目标结点为中间节点时 p2=p1->next;//p2指向目标结点 p3=(p1->next)->next;//p3指向目标结点下一结点 p1->next=p3;//连接目标结点前后结点 deletep2;//释放目标结点 } Order_infor: : setg (1);//标记为修改 } } p1=p1->next; } } voidOrder_infor: : statistic() { Order_infor*p; intn=0; intsum=0; p=head; cout<<"本期订阅信息"< cout<<"用户名订阅数单价全额"< while(p->next) { cout<<(p->next)->getname()<<"\t"<<(p->next)->getnum() <<"\t"<<(p->next)->getprice()<<"\t" <<((p->next)->getnum()*(p->next)->getprice())< n=n+((p->next)->getnum()); sum+=((p->next)->getnum()*(p->next)->getprice()); p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 杂志 订阅 管理 系统