博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FTP文件管理项目(本地云)项目日报(二)
阅读量:1983 次
发布时间:2019-04-27

本文共 10777 字,大约阅读时间需要 35 分钟。

文章目录

今天我们的“本地云”练手项目开工第二天,总结了前一天大家的反应,来记录个日报。

前一日日报汇总

先来汇总一下前一个工作日大家的日报情况:

号码牌 日报
1号 (组长) https://blog.csdn.net/qq_43762191/article/details/106803860
2号 https://blog.csdn.net/qq_45792305/article/details/106821952
3号 https://blog.csdn.net/blackcamouflage/article/details/106815639
4号 https://blog.csdn.net/luyaozhima/article/details/106807415
5号 https://blog.csdn.net/jxy0219/article/details/106818773
6号 https://blog.csdn.net/weixin_44784684/article/details/106819508
7号 已失联
8号(组长) https://blog.csdn.net/qq_42151344/article/details/106819026
9号 https://blog.csdn.net/qq_46485161/article/details/106819291

总结:说实话呢,还是有上心的人。

昨日计划任务完成情况

完成

今日规划

需求分析。

实际计划

需求分析,项目整体框架设计,数据库设计与实现

完成情况:

整体框架(这种还是比较喜欢手绘,虽然字不好看,但是手写就是有种不一样的感觉)

在这里插入图片描述
数据库设计(我觉得这个项目两个表就够了)
在这里插入图片描述


数据库板块设计:

在这里插入图片描述整个模块只开放数据库操作类的接口。

数据库实现:

初代代码

//DB_base.h#ifndef DB_BASE_H#define DB_BASE_H#include
#include
#include
#include
#include
#include
using namespace std;//数据库单例class DB_base{public: static DB_base* instence(char* name);//获取数据库单例 /*对查询结果进行操作*/ //这三条函数都可以做公用 int return_serch_num(char* sql);//返回查询记录数 int ireturn_serch(char* sql);//获取查询结果(单一结果) char* creturn_serch(char* sql);//获取查询结果(单一结果) bool excute(char* sql);private: DB_base(char* name); ~DB_base(); static DB_base* My_DB;//实例 static sqlite3* db;//数据库文件句柄};#endif
//DB_base.cpp#include "DB_base.h"#include 
#include
DB_base* DB_base::My_DB = NULL;sqlite3* DB_base::db = NULL;//我只有一个数据库,所以不用传入名字了DB_base::DB_base(char* name) //打开数据库{ int rc = sqlite3_open(name, &db); if (rc != SQLITE_OK) { printf("%s", sqlite3_errmsg(db)); exit(0); }}DB_base::~DB_base(){ sqlite3_close(db);}DB_base* DB_base::instence(char* name){ if (!My_DB) { My_DB = new DB_base(name); } return My_DB;}bool DB_base::excute(char* order) //这个用来传创建表的语句{ int nRow, nColumn; int rc; char* errMsg; char** dbResult; //执行SQL语句 rc = sqlite3_get_table(db, order, &dbResult, &nRow, &nColumn, &errMsg); //判断是否成功 if (rc != SQLITE_OK){ printf("%s", sqlite3_errmsg(db)); return false; } else return true;}//对查询结果进行操作int DB_base::return_serch_num(char* sql){ int rc, num; char* errMsg; char** dbResult; int nRow = 0, nColumn = 0; rc = sqlite3_get_table(db, sql, &dbResult, &nRow, &nColumn, &errMsg); if (rc == SQLITE_OK) { num = nRow; return num; } else return 0;}int DB_base::ireturn_serch(char* sql){ char* errMsg; char** dbResult; int nRow = 0, nColumn = 0; int rc; int result; rc = sqlite3_get_table(db, sql, &dbResult, &nRow, &nColumn, &errMsg); if (rc == SQLITE_OK) { result = atoi(dbResult[nColumn]); sqlite3_free_table(dbResult); return result; } else return 0;}char* DB_base::creturn_serch(char* sql){ char* errMsg; char** dbResult; int nRow = 0, nColumn = 0; int rc; rc = sqlite3_get_table(db, sql, &dbResult, &nRow, &nColumn, &errMsg); if (rc == SQLITE_OK) { return dbResult[nColumn]; } else return NULL;}
//DB_init.h#include"DB_base.h"class DB_init{private:	DB_base* My_DB;	void DB_create();	void table_create();public:	void commmand();};
//DB_init.cpp#include "DB_init.h"void DB_init::DB_create() {	char* name = new char[10];	sprintf(name, "FTP.db");	My_DB = DB_base::instence(name);	delete name;}void DB_init::table_create() {	char* sql = new char[120];	sprintf(sql, "select count(*) from sqlite_master where type = 'table' and name = 'UserMsg'");	if (!My_DB->ireturn_serch(sql))	{		sprintf(sql, "create table UserMsg(id int primary key,pwd int,tel text,dir_id int)");		My_DB->excute(sql);		sprintf(sql, "create table FileMsg(file_name text primary key,owner_id int,mode int,dir_id int,file_id int)");		My_DB->excute(sql);		sprintf(sql, "insert into UserMsg values(100000,123456,'18039027069',1)");		My_DB->excute(sql);		sprintf(sql, "create table DirMsg(dir_id int primary key,dir_name text,grade int,owner_id int)");		My_DB->excute(sql);	}		delete sql;}void DB_init::commmand() {	DB_create();	table_create();}
//DB_command.h#include"DB_init.h"class DB_command{private:	DB_base* My_DB;public:	DB_command();	//增	bool add_user(int id,int pwd,char* tel);	bool add_file(char* file_name,int owner_id,int mode,int dir_id);	bool add_list(int id,int pwd,int father_dir,char* dir_name);		//删	bool del_user(int user_id,int pwd);	bool del_file(int user_id,int pwd,char* file_name);	bool del_list(int user_id,int pwd,int dir_id);		//查	bool login(int user_id,int pwd);	int pwd(int user_id,char* tel);	void file_list(int user_id,int pwd,int dir_id, char* ret);    bool download(int user_id,int pwd,char* file_name);    	//改	bool cpwd(int user_id, int old_pwd, int new_id);	bool cfile_addr(int user_id,int pwd,char* file_name, int old_dir, int new_dir);	bool cmode(int user_id,int pwd,char* file_name, int new_mode);};
//DB_command.cpp#include "DB_command.h"DB_command::DB_command() {	DB_init* init = new DB_init();	init->commmand();	delete init;	char* name = new char[10];	sprintf(name, "FTP.db");	My_DB = DB_base::instence(name);	delete name;}//增bool DB_command::add_user(int id, int pwd, char* tel) {	//先查一下该用户是否已存在	char* sql = new char[120];	int ret = 0;	sprintf(sql, "select pwd from UserMsg where id = %d", id);	if (int a = My_DB->return_serch_num(sql) == 1) {		cout << "user already in" << endl;	}	else {	//查询目录id使用情况		sprintf(sql, "select max(dir_id) from Dir_Msg");		int max = My_DB->ireturn_serch(sql) + 1;		sprintf(sql, "insert into UserMsg values(%d,%d,%s,%d)", id, pwd, tel, max);	    ret = My_DB->excute(sql);	}	delete sql;	return ret;}bool DB_command::add_file(char* file_name, int owner_id, int mode, int dir_id) {	//先确定目录是否有问题	char* sql = new char[120];	int ret = 0;	sprintf(sql, "select owner_id from Dir_Msg where dir_id = %d", dir_id);	if (My_DB->return_serch_num(sql)) {		//再对文件id进行安排		sprintf(sql, "select max(file_id) from File_Msg where dir_id = %d", dir_id);		int file_id = My_DB->ireturn_serch(sql) + 1;		//之后将文件数据写入		sprintf(sql, "insert into FileMsg values(%s,%d,%d,%d,%d)", file_name, owner_id, mode, dir_id, file_id);		ret = My_DB->excute(sql);	}	else {		cout << "dir is not exit" << endl;	}	delete sql;	return ret;}bool DB_command::add_list(int id, int pwd, int father_dir, char* dir_name) {	// 先确定目录是否有问题	char* sql = new char[120];	int ret = 0;	sprintf(sql, "select owner_id from Dir_Msg where dir_name = %s", dir_name);	if (My_DB->return_serch_num(sql)) {		cout << "dir is exit" << endl;	}	else {		//生成新目录		sprintf(sql, "select dir_grade from Dir_Msg where dir_id = %d",father_dir);		int dir_grade = My_DB->ireturn_serch(sql) + 1;		sprintf(sql, "select max(dir_id) from Dir_Msg");		int dir_id = My_DB->ireturn_serch(sql) + 1;		sprintf(sql, "insert into DirMsg values(%d,%s,%d,%d)",dir_id, dir_name,dir_grade,id);		ret = My_DB->excute(sql);	}	delete sql;	return ret;}//删bool DB_command::del_user(int user_id,int pwd) {	char* sql = new char[120];	sprintf(sql, "delete from FileMsg where owner_id = %d and pwd = %d", user_id,pwd);	int ret = My_DB->excute(sql);	if (ret) {		sprintf(sql, "delete from UserMsg where id = %d", user_id);		ret = My_DB->excute(sql);	}	delete sql;	return ret;}bool DB_command::del_file(int user_id, int pwd, char* file_name) {	if (login(user_id, pwd)) {		char* sql = new char[120];		sprintf(sql, "delete from FileMsg where user_id = %d and file_name = %s", user_id, file_name);		int ret = My_DB->excute(sql);		delete sql;		return ret;	}	else {		cout << "del file defeat" << endl;		return false;	}}bool DB_command::del_list(int user_id, int pwd, int dir_id) {	if (login(user_id, pwd)) {		char* sql = new char[120];		sprintf(sql, "delete from FileMsg where user_id = %d and dir_id = %d", user_id, dir_id);		int ret = My_DB->excute(sql);		if (ret) {			sprintf(sql, "delete from DirMsg where dir_grade = %d", dir_id);			ret = My_DB->return_serch_num(sql);			if (ret) {				cout << "there still some file under this dir" << endl;			}			else {				sprintf(sql, "delete from DirMsg where dir_id = %d", dir_id);				ret = My_DB->excute(sql);			}			}		else {			cout << "del dir defeat" << endl;		}		delete sql;		return ret;	}	else {		cout << "del dir defeat" << endl;		return false;	}}//查bool DB_command::login(int user_id, int pwd) {	char* sql = new char[120];	sprintf(sql, "select pwd from UserMsg where id = %d", user_id);	int ret = My_DB->ireturn_serch(sql);	delete sql;	if (pwd == ret)		return true;	else		return false;}int DB_command::pwd(int user_id, char* tel) {	char* sql = new char[120];	sprintf(sql, "select pwd from UserMsg where id = %d and tel = %s", user_id,tel);	int ret = My_DB->ireturn_serch(sql);	delete sql;	return ret;}void DB_command::file_list(int user_id, int pwd, int dir_id, char* ret){	if (login(user_id, pwd)) {		char* sql = new char[120];		sprintf(sql, "select file_name from FileMsg where owner_id = %d and dir_id = %d", user_id, dir_id);		ret = My_DB->creturn_serch(sql);		sprintf(sql, "select dir_name from DirMsg where dir_grade = %d",dir_id);		strcpy(ret, My_DB->creturn_serch(sql));		delete sql;	}	else 		cout << "can't get file list" << endl;}bool DB_command::download(int user_id, int pwd, char* file_name) {	if (login(user_id, pwd)) {		char* sql = new char[120];		sprintf(sql, "select file_id from File_Msg where file_name = %s", file_name);		int ret = My_DB->ireturn_serch(sql);		delete sql;		return ret;	}	else {		cout << "del defeat" << endl;		return false;	}}//改bool DB_command::cpwd(int user_id, int old_pwd, int new_id) {	char* sql = new char[120];	sprintf(sql, "update UserMsg set pwd = %d where id = %d and pwd = %d", user_id, old_pwd, new_id);	int ret = My_DB->excute(sql);	delete sql;	return ret;}bool DB_command::cfile_addr(int user_id, int pwd, char* file_name, int old_dir, int new_dir) {	//修改目录前,先判断目标目录是否存在	if (login(user_id, pwd)) {		char* sql = new char[120];		sprintf(sql, "select owner_id from Dir_Msg where dir_id = %d", new_dir);		int id = My_DB->ireturn_serch(sql);		int ret = 0;		if (user_id == id) {			sprintf(sql, "update FileMsg set dir_id = %d where owner_id = %d and dir_id = %d and file_name = %s", new_dir, user_id, old_dir, file_name);		    ret = My_DB->excute(sql);		}		else {			cout << "aim dir is not exit" << endl;		}		delete sql;		return false;	}	else {		cout << "del dir defeat" << endl;		return false;	}}bool DB_command::cmode(int user_id, int pwd, char* file_name, int new_mode){	//确定文件是不是他的	if (login(user_id, pwd)) {		char* sql = new char[120];		sprintf(sql, "update FileMsg set mode = %d where owner_id = %d and file_name = %d", new_mode, user_id, file_name);		int ret = My_DB->excute(sql);		delete sql;		return ret;	}	else {		cout << "have no mode to change mode" << endl;		return false;	}}

下午做一个测试类来进行对数据库模块的测试,为什么要对每个类进行测试我在

这篇博客里讲的清楚了。

在这里插入图片描述

你可能感兴趣的文章
nginx访问控制、基于用户认证、https配置
查看>>
SaltStack
查看>>
linux内存的寻址方式
查看>>
how2heap-double free
查看>>
how2heap-fastbin_dup_consolidate
查看>>
orw_shellcode_模板
查看>>
fmt在bss段(neepusec_easy_format)
查看>>
python 函数式编程
查看>>
tensorflow 数据格式
查看>>
tf keras SimpleRNN源码解析
查看>>
tf keras Dense源码解析
查看>>
keras、tf、numpy实现logloss对比
查看>>
MyBatisPlus简单入门(SpringBoot)
查看>>
攻防世界web进阶PHP2详解
查看>>
攻防世界web进阶区web2详解
查看>>
xss-labs详解(上)1-10
查看>>
xss-labs详解(下)11-20
查看>>
攻防世界web进阶区ics-05详解
查看>>
攻防世界web进阶区ics-04详解
查看>>
sql注入总结学习
查看>>