【C++課程設計】通訊錄管理系統
通訊錄
--------------------------------------------
/*類的定義部分 Person.h檔案*/
class Person //定義人類
{
protected:
string StuId;//學號
string Age; //年齡
char Name[20]; //姓名
char Sex[10]; //性別
char Addre[20];//地址
string Tel; //電話
Person *next; //Person類物件指標變數
public:
Person(string ID,char *Name,char *Sex,string Age, string Tel,char *Addre)
{
strcpy(this->Name,Name);
strcpy(this->Sex,Sex);
strcpy(this->Addre,Addre);
this->Tel=Tel;
this->StuId=ID;
this->Age=Age;
}
friend class Manage;//友元類
/*Manage類是Person類的友元類,則Manage類的所有成員函式都是Person
類的友元函式,都可以訪問Person類的私有和保護成員*/
};
class Manage //管理 類
{
public:
Manage() //建構函式
{
person=0;
Load(); //成員函式
}
~Manage() //解構函式
{
Person *p;//Person類的物件指標變數
p=person;
while(p) //當p不為0,即電話簿中記錄不為0
{
p=p->next;
delete person; //刪除該類物件
person=p;//準備刪除下一物件
}
person=0;
}
void Find(char Name[20]);//按姓名查詢
void Find(string ID); //按學號查詢
void Welcome();
void Add(); //新增資訊
void Delete();//刪除資訊
void Modify(string ID);//修改資訊
void Query(); //查詢資訊
void TJ(); //統計聯絡人
void Save();//儲存資料
void Load();//讀入資料
void Look();//預覽資訊
void DesTory();//清除聯絡人
void Exit();//退出介面
void Output(Person *p)
{
cout<<"\t\t學號: "<<p->StuId<<endl;
cout<<"\t\t姓名: "<<p->Name<<endl;
cout<<"\t\t性別: "<<p->Sex<<endl;
cout<<"\t\t年齡: "<<p->Age<<endl;
cout<<"\t\t電話: "<<p->Tel<<endl;
cout<<"\t\t住址: "<<p->Addre<<endl;
cout<<endl;
}
private:
Person *person; //Person類物件指標
};
-------------------------------------------------
/*類的功能實現部分 Manage.cpp*/
void Manage:: Welcome()/*歡迎介面*/
{
printf("\n\n");
printf(" \t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf(" \t┃**********************************************************┃\n");
printf(" \t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
printf(" \t┃***┃************************************************┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 歡迎進入我的通訊錄管理系統 ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 製作人:XXY ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 2013.12.22 ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃************************************************┃***┃\n");
printf(" \t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
printf(" \t┃**********************************************************┃\n");
printf(" \t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n\n是否選擇登陸(Y/N):[ ]\b\b"); //左移一位“\b ”
}
void Manage::Add()/*新增聯絡人*/
{
system("cls");//清屏命令,Windows對應的是cls
Person *p,*p2; //新節點指標
string StuId,Age,Tel;
char Name[20],Sex[10],Addre[20];
char c;
cout<<"\n\t\t\t\t** 新增學生通訊錄 **\n\n";
//輸入學生資訊
cout<<"輸入學號:\t";
cin>>StuId;
cout<<endl;
{//塊作用域
Person *p1;
p1=person;
while(p1)
{
if(p1->StuId==StuId)
{
break;
}
else
{
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<"該學號已存在,\n"<<endl;
cout<<"該學生資訊為: \n"<<endl;
Find(StuId);
cout<<endl;
cout<<"\n請重新輸入(Y/N):"<<endl;
cin>>c;
if(toupper(c)=='Y') //toupper()函式是將字元轉換為對應的大寫字母
{
Add();
return ;
}
else
return ;
}
}//塊作用域
cout<<"輸入姓名:\t";
cin>>Name;
cout<<endl;
cout<<"輸入性別:\t";
cin>>Sex;
cout<<endl;
cout<<"輸入年齡:\t";
cin>>Age;
cout<<endl;
cout<<"輸入電話:\t";
cin>>Tel;
cout<<endl;
cout<<"輸入地址:\t";
cin>>Addre;
cout<<endl;
p=new Person(StuId,Name,Sex,Age,Tel,Addre);
p->next=0;
//學生節點加入連結串列
if(person) //若已經存在節點
{
p2=person;
while(p2->next) //查詢尾節點
{
p2=p2->next;
}
p2->next=p; //連線
}
else //若不存在節點(表空)
{
person=p; //連線
}
//system("cls");
cout<<"\t\t\t ****新增成功***\n"<<endl;
cout<<"是否繼續新增?(Y/N)"<<endl;
cin>>c;
if(toupper(c)=='Y')
{
Add();
return ;
}
else
return;
}
void Manage::Delete() //刪除聯絡人
{
system("cls");
char c;
char ch;
string StuId;
cout<<"\n\t\t** 刪除聯絡人資訊 **\n\n";
cout<<"輸入要刪除的學生ID:\t";
cin>>StuId;
cout<<endl;
//查詢要刪除的節點
Person *p1,*p2;
p1=person;
while(p1)
{
if(p1->StuId==StuId)
break;
else
{
p2=p1;
p1=p1->next;
}
}
//刪除節點
if(p1!=NULL) //若找到節點,則刪除
{
cout<<"所要刪除的學生的資訊如下:\n"<<endl;
Output(p1);
cout<<"確定是否刪除(Y/N): ";
cin>>c;
if(toupper(c)!='Y')
return;
if(p1==person) //若要刪除的節點是第一個節點
{
person=p1->next;
delete p1;
}
else //若要刪除的節點是後續節點
{
p2->next=p1->next;
delete p1;
}
cout<<"\n\t\t***刪除成功***\n\n";
cout<<"是否繼續刪除(Y/N) "<<endl;
cin>>c;
if(toupper(c)=='Y')
{
Delete();
return ;
}
else
return;
}
else //未找到節點則返回
{
cout<<"未找到該學生!\n";
cout<<"\n是否繼續刪除(Y/N)?\n";
cin>>ch;
if(ch=='Y'||ch=='y') Delete();
else{return;}
}
}
void Manage::Modify(string ID)/*修改聯絡人資訊*/
{
Person *p1;
char c;
char ch;
p1=person;
while(p1)
{
if(p1->StuId==ID)
break;
else
{
p1=p1->next;
}
}
if(p1!=NULL) //若找到節點
{
system("cls");
cout<<"所要修改的學生資訊如下: \n"<<endl;
Output(p1);
do
{
cout<<"1.修改姓名 2.修改性別 3.修改年齡 4.修改聯絡方式 5.修改地址 6.退出修改\n"<<endl;
cout<<"請選擇(1-6)要修改的資訊\n";
cin>>c;
if(c!='5')
cout<<"請輸入新的資訊: ";
switch(c)
{
case '1': cin>>p1->Name;break;
case '2': cin>>p1->Sex;break;
case '3': cin>>p1->Age;break;
case '4': cin>>p1->Tel;break;
case '5': cin>>p1->Addre;break;
default: return; break;
}
cout<<"\n\t ***修改成功***\n"<<endl;
cout<<"是否繼續修改(Y/N): "<<endl;
cin>>c;
if(toupper(c)=='N')
{
return;
}
}while(c!='6');
system("cls");
cout<<"\n\t ***修改成功***"<<endl;
cout<<"是否繼續修改(Y/N): "<<endl;
if(toupper(c)=='Y')
{
cout<<"請輸入要修改人員的ID"<<endl;
cin>>ID;
cout<<endl;
Modify(ID);
return;
}
else
return;
}
else //未找到聯絡人資訊
{
cout<<"\n未找到聯絡人!\n";
cout<<"\n是否繼續修改(Y/N)?\n";
cin>>ch;
if(ch=='Y'||ch=='y')
{cout<<"\n請重新輸入要修改人員的ID:"<<endl;
cin>>ID;
cout<<endl;
Modify(ID);
}
else{return;}
}
}
void Manage::Save() //儲存資訊
{
ofstream fPerson("Person.txt",ios::out);
char c;
system("cls");
cout<<"\n儲存資料,是否繼續?[Y/N]:";
cin>>c;
if(toupper(c)!='Y')
return;
Person *p=person;
while(p)
{
fPerson<<p->StuId<<" "<<p->Name<<" "<<p->Sex<<" "<<p->Age<<" "<<p->Tel<<" "<<p->Addre<<endl;
p=p->next;
}
fPerson.close();
cout<<"\n儲存成功...\n";
system("pause");
}
void Manage::Load() //資料讀入
{
ifstream fPerson;
Person *p=person;
string StuId,Age,Tel;
char Name[20],Sex[10],Addre[20];
fPerson.open("person.txt",ios::in);
fPerson>>StuId>>Name>>Sex>>Age>>Tel>>Addre;
while(fPerson.good())
{
p=new Person(StuId,Name,Sex,Age,Tel,Addre);
p->next=0;
//員工結點加入連結串列
if(person) //若已經存在結點
{
Person *p2;
p2=person;
while(p2->next) //查詢尾結點
{
p2=p2->next;
}
p2->next=p; //連線
}
else //若不存在結點(表空)
{
person=p; //連線
}
fPerson>>StuId>>Name>>Sex>>Age>>Tel>>Addre;
}
fPerson.close();
}
void Manage::Find(string ID)/*ID查詢*/
{
Person *p1;
p1=person;
while(p1)
{
if(p1->StuId==ID||p1->Tel==ID)
break;
else
{
p1=p1->next;
}
}
if(p1!=NULL)
{
Output(p1);
}
else
{
cout<<"未找到該學生!"<<endl;
}
}
void Manage::Find(char Name[20])/*姓名查詢*/
{
Person *p1;
int count=0;
p1=person;
while(p1)
{
if(strcmp(p1->Name,Name)==0||strcmp(p1->Addre,Name)==0)
{
count++;
Output(p1);
}
p1=p1->next;
}
if(count)
{
cout<<"\t查詢成功!!!\t"<<endl;
if(count>1&&strcmp(p1->Name,Name)==0){cout<<"\n共找到 "<<count<<" 個名字為 **"<<Name<<"**的同學"<<endl;}
if(count>1&&strcmp(p1->Addre,Name)==0){cout<<"\n共找到 "<<count<<" 個 **"<<Name<<"**的同學"<<endl;}
}
else
{cout<<"\n\t\t未找到該學生!!!\n"<<endl;}
}
void Manage::Query()/*/查詢的主介面*/
{
char c;
string ID,Tel;
char Name[20],Addre[20];
do{
cout<<"1.按學號查詢 2.按名字查詢 3.按電話號碼查詢 4.歸屬地查詢 5.退出查詢"<<endl;
cin>>c;
cout<<endl;
switch(c)
{
case '1':{
cout<<"輸入學號 ID: ";
cin>>ID;
Find(ID);
};break;
case '2':{
cout<<"輸入姓名 Name: ";
cin>>Name;
Find(Name);
};break;
case '3':{
cout<<"輸入電話號碼 Tel"<<endl;
cin>>Tel;
Find(Tel);
};break;
case '4':{
cout<<"輸入地址 Address"<<endl;
cin>>Addre;
Find(Addre);
};break;
case '5':break;
default: cout<<"輸入有誤 請重新輸入!!!\n"<<endl;
}
}while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5');
cout<<"\t\t\t ***查詢成功***\n"<<endl;
cout<<"\t是否繼續查詢(Y/N)?\n";
cin>>c;
if(toupper(c)=='Y')
{
system("cls");
Query();
return ;
}
else
return ;
system("pause");
}
void Manage::Look()/*預覽資訊*/
{
system("cls");
Person *p1;
int count=0;
char c;
p1=person;
while(p1)
{
cout<<"ID: "<<p1->StuId<<"\t姓名: "<<p1->Name<<endl;
count++;
p1=p1->next;
}
if(count!=0)
{
cout<<"\n\t\t預覽成功!!!\n"<<endl;
cout<<"查詢詳細資訊(Y/N): ";
cin>>c;
if(toupper(c)=='Y')
{
Query();
return;
}
else
return;
}
else
{
cout<<"尚未建立通訊錄,是否建立(Y/N)"<<endl;
cin>>c;
if(toupper(c)=='Y')
{
Add();
return;
}
else
return;
}
}
void Manage::DesTory()/*清除通訊錄資訊*/
{
char c;
system("cls");
cout<<"\n\t\t\t** 清除資訊 **\n";
cout<<"警告:\n 清除通訊錄資訊會導致您儲存的資訊完全消失!!!\n"<<endl;
cout<<"是否決定清除通訊錄資訊(Y/N): "<<endl;
cin>>c;
if(toupper(c)!='Y')
return;
cout<<"請再次確認(Y/N)"<<endl;
cin>>c;
if(toupper(c)!='Y')
return;
else
{
Person *p;
p=person;
while(p)
{
p=p->next;
delete person;
person=p;
}
person=0;
}
system("pause");
}
void Manage::Exit()/*/退出*/
{
cout<<"\n";
for(int i=0;i<20;i++)
{
printf("·");
Sleep(100);
}
system("cls");
puts("\n\t\t\t\t感謝使用本系統!!\n\n\t\t\t有任何問題請聯絡:1005483758@qq.com \n");
exit(0);
}
void Manage::TJ()/*/按照性別統計人數/*/
{
Person *p1;
int count=0,Boy=0,Girl=0;
p1=person;
while(p1)
{
count++;
if(strcmp(p1->Sex,"男")==0||strcmp(p1->Sex,"nan")==0)
Boy++;
if(strcmp(p1->Sex,"女")==0||strcmp(p1->Sex,"nv")==0)
Girl++;
//if(strcmp(p1->Addre,p1+1->Addre)==0)
p1=p1->next;
}
system("cls");
cout<<"\n總共有 "<<count<<"份通訊錄\n"<<endl;
cout<<"男生: "<<Boy<<"\t 女生: "<<Girl<<"\n"<<endl;
system("pause");
}
----------------------------------------------------
/*主函式部分 main.cpp*/
#include<iostream>
#include<windows.h>
#include<cstdio>
#include<fstream>
#include<string>
#include<cstring>
#include<cstdlib>
#include<iomanip>
#include<conio.h>
using namespace std;
#include"Person.h"
#include"Manage.cpp"
string ID;//字串類ID,全域性變數,具有唯一性
int main(void)
{
Manage m;
int c;
int i,k=0;
string mm;
string username;
char mi;
char a;
system("color 5b");//顏色
m.Welcome();
a=getchar();getchar();
if (a=='Y'||a=='y')
{
system("cls");//清屏操作。
puts("\n\n\n\n\n\n\n\t\t\t\t 歡 迎 進 入 通 信 錄 !\n\n\n\n\n\t\t\t\t\t 請 登 陸·····");
getchar();
for(int j=2,i=0;i<3;i++,j--)/*三次機會*/
{
printf("\n請輸入使用者名稱:");
cin >> username;
printf("\n請輸入6位密碼:");
getchar();
for(i=0;i<7;i++)
{
mi=getch();
if(mi=='\r') break;
mm+=mi;
cout<<"*";
}
//判斷條件
if(username=="xiaxianyun"&&mm=="123457")
{
printf("\n您已經成功登入\n");
k=1;
for(i=0;i<10;i++)
{
printf("·");
Sleep(100);
}
do/*選單操作*/
{
system("cls");
cout<<"\n";
cout<<"\t\t ================請選擇================"<<endl;
cout<<"\t\t *** 1.新增 聯絡人 ***"<<endl;
cout<<"\t\t *** 2.刪除 聯絡人 ***"<<endl;
cout<<"\t\t *** 3.修改 聯絡人 ***"<<endl;
cout<<"\t\t *** 4.查詢詳細資訊 ***"<<endl;
cout<<"\t\t *** 5.保 存 數 據 ***"<<endl;
cout<<"\t\t *** 6.預 覽 信 息 ***"<<endl;
cout<<"\t\t *** 7.清除 通訊錄 ***"<<endl;
cout<<"\t\t *** 8.聯絡人 統計 ***"<<endl;
cout<<"\t\t ======================================"<<endl;
cout<<"\n0--退出\t請選擇(1-8): ";
cin>>c;
switch(c)
{
case 1: m.Add(); break;
case 2: m.Delete();break;
case 3: {
system("cls");
cout<<"請輸入要修改聯絡人的ID: ";
cin>>ID;
cout<<endl;
m.Modify(ID);
};break;
case 4: {
system("cls");
m.Query();
}; break;
case 5: m.Save(); break;
case 6: m.Look(); break;
case 7: m.DesTory(); break;
case 8: m.TJ(); break;
default:m.Exit(); break;
}
}while(c!=0);
}
else
{
cout<<"\n使用者名稱或密碼錯誤··"<<"您還有"<<j<<"次機會請重新輸入! ";
getchar();
cout<<"\n";
if(j==0)
{
printf("\n連續輸入錯誤3次 將退出程式\n");
Sleep(2000);
m.Exit(); }
}
}
system("cls");
}
else{
system("cls");
char s;
cout<<"\n 是否要儲存您的所有操作(Y/N):"<<endl;
cin>>s;
if(toupper(s)=='Y')
{
system("cls");
m.Save();
m.Exit();
}
m.Exit();
}
return 0;
}
相關文章
- c++—通訊錄管理系統C++
- C++課程設計:學生資訊管理系統C++
- 通訊錄管理系統(C++實現)C++
- 通訊錄管理系統
- 學生資訊管理系統課程設計
- 資料庫課程設計-宿舍管理系統資料庫
- 學生成績管理系統——課程設計報告
- javaweb課程設計之XXX管理系統JavaWeb
- 資料結構課程設計-宿舍管理系統資料結構
- 課程管理系統
- 【管理系統課程設計】美少女手把手教你後臺管理
- 資料結構課程設計——學生資訊管理系統資料結構
- 【C語言課程設計】學生學籍管理系統C語言
- 作業系統課程設計感受作業系統
- 系統程式設計——管道通訊程式設計
- Java圖書管理系統,課程設計必用(原始碼+文件)Java原始碼
- 資料庫課設(校友錄資訊管理系統)資料庫
- 資料結構 課程設計 員工管理系統(C語言)資料結構C語言
- C#通訊錄設計C#
- 微課|中學生可以這樣學Python(例9.2):無介面通訊錄管理系統Python
- 隱形通訊錄:全新iOS通訊錄應用概念設計iOS
- 微課|中學生可以這樣學Python(例11.3):tkinter通訊錄管理系統3Python
- 微課|中學生可以這樣學Python(例11.3):tkinter通訊錄管理系統4Python
- 微課|中學生可以這樣學Python(例11.3):tkinter通訊錄管理系統2Python
- 微課|中學生可以這樣學Python(例11.3):tkinter通訊錄管理系統1Python
- 5分鐘課程:物聯網的系統設計
- 教你如何用python實現學生通訊錄管理系統Python
- 資料庫課程設計—超市零售資訊管理系統(Python實現)資料庫Python
- 新課程C++實用程式設計以上線!!!C++程式設計
- 銷訊通CRM系統如何管理醫藥代表的銷售過程
- 2013資料結構課程設計之通訊錄(複習連結串列與檔案知識)資料結構
- 《linux系統及其程式設計》實驗課記錄(六)Linux程式設計
- BusyContacts for Mac通訊錄管理Mac
- Coursera課程筆記----C++程式設計----Week3筆記C++程式設計
- 課程報名 | 監控系統怎麼設計,才能高可用?
- 順通高校學生網上選課管理系統
- 資料結構課程設計報告——暢通工程資料結構
- 課堂管理系統;線上教輔平臺;java課設Java