第二次毕业设计任务书
1.第二阶段中的每周具体任务如下:
计划安排时间 | 计划完成内容 | 是否完成 |
2017.03.11~2017.04.14(4-8周) |
1.继续学习相关内容,并实际用到开发环境中去编写测试代码; 2.把核心代码写好; 3.并开始准备毕业论文; |
进行中 |
第四周 |
查阅相关获取系统信息状态的API,编写出一个基于控制台的简单查看系统各种状态信息的程序。 | 完成 |
第五周 |
扩展基本功能,不仅是局限于获取系统信息,比如有网的情况下通过调用API获取天气的信息数据等。 |
待完成 |
第六周 |
研究图形化界面的编写,把相应功能用GUI界面显示。 |
待完成 |
第七周 | 继续上周的内容,研究图形化界面显示信息。(因为难度就在这里,动态实时显示数据信息之类的) | 待完成 |
第八周 |
1.继续编写代码 2.开始准备毕业论文 |
待完成 |
2.我的conky功能需求分析:
conky属于监测软件,要做到实时监测系统状态信息并反馈给用户,以便于实现系统的简单管理控制等,以下便是我暂时能想到要实现的功能:
基本功能设计:
1.显示 CPU 占用情况、磁盘容量、OS 版本号、日历、网络情况等等各类系统的信息。
2.估计会加上对数据库的操作,对一些信息的保存和读取,比如利用数据库来实现一些显示数据内容的更新。
3.联网操作,获取web端返回的信息处理并显示。比如显示天气数据就需要进行联网,这个得申请API(我在中国天气网里面申请过,但是现在还没结果,估计是不给我权限了,那后面要试试google的API)
4.最重要的是通过图形化界面展示(感觉此部分难度比较大,所以是我重点关注部分)。
以下便是功能关系图:
理想效果下的效果图(感觉很无奈啊,技术能力不是很高(¬_¬),到达这种效果估计跟登天一样,不过发上来解解馋):
3.代码及效果展示:
只贴出部分功能代码及效果实现图:
我暂时先用了2个比较简单的获取系统信息的例子。因为有一些实现起来比较困难我还在想办法解决(类似联网获取天气数据的情况,网络数据实时流量的检测等)
比如:
1.我想知道系统的时间,就可以根据下面的提供的函数和结构体变量进行获取:
1 typedef struct _SYSTEMTIME { //用来保存获取时间的结构体 2 WORDwYear; //年 3 WORDwMonth; //月 4 WORDwDay; //日 5 WORDwDayOfWeek; //周几 6 WORDwHour; //小时 24小时制 7 WORDwMinute; //分钟 8 WORDwSecond; //秒 9 WORDwMilliseconds;//毫秒 10 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; 11 12 SYSTEMTIME systime;//定义该结构体用来保存信息 13 14 GetLocalTime(&systime);//通过此函数获取本地当前时间
格式化输出想要现实的信息:
GetLocalTime(&systime); sprintf(szbuf, "\r%4d年%2d月%2d日%2d时%2d分%2d秒 周%d ", systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wSecond,systime.wDayOfWeek); cout<<szbuf;
效果截图:
2.我想了解电脑内存的使用情况该怎么办呢(如果不知道任务管理器可以显示或者电脑没装啥软件显示的呢)其实,我们也可以自己动手来写一个查看自己电脑内存使用情况的小demo。
通过上网查阅资料才发现统计系统内存使用情况是非常简单的,直接使用GlobalMemoryStatus函数进行查询就可以了,不过也同时需要一个结构体变量作为该函数的参数用作保存信息。
GlobalMemoryStatus函数:
1 void WINAPI GlobalMemoryStatus( 2 __out LPMEMORYSTATUS lpBuffe; //传入一个MEMORYSTATUS结构体变量 3 )
作为参数传入的结构体变量定义:
1 typedef struct _MEMORYSTATUS { //注释来自百度 有一些不太懂的 我也没专门查资料了解 因为没用到 2 DWORD dwLength; // MEMORYSTATUS结构的大小,用来供函数检测结构的版本。 3 DWORD dwMemoryLoad; // 内存使用率(已用内存的百分比) 4 DWORD dwTotalPhys; // 物理内存总量大小。 就是实际内存总量的大小 5 DWORD dwAvailPhys; // 可用物理内存大小。 6 DWORD dwTotalPageFile; // 交换文件总的大小。 不太懂是啥 我也没用到 7 DWORD dwAvailPageFile; // 交换文件中空闲部分大小。 还是不太懂 8 DWORD dwTotalVirtual; // 用户可用的地址空间 9 DWORD dwAvailVirtual; // 当前空闲的地址空间 10 } MEMORYSTATUS, *LPMEMORYSTATUS;
这个函数将信息保存到作为参数传入的MEMORYSTATUS类型的结构体中,然后通过MEMORYSTATUS结构体变量打印我们需要显示的信息内容:
//因为获取到的是字节数bytes 为了直观的显示 我定义了一个宏 #define MB (1024 * 1024) //2^20 MEMORYSTATUS memstat; GlobalMemoryStatus(&memstat); cout<<"当前内存使用率:\t"<<memstat.dwMemoryLoad<<"%"<<endl; cout<<"当前内存总大小:\t"<<memstat.dwTotalPhys / MB<<"MB"<<endl; cout<<"当前可用内存大小:\t"<<memstat.dwAvailPhys / MB<<"MB"<<endl; cout<<"当前已用内存大小:\t"<<(memstat.dwTotalPhys - memstat.dwAvailPhys) / MB<<"MB"<<endl;
效果截图:
4.心得与体会:
通过这周的学习和代码的编写,我发现只是获取系统信息还是挺简单的,不过要图形化并显示出来那就比较难了,我现在心里也没啥底,我也尽量把我想到的想实现的功能都加上去,不过我相信我还是能完成我自己给自己定的需求的。
5.参考文献:
前面这几个获取系统信息的还是挺简单的,当然我也是在网上参考其他人写的,他们才是真正的大神。