




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
附件二 【学生用】西北农林科技大学信息工程学院面向对象课程设计实习论文题 目: 学生信息管理系统 学 号姓 名专业班级指导教师魏蕾实践日期2014年2月24日-3月7日目 录一、综合训练目的与要求1二、综合训练任务1三、总体设计1四、详细设计说明1五、调试与测试1六、实习日志1七、实习总结1八、附录:核心代码清单1一、综合训练目的与要求面向对象程序设计课程设计是实践性教学环节之一,是面向对象程序设计课程的辅助教学课程。 该课程设计要求学生综合运用在面向对象程序设计课程中学到的面向对象技术与实际编程相结合,独立完成一项较为完整、并具有一定实际功能的课程设计任务,同时加深学生对面向对象和 C+编程技术的理解和掌握,培养实际的应用程序开发能力。在课程设计过程中,使学生养成良好的程序设计风格,并掌握 C+应用程序的设计开发过程和编程方法、测试方法。二、综合训练任务本次面向对象课程设计,段钊同学和我选的题目是学生信息管理系统,根据实习前的动员要求,我们决定将本次实习的人物划分为四部分,分别为:学生信息管理系统的界面设计、学生信息的录入以及增删改信息、学生信息的查询和数据库设计。前台使用的工具是Qt,后台使用的是SQL Server 。以我们个人的实力以及爱好,我们的分工如下:学生信息的查询和界面设计由队友完成,我负责学生信息的录入和后台数据库设计部分。三、总体设计学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生的信息,帮助学校和名师掌握学生的情况,这就是学生信息管理系统需要完成的功能。1.1 系统功能分析本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生在校的情况。系统的主要功能有:l 学生个人信息输入,包括:姓名、性别、院系、生日、籍贯、生源所在地等。l 学生流动情况的输入,包括:转系、休学、复学、退学、毕业。l 奖惩情况的输入。l 学生个人情况查询和修改,包括流动情况和奖罚情况。1.2系统功能模块设计(划分)根据系统功能要求可以将系统分解成几个模块来分别设计应用程序界面学生信息管理系统普通用户管理员学生个人信息查询全部信息查询学生信息管理奖励情况管理学籍变更情况管理处罚情况管理选择登录模块1.3 与其它系统的关系学生信息管理系统是校园信息管理系统的一个组成部分。它为其它系统,如班级信息管理系统、教学管理系统、成绩单系统、宿舍分配系统等,提供学生的基本情况。同时需要其他系统提供的班级设置和院系设置等情况。这些系统可以使用同一个数据库,直接相互调用所需的数据。1.4 数据流程图学生信息管理系统的数据流程如图2所示。图2、学生信息管理系统数据流程图四、详细设计说明1) 学生个人信息输入、学籍变更、处罚以及奖励信息输入界面如下:为了简约起见,我把四个模块的输入信息都集中在一个界面上(此处要用管理员账号登陆)。界面说明:此处用了四个QGroupBox控件,代表四个模块。再把各个模块所需要的控件放到上面。四个控件的初始状态都是禁用的(此时在它上面的控件也不能用,直到该控件被激活其它控件才可用)。当用户在登陆界面时选择登陆哪个模块,哪个模块的QGroupBox控件才被激活,上面的控件也就可以用了。当用户把信息输入正确完整,再按确定就可以提交给数据库。部分代码连结数据库代码:/打开连接数据库 QSqlDatabase db=QSqlDatabase:addDatabase(QODBC); db.setDatabaseName(QString(DRIVER=SQL SERVER; SERVER=%1; /服务器名称 DATABASE=%2;/数据库名 UID=%3; /登录名 PWD=%4; /密码 ).arg(LENOVO-PC) .arg(stu) .arg(lee) / LENOVO-PC .arg(lee) );首先是选择数据库驱动(QODBC代表的是SQL server),然后依次设置服务器名、数据库名、登陆名、密码。connect(ui-submitButton, SIGNAL(clicked(), this, SLOT(stuSubmit(); /提交学生信息void InputInformation:stuSubmit() /提交学生基本信息 QSqlTableModel model; model.setTable(stu); int row = model.rowCount(); /获取数据库的行数 if(!ui-stuEdit-text().isEmpty() & !ui-classEdit-text().isEmpty() & !ui-departEdit-text().isEmpty() b_submit = true; else b_submit = false; QMessageBox:warning(this, tr(warning), tr(学号、班级名或系名不能为空!); if(b_submit) model.insertRows(row, 1); model.setData(model.index(row, 0), ui-stuEdit-text(); model.setData(model.index(row, 1), ui-nameEdit-text(); model.setData(model.index(row, 2), ui-sexEdit-text(); model.setData(model.index(row, 3), ui-classEdit-text(); model.setData(model.index(row, 4), ui-departEdit-text(); model.setData(model.index(row, 5), ui-birthEdit-text(); model.setData(model.index(row, 6), ui-placeEdit-text(); /提交全部 if(model.submitAll() QMessageBox:about(this, tr(Submit), tr(提交数据成功!); /清空 b_submit = false; ui-stuEdit-clear(); ui-nameEdit-clear(); ui-sexEdit-clear(); ui-classEdit-clear(); ui-departEdit-clear(); ui-birthEdit-clear(); ui-placeEdit-clear(); else QMessageBox:critical(this, tr(Submit Error), tr(提交数据失败!); 此处使用Qt封装的类QSqlTableModel来实现与数据库的交互,提交成功后把输入框中的内容清空,并提示提交成功。否则提示提交失败(此时为清空输入框中的内容)。其它模块和这个差不多,代码就不贴出来了。2) 数据库设计A、数据字典表1 STUDENT学生个人信息表字段名数据类型是否可空说明stu_idchar(10) N学号(主关键字)namechar(20)Y姓名sexchar(1)Y性别(M、F)class_idchar(5)Y班级编号(外部关键字)depart_idchar(5)Y所属院系编号(外部关键字)birthdateY生日NATIVE_PLACEchar(20)Y籍贯表2 CHANGE学籍变更信息表字段名数据类型是否可空说明change_idchar(5)N记录号(主关键字)stu_idchar(10)Y学号(外部关键字)CHANGEintY变更代码(外部关键字)REC_TIMEDATEY记录时间DESCRIPTchar(20)Y描述表3 REWARD奖励记录信息表字段名数据类型是否可空说明reward_idchar(5)N记录号(主关键字)stu_idchar(10)Y学号(外部关键字)level_idintY级别代码(外部关键字)REC_TIMEdateY记录时间DESCRIPTchar(20)Y描述表4 PUNISHMENT处罚记录信息表字段名数据类型是否可空说明punish_idchar(5)N记录号(主关键字)stu_idchar(10)Y学号(外部关键字)level_idintY级别代码(外部关键字)REC_TIMEdateY记录时间shengxiaochar(1)Y是否生效(T、F)DESCRIPTchar(20)Y描述表5 DEPARTMENT院系信息表字段名数据类型是否可空说明depart_idchar(5)N编号(主关键字)NAMEchar(20)Y全称表6 CLASS班级信息表字段名数据类型是否可空说明class_idchar(5)N编号(主关键字)NAMEchar(20)Y全称MONITORchar(10)Y班长学号(外部关键字)表7 CHANGE_CODE学籍变动代码表字段名数据类型是否可空说明CODEintN代码(主关键字)DESCRIPTchar(20)Y描述表8 REWARD_LEVELS奖励等级代码表字段名数据类型是否可空说明CODEintN代码(主关键字)DESCRIPTchar(20)Y描述表9 PUNISH_LEVELS处罚等级代码表字段名数据类型是否可空说明CODEintN代码(主关键字)DESCRIPTchar(20)Y描述B、数据库概念结构设计下图是本系统所需数据的E-R模型图。学生班级院系系系学号性别生日籍贯姓名班级系别班号班名系名系号组成组成学生信息管理系统学籍情况奖励情况处罚情况管理成管理成管理等级描述描述等级等级描述管理成管理成管理成编号编号编号编号C、数据库的建立create database stuuse stu-创建学生个人信息表create table stu(stu_id char(10), name char(20), sex char(1), class_id char(5), depart_id char(5), brith date, native_place char(20),primary key(stu_id),check(sex in(M,F)-创建change学籍变更表create table change(change_id char(5), stu_id char(10), change int, rec_time date, descript char(20), primary key(change_id)-创建reward奖励记录表create table reward(reward_id char(5), stu_id char(10), level_id int, rec_time date, primary key(reward_id)-创建惩罚记录信息表create table punish(punish_id char(5), stu_id char(10), level_id int, rec_time date, shengxiao char(1), descript char(10), primary key(punish_id), check(shengxiao in(T, F)-创建院系表create table depart(depart_id char(5), name char(20) not null, primary key (depart_id)-班级信息表create table class(class_id char(5), name char(20) not null, monitor_id char(10), primary key(class_id)-学籍变更表create table change_code(code int, descript char(20), primary key(code)-奖励等级表create table reward_levels(code int, descript char(20), primary key(code)-处罚等级表create table punish_levels(code int, descript char(20), primary key(code)-创建索引create index stu_index on stu(stu_id)create index change_index on change(change_id)create index change_code_index on change_code(code)create index class_index on class(class_id)create index depart_index on depart(depart_id)create index punish_index on punish(punish_id)create index punish_levels_index on punish_levels(code)create index rewaed_index on reward(reward_id)create index reward_levels_index on reward_levels(code)-增加约束alter table stuadd foreign key (class_id) references class(class_id)alter table stuadd foreign key (depart_id) references depart(depart_id)-changealter table changeadd foreign key (stu_id) references stu(stu_id)alter table changeadd foreign key (change) references change_code(code)-reawrdalter table rewardadd foreign key (stu_id) references stu(stu_id)alter table rewardadd foreign key (level_id) references reward_levels(code)-punishalter table punishadd foreign key (stu_id) references stu(stu_id)alter table punishadd foreign key (level_id) references punish_levels(code)-classalter table classadd foreign key (monitor_id) references stu(stu_id)-变更视图 drop view stu_changecreate view stu_changeas select stu.stu_id as 学号, as 姓名, stu.sex as 性别, as 班级, as 系部,change.change_id as 变更号, change.descript as 变更描, change_code.descript as 变更代码描述from stu, class, depart, change, change_codewhere stu.stu_id = change.stu_id and change.change = change_code.code andstu.class_id = class.class_id and stu.depart_id = depart.depart_id-奖励视图create view stu_rewardas select stu.stu_id as 学号, as 姓名, stu.sex as 性别, as 班级, as 系部,reward.level_id as 奖励序号, reward_levels.descript as 奖励描述, reward_levels.descript as 奖励级别描述from stu, class, depart, reward, reward_levelswhere stu.stu_id = reward.stu_id and reward.level_id = reward_levels.code andstu.class_id = class.class_id and stu.depart_id = depart.depart_id-惩罚视图create view stu_punishas select stu.stu_id as 学号, as 姓名, stu.sex as 性别, as 班级, as 系部,punish.level_id as 惩罚序号, punish.descript as 惩罚描述, punish_levels.descript as 惩罚级别描述from stu, class, depart, punish , punish_levelswhere stu.stu_id = punish.stu_id and punish.level_id = punish_levels.code andstu.class_id = class.class_id and stu.depart_id = depart.depart_id本系统中所用到的学籍变更和奖惩级别代码如表10至表12所示(请设计者完成这些数据表的逻辑结构)。表10 学籍变更代码表代码说明0转系1休学2复学3退学4毕业表11 奖励级别代码代码说明0校特等奖学金1校一等奖学金2校二等奖学金3校三等奖学金4系一等奖学金5系二等奖学金6系三等奖学金表12 处罚级别代码代码说明0警告1严重警告2记过3记大过4开除五、调试与测试1、登录说明:当前页面提供2个用户类型供选择。当用户选择普通用户时,登录模块下面的下拉列表的内容是禁用的,用户不可以选择。只有选择以管理员用户登录才可以选择下拉列表里面的内容。2、学生信息的录入3、数据库的建立其中共建表6个,创建视图3个,索引9个。六、实习日志第一天:我们组选择的学生信息管理系统,今天对这个课题做了一个细致的规划与分工;第二天:我们按照老师的要求开始了解qt操作平台,发现自己不会的太多;第三天:深度了解qt,以及对界面设计初步涉足;第四天:制作界面,遇到的问题重重,完成第一个界面设计;第五天:完成界面设计,进行期中检查,老师反映进度为零。第六天:我开始自己的数据库设计,建立数据字典;第七天:完成数据库概念结构设计;第八天:完成数据库的代码编写,建立完整的数据库;第九天:今天是最复杂的部分,根据彼此的信息修改自己所编写的代码,完成对接,制作答辩ppt;第十天:答辩结束,完成论文,以及最后的修改。七、实习总结完成本课题花了整整两个星期的时间,真正体会了作为一个程序员的辛 苦,并且必须具备细心、耐心的品质,想要完成一项出色的项目,必须精益求精,反复操作与实践。在做了本课程设计以后,我对C+的了解更深了,很多知识得到了巩固, 一些不懂的知识也渐渐明了!这其中主要是对指针的使用收获很多,在指针使用的过程中,对指针的指向以及对各函数中指针的赋值会影响到整个程序的运行;还有就是对文件的输入输出流了解得更透彻了,知道了打开一个文件后必须还要对其关闭,否则程序无法运行,对各种文件的输入输出控制符都能基本融会贯通。对于改程序,界面上含有的控件比较多。不对其进行重新命名的话。则代码的可读性不强。若重新命名则对名字的把握显得很重要,要么就会出现重名或者明出来的名字可读性不强。这次感觉用到了一些软件工程的知识。做稍微大点的系统,要先做需求分析,然后建立模型,再划分各个子模块。先实现一个一个的模块,最后再把各个模块综合起来,此时测试的是各个模块的关联性。通过这次课程设计,感觉自己的c+知识学习的还不是很好,面向对象的思想还不够深厚。扩展性不是很强。以后这方面还得多加学习才行。还有就是巩固了数据库的相关知识,尤其是对一些常用的SQL语句比较熟悉了。也觉察到了数据库的重要性,以及它在日常生活中所发挥的重要。最后还要感谢我的团队成员的给力配合,我们保持着默契,才能顺利完成这次大作业。还要感谢老师和同学的帮助。八、附录:核心代码清单(1)mian函数#include QtGui#include activewidget.hint main(int argc, char *argv) QApplication app(argc, argv); / QTextCodec:setCodecForLocale(QTextCodec:codecForName(UTF-8); ActiveWidget login; return app.exec();(2)stu_information类#include stu_information.h#include ui_stu_information.h#include QSqlQuery#include QSqlError#include QDebug#includestu_information:stu_information(QWidget *parent) : QDialog(parent), ui(new Ui:stu_information) ui-setupUi(this); b_edit = false; model = new QSqlTableModel(); ui-tableView-setSelectionBehavior(QAbstractItemView:SelectRows); connect(ui-cancelButton, SIGNAL(clicked(), this, SLOT(close(); connect(ui-okButton, SIGNAL(clicked(), this, SLOT(okSlot(); /查找信号槽 connect(ui-searchButton, SIGNAL(clicked(), this, SLOT(searchSlot(); connect(ui-searchCButton, SIGNAL(clicked(), this, SLOT(searchCSlot(); connect(ui-searchPButton, SIGNAL(clicked(), this, SLOT(searchPSlot(); connect(ui-searchRButton, SIGNAL(clicked(), this, SLOT(searchRSlot(); /删除信号槽 connect(ui-deleteButton, SIGNAL(clicked(), this, SLOT(deleteSlot(); connect(ui-deleteCButton, SIGNAL(clicked(), this, SLOT(deleteCSlot(); connect(ui-deletePButton, SIGNAL(clicked(), this, SLOT(deletePSlot(); connect(ui-deleteRButton, SIGNAL(clicked(), this, SLOT(deleteRSlot(); /增加记录和删除记录 connect(ui-AddTButton, SIGNAL(clicked(), this, SLOT(addSlot(); connect(ui-deleteTButton, SIGNAL(clicked(), this, SLOT(deleteTableSlot(); /综合查询 connect(ui-viewButton, SIGNAL(clicked(), this, SLOT(viewButtonSlot();stu_information:stu_information() delete ui;void stu_information:okSlot() if(ui-readRadio-isChecked() b_edit = false; if(ui-EditRadio-isChecked() b_edit = true; if(b_edit = false) ui-tableView-setEditTriggers(QAbstractItemView:NoEditTriggers); else ui-tableView-setEditTriggers(QAbstractItemView:AllEditTriggers); int cnt = ui-comboBox-currentIndex(); setModelHeaderData(cnt);void stu_information:searchSlot() setModelHeaderData(0); int index = ui-search_ComboBox-currentIndex(); /获取当前下了列表的字符串 switch(index) case 0: str_field = stu_id=; break; case 1: str_field = name=; break; case 2: str_field = sex=; break; case 3: str_field = class_id=; break; case 4: str_field = depart_id=; break; default: break; str_condition = ui-search_lineEdit-text(); QString str = str_field + + + str_condition+ ; qDebug() tableName() setFilter(str); model-setSort(index, Qt:DescendingOrder); model-select(); ui-tableView-show();void stu_information:searchCSlot() setModelHeaderData(1); int index = ui-searchC_ComboBox-currentIndex(); /获取当前下了列表的字符串 switch(index) case 0: str_field = change_id=; break; case 1: str_field = stu_id=; break; case 2: str_field = change=; break; default: break; str_condition = ui-searchC_lineEdit-text(); QString str = str_field + + + str_condition+ ; model-setFilter(str); model-setSort(index, Qt:DescendingOrder); model-select(); ui-tableView-show();void stu_information:searchPSlot() setModelHeaderData(3); int index = ui-searchP_ComboBox-currentIndex(); /获取当前下了列表的字符串 switch(index) case 0: str_field = punish_id=; break; case 1: str_field = stu_id=; break; case 2: str_field = level_id=; break; default: break; str_condition = ui-searchP_lineEdit-text(); QString str = str_field + + + str_condition+ ; model-setFilter(str); model-setSort(index, Qt:DescendingOrder); model-select(); ui-tableView-show();void stu_information:searchRSlot() setModelHeaderData(2); int index = ui-searchR_ComboBox-currentIndex(); /获取当前下了列表的字符串 switch(index) case 0: str_field = reward_id=; break; case 1: str_field = stu_id=; break; case 2: str_field = level_id=; break; default: break; str_condition = ui-searchR_lineEdit-text(); QString str = str_field + + + str_condition+ ; model-setFilter(str); model-setSort(index, Qt:DescendingOrder); model-select(); ui-tableView-show();void stu_information:deleteCSlot() QSqlQuery query; setModelHeaderData(1); int index = ui-searchC_ComboBox-currentIndex(); /获取当前下了列表的字符串 switch(index) case 0: str_field = change_id=; break; case 1: str_field = stu_id=; break; case 2: str_field = change=; break; default: break; str_condition = ui-searchC_lineEdit-text(); QString str = str_field + + + str_condition+ ; qDebug() str select(); ui-tableView-show();void stu_information:deleteSlot() QSqlQuery query; setModelHeaderData(0); int index = ui-search_ComboBox-currentIndex(); /获取当前下了列表的字符串 switch(index) case 0: str_field = stu_id=; break; case 1: str_field = name=; break; case 2: str_field = sex=; break; case 3: str_field = class_id=; break; case 4: str_field = depart_id=; break; str_condition = ui-search_lineEdit-text(); QString str = str_field + + + str_condition+ ; qDebug() tr(delete from stu where %1).arg(str) select(); ui-tableView-show();void stu_information:deletePSlot() QSqlQuery query; setModelHeaderData(2); int index = ui-searchP_ComboBox-currentIndex(); /获取当前下了列表的字符串 switch(index) case 0: str_field = punish_id=; break; case 1: str_field = stu_id=; break; case 2: str_field = level_id=; break; default: break; str_condition = ui-searchP_lineEdit-text(); QString str = str_field + + + str_condition+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林水文学课件
- 电力系统职业技能鉴定考试试题及答案
- 2025年市场营销经理职位招聘笔试题及解题策略
- 2025年篮球裁判规则题库及答案
- 2025年轻微型无人机考试题库含完整答案详解【易错题】
- 2025年电力行业信息技术部招聘面试全攻略及模拟题答案
- 2025年初级无损检测员磁粉-MT-模拟面试题及答案详解
- 2025年市场营销经理专业技能考核预测题
- 洪水公务员面试题目及答案
- 2025注册验船师考试(C级船舶检验专业综合能力)自测试题及答案一
- 预报基础知识收集整理
- 《一站到底》答题库大全之一(共800题)
- 最新数字媒体艺术概论课件
- 列车自动清洗机介绍课件
- 影视投融资学
- 合伙企业变更决定书(增资)
- GB∕T 35932-2018 梳棉胎 含2021年第1号修改单
- 市场营销学全套课件
- MAU控制逻辑检讨
- 《工程管理-流程图》word版
- 上海牛津英语9A教案
评论
0/150
提交评论