这个课程设计其实是去年下学期期末做的,不过今年才搭建了博客,把这个课程设计的过程写一下,顺便给这学期即将要课程设计的学弟们做个参考。
一. 课程设计题目选择
题目有如下五个:
1.学生成绩管理系统,要求:
(1)设计一个学生类Student,包括数据成员:姓名、学号、二门课程(面向对象程序设计、高等数学)的成绩。
(2)创建一个管理学生的类Management,包括实现学生的数据的增加、删除、修改、按课程成绩排序、保存学生数据到文件及加载文件中的数据等功能。
(3)创建一个基于对话框的MFC应用程序,程序窗口的标题上有你姓名、学号和应用程序名称。使用(1)和(2)中的类,实现对学生信息和成绩的输入和管理。
(4)创建一个单文档的MFC应用程序,读取(3)中保存的文件中的学生成绩,分别用直方图和折线方式显示所有学生某课程的成绩分布图。
2.简单几何的绘制与管理系统,要求:
(1)创建一个单(或多)文档/视图的Windows应用程序,进行平面几何图形的绘制和管理。
(2)程序窗口的标题上有你姓名、学号和应用程序名称,并包含各种功能菜单。
(3)几何图形的种类包括圆、矩形、三角形、平行四边形等。
(4)程序初次运行时已至少内置6个几何图形。
(5)功能有选取当前几何图形、添加几何图形、删除几何图形、变换几何图形(放缩、平移)。
(6)计算窗口中几何图形总数;求选定几何图形面积、周长;计算所有图形的总面积和总周长等。
(7)支持保存和加载程序绘制的几何图形文件。
3.学生学籍管理系统,要求设计一个程序,对学生的学籍信息进行管理。通过该系统实现对学生基本信息的录入、保存、删除、修改、查询等操作。设计要求:
(1)学生基本信息包括:学号、姓名、性别、年龄、班号、专业名称、系别等。
(2)使用类和对象的概念实现程序设计。
(3)以菜单形式显示各功能项。
(4)各功能项如下:
——学生基本信息的录入
——学生基本信息的删除
——学生基本信息的修改
——学生基本信息的查询
——按学号查询单个学生信息
——按姓名查询单个学生信息
——按性别查询学生信息
——按班号查询学生信息
——学生基本信息的统计
——按性别统计学生人数
——按班号统计学生人数
——按年龄统计学生人数
——按系别统计学生人数
——退出系统
(5)执行某个功能之后,程序将重新显示菜单供用户选择。
(6)将学生学籍信息保存到文件中。
4.高校人员信息管理系统(这个和上面一个特别像,就不再放具体要求了)
5.停车场管理系统:编写停车场管理程序,用于停车场对车辆的管理。程序能够实现可用车位统计与查询、零车位提示、停车时长统计、按车型时长收费、管理员收费累计等功能。设计要求与提示如下:编写停车场收费管理系统,定义汽车类Car和管理员类CarManager,Car类有number(车牌号),model(车型)、enterTime(入场时间)、 quitTime(出场时间)、price(每小时收费价)、cost(费用)等属性,CarManager类有id和key等,实现以下收费功能:
(1)可用车位统计与查询
(2)零车位提示
(3)停车时长统计
(4)按车型时长收费
(5)管理员收费累计
第一个题目选的人太多了,百度一搜一大片,第二个题目本人当时做不出(I am so vegetable),第三第四都差不多,第五个当初好像是没有思路。最终个人选择了第三个,此处将第三个题目的整体设计思路呈现一下,有写的不好的地方你自己改改就好了(个人感觉这个程序当时设计出来的鲁棒性和健壮性都是不错的😁)。
二. 编程语言选择
虽然,这个课程设计的全称叫C++程序设计课程设计;虽然,这个课程设计的本意是设计一个MFC程序;但是呢,老师并没有说不能用别的编程语言设计这个可视化界面(当时好像是有人问过的)。于是呢,面向这个题目,为了让信息存储更美观(MFC目测只能用下拉列表存,而且还没有多项的下拉列表),个人在几种编程语言的可视化控件中找了一圈,最终选择了拥有DataGridView
控件的C#
(Qt没找,Qt开源版的开源协议没有完全看懂不敢用,Java要装Qt插件才有可视化控件直接选择,所以也没用)。
三. 页面设计布局
首先,根据设计要求,先把学号、姓名、性别、年龄、班号、专业名称、系别的标签栏(Label)和文本框(TextBox)都添加上并一一改好控件名(别都是什么TextBox1,TextBox2的,鬼知道你哪个是哪个)
然后呢,再把最最重要的数据存储控件DataGridView
加上,并修改初始行(每个初始列的首项)。
再把要求的“以菜单形式显示各功能项”的菜单加上,并把各功能项添加好,如图:
四. 功能编写
4.1. 录入
我校学号为10位数字,通过Textbox的Text.Length属性控制学号仅能为10位长度;通过KeyPress事件的e.KeyChar判断,使得学号栏仅能输入数字0-9和退格键。
同理,年龄仅能为数字且限制位数为3,班号仅能为数字且限制位数为3~4,姓名仅能为中英文等等。
同时,由于学号唯一不可重复,在录入时遍历学号列判重。且学号姓名必填,缺一不可(提示错误)。
添加全局变量用于保存总行数。
Tip:系别专业班号三项可以用下拉列表框提前写死,免去输入的麻烦
4.2. 查询
使用一个全局变量来记录当前状态:录入/查询。
当不同的查询按钮(按学号、按姓名)被单击时,修改全局变量值,搜索DataGridView
中对应列的数据,将匹配的数据行设为可见、不匹配则设置为不可见。搜索结束后再遍历所有行判断是否有可见行,若无可见行则提示“未找到有关数据”并将所有行的可见性还原。
单击退出查询时将全局变量恢复默认值并将所有行的可见性还原。
4.3. 修改
判断是否有选中单元格,且对应的输入栏是否为空,以及对应输入栏的输入判断,无误则允许修改。允许先进行查询再进行修改(正常思路,如果有一万项的列表,总不能一项项翻找吧)。
4.4. 统计
置全局变量作计数器。遍历数据项判断,相同则计数器加一,遍历完成后与总数比较计算出百分比,对话框显示百分比及人数。
4.5. 删除
判选中。声明局部变量用于保存选中行的行号。从选中行开始遍历,将下一行的值赋给上一行,遍历结束后删除最末行(若直接删除选中行会出现行索引NULL导致查询操作遍历行索引时报错),并将保存总行数的全局变量减一。
4.6. 保存
即数据导出。你看这个碗它又大又宽,你看这个DataGridView
它就特别像Excel。上网一搜还真有直接把DataGridView
的数据导出成Excel表格的,所以此处面向CV编程即可(老师看起来也不是很注重这一块,当时直接没问这里)。
五. 源码
https://github.com/LuHawXem/Programming-Course-Design---2019
https://gitee.com/LuHawXem/Programming-Course-Design---2019
发布时间: 2021-03-06
最后更新: 2021-03-13
本文标题: 程序设计课程设计
本文链接: https://cloudflare.luhawxem.com/2021/03/06/ProgrammingCourseDesign/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!