【C#】简易学生记录批量生成器

本项目来源于博主的C#课程的期末综合设计,该生成器可以一键生成所需的批量学生信息,可应用于生成数据库等课程的教学数据资源数据等。

一. 题目要求

设计一个批量学生记录生成器,实现默认自动生成1000个学生记录信息的功能,设计画面如示例图所示。
在这里插入图片描述
1. 数据环境搭建
(1)创建Mysql数据库,并命名为qmtest数据库。
(2)在qmtest数据库中创建stud表,用于保存学生记录信息。其结构如下:
在这里插入图片描述
2. 操作流程和功能要求
整个版面设计分成左右两个部分。左边部分是依据不同选择的条件来编码完成指定数量(默认1000条)学生记录的生成和入库;右边部分则是利用DataGridView来输出学生记录信息。具体要求如下:

(1) 学号部分:表示起始学号,默认初始值为20200001。可以人工录入,要求2020开头的8位数字格式输入。
(2) 姓名部分
姓的部分可以从下面给定的字符串里随机得到;或者键盘输入其中的某个姓氏字符串值。

FirstNames = new[] {
“赵”,“钱”,“孙”,“李”,“周”,“吴”,“郑”,“王”,“冯”,“陈”,“褚”,“卫”,“蒋”,“沈”,“韩”,“杨”,“朱”,“秦”,“尤”,“许”,“何”,“吕”,“施”,“张”,“孔”,“曹”,“严”,“华”,“金”,“魏”,“陶”,“姜”,“戚”,“谢”,“邹”,“水”,“昌”,“马”,“苗”,“凤”,“花”,“方”,“俞”,“任”,“袁”,“柳”,“鲍”,“史”,“唐”,“费”,“岑”,“薛”,“雷”,“贺”,“倪”,“汤”,“殷”,“罗”,“毕”,“郝”,“邬”,“安”,“常”,“乐”,“于”,“时”,“齐”,“康”,“伍”,“余”,“元”,“顾”,“孟”,“黄”,“欧阳”,“夏侯”,“皇甫”,“上官”};

名的部分则需要按照男女性别来分别组织。对男同学,在随机产生名字个数(1和2)或者指定名字个数基础上,从下面给定的男名串里随机得到名字的字;女同学也是在随机产生名字个数(1和2)或者指定名字个数基础上,从下面给定的女名串里随机得到名字的字。

BoyWords = new[] {
“刚”,“强”,“仁”,“发”,“民”,“国”,“忠”,“艺”,“文”,“德”,“志”,“智”,“辉”,“华”,“军”,“生”,“裕”,“健”,“炎”,“宏”,“毅”,“坚”,“石”,“超”,“鹏”,“亮”,“锦”,“家”,“春”,“磊”,“勇”,“正”,“东”,“南”,“斌”,“武”,“友”,“祖”,“颂”,“小”,“宇”,“兴”,“波”,“荣”,“峰”,“祥”,“思”,“振”,“海”,“凯”,“远”,“汉”,“桥”,“松”,“柏”,“利”,“大”};

GirlWords = new[] {
“花”,“华”,“芳”,“芬”,“燕”,“虹”,“菁”,“丽”,“娟”,“莘”,“苹”,“红”,“玉”,“妙”,“丹”,“芸”,“香”,“蕾”,“兰”,“慧”,“玲”,“静”,“茹”,“怡”,“紫”};

(3) 性别部分:随机得到或单选得到。注意,性别值会影响男女名字部分的组合。
(4) 年龄部分:随机得到或下拉选择得到。设置年龄选择16-26。
(5) 所属院系部分:随机得到或下拉选择得到。设置计算机、大数据、电子、电力和试验班五个选项。。
(6) 政治面貌部分:随机得到或下拉选择得到。设置群众、党员和团员三个选项。
(7) 个数部分:设置生成记录数,默认1000,可以单击增减。
(8) 进程条部分:依据(7)的个数部份值设置进程条的Max值,实现追加过程的进程条动态行进效果。
(9) 二维码部分:制作粘贴一个二维码,用于制作者的身份认证。
(10) 单击“生成”命令按钮,代码实现指定次数(默认1000)的动态组合界面控件学生记录值并追加到stud表中。要求在追加之前先清除stud表里的记录!
(11) 学生列表区域使用DataGridView数据控件来显示stud表的信息,启动时为空。
(12) 单击“清除”命令按钮,代码实现清除stud表的记录、刷新数据控件并弹出下图所示的通知信息:
在这里插入图片描述
(13) 单击“加载”命令按钮,代码实现数据控件输出stud表的所有记录。效果如下:
在这里插入图片描述
如果stud表为空,则弹出下图所示的提示信息:
在这里插入图片描述

二. 设计报告

3.1 开发环境说明

本批量学生记录生成器基于.NET Framework 4.5.2框架,所用开发语言为C# 5.0,所用开发环境为SharpDevelop,数据库使用MySQL 8.0,数据库管理系统使用HeidiSQL 11.0。

3.2 数据库设计与搭建

在HeidiSQL中连接MySQL数据库,创建一个名为“qmtest”的数据库,运行给出的“stud.sql”文件,建立stud表。stud表各字段及其属性如下表所示:
在这里插入图片描述
SQL源码:

-- --------------------------------------------------------
-- 主机:                           127.0.0.1
-- 服务器版本:                        8.0.25 - MySQL Community Server - GPL
-- 服务器操作系统:                      Win64
-- HeidiSQL 版本:                  11.0.0.5919
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;


-- 导出 qmtest 的数据库结构
CREATE DATABASE IF NOT EXISTS `qmtest` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `qmtest`;

-- 导出  表 qmtest.stud 结构
CREATE TABLE IF NOT EXISTS `stud` (
  `学号` int NOT NULL,
  `姓名` varchar(4) NOT NULL DEFAULT '',
  `性别` char(1) NOT NULL DEFAULT '',
  `年龄` int NOT NULL DEFAULT '0',
  `所属院系` varchar(3) NOT NULL DEFAULT '0',
  `政治面貌` varchar(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`学号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 正在导出表  qmtest.stud 的数据:~0 rows (大约)
/*!40000 ALTER TABLE `stud` DISABLE KEYS */;
/*!40000 ALTER TABLE `stud` ENABLE KEYS */;

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

3.3 界面设计

主界面的整个版面设计分成左右两个部分,左边部分是依据不同选择的条件来编码完成指定数量学生记录的生成和入库参数设定及操作区域,右边部分则是利用DataGridView来输出学生记录信息。

左边部分设有学号设置区域、姓名设置区域、个数设置区域、性别设置区域、年龄设置区域、所在院系设置区域、政治面貌设置区域、二维码生成区域和进度条显示区域。

右边部分除了占主体的DataGridView用于学生信息记录查看区域外,下方还设置有“生成”、“加载”和“清除”三个按钮,分别用于完成各自的操作。
设置系统图标如下所示:
在这里插入图片描述
主界面设计如下图所示:
在这里插入图片描述

3.4 功能设计

3.4.1 学生记录生成模块

学生记录信息有学号、姓名、性别、年龄、所在院系和政治面貌。由于对每种信息的生成设置都有不同的要求,故需要分开讨论设计。

I. 学号生成模块设计
学号生成模块最重要的一步是判断用户输入的学号格式是否正确,如果有不符合格式的地方则进行相应的提示。为了防止因格式错误造成的可能报错,我们设置“生成”按钮的Enabled属性只有在文本框中输入的学号符合格式要求时才为true。

分析可知,学号格式不正确有多种情况,因此我们需要对每一种情况进行不同的错误提示,并且错误提示要做到实时性,在用户输入的同时同步检测格式,若学号文本框内输入字符串长度不足8,则无法按下“生成”按钮。若学号输入不以2020为开头,则会弹出相应错误提示。若学号以2020为开头,但后4位并没有按照要求输入数字,而是输入了其他字符,则也会弹出相应错误提示。

此外,由于学号为主键,不允许有重复值出现,所以对于可能造成的学号重复覆盖的情况,我们使用了id数组用来存储已经位于数据库中的学号,每次添加记录时同步储存至id数组中。待下次用户在学号文本框中输入新的起始学号时,后台则会将输入内容遍历id数组,并与数组内的每一个已经存在的学号值进行比较,若发现有相等的情况,则视为发生重复,若与所有已存在的学号都不相等,则视为没有发生重复,不需要弹出提示。

对于多次生成的情况,若用户输入的起始学号的值已经在数据库中,则会弹出相应的警告提示,如果继续生成操作则会将之前的记录覆盖,提醒用户谨慎操作。此时用户已经知晓继续操作的后果,如若用户选择继续操作,则新生成的学生记录会覆盖之前具有相同学号主键的学生记录。如若学生选择取消操作,则需要重新设置起始学号以及待生成的学生个数。

由于题目要求学号依次递增生成记录,故在生成之前还需要获取NumericUpDown控件中设置的待生成的学生记录数量,在连接数据库生成记录时需要将StudentID转化为int类型之后执行自增。我们设置NumericUpDown控件中的取值为0至9999,若用户修改控件的值过大,则会弹出报错提示;若用户修改控件的值为负数,则系统默认设置为0。

分析可知,以2020位开头的8位数字共有10000个。若以设置的学生记录数为基准,从起始学号开始递增,最终的结果可能会超过20209999。若发生此种情况,则系统会弹出相应警告窗口,后续的记录不再生成

II. 姓名生成模块设计
姓名生成模块分为姓氏生成和名字生成两部分。其中,姓氏生成部分分为随机姓氏和指定姓氏两种,姓氏与性别无关。名字生成部分以名字长度为分类标准,分为随机长度、长度为1、长度为2三类,并且名字的取字还与性别设置相挂钩,不同的性别则对应着不同的名字字库。

如果用户选择随机生成姓氏,则为了能够使姓氏随机,我们设置了0至77的随机数生成,其结果分别对应着78个已有的姓氏。如果用户选择指定姓氏,由于题目中要求必须使用姓氏库中的姓氏,故需要对用户输入的姓氏加以判断,在FirstName数组中的姓氏才被认为符合标准,其余情况则需要弹出相应错误提示。

如果用户选择随机名字长度,则使用1至2的随机数模拟名字长度。除了名字长度的限制,我们还需要预先判断性别,若为男性则在男名串中取字,若为女性则在女名串中取字。名字长度为1的情况只需随机取用一次,名字长度为2的情况则需要取用两次。取出相应的名字后,利用字符串连接将姓氏与名字相连接,则可得到最终的姓名。

III. 年龄生成模块设计
年龄生成模块较为简单,只需要根据radiobutton控件的选择情况判断是否随机生成即可。

IV. 所在院系生成模块设计
所在院系生成模块较为简单,只需要根据radiobutton控件的选择情况判断是否随机生成即可。

V. 政治面貌生成模块设计
政治面貌生成模块较为简单,只需要根据radiobutton控件的选择情况判断是否随机生成即可。

3.4.2 数据库操作模块

数据库操作存在于主界面加载MainFormLoad()和按下三个按钮的事件Button_MakeClick()、Button_LoadClick()、Button_ClearClick()中。

由于需要保证启动时数据库为空,故不论启动时后台MySQL数据库中有无学生数据,都需要首先执行SQL语句“DELETE FROM stud;”将stud表中的数据清空。“清除”按钮按下之后的数据库操作也与之类似。

启动程序后,由于数据表中为空,若此时点击“加载”或“清除”按钮,则会弹出报错窗口。

若用户正确生成学生记录,则在按下“生成”按钮后,会将生成的数据插入到stud表中,若主键相等,数据允许覆盖记录。

添加完一组学生记录后,点击“加载”按钮即可通过SQL语句“select * from stud”和datagridview控件来显示学生信息。

若stud表中有数据,则点击“清除”按钮即可通过SQL语句“delete from stud”删除所有的学生信息,删除后则刷新datagridview控件。

3.4.3 其他模块

I. 进度条模块
进度条用于动态显示生成过程的进度,便于用户了解程序运行状况。在使用进度条控件之前,我们首先需要对progressbar控件进行设置,设置最小值与当前值均为0,设置最大值为需要生成的学生记录数量StudentNumber,并设置步长为1。之后在生成学生记录的for循环中的末尾执行progressBar.PerformStep(); 从而完成进度条显示的变化。

II. 停留提示模块
为了便于用户使用,为所有控件设置停留提示,响应时间为0.2秒,显示时间为5秒。运行程序,用户鼠标移动到任何一个控件上方,即可显示相应控件的使用方法,便于用户操作和输入,减少报错提示的次数。

III. 二维码模块
制作好个人信息二维码后,利用picturebox控件显示,这里我用的是CSDN的二维码。

三. 项目源码

源码链接: 基于C#的简易学生记录批量生成器.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeron Zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值