1、项目概述

1.1项目目标和主要内容

1)设计一个简单的学生信息管理的程序,教学管理人员能够使用该程序对学生基本信息、课程信息进行管理,包括数据的添加、修改删除和浏览;能够对学生选课进行管理。

2)能使用查询功能,快速查看到指定学生的选课信息;能够对学生选课情况进行简单的统计。

3)在添加学生基本信息、课程基本信息相关数据时,学号和课程号不能重复;在添加学生选课信息时,要求该学生和课程必须是存在的,而且不能添加重复的选课信息。

4)应用程序提供操作界面,可以方便用户进行功能选择,实现信息的管理和查询,并可以清晰地显示相关信息。

1.2项目的主要功能

1)打开程序进入界面可选择添加、修改、删除、浏览、查询功能选项;

2)点击添加按钮进入信息添加模块,模块可对课程信息、学生选课信息进行追加;

3)点击修改按钮进入信息修改模块,模块可对课程信息、学生选课信息进行修改;

4)点击删除按钮进入信息删除模块,模块可根据课程编号进行删除;

5)点击浏览按钮进入信息浏览模块,模块可对当前系统选课信息进行展示;

6)点击查询按钮进入信息查询模块,模块可对课程信息、学生选课信息进行查询。

2、项目设计

2.1项目总体框架

根据项目目标和主要内容设计项目总体框架如下所示,整体项目分为主界面、添加子界面、修改子界面、删除子界面、浏览子界面、查询子界面功能选项。主界面在MainWindow类中实现,添加子界面在wgtinput类实现、修改子界面在wgtmodt类实现、删除子界面在wgtdel类实现、浏览子界面在wgtsurf类实现、查询子界面在wgtselect类实现,所有功能的数据处理在dataprocess类实现。

2.2系统详细设计

2.2.1 MainWindow类

MainWindow类为主界面程序,界面提供五个功能选项,MainWindow类对应的mainwindow.ui设计布局如下:

MainWindow类构造函数中先后执行initMembers()、initWgt()、initConnect(),initMembers初始化5个子界面类并将其先隐藏,5个子界面类分别实例化为添加m_input、查询m_select、浏览m_surf、删除m_del、修改m_mod;initWgt将主界面名称命名为"学生选修课程系统";initConnect将5个按钮功能利用connect进行槽函数绑定,绑定程序如下:

connect(ui->btn_input,SIGNAL(clicked()),this,SLOT(slot_input()));

connect(ui->btn_mod,SIGNAL(clicked()),this,SLOT(slot_mod()));

connect(ui->btn_del,SIGNAL(clicked()),this,SLOT(slot_del()));

connect(ui->btn_surf,SIGNAL(clicked()),this,SLOT(slot_surf()));

connect(ui->btn_select,SIGNAL(clicked()),this,SLOT(slot_select()));

添加按钮点击后执行slot_input函数,slot_input函数执行m_input的init、show、raise,程序如下:

void MainWindow::slot_input()

{

if(m_input) {

m_input->init();

m_input->show();

m_input->raise();

}

}

修改按钮点击后执行slot_mod函数,修改按钮点击后执行slot_del函数,修改按钮点击后执行slot_surf函数,修改按钮点击后执行slot_select函数。

2.2.2 DataProcess类

程序中数据的结构体定义都在datastruct.h中定义,有课程信息结构体CourseInfo和学生选课信息结构体StuCourInfo,两结构体内容如下:

// 课程信息结构体

typedef struct CourseInfo

{

char courseCode[10]; //课程编号

charcourseName[20]; //课程名称

charcourseType[10]; //课程类别

int totalPeriod; //总学时

int classPeriod; //授课学时

int experiPeriod; //上机学时

floatcreditHour; //学分

int term; //开课学期

}CourseInfo;

// 学生选课信息结构体

typedef struct StuCourInfo

{

int stuNo; //学号

charcourseCode[10]; //课程编号

}StuCourInfo;

所有的数据管理都在DataProcess类管理,DataProcess类采用单例模式实现数据管理,这样可以在所有类里共享同一份数据,一个类中修改了数据其它数据中能获取修改后值。DataProcess类分别有以下四个函数存储课程列表、获取课程列表、存储选课列表和获取选课列表,成员变量有两个m_stu_list和m_course_list,两个类型都是列表QList,内容就是datastruct定义的两个结构体。

static DataProcess* instance();

//存储课程列表

void setCourseList(QList<CourseInfo> list);

//获取课程列表

QList<CourseInfo> getCourseList();

//存储选课列表

void setStuList(QList<StuCourInfo> list);

//获取选课列表

QList<StuCourInfo> getStuList();

2.2.3 WgtInput类

点击MainWindow添加按钮进入slot_input函数,然后调用WgtInput类中方法。WgtInput类对应的wgtinput.ui界面布局如下:

WgtInput类的槽函数中分别对两个按钮的功能进行绑定,分别是追加选课信息和追加学生信息:

connect(ui->btn_savecourse,SIGNAL(clicked()),this,SLOT(slot_saveCourse()));

connect(ui->btn_savestu,SIGNAL(clicked()),this,SLOT(slot_saveStu()));

点击追加选课信息进入slot_saveCourse函数,函数对course.txt进行操作,course.txt中存储课程选课信息,内容结构如下:

当界面上课程信息点击追加按钮时,会从界面输入框中获取输入的信息数据,分别按格式组装好然后写入course.txt文件中,每次追加完后后都会提示追加成功。同理,当界面上点击学生选课信息追加按钮时,会从界面输入框中获取输入的信息数据,分别按格式组装好然后写入stucourse.txt文件中,stucourse.txt中内容如下:

2.2.4 WgtMod类

点击MainWindow修改按钮进入slot_mod函数,然后调用WgtMod类中方法。WgtMod类对应的wgtmod.ui界面布局与wgtinput.ui布局界面一样,只是对应功能不同。

WgtMod类的槽函数中分别对两个按钮的功能进行绑定,分别是修改选课信息和修改学生信息。点击修改选课信息时从txt中获取数据,然后遍历列表,找到与界面上当前要修改的课程编号一样的数据,然后把当前界面上信息组装好后去替换txt中已有信息,核心程序如下:

QString course_ID = ui->lineEdit_courseCode->text();

QList<CourseInfo> lst_course =DataProcess::instance()->getCourseList();

for (int i = 0;i < lst_course.size();i++) {

CourseInfo data =lst_course[i];

QString str =QString::fromLocal8Bit(data.courseCode);

if(str ==course_ID) {

//QString转char*

QString str =ui->lineEdit_courseCode->text();

}

}

DataProcess::instance()->setCourseList(lst_course);

save_course_file();

QMessageBox::information(this,"提示","课程文件更新成功");

点击点击修改学生信息时逻辑一样,从txt中获取数据,然后遍历列表,找到与界面上当前要修改的课程编号一样的数据,然后把当前界面上信息组装好后去替换stucourse.txt中已有信息。

2.2.5 WgtDel类

点击MainWindow删除按钮进入slot_del函数,然后调用WgtDel类中方法。WgtDel类对应的wgtdel.ui界面布局如下所示,主要有一个输入课程编号框和删除按钮构成。

WgtDel类构造函数中将删除按钮与slot_del_course函数进行绑定,点击后执行slot_del_course删除功能。slot_del_course函数根据输入框输入的课程编号从DataProcess中分别遍历选课列表lst_course和学生列表lst_stu,如果列表中的课程编号与输入框一致就将其删除,输出所有跟当前结构体有关的值,相应的学生选课信息也要删掉。删除部分的核心代码如下:

for (int i = 0;i < lst_course.size();i++) {

CourseInfo data =lst_course[i];

QString str =QString::fromLocal8Bit(data.courseCode);

if(str == ID) {

lst_course.removeAt(i);

i--;

}

}

2.2.6 WgtSurf类

点击MainWindow浏览按钮进入slot_surf函数进行选课信息展示,然后调用WgtSurf类中方法。WgtSurf类对应的wgtsurf.ui界面布局如下所示,主要有一个输出显示框和两个翻页按钮构成。

WgtSurf类构造函数中将两个按钮进行槽函数绑定:

connect(ui->btn_backward,SIGNAL(clicked()),this,SLOT(slot_backward()));

connect(ui->btn_forward,SIGNAL(clicked()),this,SLOT(slot_forward()));

进入slot_surf函数先执行init中的readCourseData()和readStuData(),这两个函数分别读取选课信息course.txt和学生信息stucourse.txt中列表内容,将数据保存到数据管理器中:

DataProcess::instance()->setCourseList(lstdata);

然后将其中内容显示到表格中,显示采用分页显示,分页根据m_list的值进行设定为一页10行,显示表格时再调用setTable进行展示,setTable中对当前数据进行遍历展示到表格的item中,主要程序内容如下:

//显示到表格

m_list = DataProcess::instance()->getCourseList();

m_curr_page = 0;

m_pages = (m_list.size()/m_lines)+1;

int s_no = m_curr_page*m_lines;

int e_no = s_no+m_lines < m_list.size() ? s_no+m_lines :m_list.size();

setTable(s_no,e_no);

ui->label->setText(QString("当前第1页 共%1页").arg(m_pages));

当点击上一页按钮会进入slot_backward函数,如果当前是首页则将当前页设为最后一页,否则页面数减一,然后根据当前页来显示多少行,程序如下:

if(m_curr_page == 0) {

m_curr_page =m_pages-1;

}

else

{

m_curr_page--;

}

int s_no = m_curr_page*m_lines;

int e_no = s_no+m_lines < m_list.size() ? s_no+m_lines :m_list.size();

setTable(s_no,e_no);

ui->label->setText(QString("当前第%1页 共%2页").arg(m_curr_page+1).arg(m_pages));

点击下一页与之类似,如果前是尾页则将当前页设为第一页,否则页面数加一。

2.2.7 WgtSelect类

点击MainWindow查询按钮进入slot_ select函数进行选课信息展示,然后调用WgtSelect类中方法。WgtSelect类对应的wgtselect.ui界面布局如下所示,分为左右两个部分,分别对应选课课程信息查询和选课学生信息查询。

WgtSelect类槽函数对两个查询按钮进行绑定:

connect(ui->btn_select_course,SIGNAL(clicked()),this,SLOT(slot_select_course()));

connect(ui->btn_select_stu,SIGNAL(clicked()),this,SLOT(slot_select_stu()));

进入slot_select函数先执行init把选课课程信息和学生信息列表进行获取:

m_course_list = DataProcess::instance()->getCourseList();

m_stu_list = DataProcess::instance()->getStuList();

点击左侧课程信息查询按钮会进入slot_select_course函数,进入后首先清空上图界面左侧显示框并设置标头信息,然后根据界面上哪个单选框被选中了再进行对应查询,如果课程编号被选中了就按照课程编号进行查询,将输入的编号信息与前面获取的所有课程信息进行遍历比较,如果一样则将其存入临时变量listdata中,按其它类型查询方法一致,核心程序如下:

// 按课程编号查询

if(ui->radioButton->isChecked()) {

for(int i = 0;i< m_course_list.size();i++) {

CourseInfo data= m_course_list[i];

//char*转QString

QString tmp =QString::fromLocal8Bit(data.courseCode);

if(text == tmp){

listdata.append(data);

}

}

}

如果输入框内容为空,则将所有信息进行全部遍历展示。

当点击右侧课程学生信息查询按钮会进入slot_select_stu函数,进入后同样先清空上图界面右侧显示框并设置标头信息,课程学生信息查询只有根据课程编号一种,将输入的编号信息与前面获取的所有课程学生信息进行遍历比较,如果一样则将其存入临时变量listdata中并展示。

下图为学生选修课程系统点击删除模块界面:

下图为学生选修课程系统点击浏览模块界面:

下图为学生选修课程系统点击查询模块界面:

小型信息管理系统的设计相关推荐

  1. 小型超市信息管理系统的设计与实现(论文+源码)_kaic

    摘要 随着信息产业的快速发展,越来越多的软件.应用和平台不断出现和诞生, 传统行业也面临着管理方式方法的适应和改革.超市作为消费品流通的基本的经 营单位,为我们生活提供便利,无论是商业区.城市住宅区. ...

  2. jsp+sql智能道路交通信息管理系统的设计与实现(论文+系统+开题报告+答辩PPT+外文翻译)

    毕业设计(论文) 附 件 目 录 任务书1 文献综述4 开题报告9 译文14 译文原文 附件A 毕业设计(论文) 任 务 书 设计(论文)题目 智能道路交通信息管理系统 学 院 计算机学院 专 业 计 ...

  3. (附源码)ssm小型超市管理系统的设计与实现 毕业设计 011136

    目  录 摘要 1 1 绪论 1 1.1研究背景及意义 1 1.2研究现状 1 1.3系统开发技术的特色 1 1.4论文结构与章节安排 1 2小型超市管理系统系统分析 3 2.1 可行性分析 3 2. ...

  4. 基于SpringBoot的社区小型图书管理系统的设计与实现

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  5. java mysql 酒店信息,java+mysql酒店信息管理系统的设计论文

    摘  要: 现代化的酒店是集客房.餐饮.商务及其他各种服务为一体的消费场所,酒店组织庞大.信息量大.服务项目多,要想提高服务质量和管理水平,进而促进经济效益,必须借助计算机技术来进行现代化的信息管理. ...

  6. 幼儿园信息管理系统的设计与实现

    摘    要 随着幼儿园数量和规模的不断扩大,传统的人工管理模式已经无法有效的管理幼儿园中教职工与幼儿的信息.在这个计算机与网络技术飞速发展的时代,使用计算机管理系统不仅能提高幼儿园管理水平,还能减少 ...

  7. 用java写的教职工信息管理系统_基于Java的教师信息管理系统的设计与实现论文.doc...

    基于Java的教师信息管理系统的设计与实现论文 职场大变样社区():下载毕业设计成品 全套资料,全部50元以下 毕业设计(论文)任务书 第1页 毕业设计(论文)题目: 基于java的教师信息管理系统的 ...

  8. java ee 员工管理系统,fb3492 javaEE_原生Servlet_MySql企业员工信息管理系统的设计与实现,java源码含论文与答辩PPT...

    fb3492 javaEE_原生Servlet_MySql企业员工信息管理系统的设计与实现,java源码含论文与答辩PPT 存储:百度网盘 --/资源热下载站/VIP源码/Java源码/fb3492 ...

  9. netbeans基于mysql学生信息_学生信息管理系统的设计与实现(NetBeans IDE,MySQL)

    学生信息管理系统的设计与实现(NetBeans IDE,MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文16000字,程序代码,MySQL数据库) 本系统是在管理信息系统的理论 ...

最新文章

  1. Java的List和Json转换以及StringRedisTemplate往redis存泛型对象
  2. 小作文十大必背范文:五星级真题
  3. 数据结构与算法试题集锦
  4. 《图解HTTP》读书笔记--第1章 了解Web及网络基础
  5. windows系统路径环境变量
  6. linux 挂载多余空间,linux 空间不够,磁盘挂载
  7. 0523- 人员定位系统问题随手记
  8. php 递归函数 示例,php递归使用示例(php递归函数)
  9. 惠普计算机图标不在桌面,我的电脑图标没了怎么办
  10. Materials Studio多层聚合物的构建及data文件导出
  11. 聚类分析通俗易懂解释
  12. systemd-journald日志进程介绍
  13. Day12-2021.1.20-华为硬件笔试
  14. Linux查看文件指令cat、more、less、head、tail用法
  15. Axure预览样式错误混乱
  16. MATLAB的交互式界面 简易设计
  17. Bootstrap导航和导航条
  18. 不同波特率传输时间计算
  19. proteus仿真控制电机正转、反转和停止转动
  20. 从腾讯的职级系统,看清自己的职场宿命(转载)

热门文章

  1. 访客一体机 新一代科技门卫
  2. hadoop环境搭建(一):环境准备
  3. 贾跃亭与恒大“结婚”仨月就闹崩 各执一词谁之过
  4. matlab遗传算法求解冷链路径优化问题
  5. PYTHON学习笔记(六)-- 面向对象
  6. 工业用微型计算机实践,工业用微型计算机实践课程考核试卷一
  7. articulate studio能发布html5格式,articulate studio13 最新版
  8. word中自动插入目录,页码超出页边距
  9. 网站与APP抓包分析2 分析方法案例
  10. 验房步骤,验房注意事项,每个人都应该留一份