学生信息管理系统
想起来好久没写博客了,最近的一段时间是我们学校的小学期,由于忙着设计这个项目(虽然很菜),所以没怎么刷题,博客也咕咕咕了好久
今天基本把所有的问题都处理了,所以我打算写一篇总结博客,总结一下写项目中遇到的坑。
先看看效果:
那么直接进入正题:
首先我是用的IDE是:VS2019(Visual Studio 2019)
开发用到了 easyx图形库(毕竟是一个UI程序嘛)
开发环境是Windows10 版本号是1909
然后采用了多文件编程(就是一个嘘头而已)
我先用多文件的思路,最后再把整个完整的代码放出来,只想看单文件编程的请跳过
首先写程序要先梳理思路,先要思考要实现什么功能,这点是很重要的,有什么想法可以先写下来,
就算后面实际写代码的时候不好实现,不写就行(能去查资料还是尽量查资料)
需求分析:
这是我的需求:
当然这些所谓的功能其实后面用一个函数就能实现一个功能,我喜欢在完成这些功能后打上√
然后开始分析我们需要写一个学生端,然后写一个教师端
登录和注册是两个端都共有的,所以我们发现可以写份分文件和一个主要的.cpp文件(当然如果是C语言的话,就是.c 后面同上)
由于代码比较长,我就不逐一解释。
先说.h文件里面存放的是结构体/类的还有该.h文件对应的.cpp文件里面的函数声明(注意只是声明!!!)
.h对应的.c文件里面放的是.h里面的声明的函数内容(可能有点绕,请理解)
注意1:所有的结构体或者什么声明只能定义一次,其他的文件想使用的话,直接#include"XXX.h"(包含需要使用的定义的头文件)
注意2: 如果你在引用头文件的时候遇到了头文件重定义问题,你可以使用#ifndef/#define/#endif 操作方法:传送门
我们先来看公共部分的分文件操作:
MAIN.h:
#pragma once #include<cstdio> #include"hstudent.h" #include"hteacher.h" #include"MAIN.h" extern class List1* L1;//第一个学生 extern class List2* L2;//第一个老师 extern SYSTEMTIME st; extern int X , Y ;//X:界面宽度 Y界面高度 extern int randnum; extern HWND HD; extern char qiandaoyuji[][50]; class List1* add_stu(class student* p, class List1* L);//学生信息添加 名字,学号,初始化学生信息 class List2* add_tea(class teacher* p, class List2* L);//初始化老师信息 int find_ID(class student* p1, class teacher* p2, class List1* L_1, class List2* L_2); bool save1(List1* p1);//学生文件存储函数 bool save2(List2* p2);//教师文件存储函数 void read(class List1* p1, class List2* p2);//文件读取函数 void Pregister();//注册 void Plog();//登录 void PMAIN();//主界面
存放的就是函数和结构体还有一些全局变量的引用
MAIN.cpp:
#pragma once #include<easyx.h> #include<graphics.h> #include<cstdio> #include<iostream> #include<windows.h> #include<cstring> #include<conio.h> #include<vector> #include<queue> #include<algorithm> #include <atlstr.h> #include<ctime> #include"hstudent.h" #include"hteacher.h" #include"MAIN.h" #pragma comment(lib,"Winmm.lib") using namespace std; List1* add_stu(student* p, List1* L)//学生信息添加 名字,学号,初始化学生信息 { student* temp = (student*)malloc(sizeof(student)); ::memset(temp, 0, sizeof(temp)); ::memset(temp->Data.cfxinxi.name, 0, sizeof(temp->Data.cfxinxi.name)); ::memset(temp->Data.hjxinxi.name, 0, sizeof(temp->Data.hjxinxi.name)); ::memset(&temp->Data.all_kemu, 0, sizeof(temp->Data.all_kemu)); ::memset(temp->Data.kebiao, 0, sizeof(temp->Data.kebiao)); temp->Data.cfxinxi.loc = 0; temp->Data.all_kemu.score = 0; temp->next = NULL; temp->Data.hjxinxi.loc = 0;//获奖 temp->Data.lastqiandao = p->Data.lastqiandao;//签到信息,每次登录都会重新置为0,别问为什么,问就是不会实时更新。°(°¯᷄◠¯᷅°)°。 GetLocalTime(&st); if (temp->Data.lastqiandao == (st.wYear * 365 + st.wMonth * 30 + st.wDay)) { temp->Data.qiandao = 1; } else { temp->Data.qiandao = 0; } if (*p->Data.ID != '