当前位置:网站首页>C语言学生管理系统——可检查用户输入合法性,双向带头循环链表
C语言学生管理系统——可检查用户输入合法性,双向带头循环链表
2022-06-24 06:32:00 【chfens】
太久没更新了。。有好多东西都要总结写博客,我的博客ToDo清单以及好多项了,一点一点补吧。。
这学期其中一个课设让我们设计一个学生管理系统,存储学生的基本信息和成绩。我是用C语言写的,最近在学习C++,回过头看这个系统感觉太不爽了,C++的特性可以减少很多冗余的代码。
功能
增删查改以及排序,数据可保存到磁盘,每次初始化的时候读取文件信息。
存储
内存中的数据用双向带头循环链表存储,因此插入和删除时间复杂度都是O(1),数据可以保存在本地磁盘的txt文件中,可自行修改代码中的存储路径。
要点
提几个设计这个系统要注意的关键点:
- 数据结构的使用
我这里是用的双向带头循环链表,读者可以自行修改成单链表,我只是为了让我的代码跟同学不一样所以采用了这种数据结构,在使用方面效率根本区分不出。设计这个系统需要你对链表结构很熟悉,能自己写增删查改。
- 输入合法性
刚开始没有格式的判断,只是直接读取用户输入的数据,因此被老师数落了一顿,可是老师之前也没跟我们说过= =。
输入判断包括学生信息输入的合法性以及选项选择时候的合法性。
用户输入信息的时候可能会调皮,比如学号输入中文,姓名输入学号等,因此需要检查格式是否正确,不正确就继续输,直到输对了为止。
选择选项的时候,比如我5个选项从1到5,但是你输入了以外的数字,或者你输入了一个字符,因为我是用scanf读取选项,如果输入了一个字符会导致读取不到,如果套在while里就会导致卡死,因为字符会一直留在缓冲区。
- 模块化编程
设计的时候要时刻牢记模块化,函数要做到高内聚低耦合,想用到的时候就能复用。
(下面内容直接搬我的实验报告)
先说学号判断:
学号是用字符数组存储的,需要判断输入的学号是否为纯数字,不允许输入字母或符号,且规定学号为五位,允许输入的学号范围为0到10^5 - 1,考虑到以上两点,在输入学生信息时先用一个整型数据接收用户输入的数据。如果格式正确,则将数据每次模10后加上字符0的ASCII值,即取整数的最后一位转换成字符型数据存放在数组的末端,便实现学生学号的存储。如果用int型接收用户的输入,当用户输入的数据数值过大会出现问题,因此选用long long int型存储。当数字成功输入且存放在stuNumber数组中后,调用isExistStu()函数检查是否已有该学号的学生存在。如果上述情况都能通过,则执行之后的程序。
姓名判断:
姓名用字符数组存储,只允许用户输入汉字,不允许输入字母、数字或符号。姓名字数支持2到4位,先判断用户是否输入字符或数字,如果不是,需要进一步判断是否输入为非中文符号的汉字。
设置当前环境的编码格式为 简体中文(GB2312),已知该编码格式下字符集中一个汉字或中文符号在字符数组中占两个字节,且每个字节的最高位都为1,因此可以区分该空间的内容是否为汉字。用for循环判断用户输入的是否为纯中文,如果不是中文则让用户重新输入。如果是中文,再检查是否存在中文符号。
已知GB2312编码对收录的字符进行了“分区”处理,共94个区,每区含有94个位,共8836个码位。01-09区收录除汉字外的682个字符。GB2312规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94个区;第二个字节为“低字节”,对应94个位。所以它的区位码范围是:0101-9494。区号和位号分别加上0xA0就是GB2312编码。因此除汉字以外的字符存储时,高位内容为A0-A9,即可检查输入的每个中文在数组中存放时的高位判断是否为符号。如果上述情况都能通过,则执行之后的程序。
各项成绩:
成绩用单精度浮点型变量存储,同样不允许输入字符或符号,成绩范围为0-100,至多一位小数,且小数部分只能为0.0或0.5。用modf()函数取出输入数字的小数部分判断是否为0.5或0.0,如果不是则重新输入。

排序学生成绩
主菜单中选择8的时候排序学生信息,调用GetNumStu函数得到链表中学生信息的个数,之后开辟两个等大小的数组,数组theScore存放成绩,数组theNode存放学生信息所在结点的地址。之后提示用户输入要排序的选项。随后调用SortStu函数,以学生成绩为索引,把学生成绩之间的排序转化为对应结点的排序。先将学生的待排序成绩依次存放在theScore中,同时把对应学生的结点存放在theNode中。之后通过插入排序对成绩进行排序的同时修改theNode中结点的顺序。排序完成后返回。循环调用PrintStu 打印结构体指针数组theNode中学生的信息即可得到成绩的排序结果,打印完成之后释放开辟的两个数组,之后返回主菜单界面。
文件保存
用fread和fwrite函数,而不是fscanf和fprintf,因为使用起来很不方便。
这里就不贴代码了,代码上传到我的码云上,需要的话自取。
学生管理系统的源代码
对于代码有什么问题可以在评论区提出!
结语
算是对C语言的一个小测试吧,希望我能有动力继续学习,继续更博客!!!!欲稍有成就,须从“有恒”二字下手。
边栏推荐
- CLB unable to access / access timeout troubleshooting
- Centos7 deploying mysql-5.7
- Analysis of official template of wechat personnel recruitment management system (II)
- How does easyplayer RTSP configure sending heartbeat information to the server?
- Analysis and treatment of easydss flash back caused by system time
- Wordpress5.8 is coming, and the updated website is faster!
- 【二叉树】——二叉树中序遍历
- What is domain name resolution? How to resolve domain name resolution errors
- 基于三维GIS系统的智慧水库管理应用
- Reasons for automatic allocation failure of crawler agent IP
猜你喜欢

A cigarette of time to talk with you about how novices transform from functional testing to advanced automated testing

【二叉数学习】—— 树的介绍

puzzle(019.1)Hook、Gear

ServiceStack. Source code analysis of redis (connection and connection pool)
Oracle case: ohasd crash on AIX

Technology is a double-edged sword, which needs to be well kept

解读AI机器人产业发展的顶层设计

创客教育给教师发展带来的挑战

Manual for automatic testing and learning of anti stepping pits, one for each tester

Enter the software test pit!!! Software testing tools commonly used by software testers software recommendations
随机推荐
Configure PHP development environment in MAC environment: apache+php+mysql
Small programs import Excel data in batches, and cloud development database exports CVS garbled code solution
TRTC applet custom message
Spirit information development log (1)
"Adobe international certification" in the design industry, why can't big but big designs have good results?
Innovating the security service mode, deeply convinced that the organization has been equipped with a "continuous online expert group"
Overview of new features in mongodb5.0
Risk management - Asset Discovery series - public web asset discovery
Microsoft Security, which frequently swipes the network security circle, gives us some enlightenment this time?
10 year old drivers who have been engaged in software testing tell you what type of software is suitable for automation
Comparison of common layout solutions (media query, percentage, REM and vw/vh)
What is the difference between level 1, level 2 and level 3 domain names? How to register domain names
The 2021 Tencent digital ecology conference landed in Wuhan, waiting for you to come to the special session of wechat with low code
Papamelon 11 number of calculation permutation [combinatorics]
Continuously evolving cloud native application delivery
What is the domain name query network and how it should be used
I want to say "three no" to digital transformation
How to apply 5g smart pole to smart highway
When should I use Apache Druid
Word cannot copy and paste processing method