项目日记 | 基于Linux系统(sqlite3)的学校人员管理系统

提示:源码资源可以点击下列地址:

源码链接: linux学校人员管理系统

🛠软件流程图和软件需求(仅供参考)

(一) 软件流程图

请添加图片描述

(二) 软件需求

1)增加管理员 教师 学生 三种权限字段(0,1,2)
	0:管理员权限,可以操作所有的班级数据表
	1:教师权限,可以操作自己管理的那个班的数据表
	2:学生权限,只可以查看自己的数据,不能进行修改,删除,和新增
2)学生用户字段:学号(主键) 密码 姓名 年龄 性别 语文成绩 数学成绩 英语成绩
	语文,数学,英语:都只显示最新的成绩
3)管理员和教师:用户名 密码 权限(所能操作的数据表)
	student.db:CS123 CS456 CS789 ...
	0:CS123 CS456 CS789
	1:CS123
	2:CS123--> 对应学号的信息。

📕内容讲解

1、代码入口 main.c

代码解释
(一) 预处理部分
1、#include <stdio.h> 和 #include <stdlib.h>  作为最基本头文件不多做赘述
2、#include“login.h” 和 #include“init.h”分别是登入界面函数和初始化函数(下文会有介绍)
(二) 函数部分
system("clear");		// 操作shell语句 “clear”,实现清屏功能
DatabaseInit();			// 此函数为init.h的数据库初始化代码(下文会有解释)
LoginOption();			// 此函数为login.h的登入界面显示代码(下文会有解释)

2、登入界面部分

1)、数据库初始化部分 init

代码解释
(一) 预处理部分
1、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
2、#include <unistd.h> 是操作系统API头文件
3、#include <fcntl.h> 是unix标准通用的头文件		// 通常讲(2)和(3)两个头文件结合使用
4、 #include“init.h”是初始化函数(下文会有介绍)
(二) 函数部分
1、数据库信息初始化函数 void InitUserInformation()

int InitUserInformation();							// 函数声明
	
if(access("SMS.db",F_OK)==0)						// 查看当前文件夹下是否有有SMS.db文件
{
	printf("已经存在数据库,无需初始化配置\n");
	sleep(1);
}
else
{
	if(InitUserInformation()==-1)					// 没有对应的数据库文件就创建对应数据库文件,并且判断是否创建成功
	{
		printf("初始化配置失败\n");
	}
	else
	{
		printf("初始化配置成功\n");
	}
}
puts("请按Enter键进行下一步...");						// 优化界面
getchar();											// 等待接收字符
system("clear");
-------------------------------------------------------------------------------------------------------------------------------------------
2、数据库初始化接口(API)函数 int DatabaseInit()

 /*创建默认数据库*/
sqlite3 *db_point = NULL; 											// 定义一个sqlite3数据库连接对象指针    
int r = sqlite3_open("SMS.db",&db_point); 							// 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
if(r != SQLITE_OK)													// 判断是否创建成功
{
    perror("数据库创建失败");
    return -1; 														// 返回-1 ,表示初始化失败
}

/*执行创建用户并初始化默认用户语句*/

// SQL语句对象的原始SQL语句字符串
char *sql = "CREATE TABLE user(ip int(4) check(ip in(1,2,3)),		// 创建标题ip(权限)【int】,并且限定只能在{1,2,3}当中
							   uid varchar(8),						// 创建标题uid(用户id)【varchar】
							   upass varchar(8),					// 创建标题upass(用户密码)【varchar】
							   primary key(uid));"; 				// 将uid标题设置为主键
r = sqlite3_exec(db_point,sql,NULL,NULL,NULL);						// 执行对于的sql语句
if( r != SQLITE_OK )												// 判断是否执行成功
{
  printf("创建用户表格失败\n");
  return -1; 														// 返回-1 ,表示初始化失败
}
else
{
  printf("创建用户表格成功\n");
}

sql = "insert into user values(1,'admin','admin');"; 				// 向user表当中插入一个admin用户,密码admin,权限为1【最高】
r = sqlite3_exec(db_point,sql,NULL,NULL,NULL);						// 执行对于的sql语句
if( r != SQLITE_OK )												// 判断是否执行成功
{
  printf("初始化默认用户失败\n");
  return -1; 														// 返回-1 ,表示初始化失败
}
else
{
  printf("初始化默认用户成功\n");
}

/*执行创建教师信息语句*/
// SQL语句对象的原始SQL语句字符串
sql = "CREATE TABLE teacher(uid int(4), 													// 创建标题uid(用户id)【int】
							uname varchar(255),												// 创建标题upass(密码)【varchar】
							usex varchar(255) check(usex in ('男','女')),					// 创建标题usex(性别)【varchar】,并且限定只能在{'男','女'}当中
							uage varchar(255),												// 创建标题uage(年龄)【varchar】
							class int(4),													// 创建标题iclass(教室)【int】
							primary key(uid),foreign key(uid) references user(uid));";		// 将uid设置为主键时,又将teacher表的uid和user表的uid外部关联
							
r = sqlite3_exec(db_point,sql,NULL,NULL,NULL);						// 执行对于的sql语句
if( r != SQLITE_OK )												// 判断是否执行成功
{
  printf("创建教师信息表格失败\n");
  return -1; 														// 返回-1 ,表示初始化失败
}
else
{
  printf("创建教师信息表格成功\n");
}

/*执行创建学生信息语句*/
// SQL语句对象的原始SQL语句字符串
sql = "CREATE TABLE student(uid int(4),														// 创建标题uid(用户id)【int】
							uname varchar(255),												// 创建标题uname(姓名)【varchar】
							usex varchar(255) check(usex in ('男','女')),					// 创建标题usex(性别)【varchar】
							uage varchar(255),												// 创建标题uage(年龄)【varchar】
							Cgrade int(4),													// 创建标题Cgrade(语文成绩)【int】
							Mgrade int(4),													// 创建标题Mgrade(数学成绩)【int】
							Egrade int(4),													// 创建标题Egrade(英语成绩)【int】
							class int(4),													// 创建标题class(用户)【int】
							primary key(uid),												// 将uid设置为主键
							foreign key(class) references teacher(class),					// 将student表的class与teacher表的class外部关联
							foreign key(uid) references user(uid));"; 						// 将student表的uid与user表的uid外部关联
							
r = sqlite3_exec(db_point,sql,NULL,NULL,NULL);						 // 执行对于的sql语句
if( r != SQLITE_OK )												 // 判断是否执行成功
{
  printf("创建学生信息表格失败\n");
  return -1;														 // 返回-1 ,表示初始化失败
}
else
{
  printf("创建学生信息表格成功\n");
}

/*收尾处理*/
sqlite3_close(db_point);     										 // 关闭打开了的数据库

return 0;															 // 表示没有错误

2)、登入UI界面部分 login

代码解释
(一) 预处理部分
1、#include <stdio.h> 作为最基本头文件不多做赘述
2、#include“login.h” 、 #include“menu.h”和#include“register.h”分别是登入界面函数、菜单功能函数、注册功能函数(下文会有介绍)
3、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
(二) 函数部分
1、登入界面选项函数 void LoginOption()

	/* 初始化定义 */
	int i;
	char uid[MAXSIZE],passwd[MAXSIZE];
	/* 登入界面UI设计 */
	while(1)
	{
		printf("<-----登入界面----->\n");
		printf("---------------------\n");
		printf("1、登入账号\n");
		printf("2、注册账号\n");
		printf("3、退出系统\n");	
		printf("---------------------\n");
		printf("请输入你想操作的序号:");
		scanf("%d",&i);
		switch(i)
		{
			case 1:																		// 登入账号操作
				system("clear");
				/*输入用户名和密码*/
				printf("请输入你的学号/教工号/管理员用户名:");
				scanf("%s",uid);
				printf("请输入你的密码:");
				scanf("%s",passwd);
				CheckUser(uid,passwd);													// 检测账号是否存在代码(下文会有介绍)
				break;
			case 2:																		// 注册账号操作
				system("clear");
				RegisterOption();														// 注册账号菜单代码【register.c文件中】(下文会有介绍)
				break;
			case 3:printf("欢迎下次使用系统...\n");sleep(1);system("clear");return 0;		// 退出系统操作
			default: printf("输入序号有误,请重新输入序号(按Enter键进行下一步)...\n");
			getchar();system("clear");
		}
	}
--------------------------------------------------------------------------------------------------------------
2、/*存在回调函数*/ int IsExist_cal_handle(void *flag, int argc, char** argv, char **colname) 

【注意:这个是数据库函数的回调函数,比较复杂,这里如果想要更多操作,需要大家搜索更多相关资料】 

    int i = *(int*)(flag);
    *(int *)(flag) = i + 1;
    return 0;

作用: 这里的操作是返回查询结果的个数
--------------------------------------------------------------------------------------------------------------
3、用户检查函数 int CheckUser(char *uid,char *passwd)

	/*变量定义*/
	sqlite3 *db_point=NULL;									// 数据库连接对象指针(有点类似句柄)
	char sql[100];											// 数据库语句缓存区
	int rs;													// 数据库操作状态返回值
	int flag = 0;    										// 用于回调函数计数

	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); 		// 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	
    	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	/*执行创建用户并初始化默认用户语句*/
    	
    	// 查询是否有查用户名和密码的结果
    	sprintf(sql,"select * from user where exists(select * from user where uid='%s' and upass='%s');",uid,passwd);
    	rs = sqlite3_exec(db_point,sql,IsExist_cal_handle,&flag,NULL);				// 执行数据库语句并且运用回调函数得到查询结果的次数
    	if( rs != SQLITE_OK )
    	{
      		printf("登入失败,按Enter键进行下一步...\n");
      		getchar();getchar();
      		system("clear");
      		sqlite3_close(db_point);
      		return 0; // 返回-1 ,表示初始化失败
    	}
	else
	 {
        	if (flag == 0 )															// 如果没有结果,直接退出
        	 {     /* 结果不存在*/
            		printf("登入失败,按Enter键进行下一步...\n");
      	    		getchar();getchar();
      	    		system("clear");
            		sqlite3_close(db_point);
        	} 
        	else																	// 如果有结果,进入用户菜单界面
        	{      /* 结果存在*/
            		printf("登入成功,按Enter键进行下一步...\n");
      	    		getchar();getchar();
      	    		system("clear");
            		sqlite3_close(db_point);
            		MenuOption(uid,passwd);											// 用户菜单界面选项函数(下文有讲)
        	}
        }
}
--------------------------------------------------------------------------------------------------------------
4、用户菜单界面选项函数 void MenuOption(char *uid,char *passwd)
	【后面总结的时候觉得其实这个函数没有分装的必要,但也懒得改了,哈哈哈】
	JudgeId(uid,passwd);		// 判断登入用户的权限来进入不同的用户界面
--------------------------------------------------------------------------------------------------------------
5、用户权限判断函数 int JudgeId(char *uid,char *passwd)

	sqlite3 *db_point=NULL;					// 数据库连接对象指针(有点类似句柄)
	char *errMsg;							// 操作报错的字符串缓冲区
    char **dbResult; 						// 操作后得到的数据库二维数组表格
	char sql[100];							// 数据库语句缓存区
	int rs,result,nRow = 0, nColumn = 0;	// 操作结果状态标志位,行数,列数
	rs=sqlite3_open("SMS.db",&db_point); 	// 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	
    	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	sprintf(sql,"select * from user where uid='%s' and upass='%s';",uid,passwd);	
	/*数据库取出权限值*/
	rs = sqlite3_get_table(db_point,sql,&dbResult,&nRow,&nColumn,&errMsg); 		// 获得数据库表格函数
	if(rs == SQLITE_OK)
	    {
		result = atoi(dbResult[1*nColumn+1-1]);			// 获取(权限)ip的值,atoi函数是将字符串转换成对于的数字
		sqlite3_free_table(dbResult);					// 释放数据库表格
	    }
	else
	    {
		printf("取值失败(按Enter键进行下一步)...");
	    }
	
	sqlite3_close(db_point);
    	switch(result)									// 判断权限,进入对于的用户菜单
    	{
    		/*以下分别为管理员、教师、学生菜单函数【位于menu.c】*/
    		case 1:AdminMenuOption(uid);break;
    		case 2:TeacherMenuOption(uid);break;
    		case 3:studentMenuOption(uid);break;
    		default:printf("权限有误(按Enter键进行下一步)...\n");getchar();system("clear"); 
    	}

3)、注册UI界面部分 register

代码解释
(一) 预处理部分
1、#include <stdio.h> 作为最基本头文件不多做赘述
2、#include“register.h” 是注册界面函数(下文会有介绍)
3、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
4、#include <string.h> 是专门处理字符串的库函数
(二) 函数部分
1、教师注册函数 int RegisterTeacherUser()

	/*变量定义*/
	char uid[MAXSIZE],passwd[MAXSIZE],username[MAXSIZE],usex[MAXSIZE],uage[MAXSIZE];
	sqlite3 *db_point=NULL;
	char sql[100];
	int rs,class;
	/*设置用户*/
	printf("请输入你的教工号[字符限制:1~7]:");
	scanf("%s",uid);
	printf("请设置你的密码[字符限制:1~7]:");
	scanf("%s",passwd);
	
	/* 判断是否超过了对于限制范围 */
	if(strlen(uid)>8&&strlen(passwd)>7)
	{
		puts("不符合字符规定...");
		return 0;
	}
	
	/*进行数据库操作*/
	// 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
    	rs=sqlite3_open("SMS.db",&db_point); 
    	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败");
        	getchar();getchar();
        	system("clear");
        	return -1; // 返回-1 ,表示打开数据库失败
    	}
    	/*执行创建用户并初始化默认用户语句*/
    	sprintf(sql,"insert into user values(2,'%s','%s');",uid,passwd);
    	// SQL语句对象的原始SQL语句字符串
    	rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);			//执行对于表达式
    	if( rs != SQLITE_OK )
    	{
      		printf("添加用户失败\n");
      		getchar();getchar();
      		system("clear");
      		return -1; // 返回-1 ,表示初始化失败
    	}
   	/*设置用户信息*/
	printf("请输入你的名字[字符限制:1~7]:");
	scanf("%s",username);
	printf("请输入你的性别[男/女]:");
	scanf("%s",usex);
	printf("请输入你的年龄:");
	scanf("%s",uage);
	printf("请输入你管理的班级号:");
	scanf("%d",&class);
	
	/*初始化语句,将数据库语句内容清空*/
	strcpy(sql, "");
	
	/*执行创建用户并初始化默认用户语句*/
    	sprintf(sql,"insert into teacher values('%s','%s','%s','%s',%d);",uid,username,usex,uage,class);
    	// SQL语句对象的原始SQL语句字符串
    	rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
    	if( rs != SQLITE_OK )
    	{
      		printf("添加用户失败\n");
      		getchar();getchar();
      		system("clear");
      		return -1; // 返回-1 ,表示初始化失败
    	}
	puts("完成用户注册,按Enter键盘进行下一步...");getchar();getchar();system("clear");
    	sqlite3_close(db_point);
 -------------------------------------------------------------------------------------------------------------
2、学生注册函数int RegisterStudentUser()【可以类比教师注册函数】

	/*变量定义*/
	char uid[MAXSIZE],passwd[MAXSIZE],username[MAXSIZE],usex[MAXSIZE],uage[MAXSIZE],Cgrade[MAXSIZE],Mgrade[MAXSIZE],Egrade[MAXSIZE];
	sqlite3 *db_point=NULL;
	char sql[100];
	int rs,class;
	/*设置用户*/
	printf("请输入你的学号[字符限制:1~7]:");
	scanf("%s",uid);
	printf("请设置你的密码[字符限制:1~7]:");
	scanf("%s",passwd);
	
	if(strlen(uid)>8&&strlen(passwd)>8)
	{
		puts("不符合字符规定...");
		return 0;
	}
	
	/*进行数据库操作*/
    	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
    	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败");
        	getchar();getchar();
        	system("clear");
        	return -1; // 返回-1 ,表示打开数据库失败
    	}
    	/*执行创建用户并初始化默认用户语句*/
    	sprintf(sql,"insert into user values(3,'%s','%s');",uid,passwd);
    	// SQL语句对象的原始SQL语句字符串
    	rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
    	if( rs != SQLITE_OK )
    	{
      		printf("添加用户失败\n");
      		getchar();getchar();
      		system("clear");
      		return -1; // 返回-1 ,表示初始化失败
    	}
   	/*设置用户信息*/
	printf("请输入你的名字[字符限制:1~7]:");
	scanf("%s",username);
	printf("请输入你的性别[男/女]:");
	scanf("%s",usex);
	printf("请输入你的年龄:");
	scanf("%s",uage);
	printf("请输入你的班级号:");
	scanf("%d",&class);
	
	/*初始化语句*/
	strcpy(sql, "");
	
	/*执行创建用户并初始化默认用户语句*/
    	sprintf(sql,"insert into student values('%s','%s','%s','%s',NULL,NULL,NULL,%d);",uid,username,usex,uage,class);
    	// SQL语句对象的原始SQL语句字符串
    	rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
    	if( rs != SQLITE_OK )
    	{
      		printf("添加用户失败\n");
      		getchar();getchar();
      		system("clear");
      		return -1; // 返回-1 ,表示初始化失败
    	}
	puts("完成用户注册,按Enter键盘进行下一步...");getchar();getchar();system("clear");
    	sqlite3_close(db_point);
--------------------------------------------------------------------------------------------------------------
3、注册UI菜单代码 void RegisterOption()

	int i;
	while(1)
	{
		printf("<-----注册界面----->\n");
		printf("---------------------\n");
		printf("1、学生注册\n");
		printf("2、教师注册\n");
		printf("3、退出注册\n");	
		printf("---------------------\n");
		printf("请输入你想操作的序号:");
		scanf("%d",&i);
		switch(i)
		{
			case 1:
				system("clear");
				RegisterStudentUser();
				break;
			case 2:
				system("clear");
				RegisterTeacherUser();
				break;
			case 3:printf("3 quit\n");system("clear");return 0;
			default: printf("输入序号有误,请重新输入序号(按Enter键进行下一步)...\n");getchar();getchar();system("clear");
		}
	}

3、用户运行界面部分

1)、用户菜单部分 menu

代码解释
(一)预处理部分
1、#include <stdio.h> 作为最基本头文件不多做赘述
2、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
3、#include "menu.h"、#include "update.h"、#include "insert.h"、#include "delete.h"、#include "select.h"自己写的关于”增删改查“的函数(下文会讲)
(二)函数部分
1、管理员UI界面 void AdminMenuOption(char *uid)

	int i;
	while(1)
	{
		printf("<------管理员界面------>\n");
		printf("1、增加教师数据\n");
		printf("2、删除教师数据\n");
		printf("3、更改教师数据\n");
		printf("4、查询教师数据\n");
		printf("5、增加管理员数据\n");
		printf("6、删除管理员数据\n");
		printf("7、更改管理员数据\n");
		printf("8、查询管理员数据\n");
		printf("9、注销用户\n");
		printf("10、退出系统\n");	
		printf("------------------------\n");
		printf("请输入你想操作的序号:");
		scanf("%d",&i);
		switch(i)
		{
			case 1:
				system("clear");
				AddTeacher();
				sleep(1);
				system("clear");
				break;
			case 2:
				system("clear");
				DeleteAdmin(uid,2);
				sleep(1);
				system("clear");
				break;
			case 3:
				system("clear");
				UpdateAdmin(uid,2);
				sleep(1);
				system("clear");
				break;
			case 4:
				system("clear");
				ShowAdminTable(2);
				sleep(1);
				system("clear");
				break;
			case 5:
				system("clear");
				AddAdmin();
				sleep(1);
				system("clear");
				break;
			case 6:
				system("clear");
				DeleteAdmin(uid,1);
				sleep(1);
				system("clear");
				break;
			case 7:
				system("clear");
				UpdateAdmin(uid,1);
				sleep(1);
				system("clear");
				break;
			case 8:
				system("clear");
				ShowAdminTable(1);
				sleep(1);
				system("clear");
				break;
			case 9:
				system("clear");
				SelfDeleteAdmin(uid);
				sleep(1);
				system("clear");
				exit(0);
			case 10:system("clear");puts("欢迎下次使用本系统...");sleep(1);system("clear");exit(0);system("clear");
			default: printf("输入序号有误,请重新输入序号...\n");
		}
	}
--------------------------------------------------------------------------------------------------------------
2、教师UI界面 void TeacherMenuOption(char *uid)

	int i;
	while(1)
	{
		printf("<-------教师界面------->\n");
		printf("1、增加学生数据\n");
		printf("2、删除学生数据\n");
		printf("3、更改学生数据\n");
		printf("4、查询学生数据\n");
		printf("5、注销用户\n");
		printf("6、退出系统\n");	
		printf("------------------------\n");
		printf("请输入你想操作的序号:");
		scanf("%d",&i);
		switch(i)
		{
			case 1:
				system("clear");
				AddStudent();
				sleep(1);
				system("clear");
				break;
			case 2:
				system("clear");
				DeleteTeacher(uid);
				sleep(1);
				system("clear");
				break;
			case 3:
				system("clear");
				UpdateTeacher(uid);
				sleep(1);
				system("clear");
				break;
			case 4:
				system("clear");
				ShowTeacherTable(uid);
				sleep(1);
				system("clear");
				break;
			case 5:
				system("clear");
				SelfDeleteTeacher(uid);
				sleep(1);
				system("clear");
				exit(0);
			case 6:system("clear");puts("欢迎下次使用本系统...");sleep(1);system("clear");exit(0);system("clear");
			default: printf("输入序号有误,请重新输入序号...\n");
		}
	}
-----------------------------------------------------------------------------------------------------------------
3、学生UI界面void studentMenuOption(char *uid)

	int i;
	while(1)
	{
		printf("<-------学生界面------->\n");
		printf("1、查询成绩\n");
		printf("2、修改密码\n");
		printf("3、注销用户\n");
		printf("4、退出系统\n");	
		printf("------------------------\n");
		printf("请输入你想操作的序号:");
		scanf("%d",&i);
		switch(i)
		{
			case 1:
				system("clear");
				ShowStudentTable(uid);
				sleep(1);
				system("clear");
				break;
			case 2:
				system("clear");
				UpdateStudent(uid);
				sleep(1);
				system("clear");
				break;
			case 3:
				system("clear");
				SelfDeleteStudent(uid);
				sleep(1);
				system("clear");
				exit(0);
			case 4:system("clear");puts("欢迎下次使用本系统...");sleep(1);system("clear");exit(0);
			default: printf("输入序号有误,请重新输入序号...\n");
		}
	}

【以上代码的本质框架就是基于switch-case的基本结构】

2)、“增” insert

代码解释
(一) 预处理部分
1、#include "insert.h" 自己写的"增"函数库
2、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
3、#include <stdio.h> 作为最基本头文件不多做赘述
4、#include <string.h> 专门处理字符串的函数库
(二) 函数部分
1、/*存在回调函数*/  int IsExist_cal_handle1(void *flag, int argc, char** argv, char **colname)

【注意:这个是数据库函数的回调函数,比较复杂,这里如果想要更多操作,需要大家搜索更多相关资料】 

    int i = *(int*)(flag);
    *(int *)(flag) = i + 1;
    return 0;

作用: 这里的操作是返回查询结果的个数
--------------------------------------------------------------------------------------------------------------
2、管理员添加函数 int AddAdmin()

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char uid[MAXSIZE],upass[MAXSIZE];
	char sql[100];
	int rs,i;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
																				// 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	rs=sqlite3_open("SMS.db",&db_point); 										//  将数据库指针和db文件进行连接
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);											// 关闭数据库连接
        	return 0;														    // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{
    		printf("请添加管理员的用户名、密码[字符限定1~7]:\n");
    		scanf("%s%s",uid,upass);
    		sprintf(sql,"insert into user values(1,'%s','%s');",uid,upass);	   // 插入一个管理员的信息
    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);				  	   // 执行上述数据库语句
	        if( rs != SQLITE_OK )
	        { 
	        	printf("插入失败\n");
	      		return 0; 													   // 返回0 ,表示初始化失败
	    	}
	    	else
	    	{
			printf("插入成功\n");		    	
	    	}
    		sqlite3_close(db_point);									       // 关闭数据库连接
    		return 1;
         }
--------------------------------------------------------------------------------------------------------------
3、教师添加函数 int AddTeacher()

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char uid[MAXSIZE],upass[MAXSIZE],uname[MAXSIZE],usex[MAXSIZE],uage[MAXSIZE],class[MAXSIZE];
	char sql[100];
	int rs,i;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	// 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	rs=sqlite3_open("SMS.db",&db_point); 
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; 										 // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{
    		/*把教师的信息填入到user表格里*/   		
    		printf("请添加教师的信息:\n");
    		printf("信息[教工号[字符限定1~7]、默认密码[字符限定1~7]、姓名、性别(男/女)、年龄、管理班级]\n");
    		scanf("%s%s%s%s%s%s",uid,upass,uname,usex,uage,class);
    		sprintf(sql,"insert into user values(2,'%s','%s');",uid,upass);
    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
	        if( rs != SQLITE_OK )
	        { 
	        	printf("插入失败\n");
	      		return 0; 									// 返回-1 ,表示初始化失败
	    	}
	    	/*清空数据库语句缓存的内容*/
		   	strcpy(sql,"");

			/*把教师的信息填入到teacher表格里*/
    		sprintf(sql,"insert into teacher values('%s','%s','%s','%s','%s');",uid,uname,usex,uage,class);
    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
	        if( rs != SQLITE_OK )
	        { 
	        	printf("插入失败\n");
	      		return 0;								   // 返回-1 ,表示初始化失败
	    	}
	    	else
	    	{
			printf("插入成功\n");		    	
	    	}
    		sqlite3_close(db_point);
    		return 1;
         }
-------------------------------------------------------------------------------------------------------------
4、学生添加函数 int AddStudent()

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char uid[MAXSIZE],upass[MAXSIZE],uname[MAXSIZE],usex[MAXSIZE],uage[MAXSIZE],Cgrade[MAXSIZE],Mgrade[MAXSIZE],Egrade[MAXSIZE],class[MAXSIZE];
	char sql[100];
	int rs,i;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	
    	printf("请输入学生学号:");
    	scanf("%s",uid);
    	
	/*执行创建用户并初始化默认用户语句*/
    	sprintf(sql,"select * from user where exists(select * from user where uid='%s');",uid);
    	// SQL语句对象的原始SQL语句字符串
    	rs = sqlite3_exec(db_point,sql,IsExist_cal_handle1,&flag,NULL);
    	if( rs != SQLITE_OK )
    	{
      		printf("插入失败,按Enter键进行下一步...\n");
      		getchar();getchar();
      		system("clear");
      		sqlite3_close(db_point);		  			 // 断开数据库连接
      		return 0;									 // 返回-1 ,表示初始化失败
    	}
	else
	 {
        	if (flag == 0 )
        	 {     /* 结果不存在*/
        	 		// 添加学生信息
            		printf("数据库里没有该名学生,请添加他/她的信息(如果没有成绩请输入NULL):\n");
            		printf("信息[默认密码[字符限定1~7]、姓名、性别(男/女)、年龄、班级(老师的管理班级)、语文成绩、数学成绩、英语成绩]\n");
      	    		scanf("%s%s%s%s%s%s%s%s",upass,uname,usex,uage,class,Cgrade,Mgrade,Egrade);
      	    		// 清除数据库缓存
      	    		strcpy(sql,"");
      	    		sprintf(sql,"insert into user values(3,'%s','%s');",uid,upass);
      	    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
		        if( rs != SQLITE_OK )
		        { 
		        	printf("插入失败\n");
		      		return 0; 							// 返回-1 ,表示初始化失败
		    	}
			    // 清除数据库缓存
			   	strcpy(sql,"");
      	    		sprintf(sql,"insert into student values('%s','%s','%s','%s','%s','%s','%s','%s');",uid,uname,usex,uage,Cgrade,Mgrade,Egrade,class);
      	    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
		        if( rs != SQLITE_OK )
		        { 
		        	printf("插入失败\n");
		      		return 0; 						   // 返回-1 ,表示初始化失败
		    	}
		    	else
		    	{
				printf("插入成功\n");		    	
		    	}
            		sqlite3_close(db_point);		  // 断开数据库连接
            		return 1;
        	} 
        	else
        	{      /* 结果存在*/
            		printf("数据库里有该名学生,请添加他/她的成绩(如果没有成绩请输入NULL):\n");
            		printf("信息[语文成绩、数学成绩、英语成绩]\n");
      	    		scanf("%s%s%s",Cgrade,Mgrade,Egrade);
      	  		strcpy(sql,"");
      	    		sprintf(sql,"insert into student(Cgrade,Mgrade,Egrade) values('%s','%s','%s');",Cgrade,Mgrade,Egrade);
      	    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
		        if( rs != SQLITE_OK )
		        { 
		        	printf("插入失败\n");
		      		return 0; 						// 返回-1 ,表示初始化失败
		    	}
		    	else
		    	{
				printf("插入成功\n");		    	
		    	}
            		sqlite3_close(db_point);	   // 断开数据库连接
            		return 1;
        	}
        }

3)、“删” delete

代码解释
(一) 预处理部分
1、#include "delete.h" 自己写的"删"函数库
2、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
3、#include <stdio.h> 作为最基本头文件不多做赘述
4、#include <string.h> 专门处理字符串的函数库
(二) 函数部分
1、/*存在回调函数*/ int IsExist_cal_handle2(void *flag, int argc, char** argv, char **colname)

【注意:这个是数据库函数的回调函数,比较复杂,这里如果想要更多操作,需要大家搜索更多相关资料】 

    int i = *(int*)(flag);
    *(int *)(flag) = i + 1;
    return 0;

作用: 这里的操作是返回查询结果的个数
--------------------------------------------------------------------------------------------------------------
2、管理员删除函数 int DeleteAdmin(char *Selfuid,int i)

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char uid[MAXSIZE];
	char sql[100];
	int rs;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	// 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	rs=sqlite3_open("SMS.db",&db_point); 
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{  
    		if(i==1)
    		{
    			printf("请输入要删除的管理员用户名:\n");	
    		}		
    		if(i==2)
    		{
    			printf("请输入要删除的教师教工号:\n");
    		}
		scanf("%s",uid);
		// 不能在删除他人的功能里面能够注销自己
		if(i==1&&strcmp(Selfuid,uid)==0)
		{
			printf("不能删除当前账号,若要删除当前账号,请在注销选项完成...\n");
			return 0;
		}
				// 查询是否有想要的消息
    			sprintf(sql,"select * from user where exists(select * from user where uid='%s' and ip=%d);",uid,i);
	    		// SQL语句对象的原始SQL语句字符串
	    		rs = sqlite3_exec(db_point,sql,IsExist_cal_handle2,&flag,NULL);
	    		if( rs != SQLITE_OK )
	    		{
	      			printf("删除失败...\n");
	      			return 0; // 返回-1 ,表示初始化失败
	    		}
	    		else
	    		{
	    			if(flag==0)
	    			{
	    				printf("不存在此用户...\n");
			      		return 0; // 返回-1 ,表示初始化失败
	    			}
	    			else
	    			{
	    				if(i==1)													// 删除管理员操作
	    				{
	    					strcpy(sql,"");
			    			sprintf(sql,"delete from user where uid='%s';",uid);
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
						if( rs != SQLITE_OK )
						{ 
							printf("删除失败\n");
					      		return 0; // 返回-1 ,表示初始化失败
					    	}
					    	else
					    	{
							printf("删除成功\n");		    	
					    	}
				    		sqlite3_close(db_point);
				    		return 1;
	    				}
	    				if(i==2)													// 删除教师操作
	    				{
	    					strcpy(sql,"");
			    			sprintf(sql,"delete from user where uid='%s';",uid);
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
						if( rs != SQLITE_OK )
						{ 
							printf("删除失败\n");
					      		return 0; // 返回-1 ,表示初始化失败
					    	}
					    	strcpy(sql,"");
			    			sprintf(sql,"delete from teacher where uid='%s';",uid);
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
						if( rs != SQLITE_OK )
						{ 
							printf("删除失败\n");
					      		return 0; // 返回-1 ,表示初始化失败
					    	}
					    	
					    	else
					    	{
							printf("删除成功\n");		    	
					    	}
				    		sqlite3_close(db_point);
				    		return 1;
	    				}	
	    			}
	    		}  					
         }
--------------------------------------------------------------------------------------------------------------
3、教师删除函数 int DeleteTeacher(char *Selfuid)

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char uid[MAXSIZE];
	char *zErrMsg = 0;
	char sql[100];
	int rs,i;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{  		
    		printf("请输入要删除的学生学号:\n");
    		scanf("%s",uid) ;
    		sprintf(sql,"select * from student,teacher x where exists(select * from student where student.uid='%s' and student.class=(select class from teacher y where y.uid='%s'));",uid,Selfuid);
    		// SQL语句对象的原始SQL语句字符串
    		rs = sqlite3_exec(db_point,sql,IsExist_cal_handle2,&flag,NULL);
    		if( rs != SQLITE_OK )
    		{
      			printf("删除失败\n");
      			sqlite3_close(db_point);
      			return 0; // 返回-1 ,表示初始化失败
    		}
    		else
    		{
    			if(flag==0)
    			{
    				printf("不存在此学生\n");
    				sqlite3_close(db_point);
		      		return 0; // 返回-1 ,表示初始化失败
    			}
    			else
    			{
    				strcpy(sql,"");
	    			sprintf(sql,"delete from student where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,&zErrMsg);
				if( rs != SQLITE_OK )
				{ 
					//puts(zErrMsg);
					printf("删除失败\n");
					sqlite3_close(db_point);
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	strcpy(sql,"");
	    			sprintf(sql,"delete from user where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				if( rs != SQLITE_OK )
				{ 
					printf("删除失败\n");
					sqlite3_close(db_point);
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	else
			    	{
			    		printf("删除成功\n");	
			    	}
		    		sqlite3_close(db_point);
		    		return 1;
    			}
    		}  				
         }
--------------------------------------------------------------------------------------------------------------
4、学生自我注销函数 int SelfDeleteStudent(char *uid)

	/*变量定义*/
	sqlite3 *db_point=NULL;
	//char uid[MAXSIZE];
	char sql[100];
	int rs,i;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{  		
    		//printf("请输入要删除的学生学号:\n");
    		//scanf("%s",uid) ;
    		sprintf(sql,"select * from user where exists(select * from user where uid='%s');",uid);
    		// SQL语句对象的原始SQL语句字符串
    		rs = sqlite3_exec(db_point,sql,IsExist_cal_handle2,&flag,NULL);
    		if( rs != SQLITE_OK )
    		{
      			printf("删除失败,按Enter键进行下一步...\n");
      			getchar();getchar();
      			system("clear");
      			sqlite3_close(db_point);
      			return 0; // 返回-1 ,表示初始化失败
    		}
    		else
    		{
    			if(flag==0)
    			{
    				printf("不存在此学生,按Enter键进行下一步...\n");
    				getchar();getchar();
		      		system("clear");
		      		sqlite3_close(db_point);
		      		return 0; // 返回-1 ,表示初始化失败
    			}
    			else
    			{
    				strcpy(sql,"");
	    			sprintf(sql,"delete from student where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				if( rs != SQLITE_OK )
				{ 
					printf("注销失败\n");
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	strcpy(sql,"");
	    			sprintf(sql,"delete from user where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				if( rs != SQLITE_OK )
				{ 
					printf("注销失败\n");
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	else
			    	{
			    		printf("注销成功\n");	
			    	}
		    		sqlite3_close(db_point);
		    		return 1;
    			}
    		}  				
         }
--------------------------------------------------------------------------------------------------------------
5、教师自我注销函数 int SelfDeleteTeacher(char *uid)
{
	/*变量定义*/
	sqlite3 *db_point=NULL;
	//char uid[MAXSIZE];
	char sql[100];
	int rs,i;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{  		
    		//printf("请输入要删除的学生学号:\n");
    		//scanf("%s",uid) ;
    		sprintf(sql,"select * from user where exists(select * from user where uid='%s');",uid);
    		// SQL语句对象的原始SQL语句字符串
    		rs = sqlite3_exec(db_point,sql,IsExist_cal_handle2,&flag,NULL);
    		if( rs != SQLITE_OK )
    		{
      			printf("删除失败,按Enter键进行下一步...\n");
      			getchar();getchar();
      			system("clear");
      			sqlite3_close(db_point);
      			return 0; // 返回-1 ,表示初始化失败
    		}
    		else
    		{
    			if(flag==0)
    			{
    				printf("不存在此教师,按Enter键进行下一步...\n");
    				getchar();getchar();
		      		system("clear");
		      		sqlite3_close(db_point);
		      		return 0; // 返回-1 ,表示初始化失败
    			}
    			else
    			{
    				strcpy(sql,"");
	    			sprintf(sql,"delete from student where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				if( rs != SQLITE_OK )
				{ 
					printf("注销失败\n");
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	strcpy(sql,"");
	    			sprintf(sql,"delete from user where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				if( rs != SQLITE_OK )
				{ 
					printf("注销失败\n");
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	else
			    	{
			    		printf("注销成功\n");	
			    	}
		    		sqlite3_close(db_point);
		    		return 1;
    			}
    		}  				
         }
}
--------------------------------------------------------------------------------------------------------------
6、管理员自我注销函数 int SelfDeleteAdmin(char *uid)
{
	/*变量定义*/
	sqlite3 *db_point=NULL;
	//char uid[MAXSIZE];
	char sql[100];
	int rs,i;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{  		
    		//printf("请输入要删除的学生学号:\n");
    		//scanf("%s",uid) ;
    		sprintf(sql,"select * from user where exists(select * from user where uid='%s');",uid);
    		// SQL语句对象的原始SQL语句字符串
    		rs = sqlite3_exec(db_point,sql,IsExist_cal_handle2,&flag,NULL);
    		if( rs != SQLITE_OK )
    		{
      			printf("删除失败,按Enter键进行下一步...\n");
      			getchar();getchar();
      			system("clear");
      			sqlite3_close(db_point);
      			return 0; // 返回-1 ,表示初始化失败
    		}
    		else
    		{
    			if(flag==0)
    			{
    				printf("不存在此管理员,按Enter键进行下一步...\n");
    				getchar();getchar();
		      		system("clear");
		      		sqlite3_close(db_point);
		      		return 0; // 返回-1 ,表示初始化失败
    			}
    			else
    			{
    				strcpy(sql,"");
	    			sprintf(sql,"delete from student where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				if( rs != SQLITE_OK )
				{ 
					printf("注销失败\n");
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	strcpy(sql,"");
	    			sprintf(sql,"delete from user where uid='%s';",uid);
		    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				if( rs != SQLITE_OK )
				{ 
					printf("注销失败\n");
			      		return 0; // 返回-1 ,表示初始化失败
			    	}
			    	else
			    	{
			    		printf("注销成功\n");	
			    	}
		    		sqlite3_close(db_point);
		    		return 1;
    			}
    		}  				
         }
}

4)、“改” update

代码解释
(一) 预处理部分
1、#include "update.h" 自己写的"改"函数库
2、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
3、#include <stdio.h> 作为最基本头文件不多做赘述
4、#include <string.h> 专门处理字符串的函数库
(二) 函数部分
1、/*存在回调函数*/ int IsExist_cal_handle3(void *flag, int argc, char** argv, char **colname)

【注意:这个是数据库函数的回调函数,比较复杂,这里如果想要更多操作,需要大家搜索更多相关资料】 

    int i = *(int*)(flag);
    *(int *)(flag) = i + 1;
    return 0;

作用: 这里的操作是返回查询结果的个数
--------------------------------------------------------------------------------------------------------------
2、管理员更新函数 int UpdateAdmin(char *Selfuid,int i)

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char uid[MAXSIZE],upass[MAXSIZE],uname[MAXSIZE],usex[MAXSIZE],uage[MAXSIZE],class[MAXSIZE];
	char sql[100];
	int rs,j;
	char *zErrMsg = 0;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{  
    		if(i==1)												// 管理员操作界面
    		{
    			printf("请输入要更改的管理员信息:\n");
    			puts("-------------------------------");
    			puts("1、用户名");
    			puts("2、密码");
    			puts("-------------------------------");
    			scanf("%d",&j);
    			switch(j)
    			{
    				case 1:
    					puts("请输入你更改后的用户名[字符限制:1~7]:");
			    		scanf("%s",uid);
			    		sprintf(sql,"update user set uid='%s' where uid='%s';",uid,Selfuid);
			    		// SQL语句对象的原始SQL语句字符串
			    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
			    		if( rs != SQLITE_OK )
			    		{
			      			printf("更新失败\n");
			      			sqlite3_close(db_point);
			      			return 0; // 返回-1 ,表示初始化失败
			    		}
			    		else
			    		{
			    			printf("更新成功\n");
			    			sqlite3_close(db_point);
			    		}
    					return 1;
    					break;
    				case 2:
    					puts("请输入你更改后的密码[字符限制:1~7]:");
			    		scanf("%s",upass);
			    		sprintf(sql,"update user set upass='%s' where uid='%s';",upass,Selfuid);
			    		// SQL语句对象的原始SQL语句字符串
			    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
			    		if( rs != SQLITE_OK )
			    		{
			      			printf("更新失败\n");
			      			sqlite3_close(db_point);
			      			return 0; // 返回-1 ,表示初始化失败
			    		}
			    		else
			    		{
			    			printf("更新成功\n");
			    			sqlite3_close(db_point);
			    		}
    					return 1;
    				default:puts("更改失败,请重新选择更改选项...");sleep(1);return 0;
    			}		
    		}		
    		if(i==2)												// 教师操作界面
    		{
    			puts("请输入要更改信息的教工号:");
    			scanf("%s",uid);
    			sprintf(sql,"select * from teacher where uid='%s';",uid);
			rs = sqlite3_exec(db_point,sql,IsExist_cal_handle3,&flag,&zErrMsg);
			if( rs != SQLITE_OK )
	    		{	
	    			puts(zErrMsg);
	      			printf("删除失败\n");
	      			sqlite3_close(db_point);
	      			return 0; // 返回-1 ,表示初始化失败
	    		}
	    		else
	    		{
	    			if(flag==0)
	    			{
	    				printf("不存在此老师信息\n");
	    				sqlite3_close(db_point);
			      		return 0; // 返回-1 ,表示初始化失败
	    				
	    			}
	    			else
	    			{
	    				printf("请输入要更改的教师信息:\n");
		    			puts("-------------------------------");
		    			puts("1、密码");
		    			puts("2、姓名");
		    			puts("3、年龄");
		    			puts("4、性别");
		    			puts("5、管理班级");
		    			puts("-------------------------------");
		    			scanf("%d",&j);
		    			
		    			switch(j)
		    			{
		    				case 1:
		    					puts("请输入你更改后的密码[字符限制:1~7]:");
					    		scanf("%s",upass);
					    		sprintf(sql,"update user set upass='%s' where uid='%s';",upass,uid);
					    		// SQL语句对象的原始SQL语句字符串
					    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
					    		if( rs != SQLITE_OK )
					    		{
					      			printf("更新失败\n");
					      			sqlite3_close(db_point);
					      			return 0; // 返回-1 ,表示初始化失败
					    		}
					    		else
					    		{
					    			printf("更新成功\n");
					    			sqlite3_close(db_point);
					    		}
		    					return 1;
		    				case 2:
		    					puts("请输入你更改后的姓名[字符限制:1~7]:");
					    		scanf("%s",uname);
					    		sprintf(sql,"update teacher set uname='%s' where uid='%s';",uname,uid);
					    		// SQL语句对象的原始SQL语句字符串
					    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
					    		if( rs != SQLITE_OK )
					    		{
					      			printf("更新失败\n");
					      			sqlite3_close(db_point);
					      			return 0; // 返回-1 ,表示初始化失败
					    		}
					    		else
					    		{
					    			printf("更新成功\n");
					    			sqlite3_close(db_point);
					    		}
		    					return 1;
		    				case 3:
		    					puts("请输入你更改后的年龄:");
					    		scanf("%s",uage);
					    		sprintf(sql,"update teacher set uage='%s' where uid='%s';",uage,uid);
					    		// SQL语句对象的原始SQL语句字符串
					    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
					    		if( rs != SQLITE_OK )
					    		{
					      			printf("更新失败\n");
					      			sqlite3_close(db_point);
					      			return 0; // 返回-1 ,表示初始化失败
					    		}
					    		else
					    		{
					    			printf("更新成功\n");
					    			sqlite3_close(db_point);
					    		}
		    					return 1;
		    				case 4:
		    					puts("请输入你更改后的性别:");
					    		scanf("%s",usex);
					    		sprintf(sql,"update teacher set usex='%s' where uid='%s';",usex,uid);
					    		// SQL语句对象的原始SQL语句字符串
					    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
					    		if( rs != SQLITE_OK )
					    		{
					      			printf("更新失败\n");
					      			sqlite3_close(db_point);
					      			return 0; // 返回-1 ,表示初始化失败
					    		}
					    		else
					    		{
					    			printf("更新成功\n");
					    			sqlite3_close(db_point);
					    		}
		    					return 1;
		    				case 5:
		    					puts("请输入你更改后的管理班级:");
					    		scanf("%s",class);
					    		sprintf(sql,"update teacher set class='%s' where uid='%s';",class,uid);
					    		// SQL语句对象的原始SQL语句字符串
					    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
					    		if( rs != SQLITE_OK )
					    		{
					      			printf("更新失败\n");
					      			sqlite3_close(db_point);
					      			return 0; // 返回-1 ,表示初始化失败
					    		}
					    		else
					    		{
					    			printf("更新成功\n");
					    			sqlite3_close(db_point);
					    		}
		    					return 1;
		    				default:puts("更改失败,请重新选择更改选项...");sleep(1);return 0;
		    			}	
	    			}
	    		}	
    		}							
         }
--------------------------------------------------------------------------------------------------------------
3、教师更新函数 int UpdateTeacher(char *Selfuid)

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char uid[MAXSIZE],upass[MAXSIZE],uname[MAXSIZE],usex[MAXSIZE],uage[MAXSIZE],class[MAXSIZE],Cgrade[MAXSIZE],Mgrade[MAXSIZE],Egrade[MAXSIZE];
	char sql[200];
	int rs,j;
	char *zErrMsg = 0;
	int flag = 0;    /* 用于回调函数计数*/
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{  	
		puts("请输入要更改信息的学号:");
		scanf("%s",uid);
		sprintf(sql,"select * from student,teacher where student.uid='%s' and teacher.uid='%s' and student.class=teacher.class;",uid,Selfuid);
		rs = sqlite3_exec(db_point,sql,IsExist_cal_handle3,&flag,&zErrMsg);
    		if( rs != SQLITE_OK )
    		{
    			puts(zErrMsg);
      			printf("删除失败\n");
      			sqlite3_close(db_point);
      			return 0; // 返回-1 ,表示初始化失败
    		}
    		else
    		{
    			if(flag==0)
    			{
    				printf("不存在此学生\n");
    				sqlite3_close(db_point);
		      		return 0; // 返回-1 ,表示初始化失败
    			}
			else
			{
				printf("请输入要更改的学生信息:\n");
				puts("-------------------------------");
				puts("1、密码");
				puts("2、姓名");
				puts("3、年龄");
				puts("4、性别");
				puts("5、成绩");
				puts("6、所在班级");
				puts("-------------------------------");
				scanf("%d",&j);
				switch(j)
				{
					case 1:
						puts("请输入你更改后的密码[字符限制:1~7]:");
				    		scanf("%s",upass);
				    		sprintf(sql,"update user set upass='%s' where uid='%s';",upass,uid);
				    		// SQL语句对象的原始SQL语句字符串
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				    		if( rs != SQLITE_OK )
				    		{
				      			printf("更新失败\n");
				      			sqlite3_close(db_point);
				      			return 0; // 返回-1 ,表示初始化失败
				    		}
				    		else
				    		{
				    			printf("更新成功\n");
				    			sqlite3_close(db_point);
				    			return 1;
				    		}
						
					case 2:
						puts("请输入你更改后的姓名[字符限制:1~7]:");
				    		scanf("%s",uname);
				    		sprintf(sql,"update student set uname='%s' where uid='%s';",uname,uid);
				    		// SQL语句对象的原始SQL语句字符串
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				    		if( rs != SQLITE_OK )
				    		{
				      			printf("更新失败\n");
				      			sqlite3_close(db_point);
				      			return 0; // 返回-1 ,表示初始化失败
				    		}
				    		else
				    		{
				    			printf("更新成功\n");
				    			sqlite3_close(db_point);
				    		}
						return 1;
					case 3:
						puts("请输入你更改后的年龄:");
				    		scanf("%s",uage);
				    		sprintf(sql,"update student set uage='%s' where uid='%s';",uage,uid);
				    		// SQL语句对象的原始SQL语句字符串
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				    		if( rs != SQLITE_OK )
				    		{
				      			printf("更新失败\n");
				      			sqlite3_close(db_point);
				      			return 0; // 返回-1 ,表示初始化失败
				    		}
				    		else
				    		{
				    			printf("更新成功\n");
				    			sqlite3_close(db_point);
				    		}
						return 1;
					case 4:
						puts("请输入你更改后的性别:");
				    		scanf("%s",usex);
				    		sprintf(sql,"update student set usex='%s' where uid='%s';",usex,uid);
				    		// SQL语句对象的原始SQL语句字符串
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				    		if( rs != SQLITE_OK )
				    		{
				      			printf("更新失败\n");
				      			sqlite3_close(db_point);
				      			return 0; // 返回-1 ,表示初始化失败
				    		}
				    		else
				    		{
				    			printf("更新成功\n");
				    			sqlite3_close(db_point);
				    		}
						return 1;
					case 5:
						puts("请输入你更改后的语文、数学、英语成绩[没有成绩请输入NULL]:");
				    		scanf("%s%s%s",Cgrade,Mgrade,Egrade);
				    		sprintf(sql,"update student set Cgrade='%s',Mgrade='%s',Egrade='%s' where uid='%s';",Cgrade,Mgrade,Egrade,uid);
				    		// SQL语句对象的原始SQL语句字符串
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				    		if( rs != SQLITE_OK )
				    		{
				      			printf("更新失败\n");
				      			sqlite3_close(db_point);
				      			return 0; // 返回-1 ,表示初始化失败
				    		}
				    		else
				    		{
				    			printf("更新成功\n");
				    			sqlite3_close(db_point);
				    		}
						return 1;
					case 6:
						puts("请输入你更改后的所在班级:");
				    		scanf("%s",class);
				    		sprintf(sql,"update teacher set class='%s' where uid='%s';",class,uid);
				    		// SQL语句对象的原始SQL语句字符串
				    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
				    		if( rs != SQLITE_OK )
				    		{
				      			printf("更新失败\n");
				      			sqlite3_close(db_point);
				      			return 0; // 返回-1 ,表示初始化失败
				    		}
				    		else
				    		{
				    			printf("更新成功\n");
				    			sqlite3_close(db_point);
				    		}
						return 1;
					default:puts("更改失败,请重新选择更改选项...");sleep(1);return 0;
				}		
			}
		}
	}
--------------------------------------------------------------------------------------------------------------
4、学生更新函数 int UpdateStudent(char *uid)

	/*变量定义*/
	sqlite3 *db_point=NULL;
	char upass[MAXSIZE];
	char *zErrMsg = 0;
	char sql[100];
	int rs,i;
	
	/*数据库查询*/
	rs=sqlite3_open("SMS.db",&db_point); // 创建默认的数据库,并且将db_point数据库连接对象指针指向创建好且打开的数据库对象
	if(rs != SQLITE_OK)
    	{
        	perror("数据库打开失败,按Enter键进行下一步...");
        	getchar();getchar();
        	system("clear");
        	sqlite3_close(db_point);
        	return 0; // 返回-1 ,表示打开数据库失败
    	}
    	else
    	{
    		puts("请输入你更改后的密码[字符限制:1~7]:");
    		scanf("%s",upass);
    		sprintf(sql,"update user set upass='%s' where uid='%s';",upass,uid);
    		// SQL语句对象的原始SQL语句字符串
    		rs = sqlite3_exec(db_point,sql,NULL,NULL,NULL);
    		if( rs != SQLITE_OK )
    		{
      			printf("更新失败\n");
      			sqlite3_close(db_point);
      			return 0; // 返回-1 ,表示初始化失败
    		}
    		else
    		{
    			printf("更新成功\n");
    			sqlite3_close(db_point);
      			return 1;
    		} 		
    	}    	

5)、“查” select

代码解释
(一) 预处理部分
1、#include "insert.h" 自己写的"查"函数库
2、#include <sqlite3.h> 是一个小型的嵌入式数据库头文件
3、#include <stdio.h> 作为最基本头文件不多做赘述
4、#include <string.h> 专门处理字符串的函数库
(二) 函数部分
1、管理员信息展示函数 void ShowAdminTable(int k)

		/*初始化定义*/
	   sqlite3 *db=NULL;
	   char *errMsg = 0;
	   int rs,nRow = 0, nColumn = 0,i,j;
	   char *sql;
	   char **dbResult;

	   /* 打开数据库连接 */
	   rs = sqlite3_open("SMS.db", &db);
	   if( rs ){
	      fprintf(stderr, "打不开数据库: %s\n", sqlite3_errmsg(db));
	      return 0;
	   }
	   if(k==1)												// 查询user表的信息
	   {
	   	strcpy(sql,"SELECT * from user;");
	   }
	   if(k==2)												// 查询teacher表的信息
	   {
	   	strcpy(sql,"SELECT * from teacher;");
	   }
	   

	  	 /*数据库取出表里面的参数*/
		rs = sqlite3_get_table(db,sql,&dbResult,&nRow,&nColumn,&errMsg);
		
		if(rs == SQLITE_OK)											// 如果成功,以下代码为数据库数据UI显示
		    {
		    	printf("---------------------------------\n");
		    	for(i=1;i<=nColumn;i++)
		    	{
		    		printf("%s \t",dbResult[0*nColumn+i-1]);	    // 输出每个的标题	
		    	}
		    	printf("\n---------------------------------\n");
		    	for(i=1;i<=nRow;i++)
		    	{
		    		for(j=1;j<=nColumn;j++)
		    		{
		    			printf("%s \t",dbResult[i*nColumn+j-1]);	// 输出数据表二维数组每个参数
		    		}
		    		printf("\n---------------------------------\n");
		    	}			
			sqlite3_free_table(dbResult);							// 释放数据库的表格
		    }
		else
		    {
			printf("取值失败(按Enter键进行下一步)...");
			getchar();
		    }
		    
 	   printf("\n请按Enter键进行下一步...\n");
 	   getchar();getchar();
 	   
	   sqlite3_close(db);											// 断开数据库连接
	   
	   return 0;
--------------------------------------------------------------------------------------------------------------
2、学生信息展示函数 void ShowStudentTable(char *Selfuid)	【可以类比管理员信息展示函数】

	   sqlite3 *db=NULL;
	   char *errMsg = 0;
	   int rs,nRow = 0, nColumn = 0,i,j;
	   char *sql;
	   char **dbResult;

	   /* Open database */
	   rs = sqlite3_open("SMS.db", &db);
	   if( rs ){
	      fprintf(stderr, "打不开数据库: %s\n", sqlite3_errmsg(db));
	      return 0;
	   }
	   
	   /* Create SQL statement */
	   sprintf(sql,"SELECT Cgrade,Mgrade,Egrade from student where student.uid='%s';",Selfuid);

	   /* Execute SQL statement */
	   /*数据库取出权限值*/
		rs = sqlite3_get_table(db,sql,&dbResult,&nRow,&nColumn,&errMsg);
		if(rs == SQLITE_OK)
		    {
		    	printf("---------------------------------\n");
		    	for(i=1;i<=nColumn;i++)
		    	{
		    		printf("%s \t",dbResult[0*nColumn+i-1]);
		    	}
		    	printf("\n---------------------------------\n");
		    	for(i=1;i<=nRow;i++)
		    	{
		    		for(j=1;j<=nColumn;j++)
		    		{
		    			printf("%s \t",dbResult[i*nColumn+j-1]);
		    		}
		    		printf("\n---------------------------------\n");
		    	}
			
			sqlite3_free_table(dbResult);
		    }
		else
		    {
			printf("取值失败(按Enter键进行下一步)...");
			getchar();
		    }
	   sqlite3_close(db);
	   
	   printf("\n请按Enter键进行下一步...\n");
 	   getchar();getchar();
	   
	   return 0;
--------------------------------------------------------------------------------------------------------------
3、教师信息展示函数 void ShowTeacherTable(char *Selfuid)	【可以类比管理员信息展示函数】

	   sqlite3 *db=NULL;
	   char *errMsg = 0;
	   int rs,nRow = 0, nColumn = 0,i,j;
	   char *sql;
	   char **dbResult;
	   
	   rs = sqlite3_open("SMS.db", &db);
	   if( rs ){
	      fprintf(stderr, "打不开数据库: %s\n", sqlite3_errmsg(db));
	      return 0;
	   }
	   
	   sprintf(sql,"SELECT distinct student.* from student,teacher where student.class=(select class from teacher where uid='%s');",Selfuid);

	   /*数据库取出权限值*/
		rs = sqlite3_get_table(db,sql,&dbResult,&nRow,&nColumn,&errMsg);
		//printf("%d %d\n",nRow,nColumn);
		if(rs == SQLITE_OK)
		    {
		    	printf("-----------------------------------------------\n");
		    	for(i=1;i<=nColumn;i++)
		    	{
		    		printf("%s \t",dbResult[0*nColumn+i-1]);
		    	}
		    	printf("\n-----------------------------------------------\n");
		    	for(i=1;i<=nRow;i++)
		    	{
		    		for(j=1;j<=nColumn;j++)
		    		{
		    			printf("%s \t",dbResult[i*nColumn+j-1]);
		    		}
		    		printf("\n-----------------------------------------------\n");
		    	}
			
			sqlite3_free_table(dbResult);
		    }
		else
		    {
			printf("取值失败(按Enter键进行下一步)...");
			getchar();
		    }
		    
	   printf("\n请按Enter键进行下一步...\n");
 	   getchar();getchar();
	   sqlite3_close(db);
	   return 0;
  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,基于SQLite3的通讯录管理系统可以实现以下功能: 1. 添加联系人:输入姓名、电话、地址等信息,添加到通讯录中。 2. 删除联系人:根据姓名或电话号码,删除指定的联系人。 3. 修改联系人:根据姓名或电话号码,修改指定联系人的信息。 4. 查询联系人:根据姓名或电话号码,查询指定联系人的信息。 5. 显示所有联系人:将通讯录中所有联系人的信息显示出来。 6. 导出联系人:将通讯录中所有联系人的信息导出到文件中。 7. 导入联系人:从文件中导入联系人信息到通讯录中。 8. 数据备份:将通讯录数据备份到文件中。 9. 数据恢复:从备份文件中恢复通讯录数据。 下面是一个基于Python的SQLite3通讯录管理系统的示例代码,你可以参考一下: ```python import sqlite3 def create_table(): conn = sqlite3.connect('contacts.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS contacts (name text, phone text, address text)''') conn.commit() conn.close() def add_contact(name, phone, address): conn = sqlite3.connect('contacts.db') c = conn.cursor() c.execute("INSERT INTO contacts VALUES (?, ?, ?)", (name, phone, address)) conn.commit() conn.close() def delete_contact(name): conn = sqlite3.connect('contacts.db') c = conn.cursor() c.execute("DELETE FROM contacts WHERE name=?", (name,)) conn.commit() conn.close() def modify_contact(name, phone, address): conn = sqlite3.connect('contacts.db') c = conn.cursor() c.execute("UPDATE contacts SET phone=?, address=? WHERE name=?", (phone, address, name)) conn.commit() conn.close() def search_contact(name): conn = sqlite3.connect('contacts.db') c = conn.cursor() c.execute("SELECT * FROM contacts WHERE name=?", (name,)) result = c.fetchone() conn.close() return result def show_all_contacts(): conn = sqlite3.connect('contacts.db') c = conn.cursor() c.execute("SELECT * FROM contacts") results = c.fetchall() conn.close() return results def export_contacts(): conn = sqlite3.connect('contacts.db') c = conn.cursor() c.execute("SELECT * FROM contacts") results = c.fetchall() with open('contacts.txt', 'w') as f: for result in results: f.write(','.join(result) + '\n') conn.close() def import_contacts(): conn = sqlite3.connect('contacts.db') c = conn.cursor() with open('contacts.txt', 'r') as f: for line in f: line = line.strip() if line: name, phone, address = line.split(',') c.execute("INSERT INTO contacts VALUES (?, ?, ?)", (name, phone, address)) conn.commit() conn.close() def backup_data(): conn = sqlite3.connect('contacts.db') with open('contacts_backup.db', 'w') as f: for line in conn.iterdump(): f.write('%s\n' % line) conn.close() def restore_data(): conn = sqlite3.connect('contacts.db') with open('contacts_backup.db', 'r') as f: sql_lines = f.read().splitlines() for line in sql_lines: conn.execute(line) conn.commit() conn.close() create_table() while True: print('1. 添加联系人') print('2. 删除联系人') print('3. 修改联系人') print('4. 查询联系人') print('5. 显示所有联系人') print('6. 导出联系人') print('7. 导入联系人') print('8. 数据备份') print('9. 数据恢复') print('0. 退出程序') choice = input('请选择操作:') if choice == '1': name = input('请输入姓名:') phone = input('请输入电话:') address = input('请输入地址:') add_contact(name, phone, address) elif choice == '2': name = input('请输入姓名:') delete_contact(name) elif choice == '3': name = input('请输入姓名:') phone = input('请输入电话:') address = input('请输入地址:') modify_contact(name, phone, address) elif choice == '4': name = input('请输入姓名:') result = search_contact(name) if result: print(result) else: print('未找到联系人') elif choice == '5': results = show_all_contacts() for result in results: print(result) elif choice == '6': export_contacts() print('导出成功') elif choice == '7': import_contacts() print('导入成功') elif choice == '8': backup_data() print('备份成功') elif choice == '9': restore_data() print('恢复成功') elif choice == '0': print('再见!') break else: print('无效选择,请重新输入') ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值