联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2018-06-18 05:49


/*********希望通过此例子能够学会用C++实现类似的管理系统的设计  傅尔胜 *********/


//题目   通讯录管理系统设计

//1、问题描述

//定义通讯录类,属性有:编号、姓名、性别、通讯地址、邮箱地址、电话等信息和相关的对属性做操作的行为。

//主要完成对通讯录的简单管理。

//2、功能要求

//(1)添加功能:程序能够添加通讯录信息,要求编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。

//(2)查询功能:可根据姓名、电话、邮箱地址等信息对已添加的信息进行查询,如果未找到,给出相示信息,如果找到,则显示相应的记录信息;

//(3)显示功能:可显示当前系统中所有通讯信息,每条记录占据一行。

//(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。

//(5)删除功能:主要实现对已添加的通讯记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作。

//(6)保存功能:可将当前系统中通讯录记录存入文件中,存入方式任意。

//(7)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。

//3、问题的解决方案

//根据系统功能要求,可以将问题解决分为以下步骤:

//(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

//(2)分析系统中的各个实体及它们之间的关系;

//(3)根据问题描述,设计系统的类层次;

//(4)完成类层次中各个类的描述;

//(5)完成类中各个成员函数的定义;

//(6)完成系统的应用模块;

//(7)功能调试;


#include<iostream>

#include<fstream> //文件操作流

#include<string> //c++字符串类,string类的对象是一个字符串,不再是C语言风格用字符指针表示字符串

#include<cstring> //c语言的字符串函数,如strcpy、strcmp

#include<vector>

#include<iomanip> //用于cin、cout的一些格式化操作

using namespace std;


/**************************类定义部分*******************************/

//记录信息类

class  record {

public:

record(int id=0,char name[]="",char sex='m');

void show();

int getid();

char* getname();

char getsex();

void setrecord();

private:

int id;

char name[20];   //此处最好别用string类型,否则后面可能读写文件会出问题

char sex;

//......

//这里只设置三个数据成员 其它成员可类似添加

} ;


//通讯录类

class contacts {

public:

void add(record &s);

void showall();

void readfromfile();

void writetofile();

void updaterecord();

void deleterecord();

int findbyid(int id);

void findbyname(char name[]);

void findbysex(string s);

bool checkid(int id);

private:

vector<record> list;  //vector容器 实现动态数组 可以上网查资料学习vector用法

};


/**************************类实现部分*******************************/

record::record(int id,char name[],char sex) {

this->id=id;

strcpy(this->name,name);

this->sex=sex;

}


void record::setrecord() {

string s;

cout<<"请输入编号,姓名,性别:"<<endl;

cin>>id>>name>>s;

if(s=="男")

sex='m';

else

sex='f';

}


void record::show() {

cout<<setw(8)<<id<<setw(8)<<name<<setw(8)<<(sex=='m'?"男":"女")<<endl;

}


int record::getid() {

return id;

}

char* record::getname() {

return name;

}

char record::getsex() {

return sex;

}


//检测编号是否有重复

bool contacts::checkid(int id) {

bool flag;

flag=false;

for(int i=0; i<list.size(); i++)         //list.size()表示动态数组list的元素个数

if(list[i].getid()==id) {

flag= true;

break;

}

return flag;

}


//添加记录

void contacts::add(record &s) {

if(!checkid(s.getid())) {

list.push_back(s);    //动态插入数组元素s

} else

cout<<"编号重复,数据添加失败!!!"<<endl;

}


//按编号查找

int contacts::findbyid(int id) {

int loc=-1;              //未找到返回-1

for(int i=0; i<list.size() ; i++)

if(id==list[i].getid()) {

loc=i;

break;

}

return loc;      //根据编号返回记录号 便于删除修改操作

}

//按姓名查找

void contacts::findbyname(char name[]) {

bool flag=false;

for(int i=0; i<list.size() ; i++)

if(!strcmp(name,list[i].getname())) {


list[i].show();

flag=true;

}

if(!flag)  cout<<"数据没有找到!"<<endl;

}

//按性别查找

void contacts::findbysex(string s) {

char sex;

if(s=="男")

sex='m';

else

sex='f';

bool flag=false;

for(int i=0; i<list.size() ; i++)

if(sex==list[i].getsex()) {

list[i].show();

flag=true;

}

if(!flag)  cout<<"数据没有找到!"<<endl;

}

//按编号定位记录并删除记录

void contacts::deleterecord() {

int del_id;

vector<record>::iterator it;    //vector迭代器  查资料补补知识

cout<<"请输入待删除记录的id:";

cin>>del_id;

if(findbyid(del_id)!=-1) {

it=list.begin()+findbyid(del_id);

list.erase(it);            //删除it所定位记录

cout<<"删除成功!!!"<<endl;

} else

cout<<"未找到该记录!!!"<<endl;

}

//按编号定位记录并修改记录

void contacts::updaterecord() {

int update_id;

int loc;

cout<<"请输入待修改记录的id:";

cin>>update_id;

if(findbyid(update_id)!=-1) {

loc=findbyid(update_id);

list[loc].setrecord();

cout<<"修改成功!!!"<<endl;

} else

cout<<"未找到该记录!!!"<<endl;

}

//显示所有记录

void contacts::showall() {

for(int i=0; i<list.size() ; i++) {

list[i].show();

}

}


//写文件

void contacts::writetofile() {

ofstream fout;

fout.open("myconsts.dat",ios::binary);

for(int i=0; i<list.size() ; i++) {

fout.write((char*)(&list[i]),sizeof(record));

}

fout.close() ;

}


//读文件

void contacts::readfromfile() {

ifstream fin;

record r;

fin.open("myconsts.dat",ios::binary);

while(fin.read((char*)(&r),sizeof(r))) {

list.push_back(r);       //从文件读取一个recor类型数据块并插入vector容器中

}

fin.close();

}


/**************************主函数部分*******************************/


void showmsg() {

cout<<"                              <通讯录菜单>"<<endl;

cout<<"-------------------------------------------------------------------------------"<<endl;

cout<<"                           1   显示所有记录"<<endl;

cout<<"                           2   增加记录"<<endl;

cout<<"                           3   查询记录"<<endl;

cout<<"                           4   修改记录"<<endl;

cout<<"                           5   删除记录"<<endl;

cout<<"                           6   保存通讯录"<<endl;

cout<<"                           0   结束!"<<endl;

cout<<"-------------------------------------------------------------------------------"<<endl;

}

void showfindmsg() {

cout<<"                               <查询选项>"<<endl;

cout<<"-------------------------------------------------------------------------------"<<endl;

cout<<"                               1  姓名"<<endl;

cout<<"                               2  性别"<<endl;

}


int main() {

contacts mycon;

int s;

int f;

char c;

char t_name[20];

string t_sex;

record r;

showmsg();

cout<<"【请输入您的选项】:";

cin>>s;

mycon.readfromfile();

while(s) {


switch(s) {


case 1:

mycon.showall();

break;

case 2:

r.setrecord();

mycon.add(r);

break;

case 3:

showfindmsg();

cout<<"【请输入您的查询选项】:";

cin>>f;

switch(f) {

case 1:

cout<<"请输入姓名:";

cin>>t_name;

mycon.findbyname(t_name);

break;

case 2:

cout<<"请输入性别:";

cin>>t_sex;

mycon.findbysex(t_sex);

break;

}

break;


case 4:

mycon.updaterecord();

break;

case 5:

mycon.deleterecord();

break;

case 6:

mycon.writetofile();

system("cls");

cout<<"通讯录成功保存!"<<endl;

showmsg();

break;

}

cout<<"【请输入您的选项】:";

cin>>s;

}


cout<<"是否保存数据(Y/N):";

cin>>c;

if(c=='Y'||c=='y') {

mycon.writetofile();

cout<<"通讯录成功保存!"<<endl;

}


return 0;

}



版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp