# CPracticum **Repository Path**: Cerbur/CPracticum ## Basic Information - **Project Name**: CPracticum - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 开发者手册 ## 前言 大体结构已经完成,所以需要的便是书写模块。但首先我们先介绍,你在写模块前必须要了解的所有内容。 ## 必须了解 ### 关于头文件 1. include只能include头文件即以.h结尾的文件,不准include C文件即.c结尾的文件 2. 函数的声明写在头文件中,具体的实现写在对应的c文件 这里举个例子 ```c //这是一个头文件 utils.h #ifndef HEADER_Utils //这些是头文件的实现规范无需了解 #define HEADER_Utils void toString(); //这是函数的声明 void _1(); void _2(); //所有的声明写在头文件的endif之上 #endif //以下是头文件对应的实现c文件即 utils.c #include "utils.h" //首先include对应的头文件 #incldue // incldue 中" "引用的是自定义的头文件< >引用的是标准库中的头文件 void toString(){ //函数名一致就对应头文件声明的函数的具体实现 printf("c语言课设"); } void _1() { } void _2() { } ``` 使用头文件是为了防止c语言因为嵌套include造成的问题,为此我们的实体即结构体也写在头文件之中,这里我们写在了model.h中 ```c #ifndef HEADER_Model #define HEADER_Model #define String char* /** * 失物的实体类 * Cerbur */ typedef struct LostProperty { String name; //失物的名称 如果是校园卡/一卡通输入1 不是校园卡输入名称 String description; //失物的描述 String contact_details; //联系方式 String submit_user_schoolId; //提交者的schoolId String submit_user; //提交者的username String submit_time; //提交的时间 int status; //状态 1-已经找回,0未领取 } LostProperty; #endif ``` ### 关于utils.h你必须要了解的 为了开发方便,给你们封装了几个非常好用的函数 ```c /** * 获取一个输入的int数字 * @param num 传入的需要赋值int类型指针 * @param msg 输入前需要打印的信息 * @return OK NO */ Status putInt(int* num,char* msg); /** * 获取一个输入的char字符 * @param c 传入的需要赋值char类型指针 * @param msg 输入前需要打印的信息 * @return OK NO */ Status putChar(char* c,char* msg); /** * 获取一个输入的字符串 * @param string 传入的需要赋值char类型指针 * @param msg 输入前需要打印的信息 * @return OK NO */ Status putString(char* string,char* msg); ``` 这三个函数是用来输入数据的,比如说我们希望获取用户输入一个int类型的数字 ```c int a; //定义一个int类型的数字 putInt(&a,"你希望提示的内容:"); ``` 第一个参数是取a的地址,记住这个用法就可以了,第二个参数是""一个你需要提示的词,这个函数的效果就会输出一个这样的东西 ``` 你希望提示的内容:[这里将让用户输入] ``` 注: 字符串因为特殊,我们定义一个char数组,然后直接传入就可以了如下 ```c char a[50]; putString(a,"输入你要输入的字符串"); ``` utils中还有一个确认函数的封装 ``` Status confirmInput(); /* * 当你调用到这个函数时,他会输出一个让用户输入Y/N进行确认的函数 * 当用户输入Y的时候,这个函数会return 1,输入N的时候会return 0 * 我们只需要对return的这个数字进行判断,来决定我们是否需要进行下一步操作 */ ``` ```c /** * 比较两个字符串是否相等 */ Status equalsString(char* string1,char* string2); //你只需要传入两个字符串即可直接确定他们是否相同 例如 int a = equalsString("张远程","帅"); //这里a会等于0 int b = equalsString("张远程","张远程"); //这里b会等于1 ``` 以上就是我们开发的时候可能会常用到的几个功能,使用我们进行了封装. ### userinfo.txt 和 lostinfo.txt是如何存放信息的 #### userinfo.txt 这个文件存放的是用户的信息 ```txt 3118007450 123456 张远程 2 311800745 123456 Cerbur 1 3118007451 123456 cerbur 1 ``` 每个信息以空格隔开,一行即一个用户的信息 1. 学号/唯一标识符 2. 账号密码 3. 用户名 4. 管理员标识,不同用户为1,管理员用户为2 #### lostinfo.txt 这个文件存放的是失物的信息 ```txt 校园卡 3118007450 12354685956 311565456 sadfcs 2020-4-19-3:3 0 ``` 1. 失物的名字 2. 失物的描述 3. 发布者的联系方式 4. 发布者的学号 5. 发布者的名字 6. 发布的时间 7. 是否有人认领 1表示有人认领, 0表示无人认领.