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

       之前说到过学习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 类型便没有问题,这里不知道是什么问题。留到以后来看吧。。。

三、总结

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

       源代码在此啦


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值