相关文章:
【软件工程导论】网上订餐系统的分析与设计
【软件工程导论】软件项目系统需求分析说明书——宠物店铺管理系统
- 应用程序设计:程序的处理流程与逻辑
1、应用程序实现框架
基于编写人员技术方向,拟设定使用C++下的Qt框架进行应用程序图形界面的编程。利用Qt图形库,采用C++语法,在Qt Creator集成开发环境下,实现一个基于Qt的宠物店管理系统。
Qt被用于高性能的跨平台软件开发,它是一个标准的技术成熟的C++框架,Qt不仅拥有扩展的C++类库,还提供了大量可用来快速编写应用程序的工具,Qt 是采用C++实现的框架。Qt Creator是一款新的轻量级集成开发环境(IDE),IDE支持跨平台运行,支持的系统包括Mac OS X、Linux( 32 位及 64 位)以及Windows等系统,这一点可以满足用户系统的兼容性需求。Qt Creator的设计目标是方便开发人员利用Qt 这个应用程序框架更加快速、轻易地完成相关开发任务。
2、输入与输出:
下面将描述应用程序的输入和输出,包括输入数据的来源、输出数据的格式及形式。
通过在 Qt Creator环境中新建一个 Qt WidgetsApplication 应用程序,并新建一个继承于 QMainWindow 类的 MainWindow 窗口类,设计一个主界面,方便用户进行常规的汉字、数字、英文字母及部分的特殊符号输入和管理信息功能的选择,也方便对用户查询条件和操作进行常规的汉字、数字、英文字母及部分的特殊符号组成的信息输出,以图形化界面窗口的形式进行交互,其中管理信息包括了销售管理子系统和人力资源管理子系统的选择,在子系统下的功能选择操作大致可以概括为对信息的添加、查询、修改、删除。
下面将描述应用程序的主要流程及涉及的数据处理过程,说明处理过程中的数据结构、算法选择和执行逻辑等。
图 系统程序操作框图
宠物店管理系统分为销售子系统和人力资源管理子系统两部分,以子类继承的方式进行管理,在销售管理子系统的功能有:宠物管理、销售订单的管理、公告管理、网上商店的管理、宠物用品管理、客户管理;而在人力资源管理子系统的功能有:招聘管理、员工档案管理、薪酬管理、绩效管理、劳动关系管理、员工离职管理。在设计层面就不一一展开叙述,大致操作可以概况为对信息的添加、查询、修改、删除四大操作,编码人员需要根据功能点的不同逐一调整编写。
3、添加操作处理流程
通过单击模块功能的界面中的“添加”按钮,进入图8.2所示 inputDialog界面。InputDialog界面类是在Qt Creator开发环境中界面文件下通过添加继承于QDialog类自动生成。在Qt中为了能实现事件处理及界面跳转可以通过对控件的信号函数添 加槽函数,当单击图 1 的“添加学生信息”按钮时,发出一个click信号,再在click信号函数上添加on_inputButton_clicked()槽函数来实现从主界面到添加学生信息界面的跳转。
代码编写参考算法处的拟代码。
在 inputDialog 界面中分别插入对象属性的QLable标签控件。宠物性别做成QRadioButton 单选按钮控件,宠物出生日期对应插入QDate Edit控件,用于避免输入日期格式的不一致,在其他QLable 标签后面插入QLineEdit单行文本框控件以实现各类信息数据的输入,如图8.2所示。单击“保存”按钮实现信息的添加并保存于student.txt 磁盘文件中,并在InputDialog 界面清空掉前一次所输入信息。 在“保存”按钮的 click 信号函数上添加 on_saveButton_clicked() 槽函数实现信息保存功能。
代码编写参考算法处的拟代码。
图 添加信息界面演示图
4、查询操作处理流程
通过在如图8.3的QComBox下拉列表控件中添加各分类查询项,在其后添加QTextEdit 控件以用于输入查询内容,再在“查询”按钮的click信号函数上添加on_searchButton_clicked()槽函数实现分类模糊查询功能。在实现分类模糊查询时,首先将stu_Model中的数据清除,再通过 ui→findcomboBox→currentIn⁃dex()获取当前查询选项,由于在初始化界面时,stu_list中存放着文件中所有记录,因此把输入的查询内容与stu_list中存放的信息按查询字段进行逐条比较,如果不同则contin⁃ue略过本次循环,否则把本条记录重置于与表格关联的stu_model中,以作为多条或单条查询结果记录显示于tableView表格中。
代码编写参考算法处的拟代码。
图 增删查改功能实现界面演示图
5、 删除操作处理流程
删除功能的实现不但在界面的显示上需要删除,而且在确认删除后,student.txt 文件中的相应内容也需要删除。代码实现时,首先通过ui→tableView→currentIndex().row()获取要删除的行,通过QMessageBox::information()函数弹出一个确认删除信息提示框,通过选择yes或no进行确认或取消删除,若返回值与QMessageBox::Yes相等表示确认删除,则需要将stu_mod⁃el中的该条记录用 removeRow(index)删除,同时把stu_list中的 该条记录也移除,并把stu_list中的内容重写入文件,以保证文 件内容与界面上所显示数据的一致性。
代码编写参考算法处的拟代码。
6、 修改操作处理流程
通过双击图8.3表格中的某条记录的某条字段,该字段将会呈可编辑状态,从而可以修改某条记录的相关字段的内容,在代码实现时,本文用oldStr来保存修改前的记录字符串,用newStr来保存修改后的记录字符串,当单击“修改”按钮,若oldStr不同于 newStr时弹出“确认修改”对话框,否则不弹出。若确认修改,则把当前修改的记录首先从stu_list中删除,再把newStr2插入到 stu_list 中修改记录所在位置处,并将 stu_list 内容重写入文 件,为保持文件内容与系统界面显示内容一致,最后再把 stu_model中的相应记录重置为修改后的数据。若取消修改,则把oldStr中的内容重置于stu_model中,以把修改了的数据再还原为修改前的状态。
- 拟代码
添加操作拟代码1:
void MainWindow::on_pushButton_clicked()
{ InputDialog d;
d.exec();}
添加操作拟代码代码2:
void InputDialog::on_saveButton_clicked()
{QString name,id,sex,birthday,english,math,chinese;//暂存界面上录入的信息
QString name=ui→nameEdit→text();
QString id=ui→idEdit→text();
……
double total=english.toDouble() + math.toDouble() + chinese.to⁃ Double();//计算总分
QStringtotalStr=QString::number(total,‘f’,2);
QFile file(“./student.txt”); //文件对象,保存信息
if(!file.open(QIODevice: : WriteOnly|QIODevice: : Text|QIODevice::Append))//追加打开文件
{return ;}
QTextStream out(&file);//使用输出流对象写数据入文件
out<<name<<" " <<id<<" " <<sex<<" " <<birthday<<" " << english<<" “<<math<<” “<<chinese<<” "<<totalStr<endl;
file.close();
ui→nameEdit→clear();//保存完信息后,清除界面之前输入的各类信息
……
}
查询操作拟代码:
void EditDialog::on_searchButton_clicked()
{
int rows=stu_model→rowCount();
for(int i=0;i<rows;i++)//将stu_Model中所有行的数据清除
{ stu_model→removeRow(0); }
int index=ui→findcomboBox→currentIndex();//获得分类查询项的index值
QStringinputFind=ui→searchEdit→text().trimmed();//获得查询内容
int row=0;
for(int i=0;i<stu_list.size();i++)//将文件中满足条件的信息重置于stu_model中
{
QString s=stu_list[i];
QStringList student=s.split(’ ');
if(index==0)
if(!student[0].contains(inputFind)) continue;//用contains()进行模糊匹配
if(index==1)
if(!student[1].contains(inputFind)) continue;
if(index==2)
if(inputFind!=student[2]) continue;
if(index==3)
ui→searchEdit→setText(“”);
for(int j=0;j<student.size();j ++ )//将查询到的内容置于stu_model 中并自动关联到tableView对象中再以表格形式显示,以作为查询结果
stu_model→setItem(row,j,new QStandardItem(student[j]));
row++;
}}
删除操作拟代码:
void EditDialog::on_delButton_clicked()
{
int index=ui→tableView→currentIndex().row();
QString s=stu_list[index];
QStringList student=s.split(’ ');
QString info=“确定要删除 “+student[0]+” 吗?”;
if(QMessageBox::Yes==QMessageBox::information(this,“确认删除”,info,QMessageBox::Yes,QMessageBox::No))
{ stu_model→removeRow(index);
stu_list.removeAt(index);
//重写文件
QFile file(“./student.txt”);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{return;}
QTextStream out(&file);
for(int i=0;i<stu_list.size();i++)
{ out<<stu_list[i]<<endl; }
}}
修改操作拟代码:
void EditDialog::on_modifyButton_clicked()
{int row=ui→tableView→currentIndex().row();
QStringnewStr,newStr2;
QStringoldStr=stu_list[row];
if(oldStr.trimmed()!=newStr.trimmed())
{ if(QMessageBox::Yes==QMessageBox::information(this,“确认修改”,“确认要修改?”,QMessageBox::Yes,QMessageBox::No))
{ stu_list.removeAt(row);
stu_list.insert(row,newStr2);
……//把stu_list中的内容重写入文件(同删除功能中重写文件),使文件内容与修改后的内容一致
QStringListnewStr2List=newStr2.split(’ ');
for(int i=0;i<7;i++)
{ stu_model→setItem(row,i,new QStandardItem(newStr2List
[i])); }
stu_model→setItem(row,7,new QStandardItem(totalStr));
}else
{ QStringListstus=oldStr.split(’ ');
for(int col=0;col<8;col++)
stu_model→setItem(row,col,new QStandardItem(stus[col]));
}}}
- 限制条件
时间约束:
工期约束在三个月内完成开发工作,一个月进行测试及修改,后续有一个月时间进行软件交接前的准备工作。共计5个月内需要将完整功能的软件交给客户。
技术约束:
可使用技术:SQL Server 2000,JDK Version 1.4.2, eclipse, IntelliJ IDEA 2023, visual studio code,Tomcat, SQL Server 2000
人员约束:
初始开发团队为6个人,可以完成软件开发与测试和改进bug的工作。
若开发团队需要拓展能够在两个月内拓展到足够的人手,并使拓展人手学习并使用初始团队的技能。
组织约束:
各人员需要在规定工期内完成自身负责的工作并做好交接工作。各人员需要进行使用技术的协商与统一。各人员需严格按照客户需求并按照国家法规来进行工作,不允许掺杂个人恩怨及个人未上报的想法在工作中。