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

下载本文档

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

文档简介

1、include<iostream /数据流输入输出include<string>/字符串操作includefstream/文件输入输出includetime.h/时间库函数include<iomanip>/输入输出格式符using namespace std;/命名空间int year,month;/*888888888888888888888888888888888888888888888888888888888888888888888888888/class Order_inforstring name; /用户姓名string sex; /用户性别strin

2、g addr; /用户地址string tel; /用户号码string mage; /杂志单位float price; /杂志单价int num; /订阅数目int y,m; /订阅限期int g;public:Order_infor* head; /信息类头指针Order_infor* next; /信息类next域 void input(); /录入函数 void input(ifstream infile); /读取函数 void output(); /输出函数 void output(ofstream & outfile); /写入函数float getprice();int

3、 getnum();int getyear(); /获取期限时间函数int getmonth();string getname();void order(); /录入信息void mend(); /修改信息void del_select();void del1(); /删除信息void del2();void found();Order_inforfind(string n); bool find(int y,int m);void statistic();void show(); /显示信息bool comp(int y,int m); /判断当前订阅状况函数 void save(); /保

4、存信息 void begin(); /初始信息 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 O

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

6、void Menu:about()cout<”<endl <<"t1."endl <<”t2。"<endl ”t3."<endl <”t4."<endl; cout<""<<endl;/*88888888888888888888888888888888888888888888888888888888888888888888888888*/bool Menu:land()Menu b; /定义菜单类对象 b。about(); /输出系统说明strin

7、g 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(”pause"); /显示暂停return fal

8、se; /返回错误/*888888888888888888888888888888888888888888888888888888888888888888888888888/void Menu::mainmenu() system("cls”);string s; cout<"*”endl; cout<<" 欢迎使用杂志订阅管理软件 "endl; cout<<"*"<<endl; cout<<"tt0。退出程序 4.浏览订阅用户"<endl;cout<

9、;”tt1.增加新订户 5.查找用户信息”<<endl;cout<<"tt2。删除用户 6.修改用户信息"<endl;cout<"tt3.统计本期杂志订户数 7.保存信息 "endl;cout"请输入功能按钮:"cin>s;switch(s0)case1':d。order();break;case'2:d.del_select();break;case3':d.statistic();break;case4':d。show();break;case5:d。fou

10、nd();break;case6:d.mend();break;case'7':d。save();break;default:return;/*888888888888888888888888888888888888888888888888888888888888888888888888888/void Order_infor::input()cout<”请输入姓名: ”; while(1)cin>name; /输入姓名if (cin.fail() /判断输入的数据类型是否有错cout ”n姓名输入错误,请重新输入:";cin.clear(); /清除错误

11、状态cin.get(); /重输else break; /输入正确则跳出循环cout<<"请输入性别: ”; while(1)cin>sex; /输入性别if (cin。fail() /判断输入的数据类型是否有错cout "n性别输入错误,请重新输入:"cin.clear(); /清除错误状态cin。get(); /重输else break; /输入正确则跳出循环cout<”请输入地址: ”; /设置地址while(1)cin>addr; /输入地址if (cin.fail()) /判断输入的数据类型是否有错cout <<

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

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

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

15、ar(); /清除错误状态cin。get(); /重输else break; /输入正确则跳出循环/888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor:input(ifstream & infile) /带参录入函数向链表输入 infile>name>sexaddr>tel>>magepricenum>ym; /输入至链表/*8888888888888888888888888888888888888888888888

16、88888888888888888888888888888*/void Order_infor:output() /信息输出函数向显示屏输出cout<setw(8)<namesetw(4)sex<setw(10)<<addr<<setw(13)<<tel<<setw(10)mage<setw(6)<pricesetw(4)<<num<setw(2)<<y<<”/"<m<<endl; /*8888888888888888888888888888888

17、88888888888888888888888888888888888888888888/void Order_infor:output(ofstream & outfile) /向文件输出信息 outfilesetw(10)<name /setw()设置输出宽度 setw(10)sex setw(10)<addr <setw(12)tel <setw(10)mage <setw(10)<price <<setw(10)<num <setw(10)<<y <setw(10)<m <<endl

18、;/888888888888888888888888888888888888888888888888888888888888888888888888888*/bool Order_infor:comp(int y,int m) /判断是否超期if(yeary|(year=y&monthm))/先比较年,若一样则比较月return true; /比较当前时间与限期,获得订阅的当前状况,返回表示订阅超期elsereturn false; /返回表示订阅未超期/888888888888888888888888888888888888888888888888888888888888888888

19、888888888*/void Order_infor:order() /向链表尾部录入订阅信息 system("cls”); /清屏 Order_infor *p1,p2=NULL; /定义对象指针p1=head; /将头指针赋给p1int n=1; /定义循环控制变量while(p1next) /当头结点后有数据时执行循环,头结点为空也不会执行循环p1=p1>next; /使p能够指向未存放数据的内存,录入信息会存放在所有信息之后while(n) /此循环执行在链表尾部插入录入的信息 /通过循环不断开辟新空间录入新的数据p2=new Order_infor; /开辟存储空间

20、,返回地址给p2p2input(); /调用录入函数,为p2所指结点数据赋值p1->next=p2; /p1的next指向新开辟空间,连接了p1和p2p2next=NULL; /p2的next变为空指针p1=p1-next; /p1指向新开辟的空间,p1紧随p2之后 Order_infor::setg(1); /标记为修改cout<"ttt按1继续,按0返回: "; /控制变量控制循环cin>n; /输入n/*88888888888888888888888888888888888888888888888888888888888888888888888888

21、8/void Order_infor:show()system(”cls"); /清屏cout。setf(ios::left);cout<”订阅基本信息如下:”<endl /显示所有订阅信息<setw(8)<"姓名"setw(8)<”性别”setw(8)”地址"<setw(13)”电话"<setw(8)"单位"<setw(8)<”单价"<<setw(8)<<”定阅数"<setw(8)”期限"endl;Order_

22、infor p; /定义订阅信息类对象指针p=head; /指向链表头部,启用链表信息while(p->next) /只要下一结点不为空则执行循环 /此循环功能在于输出所有订阅信息p=p-next; /P指向下一节点 coutsetw(8)<<p-name<setw(8)<<p->sex<setw(8)p->addrsetw(13)<p->tel<setw(8)pmage<setw(8)<p->price<setw(8)<p-num<<setw(4)p>y<”/”<

23、;p->m<endl; /调用next所指对象的输出信息函数,头结点未存放数据只是初始化了next/888888888888888888888888888888888888888888888888888888888888888888888888888/void Order_infor::found() system(”cls”); /清屏string n; /定义辅助变量cout"输入姓名: " /输出提示信息cin>>n; /输入选择if(!find(n) /调用find函数查找cout<"tt找不到你要查找的内容!"&l

24、t;endl; /找不到的话输出相应提示信息return; /函数调用结束/*888888888888888888888888888888888888888888888888888888888888888888888888888*/Order_infor Order_infor:find(string n)system("cls"); /清屏Order_infor p; /定义辅助指针p=head; /指向链表头结点while(p->next) /当链表未至尾部时执行循环if( (pnext)-getname()=n ) /班次匹配上则输出所查到的订阅信息cout。s

25、etf(ios::left);cout”订阅基本信息如下:"<endl /输出信息 "姓名 性别 地址 电话 单位 单价 定阅数 期限”<endl; (p>next)->output(); /调用输出函数return p; /表示找到,返回的是目标结点的前一结点p=p->next; /指向下一节点return NULL;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_infor::mend() /修改函数 syst

26、em(”cls”); /清屏Order_infor *p; /定义信息类指针变量string n;cout<”ttt输入姓名方便查找: "; /输出提示信息cin>n;p=find(n); /调用查找函数if(!p) /判断是否找到cout<”tt找不到你要修改的内容!请利用程序查询功能确认!”<<endl; /输出提示信息return; /函数调用结束(pnext)>input(); /调用录入函数对目标结点数据再录入 Order_infor:setg(1);/8888888888888888888888888888888888888888888

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

28、888888888888*/void Order_infor:del1() /删除车辆信息函数 system(”cls”); /清屏Order_infor *p1,p2,p3; /定义两对象指针用于链表操作string n; cout<<”ttt输入姓名: "; /输出提示信息cinn;p1=find(n); /调用查找函数if(!p1) /判断函数返回值是否为NULL cout<”tt找不到你要删除的内容!"<endl; /输出没找到的提示return; /函数调用结束cout"nttt确定删除(y/n)?"; /显示将要删除数

29、据信息供用户核对char a;cin>a; /输入指示if(a=ya='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-next=p3; /

30、连接目标结点前后结点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)n=p(p1-next)>y,(p1->next)-m);if(n) system(&quo

31、t;cls”);cout<"订阅基本信息如下:"<<endl /输出信息 << "姓名 性别 地址 电话 单位 单价 定阅数 期限"<<endl;(p1>next)>output(); cout”是否删除(y/n)”; cinc;if(c='y'|c=Y) /因为头结点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况 if((p1>next)>next=NULL) /目标结点为尾结点时 p2=p1>next; /p2指向目标结点 p1>next=NU

32、LL; /p1连接目标结点的next域重新赋值为空指针 delete p2; /释放目标空间return; else /目标结点为中间节点时 p2=p1-next; /p2指向目标结点 p3=(p1->next)-next; /p3指向目标结点下一结点 p1next=p3; /连接目标结点前后结点 delete p2; /释放目标结点 Order_infor:setg(1); /标记为修改 p1=p1>next;/888888888888888888888888888888888888888888888888888888888888888888888888888/void Order_infor:statistic()Order_infor p;int n=0;int sum=0; p=head;cout<<"本期订阅信息”<endl;cout<”用户名 订阅数 单价 全额"<<endl;while(p->next)cout<<(p-nex

温馨提示

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

评论

0/150

提交评论