| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4543 人关注过本帖, 6 人收藏
标题:【解剖麻雀】通过一道小型课题解答一些常见问题
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用洛克菲勒在2015-1-5 20:02:54的发言:

求完整代码,在拉到VS上面实现的过程中遇到了几个头文件显示无效的情况,大神教教怎么破?

这里我没放全部代码,当然缺少一些东西。待会我上传整个项目文件吧。

授人以渔,不授人以鱼。
2015-01-06 09:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
下面介绍一下多文件项目的编制。

在我这个程序中,使用了多个文件,包括头文件(.h)和源代码文件(.cpp),首先看看项目怎么建立,见下图:
图片附件: 游客没有浏览图片的权限,请 登录注册


从图中可见,有两个部分:一是“头文件”,里面有3个.h文件,我们可以自己写,也可以引入现有的文件,操作方法是在“头文件”处点鼠标右键,选【添加】,按提示做;二是“源文件”部分,操作与前相似。

这两部分的作用是不一样的。.h文件,就是我们平常#include的东西,它是一份《目录》,告诉我们对应的源文件都可以使用哪些类型、数据和函数,只是一份清单,没有具体实现代码的;.cpp文件,才是具体实现功能的代码文件,它包含.h中列出的函数实现函数,也包含没有列出的类型、数据和函数,没有在.h中列出的东西,都是这个.cpp文件自己才可见的(这就是所谓的静态数据、静态函数),相当于独立隐藏的东西(在我的这个项目中,就有这样的东西)。

项目这样构建之后,其实还存在一个问题,就是如果某些.h或.cpp不在项目当前的目录中,怎么让编译器找它们?方法是这样,在项目的“属性”菜单中设置,见下图:
图片附件: 游客没有浏览图片的权限,请 登录注册

在这里选中的位置,点下拉框,编辑,新建,指定文件所在的文件夹。这个操作,实际上就是向系统搜索路径(PATH)添加了一条路径,编译器在搜索文件时,如果当前目录中找不到需要的文件,就会到这些列出的文件夹中找(你指定有多少条路径,就找多少个文件夹),实在找不到,才会报错。设定这个之后,就可以Build项目了。这个东西,在命令行环境中,就是下面的指令:
SET PATH=%PATH%;D:\MyTools1;D:\MyTools2
这个命令,在现有的文件搜索路径(%PATH%))添加2个目录,D:\MyTools1和D:\MyTools2。

下面是这个项目的完整压缩包:
学生成绩管理.zip (402.54 KB)



[ 本帖最后由 TonyDeng 于 2015-1-6 09:50 编辑 ]

授人以渔,不授人以鱼。
2015-01-06 09:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
现在回头看14楼:Student.cpp中,有几个函数,如AverageScore()、CopyStudent()、SwapStudent(),都是在头文件Student.h中没有列出的,那么当你试图在别的.cpp模块如main.cpp中使用这些函数时,就会编译出错,报告没有这样的函数,如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册

Student.cpp中的数据结构SexItem类型,也是这般,别的模块用不到,只有在这个模块内部可用。

这就是C语言模仿C++类封装的办法!那些函数和数据类型,相当于C++ class中的private部分,只有列出在.h中的,才是public的。这也是C/C++划分.h的作用。

授人以渔,不授人以鱼。
2015-01-06 11:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
现在我把项目修改一下,封闭了某些源代码的开放,改用静态库提供链接,即只让你看到.h头文件,但看不到它是如何实现的.cpp。换句话说,我以后不会再公开某些工具是如何实现的了,但你可以用。

学生成绩管理.zip (594.94 KB)



这个版本的程序新加了一个库MyConsole,可以看到这次运行程序的cmd窗口有了颜色,并且窗口的尺寸增大了(40行128列的),窗口的标题栏文字也是定制的。效果图如下:
图片附件: 游客没有浏览图片的权限,请 登录注册


往后,将在这个基础上做出用户友好的界面,是传统TC/BC的显示方式,即“直接写屏”的模式,显示文字和信息,光标是不用动的,显示速度飞快。


[ 本帖最后由 TonyDeng 于 2015-1-6 16:09 编辑 ]

授人以渔,不授人以鱼。
2015-01-06 15:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用qianlimian在2015-1-18 15:37:39的发言:

请问那三个txt文件放在工程的哪个位置??

放在Data文件夹中,源代码有显示。

授人以渔,不授人以鱼。
2015-01-18 20:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用qianlimian在2015-1-19 08:43:12的发言:

我想知道程序是怎么知道txt文件在Data文件夹中的,是不是如果我自己写个txt文件的处理程序,也需要建个data文件夹,然后将待处理的txt文件放进去?谢谢回答。

你看我main.cpp中的Init()函数:
程序代码:
// 载入磁盘数据
bool Init(void)
{
    if (!LoadColleges("Data\\CodeInfo.TXT", &Colleges) || !LoadSex("Data\\SexInfo.TXT") || !LoadStudents("Data\\StudentInfo.TXT", &Students))
    {
        Pause("\nPress any key to continue...");
        return false;
    }

    return true;
}


其中文件名是带路径的,Data\CodeInfo.txt,表示CodeInfo.txt位于当前目录的Data子文件夹下,而当前目录是程序(编译后发布的.exe文件)所在的文件夹。你可以不建子文件夹,但建文件夹是为了(文件)档案管理的条理化,我把所有外部数据文档(其实这些文件就是数据库系统的文档)都存放在这个文件夹中。


[ 本帖最后由 TonyDeng 于 2015-1-19 21:03 编辑 ]

授人以渔,不授人以鱼。
2015-01-19 21:01
快速回复:【解剖麻雀】通过一道小型课题解答一些常见问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015026 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved