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

一、前言

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


★★★项目详见本人gitee仓库,地址
https://gitee.com/omnipotent-brother/student-information-manage-system.git
★★★

二、项目介绍

开发环境

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

提供功能

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

登陆级别

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

配置文件

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

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

账户名 密码 登陆级别

student_cfg.txt

id 姓名 课程id 成绩 课程id 成绩 课程id 成绩 ...

三、项目展示

登陆界面
首先选择身份
学生信息管理系统(student information manage system, SIMS)_第1张图片
登录界面输入的账户名和密码应该是usrer_cfg.txt配置文件中存在的记录。
学生信息管理系统(student information manage system, SIMS)_第2张图片

功能选择界面。
学生信息管理系统(student information manage system, SIMS)_第3张图片

查询学生信息,查询方式选择界面。
学生信息管理系统(student information manage system, SIMS)_第4张图片
选择0,查询所有信息。
学生信息管理系统(student information manage system, SIMS)_第5张图片

四、项目经验分享

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

自定义数据结构

/* 
* 用户结构体 
*/
typedef struct user
{
	char name[NAME_LEN]; /* 用户名称 */
	char password[PASSWORD_LEN]; /* 用户密码 */
	int level; /* 权限级别 */
	struct user* next;
}user_t; 

/*
* 课程结构体
*/
typedef struct course
{
	int id; /* 课程号 */
	double score; /* 成绩,尽量使用double,float容易失真 */
}course_t;

/*
* 学生结构体
*/
typedef struct student
{
	int id;
	char name[NAME_LEN];
	course_t course[COURSE_NUM];
	struct student* next;
}student_t;

/*
* 账户级别:admin管理员账户,normal普通账户
*/
enum{ADMIN = 0, NORMAL}; 
#define LEGAL_LEVEL(level) ((ADMIN == level) || \
							(NORMAL == level))

/*
* 通过断言判定是否合法,即是否在enum枚举范围内
*/
#ifdef USE_FULL_ASSERT
void assert_failed(unsigned char* file, unsigned int line);
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((unsigned char *)__FILE__, __LINE__))
#else
#define assert_param(expr) ((void)0)
#endif

主程序

#define USE_FULL_ASSERT

#include "sims.h"

int main(char* argv[], int argc)
{
	int option = 0; /* 用于记录用户选项 */
	student_t* stu_list = NULL;
	user_t* user_list = NULL;
	user_t user;
	memset(&user, 0, sizeof(user));

	FILE* fp = fopen("E:\\project\\c\\my_sims\\configure.txt", "r"); /* 打开配置文件 */
	fseek(fp, 0, SEEK_SET); /* 文件指针移至文件首 */
	char user_path[128] = "";
	char stu_path[128] = "";
	char str[128] = "";

	/* 获取配置文件信息 */
	fgets(str, sizeof(str), fp); /* 读取一行 */
	strncpy(user_path, str, strlen(str) - 1);  /* 不拷贝换行符 */
	memset(str, 0, sizeof(str)); /* 清空str防止脏数据 */
	fgets(str, sizeof(str), fp);
	if (str[strlen(str)] == '\n')
	{
		strncpy(stu_path, str, strlen(str) - 1); /* 如果有换行符,不拷贝换行符 */
	}
	else
	{
		strncpy(stu_path, str, strlen(str)); /* 无换行符全部拷贝 */
	}
	/*	测试打印
	printf("%zd\n", strlen(str));
	printf("user_path : %s\n", user_path);
	printf("stu_path : %s\n", stu_path);*/

	/* 系统初始化 */
	system_init(&user_list, &stu_list, user_path, stu_path);

	/* 主循环 */
	while (1)
	{
		system("cls");  /* 清屏 */
		menu_init();
		printf("Please enter your number: ");
		option = getchar() - '0';  /* 获取输入的字符并转为数字 */
		
		if (2 == option)
		{
			system_exit();
			return 0;
		}
		else if (LEGAL_LEVEL(option))
		{
			user.level = option;
		}
		else
		{
			fflush(stdin); /* 刷新输入缓冲区 */
			printf("Input error!\n");
			assert_param(LEGAL_LEVEL(option)); /* 使用断言打印位置 */
			printf("Press any key to re-enter...");
			_getch(); /* 接受任意字符后继续运行,getch()需要按Enter键才能继续运行 */
			continue;
		}

		system("cls");
		printf("Please enter the user name and password...\n");
		printf("user name: ");
		scanf("%s", &user.name);
		printf("password : ");
		fflush(stdin);
		get_passwoed(user.password);
		if (search_user(user_list, user))
		{ 
			/* 在用户文件中找到了输入用户 */
			if (ADMIN == user.level)
			{
				admin_function_select(&user_list, &stu_list, user_path, stu_path);
			}
			else if (NORMAL == user.level)
			{
				normal_function_select(stu_list);
			}
			else
			{
				printf("user level error...\n");
			}
			break;
		}
		else
		{
			printf("Not found user!\n");
			fflush(stdin);
			printf("Please enter 'y' to login re-enter, or any other key to exit...\n");
			if ('y' != _getch())
			{
				break;
			}
		}
	}

	/*system("pause");*/
	return 0;
}

你可能感兴趣的:(项目实战,git,github,gitee,c,信息管理系统)