中国地质大学计算机高级语言课程设计报告(QT设计)——学生成绩管理系统班级:191142班学号:姓名:日期:2015年7月2日一课程设计题目与要求(包括题目与系统功能要求)【实习内容】C++语言,面向对象的分析与设计。然后改成QT语言。【基本要求】学生成绩管理是高等学校教务管理的重要组成部分,主要包括学生成绩的录入、删除、查找及修改、成绩的统计分析等等。请设计一个系统实现对学生成绩的管理。系统要求实现以下功能:(1)增加记录:要求可以连续增加多条记录。(2)删除一个学生的记录:要求可以先查找,再删除。删除前,要求用户确认。(3)成绩修改:若输入错误可进行修改;要求可以先查找,再修改。(4)查找:可以根据姓名(或学号)查找某个学生的课程成绩,查找某门课程成绩处于指定分数段内的学生名单等等。(5)统计分析:对某个班级学生的单科成绩进行统计,求出平均成绩;求平均成绩要求实现函数的重载,既能求单科的平均成绩,又能求三科总分的平均成绩。求出一门课程标准差和合格率;(6)排序功能:要求按总分进行排序(从高到低),若总分相同,则按数学排序;若总分和数学相同,则按物理排序;若总分和各科成绩都相同,则按学号排序;(7)文件操作:可以打开文件,显示班级的所有学生信息;可以将增加或修改后的成绩重新写入文件;可以将排序好的信息写入新的文件。【较高要求】查找可以实现模糊查询,即输入名字的一部分,可以列出满足条件的所有记录。再从这个记录中进行二次选择。二需求分析【问题描述】在编写过程中,主要的困难有:1.模糊搜索(不能使用string中的find函数)需要自定义一个函数。2.排序,需要自己学习算法。【系统环境】Qt5.4.1三概要设计【类的设计】:类Student:#ifndefSTUDENT_H#defineSTUDENT_H#includeiostream#includevector#includefstream#includestring#includeiomanip#includecmathusingnamespacestd;classstudent{private:stringm_id,m_name;intm_math,m_eng,m_phy;public:student();student(string,string,int,int,int);//构造函数student(conststudent&);//复制构造函数~student(){};//析构函数stringgetId();//自定义接口stringgetName();intgetMath();intgetEng();intgetPhy();inttotal();studentoperator=(conststudent&);//=号重载};#endif//STUDENT_H#defineMANAGEMENT#includestudent.h#includeQString#includeQFileDialog#includeQFile#includeqtextstream.hclassmanagement{private:vectorstudentstu;public:vectorstudentdeletetxt(conststring&m);//删除记录vectorstudentfindtxt(conststring&m);//模糊搜索vectorstudentfindtxt1(int,int,conststring&);//分数段搜索vectorstudentitxt();//文件写入vectorstudentgetstu(){returnstu;}vectordoublettxt(vectordouble);//统计分析vectorstudentptxt();//排序voidaddtxt();//增加记录voidchangetxt();//成绩修改voidotxt();//文件输出voidshow();//输出};#endif//MANAGEMENT类mainwindow#ifndefMAINWINDOW_H#defineMAINWINDOW_H#includeQMainWindow#includemanagement.hnamespaceUi{classMainWindow;}classMainWindow:publicQMainWindow{Q_OBJECTpublic:explicitMainWindow(QWidget*parent=0);~MainWindow();privateslots:voidon_pushButton_clicked();voidon_ok_clicked();voidon_pushButton_2_clicked();voidon_ok_2_clicked();voidon_ss_clicked();voidon_ss_2_clicked();voidon_pushButton_3_clicked();voidon_pushButton_4_clicked();private:Ui::MainWindow*ui;};#endif//MAINWINDOW_H【主界面设计】:主机面主要以一个do-while循环使得系统能够多次查询。循环中大部分是判断语句的嵌套。能够以用户意愿自由查询和进出系统。【文件读到屏幕上】【修改记录】【添加纪录】【删除记录】【模糊搜索】【分段搜索】【统计分析】【排序】四详细设计【增加记录】:所用函数:addtxt()函数、itxt()函数。增加记录主要是调用voidaddtxt()函数。进入voidaddtxt()函数后,用户经过手动添加信息。添加信息过后,系统会将用户所输入的信息与数据库中已有信息进行对比,判断数据库中是否已存在该信息。不存在则添加,添加时会调用student类的构造函数。用户所添加的信息则会有一个以类型为student的变量push_back到默认以student为类型的容器中。然后点击确定转为槽函数,再通过mainwindow类中的指针ui指向textedit,使结果输出到textedit上。此时在经过while循环,使得系统支持重复添加功能。otxt()函数将数据输出保存到date.txt文件中。【删除记录】:实现该功能先要调用voiddeletetxt()函数。进入该函数后系统会提示用户输入所需删除信息的学号或姓名。然后系统会在数据库中搜索是否真的存在此信息。不存在系统会提示用户。若存在则所删信息会在对话框中出现。此时系统会调用voiddeletetxt()函数、stringgetId()函数、stringgetName()函数、intgetMath()函数intgetEng()函数、intgetPhy()函数、inttotal()函数。然后系统会提示用户确定是否删除该信息。若否则回到主菜单。若是此时系统会定义一个以student为类型的容器。然后默认的以student为类型的容器(其中有数据库中的全部信息。)经过两个for循环将数据库中除了用户要删除的信息全部push_back到定义的容器中。然后再经过一个for循环。使得默认的容器当中的信息与定义的容器当中的信息相同。则完成删除。删除成功后,通过mainwindow类中指针指向另一个对话框此时对话框会提示用户删除成功。【成绩修改】:先进入voidchangetxt()函数,对话框中会提示用户输入所要修改的信息。输入信息后系统会定义一个以student为类型的变量。然后系统会调用student&operator=(conststudent&)函数,使得修改后的信息覆盖掉原有信息。在用mainwindow类中的指针ui把结果输出到textedit上,在调用文本输入的函数使得用户能够确定信息确实修改成功了。【查找】:进入查找后对话框中会提示用户是分数段查找还是个人成绩查询。若是前者则系统调用voidfindtxt1()函数。此时对话框会提示用户选择哪一门成绩以及分数的上下限。然后系统再调用此时系统会调用voiddeletetxt()函数、stringgetId()函数、stringgetName()函数、intgetMath()函数intgetEng()函数、intgetPhy()函数、inttotal()函数。对话框中会出现在此分数段中的所有信息。并回到菜单。若是后者则系统调用voidfindtxt()函数(支持模糊搜索)。此时对话框中会提示用户输入所要寻找的信息的学号或姓名。系统会将数据库中满足条件的信息反馈到对话框中,然后mainwindow类中指针ui将返回的容器的成员转化为QString类型然后将结果反馈到textedit上。【统计分析】:现根据对话框的提示选择系统分析栏。对话框会提示用户是单科情况或是全科情况。若是前者系统会调用voidttxt()函数,把结果反馈到对话框中并回到主菜单中。若是后者系统调用voidttxt(inti)函数。然后把结果(平均分、总平局分、及格率、标准差)用mainwindow类中指针ui转到另一个对话框中,在调用该对话框中的指针ui将结果反馈到textedit上。【排序】:现根据对话框的提示选择排序。系统会调用voidptxt()函数。进入voidptxt()函数系统会调用stringgetId()函数、stringgetName()函数、intgetMath()函数intgetEng()函数、intgetPhy()函数、inttotal()函数。根据总分进行排序(从高到低),若总分相同,则按数学排序;若总分和数学相同,则按物理排序;若总分和各科成绩都相同,则按学号排序;排序完成后,mainwindow类中指针ui将容器中的信息全部转化为QString类型。然后调用输出文本将结果反馈到textedit上。【退出系统】:在主菜单中选择退出系统,系统会跳出主菜单中的do-while循环,结束程序。五测试【原有数据】20121000290边达宇75606520121000424王晨85959620121000553高佳维86939020121000570初国利85878520121000584利振彬70888820121000818孟珂90869620121000921罗云迪86907520121001121田甜95858720121001248王如男90899420121001316邵叶飞80848620121001375周晨曦87869020121001695王洪96889120121001842尹笛露85909420121002002刘宇坤88869020121002152尹然宇82908820121002162孙史磊80948020121002269陈云锅83958520121002321于文涛88908620121002439景揭俊85928520121002585戴贤铎88867820121002685曹厚臻90879020121002775马晴93859020121003127冯泽宇80897520121003358肖寒88909020121003359张赓87958420121003398刘剑峰88848620121003399龚方怡90939620121004233贾国栋88908620121004415孙一卓869590六结论【总结】:1.在设计程序时,我们需要对每个文件域之间的联系了解,包含关系要明确。每设计完成一个函数时我们都要进行测试。确保没有语法错误和逻辑错误后再进行下一个函数的设计。将函数编写完之后,再进行mian函数的编写。2.在设计文件读入与文件输出时,要保证保存路径的正确性。通过此次课设使得我对这两个知识点更好的理解与掌握。3.对于引用、运算符的重载的运用更加透彻。意识到在设计当中应尽量提高系统的效率的重要性。4.在设计模糊搜索和删除记录中,使得我对类string中自带的find函数与er