#include<string>
#include<fstream>
#include<stdlib.h>
#include<iomanip>
using namespace std;
class livers//livers類
{ private:
char name[20]; //姓名
char sex;
char room_num[10];
char parking[10];
char ID_num[20];
char phone_num[20];
public:
livers(){}
livers(char n[20],char s,char room[10],char park[10],char phone[20],char ID[20])
{strcpy(name,n);
sex=s;
strcpy(room_num,room);
strcpy(parking,park);
strcpy(phone_num,phone);
strcpy(ID_num,ID);}
friend void menu();//友元函數
};
void key()
{char mima[20],key[20];char yu_mima[20]="12345";
int flag;int p;char w;
ifstream in;
ofstream out;
fstream f; //輸入輸出對象
cout<<" ******************************************"<<endl;
cout<<" 歡迎登錄小區物業管理系統 "<<endl;
cout<<" ******************************************"<<endl<<endl;
do{flag=0;
cout<<" 請輸入管理員密鑰:"<<endl;
in.clear();
in.open("E:\\c.dat",ios::in);
if(in.fail()) //首次登錄
{cout<<endl<<" 歡迎首次登錄,您的預設密碼爲 12345:"<<endl<<endl;
cout<<" 請輸入:";
cin>>mima;
cout<<endl;
if(strcmp(yu_mima,mima)==0)
{flag=1;
cout<<" 密碼正確!請輸入下一步指令:"<<endl<<endl;}}
if(!in.fail()) //非首次登陸
{in>>key;
cin>>mima;
if(strcmp(key,mima)==0)
{flag=1;
cout<<" 密碼正確!請輸入下一步指令:"<<endl<<endl;}
}
in.close();
if(flag==0)
cout<<" 密碼有誤,請重新輸入"<<endl<<endl;
}while(flag==0);
cout<<" *************************"<<endl;
cout<<" * 0、修改密碼 *"<<endl;
cout<<" * 1、進入系統 *"<<endl;
cout<<" * 2、退出系統 *"<<endl;
cout<<" *************************"<<endl<<endl;
do{
do
{cout<<" 請輸入您的指令(0~2):"<<endl;
cin>>p;
switch(p)
{
case 0: //修改密碼
{cout<<" 請輸入新密碼:"<<endl;
cin>>key;
out.open("E:\\c.dat",ios::out);
out.clear();
out<<key;
out.close();}break;
case 1: menu();break;//進入系統
case 2: //退出系統
{cout<<" 謝謝使用,小區物業管理系統! "<<endl<<endl<<" Bye-bye! See you next time!"<<endl<<endl;
exit(0);}break;
default : cout<<" 輸入指令有誤,請重新輸入:"<<endl<<endl;break;
}
}while(p<0||p>2);
cout<<" 您想繼續進行其他操作嗎? y / n :"<<endl<<" ";
do{cin>>w;
cout<<endl;
if(w=='n')exit(0);
if(w!='y'&&w!='n')
cout<<" 指令錯誤!請重新輸入!"<<endl;
}while(flag==0);
if(w=='y')
{cout<<" 請輸入操作代碼: 0 修改密碼"<<endl;
cout<<" 1 進入系統"<<endl;
cout<<" 2 退出系統"<<endl;}
}while(w=='y');
} //密鑰函數
void menu()
{cout<<" ******************************************"<<endl;
cout<<" 小區物業管理系統 "<<endl;
cout<<" ******************************************"<<endl;
cout<<" **************************"<<endl;
cout<<" * 主菜單命令如下所示: *"<<endl;
cout<<" * 1、輸入數據 *"<<endl;
cout<<" * 2、增加數據 *"<<endl;
cout<<" * 3、修改數據 *"<<endl;
cout<<" * 4、信息查詢 *"<<endl;
cout<<" * 5、信息瀏覽 *"<<endl;
cout<<" * 6、信息刪除 *"<<endl;
cout<<" * 7、退出系統 *"<<endl;
cout<<" **************************"<<endl;
cout<<" 請輸入您的指令數字(1~7)"<<endl<<" ";
char p;char w;
livers liv[50];
livers *s[50];
ifstream in;
ofstream out;
fstream f; //輸入輸出對象
int i=0;
int j=0;
int flag=0;
do //flag判斷輸入是否有效
{
cin>>p;
if(p>='1'&&p<='7')
flag=1;
else
cout<<" 指令錯誤!請重新輸入:"<<endl;
}while(flag==0);
do{//最外層循環
switch(p) //接收功能選項
{
case '1': //信息輸入
{char name[20],sex,room_num[10],parking[10],phone_num[20],ID_num[20],c;
out.open("E:\\a.dat",ios::out);
do{
cout<<" 請輸入住戶姓名:";
cin>>name;
cout<<endl<<" 請輸入住戶性別:";
cin>>sex;
cout<<endl<<" 請輸入其房間號:";
cin>>room_num;
cout<<endl<<" 請輸入其車庫號:";
cin>>parking;
cout<<endl<<" 請輸入聯繫電話:";
cin>>phone_num;
cout<<endl<<" 請輸入身份證號:";
cin>>ID_num;
cout<<endl;
out<<setw(2)<<name<<setw(5)<<sex<<setw(10)<<room_num<<setw(10)<<parking<<setw(20)<<phone_num<<setw(20)<<ID_num; //文件輸入
cout<<" 數據輸入成功,想繼續輸入嗎? y / n : "<<endl<<" ";
cin>>c;
cout<<endl;
do
{
if(c!='y'&&c!='n')
{cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
char c;
cin>>c;}
else flag=1;
}while(flag==0);
}while(c=='y');
out.close();
break;
}
case '2': //增加數據
{char name[20],sex,room_num[10],parking[10],phone_num[20],ID_num[20],c;
out.open("E:\\a.dat",ios::app);
do
{
cout<<"請輸入您要增加的住戶的姓名:"<<endl<<endl;
cout<<" 請輸入住戶姓名:";
cin>>name;
cout<<endl<<" 請輸入住戶性別:";
cin>>sex;
cout<<endl<<" 請輸入其房間號:";
cin>>room_num;
cout<<endl<<" 請輸入其車庫號:";
cin>>parking;
cout<<endl<<" 請輸入聯繫電話:";
cin>>phone_num;
cout<<endl<<" 請輸入身份證號:";
cin>>ID_num;
cout<<endl;
out<<setw(2)<<name<<setw(5)<<sex<<setw(10)<<room_num<<setw(10)<<parking<<setw(20)<<phone_num<<setw(20)<<ID_num; //文件輸入
cout<<" 數據添加成功,想繼續添加嗎? y / n :"<<endl;
cin>>c;
cout<<endl;
if(c=='n')break;
if(c!='y'&&c!='n')
{cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
cin>>c;}
}while(c=='y');
out.close();
break;
}
case '3': //修改數據
{char name[20],sex,room_num[10],parking[10],phone_num[20],ID_num[20],c;
char na[20],s,room[10],park[10],phone[20],ID[20];
do
{int flag=0;
cout<<" 請輸入您要修改的住戶的姓名:"<<endl;
cin>>na;
cout<<endl;
f.open("E:\\a.dat",ios::in|ios::out);
f.seekg(0,ios::beg);
f.clear();
while(!f.eof())
{f>>name;
if(strcmp(name,na)==0)
{flag=1;
cout<<" 請輸入新房間號:";
cin>>room;
cout<<endl<<" 請輸入住戶性別:";
cin>>s;
cout<<endl<<" 請輸入其房間號:";
cin>>room;
cout<<endl<<" 請輸入其車庫號:";
cin>>park;
cout<<endl<<" 請輸入聯繫電話:";
cin>>phone;
cout<<endl<<" 請輸入身份證號:";
cin>>ID;
cout<<endl;
sex=s;
strcpy(room_num,room);
strcpy(parking,park);
strcpy(ID_num,ID);
strcpy(phone_num,phone);
f.seekp(0,ios::cur);
f<<setw(5)<<s<<setw(10)<<room<<setw(10)<<park<<setw(20)<<phone<<setw(20)<<ID; //文件輸入
cout<<" 修改成功! "<<endl<<endl;break;}
}
f.close();
if(flag==0)
cout<<" 您要修改的學生不存在!"<<endl<<endl;
cout<<" 您想繼續修改嗎? y / n :"<<endl;
cin>>c;
cout<<endl;
if(c=='n')break;
if(c!='y'&&c!='n')
{cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
cin>>c;}
}while(c=='y');
break;
}
case '4': //信息查詢
{char name[20],sex,room_num[10],room[10],parking[10],phone_num[20],ID_num[20];
cout<<" 請選擇您要進行查詢的方式:"<<endl<<endl<<" 1.按住戶名查詢"<<endl<<endl<<" 2.按房間號查詢"<<endl<<endl;
int k;
cin>>k;
switch(k)
case 1: //按住戶名查詢
{char na[20];char c;
do{
in.open("E:\\a.dat",ios::in);
in.seekg(0,ios::beg);
in.clear();
int flag=0;
cout<<" 請輸入你要查詢的住戶姓名:"<<endl;
cin>>na;
cout<<endl;
while(!in.eof())
{in>>name>>sex>>room_num>>parking>>phone_num>>ID_num;
if(strcmp(name,na)==0)
{flag=1;
cout<<" 您要查詢的住戶:"<<name<<" 的信息是: "<<endl<<endl;
cout<<"姓名 性別 房間號 車庫號 電話號碼 身份證號 "<<endl;
cout<<setw(2)<<name<<setw(5)<<sex<<setw(10)<<room_num<<setw(10)<<parking<<setw(20)<<phone_num<<setw(20)<<ID_num<<endl;}
}
in.close();
if(flag==0)
cout<<" 對不起!您要查詢的住戶不存在!"<<endl<<endl;
cout<<" 您想繼續查詢嗎? y / n :";
cin>>c;
cout<<endl;
if(c=='n')break;
if(c!='y'&&c!='n')
{cout<<" 指令錯誤!請重新輸入!"<<endl;
cin>>c;}
}while(c=='y');
break;
case 2 : //按房間號查詢
{
do{
int flag=0;
cout<<" 請輸入你要查詢的房間號:"<<endl;
cin>>room;
cout<<endl;
in.open("E:\\a.dat",ios::in);
in.seekg(0,ios::beg);
in.clear();
while(!in.eof())
{in>>name>>sex>>room_num>>parking>>phone_num>>ID_num;
if(strcmp(room_num,room)==0)
{flag=1;
cout<<"您要查詢的住戶:"<<name<<"的信息是: "<<endl<<endl;
cout<<"姓名 性別 房間號 車庫號 電話號碼 身份證號 "<<endl;
cout<<setw(2)<<name<<setw(5)<<sex<<setw(10)<<room_num<<setw(10)<<parking<<setw(20)<<phone_num<<setw(20)<<ID_num<<endl;}
}
in.close();
if(flag==0)
cout<<" 對不起!您要查詢的住戶不存在!"<<endl;
cout<<" 您想繼續查詢嗎? y / n :";
char c;
cin>>c;
cout<<endl;
if(c=='n')break;
if(c!='y'&&c!='n')
{cout<<" 指令錯誤!請重新輸入!"<<endl;
cin>>c;}
}while(c=='y');
break;
default:cout<<"對不起,您輸入的指令有誤:";}break;
}break;
case '5': //信息瀏覽
{char name[20],sex,room_num[10],parking[10],phone_num[20],ID_num[20];
in.open("E:\\a.dat",ios::in);
in.seekg(0,ios::beg);
in.clear();
if(in.get()==EOF){cout<<" 文件中已無數據"<<endl<<endl;in.close();break;}
cout<<" 本系統所有學生數據如下:"<<endl<<endl;
cout<<"姓名 性別 房間號 車庫號 電話號碼 身份證號 "<<endl;
while(!in.eof())
{in>>name>>sex>>room_num>>parking>>phone_num>>ID_num;
cout<<setw(2)<<name<<setw(5)<<sex<<setw(10)<<room_num<<setw(10)<<parking<<setw(20)<<phone_num<<setw(20)<<ID_num<<endl;
}
in.close();
break;
}
case'6': //信息刪除
{char name[20],na[20],sex,room_num[10],parking[10],phone_num[20],ID_num[20],c;
int k;
do
{int n=0;int flag=0;
cout<<" 請輸入您要刪除的學生的姓名:"<<endl;
cin>>na;
cout<<endl;
in.clear();
in.open("E:\\a.dat",ios::in);
in.seekg(0,ios::beg);
while(!in.eof())
{in>>name>>sex>>room_num>>parking>>phone_num>>ID_num;
s[n]=new livers(name,sex,room_num,parking,phone_num,ID_num);
liv[n]=*s[n];
delete s[n];
n++;}
in.close();
for(i=0;i<n;i++)
{if(strcmp(liv[i].name,na)==0)
{flag=1;k=i;}
}
if(flag==1)
{out.open("E:\\a.dat",ios::out);
out.seekp(0,ios::beg);
if(n>1)
{
for(i=0;i<k;i++)
out<<setw(2)<<liv[i].name<<setw(5)<<liv[i].sex<<setw(10)<<liv[i].room_num<<setw(10)<<liv[i].parking<<setw(20)<<liv[i].phone_num<<setw(20)<<liv[i].ID_num;
for(i=k+1;i<n;i++)
out<<setw(2)<<liv[i].name<<setw(5)<<liv[i].sex<<setw(10)<<liv[i].room_num<<setw(10)<<liv[i].parking<<setw(20)<<liv[i].phone_num<<setw(20)<<liv[i].ID_num;
cout<<" 信息刪除成功"<<endl<<endl;
}
if(n=1){}
out.close();
}
else
cout<<" 您要刪除的住戶不存在!"<<endl<<endl;
cout<<" 您想繼續刪除嗎? y / n :"<<endl;
cin>>c;
cout<<endl;
if(c=='n')break;
if(c!='y'&&c!='n')
{cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
cin>>c;}
}while(c=='y');
break;
}
case'7': //退出
{cout<<"Bye bye! See you next time."<<endl<<endl;
cout<<" 王建制作"<<endl<<endl<<endl;exit(0); }break; }
}//以上爲menu菜單中switch控制語句
cout<<" 您想繼續進行其他操作嗎? y / n :"<<endl<<" ";//以下控制循環語句
int flag=0;
do{cin>>w;
cout<<endl;
if(w=='n')exit(0);
if(w!='y'&&w!='n')
cout<<" 指令錯誤!請重新輸入!"<<endl;
else
flag=1;
}while(flag==0);
if(w=='y')
{cout<<" 請輸入操作代碼: 1 輸入數據"<<endl;
cout<<" 2 增加數據"<<endl;
cout<<" 3 修改數據"<<endl;
cout<<" 4 信息查詢"<<endl;
cout<<" 5 信息瀏覽"<<endl;
cout<<" 6 信息刪除"<<endl;
cout<<" 7 退出系統"<<endl;}
cin>>p;
}while(w=='y');//最外層的do-while循環
}//menu函數結束
int main()
{key();
menu();
return 0;
}