手机通讯录源代码
C语言-通讯录管理系统

printf("--------------------\n");
printf(" 1.按学号查询\n");
printf(" 2.按姓名查询\n");
printf("--------------------\n");
printf("请选择: \n");
scanf("%d",&xz);
if (xห้องสมุดไป่ตู้==1){
i++;
printf("想继续创建吗?(1.是/0.不):");
scanf("%d",&j);
if (!j)
return i;
else
printf("恭喜你,创建成功!请继续创建!\n");
}
return i;
}
int add_record(int flag)
{ int i=flag,j;
for(i;;)
printf("%s,%s,%s,%s,%s,%s\n",data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);
printf(" ------------------------------\n");
return 0;
}
}
int menu_select()
{
int i;
printf(" ******************** \n");
printf(" Welcome! \n ");
手机通讯录源代码

#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#define N 15 //最大容量为15typedef struct //定义一个结构{char name[10];char haoma[15];char leibie[10];char dizhi[20];}ren;//菜单void menu() //目录{system("cls"); //清屏printf(" ######### 欢迎使用手机通讯录#########\n");printf("\n");printf("======================================================================= =======\n");printf(" 1.~~查询~~ \n");printf(" 2.~~添加~~ \n");printf(" 3.~~拨号~~ \n");printf(" 4.~~修改~~ \n");printf(" 5.~~删除~~ \n");printf(" 0. ~~退出~~ \n");printf("======================================================================= =======\n");printf("\n");printf(" 个人通讯录\n");printf("\n");printf(" ~~请选择相应的功能~~:");}void input() //查询{int help=0; //帮助指令,如果查找所找的类别中没有数据,显示ren ry;FILE *fp;char leibie[10];system("cls");printf("\n 输入要查人员的类别: ");scanf("%s",leibie);//要查询的类别查找失败if((fp=fopen("ren.dat","rb"))==NULL) {printf("can't open file!\n");exit(0);} fread(&ry,sizeof(ren),1,fp);if(!feof(fp)){ printf(" 人员的信息如下:\n");printf("说明:(A办公类B个人类C商务类)");printf("\n%10s %15s %10s %20s \n","","","类别","");while(!feof(fp)){if(strcmp(ry.leibie,leibie)==0) //若为该类别则输出 { help++;printf("%10s %15s %10s %20s \n",,ry.haoma,ry.leibie,ry.dizhi);}fread(&ry,sizeof(ren),1,fp);}if(help==0){printf(" 查找失败!!!");}}// else printf(" 查找失败!!!");fclose(fp);getch();}//修改:输入人员的,查找该人员,若找到则修改该人员的信息,并显示修改前后的结果;//添加void search(){int n;FILE *fp; //定义文件指针ren ry,s; // 定义两个ren结构体的量 if((fp=fopen("ren.dat","ab+"))==NULL){printf("can't open file!\n");exit(0);}printf("\n录入格式类别。
Android手机通讯录(源码)

Android⼿机通讯录(源码) 简易⼿机通讯录⼀:功能模块 1.主界⾯,通过listview 展⽰所有联系⼈信息,并在没有联系⼈时给出友好提⽰ 2.主界⾯.显⽰最近查看的某个联系⼈信息 3.主界⾯,可以长按某联系⼈项,弹出菜单,删除该联系⼈;删除联系⼈后,在⼿机通知栏弹出信息给⽤户提⽰ 4.主界⾯选择分组,可以查看所有联系⼈,也可以只查看某⼀分组的联系⼈ 5.点击主界⾯的某联系⼈,可以进⼊联系⼈详情界⾯,查看联系⼈各详细信息,并可修改联系⼈各信息; 联系⼈的性别和所在分组可通过下拉菜单选择;长按电话号码,可以进⼊拨打电话功能; 修改联系⼈信息后,跳转回到主界⾯,并使⽤Toast给予⽤户提⽰ 6.主界⾯菜单栏可以添加新联系⼈,关于等功能 7.能在联系⼈详情界⾯,动态增加多个联系电话,并储存到数据库中效果图展⽰:源码下载地址:项⽬回顾: 1.scrollview嵌套listview产⽣的滑动冲突(recyclerview) 解决⽅案:listView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_UP){//点击listview⾥⾯滚动停⽌时,scrollview拦截listview的触屏事件,就是scrollview该滚动了scrollView.requestDisallowInterceptTouchEvent(false);}else{//当listview在滚动时,不拦截listview的滚动事件;就是listview可以滚动,scrollView.requestDisallowInterceptTouchEvent(true);}return false;}}); 2.关于listview 中 EditText 监听//1.在设置text前,先移除监听if (viewHodler.number.getTag() instanceof TextWatcher) {viewHodler.number.removeTextChangedListener((TextWatcher) viewHodler.number.getTag());}if (TextUtils.isEmpty(phoneNumber.getNumber())){viewHodler.number.setText("");}else {viewHodler.number.setText(phoneNumber.getNumber());}//2.新建监听类TextWatcher watcher = new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {if (TextUtils.isEmpty(s)) {phoneNumber.setNumber(null);finalViewHodler.imageView.setVisibility(View.GONE);} else {phoneNumber.setNumber(s.toString());finalViewHodler.imageView.setVisibility(View.VISIBLE);}Log.e("tag", "afterTextChanged: " +s.toString() );}};//3.添加监听器viewHodler.number.addTextChangedListener(watcher);viewHodler.number.setTag(watcher); 3.获取listview 中所有 Editext 的值 思路:在适配器中创建HashMap 在getview()⽅法中保存所有的Editext key = position value = editext 然后在通过HashMap 获取就⾏了private HashMap<Integer,EditText> edMap;@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {PhoneAdapter.ViewHodler viewHodler = null;if (convertView == null) {viewHodler = new PhoneAdapter.ViewHodler();convertView = LayoutInflater.from(context).inflate(yout.phone_list_item, null, false);viewHodler.spinner = convertView.findViewById(R.id.pnone_spinner);viewHodler.number = convertView.findViewById(R.id.pnone_number);viewHodler.imageView = convertView.findViewById(R.id.imageView4);//put 保存edMap.put(position,viewHodler.number);spMap.put(position,viewHodler.spinner);convertView.setTag(viewHodler);} else {viewHodler = (PhoneAdapter.ViewHodler) convertView.getTag();edMap.put(position,viewHodler.number);spMap.put(position,viewHodler.spinner);} 4.拨打电话功能的坑public void call(String telPhone){if(checkReadPermission(Manifest.permission.CALL_PHONE,REQUEST_CALL_PERMISSION)){//要在telPhone前加上字符串tel:Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + telPhone));startActivity(intent);}} 不让你就会见到下图:。
手机通讯录实验报告及使用说明(附源代码)

手机通讯录实验报告及使用说明(附源代码)自查报告。
标题,手机通讯录实验报告及使用说明(附源代码)。
自查报告内容:在本次实验中,我使用了Java编程语言,开发了一个简单的手机通讯录应用程序。
该应用程序可以实现添加联系人、查找联系人、删除联系人等基本功能。
在开发过程中,我遵循了面向对象的编程思想,使用了类和对象的概念来组织和管理联系人信息。
在实验中,我首先设计了Contact类,用于表示一个联系人的信息,包括姓名、电话号码、邮箱等属性。
然后,我设计了AddressBook类,用于管理联系人信息,包括添加联系人、查找联系人、删除联系人等操作。
最后,我编写了一个简单的用户界面,用于与用户交互,实现对通讯录的操作。
在实验过程中,我遇到了一些问题,比如在删除联系人时没有进行足够的输入验证,导致程序出现了错误。
不过,通过调试和修改代码,我最终解决了这些问题,并且实现了一个稳定和可靠的手机通讯录应用程序。
使用说明:1. 添加联系人,在应用程序中选择“添加联系人”选项,然后输入联系人的姓名、电话号码、邮箱等信息,点击“确认”按钮即可完成添加。
2. 查找联系人,在应用程序中选择“查找联系人”选项,然后输入联系人的姓名或电话号码,点击“搜索”按钮即可查找到对应的联系人信息。
3. 删除联系人,在应用程序中选择“删除联系人”选项,然后输入要删除的联系人的姓名或电话号码,点击“确认”按钮即可删除该联系人。
4. 显示所有联系人,在应用程序中选择“显示所有联系人”选项,即可查看当前通讯录中的所有联系人信息。
源代码:```java。
public class Contact {。
private String name;private String phone;private String email;public Contact(String name, String phone, String email) {。
= name;this.phone = phone;this.email = email;}。
android获取通讯录信息

开发中需要获取手机用户的通讯录信息,要求运行在Andrid2.0及以上版本,因为程序中用到了Android2.0新的API。
程序运行结果通过Log.v写入到了日志,结果部分截图:程序的主要代码如下:protected void getContactInfo() {//获得通讯录信息,URI是ContactsContract.Contacts.CONTENT_URICursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);while (cursor.moveToNext()) {//获得通讯录中每个联系人的IDString contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));//获得通讯录中联系人的名字String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAM E));Log.v(TAG, "…name…" + name);//查看给联系人是否有电话,返回结果是String类型,1表示有,0表是没有String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER) );if (hasPhone.equalsIgnoreCase("1"))hasPhone = "true";elsehasPhone = "false";//如果有电话,根据联系人的ID查找到联系人的电话,电话可以是多个if (Boolean.parseBoolean(hasPhone)) {Cursor phones = getContentResolver().query(monDataKinds.Phone.CONTENT_URI,null,monDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null);while (phones.moveToNext()) {String phoneNumber = phones.getString(phones.getColumnIndex(monDataKinds.Phone.N UMBER));Log.v(TAG, "…phoneNumber…" + phoneNumber);}phones.close();}//查找email地址,这里email也可以有多个Cursor emails = getContentResolver().query(monDataKinds.Email.CONTENT_URI,null,monDataKinds.Email.CONTACT_ID + " = "+ contactId, null, null);while (emails.moveToNext()) {String emailAddress = emails.getString(emails.getColumnIndex(monDataKinds.Email.DATA ));Log.v(TAG, "…emailAddress…" + emailAddress);}emails.close();//获得联系人的地址Cursor address = getContentResolver().query(monDataKinds.StructuredPostal.CONTENT_ URI,null,monDataKinds.StructuredPostal.CONTACT_ID+ " = " + contactId, null, null);while (address.moveToNext()) {// These are all private class variables, don’t forget to cre ate// them.String poBox = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.POBOX));String street = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.STREET));String city = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.CITY));String state = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.REGION));String postalCode = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.POSTCODE));String country = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.COUNTRY));String type = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.TYPE));Log.v(TAG, "…city…" + city);}}cursor.close();}代码中已经有了注释,这里不做过多解释,比较重要的方法getContentResolver().query在文章Android简单操作sqlite中有解释。
python通讯录程序设计总结

python通讯录程序设计总结Python通讯录程序设计总结一、需求分析1.1 需求描述本项目需要设计一个通讯录程序,能够实现以下功能:(1)添加联系人;(2)删除联系人;(3)修改联系人信息;(4)查询联系人信息;(5)显示所有联系人信息。
1.2 功能分析根据需求描述,可以将本项目的功能进行如下分析:(1)添加联系人:需要输入姓名、电话、邮箱等信息,并将这些信息保存到文件中。
(2)删除联系人:需要输入要删除的联系人姓名,然后从文件中删除对应的记录。
(3)修改联系人信息:需要输入要修改的联系人姓名,然后根据用户选择进行相应的修改操作。
(4)查询联系人信息:需要输入要查询的联系人姓名或电话号码,然后从文件中查找对应的记录并显示出来。
(5)显示所有联系人信息:从文件中读取所有记录并显示出来。
二、程序设计2.1 数据结构设计为了实现以上功能,我们需要使用一个数据结构来存储所有的联系人信息。
在本项目中,我们选择使用字典来存储每个联系人的信息。
具体来说,每个字典包含以下键值对:{'name': 'xxx', 'phone': 'xxx', 'email': 'xxx'}2.2 界面设计为了方便用户操作,在本项目中我们采用命令行界面。
具体来说,我们可以设计如下几个菜单:(1)添加联系人;(2)删除联系人;(3)修改联系人信息;(4)查询联系人信息;(5)显示所有联系人信息;(6)退出程序。
2.3 程序实现根据上述数据结构和界面设计,我们可以实现如下代码:# 定义全局变量,用于存储所有联系人信息contacts = []# 添加联系人def add_contact():name = input('请输入姓名:')phone = input('请输入电话号码:')email = input('请输入邮箱地址:')contact = {'name': name, 'phone': phone, 'email': email} contacts.append(contact)print('添加成功!')# 删除联系人def delete_contact():name = input('请输入要删除的联系人姓名:')for contact in contacts:if contact['name'] == name:contacts.remove(contact)print('删除成功!')returnprint('未找到该联系人!')# 修改联系人信息def modify_contact():name = input('请输入要修改的联系人姓名:')for contact in contacts:if contact['name'] == name:print('1. 修改姓名\n2. 修改电话号码\n3. 修改邮箱地址') choice = int(input('请选择要修改的内容:'))if choice == 1:new_name = input('请输入新的姓名:')contact['name'] = new_nameprint('修改成功!')returnelif choice == 2:new_phone = input('请输入新的电话号码:')contact['phone'] = new_phoneprint('修改成功!')returnelif choice == 3:new_email = input('请输入新的邮箱地址:')contact['email'] = new_emailprint('修改成功!')returnelse:print('输入有误,请重新选择!')print('未找到该联系人!')# 查询联系人信息def query_contact():keyword = input('请输入要查询的关键字(姓名或电话号码):') for contact in contacts:if keyword in contact['name'] or keyword incontact['phone']:print(contact)print('查询完毕!')# 显示所有联系人信息def show_all_contacts():for contact in contacts:print(contact)# 主函数def main():while True:print('\n1. 添加联系人\n2. 删除联系人\n3. 修改联系人信息\n4. 查询联系人信息\n5. 显示所有联系人信息\n6. 退出程序')choice = int(input('请选择操作:'))if choice == 1:add_contact()elif choice == 2:delete_contact()elif choice == 3:modify_contact()elif choice == 4:query_contact()elif choice == 5:show_all_contacts()elif choice == 6:breakelse:print('输入有误,请重新选择!')if __name__ == '__main__':main()三、总结反思本项目通过实现一个通讯录程序,加深了我们对Python语言和数据结构的理解。
Android开发之获得通讯录及SIM卡中联系人

Android开发之获得通讯录及SIM卡中联系人Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来。
这一篇文章我主要带领同学们熟悉Android的通讯录机制。
图中选中的数据库 contacts2.db就是系统储存联系人的数据库,我们将它打开看看里面储存了些什么东东?打开contacts.db后发面里面有一堆表,同学们先别慌张。
今天我们主要讨论红框内的4个比较常用的表,后期我在介绍其它表的使用。
这里说一下如果你想在真机上查看数据库的话必需要先获得root权限,否则无法查看。
1.contacts 表_id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据。
display_name: 联系人名称photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空times_contacted:通话记录的次数last_time_contacted: 最后的通话时间lookup :是一个持久化的储存因为用户可能会改名子但是它改不了lookup2.data表raw_contact_id:通过raw_contact_id可以找到 raw_contact表中相对的数据。
data1 到 data15 这里保存着联系人的信息联系人名称联系人电话号码电子邮件备注等等。
3.phone_look_up表data_id : 通过data_id可以找到 datat表中相对的数据。
raw_contact_id : 通过raw_contact_id 可以找到 raw_contact_表中相对的数据。
normalized_number: 这个字段就比较有意思了,它是将每个电话号码逆序排列。
4.raw_contact表version :版本号,用于监听变化deleted :删除标志, 0为默认 1 表示这行数据已经删除display_name : 联系人名称last_time_contacts : 最后联系的时间有关这些的源码都在android.provider.ContactsContract这个类里面,如果想深入了解的话可以去看看,数据库相关的操作联查啊啥的都在里面。
c语言中通讯录代码

c语言中通讯录代码以下是一个简单的C语言实现通讯录的代码。
这个程序可以添加,删除和查找联系人,以及列出所有联系人的信息。
```C#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100/* 定义联系人结构体 */struct contact {char name[50];char phone[20];char email[50];};/* 全局变量 */struct contact contacts[MAX_CONTACTS]; // 用于保存所有联系人int num_contacts = 0; // 当前联系人数量/* 函数声明 */void add_contact();void delete_contact();void search_contact();void list_contacts();int main() {int choice; // 用户选择的操作while (1) {printf("\n通讯录\n");printf("---------\n");printf("1. 添加联系人\n");printf("2. 删除联系人\n");printf("3. 查找联系人\n");printf("4. 列出所有联系人\n");printf("0. 退出\n");printf("请选择操作(0-4):");scanf("%d", &choice);switch (choice) {case 0:printf("谢谢使用通讯录!\n"); exit(0);case 1:add_contact();break;case 2:delete_contact();break;case 3:search_contact();break;case 4:list_contacts();break;default:printf("无效的选择,请重试!\n"); }}return 0;}/* 添加联系人 */void add_contact() {struct contact new_contact;printf("请输入姓名:");scanf("%s", new_);printf("请输入电话号码:");scanf("%s", new_contact.phone);printf("请输入电子邮件:");scanf("%s", new_contact.email);contacts[num_contacts] = new_contact;num_contacts++;printf("联系人已添加!\n");}/* 删除联系人 */void delete_contact() {char name[50];int i, index = -1;printf("请输入要删除的联系人姓名:"); scanf("%s", name);for (i = 0; i < num_contacts; i++) {if (strcmp(name, contacts[i].name) == 0) { index = i;break;}}if (index == -1) {printf("没有找到该联系人!\n");} else {for (i = index; i < num_contacts - 1; i++) { contacts[i] = contacts[i + 1];}num_contacts--;printf("联系人已删除!\n");}}/* 查找联系人 */void search_contact() {char name[50];int i, found = 0;printf("请输入要查找的联系人姓名:");scanf("%s", name);for (i = 0; i < num_contacts; i++) {if (strcmp(name, contacts[i].name) == 0) { printf("姓名:%s\n", contacts[i].name); printf("电话:%s\n", contacts[i].phone);printf("电子邮件:%s\n", contacts[i].email);found = 1;break;}}if (!found) {printf("没有找到该联系人!\n");}}/* 列出所有联系人 */void list_contacts() {int i;if (num_contacts == 0) {printf("通讯录为空!\n");} else {printf("所有联系人:\n");for (i = 0; i < num_contacts; i++) {printf("%d. 姓名:%s\t电话:%s\t电子邮件:%s\n", i + 1, contacts[i].name, contacts[i].phone, contacts[i].email);}}}```这个程序使用了结构体来表示联系人的信息,并通过全局数组来保存所有联系人。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
getch();
}
//修改:输入人员的姓名,查找该人员,若找到则修改该人员的信息,并显示修改前后的结果;
//号码添加
void search()
{
int n;
FILE *fp; //定义文件指针
ren ry,s; //定义两个ren结构体的量
if((fp=fopen("ren.dat","ab+"))==NULL)
{printf("can't open file!\n");exit(0);}
printf("\n录入格式姓名号码类别邮箱。当输入姓ቤተ መጻሕፍቲ ባይዱ为#结束录入\n");
while(1)
{ printf("请输入姓名:");
scanf("%s",);
if(strcmp(,"#")==0) break; //如果输入#则退出添加
{ help++;
printf("%10s %15s %10s %20s \n",,ry.haoma,ry.leibie,ry.dizhi);
}
fread(&ry,sizeof(ren),1,fp);
}
if(help==0){
printf("查找失败!!!");
}
}
// else printf("查找失败!!!");
{printf("姓名已经存在,不能记录.\n");break;}//遇到有相同的姓名
fread(&s,sizeof(ren),1,fp);
}
// printf("%d",n);
if(n>N){
break;//内存已满,不能记录.
}
if(feof(fp)) //读到自后也没有相同的号码
fwrite(&ry,sizeof(ren),1,fp); //将信息写入文件
printf("\n");
printf("个人通讯录\n");
printf("\n");
printf(" ~~请选择相应的功能~~:");
}
void input() //查询
{
int help=0; //帮助指令,如果查找所找的类别中没有数据,显示
ren ry;
FILE *fp;
char leibie[10];
while(!feof(fp))
{ fread(&ry,sizeof(ren),1,fp);
if(strcmp(,name)==0)
{ printf("\n\a\a\a\a\a\a %15s\a\a\a\a\a\n",ry.haoma); //输出号码和声音
break;
}
}
if(feof(fp)) printf("\n\n拨号失败!!!");
system("cls");
printf("\n输入要查人员的类别: ");scanf("%s",leibie);//要查询的类别查找失败
if((fp=fopen("ren.dat","rb"))==NULL) {printf("can't open file!\n");exit(0);}
fread(&ry,sizeof(ren),1,fp);
printf("请输入电话号码:");
scanf("%s",ry.haoma);
printf("请输入类别(A办公类B个人类C商务类):");
scanf("%s",ry.leibie);
printf("请输入邮箱地址:");
scanf("%s",ry.dizhi);
fseek(fp,0,0); //指针定位到文件开始位置
if(!feof(fp))
{ printf("人员的信息如下:\n");
printf("说明:(A办公类B个人类C商务类)");
printf("\n%10s %15s %10s %20s \n","姓名","号码","类别","邮箱");
while(!feof(fp))
{
if(strcmp(ry.leibie,leibie)==0) //若为该类别则输出
}
fclose(fp); //关闭文件
getchar(); //接受一个输入
}
void modi() //拨号
{ ren ry;
FILE *fp;
char name[10];
system("cls");
printf("\n输入要拨人员的姓名: ");scanf("%s",name);
if((fp=fopen("ren.dat","rb"))==NULL) {printf("can't open file!\n");exit(0);}
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define N 15 //最大容量为15
typedef struct //定义一个结构
{
char name[10];
char haoma[15];
char leibie[10];
char dizhi[20];
}ren;
//菜单
void menu() //目录
{
system("cls"); //清屏
printf(" #########欢迎使用手机通讯录#########\n");
printf("\n");
printf("==============================================================================\n");
printf(" 1.~~号码查询~~ \n");
printf(" 2.~~号码添加~~ \n");
printf(" 3.~~号码拨号~~ \n");
printf(" 4.~~号码修改~~ \n");
printf(" 5.~~号码删除~~ \n");
printf(" 0. ~~退出~~ \n");
printf("==============================================================================\n");
fread(&s,sizeof(ren),1,fp);
n=0;
while(!feof(fp))
{
n++;
if(strcmp(s.haoma,ry.haoma)==0)
{printf("号码已经存在,不能记录.\n");break;}//遇到有相同的号码
if(strcmp(,)==0)