一、需求分析
(1)显示选定UAR组件内容的说明
① 当用户输入有效的UAR组件列表号并单击“显示”按钮时,应用程序将在“输出”文本框中显示该组件内容的描述。
② 当用户输入无效的输入值或根本不输入值并单击“显示”按钮时,应用程序会通知用户消息框中的错误,这将提示用户从 数字的有效范围(例如,“请输入一个值1到7”),当用户输入一个值时,突出显示无效的输入。
(2)搜索显示的UAR组件内容描述中的关键字或短语
① 当用户输入关键字时,该关键字出现在当前显示在“输出”文本框中的内容描述中,则应用程序应显示该关键字。
关键字第一次出现的位置(从描述开始时的字符数偏移);
以及关键字最后一次出现的位置(从描述开始到字符数的偏移);
一个消息框,指示在内容描述中出现关键字的次数,并询问用户是否要搜索相同的描述以查找不同的关键字。
② 当用户输入关键字而该关键字不存在于当前显示在“输出”文本框中的内容描述中时,应用程序应显示该关键字。
一个消息框,通知用户没有找到字符串,并询问用户是否要搜索相同的描述以寻找不同的关键字。
③ 当用户单击“搜索”按钮但尚未输入关键字时,应用程序应显示提示用户输入关键字的消息框;以及在用户确认提示符后,指示用户输入关键字的位置。
④ 如果用户想要搜索相同的描述以寻找不同的关键字,应用程序应该突出显示(即选择)先前在输入文本中输入的关键字,将用户的位置指向输入新关键字;否则,当用户不想搜索相同的描述时,应用程序应该清除输入文本框的内容,并指示用户如何重新启动搜索过程。
⑤ 当用户输入关键字而当前不显示UAR组件内容描述时,应用程序应该显示消息框,提示用户选择要搜索的UAR组件内容描述;以及指导用户如何继续使用应用程序-也就是说,如果没有输入组件号,应用程序应将焦点设置为默认文本框;否则,应用程序应设置向“显示”按钮显示。
⑥ 当用户单击“退出”按钮时,应用程序应关闭。
二、概要设计
- 采用Qt进行ui界面设计,注意各组件之间的位置,注意合理进行布局。
- 采用信号与槽机制,实现用户输入合法数字并点击Display按钮时将对应文本展示到文本域中
- 异常处理①:当在Enter a number后面的文本框的输入不是数字1-7时,点击Display弹出警告框,提示用户输入数字1-7.
- )实现在Enter a search string后面的文本框输入任意字符串后,点击search按钮,若文本框存在该字符串,则统计该字符串出现的次数以及第一次和最后一次出现的位置,并显示在Found a标签t下面,同时弹出对话框,对话框中显示查询到的相关信息,询问用户是否继续对该文本进行搜索,若选择确定则回到搜索文本框继续输入,否则的话对所有输入框清空处理,光标回到Enter a number后面的文本框中。
- 异常处理②:点击search按钮后,首先必须先检测搜索框与文本是否为空,若文本框为空,则弹出警告框告诉用户先选择文本,若搜索字符框为空,则弹出警告窗提示用户输入搜索字符串。
- Exit按钮,点击则退出程序。
三、详细设计
(1)采用Qt进行ui界面设计,注意各组件之间的位置,注意合理进行布局。其中包含文本框、文本域、标签、按钮等多种组件,其位置需要按模板进行对齐。
(2)采用信号与槽机制,实现用户输入合法数字并点击Display按钮时将对应文本展示到文本域中
三个按钮对应的槽函数
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_exitbtn_clicked();
(3)异常处理①:当在Enter a number后面的文本框的输入不是数字1-7时,点击Display弹出警告框,提示用户输入数字1-7.
if(number>=1&&number<=7){
QString now_text = parts[number-1];
//将文本添加到文本域中
ui->txtContent->setText(now_text);
//光标聚焦到下一个
ui->txtSearch->setFocus();
}else{
QMessageBox::warning(this,"Search String","Please enter values between 1 and 7");
}
(4)实现在Enter a search string后面的文本框输入任意字符串后,点击search按钮,若文本框存在该字符串,则统计该字符串出现的次数以及第一次和最后一次出现的位置,并显示在Found a标签t下面,同时弹出对话框,对话框中显示查询到的相关信息,询问用户是否继续对该文本进行搜索,若选择确定则回到搜索文本框继续输入,否则的话对所有输入框清空处理,光标回到Enter a number后面的文本框中。
相关处理函数:
void display();
void search();
void search(QString waitToSearch,QString needToString);
(5)异常处理②:点击search按钮后,首先必须先检测搜索框与文本是否为空,若文本框为空,则弹出警告框告诉用户先选择文本,若搜索字符框为空,则弹出警告窗提示用户输入搜索字符串。
if(ui->txtContent->toPlainText()==""){
QMessageBox::warning(this,"Search String","Please select text");
}
(6)Exit按钮,点击则退出程序。
四、调试分析
(1)在编写程序时遇到的第一个相对较难解决的问题就是字符串的统计了,思来想去,最后采用了较多的字符串操作函数解决了此题,例如indexOf()函数、mid()函数、contains()、lastIndexOf()等函数一起配合使用很好滴解决了这一问题。
(2)在弹出对话框之后判断用户选择了确定还是取消这个操作刚开始不知道怎么实现,最后通过在CSDN查找相关资料得到了解答。
if (result==QMessageBox::Yes){
//选中搜索框的全部文字
ui->txtSearch->setFocus();
ui->txtSearch->selectAll();
}else if(result==QMessageBox::No){
//清除所有文本框中的文字
ui->txtSearch->clear();
ui->txtnumber->clear();
ui->txtContent->clear();
ui->lblFirst->clear();
ui->lblEnd->clear();
ui->txtnumber->setFocus();
}
(3)在点击确定继续搜索该文本时一直无法实现选中输入内容,每次发现都只能将光标放到合理的位置就是一直无法选中,最后查阅资料发现少调用了一个对应的函数。
//选中搜索框的全部文字
ui->txtSearch->setFocus();//先将光标聚焦
ui->txtSearch->selectAll();//在进行选中
五、用户使用说明
六、用户使用说明
(1)正确操作
启动程序
输入数字
搜索字符串“a”
(选择Yes)
(选择No)
(2)非法输入(异常处理)
输入数字有误或者不合理
未选择文本