基于QT实现的通讯录
前言
上大学以来第一次写博客,由于不知道写什么内容便把我的C++课设搬了上来,总体水平真的很低,就当写着玩吧(其实联系人可以用数据库储存,但我比较懒。。。)
后续计划:
1应该会把另外一些我感兴趣的课设也写成博客发出来。
2会去刷leetcode中的题,并把其中我觉得比较好的题目整理成博客发出来
一、题目要求
通讯录管理程序的设计
①利用MFC的向导,创建基于对话框的应用程序,设计操作界面;
②设计通讯录的数据结构(如:以数组或者动态链表)和相应的类;
③完成对通讯录中记录的增加、修改、删除和显示。
④能够按照姓名或电话号码等关键字进行查询。
⑤能够将通讯录信息用文件保存。
二、概要设计
主界面设计
三、详细设计
1、数据结构
1)联系人类
class person
{
public:
person();
person(QString nam,QString tele,QString address);
QString getname();
QString gettel();
QString getadd();
void setname(QString nam);
void settel(QString tele);
void setadd(QString addr);
private:
QString name;//名字
QString tel;//电话
QString add;//住址
};
2)通讯录类
class personTable
{
public:
personTable();
~personTable();
void Add(person p);
void Delete(int j);
person*table;
int getmax();
private:
int maxsize;//最大联系人数量
int current;//当前联系人
};
2、功能模块
1)导入数据
从input.txt中导入联系人数据
QFile file("F:/C++_QT_191184_20181001444/input.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox::warning(this,tr("Error"),
tr("读取文件出错:%1").arg(file.errorString()));
return;
}
QTextStream in(&file);
while(!in.atEnd())
{
QString line=in.readLine();
QStringList a=line.split(" ");
QString name=a.at(0);
QString telephone=a.at(1);
QString address=a.at(2);
addperson(name,telephone,address);
}
file.close();
2)点击添加按钮
(1)对话框设计
(2)添加联系人
void Widget::addperson(QString name,QString tel,QString add)
{
person p(name,tel,add);
Table1.Add(p);
QListWidgetItem *item=new QListWidgetItem(p.getname());
ui->listWidget->addItem(item);
}
3)点击保存按钮
void Widget::savetofile()
{
QFile file2("F:/C++_QT_191184_20181001444/output.txt");
if (!file2.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::warning(this,tr("Error"),
tr("读取文件出错:%1").arg(file2.errorString()));
return;
}
QTextStream out(&file2);
for(int i=0;i<Table1.getmax();i++)
{
out<<Table1.table[i].getname()+" "<<Table1.table[i].gettel()+" "+Table1.table[i].getadd()+"\n";
}
QMessageBox::information(this,"提示","已成功将通讯录信息导出到output.txt文件中!");
file2.close();
}
4)双击联系人姓名
(1)对话框设计
(2)显示
void Widget::changedia()
{
QListWidgetItem *item=ui->listWidget->currentItem();
QString name=item->text();
person p;
for(int i=0;i<Table1.getmax();i++)
{
if( name.indexOf(Table1.table[i].getname())>=0)
{
p=Table1.table[i];
}
}
changedialog*a=new changedialog(this,p.getname(),p.gettel(),p.getadd());
a->setAttribute(Qt::WA_DeleteOnClose);
a->show();
}
(3)修改信息并点击保存按钮
void Widget::Change(QString Name,QString tel,QString addr)
{
person p;
p.setname(Name);
p.settel(tel);
p.setadd(addr);
QListWidgetItem *item=ui->listWidget->currentItem();
QString name=item->text();
for(int i=0;i<Table1.getmax();i++)
{
if(Table1.table[i].getname()==name)
{
Table1.table[i]=p;
}
}
ui->listWidget->removeItemWidget(item);
item->setText(Name);
}
(4)点击删除按钮
void Widget::Delete()
{
QListWidgetItem *item=ui->listWidget->currentItem();
QString name=item->text();
int j;
for(int i=0;i<Table1.getmax();i++)
{
if(Table1.table[i].getname()==name)
{
j=i;
}
}
Table1.Delete(j);
ui->listWidget->removeItemWidget(item);
delete item;
}
5)查询
void Widget::search(QString s)//综合查询函数,自动判别用户输入的是姓名还是电话还是地址,并进行查询
{
int j=0;
bool tag=false;
while(j<Table1.getmax())//按名字查询
{
QListWidgetItem* item = ui->listWidget->takeItem(0);
QString a=item->text();
if(a.indexOf(s)>=0)//如果包含用户输入的字符串,则代表找到了
{
ui->listWidget->addItem(item);
tag=true;
}
else
{
}
j++;
}
if(tag)return;//如果找到了,不再继续查询
for(int i=0;i<Table1.getmax();i++)
{
QListWidgetItem *item=new QListWidgetItem(Table1.table[i].getname());
ui->listWidget->addItem(item);
}
j=0;
while(j<Table1.getmax())//按电话号码查询
{
QListWidgetItem* item = ui->listWidget->takeItem(0);
QString name=item->text();
person p;
for(int i=0;i<Table1.getmax();i++)
{
if(Table1.table[i].getname()==name)
{
p=Table1.table[i];
}
}
QString a=p.gettel();
if(a.indexOf(s)>=0)//如果包含用户输入的字符串,则代表找到了
{
item->setText(p.getname()+"("+p.gettel()+")");
ui->listWidget->addItem(item);
tag=true;
}
else
{
}
j++;
}
if(tag)return;//如果找到了,不再继续查询
for(int i=0;i<Table1.getmax();i++)
{
QListWidgetItem *item=new QListWidgetItem(Table1.table[i].getname());
ui->listWidget->addItem(item);
}
j=0;
while(j<Table1.getmax())//按住址查询
{
QListWidgetItem* item = ui->listWidget->takeItem(0);
QString name=item->text();
person p;
for(int i=0;i<Table1.getmax();i++)
{
if(Table1.table[i].getname()==name)
{
p=Table1.table[i];
}
}
QString a=p.getadd();
if(a.indexOf(s)>=0)//如果包含用户输入的字符串,则代表找到了
{
item->setText(p.getname()+"("+p.getadd()+")");
ui->listWidget->addItem(item);
tag=true;
}
else
{
}
j++;
}
if(tag)return;//如果找到了,不再继续查询
}
四、运行结果
主界面
添加界面
若电话号码格式不对则出现提醒
输入正确电话号码并点击保存完成添加
双击联系人弹出显示及修改对话框
修改信息并点击保存即可完成修改
点击删除按钮删除该联系人
输入姓名查询联系人(可查询所有包含该字符串的联系人)
输入电话查询联系人(可查询所有包含该字符串的联系人)
点击保存按钮
查看文件
最后附上我的完整代码
link.