1、include
2、 string addr; //用户地址 string tel; //用户号码 string mage; //杂志单位 float price; //杂志单价 int num; //订阅数目 int y,m; //订阅限期 int g; public: Order_infor* head; //信息类头指针 Order_infor
3、 next; //信息类next域 void input(); //录入函数 void input(ifstream & infile); //读取函数 void output(); //输出函数 void output(ofstream & outfile);
4、 //写入函数 float getprice(); int getnum(); int getyear(); //获取期限时间函数 int getmonth(); string getname(); void order(); //录入信息 void mend(); //修改信息 v
5、oid 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);
6、 //判定目前订阅情况函数 void save(); //保留信息 void begin(); //初始信息 void clear(); //清除函数 void setg(int k){ g=k; } //设置系统修改标志
7、 int getg(){ return g;} //返回系统修改标志 }d; /*888*/ float Order_infor::getprice() { return price; } int Order_infor::getnum() { return num; } int Order_infor::getyear() { return y; } int Order_infor::getmonth() { return m; } string Order_in
8、for::getname() { return name; } /**/ class Menu { public: void about(); //相关 void mainmenu(); //主菜单函数 bool land(); //管理员登陆 }; /**/ void Menu::a
9、bout()
{
cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< 10、
b.about(); //输出系统说明
string s;
int i=0; //计数变量
cout<<"请输入管理员密码:"< 11、 //输入正确
return true; //返回正确
else //输错了
{
cout<<"输入密码错误,请重新输入:"; //输出提醒信息
i++; //计数变量自加
if(i>=3) 12、 //连输三次错误
break; //跳出循环
}
}
cout<<"输入错误三次!系统自动退出!"< 13、enu()
{
system("cls");
string s;
cout<<"********************************************************************************"< 14、"< 15、
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;
}
}
/*888*/
void Order_infor::input()
{
cout<<"请输入姓名: ";
while(1)
{
cin> 16、>name; //输入姓名
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n姓名输入错误,请重新输入:";
cin.clear(); //清除错误状态
cin.get(); //重输
}
else break; //输入正确则跳出循环
}
cout<<"请输入 17、性别: ";
while(1)
{
cin>>sex; //输入性别
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n性别输入错误,请重新输入:";
cin.clear(); //清除错误状态
cin.get(); //重输
}
else break; 18、 //输入正确则跳出循环
}
cout<<"请输入地址: "; //设置地址
while(1)
{
cin>>addr; //输入地址
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n地址输入错误,请重新输入:";
cin.clear(); //清除错误状态
19、 cin.get(); //重输
}
else break; //输入正确则跳出循环
}
cout<<"请输入电话号码: "; //设置电话号码
while(1)
{
cin>>tel; //输入电话号码
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n 20、号码输入错误,请重新输入:";
cin.clear(); //清除错误状态
cin.get(); //重输
}
else break; //输入正确则跳出循环
}
cout<<"请输入杂志单位: "; //设置杂志单位
while(1)
{
cin>>mage; //输入杂志 21、单位
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n杂志单位输入错误,请重新输入:";
cin.clear(); //清除错误状态
cin.get(); //重输
}
else break; //输入正确则跳出循环
}
cout<<"请输入单价: "; //设置单价
22、
while(1)
{
cin>>price; //输入单价
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n单价输入错误,请重新输入:";
cin.clear(); //清除错误状态
cin.get(); //重输
}
else break; //输入正确 23、则跳出循环
}
cout<<"请输入订阅数: "; //设置订阅数
while(1)
{
cin>>num; //输入订阅数
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n订阅数输入错误,请重新输入:";
cin.clear(); //清除错误状态
cin.get(); 24、 //重输
}
else break; //输入正确则跳出循环
}
cout<<"请输入订阅限期(年 月): "; //设置期限
while(1)
{
cin>>y>>m; //输入期限
if (cin.fail()) //判定输入数据类型是否有错
{
cout <<"\n订阅限期输入错误,请重新输入:";
cin.clear(); 25、 //清除错误状态
cin.get(); //重输
}
else break; //输入正确则跳出循环
}
}
/*888*/
void Order_infor::input(ifstream & infile) //带参录入函数向链表输入
{
infile>>name>>sex>>addr 26、>>tel>>mage>>price>>num>>y>>m; //输入至链表
}
/*888*/
void Order_infor::output() //信息输出函数向显示器输出
{
cout< 27、etw(4)< 28、 < 29、//返回表示订阅未超期
}
/*888*/
void Order_infor::order() //向链表尾部录入订阅信息
{
system("cls"); //清屏
Order_infor *p1,*p2=NULL; //定义对象指针
p1=head; 30、 //将头指针赋给p1
int n=1; //定义循环控制变量
while(p1->next) //当头结点后有数据时实施循环,头结点为空也不会实施循环
p1=p1->next; //使p能够指向未存放数据内存,录入信息会存放在全部信息以后
wh 31、ile(n) //此循环实施在链表尾部插入录入信息
{ //经过循环不停开辟新空间录入新数据
p2=new Order_infor; //开辟存放空间,返回地址给p2
p2->input(); // 32、调用录入函数,为p2所指结点数据赋值
p1->next=p2; //p1next指向新开辟空间,连接了p1和p2
p2->next=NULL; //p2next变为空指针
p1=p1->next; //p1指向新开辟空间,p1紧随p2以后
Ord 33、er_infor::setg(1); //标识为修改
cout<<"\t\t\t按1继续,按0返回: "; //控制变量控制循环
cin>>n; //输入n
}
}
/*888*/
void Order_infor::show()
{
system("cls"); //清屏
cout.setf(ios::left);
cout<<" 34、订阅基础信息以下:"< 35、 //指向链表头部,启用链表信息
while(p->next) //只要下一结点不为空则实施循环
{ //此循环功效在于输出全部订阅信息
p=p->next; //P指向下一节点 36、
cout< 37、ound()
{
system("cls"); //清屏
string n; //定义辅助变量
cout<<"输入姓名: "; //输出提醒信息
cin>>n; //输入选择 38、
if(!find(n)) //调用find函数查找
{
cout<<"\t\t找不到你要查找内容!"< 39、); //清屏
Order_infor *p; //定义辅助指针
p=head; //指向链表头结点
while(p->next) //当链表未至尾部时实施循环
{
40、 if( (p->next)->getname()==n ) //班次匹配上则输出所查到订阅信息
{
cout.setf(ios::left);
cout<<"订阅基础信息以下:"< 41、数
return p; //表示找到,返回是目标结点前一结点
}
p=p->next; //指向下一节点
}
return NULL;
}
/*888*/
void Order_infor::mend() //修改函数
{
system("cls") 42、 //清屏
Order_infor *p; //定义信息类指针变量
string n;
cout<<"\t\t\t输入姓名方便查找: "; //输出提醒信息
cin>>n;
p=find(n); //调用查找函数
if(!p) 43、 //判定是否找到
{
cout<<"\t\t找不到你要修改内容!请利用程序查询功效确定!"< 44、select()
{
cout<<"请选择删除选项:"< 45、stem("cls"); //清屏
Order_infor *p1,*p2,*p3; //定义两对象指针用于链表操作
string n;
cout<<"\t\t\t输入姓名: "; //输出提醒信息
cin>>n;
p1=find(n); 46、 //调用查找函数
if(!p1) //判定函数返回值是否为NULL
{
cout<<"\t\t找不到你要删除内容!"< 47、据信息供用户查对
char a;
cin>>a; //输入指示
if(a=='y'||a=='Y')
{ //因为头结点为空仅有next域所以只要考虑被删结点是中间结点和尾结点情况
if((p1->next)->next==NULL) 48、 //目标结点为尾结点时
{
p2=p1->next; //p2指向目标结点
p1->next=NULL; //p1连接目标结点next域重新赋值为空指针
delete p2; //释放目标空间
}
else
{ 49、 //目标结点为中间节点时
p2=p1->next; //p2指向目标结点
p3=(p1->next)->next; //p3指向目标结点下一结点
p1->next=p3; //连接目标结 50、点前后结点
delete p2; //释放目标结点
}
Order_infor::setg(1); //标识为修改
}
}
/*888*/
void Order_infor::del2()
{
system("cls"); //清屏
Order_infor *p1,*p2,*p3;






