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

简介: 学生信息管理系统(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 成绩 ...

三、项目展示

登陆界面
首先选择身份

登录界面输入的账户名和密码应该是usrer_cfg.txt配置文件中存在的记录。

功能选择界面。

查询学生信息,查询方式选择界面。

选择0,查询所有信息。

四、项目经验分享

通过项目实战可以大大提升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;
}


相关文章
|
6天前
|
运维 Oracle 关系型数据库
LIS(全称Laboratory Information Management System)系统源码
LIS(全称Laboratory Information Management System),是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样本登录、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程,实现智能化、自动化和规范化管理。有助于提高实验室的整体管理水平,减少差错率,提高检验质量。
30 1
PAT (Advanced Level) Practice - 1039 Course List for Student(25 分)
PAT (Advanced Level) Practice - 1039 Course List for Student(25 分)
75 0
SSM 项目 Library Manager System
SSM 项目 Library Manager System
116 0
SSM 项目 Library Manager System
|
.NET Windows
BASP21 Pro User Guide
BASP21 Proは、Microsoft プラットフォームで使える純国産のユニバーサルコンポーネントです。 IISアプリケーションのようなサーバサイドだけでなくクライアントのソフトウエアからも 使うことができます。
1647 0
Fiori里创建task出现错误消息Contact your system administrator的处理
Fiori里创建task出现错误消息Contact your system administrator的处理
100 0
Fiori里创建task出现错误消息Contact your system administrator的处理
使用SAP C4C ABSL获得某个employee的manager的uuid
使用SAP C4C ABSL获得某个employee的manager的uuid
SAP Cloud for Customer的employee创建会自动生成Business partner
SAP Cloud for Customer的employee创建会自动生成Business partner
SAP Cloud for Customer的employee创建会自动生成Business partner
SAP Repository Information System查找Message ID的一个小技巧
SAP Repository Information System查找Message ID的一个小技巧
275 0
SAP Repository Information System查找Message ID的一个小技巧
通过实际的例子,介绍 SAP ABAP 里的 Repository Information System 的使用技巧
通过实际的例子,介绍 SAP ABAP 里的 Repository Information System 的使用技巧
通过实际的例子,介绍 SAP ABAP 里的 Repository Information System 的使用技巧
|
容器
Service order description modify and save
Service order description modify and save
102 0
Service order description modify and save