### C语言学生信息管理系统知识点解析 #### 一、系统概述 本系统主要针对学生的个人信息进行管理,涵盖了学生信息的录入、修改、删除、查询、统计以及打印等功能。这些功能非常适合初学者来学习如何使用C语言处理结构化数据,并通过文件进行持久化存储。 #### 二、系统设计与实现 ##### 1. 数据结构定义 - **定义学生信息结构体**: ```c struct student { long int num; // 学号 char name[20]; // 姓名 int age; // 年龄 char sex[4]; // 性别 char birthday[10]; // 出生年月 char address[30]; // 地址 long int tele_num; // 电话号码 char E_mail[20]; // 邮箱 struct student *next; // 指向下一个学生的指针 }; ``` - **定义全局变量**: - `TOTAL_NUM`: 统计当前已录入的学生数量。 - `head`: 指向链表头部的指针。 ##### 2. 主要函数实现 - **welcome()**: 显示欢迎界面。 - **mainmenu()**: 显示主菜单并根据用户选择执行相应功能。 - **record()**: 录入新的学生信息。 - **insert()**: 在链表中插入一个新节点。 - **display()**: 显示单个学生的信息。 - **displayAll()**: 打印所有学生的信息。 - **query()**: 查询学生信息。 - **query_by_num()**: 根据学号查询。 - **query_by_name()**: 根据姓名查询。 - **readData()**: 从文件中读取学生信息到内存中。 - **writeData()**: 将内存中的学生信息写入文件中。 - **freeAll()**: 释放所有学生节点占用的内存。 - **del()**: 删除指定学生的信息。 - **change()**: 修改学生信息。 - **devise()**: 辅助函数用于进行某些特定操作。 ##### 3. 用户认证机制 - 实现了简单的用户登录功能,用户名和密码均为`admin`。 - 登录失败三次后将退出程序。 ##### 4. 文件操作 - **文件路径**:`"c:\\student.txt"`。 - **读写模式**:使用二进制模式进行读写操作。 #### 三、具体功能实现 ##### 1. 录入学生信息 - 用户输入学生信息后,调用`record()`函数创建新的学生节点,并通过`insert()`函数将其添加到链表中。 - 为每个学生分配唯一编号。 ##### 2. 修改学生信息 - 用户通过`query()`函数选择需要修改的学生。 - 调用`change()`函数对指定学生的信息进行修改。 ##### 3. 删除学生信息 - 用户通过`query()`函数选择需要删除的学生。 - 调用`del()`函数删除指定学生的信息。 ##### 4. 查询学生信息 - 提供按学号或姓名查询的功能。 - 如果找到对应的学生,则显示其全部信息;否则提示未找到。 ##### 5. 打印所有学生信息 - 调用`displayAll()`函数遍历链表并显示所有学生的信息。 ##### 6. 保存与读取 - 在每次操作结束后自动调用`writeData()`函数保存最新的学生信息到文件中。 - 程序启动时调用`readData()`函数从文件加载学生信息。 #### 四、系统运行流程 1. 程序启动,显示欢迎界面。 2. 用户输入用户名和密码进行登录。 3. 登录成功后进入主菜单,用户可以选择录入、查询、修改、删除学生信息等操作。 4. 操作完成后,程序会自动保存数据到文件。 5. 用户可以重复进行操作直到选择退出系统。 #### 五、代码分析与优化建议 - **代码风格**:建议增加注释,提高代码可读性。 - **安全性**:增加对用户输入的校验,防止非法输入导致的问题。 - **性能优化**:在大量数据的情况下考虑使用更高效的数据结构(例如哈希表)来进行查询操作。 - **异常处理**:增强对文件操作错误的处理能力,确保程序在遇到问题时能够给出友好的提示并正常运行。
#include <malloc.h>
#include <string.h>
#include <io.h>
#define NULL 0
#define LEN sizeof(struct student)
#define FILE_DATA_PATH "c:\student.txt"
struct student
{
long int num;
char name[20];
int age;
char sex[4];
char birthday[10];
char address[30];
long int tele_num;
char E_mail[20];
struct student *next;
};
int TOTAL_NUM = 0;
struct student *head = NULL;
void welcome();
void mainmenu();
void record();
void insert(struct student *stu);
void display(struct student *stu);
void displayAll();
void query_by_num();
void query_by_name();
void readData();
void writeData();
void freeAll();
void del();
void change();
void devise(struct student *p);
int main()
{
char userName[9];
char userPWD[7];
int i;
welcome();
for(i = 0; i < 3; i++)
{
printf("\n管理员初始用户名和密码均为admin\n");
printf("请输入您的用户名:");
scanf("%s", userName);
printf("\n请输入您的密码:");
scanf("%s", userPWD);
if ((strcmp(userName,"admin")==0) && (strcmp(userPWD,"admin")==0))
{
//用户名和密码正确,显示主菜单
mainmenu();
break;
剩余16页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享TJA1050很好的技术资料.zip
- 技术资料分享TF应用很好的技术资料.zip
- 技术资料分享TF卡资料很好的技术资料.zip
- 综合实验课程设计-基于WFP(Windows Filter Platform)的个人防火墙系统 +C++项目源码+文档说明
- deepinIDE支持在mips64el架构下UOS专业版1031及以上版本安装
- 免费通讯库 6.0.1.0版本
- 基于paddle的命名实体识别的代码,契合飞桨平台环境
- springboot农产品报价系统(附源码+数据库)37300
- 利用pyqt6开发的一款桌面程序app-美颜商店
- 北航操作系统实验课和理论课的平时作业 +项目源码+文档说明+实验指导书