手机通讯录源代码
- 格式:doc
- 大小:40.00 KB
- 文档页数:6
#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⼿机通讯录(源码) 简易⼿机通讯录⼀:功能模块 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;}。
开发中需要获取手机用户的通讯录信息,要求运行在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通讯录程序设计总结一、需求分析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手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来。
这一篇文章我主要带领同学们熟悉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#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);}}}```这个程序使用了结构体来表示联系人的信息,并通过全局数组来保存所有联系人。
C语⾔实现通讯录的详细代码⽬录(⼀)实现思路1.通讯录功能2.模块化实现各⽅⾯的功能3.代码实现(⼆)源代码A.test.cB.Contact.hC.Contact.c(⼀)实现思路1.通讯录功能添加好友,删除好友,查找好友,修改好友信息,对好友进⾏排序2.模块化实现各⽅⾯的功能a. test.c测试通讯录功能b. Contact.c实现通讯录功能c. Contact.h包含通讯录实现的头⽂件3.代码实现(⼆)源代码A.test.c#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include <string.h>#include "contact.h"void menu(){printf("*******************************\n");printf("*** 1.Add 2.Del ***\n");printf("*** 3.Search 4.Modify ***\n");printf("*** 5.Show 6.Sort ***\n");printf("*** 7.Help 8.About0 ***\n");printf("*** 0.Exit ***\n");printf("*******************************\n");}int main(){int input = 0;//创建通讯录InitContact(&con);//使size的初始值,以及好友信息初始化为0; do{menu();printf("请选择:");scanf("%d", &input);switch (input){//添加好友信息case Add:AddContact(&con);break;//删除好友case Del:DelContact(&con);break;//查找好友信息case Search:SearchContact(&con);break;//修改好友信息case Modify:ModifyContact(&con);break;//显⽰好友信息case Show:ShowContact(&con);break;//好友排序case Sort:SortContact(&con);break;//退出case Exit:printf("退出通讯录!");break;//通讯录的使⽤以及帮助case Help:HelpContact();break;//关于通讯录case About:AboutContact();break;//选择错误default:printf("选择错误!");break;}} while (input);return 0;}B.Contact.h#define _CRT_SECURE_NO_WARNINGS 1#define Max 1000#define Max_name 20#define Max_sex 5#define Max_tele 12#define Max_addr 30enum OptionDel,Search,Modify,Show,Sort,Help,About};//创建⼀个结构体来存放通讯录中要存放的信息struct PeoInfo{char name[Max_name];int age;char sex[Max_sex];char tele[Max_tele];char addr[Max_addr];};//通讯录类型struct Contact{struct PeoInfo data[Max];//存放⼀个信息,包括好友姓名,年龄,性别,电话,地址 int size;//记录当前已经有的元素个数//存⼊⼀个好友,size加1,表⽰通讯录⼈数增加⼀个};//声明函数//1.对通讯录进⾏初始化void InitContact(struct Contact* ps);//增加好友信息void AddContact(struct Contact* ps);//删除好友void DelContact(struct Contact* ps);//查找指定姓名的好友void SearchContact(struct Contact* ps);//显⽰好友信息void ShowContact(const struct Contact* ps);//修改好友信息void ModifyContact( struct Contact* ps);//按名字⾸字母对通讯录的好友进⾏排序void SortContact( struct Contact* ps);//帮助使⽤通讯录void HelpContact();//关于通讯录void AboutContact();C.Contact.c#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"#include <stdio.h>#include <stdlib.h>#include <string.h>//初始化通讯录void InitContact(struct Contact* ps){memset(ps->data, 0, sizeof(ps->data));ps->size = 0;//设置通讯录最初只有0个元素}void HelpContact(){printf("各按键的使⽤:\n");printf("1.添加好友\n");printf("2.删除好友\n");printf("3.查找好友信息\n");printf("4.修改好友信息\n");printf("5.显⽰好友信息\n");printf("6.对好友进⾏排序\n");printf("7.帮助使⽤通讯录\n");printf("8.关于通讯录\n");printf("谢谢使⽤通讯录!\n");}//关于通讯录void AboutContact(){printf("通讯录⼀般指在⽇常⽣活中⽤笔记录,也在⼿机,电脑,电⼦字典等电⼦产品中拥有这个功能。
C语言版用链表实现通讯录“标头.h”#include<stdio.h>#include<stdlib.h>#include<string.h>#define Len sizeof(Lnode)int seat;//全局变量,用于存储通讯录成员信息typedef struct Lnode{int number; //学号char name[20];//名字double telenum;//电话struct Lnode *next;//定义一个指向下一个节点的指针} Lnode,*LinkList;//把struct Lnode*重定义为LinkListLinkList creatIncreLink();void deleteElem(LinkList l,int i);int delName(LinkList l,char name[]);int delNum(LinkList l,int n);void insertYouxu(LinkList l,LinkList Elem);void printList(LinkList l);LinkList prior(LinkList l,LinkList p);int searchName(LinkList l,char name[]);int searchNum(LinkList l,int n);#include<stdio.h>#include"标头.h"LinkList creatIncreLink(){LinkList p;int num=1,number;double telenum;char name[20],temp;LinkList L,P;L=(LinkList)malloc(Len); //创建头结点L->next = NULL;printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结果标志\n");printf("请输入学号 %d:");scanf("%d",&number);printf("请输入姓名 %d:");temp=getchar();gets(name);printf("请输入电话号码 %d:");scanf("%lf",&telenum);while (number >= 0){p = (LinkList)malloc(Len); //新分配结点p->number = number;p->telenum = telenum;strcpy(p->name,name);insertYouxu(L,p); //有序地插入新结点num++;printf("请输入学号 %d:",&num);scanf("%d",&number);printf("请输入姓名 %d:",num);temp=getchar();gets(name);printf("请输入电话号码 %d:",num);scanf("%lf",&telenum);}return(L);}void deleteElem(LinkList l,int i) //删除函数{LinkList p=l,q;//让p指向lint j=0;//循环变量jwhile(p->next&&j<i-1) //循环让p指向第i个元素的前驱 {p=p->next;j++;}if(p->next==0) //判断下一个元素是否为空printf("ERROR");q=p->next;//将p指向第i个元素p->next=q->next;//p的next指向q的nextfree(q);//释放q链表}int delName(LinkList l,char name[]){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL)printf("该链表中没有元素");else{while(p!=NULL){if(strcmp(p->name,name)!=0){flag=1;printf("%s",p->name);p=p->next;deleteElem(l,seat);}else{p=p->next;seat++;}}if(flag==1)printf("被删除");}return flag;}int delNum(LinkList l,int n){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL)printf("没有元素");else{while(p!=NULL){if(p->number<=n){if(p->number==n){flag=1;printf("%d",p->number);p=p->next;deleteElem(l,seat);}}else{p=p->next;seat++;}}printf("被删除");}return flag;}void insertYouxu(LinkList l,LinkList Elem){LinkList p=l->next;while(p!=NULL&&Elem->number>=p->number) {if(p->number==Elem->number){printf("重复输入\n");return;}p=p->next;}if(p==NULL){p=prior(l,p);Elem->next=NULL;p->next=Elem;}else{p=prior(l,p);Elem->next=p->next;p->next=Elem;}}void printList(LinkList l){LinkList p=l;int n=1;printf("内容");if(l==NULL||l->next==NULL)printf("没有元素\n");elsewhile(p->next!=NULL){printf(" - %-9d",n,p->next->number);printf(" %-5s %.0f\n",p->next->name,p->next->telenum); p=p->next;n++;}}LinkList prior(LinkList l, LinkList p){LinkList p_prior=l;if(l->next==NULL)return(l);while(p_prior->next!=p)p_prior=p_prior->next;return(p_prior);}int searchName(LinkList l,char name[]){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL||l==NULL)printf("查找失败");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;printf("要查找的是%d位通讯录成员\n",seat);printf("学号:%d 名字:%s 电话:%f\n",p->number,p->name,p->telenum); }p->next;seat++;}}return flag;}int searchNum(LinkList l,int n){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL)printf("查找失败");else{while(p!=NULL){if(p->number<=n)if(p->number==n){flag=1;printf("要查找的是%d个成员\n",seat);printf("学号:%d 姓名:%s 电话:%f",p->number,p->telenum,p->telenum); }p=p->next;seat++;}}return flag;}int main(void){LinkList l=NULL,p;int flag=0;int menu;char temp;system("color 3f");printf("输入1通讯录的建立\n");printf("输入2插入通讯录\n");printf("输入3查询通讯录\n");printf("输入4删除通讯录\n");printf("输入5显示通讯录信息\n");printf("输入0退出\n");scanf("%d",&menu);while(menu!=0){switch(menu){case 1:l=creatIncreLink();printf("建立通讯录\n");printList(l);flag=1;break;case 2:if(flag==1){int number;double telenum;char name[20];char temp;printf("请输入学号\n");scanf("%d",&number);printf("请输入姓名\n");scanf("%s",&name[20]);printf("请输入电话号码");scanf("%f",&telenum);p=(LinkList)malloc(Len);p->number=number;strcpy(p->name,name);p->telenum=telenum;insertYouxu(l,p);printf("插入后\n");printList(l);}else{printf("error\n");}break;case 3:int way,n,s;char na[20],temp;if(l!=NULL){if(flag){printf("选择查找方式1,按学号查找2按姓名"); scanf("%d",&way);if(way==1){printf("请输入学号\n");scanf("%d",&n);s=searchNum(l,n);if(s==0)printf("shibai");}else if(way==2){printf("请输入姓名");temp=getchar();gets (na);s=searchName(l,na);if(s==2)printf("失败");}else printf("无记录");}break;}else printf("无记录");break;case 4:printf("1,按序号删除2 按学号,3按姓名\n"); scanf("%d",&way);if(way==1){int n;printf("请输入序号");scanf("%d",&n);printf("删除后\n");deleteElem(l,n);printList(l);}else if(way==2){int n,f;printf("请输入学号");scanf("%d",&n);f=delNum(l,n);if(f!=0){printf("删除后");printList(l);}else printf("失败");}else if(way==3){char na[20],temp;int f;printf("输入姓名");temp=getchar();gets(na);f=delName(l,na);if(f!=0){printf("删除后");printList(l);}else printf("失败");}else printf("error\n");break;case 5:printf("内容如下\n");printList(l);break;case 0:exit(0);default:printf("重新输入"); }printf("选择\n");scanf("%d",&menu);}}。