本文目录一览:
- 1、用C语言如何对MySQL数据库进行操作
- 2、如何用C实现对SQL数据库的操作?
- 3、找点能看的c语言视频教程
- 4、C语言网上谁的视频比较好。
- 5、用C语言怎么实现与数据库的连接
- 6、怎样用C语言编写一个学生数据库系统系统
用C语言如何对MySQL数据库进行操作
有时为了性能,我们会直接用C语言来开发相关的模块,尤其在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口,然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译。 if defined(_WIN32) || defined(_WIN64)为了支持windows平台上的编译#includewindows.h#endif#includestdio.h#includestdlib.h #includemysql.h 我的机器上该文件在/usr/local/include/mysql下 定义MySQL数据库操作的宏,也可以不定义留着后面直接写进代码 defineSELECT_QUERYselectusernamefromtbb_userwhereuserid=%dintmain(intargc,char**argv)char**argv相当于char*argv[]{MYSQL mysql,*sock;定义数据库连接的句柄,它被用于几乎所有的MySQL函数 MYSQL_RES *res;查询结果集,结构类型 MYSQL_FIELD *fd ;包含字段信息的结构 MYSQL_ROW row ;存放一行查询结果的字符串数组 char qbuf[160];存放查询sql语句字符串 if(argc!=2){//检查输入参数 fprintf(stderr,usage:mysql_selectuserid\n\n);exit(1);}mysql_init(mysql);if(!(sock=mysql_real_connect (mysql,localhost,dbuser,dbpwd,9tmd_bbs_utf8,0,NULL,0))){ fprintf(stderr,Couldn'tconnecttoengine!\n%s\n\n,mysql_error(mysql));perror();exit(1);}sprintf(qbuf,SELECT_QUERY,atoi(argv[1])); if(mysql_query(sock,qbuf)){ fprintf(stderr,Queryfailed(%s)\n,mysql_error(sock));exit(1);}if(!(res=mysql_store_result(sock))){fprintf(stderr,Couldn'tgetresultfrom%s\n,mysql_error(sock));exit(1);}printf(numberoffieldsreturned:%d\n,mysql_num_fields(res));while(row=mysql_fetch_row(res)){printf(Theruserid#%d'susernameis:%s\n,atoi(argv[1]),(((row[0]==NULL)(!strlen(row[0])))?NULL:row[0])); puts(queryok!\n);}mysql_free_result(res); mysql_close(sock);exit(0);return0;为了兼容大部分的编译器加入此行} 编译的时候,使用下面的命令 gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况运行的时候,执行下面的命令 ./mysql_select 1 将返回如下结果: numberoffieldsreturned:1 Theruserid#1'susernameis:Michaelqueryok!上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档源码天空 ,各个函数都有详细说明,有时间我整理一份常用的API说明出来。
如何用C实现对SQL数据库的操作?
#include stdio.h #include stdlib.h #include string.h #include "util.h" #include sqlca.h`` EXEC SQL INCLUDE SQLCA;main(){EXEC SQL BEGIN DECLARE SECTION; char firstname[13]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sample; EXEC SQL SELECT FIRSTNME INTO :firstname FROM employee WHERE LASTNAME = 'JOHNSON'; printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET;return 0;}上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 (2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。
找点能看的c语言视频教程
;wh=aigozi
;wh=aigozi
;wh=aigozi
;wh=aigozi
三级网络技术视频教程 集中了考试所有的难点和重点知识的精深讲解,可以保证既不漏掉考试必需的知识点,又不加重考生备考负担,使考生轻松、愉快地掌握知识点并领悟三级网络技术考试的真谛。 ;wh=aigozi
网络安全设备与技术视频教程 介绍网络安全设备种类及工作原理、优缺点和典型应用。 ;wh=aigozi
项管、数工、网工、监理考友的福音:希赛图书整体提供 为帮助广大考友、网友顺利通过考试,希赛共组编了近40本辅导用的数字图书和纸版图书,积淀了希赛多年的软考辅导经验。 ;wh=aigozi
数据库系统工程师视频教程 对近几年的数据库工程师考试中所有知识点进行了归类分析和总结,并针对这些重点、难点进行了详细的讲解。 ;wh=aigozi
二级C语言视频教程 集中了考试所有的难点和重点知识的精深讲解,可以保证既不漏掉考试必需的知识点,又不加重考生备考负担,使考生轻松、愉快地掌握知识点并领悟二级C考试的真谛。 ;wh=aigozi
提交IT资料,就可获得数千元人民币! 希赛下载中心采取与用户分享的方式,凡是提交资料的,只要有人下载,希赛就给提交者人民币现金。下载的人越多,提交者就分得越多。一个资料可以获得上万的收入,还等什么呢! ;wh=aigozi
全国计算机等级考试视频教程 学习完教程后,就可以通过计算机等级考试。学赛网在线测试平台还可以进行在线测试。 ;wh=aigozi
希赛教育瑞星网络安全工程师 本课程是由瑞星公司从事信息安全工作多年的专家、资深工程师及希赛教育高级讲师,将其经验加以总结、提炼,从网络安全的基础知识到网络安全整体规划进行了详细剖析,在课程中介绍了大量的网络安全案例,帮助学员在掌握网络安全基础知识的同时,快速掌握网络安全维护的实际应用技能;同时,本课程还特别介绍了网络安全相关计算机病毒防范和处理,使学员能深入了解计算机病毒知识,并掌握病毒防范和查杀技能。 ;wh=aigozi
Linux服务器配置及命令讲解视频教程 Linux服务器配置及命令讲解与演示,包括服务器配置,管理,网络操作,常用命令的讲解和实际演示。 ;wh=aigozi
路由器和交换机配置命令讲解与演示视频教程 路由器和交换机配置命令讲解与演示,包括交换机配置和命令的讲解与演示,路由器的配置和命令的讲解与实际演示。 ;wh=aigozi
如何一次通过全国计算机等级考试 希赛教育2008年计算机等级考试网上辅导,考试不及格者,退还所有学费。 ;wh=aigozi
网站规划建设与管理维护视频教程 介绍网站建设的全过程,包括准备物理网络,构建Intranet, Internet接入,网站规划设计与建设,网站管理与维护,网站应用开发等。 ;wh=aigozi
自考数据库系统原理视频教程 由具有丰富教学经验的高级讲师讲解,讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好的理解、掌握相关知识点。 ;wh=aigozi
信息系统项目管理师视频教程 本教程就考试中经常出现的一些问题进行了归纳和总结,压缩了所有考试重点和难点知识。所总结的考试重点知识包括了(综合知识、案例分析、论文)实际考试时除专业英语以外的95%以上的考试知识点,而这些知识点几乎在每次考试中都会出现。 ;wh=aigozi
软考视频教程 根据最新的考试大纲,对考试中所有知识点进行了归类分析和总结,挖掘出了其中的考试重点和难点,指出了考试的命题方向以及每个知识点在实际考试中所占的分数比例。 ;wh=aigozi
知识管理视频教程 使学员能全面了解知识管理的理论和体系,掌握知识管理规划与实施的方法和技术。 ;wh=aigozi
自考离散数学视频教程 涉及的主要内容有集合论、图论、数理逻辑、代数系统、组合数学以及有限状态自动机理论。 ;wh=aigozi
Microsoft .NET框架程序设计视频教程 通过对.NET核心技术的讲解,帮助学员了解.NET框架如何为众多高级语言和应用程序模型提供各种服务。 ;wh=aigozi
自考面向对象程序设计(C++版)视频教程 讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好的理解、掌握相关知识点。 ;wh=aigozi
数据库系统工程师考试试题分类精解 根据最新的数据库系统工程师考试大纲,对2004年11月至2007年11月的考试试题进行了分析和总结,对考试大纲规定的内容有重点地进行了细化和深化。 ;wh=aigozi
计算机专业英语视频教程 由具有丰富教学经验的教授讲解,讲解分11个部分,从不同方面精选了53篇英语短文,进行全方位的讲解。 ;wh=aigozi
关于加入学赛网高职高专会员的邀请函 希赛顾问团下设有高职高专计算机教学指导委员会,以促进高职高专计算机教学改革,使之培养的人才更加符合企业的实际需求,实现企业和人才之间的无缝集成。免费在学赛网高职高专频道发布会员单位详细简介、推荐2名优秀教师;会员单位的师生参加培训和购买视频,可享受超低优惠;为会员单位教师出版学术著作和教材提供资助... ;wh=aigozi
JAVA程序设计视频教程 以Sun公司的J2SE 1.4.2为标准,详细介绍了了面向对象编程的基本思想和方法;Java 2语言。 ;wh=aigozi
程序员视频教程 对考生在备考过程中最易产生疑问的知识点以及考试中常考知识点进行了较深入的探讨和总结,并配以例题进行详细的解说,是备考的得力助手。 ;wh=aigozi
自考计算机原理与体系结构视频教程 由具有丰富教学经验的高级讲师讲解,讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好理解、掌握相关知识点。 ;wh=aigozi
二级JAVA语言视频教程 集中了考试所有的难点和重点知识的精深讲解,可以保证既不漏掉考试必需的知识点,又不加重考生备考负担,使考生轻松、愉快地掌握知识点并领悟二级Java考试的真谛。 ;wh=aigozi
二级C++语言视频教程 集中了考试所有的难点和重点知识的精深讲解,可以保证既不漏掉考试必需的知识点,又不加重考生备考负担,使考生轻松、愉快地掌握知识点并领悟二级C++考试的真谛。 ;wh=aigozi
系统分析师视频教程 本视频教程就考试中经常出现的一些问题进行了归纳和总结,压缩了所有考试重点和难点知识。所总结的考试重点知识包括了(基础知识、案例分析、论文)实际考试时除专业英语以外的90%以上的考试知识点,而这些知识点几乎在每次考试中都会出现。 ;wh=aigozi
如何获得瑞星网络安全工程师 通过瑞星网络安全认证考试的学员(学习课程2个月后,在学赛网远程测试平台进行测试),可以获得由瑞星公司颁发的《网络安全工程师》认证。 ;wh=aigozi
自考计算机组装与维护视频教程 主要介绍微型计算机组成原理及其组装与维护技术。 ;wh=aigozi
网络工程师视频教程 由工作在软考第一线的专家根据历年来的考试辅导、阅卷、教材编写的经验,总结考生复习中的弱点、难点、疑点编写而成。 ;wh=aigozi
企业无线网络解决方案集 该专题涵盖:无线知识,解决方案和成功案例、用户调查、产品对比、无线网络学术论文、相关下载、厂商名录等内容。为用户了解无线网络提供了便利,为企业选择无线网络方案以及相关产品提供了参考,得到了网友的好评。 ;wh=aigozi
IT项目管理视频教程 根据PMBOK2004知识体系,结合我国IT项目建设和管理的实际情况,对信息系统项目管理所涉及的知识领域进行了详细的讲解。 ;wh=aigozi
自考C语言程序设计视频教程 帮助学习者能更好的理解、掌握相关知识点,内容涵盖了计算机专业《C语言程序设计》课程的所有知识点。 ;wh=aigozi
软件设计师视频教程 由全国著名的软件工程专家张友生与资深软考辅导专家王勇主编和讲解,其最大的特色是采取以“考点为中心,有取有舍”的讲课。 ;wh=aigozi
二级Access数据库视频教程 集中了考试所有的难点和重点知识的精深讲解,可以保证既不漏掉考试必需的知识点,又不加重考生备考负担,使考生轻松、愉快地掌握知识点并领悟二级Access考试的真谛。 ;wh=aigozi
如何快捷通过计算机自考? 希赛教育2008年计算机专业全国高等教育自考辅导,考试不及格者,退还所有学费! ;wh=aigozi
二级Visual FoxPro语言视频教程 集中了考试所有的难点和重点知识的精深讲解,可以保证既不漏掉考试必需的知识点,又不加重考生备考负担,使考生轻松、愉快地掌握知识点并领悟二级Visual FoxPro考试的真谛。 ;wh=aigozi
软件配置管理视频教程 学习完本教程,学员将能使用CVS和VSS工具进行软件版本控制。 ;wh=aigozi
UML建模实践视频教程 其涉及的主要内容有UML相关概念的讲解、UML的类元、UML的关系介绍、以及UML的九种图的讲解。 ;wh=aigozi
跟踪最新的IT技术-《IT人员新技术宝典丛书》 希赛为了让读者能跟踪计算机领域各方面的新技术、新知识,确定单位自己的发展方向,特组编了《IT人员新技术宝典丛书》 ;wh=aigozi
自考局域网组网技术视频教程 由具有丰富教学经验的高级讲师讲解,讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好的理解、掌握相关知识点。 ;wh=aigozi
网络管理员培训教程 由工作在软考第一线的专家根据历年来的考试辅导、阅卷、教材编写的经验,总结考生复习中的弱点、难点、疑点编写而成。 ;wh=aigozi
免费获取希赛币下载希赛视频方法 通过此方法,可以获取希赛币来下载希赛视频 ;wh=aigozi
未出校园,年收入10万,好工作赶紧抢! 只要您有能力,就点击进入。每个省/直辖市只招一个,每个地区/地级市只招1个,每所大学只招1个。要快啊! ;wh=aigozi
计算机专业全国高等教育自学考试视频教程 由具有丰富教学经验的高级讲师讲解,讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好的理解、掌握相关知识点。 ;wh=aigozi
数据仓库与数据挖掘视频教程 讲述了数据仓库(DW)和数据挖掘(DM)的基本方法,基本原理,重点说明这些方法的主要思想和技术。 ;wh=aigozi
自考网络操作系统安全管理视频教程 主要介绍了在主流UNIX、Linux和Windows 2000等网络操作系统环境中实现安全管理和系统。 ;wh=aigozi
信息系统监理师视频教程 由具有丰富的信息系统建设与监理经验的高级工程师讲解,讲解的过程中采用理论+实践经验+例题解答的方法讲授。 ;wh=aigozi
希赛教育加盟策略及体系 希赛IT教育研发中心(以下简称为“希赛教育”)是希赛公司属下的一个专门从事IT教育、教育产品开发、教育书籍编写的部门,在IT教育方面具有极高的权威性。希赛教育在软考、IT技术和管理、对日开发、企业培训、计算机等级考试、计算机自学考试等方面取得了可喜的成绩,希赛教育的远程教育模式得到了国家教育部门的认可和推广... ;wh=aigozi
二级Visual Basic语言视频教程 集中了考试所有的难点和重点知识的精深讲解,可以保证既不漏掉考试必需的知识点,又不加重考生备考负担,使考生轻松、愉快地掌握知识点并领悟二级Visual Basic考试的真谛。 ;wh=aigozi
IT项目管理(高级篇)视频教程 以软件类、管理咨询类或企业信息化等项目实例分析IT项目涉及的主要项目管理内容。 ;wh=aigozi
软件开发过程改进视频教程 通过本课程的学习可以使学员把握CMM的精髓,从而在具体的项目中实施CMM。 ;wh=aigozi
免费赠送计算机等级考试书籍 参加等考辅导、下载资料、购买视频、参加在线测试可获赠计算机等级考试书籍一本 ;wh=aigozi
希赛顾问团启动全国大学生科技创业基金 学赛大学生科技创业基金是希赛顾问团资助型的“天使基金”,也是培育高新科技企业的“种子基金”,为拥有科技成果的高校学生提供成果转化为产品和服务的平台,进一步落实科教兴国的战略,构建希赛顾问团扶持大学生科技创业的工作体系与服务平台。 ;wh=aigozi
关于加入学赛网培训超市会员的邀请函 培训超市是学赛网上一个专业的IT培训信息发布和搜寻频道,旨在为全国各地的IT类教育、培训招生机构和各种类型的学习者提供一个高效、诚信的信息服务平台。为了能让各培训机构有更多推广和宣传的机会,学赛网根据IT培训信息的特点,量身定做了不同的特色宣传专栏,从机构的信誉管理、名师推荐、优秀作品展到学赛网特别推荐的品牌专区,内容丰富、全面,招生机构可以充分展示雄厚的师资力量,让更多有需求学员放心选择,而且这一切都是免费的... ;wh=aigozi
品希赛图书,中电脑大奖,获三重好礼 2007年12月7日至2008年2月7日期间,凡在希赛“数字出版”频道中购买在线阅读者,均有机会中笔记本大奖;按需印刷图书累计满400元或一次性购满200元者,可赠送图书一册,任选。 ;wh=aigozi
自考互联网的应用视频教程 讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好的理解、掌握相关知识点。 ;wh=aigozi
如何快捷地获得计算机高级工程师职称? 希赛教育有5年的软考辅导经验,学员通过率在80%以上。命题专家在线答疑,权威的模拟试题,命中率极高。选择希赛教育,轻轻松松拿高级职称。 ;wh=aigozi
自考计算机网络基础视频教程 由具有丰富教学经验的高级讲师讲解,讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好的理解、掌握相关知识点。 ;wh=aigozi
自考数据结构与算法视频教程 由具有丰富教学经验的高级讲师讲解,讲解的过程中采用大量的例题对相关知识点进行讲解,帮助学习者能更好的理解、掌握相关知识点。 ;wh=aigozi
C语言网上谁的视频比较好。
C语言网上的课程是很多的,很推荐去B站找一找学习视频,章节也分的很详细;另外就是郝斌的C语言课还是不错的,不至于讲的很枯燥,很通俗易懂,也很适合初学者去学。
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。
C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
用C语言怎么实现与数据库的连接
#includemysql/mysql.h
#includestdio.h
intmain()
{
MYSQL*conn;
MYSQL_RES*res;
MYSQL_ROWrow;
char*server="localhost";//本地连接
char*user="root";//
char*password="525215980";//mysql密码
char*database="student";//数据库名
char*query="select*fromclass";//需要查询的语句
intt,r;
conn=mysql_init(NULL);
if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0))
{
printf("Errorconnectingtodatabase:%s\n",mysql_error(conn));
}else{
printf("Connected...\n");
}
t=mysql_query(conn,query);
if(t)
{
printf("Errormakingquery:%s\n",mysql_error(conn));
}else{
printf("Querymade...\n");
res=mysql_use_result(conn);
if(res)
{
while((row=mysql_fetch_row(res))!=NULL)
{
//printf("num=%d\n",mysql_num_fields(res));//列数
for(t=0;tmysql_num_fields(res);t++)
printf("%8s",row[t]);
printf("\n");
}
}
mysql_free_result(res);
}
mysql_close(conn);
return0;
}
扩展资料
C语言使用注意事项:
1、指针是c语言的灵魂,一定要灵活的使用它:
(1)、指针的声明,创建,赋值,销毁等
(2)、指针的类型转换,传参,回调等
2、递归调用也会经常用到:
(1)、递归遍历树结构
(2)、递归搜索
怎样用C语言编写一个学生数据库系统系统
这里有个现成的!拿去改改就行了!!
#includestdio.h
#includestdlib.h
#includestring.h
#include windows.h
#include winbase.h
typedef struct node{ /* 定义链表 */
char name[20]; /* 姓名 */
char address[40]; /* 地址 */
char phone[15]; /* 电话 */
long zip; /* 邮编 */
struct node *next;
}add_list;
struct person{ /* 定义一个结构备用 */
char name[20];
char address[50];
char phone[15];
long zip;
};
FILE *fp;
add_list *tail,*head; /* 定义链表尾节点指针和头指针 */
/* 从文件中读出数据生成通讯录链表,如果文件不存在,生成空链表 */
add_list *load(char filename[])
{ add_list *new1,*head;
struct person t;
head=(add_list *)malloc(sizeof(add_list));
tail=head=NULL;
if((fp=fopen(filename,"rb"))==NULL)
return head;
else
if(!feof(fp))
if(fread(t,sizeof(struct person),1,fp)==1)
{ new1=(add_list *)malloc(sizeof(add_list)); /* 连入链表第一个节点 */
strcpy(new1-name,t.name);
strcpy(new1-address,t.address);
strcpy(new1-phone,t.phone);
new1-zip=t.zip;
head=tail=new1;
new1-next=NULL;
while(!feof(fp)) /* 连入链表其余节点 */
{ if(fread(t,sizeof(struct person),1,fp)==1)
{ new1=(add_list *)malloc(sizeof(add_list));
strcpy(new1-name,t.name);
strcpy(new1-address,t.address);
strcpy(new1-phone,t.phone);
new1-zip=t.zip;
tail-next=new1;
new1-next=NULL;
tail=new1;
}
}
}
fclose(fp);
return head;
}
/* 自定义函数,进度条 */
void jindutiao(void)
{ int i;
for(i=0;i78;i++) putchar('.');
printf("\r\a");
for(i=0;i78;i++)
{
if(i==0) putchar('|');
Sleep(100);
printf("\b|");
}
}
/* 插入一条通讯录记录 */
void insert(add_list **head)
{ add_list * new1;
new1=(add_list *)malloc(sizeof(add_list));
system("cls");
printf("\n请输入姓名:"); getchar();gets(new1-name);
printf("\n请输入地址:"); scanf("%s",new1-address);
printf("\n请输入电话:"); scanf("%s",new1-phone);
printf("\n请输入邮编:"); scanf("%ld",new1-zip);
if(*head==NULL) /* 表头为空时 */
{ *head=new1;
new1-next=NULL;
tail=new1;
}
else /* 插入到表尾 */
{ tail-next=new1;
new1-next=NULL;
tail=new1;
}
printf("输入完成,按回车键返回......");
getchar();
getchar();
}
/* 将通讯录链表中的内容保存到指定文件中 */
void save(add_list *head,char filename[])
{ add_list *p;
struct person t;
if((fp=fopen(filename,"wb"))==NULL)
{ printf("错误:不能打开文件%s\n",filename);
exit(1);
}
else
{ p=head;
while(p!=NULL)
{ strcpy(t.name,p-name);
strcpy(t.address,p-address);
strcpy(t.phone,p-phone);
t.zip=p-zip;
fwrite(t,sizeof(struct person),1,fp);
p=p-next;
}
}
fclose(fp);
printf("保存成功,按回车键返回......");
getchar();getchar();
}
/* 显示通讯录内容 */
void display(add_list *head)
{ add_list *p;
p=head;
if(p!=NULL)
printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n");
while(p!=NULL)
{
printf("%s\t\t%s\t\t%ld\t\t%s\n",p-name,p-address,p-zip,p-phone);
p=p-next;
}
printf("按回车键返回......");
getchar();getchar();
}
/* 按姓名查询通讯录记录 */
int search(add_list *head)
{ add_list *p;
char name[20];
int flag=0;
printf("请输入要查找的人的姓名:");
getchar();
gets(name);
p=head;
while(p!=NULL)
{ if(strcmp(name,p-name)==0)
{ printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n");
printf("%s\t\t%s\t\t%ld\t\t%s\n",p-name,p-address,p-zip,p-phone);
flag=1;
}
p=p-next;
}
return flag;
}
/* 按姓名删除一条通讯录记录 */
int delete1(add_list **head)
{ add_list *p,*q,*t;
char name[20],c;
int flag=0;
printf("请输入要删除人的姓名:");
scanf("%s",name);
q=p=*head;
while(p!=NULL)
{ if(strcmp(name,p-name)==0) /* 找到要删除的人 */
{ printf("姓名:\t\t住址:\t\t邮编:\t\t电话:\n");
printf("%s\t\t%s\t\t%ld\t\t%s\n",p-name,p-address,p-zip,p-phone);
printf("真的要删除吗?(Y:是,N:否)\n"); /* 征求意见(删不删) */
getchar();c=getchar();
if(c=='y'||c=='Y') /* 删除 */
{ if(p==*head)
*head=p-next;
else
q-next=p-next;
t=p;
p=p-next;
free(t);
flag=1;
}
else /* 不删,跳过 */
{ q=p;
p=p-next;
flag=1;
}
}
else /* 没找到,继续 */
{ q=p;
p=p-next;
}
}
return flag;
printf("按回车键返回......");
getchar();
}
/* 显示菜单并选择菜单项 */
int menu_select()
{ char c;
system("cls");
printf("\t\t********************通讯录********************\n");
printf("\t\t\t 1:输入新的通讯记录\n");
printf("\t\t\t\t 2:删除记录\n");
printf("\t\t\t\t 3:查找\n");
printf("\t\t\t\t 4:保存文件\n");
printf("\t\t\t 5:浏览所有通讯记录\n");
printf("\t\t\t\t 6:退出\n");
do{
printf("请输入你的选择(1~~6):");
c=getchar();
}while(c'1'||c'6');
return c;
}
/* 主函数 */
int main(void)
{ char filename[20];
char c;
int t;
printf("\n\n\n\n\n\n\t\t\t\t通讯录启动中...\n\n\n\n\n\n\n\n\n\n\n\n\n");
jindutiao();
system("cls");
printf("请输入通讯录文件名称:\n");
scanf("%s",filename);
getchar();
head=load(filename);
while(1)
{ c=menu_select();
switch(c)
{ case '1': insert(head); break;
case '2': t=delete1(head);
if(!t) printf("记错了吧,没这人!\n按回车键返回......"); getchar();getchar(); break;
case '3': t=search(head);
if(!t) printf("天啊!居然没找到!\n按回车键返回......");getchar(); break;
case '4': save(head,filename); break;
case '5': display(head); break;
case '6': exit(0);
}
}
}