C++课程设计 ---通讯录
来源:互联网 发布:淘宝白底图片怎么做 编辑:程序博客网 时间:2024/04/25 18:50
通讯录
--------------------------------------------
/*类的定义部分 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对应的是clsPerson *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 ;}elsereturn ;}}//块作用域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 ;}elsereturn;}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 ;}elsereturn;}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;}elsereturn;}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 ;}elsereturn ;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;}elsereturn;}else{cout<<"尚未创建通讯录,是否创建(Y/N)"<<endl;cin>>c;if(toupper(c)=='Y'){Add();return;}elsereturn;}}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;}
0 0
- C语言课程设计---通讯录
- C语言课程设计--学生通讯录1.0
- c语言 数据结构 课程设计 通讯录制作
- C语言课程设计通讯录链表实现
- 通讯录管理系统C语言课程设计
- 通讯录 课程设计
- 课程设计:通讯录
- 课程设计--通讯录
- 数据结构课程设计——通讯录系统设计(C语言)
- C 语言课程设计 最终答辩版 学生通讯录管理系统
- 数据结构课程设计--通讯录管理(C语言实现)
- 课程设计 通讯录源代码
- 课程设计c++手机通讯录
- 课程设计c++手机通讯录
- C++课程设计 ---通讯录
- 学生通讯录 课程设计
- 学生通讯录 课程设计
- 数据结构课程设计 班级通讯录
- 查看资源设置与设备驱动程序
- PHP过滤输出内容
- NSString用法大全
- IT人士必去的10个网站
- poj 1088 DFS+记忆化搜索
- C++课程设计 ---通讯录
- /proc/uptime详解,获取系统启动时间,系统负载率
- jQuery 获取值
- Excel,遗忘密码后如何撤销工作表保护密码
- PHP 中cookie 和session 的分析
- Adb(Android debug bridge)调试桥
- http://blog.csdn.net/xiazdong/article/details/7059573
- POJ 2479 Maximum sum (求2个不相交的连续字段和的最大值)
- iOS网络加载图片缓存策略之ASIDownloadCache缓存优化