#import <Foundation/Foundation.h>
#import "sqlite3.h"
@interface UserModel : NSObject
{
sqlite3 *link;
NSString *path;
}
//插入数据
-(void)insertMessageWithAccount:(NSString *)account andPassword:(NSString *)password andNickName:(NSString *)nickName;
//注册时检查账号存在性
-(BOOL)jugdeExist:(NSString *)account;
//登录操作
-(NSString *)loginMethod:(NSString *)account andPassword:(NSString *)password;
@end
#import "UserModel.h"
@implementation UserModel
-(id)init{
self=[super init];
//定义数据库设置
path=@"/Users/feifanchengxuyuan/Desktop/Forum.db";
//打开数据库链接
sqlite3_open([path UTF8String], &link);
//创建用户表的SQL语句
NSString *createUserTable=@"create table if not exists User(userId integer primary key autoincrement,account varchar(20),password varchar(20),nickName varchar(20))";
//执行SQL语句
sqlite3_exec(link, [createUserTable UTF8String],nil,nil,nil);
return self;
}
//插入方法
-(void)insertMessageWithAccount:(NSString *)account andPassword:(NSString *)password andNickName:(NSString *)nickName{
NSString *insertMessage=[NSString stringWithFormat:@"insert into User(account,password,nickName) values(\"%@\",\"%@\",\"%@\");",account,password,nickName];
sqlite3_exec(link, [insertMessage UTF8String] , nil,nil,nil);
}
/*
sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt * 。
这个数据类型 记录了一个“sql语句”。为什么我把 “sql语句” 用双引号引起来?因为你可以把 sqlite3_stmt * 所表示的内容看成是 sql语句,但是实际上它不是我们所熟知的sql语句。它是一个已经把sql语句解析了的、用sqlite自己标记记录的内部数据结构。
sqlite3_stmt * stat;是把一个 sql 语句解析到 stat 结构里去:
*/
//注册时检查账号存在性
-(BOOL)jugdeExist:(NSString *)account{
sqlite3_stmt *stam;
// NSString *accountFromDataBase;
NSString *judge=[NSString stringWithFormat:@"select account from User where account=\"%@\";",account];
sqlite3_exec(link, [judge UTF8String],nil,nil,nil);
//进行预编译
sqlite3_prepare_v2(link, [judge UTF8String], -1, &stam, nil);
//每条数据查找
while (sqlite3_step(stam)==SQLITE_ROW) {
return YES;
}
return NO;
}
//登录操作
-(NSString *)loginMethod:(NSString *)account andPassword:(NSString *)password{
sqlite3_stmt *stmt;
NSString *userName=@"";
NSString * selectAccount=[NSString stringWithFormat:@"select * from User where account=\"%@\";",account];
sqlite3_prepare_v2(link, [selectAccount UTF8String], -1, &stmt, nil);
while (sqlite3_step(stmt)==SQLITE_ROW) {
NSString *passwordFromDataBase=[[NSString alloc]initWithCString:(char *)sqlite3_column_text(stmt, 2) encoding:NSUTF8StringEncoding];
if ([passwordFromDataBase isEqualToString:password]) {
userName=[[NSString alloc]initWithCString:(char *)sqlite3_column_text(stmt, 3) encoding:NSUTF8StringEncoding];
}
}
return userName;
}
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITableView *listTableView;
@property (weak, nonatomic) IBOutlet UILabel *messageLabel;
@property (weak, nonatomic) IBOutlet UIButton *writeButton;
@property (weak, nonatomic) IBOutlet UIButton *registerButton;
@property (weak, nonatomic) IBOutlet UIButton *loginButton;
@property (weak, nonatomic) IBOutlet UIButton *quitButton;
- (IBAction)quitMethod:(id)sender;
@end
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)NSUserDefaults *userDefault;
@end
@implementation ViewController
-(void)viewDidAppear:(BOOL)animated{
NSLog(@"-----viewDidAppear-----");
_userDefault=[NSUserDefaults standardUserDefaults];
NSString *userName=[_userDefault valueForKey:@"name"];
NSLog(@"登录名:%@",userName);
if (userName == nil) {
_messageLabel.text=@"你好,游客。发帖请登录。";
_loginButton.hidden=NO;
_registerButton.hidden=NO;
_writeButton.hidden=YES;
_quitButton.hidden=YES;
}else{
_messageLabel.text=[NSString stringWithFormat:@"用户:%@,欢迎回来",userName];
_loginButton.hidden=YES;
_registerButton.hidden=YES;
_writeButton.hidden=NO;
_quitButton.hidden=NO;
}
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"-----viewDidLoad-----");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)quitMethod:(id)sender {
NSLog(@"注销方法");
[_userDefault removeObjectForKey:@"name"];
_messageLabel.text=@"你好,游客。发帖请登录。";
_loginButton.hidden=NO;
_registerButton.hidden=NO;
_writeButton.hidden=YES;
_quitButton.hidden=YES;
}
@end
@interface RegisterViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *accountTextFeild;
@property (weak, nonatomic) IBOutlet UITextField *nickNameTextFeild;
@property (weak, nonatomic) IBOutlet UITextField *passWordTextFeild;
@property (weak, nonatomic) IBOutlet UITextField *writeAgainTextFeild;
- (IBAction)back:(id)sender;
- (IBAction)registMethod:(id)sender;
@end
#import "RegisterViewController.h"
#import "UserModel.h"
@interface RegisterViewController ()
@end
@implementation RegisterViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)back:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)registMethod:(id)sender {
UserModel *user=[[UserModel alloc]init];
NSString * userAccount=_accountTextFeild.text;
NSString *userPassword=_passWordTextFeild.text;
NSString *userAgain=_writeAgainTextFeild.text;
NSString *userNickName=_nickNameTextFeild.text;
if ([userAccount length]>=6&&[userAccount length]<=16&&[userPassword length]>=6&&[userPassword length]<=16&&[userAgain length]>=6&&[userAgain length]<=16&&[userNickName length]>=6&&[userNickName length]<=16) {
if ([userPassword isEqualToString:userAgain]) {
if ([user jugdeExist:userAccount]) {
NSLog(@"账号存在");
}else{
[user insertMessageWithAccount:_accountTextFeild.text andPassword:_passWordTextFeild.text andNickName:_nickNameTextFeild.text];
}
}
else{
NSLog(@"两次密码输入不一致");
}
}else {
NSLog(@"信息填写不正确");
}
}
@end
#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *accountTextFeild;
@property (weak, nonatomic) IBOutlet UITextField *passwordTextFeild;
@property (weak, nonatomic) IBOutlet UILabel *message;
- (IBAction)loginMethod:(UIButton *)sender;
- (IBAction)back:(id)sender;
@end
#import "LoginViewController.h"
#import "UserModel.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)back:(id)sender {
[self dismissViewControllerAnimated:NO completion:nil];
}
- (IBAction)loginMethod:(UIButton *)sender {
UserModel *userModel=[[UserModel alloc]init];
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];
NSString *name=[userModel loginMethod:_accountTextFeild.text andPassword:_passwordTextFeild.text];
if (![name isEqualToString:@""]) {
[userDefault setValue:name forKey:@"name"];
[userDefault synchronize];
[self performSegueWithIdentifier:@"longinSuccess" sender:nil];
}else{
_message.text=@"登录失败,请重试";
}
NSLog(@"%@",[userDefault valueForKey:@"name"]);
// [self dismissViewControllerAnimated:NO completion:nil];
}
@end