信息工程学院
课题名称: 模拟手机拨号
学 号:
姓 名:
日 期:20##-1-5
指导教师:
成 绩:
目 录
一、设计系统的目的意义………………………………………………3
二、系统需求、功能分析………………………………………………3
1:系统需求………………………………………………………………………3
2:功能分析……………………………………………………………………3-4
3:系统结构图……………………………………………………………………4
三、详细设计………………………………………………………4-12
1、添加联系人…………………………………………………………………7
2、删除联系人………………………………………………………………8-9
3、显示所有联系人 …………………………………………………………10
4、修改联系人 ………………………………………………………………11
5、查找联系人 ……………………………………………………………12
6、模拟手机拨号 …………………………………………………………12
四、课程设计的心得 …………………………………………………13
五、参考书目: ………………………………………………………13
一、 设计系统的目的意义
1、设计系统的目的
设计这个系统的目的是为了设计一个能够模拟手机拨号的一个软件,能够方便的存储信息,可以将这个系统应用到手机中,方便的存储联系人,为方便查找联系人的各种信息提供方便,方便直接向联系人直接进行拨号连接
2、设计系统的意义
模拟手机拨号系统没有使用纸张等,做到了环保,符合当今环保理念这个系统使用户能够方便快捷的使用存储和查找等优势功能,且具有较高的安全性,能够有效保护用户联系人资料,而且方便根据联系人进行拨号操作
二、 系统需求及功能分析
系统需求
1、需要录入联系人到通讯录中;
2、能够对通讯录中各项信息进行查找修改删除排序等一系列操作;
3、能够完成通讯录的基本功能;
4、凡等候用户输入时,给出足够的提示信息;
5、程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行。对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重新输入 ;
6、对删除数据应给出警告。
7、对联系人进行模拟拨号,当联系人号码为空时,给出警告,联系人号码不能为空。
功能分析
1、录入功能:选择此功能可以用户手动输入联系人各项信息;
2、查看功能:选择此功能时可以选择根据各种信息查询联系人电话、住址、性别、邮箱、QQ等各项信息;
3、 修改功能:选择此功能时能够通过输入联系人姓名或者电话修改联系人的全部信息;
4、删除功能:选择此功能时能够通过输入联系人姓名或者电话删除联系人的全部信息;
5、退出系统功能:选择此功能时能够退出系统并保存数据。
功能结构图:
三、 详细设计
在此次实验中,我主要负责的是添加联系人、查询联系人、删除联系人、手机拨号功能的实现
3.1添加联系人的实现;
通过输入联系人的如下信息:姓名、电话、QQ、邮编、地址,并把输入的信息保存对象的属性,创建或者打开文件,并向文件中写入新添加的联系人信息,运行如下:
代码实现如下:
void AddressBook::submitContact()
{
QString name=ui->nameLine->text();
ContactList contactlist;
contactlist.Address=ui->addressText->toPlainText();
contactlist.Email=ui->emailLine->text();
contactlist.Phone=ui->phoneLine->text();
contactlist.Info=ui->InfoEdit->toPlainText();
contactlist.Qq=ui->qqLine->text();
contactlist.Msn=ui->msnLine->text();
contactlist.Career=ui->careerLine->text();
contactlist.Company=ui->companyLine->text();
if(name=="")
{
QMessageBox::information(this,
tr("姓名为空!"),
tr("必须要输入姓名."));
return ;
}
if(currentMode==AddingMode)
if(!contacts.contains(name))
{
contacts.insert(name,contactlist);
QMessageBox::information(this,
tr("添加成功!"),
tr("\"%1\"已添加到通讯录中.").arg(name));
}
else
{
QMessageBox::information(this,
tr("添加失败!"),
tr("\"%1\"已存在于通讯录中.").arg(name));
return ;
}
}
updateInterface(NavigationMode);
}
3.2删除联系人的实现
首先输入的姓名查找该用户,如果找到,触发删除按钮,则提示删除联系人的所有信息和这个人的信息已经从你的通讯录中删除的信息!
运行界面如下:
代码实现如下:
void AddressBook::removeContact()
{
QString name = ui->nameLine->text();
ContactList contactlist;
contactlist.Address=ui->addressText->toPlainText();
contactlist.Email=ui->emailLine->text();
contactlist.Phone=ui->phoneLine->text();
contactlist.Info=ui->InfoEdit->toPlainText();
contactlist.Qq=ui->qqLine->text();
contactlist.Msn=ui->msnLine->text();
contactlist.Career=ui->careerLine->text();
contactlist.Company=ui->companyLine->text();
if(contacts.contains(name))
{
int button =QMessageBox::question(this,
tr("删除确认"),
tr("确认要删除\"%1\"?").arg(name),
QMessageBox::Yes|QMessageBox::No);
if(button==QMessageBox::Yes)
{
previous();
contacts.remove(name);
QMessageBox::information(this,
tr("删除成功"),
tr("\"%1\"已经删除。").arg(name));
}
}
updateInterface(NavigationMode);
}
3.23显示所有联系人的实现:
把文件中的各种信息读取并显示出来,一个一个显示联系人的详细信息。
运行界面如下:
代码实现如下:
void AddressBook::loadFromFile()
{
QString fileName=QFileDialog::getOpenFileName(this,
tr("打开通讯录文件"),
"",
tr("通讯录文件(*.txl);;所有文件(*)"));
if(fileName.isEmpty())
{
return;
}
else
{
contacts.clear();
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::information(this,
tr("无法打开文件"),
file.errorString());
return ;
}
QDataStream in(&file);
in.setVersion(QDataStream::Qt_4_7);
while(!in.atEnd())
{
ContactList contactlist;
QString name;
in>>name;
in>>contactlist.Address;
in>>contactlist.Email;
in>>contactlist.Info;
in>>contactlist.Phone;
in>>contactlist.Qq;
in>>contactlist.Msn;
in>>contactlist.Career;
in>>contactlist.Company;
contacts.insert(name,contactlist);
}
if(contacts.isEmpty())
{
QMessageBox::information(this,
tr("文件中没有联系人"),
tr("你打开的文件中没有联系人。"));
}
else
{
QMap::iterator i=contacts.begin();
ui->nameLine->setText(i.key());//显示姓名
ContactList contactlist;
contactlist=i.value();
ui->addressText->setText(contactlist.Address);
ui->emailLine->setText(contactlist.Email);
ui->phoneLine->setText(contactlist.Phone);
ui->InfoEdit->setText(contactlist.Info);
ui->qqLine->setText(contactlist.Qq);
ui->msnLine->setText(contactlist.Msn);
ui->careerLine->setText(contactlist.Career);
ui->companyLine->setText(contactlist.Company);
}
}
updateInterface(NavigationMode);
}
3.4 修改联系人模块
只要输入来联系人的名字,进行文件遍历查找到联系人的信息,而后进行修改。运行界面如下:
代码实现如下:
else if(currentMode==EditingMode)
{
if(oldName!=name)
{
if(!contacts.contains(name)) {
QMessageBox::information(this,
tr("修改成功!"),
tr("\"%1\"已经修改。").arg(oldName));
contacts.remove(oldName);
contacts.insert(name,contactlist);
}
else
{
QMessageBox::information(this,
tr("无法修改!"),
tr("\"%1\"已经存在。").arg(name));
return ;
}
}
else
{
QMessageBox::information(this,
tr("修改成功"),
tr("\"%1\"已经修改。").arg(name));
contacts[name]=contactlist;
}
}
updateInterface(NavigationMode);
}
3.25 查询联系人模块
对文件进行遍历,将联系人的所有信息都显示出来。
运行界面如下:
代码实现如下:
void AddressBook::findContact()
{
FindDialog dialog;
if (dialog.exec() == QDialog::Accepted)
{
QString contactName = dialog.findText();
if (contacts.contains(contactName))
{
QMessageBox::information(this,
tr("查找成功"),
tr("呵呵,虽然联系少,但还记得你!"));
ui->nameLine->setText(contactName);
ContactList contactlist;
contactlist=contacts.value(contactName);
ui->addressText->setText(contactlist.Address);
ui->emailLine->setText(contactlist.Email);
ui->phoneLine->setText(contactlist.Phone);
ui->InfoEdit->setText(contactlist.Info);
ui->qqLine->setText(contactlist.Qq);
ui->msnLine->setText(contactlist.Msn);
ui->careerLine->setText(contactlist.Career);
ui->companyLine->setText(contactlist.Company);
}
else
{
QMessageBox::information(this,
tr("未找到联系人"),
tr("很抱歉,通讯录中没有 \"%1\" ,该检讨自己一下。").arg(contactName));
return;
}
}
updateInterface(NavigationMode);
}
3.26 模拟手机拨号
代码如下
void AddressBook::bohao() //拨号函数的实现
{ QString phone=ui->phoneLine->text();
if(phone!=""){
QMessageBox::information(this,//父窗口
tr("拨号!"),//标题栏
tr("\"%1\正在向他拨号.").arg(ui->nameLine->text()));//提示内容
}
else
QMessageBox::information(this,//父窗口
tr("拨号!"),//标题栏
tr("号码为空 不要忽悠我"));//提示内容
}
四、 设计心得
模拟手机系统的课程设计,我体会到很多,完成一个程序的设计必须要有同伴的支持和合作,必须要跟同伴讨论商量,共同努力才有可能设计出一个好的程序,遇到困难不能轻易放弃,在编这个程序的时候遇到了很多难题,后来在老师和同学的帮助解答下终于将遇到的问题一个个解决,我深刻体会到遇到难题不要轻易言弃,还有要多借鉴别人的经验,多阅读一些书籍,编写程序的时候要细心,一点点错误程序就可能编译失败,所以要做到一丝不苟。
更为重要的是,我在两个礼拜学会如何使用Qt这个软件进行编程操作,增强我的自学能力和编程能力,这对我自身的提升都是很重要的,将所学的知识进行运用。这是学习的乐趣之一。
五、 参考书目
《C++ GUI Qt 4编程》(第2版)作者:(加拿大)布兰切特 (Jasmin Blanchette) (英国)萨默菲尔德 (Mark Summerfield) 译者:闫锋欣 曾泉人 张志强