c语言编写qq
❶ 用c语言编写一个QQ通讯录管理系统设计
课程设计课程设计名称:数据结构课程设计专业班级:计科××××学生姓名:×××学号:××××××指导教师:课程设计时间:计算机应用技术专业课程设计任务书学生姓名×××专业班级计科××学号××××题目××××××××××课题性质A课题来源D指导教师同组姓名无主要内容学习掌握并熟练运用C语言进行程序设计;针对具体应用问题,选择、设计和实现合适的抽象数据类型;进行简单的需求分析,给出设计方案。任务要求综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用软件奠定基础,达到软件工程的综合性基础训练的目的。完成需求分析报告,报告中对关键部分给出图表说明。要求格式规范,工作量饱满。参考文献《数据结构(C语言版)》严蔚敏清华大学出版社《C语言程序设计》(第三版)谭浩强清华大学出版社审查意见指导教师签字:教研室主任签字:年月日1需求分析手机通讯录系统,以联系人为节点建立伪队列(有头尾指针、且可从表中间进行操作),要实现一下基本功能。增加联系人删除联系人修改联系人清空通讯录查找联系人按分组显示联系人显示全部联系人退出系统2概要设计(1)程序总体框架如图1所示:图1程序框架图(2)序中各函数程简单说明见如表1函数说明所示:返回值函数名参数表函数说明提供客户intmainvoid主函数是voidinitAddressBookLinkQueue&Q初始化通讯录否boolenAddressBookLinkQueue&Q增加联系人是boolupdateLinkQueue&Q修改联系人是booldelPersonLinkQueue&Q删除联系人是boolfindByNameLinkQueue&Q查找联系人是boolfindByGroupLinkQueue&Q按组显示是voiddisAllLinkQueue&Q显示全部联系人是boolclearAddressBookLinkQueue&Q清空通讯录是表1函数说明(2)对程序中的各个函数功能的描述①主函数main:系统开始、结束界面的显示、各个功能函数的调用、转换以及参数的传递、定义通讯头结点并传递给各个功能函数②初始化通讯录函数initAddressBook:初始化主函数传入的头结点,即初始化通讯录,此系统采用伪队列,有头、尾指针,可从中间进行删除操作③增加联系人函数enAddressBook增加联系人到通讯录的尾部,返回增加是否成功。④修改联系人函数按照用户提供的联系人姓名修改联系人所有信息,返回修改是否成功。⑤删除联系人按照用户指定的联系人姓名删除相应联系人信息,返回删除是否成功。⑥查找联系人按照用户提供的联系人姓名查找第一个合法姓名对应的信息,查找成功则显示信息,失败则提示无此联系人,返回是否查找到。⑦按组显示函数按照用户提供的分组名称,查找组中联系人,若存在则全部输出,若不存在则提示无此分组,返回是否超找到合法联系人。⑧显示全部联系人函数显示当前通讯录中所有联系人的信息,若为空通讯录,则显示无联系人。⑨清空通讯录删除所有联系人信息,返回是否成功!⑩通讯录人数函数判断通讯录当前联系人数量,返回之,此函数主要是为清空通讯录函数所调用,故不提供给用户。计3运行环境1)软件环境操作系统:Windows72)硬件环境处理器:IntelPentium166MX或更高内存:32MB以上硬盘空间:1GB以上显卡:SVGA显示适配4开发工具和编程语言MicrosoftvisualC++C语言5详细设//主函数intmain(){LinkQueueQ;initAddressBook(Q);intflag=0;while(flag!=8){printf("※※※※※主※※※※※菜※※※※※单※※※※※\n");printf("※1、增加联系人2、删除联系人※\n");printf("※3、修改联系人4、清空通讯录※\n");printf("※5、查找联系人6、按组显示※\n");printf("※7、显示全部联系人8、退出※\n");printf("※※※※※※※※※※※※※※※※※※※※※※※\n");printf("请输入编号(1-8):\n");scanf("%d",&flag);if(flag8){printf("输入错误请重新输入!\n");continue;}else{switch(flag){case1:if(enAddressBook(Q))printf("增加联系人成功!\n");elseprintf("增加联系人失败!\n");break;case2:if(delPerson(Q))printf("删除联系人成功!\n");elseprintf("联系人删除失败!\n");break;case3:if(update(Q))printf("修改联系人成功!\n");elseprintf("修改联系人失败!\n");break;case4:if(clearAddressBook(Q))printf("通讯录已清空!\n");elseprintf("通讯录清空失败!\n");break;case5:findByName(Q);break;case6:findByGroup(Q);break;case7:disAll(Q);break;case8:system("cls");break;}}}printf("※※※※※感谢您使用本系统!※※※※※※\n");return0;}//初始化通讯录voidinitAddressBook(LinkQueue&Q){Q.front=Q.rear=(QNode*)malloc(sizeof(QNode));if(!Q.front)exit(1);elseQ.front->next=NULL;}//清空通讯录boolclearAddressBook(LinkQueue&Q){system("cls");while(addressBookLength(Q)!=0){QNode*p;p=Q.front->next;Q.front->next=p->next;if(p==Q.rear)Q.rear=Q.front;free(p);}returntrue;}//通讯录当前人数intaddressBookLength(LinkQueue&Q){inti=0;QNode*p;p=Q.front;if(Q.front==Q.rear)i=0;else{while(p!=Q.rear){p=p->next;i++;}}returni;}//删除联系人booldelPerson(LinkQueue&Q){char_name[20];system("cls");printf("请输入要删除的联系人的姓名:\n");scanf("%s",_name);QNode*p,*q;if(Q.front==Q.rear){printf("通讯录为空!\n");returnfalse;}else{p=Q.front;q=Q.front->next;while(q!=Q.rear){if(strcmp(q->name,_name)==0){p->next=q->next;free(q);//删除节点returntrue;}else{p=p->next;q=q->next;}}if((strcmp(q->name,_name)==0)){free(q);Q.front=Q.rear;returntrue;}else{printf("无此联系人!\n");returnfalse;}}}//查找联系人boolfindByName(LinkQueue&Q){system("cls");if(Q.front==Q.rear){printf("手机中无联系人!\n");returnfalse;}else{char_name[20];printf("请输入要查询的联系人姓名:\n");scanf("%s",_name);QNode*p;p=Q.front->next;while(p->next!=NULL){if(strcmp(p->name,_name)==0){printf("姓名:%s号码:%s分组:%s\n",p->name,p->tel,p->group);returntrue;}p=p->next;}if(strcmp(p->name,_name)==0){printf("姓名:%s号码:%s分组:%s\n",p->name,p->tel,p->group);returntrue;}else{printf("查无此人!\n");returnfalse;}}}//按组显示联系人boolfindByGroup(LinkQueue&Q){system("cls");if(Q.front==Q.rear){printf("手机中无联系人!\n");returnfalse;}else{char_group[20];printf("请输入要查询的分组:\n");scanf("%s",_group);QNode*p;p=Q.front->next;while(p->next!=NULL){if(strcmp(p->group,_group)==0){printf("姓名:%s号码:%s\n",p->name,p->tel);}p=p->next;}if(strcmp(p->group,_group)==0){printf("姓名:%s号码:%s\n",p->name,p->tel);returntrue;}else{printf("无此分组!\n");returnfalse;}}}//增加联系人boolenAddressBook(LinkQueue&Q){system("cls");QNode*p;p=(QNode*)malloc(sizeof(QNode));if(!p)returnfalse;else{printf("请输入联系人姓名:\n");scanf("%s",p->name);printf("请输入联系人号码:\n");scanf("%s",&p->tel);printf("请输入联系人分组:\n");scanf("%s",p->group);if(Q.front->next==NULL){Q.front->next=p;Q.rear=p;Q.rear->next=NULL;}else{p->next=NULL;Q.rear->next=p;Q.rear=p;}returntrue;}}//修改联系人boolupdate(LinkQueue&Q){system("cls");if(Q.front==Q.rear){printf("手机中无联系人!\n");returnfalse;}else{char_name[20];printf("请输入要修改的联系人姓名:\n");scanf("%s",_name);QNode*p;p=Q.front->next;while(p->next!=NULL){if(strcmp(p->name,_name)==0){printf("请输入新联系人姓名:\n");scanf("%s",p->name);printf("请输入新联系人号码:\n");scanf("%s",&p->tel);printf("请输入新联系人分组:\n");scanf("%s",p->group);returntrue;}p=p->next;}if(strcmp(p->name,_name)==0){printf("请输入新联系人姓名:\n");scanf("%s",p->name);printf("请输入新联系人号码:\n");scanf("%s",&p->tel);printf("请输入新联系人分组:\n");scanf("%s",p->group);returntrue;}else{printf("查无此人!\n");returnfalse;}}}//显示所有联系人voiddisAll(LinkQueue&Q){system("cls");inti=0;QNode*p;p=Q.front->next;if(Q.front==Q.rear)printf("无联系人!\n");else{printf("姓名号码分组\n");while(p!=NULL){printf("%15s%15s%15s\n",p->name,p->tel,p->group);p=p->next;}}}6调试分析1.测试中的问题举例:在测试删除联系人函数时发现无论通讯录中现存多少条记录只要删除一条之后,通讯录就会被清空,经过检查发现是删除函数中的条件控制设置有错,导致只要一删除一个联系人就会事头结点与尾结点指向同一个,导致再显示联系人时显示无联系人。经过调整已处理好。2.算法改进设想举例:程序中还有很多地方不能很好的模拟通讯录的功能,比如在增肌联系人时,不管原来新联系人姓名是否已存在,都会被加入通讯录,这样一来就有可能重复记录。此外在查找联系人时只要查找到一个合法记录就会中断查找操作,如此有可能导致记录的漏查。结合以上两点应优化增加查找联系人算法,在存入之间进行防重判断。7测试结果1.测试数据举例:姓名手机号分组张三12345678910家人李四12345678911朋友王五12345678912朋友赵六12345678913同学表2测试数据举例2.按如下顺序进行测试:1)将测试数据逐条输入通讯录(测试增加联系人函数)2)显示全部联系人(测试显示联系人函数)3)选择一个联系人进行修改(测试修改联系人函数)4)显示全部联系人(验证修改联系人函数是否有效)5)选择一个联系人进行查找(测试查找联系人函数)6)选择一个多人分组进行按分组显示(测试按分组显示函数)7)选择清空联系人(测试清空联系人函数)8)显示全部联系人(验证清空联系人函数)9)选择退出(退出程序)3、按照如上提供的测试步骤得出以下结果运行图:主菜单如图2所示:图2运行示例图a1)在菜单中选择“1”将测试数据逐条输入通讯录,如图3图3运行示例图b2)在菜单中选择“7”显示全部联系人,如图4图4运行示例图c3)在菜单中选择“3”选择一个联系人进行修改,如图5图5运行示例图d4)在菜单中选择“7”显示全部联系人,如图6图6运行示例图e5)在菜单中选择“5”选择一个联系人进行查找,如图7图7运行示例图f6)在菜单中选择“6”选择一个多人分组进行按分组显示,如图8图8运行示例图g7)在菜单中选择“4”清空联系人,如图9图9运行示例图h8)在菜单中选择“7”显示全部联系人,如图10图10运行示例图i9)在菜单中选择“8”,退出,如图11图11运行示例图j参考文献[1]严蔚敏,《数据结构(C语言版)》清华大学出版社[2]谭浩强.《C语言程序设计》(第三版)清华大学出版社[3]PeterVanDerLinden,C专家编程,人民邮电出版社[4]KennethA.ReekC和指针,人民邮电出版社心得体会通过这次数据结构实践作业,我更深刻的体会到了C语言的语句简洁性、紧凑性,与数据结构思想对于一个程序编码顺利进行的重要性。语言是程序的骨肉,而数据结构和算法即使程序的灵魂,要想成功的编写程序必须选好合适的数据结构,比如这次课程设计中,最开始我准备用普通的线性表进行设计,后来发现那样很不方便,后来改为用“伪队列”之后就方便了许多。另外,我觉得比较重要的一点是在编复杂程序时要有宏观思想,想从整体把握设计好各个板块的调用关系,最好先做出一个流程图,再按照这个总体设想进一步具体、细化!这样才不会在需要调用其它函数时手忙脚乱!此外,进行如上所述的操作前提都是以扎实的语言基础做为前提的,在最开始的代码编辑阶段,我曾被指针很深的困扰,后来对此一节找了些资料进行“补课”,自己也进行的深入的理解,后来才逐渐顺利起来!信息科学与工程学院课程设计成绩评价表课程名称:数据结构课程设计设计题目:×××××专业:计科班级:×××姓名:×××学号:××××××序号评审项目分数满分标准说明1内容思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论严谨,设计有应用价值。任务饱满,做了大量的工作。2创新内容新颖,题目能反映新技术,对前人工作有改进或突破,或有独特见解3完整性、实用性整体构思合理,理论依据充分,设计完整,实用性强4数据准确、可靠数据准确,公式推导正确5规范性设计格式、绘图、图纸、实验数据、标准的运用等符合有关标准和规定6纪律性能很好的遵守各项纪律,设计过程认真;7答辩准备工作充分,回答问题有理论依据,基本概念清楚。主要问题回答简明准确。在规定的时间内作完报告。总分综合意见指导教师年月日
❷ 如何在linux下用c语言编写一个类似qq的聊天软件
语言 望采纳谢谢
/*
* server.c
*
*
Created on: 2012-6-15
*
Author: root
*/
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <error.h>
#include<netinet/in.h>
#define PORT 7999
#define MAX_NUM 3
//client
连接最大个数
#define MAX_CLIENT 15
#define MAX_SIZE 1024
pthread_rwlock_t idx_lock, wait_lock;
//client
信息
typedef struct _client {
int sockfd;
char name[20];
pthread_t pid;
int flg;
} c_client;
c_client client[MAX_CLIENT];//
定义
client;
//
等待的
client
struct _client_ {
int sockfd;
char name[20];
pthread_t pid;
struct _client_ *next;
};
typedef struct _client_ c_client_c;
c_client_c *head = NULL;
c_client_c *temp_c1 = NULL, *temp_c2 = NULL;//
等待的
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
//
初始化
client
信息
void init_client() {
int i = 0;
for (i = 0; i < MAX_CLIENT; i++) {
client[i].sockfd = -1;
memset(client[i].name, 0, 20);
client[i].pid = -1;
client[i].flg = -1;
}
}
//
查找结构体数组中
sockfd
为
-1
的下标值
int find_fd(c_client *client) {
int i = 0;
while (i < MAX_NUM) {
//
printf("====%d\n",client[i].sockfd);
if (client[i].sockfd == -1)
return i;
i++;
}
return -1;
}
//
判断登录格式
int logform(char *buf) {
char *p = strstr(buf, "LOGIN\r\n");
int n = strlen(buf);
char *q = p + n - 4;
if (p != NULL && p + 7 != q && strcmp(q, "\r\n\r\n") == 0)
return 1;
else
return 0;
}
int cmpname(char *buf, c_client *p_client) {
int i = 0;
char *p = strtok(buf + 7, "\r\n\r\n");
while (client[i].sockfd != -1 && client[i].sockfd != p_client->sockfd && i
< MAX_NUM) {
if (strcmp(client[i].name, p) == 0)
return 0;
i++;
}
return 1;
}
//SHOW
void showuser(c_client *p_client) {
int i = 0;
char buf[1024] = { 0 };
strcpy(buf, "200\r\n");
for (i = 0; i < MAX_NUM; i++) {
if (client[i].sockfd != -1) {
sprintf(buf + strlen(buf), "%s\r\n", client[i].name);
}
}
sprintf(buf + strlen(buf), "\r\n");
send(p_client->sockfd, buf, strlen(buf), 0);
}
//ALL
void sendto_all(c_client *p_client, char *buf) {
int i = 0;
char sendbuf[1024] = { 0 };
sprintf(sendbuf, "AFROM\r\n%s\r\n%s", p_client->name, buf + 5);
for (i = 0; i < MAX_NUM; i++) {
if (client[i].sockfd != -1 && client[i].flg != -1)
if(send(client[i].sockfd, sendbuf, strlen(sendbuf), 0) <= 0){
printf("send errrrrr\n");
exit(1);
}
}
}
int findname(char *name) {
int i = 0;
for (i = 0; i < MAX_NUM; i++) {
if (client[i].sockfd != -1 && strcmp(client[i].name, name) == 0)
return client[i].sockfd;
}
return 0;
}
//TO
void sendto_one(c_client *p_client, char *buf) {
int i = 0;
char sendbuf[1024] = { 0 };
char name[20] = { 0 };
char *p = strtok(buf + 4, "\r\n");//TO\r\n
:
4
个字符后取出
\r\n
前的名字
strcpy(name, p);
int sock = findname(name);
if (!sock) {
sprintf(sendbuf, "ERROR2\r\n%s
用户不存在
\r\n\r\n", name);
send(p_client->sockfd, sendbuf, strlen(sendbuf), 0);
} else {
sprintf(sendbuf, "FROM\r\n%s\r\n%s", p_client->name, buf + 4 + strlen(
name) + 2);
if(send(sock, sendbuf, strlen(sendbuf), 0)<=0){
printf("send errrrrr\n");
exit(1);
}
}
}
void pthread_fun(void* cclient);
//quit
void quit(c_client *p_client){
int i=0;
int idx;
char buf[1024] = {0};
c_client_c *temp;
printf("--%s
退出聊天室
\n",p_client->name);
close(p_client->sockfd);
p_client->sockfd = -1;
p_client->pid = -1;
p_client->flg = -1;
sprintf(buf,"NOTICE1\r\n%s
退出聊天室
\r\n\r\n",p_client->name);
memset(p_client->name,0,20);
for(i=0;i<MAX_NUM;i++){
if(client[i].sockfd != -1 && client[i].flg != -1)
send(client[i].sockfd,buf,strlen(buf),0);
}
if(head != NULL && head->next != NULL){
memset(buf,0,1024);
pthread_rwlock_rdlock(&idx_lock);
idx = find_fd(client);
pthread_rwlock_unlock(&idx_lock);
client[idx].sockfd = head->next->sockfd;
pthread_rwlock_wrlock(&wait_lock);
temp = head->next;
head->next = head->next->next;
free(temp);
pthread_rwlock_unlock(&wait_lock);
sprintf(buf,"NOTICE\r\n
您已被唤醒
,
请继续操作
\r\n\r\n");
send(client[idx].sockfd,buf,strlen(buf),0);
if
(pthread_create(&client[idx].pid,
NULL,
(void
*)pthread_fun,(void
*)
&client[idx]) != 0) {
perror("pthread_create");
exit(1);
}
pthread_detach(client[idx].pid);
}
}
void pthread_fun(void* cclient) {
c_client *p_client = (c_client *) cclient;
char buf[MAX_SIZE] = { 0 };
char sendbuf[1024] = { 0 };
int i, n;
char *p;
sprintf(sendbuf, "%s", "NOTICE\r\n
通讯通道开启
\r\n\r\n");
if (send(p_client->sockfd, sendbuf, strlen(sendbuf), 0) <= 0) {
printf("send err\n");
}
memset(sendbuf, 0, 1024);
while (1) {
memset(buf, 0, MAX_SIZE);
n = recv(p_client->sockfd, buf, sizeof(buf) - 1, MSG_NOSIGNAL);
if (n <= 0) {
close(p_client->sockfd);
p_client->sockfd = -1;
break;
}
if (logform(buf)) {
if (cmpname(buf, p_client) == 0) {
send(p_client->sockfd, "ERROR\r\n
用户名重复
\r\n\r\n", 26, 0);
continue;
} else {
p_client->flg = 1;
p = strtok(buf + 7, "\r\n\r\n");
strcpy(p_client->name, p);
sprintf(sendbuf, "100\r\n%s\r\n\r\n", p_client->name);
send(p_client->sockfd, sendbuf, sizeof(sendbuf), 0);
printf("%s
进入聊天室
\n", p_client->name);
for (i = 0; i < MAX_NUM; i++) {
if (client[i].sockfd != -1 && client[i].sockfd
!= p_client->sockfd && client[i].flg != -1)
send(client[i].sockfd, sendbuf, sizeof(sendbuf), 0);
❸ QQ是怎么用c语言写出来的,谁有代码
方法还是有的,第一运行QQ,然后计算QQ账号框所在屏幕的坐标,再模拟鼠标点击账号框,把光标传递给账号框,再模拟键盘输入账号。第二,同上,计算密码框的坐标再模拟键盘输入密码。至于代码是如何实现的,就看你的C语言水平和Win32 API 熟悉的程
❹ 用c语言编写一个QQ登陆的程序有3次机会
#include<stdio.h>
#include<string.h>
#defineNAME"test"
#definePASSWORD"test"
intmain()
{
charusername[20],passwd[20];
intcount=1;
while(1)
{
printf("请输入用户名:");
scanf("%s",username);
printf("请输入密码:");
scanf("%s",passwd);
if(strcmp(username,NAME)==0)
{
if(strcmp(passwd,PASSWORD)==0){printf("恭喜!登录成功! ");break;}
else
{
if(count<3){printf("抱歉!密码输入错误!你还有%d次尝试的机会 ",3-count);count++;}
else{printf("抱歉!密码错误!你已经没有机会了! ");break;}
}
}
else
{
if(count<3){printf("抱歉!用户名输入错误!你还有%d次尝试的机会 ",3-count);count++;}
else{printf("抱歉!密码错误!你已经没有机会了! ");break;}
}
}
return0;
}
❺ 求一个用C语言编写的“QQ会员信息管理系统”
我想了好久也还是没写出来,这是刚才复制别人的,我试了,真的不错
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
struct persion
{
char name[10];
char tep[20];
}student;
int main()
{
int chose;
struct persion *imf_p=&student;
void input(struct persion *p);
void output(struct persion *p);
void change(struct persion *p);
void del(struct persion *p);
void add(struct persion *p);
void end();
printf("\t\t\t\t\t通讯录\n\n");
do
{
printf("\n请正确选择操作:\n");
printf("\n1.全部重输\n2.查看\n3.修改\n4.删除\n5.添加\n6.退出\n\n请选择:");
scanf("%d",&chose);
switch (chose)
{
case 1:
input(imf_p);
break;
case 2:
output(imf_p);
break;
case 3:
change(imf_p);
break;
case 4:
del(imf_p);
break;
case 5:
add(imf_p);
break;
case 6:
end();
}
}
while (1);
}
void input(struct persion *p) //输入
{
FILE *fp;
fp=fopen("imformation.dat","wb");
printf("请输入名字和电话号码:\n");
printf("\n在姓名处输入<-1>结束!\n\n");
while (1)
{
printf("姓名:");
scanf("%s",p->name);
if (!strcmp(p->name,"-1"))break;
printf("电话号码:");
scanf("%s",p->tep);
fwrite(p,sizeof(struct persion),1,fp);
}
fclose(fp);
printf("输入完成!\n");
system("pause");
system("cls");
}
void output(struct persion *p) //查看
{
FILE*fp;
fp=fopen("imformation.dat","rb");
while (1)
{
fread(p,sizeof(struct persion),1,fp);
if (feof(fp))break;
printf("姓名:%s\n",p->name);
printf("电话:%s\n",p->tep);
}
fclose(fp);
system("pause");
system("cls");
}
void change(struct persion *p) //修改
{
int i=0;
char name_change[10],tep_change[20];
FILE*fp1,*fp2;
printf("请输入要修改的人名:");
scanf("%s",name_change);
fp1=fopen("imformation.dat","rb+");
fp2=fopen("temp","wb+");
while (feof(fp1)==0)
{
fread(p,sizeof(struct persion),1,fp1);
if (!strcmp(p->name,name_change))
{
if (feof(fp1))break;
i=1;
printf("请输入新的号码:");
scanf("%s",tep_change);
strcpy(p->tep,tep_change);
}
if (feof(fp1)==0)
fwrite(p,sizeof(struct persion),1,fp2);
}
fclose(fp2);
fclose(fp1);
remove("imformation.dat");
rename("temp","imformation.dat");
if (i==1)
printf("已成功修改!\n");
if (i==0)
printf("没有搜索到文件!\n");
system("pause");
system("cls");
}
void del(struct persion *p) //删除
{
int i=0;
char name_change[10];
FILE*fp1,*fp2;
printf("请输入要删除的人名:");
scanf("%s",name_change);
fp1=fopen("imformation.dat","rb+");
fp2=fopen("temp","wb+");
while (!feof(fp1))
{
fread(p,sizeof(struct persion),1,fp1);
if (!strcmp(p->name,name_change))
{
i=1;
continue;
}
if (!feof(fp1))
fwrite(p,sizeof(struct persion),1,fp2);
}
fclose(fp2);
fclose(fp1);
remove("imformation.dat");
rename("temp","imformation.dat");
if (i==1)
printf("已完成删除操作!\n");
if (i==0)
printf("没有搜索到名字!\n");
system("pause");
system("cls");
}
void add(struct persion *p) //增加
{
FILE *fp1,*fp2;
fp1=fopen("imformation.dat","rb+");
fp2=fopen("temp","wb+");
while (!feof(fp1))
{
fread(p,sizeof(struct persion),1,fp1);
if (!feof(fp1))
fwrite(p,sizeof(struct persion),1,fp2);
}
printf("请输入要增加的名字和电话号码:\n");
printf("\n在姓名处输入<-1>结束!\n\n");
while (1)
{
printf("姓名:");
scanf("%s",p->name);
if (!strcmp(p->name,"-1"))break;
printf("电话号码:");
scanf("%s",p->tep);
fwrite(p,sizeof(struct persion),1,fp2);
}
fclose(fp1);
fclose(fp2);
remove("imformation.dat");
rename("temp","imformation.dat");
printf("输入完成!\n");
system("pause");
system("cls");
}
void end()
{
exit(0);
}
❻ 使用C语言编写QQ会员程序
多加点分啊
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
struct QqVip
{
char name[40];//名
int age;//年龄
int Qb;//Q币
bool sex;//true为男
int timelim;//期限
};
int option()
{
printf("1.查看会员信息\n");
printf("2.查找指定会员\n");
printf("3.添加会员\n");
printf("0.退出\n");
printf("请选择:");
fflush(stdout);
int temp;
scanf("%d",&temp);
fflush(stdin);
return temp;
}
void look(QqVip* vip,int num)
{
printf("会员数:%d\n",num);
if (num<1)
{
return;
}
printf("姓 名\t年龄\t性别\tQ 币\t会员期限\n");
for(int i=0;i<num;i++)
{
printf("%6s\t%4d\t%4s\t%5d\t%8d\n",vip[i].name,vip[i].age,vip[i].sex?"男":"女",vip[i].Qb,vip[i].timelim);
}
}
void add(QqVip* vip,int *num)
{
if(*num>=100)
{
printf("数量已满,无法加入\n");
return;
}
printf("请输入会员姓名、年龄、性别、Q 币、会员期限(以回车分隔):\n");
fflush(stdout);
scanf("%s",vip[*num].name);
scanf("%d",&vip[*num].age);
char sex[5];
scanf("%s",sex);
if (strcmp(sex,"男")==0)
{
vip[*num].sex=true;
}
else
{
vip[*num].sex = false;
}
scanf("%d",&vip[*num].Qb);
scanf("%d",&vip[*num].timelim);
fflush(stdin);
(*num)++;
}
void serch(QqVip* vip,int num)
{
if (num<1)
{
printf("无会员\n");
return;
}
char n[40];
printf("输入要查找会员姓名:");
scanf("%s",n);
fflush(stdin);
for (int i=0;i<num;i++)
{
if (strcmp(vip[i].name,n)==0)
{
printf("该会员信息为:\n");
printf("%6s\t%4d\t%4s\t%5d\t%8d\n",vip[i].name,vip[i].age,vip[i].sex?"男":"女",vip[i].Qb,vip[i].timelim);
fflush(stdout);
break;
}
}
}
void main()
{
int num=0;
QqVip vip[100];
int r;
while(r=option())
{
switch(r)
{
case 1:
look(vip,num);
break;
case 2:
serch(vip,num);
break;
case 3:
add(vip,&num);
break;
default:
break;
}
}
printf("exit..\n");
system("PAUSE");
}
❼ 听人说理论上c语言就可以编译出qq之类的软件,但c语言似乎连控件都没有,那是怎么实现qq功能的
199*年代,最时髦的unix系统,就采用了X-window概念,有许多程序包不但含控件,有许多功能,至今windows系统等等尚未能超越。例如,在一台unix上,就可开一个窗,100%相似地模拟进入远方的另一台机上操作,在这个窗内的操作就完全像自己就在远方机上操作一样。OpenGL, Glut 这些有3维动态原unix的程序包 微软的windows系统上 现在还在用。
视窗系统,习惯用c语言的扩展 即c++, 编写含控件的程序。因为visual studio 和 MFC做了许多前期工作,大大减少了程序员书写 Win ApI 的工作量。qq 实际上只是一个app而已,算不得什么。
❽ 求用C语言写一个可以打开QQ的程序
#include<windows.h>
#include<stdio.h>
void main()
{
HKEY hKey;
LONG iret;
char path[512];
DWORD cbData;
iret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"software\\tencent\\qq",NULL,KEY_QUERY_VALUE,&hKey);
if(iret != ERROR_SUCCESS)
printf("没有安装QQ.\n");
iret=RegQueryValueEx(hKey,"install",NULL,NULL,(LPBYTE)path,&cbData);
if(iret != ERROR_SUCCESS)
printf("查询注册表失败.\n");
RegCloseKey(hKey);
lstrcat(path,"\\qq.exe");
ShellExecute(NULL,"open",path,NULL,NULL,SW_SHOWNORMAL);
}