精华内容
下载资源
问答
  • c语言编c语言编写注册登录的程序c语言编写注册登录的程序写注册与登录的程序
  • c语言编写注册登录的程序 c语言编写注册登录的程序
  • C语言编写聊天室

    2018-07-17 09:20:33
    聊天室中,本人将用户信息单独存放在数据库中 功能:私聊,群聊,登录注册,查看在线联系人,退出,创建数据库
  • C语言编写的ATM取款机

    2008-09-15 13:13:09
    C语言编写 包括需求文档 ATM机 ATM机共分五块功能,分别是:账户管理功能、账务管理功能、查询功能、文件功能及其它功能。它们具体功能如下。 账户管理功能: a) 账户注册 b) 账户登录 c) 账户数据 c.1 账户号长度12...
  • 客户端登录到服务器; 2.客户端在服务器注册 3.客户端与服务器交流 运行环境:linux 备注:程序编写后,运行在两个虚拟机之上,运用多进程,允许多个客户端连接,客户端退出交流时输入exit,服务器再输入exit即可。...
  • 注册命令:enroll zhangsan 123 登录命令:enter zhangsan 123 插入命令:insert book 1 english 2 显示命令:show book 删除命令:delete book ISBN 1 更新命令:update book math 1 关闭数据库:close ...
  • Linux 环境下利用消息队列消息机制,多线程通信,字符串处理,链表操作,信号简单处理等知识用C语言编写多人聊天室实现: 服务器实现各用户之间聊天的消息转发,在用户注册或者登录时对各用户进行消息提醒,客户端从...
  • C语言完成的宿舍管理系统中的登录注册用户模块
  • 在创建的项目下面创建一个纯文本文档,里面存储着用户名和密码,怎么创建c语言程序(使用链表)编写登录注册程序!求各位大神求解(注册的用户自动加入到文档里面)
  • C语言TCP通信程序

    2016-06-12 12:05:39
    C语言编写的TCP/IP通信程序,包括服务器、客户端发送端和接收端,实现了注册登录、私聊、群聊等功能。
  • C语言 银行存储系统

    2012-12-09 09:55:31
    C语言编写的银行系统,能实现正常的注册新用户、登录、存取款、转账、查询、退出等功能
  • if (strcmp(s_name,name)==0 && strcmp(s_mima,mima)==0) printf("登录成功!\n"); else printf("登录失败!\n"); printf("请输入IP地址"); while(gets(str)!=NULL) { if(scanf(str,"%r.%r.%r.%r",&o,&p,&q,&r)==4 ...
  • 玩英雄联盟:注册——登录——选区——选地图——全军出击… 计算机中的程序 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。 关键词:有序、指令、集合 C语言简介 应用范围...

    C语言零基础入门(C Prime Plus )——初识C语言(一)

    1. 什么是程序
      “程序”一词来自日常生活,通常指完成某些事物的既定方式和过程

      例:大象放冰箱:打开冰箱门——放入冰箱——关上冰箱
      玩英雄联盟:注册——登录——选区——选地图——全军出击…

    2. 计算机中的程序
      为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合
      关键词:有序、指令、集合

    C语言简介

    • 应用范围:⑴文字处理程序及电子表格
      ⑵编译器
      ⑶操作系统
      ⑷大型网络游戏
    • 特点:⑴结构化的程序设计语言
      ⑵语言简洁
      ⑶可移值性好
      ⑷功能强大(一切程序的底层)

    C语言的开发工具

    • ⑴记事本+命令行(专业大佬,上手慢)
      ⑵Dev C++(体积小,性能不友好,05年后已放弃更新)
      ⑶Visual C++(只能用于 Windows 操作系统,主要用于 Unix/Linux 操作系统)
      ⑷Code::Blocks(目前如日中天的开源免费C/C++开发工具)
      ⑸Visual Studio(win首选,免费,需自己配插件)

    C语言程序的基本结构

    #include<stdio.h>
    int main(void)                                /*一个简单的C程序*/
    {
        int num;                                  /*定义一个名为num的变量*/
        num = 1;                                  /*为num赋一个值*/
        
        printf("I am a simple");                  /*使用printf()函数*/
        printf("computer.\n");
        pientf("My favorite number is %d because it is first.\n",num);
        
        return 0;
    }
    

    详细讨论代码的含义
    1.#include指令和头文件

    #include
    

    这行代码是一条C预处理指令,不是必须的,但是如果一旦程序中有该语句,就必须将它放在程序的开始处。

    以.h为后缀的文件我们称为头文件,也可以是C标准库中的头文件,也可以是自定义文件。

    stdio.h 文件包含了有关输入输出语句的函数。有些程序包含stdio.h,而有些不用。特定C实现的文档中应该包含C库函数的说明。这些说明确定了使用哪些函数需要包括哪些头文件。
    例如:要使用printf()函数,必须包含stdio.h头文件。

    2.main()函数

    int main(void)
    

    main()函数是C程序处理的起点/入口。

    main()函数可以返回一个值,也可以不返回值,如果某个函数没有返回值,那么在它前面就是关键字void。

    int是main()函数的返回类型。

    你还可以看到下面这种形式:

    void main()
    

    一些编译器允许这样写,但是所有的标准都未认可这种写法。

    3.花括号、函数体和块

    {
            ......
    }
    

    一般而言,所有的C函数都使用花括号标记函数体的开始和结束。这是规定,不能省略。只有花括号({ })能起这种作用,圆括号(())和方括号([ ])都不行。

    4.声明

    int num;
    

    这行代码叫做声明。声明是C语言最重要的特性之一。

    int 是C语言的一个关键字,表示一种基本的C语言数据类型。

    在C语言中,所有变量都必须先声明才能使用。

    5.赋值

    num = 1;
    

    这行代码是赋值表达式语句。赋值是C语言的基本操作之一,这行代码的意思是“把值1赋给变量num”。注意,该赋值表达式语句从右侧把值赋到左侧。

    6.printf()

    printf("I am a simple");           
    printf("computer.\n");
    pientf("My favorite number is %d because it is first.\n",num);
    

    这3行都使用了C语言的一个标准函数:printf()。圆括号表明printf是一个函数名。

    printf的作用是在屏幕上打印一行文字"I am a simple"并换行(\n)

    换行符是一个转义序列。转义序列用于代表难以表达或无法输入的字符。如,\t代表Tab键,\b代表Backspace键(退格键)。每个转义序都以反斜杠字符(\)开始。

    8.return语句

    return 0;
    

    return语句是程序的最后一条语句。有返回值的C函数要有return语句。并以分号结尾。

    9.注释

     /*一个简单的C程序*/
    

    被/* */两个符号括起来来的部分是程序的注释。C语言注释的好处之一是,可将注释放在任意的地方,甚至是与要解释的内容在同一行。较长的注释可单独放一行或多行。

    单行注释:以“//”开头,只能写成一行。

    编写代码时注意:不要使用中文的标点符号,所有符号成对写。

    C语言的编译和执行

    • 编译:形成目标代码/文件,目标代码是编译器的输出结果。常见扩展名为“.o”或“.obj”
    • 连接:⑴将目标代码跟C函数库相连,并将源程序所用的库代码与目标代码合并
      ⑵形成最终可执行的二进制机器代码(可执行程序)
    • 执行:在待定的机器环境下运行C应用程序
    展开全文
  • C语言编写,Linux平台和windows(64)位平台可用。主体结构采用双向循环链表。另外用到了文件I/O,可以保留信息,重新运行程序,只要不人为删除,以前的信息都能读取到。 包含:1)管理员 2)用户 3)管理员注册等...
  • 本压缩包内为用C语言编写的英语单词本程序,实现的功能包括增删添改单词、单词学习背诵、用户登录注册、用户打卡记录、错题收集等,是文章《程序设计:用C语言写一个单词本》...欢迎大家下载。
  • C语言做的ATM机程序

    2008-09-25 19:46:21
    这是一个用C语言编写的ATM机程序,包括:帐户注册登录、存款、取款、转帐、修改密码、存款查询、取款查询、余额查询等操作。此程序仅用于学习研究之用。因时间有限难免会有一些不足之处,如果大家有什么问题可以给...
  • 大一下学期工程实践课程的作业内容,系统完全由c语言编写,采用dev-c++开发,数据类型为结构体数组,用户信息和图书信息保存在本地文本文件中,主要功能有:1、以管理员或读者不同身份注册账户。2、登录、找回密码、...
  • 1,vs2012中c编写的模拟知乎网站。 2,实现用户注册登录,退出。 3,用户登录后可以提问,回答问题,查询问题及其回复。 4,文档直接换成.cpp就可运行,在vc6.0上需要修改部分函数。
  • 目录概述头文件、声明等主函数编写登录/注册界面编写1、注册/登录框架编写2、“注册”子函数编写3、“登录”子函数编写主菜单编写效果图主界面“注册”功能“登录”功能跳转主菜单后记 概述 在索引文章中提到,本文...

    概述

    索引文章中提到,本文进行的是单词本程序整体框架的代码编写,包括头文件及声明、主函数编写、主菜单编写等,话不多说,直接上代码:

    头文件、声明等

    #include<stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include<time.h>
    #define SIZE 1000
    char mingzi[20];
    char shuru[8];
    void printInfo();
    void Register();
    void Loading();
    void RegisterorLoading();
    void Menu();
    void Visit();
    void Vocabulary();
    void danciyulanordancixuexi();
    void cuotiben();
    void Exit();
    void delword();
    void addword();
    void findword();
    

    这边必须提醒大家的是,上述代码包含了整个单词本程序所有涉及到的需要进行声明的子函数、头文件等,并不是只对本文提到的主函数、主菜单函数等进行声明。

    主函数编写

    int main()
    {
    	RegisterorLoading();     //注册与登录界面
    	Menu();                 //菜单界面
    	Exit();                  //退出界面
    	return 0;
    }
    

    为了提高代码的可读性,主函数中只进行子函数调用,所有功能都编写子函数实现。

    登录/注册界面编写

    1、注册/登录框架编写

    void RegisterorLoading()      //注册与登录界面
    {
         int i;                                  //选择登录或注册的变量
    	printInfo();                       //窗口界面美观
    	scanf("%d",&i);             
    	system("cls");                   //清空已有窗口界面
        switch(i)
        { case 1 : Register(); getchar();getchar();                 //跳转注册或登录
    	  case 2: Loading();system("cls"); break;
    	}
    }
    

    其中“printInfo()”函数用于使界面较为美观,其源码如下:

    void printInfo()           //界面外形框
    {
    	printf("\n\n\n\n\n");
    	printf("\t                                     ***************************\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &         1.注册          &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &         2.登录          &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &                         &\n");
    	printf("\t                                     &**************************\n\n");
    }
    

    “printInfo()”函数只是起到使界面美观的作用,笔者为了方便,只在最开始演示一次,如果大家对界面的美观度要求较高,可以照着上述代码对之后的代码做一点修改,就能达到相同的页面效果。

    2、“注册”子函数编写

    void Register()                        //用户名注册
    {
    	int dk=1;                        //打卡数
    	char yonghuming1[20],mima1[8],mima2[8],mima3[8],mm[8];       //用户名,第一次设的密码,第一次确认的密码,第一次确认密码错误时第二次确认的密码,最终存入文件的密码。
    	FILE *fp;
    	fp=fopen("D:\\Ctext\\yonghushuju.txt","a+");
    	if(!fp)
    	{
    		printf("file error\n");
    		exit(1);
    	};
        printf("请注册你的用户名:\n");
    	scanf("%s",yonghuming1);
        printf("请输入密码:\n");
    	scanf("%s",mima1);
        printf("请确认密码:\n");
    	scanf("%s",mima2);
    	if(!strcmp(mima1,mima2))               //如果第一次输入的密码与确认的密码一致则注册成功。
    		   {
    			 strcpy(mm,mima1);
    			 printf("注册成功!");
    			 
    		   }
    	else
    		 {
    			 printf("请再次确认密码:\n");
    			 scanf("%s",mima3);
    			 if(!strcmp(mima1,mima3))    //若第一次不一致则需第二次确认一致。
    			 {
    				 strcpy(mm,mima1);
    				 printf("恭喜你,注册成功!\n");
    			 }
    	        else
    				{ printf("注册失败!\n");getchar();getchar();    //密码两次确认不一致则注册失败直接退出。
    			 exit(1);}
    		 }
    	fprintf(fp,"%s %s %d\n",yonghuming1,mm,dk);      //用户名与密码还有初始打卡数存入文件。
    	fclose(fp);
    }
    

    3、“登录”子函数编写

    void Loading()          //登录
    {
    	int ch=0;                   //中间变量,用来判断用户名是否存在。
    	typedef struct yhsj      //定义结构体
    		{
    	char name[20];
    	char password[8];
    	int dkts;
    		}sj;
    	sj yhxx[1000]; //定义结构体数组,用来存储用户信息
    	int i=0;      //循环变量
    	FILE *fp;     //定义文件指针
    	fp=fopen("D:\\Ctext\\yonghushuju.txt","r");//以只读的形式打开用户数据文件
    	if(!fp)
    		{
    			printf("file error!\n");
    			exit(1);
    		}             //若打开失败,则退出程序
    	printf("请输入用户名登录:\n");
    	scanf("%s",mingzi);   //将用户输入的信息存储到字符数组中
    	fscanf(fp,"%s%s%d",yhxx[i].name,yhxx[i].password,&yhxx[i].dkts);       
    	while(!feof(fp))
    		{
              i++;
    		  fscanf(fp,"%s%s%d",yhxx[i].name,yhxx[i].password,&yhxx[i].dkts);
    		}                  //将文件里所有的用户信息读入结构体
    	fclose(fp);       //关闭文件
    	for (i=0;i<1000;i++)
    		{
    			if(!strcmp(mingzi,yhxx[i].name))    //判断用户数据文件里是否有与之相配的用户名
    			{
    				ch=1;                               //若存在该用户名,则将ch赋值为1;
    				printf("请输入密码:\n");
    				scanf("%s",shuru);
    				if(!strcmp(shuru,yhxx[i].password))   //将用户输入的密码与用户数据文件中的密码比对
    					{printf("登录成功!(请按回车继续)\n");
    						getchar();getchar();}           //停顿
    				else
    				{
    					printf("密码错误,请重新输入:\n");
    					scanf("%s",shuru);
    					if(!strcmp(shuru,yhxx[i].password))         //再次进行密码比对
    					{ printf("登录成功!(请按回车继续)\n");
    						getchar();getchar();}
    					else 
    					{
    						printf("输入错误次数过多,再见!\n");
    						getchar();getchar();exit(1);         //密码输入次数超限,停顿后直接结束程序。
    					}
    				}
    			}
    		}
    	if(ch==0)      //用户数据文件里找不到该用户名,引导进行用户注册
    	{printf("无此用户名,请注册!\n");getchar();getchar();
    		exit(1);}
    }
    

    主菜单编写

    void Menu()
    {
    
    	int i;           //选择变量,用于后面做选择。
    	do{
    		    printf("主菜单\n");
    			printf("1.查看单词本\n");
    	        printf("2.编辑单词本\n");
    	        printf("3.单词学习\n");	
    			printf("4.查看错题集\n");	
    			printf("0.退出\n");
    			printf("请输入您的选择:");
    			scanf("%d",&i);
    			getchar();
    			switch(i)         //菜单栏往下跳转
    			{
    			case 1: Visit();break;
    			case 2:Vocabulary();break;
    			case 3:danciyulanordancixuexi();break;
    			case 4:cuotiben();break;
    			case 0: Exit();
    			default:printf("请输入正确的选择!\n");
    			}
    
    	}while(i);
    }
    

    效果图

    主界面

    主界面

    “注册”功能

    注册页面

    “登录”功能

    登录页面

    跳转主菜单

    主菜单

    后记

    至此,单词本程序的主菜单及整体框架已经基本编写完成,接下来将进行“查看单词本”功能的编写
    ————————————————————————
    2021.03.24更新:刚刚看到自己上传的源码需要积分才能下载,enm如果大家没有积分的话,可以微信搜索我的个人公众号“茶迁”或者扫描下图,关注后在后台回复“单词本”,就可以直接拿到源码啦。我平时也会在公众号发一些编程相关的文章,欢迎大家关注~
    茶迁

    展开全文
  • 目录 一、任务及要求分析 ...2.3注册登录 2.3.1 注册 2.3.2登录 2.3.3 通信 2.3.4 关闭服务器,断开连接 三、调试过程中出现的问题及相应解决办法 四、程序源码及其注释 4.1 Server.h 4.2 Serv...

    目录

    一、任务及要求分析

    二、实验过程

    2.1 程序框架设计

    2.1.1源文件导图

    2.2.2 Server和Client窗口视图及属性介绍

    2.2 数据库准备

    2.3注册及登录

    2.3.1 注册

    2.3.2登录

    2.3.3 通信

    2.3.4 关闭服务器,断开连接

    三、调试过程中出现的问题及相应解决办法

    四、程序源码及其注释

    4.1 Server.h

    4.2 Server.cpp

    4.3 main.cpp

    4.4 client.h

    4.5 client.cpp

    4.6 main.cpp


    任务

    聊天工具的设计与实现

    要求

    编写一个基于Linux操作系统+ C语言的聊天应用程序,涉及的知识:多进程、进程通信、Qt、MySQL等知识。

    基本功能

    两个主机端(服务器和客户端)进行图形化界面通信;

                                一、任务及要求分析

    编写一个基于Linux操作系统+ C语言的聊天应用程序,涉及的知识:多进程、进程通信、Qt、MySQL等知识。

    1. 创建两个主机端,分别为服务器Server和客户端Client,两个主机可以进行图形化界面通信。
    2. 使用mysql创建数据库ly,创建两个表user和chat,分别用于存储用户信息和通信内容信息。
    3. 使用QT实现图形化界面,通过QT Designer设计窗口。

     

                                二、实验过程

    2.1 程序框架设计

    2.1.1源文件导图

    创建两个项目,分别人Client和Server,创建相关文件。

    2.2.2 Server和Client窗口视图及属性介绍

    使用QT自带的ui设计模块,按照如下图进行设计。

    xx.ui文件在运行时,会自动创建ui_xx.h头文件。

     

     

    2.2 数据库准备

    在终端打开mysql,创建数据库ly,创建表user用于存储用户信息,创建表chat用于存储通信内容及相关信息。

    为表user添加新用户:用户名为ly,密码为1234。

    表chat为空。

     

    2.3注册及登录

    2.3.1 注册

    输入用户名和密码,点击注册按钮,进行用户注册。注册成功显示“注册成功!”,否则显示“注册失败”。

    注册成功后,在终端打开mysql,查询user表,新增一条记录。

    2.3.2登录

    输入用户名和密码,用户存在且密码正确显示“登录成功!”,否则显示“登录失败!”。

    登录后,再次登录会显示“已登录”。

     

    2.3.3 通信

    在各自输入区输入信息后,点击发送,会同时显示到两个窗口的通信内容记录框内。

     

     同时,打开数据库查看chat表,新增记录。

    2.3.4 关闭服务器,断开连接

     


                   三、调试过程中出现的问题及相应解决办法

    问题一:客户端无法连接到服务器。

    解决办法:在Server.pro和Client.pro文件中添加语句:

                                         QT += network sql

     

    问题二:通信内容不能是中文,如果输入中文会乱码。

    解决方法:在数据传输过程中,采用utf-8编码。

     

    问题三:使用QT连接mysql时,连接不上,显示错误信息“...not load”。Mysql配置有问题,QT版本过高(5.9)也会导致无法连接。

    解决方法:重新配置mysql,下载低版本QT(5.6)。

     

    问题四:安装完mysql后,第一次运行时,会提示输入密码,但密码是随机生成的,根本不知道密码,无法进入mysql。

    解决方法:打开/etc/my.cnf文件,加上一行代码skip-grant-tables,表示无密码运行mysql。然后再直接用mysql -uroot登录,发现登录成功。然后执行sql语句修改密码 update user set Password='密码' where User='root'。最后把之前加的那段代码删掉,就可以使用自己的密码登录了。

     

    问题五:编写完代码后成功运行,然后我想改一下文件名,改完之后,程序不能运行。报错:invalid use of incomplete type 'class Ui::Server'ui(new Ui:: Server)。

    解决方法:在其对应的ui文件中,整个界面的ObjectName没有进行更改,打开其对应的ui文件,将其ObjectName更改即可。ObjectName即是在Designer界面下,选中控件后右边属性框的前列,修改名称后,重新构建,发现构建成功。


                                     四、程序源码及其注释

    4.1 Server.h

    #ifndef SERVER_H
    #define SERVER_H
    
    #include <QDialog>
    #include <QTcpSocket>
    #include <QTcpServer>
    #include <QMessageBox>
    #include <QDebug>
    #include <QDateTime>
    #include <QSqlError>
    #include <QSqlDatabase>
    #include <QSqlQuery>
    
    namespace Ui {
    class Server;
    }
    
    class Server : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit Server(QWidget *parent = 0);
        ~Server();
    
    private slots:
    	// 定义函数,在cpp里实现。
        void on_stopButton_clicked();
        void acceptConnection();
        void sendMessage();
        void displayError(QAbstractSocket::SocketError);
        void receiveMessage();
        void saveMessage(QString , QString , QString);
    private:
        Ui::Server *ui;
        QTcpServer *tcpServer;
        QTcpSocket *tcpSocketConnection;
    };
    
    #endif
    

    4.2 Server.cpp

    #include "server.h"
    #include "ui_server.h"
    
    Server::Server(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Server)
    {
        ui->setupUi(this);
        tcpServer=new QTcpServer(this);
    	// 调用listen监听端口,设置IP地址和端口号。
        if (!tcpServer->listen(QHostAddress::Any, 7777)) {
                qDebug() << tcpServer->errorString();
                close();
            }
        tcpSocketConnection = NULL;
    	// 连接信号newConnection
        connect(tcpServer,SIGNAL(newConnection()),this,SLOT(acceptConnection()));
        // 将发送按钮和sendMessage函数关联起来
    	connect(ui->pbtnSend,SIGNAL(clicked(bool)),this,SLOT(sendMessage()));
    }
    
    Server::~Server()
    {
        delete ui;
    }
    
    void Server::acceptConnection()
    {
    	// 调用nextPendingConnection获取连接进来的socket
        tcpSocketConnection = tcpServer->nextPendingConnection();
    	// 根据不同的信号将tcpSocketConnection和相关函数关联
        connect(tcpSocketConnection,SIGNAL(disconnected()),this,SLOT(deleteLater()));
        connect(tcpSocketConnection,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));
        // 接受Client发来的消息,readyRead()准备读取信号,异步读取数据。
    	connect(tcpSocketConnection, SIGNAL(readyRead()), this, SLOT(receiveMessage()));
    }
    
    // 关闭服务器,断开连接。
    void Server::on_stopButton_clicked()
    {
        tcpSocketConnection->abort();
        QMessageBox::about(NULL,"Connection","服务器关闭,连接终止。");
    }
    
    // 向Client发送消息
    void Server::sendMessage()
    {
    	//获取 输入框 里所输入的信息。
        QString str = ui->textEdit_input->text();
        //获取当前时间
    	QDateTime time = QDateTime::currentDateTime();
        QString nowtime = time.toString("yyyy-MM-dd hh:mm:ss");
        //显示在Server的消息记录里
    	ui->textEdit_log->append(nowtime + "    Server:");
        ui->textEdit_log->append("    " + str);
    
    	tcpSocketConnection->write(ui->textEdit_input->text().toUtf8());
        // 将这条内容的有关信息存储到mysql。
    	saveMessage(nowtime, "Server", str);
    }
    
    // 存储到mysql
    void Server::saveMessage(QString time, QString user, QString content)
    {
    	// 连接并打开mysql
        QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
        dataBase.setHostName("localhost");
        dataBase.setUserName("root");
        dataBase.setPassword("123456");
        dataBase.setDatabaseName("ly");
        dataBase.open();
        QSqlQuery query(dataBase);
        QString sql=QString("select *from chat");
        query.exec(sql);
        if(query.numRowsAffected() == 0)
        {
    		// 将信息insert到chat表里。
              QString savesql = QString("INSERT INTO chat(time, user, content)");
              savesql += QString(" VALUES('%1','%2','%3')").arg(time).arg(user).arg(content);
         }
    }
    // 接收从Client发送来的消息。
    void Server::receiveMessage()
    {
    
        QDateTime time = QDateTime::currentDateTime();
        QString nowtime = time.toString("yyyy-MM-dd hh:mm:ss");
        // 使用readAll函数读取所有信息
    	QString str = tcpSocketConnection->readAll();
        ui->textEdit_log->append(nowtime + "    Client:");
        ui->textEdit_log->append("    " + str);
    
    }
    // 异常信息
    void Server::displayError(QAbstractSocket::SocketError)
    {
         qDebug() << tcpSocketConnection->errorString();
    }
    

    4.3 main.cpp

    #include "server.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Server w;
        w.setWindowTitle("Server");
        w.show();
    
        return a.exec();
    }
    

    4.4 client.h

    #ifndef CLIENT_H
    #define CLIENT_H
    
    #include <QDialog>
    #include <QTcpSocket>
    #include <QObject>
    #include <QMessageBox>
    #include <QDebug>
    #include <QDateTime>
    #include <QSqlError>
    #include <QSqlDatabase>
    #include <QSqlQuery>
    
    namespace Ui {
    class Client;
    }
    
    class Client : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit Client(QWidget *parent = 0);
        ~Client();
    
    private slots:
        void on_connectButton_clicked();
        void receiveMessage();
        void displayError(QAbstractSocket::SocketError);
        void sendMessage();
        bool check(QString ,QString );
        void on_logonbutton_clicked();
        void saveMessage(QString , QString , QString);
    
    private:
        Ui::Client *ui;
        QTcpSocket *tcpSocket;
    
    };
    
    #endif // CLIENT_H
    

    4.5 client.cpp

    #include "client.h"
    #include "ui_client.h"
    
    Client::Client(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Client)
    {
        ui->setupUi(this);
        tcpSocket = new QTcpSocket(this);
    	// 关联登录按钮和函数,进行确认登录并连接到服务器
        connect(ui->connectButton,SIGNAL(clicked()),this,SLOT(on_connectButton_clicked()));
        connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(displayError(QAbstractSocket::SocketError)));
        // 接受Server发来的消息,readyRead()准备读取信号,异步读取数据。
    	connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveMessage()));
    	// 将发送按钮和sendMessage函数关联起来
        connect(ui->pbtnSend2,SIGNAL(clicked(bool)),this,SLOT(sendMessage()));
    
    }
    
    Client::~Client()
    {
        delete ui;
    }
    
    // 连接数据库,判断所输入的用户名和密码是否正确
    bool Client::check(QString ID, QString PW)
    {
        QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
        dataBase.setHostName("localhost");
        dataBase.setUserName("vici");
        dataBase.setPassword("123456");
        dataBase.setDatabaseName("ly");
        dataBase.open();
        QSqlQuery showquery(dataBase);
        QString showsql=QString("select *from user;");
        showquery.exec(showsql);
        if(showquery.numRowsAffected() != 0)
        {
            while(showquery.next())
            {
                if(showquery.value(0).toString() == ID && showquery.value(1).toString() == PW)
                    return true;
            }
        }
        return false;
    }
    
    // 登录按钮,登录信息正确则连接到服务器
    void Client::on_connectButton_clicked()
    {
        if(tcpSocket->state()!=QAbstractSocket::ConnectedState)
        {
    		// 获取用户名和密码
            QString ID = ui->IDLineEdit->text();
            QString PW = ui->PWLineEdit->text();
    		
    		// 检查
            if(check(ID, PW))
            {
                tcpSocket->connectToHost("127.0.0.1", 7777);
    
                if(tcpSocket->waitForConnected(10000))
                {
                    QMessageBox::about(NULL, "Connection", "登录成功!");
                }
                else
                {
                    QMessageBox::about(NULL,"Connection","登录失败!");
                }
            }
    
        }
        else
            QMessageBox::information(NULL,"","已登录。");
    }
    
    // 发送信息,并存储到数据库
    void Client::sendMessage()
    {
        QString str = ui->textEdit_input2->text();
        QDateTime time = QDateTime::currentDateTime();
        QString nowtime = time.toString("yyyy-MM-dd hh:mm:ss");
        ui->textEdit_log2->append(nowtime + "    Client:");
        ui->textEdit_log2->append("    " + str);
        tcpSocket->write(ui->textEdit_input2->text().toUtf8()); //toLatin1
        saveMessage(nowtime, "Client", str);
    }
    
    // 接收Server发来的消息,并显示到消息记录框里。
    void Client::receiveMessage()
    {
        QDateTime time = QDateTime::currentDateTime();
        QString nowtime = time.toString("yyyy-MM-dd hh:mm:ss");
        QString str = tcpSocket->readAll();
        ui->textEdit_log2->append(nowtime + "    Server:");
        ui->textEdit_log2->append("    " + str);
    }
    // 将信息存储到数据库
    void Client::saveMessage(QString time, QString user, QString content)
    {
        QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
        dataBase.setHostName("localhost");
        dataBase.setUserName("root");
        dataBase.setPassword("123456");
        dataBase.setDatabaseName("ly");
        dataBase.open();
        QSqlQuery query(dataBase);
        QString sql=QString("select *from chat");
        query.exec(sql);
        if(query.numRowsAffected() == 0)
        {
              QString savesql = QString("INSERT INTO chat(time, user, content)");
              savesql += QString(" VALUES('%1','%2','%3')").arg(time).arg(user).arg(content);
         }
    }
    
    // 注册按钮,并存储到数据库里。
    void Client::on_logonbutton_clicked()
    {
        QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");
        dataBase.setHostName("localhost");
        dataBase.setUserName("vici");
        dataBase.setPassword("123456");
        dataBase.setDatabaseName("ly");
        dataBase.open();
        QSqlQuery query(dataBase);
        QString ID = ui->IDLineEdit->text();
        QString PW = ui->PWLineEdit->text();
        QString sql=QString("select *from user");
        query.exec(sql);
        if(query.numRowsAffected() == 0)
        {
              QString savesql = QString("INSERT INTO user(ID, PW)");
              savesql += QString(" VALUES('%1','%2')").arg(ID).arg(PW);
              bool ok=query.exec(savesql);
              if(ok)
              {
                   QMessageBox::about(NULL, "Save", "注册成功!");
              }
              else
              {
                   QMessageBox::about(NULL, "Save", "注册失败!");
              }
         }
    }
    
    void Client::displayError(QAbstractSocket::SocketError)
    {
        qDebug() << tcpSocket->errorString();
    }
    

    4.6 main.cpp

    #include "client.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Client w;
        w.setWindowTitle("Client");
        w.show();
    
        return a.exec();
    }
    

     

    展开全文
  • 用户注册登录程序 在给出的参考程序代码基础之上,对程序进行进一步修改、补充、完善功能。比如:用户名密码的多次输入验证;注册信息除用户名密码外可增加内容;登录时增加验证码输入验证功能;增加用户管理模块,...

    计算机程序设计语言课程设计

    一、课程设计目的

    主要学习编写中、大型程序的过程和步骤,学习程序的调试技巧和方法,从而能用C语言程序来解决一般实际问题。通过该课程设计,使学生理解和掌握软件设计的过程和步骤,学会基本程序调试技巧和方法,锻炼查找书本之外知识的能力,进而自己解决程序设计过程中问题。

    二、课程设计内容

    用户注册登录程序

    在给出的参考程序代码基础之上,对程序进行进一步修改、补充、完善功能。比如:用户名密码的多次输入验证;注册信息除用户名密码外可增加内容;登录时增加验证码输入验证功能;增加用户管理模块,可对已有用户进行修改、删除、改密等等操作。

    主要程序代码、常量变量、结构体、数组、函数等要加注释。
    1.增添了账号和密码的多次验证
    2.注册信息时除了基本的用户名和密码还增加了手机号和昵称
    3.登录时,找回密码时都增加了验证码验证功能
    4.增加了通过用户名和手机号来找回密码的功能

    按现在给出部分参考参考源代码
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h> //定义杂项函数及内存分配函数 stdlib.h里面定义了五种类型、一些宏和通用工具函数。
    #include <string.h> //字符串处理 C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等
    #define USER_MAX 20 //此系统能存放最多的用户数
    #define N 4 //在进行验证码验证时会用到

    typedef struct
    {
    char name[10];
    char password[10];
    char telephoneNumber[11];
    char nickname[20];

    } User;
    //定义一个存放用户的结构体,结构体类型的名称为User

    User list[USER_MAX]; //定义一个全局数组,类型是User,大小是USER_MAX

    char* filename = “user.txt”; //需要在你的程序目录下新建一个user.txt文件

    User login() //登录函数
    {

    char name[10];                      //用户名
    char password[10];                  //密码
    User lg;                            //定义结构体变量Ig
    printf("请输入您的账号(不要超过10个字符):\n");
    scanf("%s",name);
    strcpy(lg.name , name);             //字符串复制函数
    printf("请输入您的密码(不要超过 10 个字符):\n");
    scanf("%s",password);
    strcpy(lg.password,password);
    
    return lg;
    

    }

    void writeToFile(User u) //写入txt文件,每一行存在一个用户
    {
    FILE *fw = fopen(filename,“a+”); //fw为文件类型指针变量 a+:打开已存在文件,准备在尾部追加数据进行读或写
    fprintf(fw,u.name); //fprintf传送格式化输出到一个文件中
    fprintf(fw,"\t");
    fprintf(fw,u.password);
    fprintf(fw,"\t");
    fprintf(fw,u.telephoneNumber);
    fprintf(fw,"\t");
    fprintf(fw,u.nickname);
    fprintf(fw,"\n");
    }

    int exist(User u) //判断是否存在该用户
    {
    int i;
    for(i=0; i<USER_MAX; i++)//strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。
    //基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数
    {
    if(strcmp(list[i].name ,u.name)==0 && strcmp(list[i].password ,u.password)==0)
    {
    return 1;
    }
    }
    return -1;
    }

    void registerUser() //注册用户
    {
    char name[10];
    char password1[10],password2[10];
    char telephoneNumber[11];
    char nickname[20];
    User user; //定义一个名称为user的User结构类型
    int i,j;
    printf(“请输入您的账号(不要超过10个字符):\n”);
    scanf("%s",name);
    strcpy(user.name , name); //字符串复制函数

    for(i=0; i<USER_MAX; i++)  //判断注册的用户是否已存在
    {
        if(strcmp(list[i].name ,name)==0)
        {
            printf("警告:账号已经存在!\n");
            return;
        }
    }
    
    printf("请输入您的手机号码(不要超过 11 个字符):\n");
    scanf("%s",telephoneNumber);
    strcpy(user.telephoneNumber, telephoneNumber);
    for(j=0; j<USER_MAX; j++)              //判断绑定的手机号是否已存在
    {
        if(strcmp(list[j].telephoneNumber ,telephoneNumber)==0)
        {
            printf("警告:电话号码已经存在!\n");
            return;
        }
    }
    printf("请输入您的昵称(不要超过 20 个字符):\n");
    scanf("%s",nickname);
    strcpy(user.nickname, nickname);
    
    printf("请输入您的密码(不要超过 10 个字符):\n");//
    scanf("%s",password1);
    printf("请再次输入您的密码(不要超过 10 个字符):\n");
    scanf("%s",password2);
    if(strcmp(password1,password2)==0)
    {
    strcpy(user.password , password1);
    writeToFile(user); 
    printf("账户注册成功,请牢记您的账号和密码!\n");//将user写入txt文件
    }
    else
    {
    	printf("警告:两次输入的密码不一致,即将退出程序!\n");
    	return;
    }
    

    }

    int menu() //定义开始菜单
    {
    int choice;
    printf("\n");
    printf("| 欢迎来到用户注册登录程序 |");
    printf("\n");
    printf("| 1.登陆 |\n");
    printf("| 2.注册 |\n");
    printf("| 3.找回用户的密码 |\n");
    printf("| #.离开 |\n");
    printf("
    \n");
    printf("\n");
    printf(“请输入你的选择,并按回车结束:”);
    scanf("%d",&choice);
    return choice;
    }

    void verificationCode(char str[],int k){ //提供验证码的函数
    int i,j,len;
    char pstr[]=“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”;
    len=strlen(pstr);
    srand(time(0));
    for(i=0;i<k;i++){
    j=rand()%len;
    str[i]=pstr[j];
    }
    str[i]=’\0’;
    }

    参考运行部分截图如下(仅为部分截图)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    设计总结的部分流程图
    在这里插入图片描述
    学习到了结构体类型和结构体变量,如何来定义一个结构体变量,对文件的各种操作。文件指针变量:FILE *文件类型指针变量名。
    ffopen 函数的调用格式 FILE *fp=fopen (文件说明符,操作方式);
    r w a t b + 的不同含义
    关闭文件 fclose(文件类型指针);
    正常关闭函数返回0值,否则则返回一个非零值。
    字符串读写函数
    (1).读字符串函数
    调用格式:fgets(字符数组,n,文件类型指针);
    (2).写字符串函数
    调用格式:fputs(字符数组,文件类型指针);
    格式化读写函数
    (1).按格式读函数fscanf()
    调用格式:fscanf(文件类型指针,格式控制串,输入项表);
    (2).按格式读函数fprintf()
    调用格式:fprintf(文件类型指针,格式控制串,输出项表);
    在完善用户注册登录程序的过程中,需要增添很多自己创造的函数,比如验证码产生函数,验证验证码函数,并丰富结构体变量,写入自己需要的变量,在找回密码的时候需要对文件中的内容进行操作。
    在登录时进行账号密码的多次验证的时候,需要用到多次循环,验证验证码的时候也需要进行多次循环,找回密码的函数可以参照登录函数来进行编写。复习了之前学过的字符串复制函数和字符串比较函数。在编写代码的过程中也出现了很多的错误,需要不断的去调整代码进而消除错误,在改错的时候有时候会出现以前没有思路。对用户界面的调整也需要一遍遍地运行程序来进行改善,各个功能界面也需要进行调整。删除不合适的代码,替换成简洁明了的代码。
    虽然编写的程序不是很复杂,但这能让我们把学到的理论知识运用到实践当中,能使我们更有激情。有些东西需要靠自学来完成,许多以前没学好的东西需要上网去搜索它的使用方法,在编程中遇到的各种小错误会让人烦躁不安,要克服这种心理,锻炼自己的逻辑思维。通过这一次的C语言实践,我掌握和利用C语言进行程序设计的能力肯定有了大幅度的提高。

    需要完整版设计报告请私信我
    或者联系QQ:2645956844
    或者联系微信:LYC2645956844
    或者QQ邮箱:2645956844@qq.com

    展开全文
  • [C] 基于TCP及sqlite3的在线查询词典的简单代码..编程小白,代码可能比较冗长,请各位大佬指出不足 [*・...注册,登录,退出 查询单词 查询历史记录 运行现象 客户端注册登录(有注册时用户名重复的判断,但图片没有体现)
  • 登录注册功能 <p>(2)分配用户 <p>(3)用户功能和权限设置 <p>(4)其他 目前已经有的代码是:  #include <stdio.h>typedef struct _Student{ int nStuNum; char ...
  • 日记管理系统

    2012-12-15 15:41:14
    日记管理系统,c语言编写,包含用户注册登录功能以及好友访问功能
  • 简明批处理教程22009年10月20日 星期二 下午 05:35 最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古...
  • 设备信息管理系统

    2017-05-27 11:30:02
    设备信息管理系统,基于C语言使用VC++6.0编写,有用户登录注册,以及设备的增删查改
  • 背景 随着信息化时代的发展,各种网址软件的注册登录信息越来越...用于C语言编写,所以只提供控制台界面,后期有机会会进行优化 2.添加账户信息 3.查看所有账户信息 4.删除账户信息 5.修改账户信息 6.修改登录密码
  • 浅谈PHP语法(1)

    2020-12-17 16:12:07
    如一些网站的会员制崐的会员注册登录都需后端程序的运行。很多网站所用的CGI程序主要用Perl、ASP、Java、PHP编写,而我们所要用的就是PHP。它是完全免崐费的,这就要感谢那些默默无闻的编程人员了。PHP的结构类似...
  • 图书管理系统.zip

    2020-06-25 09:20:03
    本系统采用c语言编写,内涵大量注释,适合新手及小白做c语言的课程设计使用。 系统中包含用户注册,文件保存,读写。增删改查,组合查询,分级菜单等基本操作。 下载后博主提供免费咨询答疑服务。 void save_user...
  • QQ设计第1-5步

    2017-03-01 09:39:18
    第1步:使用Glade 3 设计界面第2步:读懂 server.c 和 client.c 源代码第3步:读我编写的 chat_server 和 chat_client (GTK 与... 客户端——登录界面(用户名、密码,登录按钮, 注册) 技术:C语言(socket, thr

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

c语言编写注册登录

c语言 订阅