学生信息管理系统(student information manage system, SIMS)

news/2024/5/17 19:45:53 标签: git, github, gitee, c, 信息管理系统
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="markdown_views prism-tomorrow-night"> cap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

一、前言

ckquote>

本项目为学生信息管理系统c;使用C语言编写。


★★★项目详见本人class="tags" href="/tags/GIT.html" title=git>gitee仓库࿰c;地址
https://class="tags" href="/tags/GIT.html" title=git>gitee.com/omnipotent-brother/student-information-manage-system.class="tags" href="/tags/GIT.html" title=git>git
★★★

ckquote>

二、项目介绍

ckquote>

开发环境

基于windows 11系统下的Visual Studio 2022开发

提供功能

  • 学生信息的查询、修改、增加、删除
  • 账户信息的查询、修改、增加、删除

登陆级别

  • 管理员级别-老师-0࿰c;可使用所有系统功能。
  • 普通 级别-学生-1࿰c;仅查询功能。

配置文件

  • configure.txt 存放登陆账户信息文件和学生信息文件的绝对路径࿰c;每个路径独占一行。
  • usrer_cfg.txt 登录账户信息࿰c;0表示管理员账户࿰c;1表示普通用户。
  • student_cfg.txt 学生信息。

注意: 配置文件要和可执行文件在同一目录下࿰c;或者在程序中fopen的时候写入配置文件路径。
用户文件和登陆账户文件格式如下
usrer_cfg.txt

<code>账户名 密码 登陆级别 code>

student_cfg.txt

<code>id 姓名 课程id 成绩 课程id 成绩 课程id 成绩 ... code>

ckquote>

三、项目展示

ckquote>

登陆界面
首先选择身份
c="https://img-blog.csdnimg.cn/b549a3e9e9e44847ad6236c805e44348.png" alt="在这里插入图片描述" />
登录界面输入的账户名和密码应该是usrer_cfg.txt配置文件中存在的记录。
c="https://img-blog.csdnimg.cn/afd7c798af454c0b8a8e876712c6e87c.png" alt="在这里插入图片描述" />

ckquote> ckquote>

功能选择界面。
c="https://img-blog.csdnimg.cn/8f824fd74417419091147c7766c02642.png" alt="在这里插入图片描述" />

ckquote> ckquote>

查询学生信息࿰c;查询方式选择界面。
c="https://img-blog.csdnimg.cn/5bbd893ef4bb4b5d9632565e2695dfb4.png" alt="在这里插入图片描述" />
选择0࿰c;查询所有信息。
c="https://img-blog.csdnimg.cn/e6948d95314d48749cdeaab36babc42d.png" alt="在这里插入图片描述" />

ckquote>

四、项目经验分享

ckquote>

通过项目实战可以大大提升C语言水平࿰c;下面展示代码片段。

ckquote> ckquote>

自定义数据结构

ckquote>
<code class="prism language-c">class="token comment">/* 
* 用户结构体 
*/
class="token keyword">typedef class="token keyword">struct class="token class-name">user
class="token punctuation">{
	class="token keyword">char nameclass="token punctuation">[NAME_LENclass="token punctuation">]class="token punctuation">; class="token comment">/* 用户名称 */
	class="token keyword">char passwordclass="token punctuation">[PASSWORD_LENclass="token punctuation">]class="token punctuation">; class="token comment">/* 用户密码 */
	class="token keyword">int levelclass="token punctuation">; class="token comment">/* 权限级别 */
	class="token keyword">struct class="token class-name">userclass="token operator">* nextclass="token punctuation">;
class="token punctuation">}class="token class-name">user_tclass="token punctuation">; 

class="token comment">/*
* 课程结构体
*/
class="token keyword">typedef class="token keyword">struct class="token class-name">course
class="token punctuation">{
	class="token keyword">int idclass="token punctuation">; class="token comment">/* 课程号 */
	class="token keyword">double scoreclass="token punctuation">; class="token comment">/* 成绩࿰c;尽量使用double࿰c;float容易失真 */
class="token punctuation">}class="token class-name">course_tclass="token punctuation">;

class="token comment">/*
* 学生结构体
*/
class="token keyword">typedef class="token keyword">struct class="token class-name">student
class="token punctuation">{
	class="token keyword">int idclass="token punctuation">;
	class="token keyword">char nameclass="token punctuation">[NAME_LENclass="token punctuation">]class="token punctuation">;
	class="token class-name">course_t courseclass="token punctuation">[COURSE_NUMclass="token punctuation">]class="token punctuation">;
	class="token keyword">struct class="token class-name">studentclass="token operator">* nextclass="token punctuation">;
class="token punctuation">}class="token class-name">student_tclass="token punctuation">;

class="token comment">/*
* 账户级别:admin管理员账户࿰c;normal普通账户
*/
class="token keyword">enumclass="token punctuation">{ADMIN class="token operator">= class="token number">0class="token punctuation">, NORMALclass="token punctuation">}class="token punctuation">; 
class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name function">LEGAL_LEVELclass="token expression">class="token punctuation">(levelclass="token punctuation">) class="token punctuation">(class="token punctuation">(ADMIN class="token operator">== levelclass="token punctuation">) class="token operator">|| class="token punctuation">\
							class="token expression">class="token punctuation">(NORMAL class="token operator">== levelclass="token punctuation">)class="token punctuation">)

class="token comment">/*
* 通过断言判定是否合法࿰c;即是否在enum枚举范围内
*/
class="token macro property">class="token directive-hash">#class="token directive keyword">ifdef class="token expression">USE_FULL_ASSERT
class="token keyword">void class="token function">assert_failedclass="token punctuation">(class="token keyword">unsigned class="token keyword">charclass="token operator">* fileclass="token punctuation">, class="token keyword">unsigned class="token keyword">int lineclass="token punctuation">)class="token punctuation">;
class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name function">assert_paramclass="token expression">class="token punctuation">(exprclass="token punctuation">) class="token punctuation">(class="token punctuation">(exprclass="token punctuation">) class="token operator">? class="token punctuation">(class="token keyword">voidclass="token punctuation">)class="token number">0 class="token operator">: class="token function">assert_failedclass="token punctuation">(class="token punctuation">(class="token keyword">unsigned class="token keyword">char class="token operator">*class="token punctuation">)class="token constant">__FILE__class="token punctuation">, class="token constant">__LINE__class="token punctuation">)class="token punctuation">)
class="token macro property">class="token directive-hash">#class="token directive keyword">else
class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name function">assert_paramclass="token expression">class="token punctuation">(exprclass="token punctuation">) class="token punctuation">(class="token punctuation">(class="token keyword">voidclass="token punctuation">)class="token number">0class="token punctuation">)
class="token macro property">class="token directive-hash">#class="token directive keyword">endif
code>
ckquote>

主程序

ckquote>
<code class="prism language-c">class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name">USE_FULL_ASSERT

class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string">"sims.h"

class="token keyword">int class="token function">mainclass="token punctuation">(class="token keyword">charclass="token operator">* argvclass="token punctuation">[class="token punctuation">]class="token punctuation">, class="token keyword">int argcclass="token punctuation">)
class="token punctuation">{
	class="token keyword">int option class="token operator">= class="token number">0class="token punctuation">; class="token comment">/* 用于记录用户选项 */
	class="token class-name">student_tclass="token operator">* stu_list class="token operator">= class="token constant">NULLclass="token punctuation">;
	class="token class-name">user_tclass="token operator">* user_list class="token operator">= class="token constant">NULLclass="token punctuation">;
	class="token class-name">user_t userclass="token punctuation">;
	class="token function">memsetclass="token punctuation">(class="token operator">&userclass="token punctuation">, class="token number">0class="token punctuation">, class="token keyword">sizeofclass="token punctuation">(userclass="token punctuation">)class="token punctuation">)class="token punctuation">;

	FILEclass="token operator">* fp class="token operator">= class="token function">fopenclass="token punctuation">(class="token string">"E:\\project\\c\\my_sims\\configure.txt"class="token punctuation">, class="token string">"r"class="token punctuation">)class="token punctuation">; class="token comment">/* 打开配置文件 */
	class="token function">fseekclass="token punctuation">(fpclass="token punctuation">, class="token number">0class="token punctuation">, class="token constant">SEEK_SETclass="token punctuation">)class="token punctuation">; class="token comment">/* 文件指针移至文件首 */
	class="token keyword">char user_pathclass="token punctuation">[class="token number">128class="token punctuation">] class="token operator">= class="token string">""class="token punctuation">;
	class="token keyword">char stu_pathclass="token punctuation">[class="token number">128class="token punctuation">] class="token operator">= class="token string">""class="token punctuation">;
	class="token keyword">char strclass="token punctuation">[class="token number">128class="token punctuation">] class="token operator">= class="token string">""class="token punctuation">;

	class="token comment">/* 获取配置文件信息 */
	class="token function">fgetsclass="token punctuation">(strclass="token punctuation">, class="token keyword">sizeofclass="token punctuation">(strclass="token punctuation">)class="token punctuation">, fpclass="token punctuation">)class="token punctuation">; class="token comment">/* 读取一行 */
	class="token function">strncpyclass="token punctuation">(user_pathclass="token punctuation">, strclass="token punctuation">, class="token function">strlenclass="token punctuation">(strclass="token punctuation">) class="token operator">- class="token number">1class="token punctuation">)class="token punctuation">;  class="token comment">/* 不拷贝换行符 */
	class="token function">memsetclass="token punctuation">(strclass="token punctuation">, class="token number">0class="token punctuation">, class="token keyword">sizeofclass="token punctuation">(strclass="token punctuation">)class="token punctuation">)class="token punctuation">; class="token comment">/* 清空str防止脏数据 */
	class="token function">fgetsclass="token punctuation">(strclass="token punctuation">, class="token keyword">sizeofclass="token punctuation">(strclass="token punctuation">)class="token punctuation">, fpclass="token punctuation">)class="token punctuation">;
	class="token keyword">if class="token punctuation">(strclass="token punctuation">[class="token function">strlenclass="token punctuation">(strclass="token punctuation">)class="token punctuation">] class="token operator">== class="token char">'\n'class="token punctuation">)
	class="token punctuation">{
		class="token function">strncpyclass="token punctuation">(stu_pathclass="token punctuation">, strclass="token punctuation">, class="token function">strlenclass="token punctuation">(strclass="token punctuation">) class="token operator">- class="token number">1class="token punctuation">)class="token punctuation">; class="token comment">/* 如果有换行符࿰c;不拷贝换行符 */
	class="token punctuation">}
	class="token keyword">else
	class="token punctuation">{
		class="token function">strncpyclass="token punctuation">(stu_pathclass="token punctuation">, strclass="token punctuation">, class="token function">strlenclass="token punctuation">(strclass="token punctuation">)class="token punctuation">)class="token punctuation">; class="token comment">/* 无换行符全部拷贝 */
	class="token punctuation">}
	class="token comment">/*	测试打印
	printf("%zd\n", strlen(str));
	printf("user_path : %s\n", user_path);
	printf("stu_path : %s\n", stu_path);*/

	class="token comment">/* 系统初始化 */
	class="token function">system_initclass="token punctuation">(class="token operator">&user_listclass="token punctuation">, class="token operator">&stu_listclass="token punctuation">, user_pathclass="token punctuation">, stu_pathclass="token punctuation">)class="token punctuation">;

	class="token comment">/* 主循环 */
	class="token keyword">while class="token punctuation">(class="token number">1class="token punctuation">)
	class="token punctuation">{
		class="token function">systemclass="token punctuation">(class="token string">"cls"class="token punctuation">)class="token punctuation">;  class="token comment">/* 清屏 */
		class="token function">menu_initclass="token punctuation">(class="token punctuation">)class="token punctuation">;
		class="token function">printfclass="token punctuation">(class="token string">"Please enter your number: "class="token punctuation">)class="token punctuation">;
		option class="token operator">= class="token function">getcharclass="token punctuation">(class="token punctuation">) class="token operator">- class="token char">'0'class="token punctuation">;  class="token comment">/* 获取输入的字符并转为数字 */
		
		class="token keyword">if class="token punctuation">(class="token number">2 class="token operator">== optionclass="token punctuation">)
		class="token punctuation">{
			class="token function">system_exitclass="token punctuation">(class="token punctuation">)class="token punctuation">;
			class="token keyword">return class="token number">0class="token punctuation">;
		class="token punctuation">}
		class="token keyword">else class="token keyword">if class="token punctuation">(class="token function">LEGAL_LEVELclass="token punctuation">(optionclass="token punctuation">)class="token punctuation">)
		class="token punctuation">{
			userclass="token punctuation">.level class="token operator">= optionclass="token punctuation">;
		class="token punctuation">}
		class="token keyword">else
		class="token punctuation">{
			class="token function">fflushclass="token punctuation">(class="token constant">stdinclass="token punctuation">)class="token punctuation">; class="token comment">/* 刷新输入缓冲区 */
			class="token function">printfclass="token punctuation">(class="token string">"Input error!\n"class="token punctuation">)class="token punctuation">;
			class="token function">assert_paramclass="token punctuation">(class="token function">LEGAL_LEVELclass="token punctuation">(optionclass="token punctuation">)class="token punctuation">)class="token punctuation">; class="token comment">/* 使用断言打印位置 */
			class="token function">printfclass="token punctuation">(class="token string">"Press any key to re-enter..."class="token punctuation">)class="token punctuation">;
			class="token function">_getchclass="token punctuation">(class="token punctuation">)class="token punctuation">; class="token comment">/* 接受任意字符后继续运行࿰c;getch()需要按Enter键才能继续运行 */
			class="token keyword">continueclass="token punctuation">;
		class="token punctuation">}

		class="token function">systemclass="token punctuation">(class="token string">"cls"class="token punctuation">)class="token punctuation">;
		class="token function">printfclass="token punctuation">(class="token string">"Please enter the user name and password...\n"class="token punctuation">)class="token punctuation">;
		class="token function">printfclass="token punctuation">(class="token string">"user name: "class="token punctuation">)class="token punctuation">;
		class="token function">scanfclass="token punctuation">(class="token string">"%s"class="token punctuation">, class="token operator">&userclass="token punctuation">.nameclass="token punctuation">)class="token punctuation">;
		class="token function">printfclass="token punctuation">(class="token string">"password : "class="token punctuation">)class="token punctuation">;
		class="token function">fflushclass="token punctuation">(class="token constant">stdinclass="token punctuation">)class="token punctuation">;
		class="token function">get_passwoedclass="token punctuation">(userclass="token punctuation">.passwordclass="token punctuation">)class="token punctuation">;
		class="token keyword">if class="token punctuation">(class="token function">search_userclass="token punctuation">(user_listclass="token punctuation">, userclass="token punctuation">)class="token punctuation">)
		class="token punctuation">{ 
			class="token comment">/* 在用户文件中找到了输入用户 */
			class="token keyword">if class="token punctuation">(ADMIN class="token operator">== userclass="token punctuation">.levelclass="token punctuation">)
			class="token punctuation">{
				class="token function">admin_function_selectclass="token punctuation">(class="token operator">&user_listclass="token punctuation">, class="token operator">&stu_listclass="token punctuation">, user_pathclass="token punctuation">, stu_pathclass="token punctuation">)class="token punctuation">;
			class="token punctuation">}
			class="token keyword">else class="token keyword">if class="token punctuation">(NORMAL class="token operator">== userclass="token punctuation">.levelclass="token punctuation">)
			class="token punctuation">{
				class="token function">normal_function_selectclass="token punctuation">(stu_listclass="token punctuation">)class="token punctuation">;
			class="token punctuation">}
			class="token keyword">else
			class="token punctuation">{
				class="token function">printfclass="token punctuation">(class="token string">"user level error...\n"class="token punctuation">)class="token punctuation">;
			class="token punctuation">}
			class="token keyword">breakclass="token punctuation">;
		class="token punctuation">}
		class="token keyword">else
		class="token punctuation">{
			class="token function">printfclass="token punctuation">(class="token string">"Not found user!\n"class="token punctuation">)class="token punctuation">;
			class="token function">fflushclass="token punctuation">(class="token constant">stdinclass="token punctuation">)class="token punctuation">;
			class="token function">printfclass="token punctuation">(class="token string">"Please enter 'y' to login re-enter, or any other key to exit...\n"class="token punctuation">)class="token punctuation">;
			class="token keyword">if class="token punctuation">(class="token char">'y' class="token operator">!= class="token function">_getchclass="token punctuation">(class="token punctuation">)class="token punctuation">)
			class="token punctuation">{
				class="token keyword">breakclass="token punctuation">;
			class="token punctuation">}
		class="token punctuation">}
	class="token punctuation">}

	class="token comment">/*system("pause");*/
	class="token keyword">return class="token number">0class="token punctuation">;
class="token punctuation">}
code>
class="blog-extension-box">

http://www.niftyadmin.cn/n/231811.html

相关文章

剪枝与重参第八课:ACNet、DBB、RepVGG重参

目录ACNet、DBB、RepVGG重参前言1. 并行多分支结构1.1. 并行多分支结构 Demo2. ACNet2.1 ACNet简述2.2 init2.3 forward2.4 swtich to deploy2.5 get_equivalent_kernel_bias2.6 Conv2d与BN的融合(重参)2.7 Conv1x3Conv3x1Conv3x3的融合(重参)2.8 模型导出2.9 完整示例代码总结…

计算机网络 实验六

⭐计网实验专栏&#xff0c;欢迎订阅与关注&#xff01; ★观前提示&#xff1a;本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求&#xff0c;因此以下内容建议仅做思路参考。 一、实验目的 掌握以太网帧的格式及各字段的含义掌握IP包的组成格式及各字段的含义掌…

UML 简易使用教程

最近刚好有空&#xff0c;遂决定对应 UML 常用的一些图进行整理&#xff0c;供自己以及需要的人查阅。 UML 分为静态模型与动态模型。静态模型描述一个系统的静态特征&#xff0c;固定的框架结构。包括用例图、类图、对象图、组件图、部署图&#xff1b;动态模型包括时序图、协…

WPS关闭不了后台一直运行的解决办法(wpscloudsvr.exe)

问题描述 前几天&#xff0c;发现每次打开wps时机箱风扇就转得厉害&#xff0c;把WPS界面叉掉后&#xff0c;桌面的任务栏—就是桌面最下面得黑框框—显示Windows图标和时间日期的那个地方也没有WPS任务&#xff0c;但是机箱还是响的厉害&#xff0c;检查了任务管理器发现一直…

又一款 AI 应用开源了,让你的绘画作品动起来!

公众号关注 “GitHubDaily”设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01;2021 年的时候&#xff0c;Meta&#xff08;前身是 Facebook&#xff09;团队发布了一款非常有趣的 AI 工具&#xff0c;叫 Animated Drawings&#xff0c;它的牛逼之处&#xff0c;在于能借…

解析PHP语言goto混淆代码恢复代码顺序及可读性(js)

js解析php语言goto混淆完整实例,已经成功解析短小12KB的代码&#xff1b; 包括代码顺序恢复,后}补全,if反转等。耗费太多时间暂时放弃更新。 仅供恢复可读性用于安全分析和本js功能代码学习交流(很多语言chatgpt提供有学习价值) 不得用于非法目的&#xff0c;不得出售他人劳动…

蓝桥杯15单片机--超声波模块

目录 一、超声波工作原理 二、超声波电路图 三、程序设计 1-设计思路 2-具体实现 四、程序源码 一、超声波工作原理 超声波时间差测距原理超声波发射器向某一方向发射超声波&#xff0c;在发射时刻的同时开始计时&#xff0c;超声波在空气中传播&#xff0c;途中碰到障碍…

Linux复习 / 线程相关----线程互斥 QA梳理

文章目录前言线程互斥Q&#xff1a;什么是临界资源&#xff1f;临界区呢&#xff1f;Q&#xff1a;什么是互斥&#xff1f;Q&#xff1a;数据不一致的本质是什么&#xff1f;Q&#xff1a;用锁对共享资源进行保护的前提是&#xff1a;锁也要作为共享资源被其他线程使用。那么用…