您的位置:首页 > 编程语言 > C语言/C++

学习实战一:学生信息管理系统

2013-09-11 16:24 387 查看
       之前说到过学习C++是受我姐夫的影响,他自己的工作是做手机游戏开发,我就问他做他那个工作要学习什么,他就跟我说熟悉C++,学C++。然后就这么踏上了学习C++之路。在问他怎么学的过程中,他提到过要我做一个学生信息管理系统。因为初学者知识积累不够,没有去学习windows相关的API,就做了一个控制台应用。

一、大致了解这个系统

        首先做功能介绍:因为没有开发经验,因此功能开发就是跟着自己的想法来的,自己想到了什么就做什么功能,也导致了后来天天想功能,吃饭睡觉都在想。

                                       1、在数据导入处理这块,该系统支持用户手动追加数据和直接使用数据文件的功能。具体看下图:

                                       


                                        导入默认数据就是可以直接使用已经处理好的数据文件,在这里本人不才,还只会使用.txt格式的文件,而且对于文件的排版格式有严格要求;追加输入                                           就是用户自己根据提示输入相关的数据,并且这里有两个小功能,一是用户输入的数据是直接存储到要导入默认数据的那个文件中的,也就是如果默认数                                  
     据的那个文件名叫做Information.txt,那么用户输入的数据 也会存储到那个文件中去的,这样就可以随着用户的输入而形成默认文件。另外一个功能是如                                          果默认文件中有某个同学的信息,那么在用户追加输入的时候是会提示不用重复输入的。

                                        2、信息查询功能。这个系统就是叫做学生信息管理系统,因而系统在信息查询这块应该要给力点。但也是由于没有开发经验,又是个初学者,因此我只                                           做两个功能,一个是基础查询,就是直接查询文件中学生总数,男女生数量;另外就是高级查询,就是根据用户输入的学生名字,输出学生的家庭住址,                                    
    学习成绩等相关信息。看图来了解下:

                                        


                                         运行图如上所示。而且也支持查询结果的导出功能,如果是基本查询就会导出学生总数,男女生数量。如果是高级查询,就可以导出学生的详细信息。

                                         效果图如下:

                                         


                                          上图便是查询结果的显示界面。

    系统的主要功能便是如上所示,功能是比较简单的。但是对于初学者的我来说,还是花了点时间的。

二、一些问题所在

1、感觉自己写的代码还是有些混乱的,因为不熟或者说没有接受一个系统的教学吧。在变量命名和函数结构上自我感觉是有些混乱的。文末会放上源代码。现在就先看看一些文件吧。

我写这个系统的时候想法是用C++的类,类继承的相关知识。因此首先看下头文件:

//sims.h
#include<iostream>
#include<map>
#include<string>
#include<fstream>
#include <utility>
#include "student.h"
#include <Windows.h>
//定义一个伙伴类,做学生人数的计数
/*class TotalMember
{
friend class simsBasic;
TotalMember():tNumber(0),tNumberMale(0),tNumberFemale(0){}
public:
std::size_t tNumber;
std::size_t tNumberMale;
std::size_t tNumberFemale;
};*/

//定义一个公有类
class studentInfor;
class sims
{
protected:
typedef std::map<std::string,studentInfor> Map;
typedef std::map<std::string,studentInfor>::iterator iter;
private:
void check_sexy(std::string);//判断性别的函数
int check_file(std::ifstream &);//定义一个打开文件的函数,用作检查输入文件
void readInfor(std::ifstream &);//定义一个读取文档的函数
void inputInfor();//定义一个手动输入文档的函数
void buildStruct();
void buildmap();//建立map容器
protected:
char check;
static int tNumber;//作为系统成员量的计数  需要默认定义为0,定义为static成员,可以方便计数,没有使用伙伴类那么麻烦
static int tNumberMale;//男生
static int tNumberFemale;//女生
SYSTEMTIME sTime;
//std::ofstream oFile;//定义一个输出对象,实现将输入的学生信息导出
//TotalMember *ptr;
std::ifstream infile;
studentInfor sInfor;
//static std::string sName;//学生姓名
//static std::string sGender;//学生性别
static Map mStudent;
public:
sims():check(1){}
//simsBasic();
public:
void search();
int showTotalMember();//输出学生总数的函数
void InitInformation();
};

//基本搜寻
class simsBasic:public sims
{
private:
std::ofstream ofile;
public:
void search();
void saveFile();//导出学生信息的函数
};
//高级搜寻
class simsAdvanced:public sims
{

private:
std::ofstream ofile;
public:
void search();
void saveFile(iter&);//导出学生信息的函数
};
从头文件可以看出还是比较混乱的,我自己感觉就是,呵呵。另外,从头文件中可以看出声明了几个static类型的变量,当时那几个变量是我用来做学生总数的计数的,当时在没有用静态变量的时候不能成功计数,因此考虑了用一个伙伴类来计数。后来看《C++primer》上的一些知识,就用上了static静态变量。
        可以看到,这里并没有学生信息,我把学生信息放到了另外一个文件中去了:

//student.h
class studentInfor
{
public:
std::string sName;
std::string sGender;
std::string sAddress;
std::string sTelNumber;
struct mark
{
double Math;
double English;
double Chinese;
double Total; //把成绩设置为int或double类型的话不能输入。这个不知道怎么解决
}sMarks;
};在这里,我也有困惑,就是如果sTelNumber的类型声明为int型的时候程序运行会出错,不知道是不是别的地方有问题。当时成绩那块直接用double型的时候又不能实现输入。而把sTelNumber声明为std::string 类型便没有问题,这里不知道是什么问题。留到以后来看吧。。。
三、总结

        这个小程序的功能大致就是这些,虽然简单,但是自己是用心去做了的,花了几天的时间,天天都在想这个事,呵呵。。

       源代码在此啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 开发经验
相关文章推荐