c语言通讯录程序

c语言通讯录程序,第1张

以前写了一个简单的:

#include <stdio.h>

#include <stdlib.h>/*与malloc.h差不多*/

#include <string.h>

#include <iostream>

using namespace std

#define maxlen 15

struct persons

{int num/*定义结构体数组用于缓存数据*/

char name[20]

char e_addr[20]

char tel_no[15]

char sim_no

char arch

}persons[maxlen]

typedef struct lnode

{ /*通讯录结构中结点的定义*/

int num

char name[20]

char e_addr[20]

char tel_no[15]

char sim_no

char arch

struct lnode *next

}listnode,*linklist

linklist head=NULL,r=NULL/*定义头指针厅灶汪和尾指针*/

listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9

int i

char name1[10],ch

char tel_no1[15]

char arch1

char sim_no1

char e_addr1[20]

char s1[20]

FILE *fp/扮仔*定义文件指针*/

void creat() /*将文件的信息读入结构体数组在转存入链表中*/

{ int j

long k

fp=fopen("数据文件.txt","r t")/*打开文件*/

if(fp!=NULL)

{for(i=0i<=maxleni++ )

{ j=fgetc(fp)

if(j==EOF)

return

k=i

fseek(fp,k*sizeof(struct persons),0)/*读取一个人的信息*/

fread(&persons[i],sizeof(struct persons),1,fp)

s=(linklist)malloc(sizeof(listnode))/*装存入链表中*/

s->num=persons[i].num

strcpy(s->name,persons[i].name)

strcpy(s->e_addr,persons[i].e_addr)

strcpy(s->tel_no,persons[i].tel_no)

s->sim_no=persons[i].sim_no

s->arch=persons[i].arch

if(head==NULL) /*用尾插法将其插入链表中*/

{head=sr=headhead->next=NULL}

else

{r->next=s

r=sr->next=NULL

}

}fclose(fp)

}

else

{ fp=fopen("数据文件.txt","w")/*不能打开另开辟一个文件*/

i=1

}

}

void Show()

{printf("成功调用该函数\n")}

void Delete()

{printf("成功调用该函数\n")}

void Input() /*向.通讯录中输入一个人的信息*/

{ s=(linklist)malloc(sizeof(listnode))

printf("\n\n\t请输入该用户的信息:")

printf("姓名:")

scanf("%s",&s->name)

printf("电话号码:")

scanf("%s",&s->tel_no)

printf("单键拨号:")

scanf("%s",&s->sim_no)

printf("E-mail地址:")

scanf("%s",&s->辩祥e_addr)

printf("类别:")

scanf("%s",&s->arch)

if(head==NULL)printf("\n\n")

else

{p8=head

while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)

p8=p8->next

if(p8!=NULL)

{printf("您添加的用户已存在!")

free(s)}}

if(head==NULL)

{

s->next = 0

head=s

r = s

}

else

{

s->next = 0

r->next = s

r = s

}

}

void Alter()

{ printf("success!\n")}

int main()

{

system("color a")

creat()

do

{

printf("\n\n\t\t请选择 *** 作:")

printf("\n\t\t1.显示通讯录")

printf("\n\t\t2.删除通讯录")

printf("\n\t\t3.添加通讯录")

printf("\n\t\t4.编辑通讯录")

printf("\n\n\n")

printf("\t请选择:")

cin>>ch

switch(ch)

{ case '1': Show()/*用单条件多选择语句实现调用与循环*/

break

case '2': Delete()

break

case '3': Input()

break

case '4': Alter()

break

fclose(fp)

exit(0)

break

default:

printf("\n\t The num should 1-6!!! \n")

break

}

}

while(1)

}

IIC(Inter-Integrated Circuit,I2C)总线老含唤是一种侍凯由PHILIPS公司开发的两线式串行总线,用于连接微处老陆理器及其外围设备,它的最主要优点是简单和有效。它只需要数据线SDA和时钟线SCL,就能够实现CPU与被控IC之间、IC与IC之间进行双向传送。

这是我写的模拟程序,只有一个发送函数和一个接收函数,EP为接收标志位,发送没有标志位,通过外部中断来发送起始信号,无应答与非应答,无结束信号,实测可以正常收发数据

#ifndef _IOPORTSEND_H__

#define _IOPORTSEND_H__

#include<reg52.h>

unsigned char DAT,EP=0//可漏颂以把DAT当作串口中的SBUF,主机发送完后接收机从DAT提取数据

sbit flag = P3^3//外部中断口

sbit ok = P2^7//起始信号发送口

sbit PCL = P2^6//时钟线

sbit PDA = P2^5//数据线

void delay() //延时函数控制波特率

{

unsigned char a,b

for(b=3b>0b--)

for(a=13a>0a--)

}

void PortInit()//中断配置

{

EA=1

EX1=1

IT1=1

}

void SendPort(unsigned char dat)//发送函数

{

unsigned char i

PCL=0

ok=1//通过ok来启动接收机的中断

ok=0

for(i=0i<8i++)//开始发送数据

{

PCL=0

delay()

if(dat&0x80)

PDA=1

else

PDA=0

PCL=1

delay()

dat<誉判<=1

}

PCL=0

delay()

ok=1//ok置1以便下次发送时启动中断

PCL=1//发送完毕释放时钟线与数据线

PDA=1

}

void ReadPort()interrupt 2//接收函数,在中断函数中接收数据

{

unsigned char i

static unsigned int b

PCL=1

PDA=1//防止接收机的PCL口和PDA口影响庆搜改数据的接收

for(i=0i<8i++)//开始接收数据

{

DAT<<=1

while(PCL==0)

b=0

while(PCL==1)

{

b++

if(b==1)

if(PDA)

DAT|=0x01

}

}

EP=1//接收完毕后置EP为1,需要在其他函数中清零

}

#endif


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12562966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存