C++杂志订阅管理系统_第1页
C++杂志订阅管理系统_第2页
C++杂志订阅管理系统_第3页
C++杂志订阅管理系统_第4页
C++杂志订阅管理系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include<iostream>/数据流输入输出#include<string>#include<fstream>#include<time.h>#include<iomanip> using namespace std; int year,month;/字符串操作/文件输入输出/时间库函数/输入输出格式符/命名空间/*888888888888888888888888888888888888888888888888888888888888888888888888888*/class Order_inforstring name;/

2、用户姓名string sex;/用户性别string addr;/用户地址string tel;/用户号码string mage;/杂志单位float price;/杂志单价int num;/订阅数目int y,m;/订阅限期int g;public:Order_infor* head;/Order_infor* next;/域void input();/void input(ifstream & infile);/void output。;/void output(ofstream & outfile);/float getprice();int getnum();int g

3、etyear();/函数int getmonth();string getname();void order();/信息类头指针信息类next录入函数读取函数输出函数写入函数获取期限时间void mend();/void del_select();void del1();/void del2();void found();Order_infor*find(string n);bool find(int y,int m);录入信息修改信息删除信息void statistic。;void show();bool comp(int y,int m);订阅状况函数void save();void be

4、gin();void clear();void setg(int k) g=k; 修改标志int getg() return g;修改标志/显示信息判断当前保存信息初始信息 清除函数设置系统/返回系统d;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/ float Order_infor:getprice()return price;int Order_infor:getnum()return num;int Order_infor:getyear()return y;int Orde

5、r_infor:getmonth()return m;string Order_infor:getname()return name; /*888888888888888888888888888888888888888888888888888888888888888888888888*/class Menupublic:void about();/关于void mainmenu();/ 主 菜单函数bool land();/管理员登陆;/*888888888888888888888888888888888888888888888888888888888888888888888888*/void

6、 Menu:about()cout<<" "<<endl<<"t1."<<endl<<"t2."<<endl<<"t3."<<endl<<"t4."<<endl;cout<<" "<<endl;/*888888888888888888888888888888888888888888888888888888888888888888888

7、88888*/ bool Menu:land()Menu b;/b.about();/string s;int i=0;/cout<<"请输入管理员密码:"<<endl;/while(1)cin>>s;if(s="123456")/return true;/else/cout<<"输入密码错误,请重新输入:"/i+;/if(i>=3)/break;/cout<<"输入错误三次!系统自动退出!"<<endl; /system("p

8、ause");/定义菜单类对象输出系统说明计数变量 输出提示信息输入正确返回正确 输错了输出提示信息 计数变量自加 连输三次错误 跳出循环提示将退出登录显示暂停返回错误return false;/ /*888888888888888888888888888888888888888888888888888888888888888888888888888*/ void Menu:mainmenu() system("cls");string s;cout<<"*"<<endl;*cout<<"欢迎使用杂

9、志订阅管理软件"<<endl;"*"<<endl;浏览订阅用户"<<endl; 查找用户信息"<<endl; 修改用户信息"<<endl; 保存信息 "<<endl;void Order_infor:input()cout<<"请输入姓名:"while(1) cin>>name;/if (cin.fail()错cout <<"n姓名输入错误cin.clear();/cin.get(); e

10、lse break;/cout<<"请输入性别:"while(1) cin>>sex;/if (cin.fail()输入姓名/ 判断输入的数据类型是否有请重新输入:";清除错误状态/重输输入正确则跳出循环输入性别/ 判断输入的数据类型是否有cout<<"tt0.退出程序4.cout<<"tt1. 增加新订户 5.cout<<"tt2.删除用户6.cout<<"tt3.统计本期杂志订户数7.cout<<"请输入功能按钮:cin>

11、>s;switch(s0) 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;/*888888888888888888888888888888888888

12、888888888888888888888888888888888888888*/cout <<"n 性别输入错误,请重新输入:”;cin.clear(); cin.get();else break;cout<<"请输入地址:" while(1) cin>>addr;if (cin.fail()错 cout <<"n cin.clear(); cin.get();else break;cout<<"请输入电话号码/地址输入错误,请重新输入:”;/II.清除错误状态重输输入正确则跳出循环

13、设置地址输入地址判断输入的数据类型是否有清除错误状态重输输入正确则跳出循环/设置电话号码while(1) 输入电话号码判断输入的数据类型是否有cin>>tel;/if (cin.fail()/错cout <<"n号码输入错误,请重新输入:”;清除错误状态重输输入正确则跳出循环设置杂志单位cin.clear();/cin.get();/ else break;/ cout<<"请输入杂志单位:"/while(1) 输入杂志单位判断输入的数据类型是否有cin>>mage;/if (cin.fail()/错cout <

14、;<"n杂志单位输入错误cin.clear();/cin.get();else break;/,请重新输入:”;清除错误状态/重输输入正确则跳出循环/设置单价cout<<"请输入单价:"while(1)cin>>price;if (cin.fail()/输入单价判断输入的数据类型是否有cout <<"n 单价输入错误,请重新输入:”;cin.clear();cin.get();/清除错误状态重输else break;/输入正确则跳出循环cout<<"请输入订阅数:"while(1)

15、/设置订阅数cin>>num;if (cin.fail()/输入订阅数判断输入的数据类型是否有cout <<"n订阅数输入错误,请重新输入:”;cin.clear();cin.get();/清除错误状态 重输else break;/输入正确则跳出循环cout<"请输入订阅限期(年while(1)月):";/设置期限cin>>y>>m; if (cin.fail()/输入期限判断输入的数据类型是否有cout <<"n 订阅限期输入错误,请重新输入:”;cin.clear();cin.get(

16、);/清除错误状态 重输/输入正确则跳出循环else break;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/voidOrder_infor:input(ifstreaminfile)/带参录入函数向链表输入infile>>name>>sex>>addr>>tel>>mage>>price>>num>>y>>m;/输入至链表/*888888888888888888888888

17、888888888888888888888888888888888888888888888888888*/voidOrder_infor:output()/信息输出函数向显示屏输出 cout<<setw(8)<<name<<setw(4)<<sex<<setw(10)<<addr<<setw(13)<<tel<<setw(10)< <mage<<setw(6)<<price<<setw(4)<<num<<setw(2

18、)<<y<<"/"<<m<<endl; /*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:output(ofstream & outfile) /向文件输出信息outfile<<setw(10)<<name/setw() 设置输出宽度<<setw(10)<<sex<<setw(10)<<addr<<

19、;setw(12)<<tel<<setw(10)<<mage<<setw(10)<<price<<setw(10)<<num<<setw(10)<<y<<setw(10)<<m <<endl;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/判断是否超期先比较年,若一样则比较月比较当前时间与限期,获得订阅的当前/ 返回表示订阅未超期bool Or

20、der_infor:comp(int y,int m) if(year>y|(year=y&&month>m) return true;/状况,返回表示订阅超期elsereturn false;向链表尾清屏定义对象将头指针/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:order()/部录入订阅信息system("cls");/Order_infor *p1,*p2=NULL;/指针p1=head;/赋给

21、p1int n=1;/定义循环控制变量while(p1->next)/当头结点后有数据时执行循环,头结点为空也不会执行循环p1=p1->next;/使 p 能够指向未存放数据的内存,录入信息会存放在所有信息之后while(n)/此循环执行在链表尾部插入录入的信息/通过循环不断开辟新空间录入新的数据p2=new Order_infor;/开辟存储空间,返回地址给 p2p2->input();/调用录入函数,为p2所指结点数据赋值p1->next=p2;/p1的 next指向新开辟空间,连接了 pl和p2p2->next=NULL;/p2的 next变为空指针p1=p

22、1->next;/p1指向新开辟的空间,pl紧随p2之后Order_infor:setg;/标记为修改cout<<"ttt 按1继续,按0返回:"/控制变量控制循环cin>>n;/输入 n/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:show()system("cls"); / 清屏cout.setf(ios:left);cout<<"订阅基本信息如下:&qu

23、ot;<<endl/显示所有订阅信息<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"地址"<<setw(13)<<"电话"<<setw(8)<<" 单位"<<setw(8)<<" 单价"<<setw(8)<<"定阅数"<<setw(

24、8)<<"期限"<<endl;Order_infor *p;/定义订阅信息类对象指针p=head;/指向链表头部,启用链表信息while(p->next)/只要下一结点不为空则执行循环/此循环功能在于输出所有订阅信息p=p->next;/P指向下节点cout<<setw(8)<<p->name<<setw(8)<<p->sex<<setw(8)<<p->addr<<setw(13)<<p->tel<<setw

25、(8)<<p->mage<<setw(8)<<p->price<<setw(8)<<p->num<<s etw(4)<<p->y<<"/"<<p->m<<endl;/调用next所指对象的输出信息函数,头结点未存放数据只是初始化了next /*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor

26、:found()system("cls");/string n;/变量cout<<"输入姓名:"信息cin>>n;if(!find(n)find函数查找cout<<"tt找不到你要查找的内容的话输出相应提示信息return;清屏定义辅助/输出提示/输入选择/调用!"<<endl;/找不到/函数调用结束/*888888888888888888888888888888888888888888888888888888888888888888888888888*/Order_infor* Ord

27、er_infor:find(string n)system("cls");/Order_infor *p;/指针p=head;/结点while(p->next)/尾部时执行循环if( (p->next)->getname()=n )/所查到的订阅信息cout.setf(ios:left);cout<<"订阅基本信息如下:"<<endl/清屏定义辅助指向链表头当链表未至班次匹配上则输出输出信息<<姓名 性别 地址 电话 单位 单价 定阅数 期限"<<endl;(p->next

28、)->output();出函数return p;到,返回的是目标结点的前一结点p=p->next;一节点return NULL;/调用输表示找指向下修改函数清屏定义信息类指针变/输出调用查找函数判断是否找到请利用程序查询功能确认!"<<endl;函数调用结束调用录入函数对目标结/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:mend()/ system("cls");/Order_infor *p;

29、/量string n;cout<<"ttt输入姓名方便查找:"提示信息cin>>n;p=find(n);/if(!p)/ cout<<"tt找不到你要修改的内容!/输出提示信息return;/(p->next)->input();/点数据再录入Order_infor:setg(1); /*888888888888888888888888888888888888888888888888888888888888888888888888888*/ void Order_infor:del_select()cout<&

30、lt;"请选择删除选项:"<<endl;cout<<"1.删除过期用户;2.删除指定用户"<<endl;int c;cin>>c;switch(c)case 1:d.del2();break;case 2:d.del1();break;default:cout<<"输入错误!"/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:del1(

31、)/辆信息函数system("cls");/Order_infor *p1,*p2,*p3;/对象指针用于链表操作string n;cout<<"ttt输入姓名:"/信息cin>>n;p1=find(n);/函数if(!p1)/返回值是否为NULLcout<<"tt找不到你要删除的内容!"<<endl;/到的提示return;/结束cout<<"nttt确定删除(y/n)?"/删除数据信息供用户核对char a;cin>>a;/if(a=

32、9;y'|a='Y')/点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况if(p1->next)->next=NULL)/为尾结点时p2=p1->next;/p2标结点p1->next=NULL;/p1标结点的next域重新赋值为空指针delete p2;/空间else/删除车清屏定义两输出提示调用查找判断函数输出没找函数调用显示将要输入指示因为头结目标结点指向目连接目释放目标目标结点为中间节点时p2=p1->next;/p2指向目标结点p3=(p1->next)->next;/p3指向目标结点下一结点p1->

33、;next=p3;/连接目标结点前后结点delete p2;/释放目标结点/标记为修Order_infor:setg(1);/*888888888888888888888888888888888888888888888888888888888888888888888888888*/ void Order_infor:del2()system("cls");Order_infor *p1,*p2,*p3;针用于链表操作int n;char c;p1=head;while(p1->next)/清屏定义两对象指"<<endl;n=p(p1->ne

34、xt)->y,(p1->next)->m); if(n)system("cls");cout<<"订阅基本信息如下:"<<endl<< " 姓名 性别 地址 电话/单位 单价输出信息定阅数 期限(p1->next)->output();cout<<"是否删除(y/n )"cin>>c;if(c='y'|c='Y')/因为头结点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况if(p1->

35、next)->next=NULL)/目标结点为尾结点时p2=p1->next;/p2指向目标结点p1->next=NULL;/p1连接目标结点的next域重新赋值为空指针deletep2;/释放目标空间return;目标结点为中间节p2;else/点时p2=p1->next;/p2指向目标结点p3=(p1->next)->next;/p3指向目标结点下一结点p1->next=p3;/连接目标结点前后结点delete/释放目标结点Order_infor:setg(1);/标记为修改p1=p1->next; /*8888888888888888888

36、88888888888888888888888888888888888888888888888888888888*/ void Order_infor:statistic()Order_infor *p;int n=0;int sum=0;p=head;cout<<"本期订阅信息"<<endl;cout<<"用户名订阅数单价全额"<<endl;while(p->next)cout<<(p->next)->getname()<<"t"<<

37、;(p->next)->getnum()<<"t"<<(p->next)->getprice()<<"t"<<(p->next)->getnum()*(p->next)->getprice()<<endl;n=n+(p->next)->getnum();sum+=(p->next)->getnum()*(p->next)->getprice(); p=p->next;cout<<"合计"<<"t"<<n <<"tt"<<sum<<endl;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/ void Order_infor:begin()Order_i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论