Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录

目录

系统功能要求

相关软件要求

设计思路

程序功能图

功能流程图

C程序的编写运行

程序运行效果

总结与分析

附录(C程序代码)


系统功能要求

1、用户需要用户名和密码登录才能对通讯录进行各种操作

2、用户登录后可修改自己的密码

3、用户登录后可以对个人通讯录进行增、删、改、查的功能

4、不能对别的用户的通讯录进行任何操作

 

相关软件要求

  1. 编程语言:C语言,并采用gcc编译器编译
  2. 操作系统:任何一个发行版本的Linux均可,推荐ubuntu
  3. Linux下要安装mysql.h库函数
  4. 数据库服务器采用mysql5或以上版本,安装在linux或windows下的mysql均可

 

设计思路

程序功能图

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第1张图片

功能流程图

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第2张图片

设计过程

MySQL的配置编写

MySQL的安装从网上下载MySQL5.6离线安装包进行安装,具体安装可以参考

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第3张图片

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第4张图片

 

下载MySQL图形化界面MySQL workbench

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第5张图片

创建连接连接,进入数据库,创建university数据库,建立一个信息表

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第6张图片

create database university; #新建数据库university

create table tongxun(

    user char(10),

    password char(10),

    name char(10),

    sex char(10),

    phone char(10),

    email char(10)

)

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第7张图片

 

Tongxun表的属性(用户,用户密码,联系人姓名,联系人性别,联系人电话,联系人邮箱)

将部分信息先插入tongxun表中

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第8张图片

C程序的编写运行

C程序连接MySQL数据库语句

sql = mysql_init(NULL);

sql = mysql_real_connect(sql,"localhost","root","123456dyy","university",0,NULL,0);

 C语言执行mysql查询语句

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第9张图片

C语言执行mysql插入语句

C语言执行mysql删除语句

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第10张图片

 C语言执行mysql更改语句

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第11张图片

程序运行效果

使用gcc 对程序进行编译

 使用./运行程序

如果输入错误密码将会给出提示并跳出程序

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第12张图片

输入正确密码将会进入操作界面

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第13张图片

选择1将会修改用户登录密码

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第14张图片

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第15张图片

选择2会查询当前登录的用户的联系人信息

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第16张图片

 选择3会删除该用户的某个联系人的信息,只要输入联系人姓名即可

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第17张图片

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第18张图片

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第19张图片

 选择4将会为该用户添加新的联系人

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第20张图片

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第21张图片

 选择5可以为该用户修改某个联系人的某个数据

Linux——Ubuntu中使用C语言连接Mysql数据库做一个简单的通讯录_第22张图片

总结与分析

我也学会了怎么在Linux系统下安装和使用MySQL数据库,以及C程序连接MySQL数据库的方式。本次实验对我来说,耗时最久的并不是程序的编写,反而是Linux环境下的mysql数据库的安装和使用,我在网上找了很多如何去安装MySQL数据库教程,但基本上都失败了。

在程序的编写过程中,难度较高的是如何使用MySQL语句,因为像插入和删除等操作是需要对sql语句进行修改的,一开始我尝试了+的方式,但是这种方式只适合C#和Java这些语言,C语言并不能使用这种方式。后来我在书上找到了新的方法,就是使用sprintf()语句,用%s的方式去改变mysql语句。对于数据库表格的创建我一开始打算使用多表结合的方式,但这样每个用户需要一张表,如果用户过多需要的表格数量就太大了,所有最终我使用了一张数据库表格的方式,这种方式的严谨性较低,但复杂度低。

附录(C程序代码)

#include "stdio.h"
#include "mysql.h"
#include "unistd.h"

MYSQL_RES *result;
MYSQL_ROW row;
MYSQL *sql;

char a[10]/*,b[10]*/;  //username password
char *b;
char qs[100];

void psw(){
	char psw[10];
//	char qs[100];
	printf("please input your new password\n");
	scanf("%s",psw);
	//char select_query[] = "update tongxun set password='123' where name='zk'";
	sprintf(qs,"update tongxun set password='%s' where user='%s'",psw,a);
	if (mysql_query(sql, qs) != 0) {
		fprintf(stderr, "修改失败!\n");
		exit(1);
	}else{
		printf("password update success\n");
	}  
}

void upd(){
	char n[10], kind[10],value[10];
	printf("please input your address list name\n");
	scanf("%s",n);
	printf("please input your need to update message's kind(name/sex/phone/email) and value\n");
	scanf("%s %s",kind,value);
	sprintf(qs,"update tongxun set %s='%s' where user='%s' and name='%s'",kind,value,a,n);
	if (mysql_query(sql, qs) != 0) {
		fprintf(stderr, "修改失败!\n");
		exit(1);
	}else{
		printf("password update success\n");
	}
}

void del(){
	char n[10];
	printf("please input your message need to be deleted(need the name)\n ");
	scanf("%s",n);
	sprintf(qs,"delete from tongxun where name='%s' and user='%s'",n,a);
	if(mysql_query(sql, qs) != 0){
		fprintf(stderr, "修改失败!\n");
		exit(1);
	}else{
		printf("修改成功\n");
	}
}

void req(){
	sprintf(qs,"select *from tongxun where user='%s'",a);
//	char myque[] = "select *from message";
	if (mysql_query(sql, qs) != 0) {
		fprintf(stderr, "查询失败!\n");
		exit(1);
	}else{
		if ((result = mysql_store_result(sql)) == NULL) {
			fprintf(stderr, "保存结果集失败!\n");
			exit(1);
		}else{
			 printf("\nname\tsex\tphone\temail\n\n");

		 	while ((row = mysql_fetch_row(result)) != NULL){
				printf("%s\t%s\t%s\t%s\n",row[2],row[3],row[4],row[5]);
			}
		}

	}
}	

void add(){
	char n[10],s[10],p[10],e[10];
	printf("please input your need new message about address list(name sex phone email)\n");
	scanf("%s %s %s %s",n,s,p,e);
//	printf("%s %s %s %s\n",n,s,p,e);
	sprintf(qs,"insert into tongxun(user,password,name,sex,phone,email) values('%s','%s','%s','%s','%s','%s')",a,b,n,s,p,e);
	if(mysql_query(sql,qs) != 0){
		fprintf(stderr,"添加失败\n");
		exit(1);
	}else{
		printf("添加成功\n");
	}
}

void interface(){
	int o = 1,k;
	while(o){
		printf("please choose your command\n");
		printf("1.change your password\n");
		printf("2.request your address list message\n");
		printf("3.delete your address list message\n");
		printf("4.add your address list message\n");
		printf("5.change your address list message\n");
		printf("please choose:   ");
		scanf("%d",&k);
		switch(k){
			case 1:psw(); break;
			case 2:req(); break;
			case 3:del(); break;
			case 4:add(); break;
			case 5:upd(); break;
			case 0: o = 0; break;

		}
		system("clear");
		if(o!=0){printf("\n");system("pause");}
	}
}

int main()
{
	sql = mysql_init(NULL);
	sql = mysql_real_connect(sql,"localhost","root","123456dyy","university",0,NULL,0);
	if(sql) 
	{
		printf("connect mysql success\n");
	//	char a[10],b[10];
		printf("please print yourname\n");
		scanf("%s",a);
	//	printf("please print yourpwd\n");
	//	scanf("%s",b);
		b = getpass("please print yourpwd\n"); 
	//	printf("%s   %s\n",a,b);
		char select_query[] = "select * from tongxun";
//		printf("SQL语句: %s\n", select_query);
		if (mysql_query(sql, select_query) != 0) {
			fprintf(stderr, "查询失败!\n");
			exit(1);
		}else{																							
			if ((result = mysql_store_result(sql)) == NULL) {
				fprintf(stderr, "保存结果集失败!\n");		
				exit(1);
			}										
			else {

				while ((row = mysql_fetch_row(result)) != NULL){
				//	printf("name is %s , ", row[0]);			
				//	printf("password is %s\n", row[1]);
					
					if(strcmp(a,row[0])==0 && strcmp(b,row[1])==0){
						printf("register success\n");
						interface();
						exit(1);
					}
				}
				printf("yourname or password is mistake\n");
			}
		}
	}

	else printf("mistake\n");
	return 0;
}

 

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论 

你可能感兴趣的:(work,Linux)