C++杂志订阅管理系统方案_第1页
C++杂志订阅管理系统方案_第2页
C++杂志订阅管理系统方案_第3页
免费预览已结束,剩余16页可下载查看

下载本文档

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

文档简介

1、#in clude<iostream> #in clude<stri ng>#in clude<fstream>#in clude<time.h>#in clude<ioma nip> using n amespace std; int year,m on th;/数据流输入输出/字符串操作/文件输入输出/时间库函数/输入输出格式符/命名空间/*888888888888888888888888888888888888888888888888888888888888888888888888888*/class Ordernforstri

2、 ng n ame;/用户姓名stri ng se x;/用户性别stri ng addr;/用户地址stri ng tel;/用户号码stri ng mage;/杂志单位float price;/杂志单价int num;/订阅数目int y,m;/订阅限期in t g;public:Order_ infor* head;/信息类头指针Order_i nfor* n ext;/信息类next域void in put();/录入函数void in put(ifstream & in file);/读取函数void output();/输出函数void output(ofstream &a

3、mp; outfile);/写入函数float getprice();int get num();int getyear();/获取期限时间函数int getmo nth();stri ng get name();void order();/录入信息void men d();/修改信息void del_select();void del1();/删除信息void del2();void foun d();Order_ in for*fi nd(stri ng n);bool fin d(i nt y,i nt m);void statistic();void show();bool comp(

4、i nt y,i nt m);订阅状况函数void save();/显示信息判断当前保存信息/void begi n();/初始信息void clear();/清除函数void setg(i nt k) g=k; /设置系统修改标志int getg() return g;/返回系统修改标志d;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/float Order_ in for:getprice()return price;int Order_ in for:get num()retu

5、rn num;int Order_i nfor:getyear()return y;int Order_ in for:getm on th()return m;stri ng Order_ in for:get name()return n ame;/*888888888888888888888888888888888888888888888888888888888888888888888888*/class Menupublic:void about();/关于void mainmenu ();/主菜单函数bool la nd();/管理员登陆;/*88888888888888888888

6、8888888888888888888888888888888888888888888888888888*/void Men u:about()cout<<" "<<endl<<"t1."<<e ndl<<"t2."<<e ndl<<"t3."<<e ndl<<"t4."<<e ndl;cout<<" "<<e ndl;/*88888

7、888888888888888888888888888888888888888888888888888888888888888888888*/bool Men u:la nd()Menu b;b.about();stri ng s;int i=0;cout<<"请输入管理员密while(1)cin> >s;if(s="123456")return true;elsecout<<"输入密码错误 i+;if(i>=3)break;/"<<e ndl;/,请重新输入:"/cout<

8、<"输入错误三次!系统自动退出!"<<endl;/system("pause");/return false;/定义菜单类对象输出系统说明计数变量 输出提示信息输入正确 返回正确 输错了输出提示信息 计数变量自加 连输三次错误 跳出循环提示将退出登录显示暂停返回错误/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Men u:ma inmenu()system("cls");stri ng s;cou

9、t<<I* "<cout<<""<<e ndl;欢迎使用杂志订阅管理软件*"<<e nccout<<"ttO.cout<<"tt1.cout<<"tt2.cout<<"tt3.退出程序4.增加新订户5.删除用户6.统计本期杂志订户数浏览订阅用户"<<endl; 查找用户信息"<<endl; 修改用户信息"<<endl;7.保存信息"<

10、<e ndl;cout<<"请输入功能按钮:cin> >s;switch(sO)case'1':d.order();break;case'2':d.del_select();break;case'3':d.statistic();break;case'4':d.show();break;case'5':d.fo un d();break;case'6':d.me nd();break;case'7':d.save();break;default

11、:retur n;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Order_ in for:i nput()cout<<"请输入姓名:" while(1) cin»n ame;if (ci n. fail()错cout <<"n cin. clear(); cin .get();else break; cout<<"请输入性别while(1)cin> >sex;if (ci n

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

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

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

15、lt;<"请输入订阅数:";while(1)cin»num;/if (ci n. fail()错cout <<"n订阅数输入错误cin .clear();/cin .get(); else break;/cout<<"请输入订阅限期(年 月):while(1)cin»y»m;/if (ci n. fail()错cout <<"n订阅限期输入错误cin .clear();/cin .get();else break;/设置单价输入单价/ 判断输入的数据类型是否有请重新输入:&

16、quot;清除错误状态/重输输入正确则跳出循环/设置订阅数输入订阅数/ 判断输入的数据类型是否有,请重新输入:"清除错误状态/重输输入正确则跳出循环/设置期限输入期限/ 判断输入的数据类型是否有请重新输入:"清除错误状态/重输输入正确则跳出循环/*888888888888888888888888888888888888888888888888888888888888888888888888888*/voidOrdernfor:i nput(ifstream/带参录入函数向链表输入in file)in file>n ame»sex>>addr>

17、;>tel>>mage»price >>num»y»m;/输入至链表/*888888888888888888888888888888888888888888888888888888888888888888888888888*/voidOrdernfor:output()/信息输出函数向显示屏输出 cout<<setw(8)< <n ame<<setw(4)<<sex<<setw(10)<<addr<<setw(13)<<tel<<

18、;setw(10)< <mage<<setw(6)<<price<<setw(4)< <nu m<<setw(2)<<y<<"/"<<m<<e ndl;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Ordernfor:output(ofstream & outfile) /向文件输出信息outfile<<setw(1

19、0)< <n ame/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<<e ndl;bool Order_ in for:comp(i nt y,i nt m)if

20、(year>y|(year=y&&mon th>m)/ return true;/状况,返回表示订阅超期elsereturn false;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/判断是否超期先比较年,若一样则比较月比较当前时间与限期,获得订阅的当前/ 返回表示订阅未超期/*888888888888888888888888888888888888888888888888888888888888888888888888888*/ void Order_i

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

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

23、8*/void Ordernfor:show()system("cls"); /清屏cout.setf(ios:left);cout<<"订阅基本信息如下:"<<endl阅信息/显示所有订<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"地址”<<setw(13)<<"电话"<<setw(8)<<"单

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

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

26、xt/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Ordernfor:fo un d()system("cls");/清屏定义辅助输出提示变量stri ng n;/cout<<"输入姓名:";/信息cin»n;/输入选择if(!fi nd( n)/调用find函数查找rcout<<"tt找不到你要查找的内容!"<<e ndl;/找不到的话输出相应提示信息return;/

27、函数调用结束/*888888888888888888888888888888888888888888888888888888888888888888888888888*/Ordernfor* Order_ in for:fi nd(stri ng n)system("cls");/Order_ infor *p;/指针p=head;/结点while(p->n ext)/尾部时执行循环if( (p->n ext)->get name()=n)所查到的订阅信息cout.setf(ios:left);清屏定义辅助指向链表头当链表未至/班次匹配上则输出/输出信息电

28、话 单位 单价 定阅数 期限cout<<"订阅基本信息如下:"<<endl << " 姓名 性别 地址"<<e ndl;(p_>n ext)_>output();/调用输出函数return p;/表示找到,返回的是目标结点的前一结点p=p->n ext;/指向下一节点return NULL;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Ordernfor:me nd()

29、 system("cls"); Order_i nfor *p;量stri ng n; cout<<"ttt提示信息cin»n;p=fi nd(n);if(!p)/输入姓名方便查找/修改函数清屏定义信息类指针变/输出调用查找函数判断是否找到cout<<"tt找不到你要修改的内容!请利用程序查询功能确认!"<<e ndl;/输出提示信息函数调用结束调用录入函数对目标结return;/(p->n ext)->i nput();/点数据再录入Order_i nfor:setg(1);/*888

30、888888888888888888888888888888888888888888888888888888888888888888888888*/ void Order_i nfor: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<<&q

31、uot;输入错误!"/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Ordernfor:del1()辆信息函数/system("cls");Order_i nfor *p1,*p2,*p3;对象指针用于链表操作stri ng n;cout<<"ttt/信息cin»n; p1=fi nd(n);函数if(!p1)返回值是否为INULLcout<<"tt到的提示return;结束 cout<

32、<"nttt删除数据信息供用户核对char a; cin> >a;if(a='y'|a='Y') 点为空仅有输入姓名:"/找不到你要删除的内容确定删除(y/n)?"/!"<<e ndl;/next域所以只要考虑被删结点是中间结点和尾结点情况if(p1-> next)-next=NULL)/p2=p1- >n ext;/p2标结点p1-> next=NULL;/p1标结点的next域重新赋值为空指针delete p2;/空间为尾结点时else /为中间节点时p2=p1- >

33、;n ext;/p2/删除车清屏定义两输出提示调用查找判断函数输出没找函数调用显示将要输入指示因为头结目标结点指向目连接目释放目标目标结点指向目标结点下一结点p1- >n ext=p3;/连接目标结点前后结点delete p2;/释放目标结点iOrdernfor:setg(1);/标记为修标结点p3=(p1- >n ext)->n ext;p3指向目改/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Ordernfor:del2()system("c

34、ls");/Ordernfor *p1,*p2,*p3;/针用于链表操作int n;char c;p仁head;while(p1- >n ext)n=p(p1- >n ext)->y,(p1- >n ext)->m);if(n)system("cls");cout<<"订阅基本信息如下:"<<endl<< " 姓名 性别 地址 电话/单位 单价清屏定义两对象指输出信息定阅数 期限"<<e ndl;(p1- >n ext)->output

35、(); cout<<"是否删除(y/n)"cin»c;因为头结if(c='y'|c='Y') /点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况if(p1-> next)-next=NULL)/目标结点为尾结点时 p2=p1- >n ext;/p2指向目标结点p1-> next=NULL;/p1连接目标结点的next域重新赋值为空指针/释放目标空间return;目标结点为中间节p2;else /点时p2=p1- >n ext;/p2指向目标结点p3=(p1- >n ext)-&

36、gt;n ext;p3指向目标结点下一结点p1- >n ext=p3;/连接目标结点前后结点delete/释放目标结点Ordernfor:setg(1);/标记为修改p1=p1- >n ext; /*888888888888888888888888888888888888888888888888888888888888888888888888888*/ void Order_ in for:statistic() Order_ infor *p;int n=0;int sum=0;p=head;cout<<"本期订阅信息"<<endl;c

37、out<<"用户名订阅数单价 全额"<<endl;while(p-> next)cout<<(p->n ext)->get name()<<"t"<<(p_ >n ext)->get num() <<"t"<<(p->n ext)->getprice()<<"t"<<(p->n ext)->get num()*(p_ >n ext)->getp

38、rice()<<e ndl; n=n+(p->n ext)->get num ();sum+=(p->n ext)->get num()*(p->n ext)->getprice();p=p->n ext;cout<<"合计"<<"t"<<n <<"tt"<<sum<<endl;/*888888888888888888888888888888888888888888888888888888888888888888888888888*/void Ordernfor:begi n()Ordernfor *p,*p2;p=head;ifs

温馨提示

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

评论

0/150

提交评论