手机通讯录源代码
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);}}}```这个程序使用了结构体来表示联系人的信息,并通过全局数组来保存所有联系人。
C语言实现通讯录的详细代码
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语言版用链表实现通讯录
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);}}。
手机通讯录源代码
手机通讯录源代码#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的手机通讯录(附程序)
20xx-20xx 学年 x 学期xxxx大学电工电子实验教学中心创新性实验研究报告实验项目名称_基于android的手机通讯录_组长姓名xxx 学号xxxxxxxxxxxxxxx联系电话xxxxxxxxxxxx *************************成员姓名xxx 学号xxxxxxxxxxxxx成员姓名xxx 学号xxxxxxxxxxxxxxx专业电子信息工程班级20xx级x班指导教师及职称xx20xx年x月x 日开发流程见下图:1、增加、删除、编联系人点击通信录界面中的增加按钮,入增加联系人面。
输入联系人的基本信息,并可根据用户需求增加个性化信息如头像、姓名、手机号码、办室电话、家庭电话、职务职称、单位名称、地址、邮政编码、Email、其他联系方式、备注这些信息,击确认返回主界面。
点击通信录中一个已存在的联系人,进入联系人编辑界面,可修改系人的资料或进行删除联系人操作,完成后退回到主界面。
对列表中联系人的标记,点mnu键弹出功能界面上的删除按键也可进行删除。
还可以在菜单上选择删除全部联系人清空通讯录。
在删除联系人的过程中,系统将提示用户是否继续操作,若放弃操作,则系人信息将继续保存。
2、查找联系人用户点击menu键打开底部菜单框,底部菜单框为查询系人提供入口,进入通讯录的缺省页面为联系人列表,在列表中看到所有联系人的姓名、电话息排列,用户点击查找按键输入联系人基本信息,通讯录显所有符合查询条件的联系人列表,用户选择一个联系人进入联系人基本信息页面进行其他操作;查询完成,用户按返回键返回主界面。
3、通功能用户在通录选择联系人进入联系详细信息界面,这时点击menu键打开通信功能框,选择打电话、发信息的功能进行操作。
4、菜单能通过对menu按的点击,显示底部菜框,包含有增加查找、除、菜单、返回功能,菜单按键则包含显示所有、删除所有等实用功能。
五、实验结果与分析通讯录界面要求布局合理简约,颜色舒,控制按钮简单明了,让用户一眼就能看出各个按钮的作用及操方法。
通讯录源代码,直接可用
#include <stdio.h>#include <windows.h>#include <stdlib.h>#include <conio.h>#include <string.h>/********************结构体定义******************************/ struct Contact{char NAME[20];char Phone[12];char QQ[12];};struct Node{Contact person;Node *next;};Node *head=NULL;/**************************函数申明*************************/ void AddPerson(Contact); //添加联系人Contact *FindPerson(char *name); //查找联系人void DelPerson(char *name); //删除联系人void ShowAll(); //显示所有联系人void function_6(); //分类显示联系人void SaveData(); //保存联系人信息void LoadData(); //载入联系人信息void face(); //界面int CheckPhone(char *num); //检验手机号是否合法int JudgePhone(char *num); //判断电话号码的用户类型/**********************主函数部分****************************/ int main(){system("title 迷你通讯录BY 马恒");system("color f2");LoadData();int op;face();while(1){printf("请选择功能:");fflush(stdin);if(0==scanf("%d",&op)){printf("\n输入不合法,请重新输入!\n");continue;}switch(op){case 0:{printf("感谢您的使用,下次再见!\n");getchar();exit(0);}break;case 1:{Contact per;fflush(stdin);printf("姓名:");scanf("%s",);do{printf("联系电话:");scanf("%s",per.Phone);}while(!CheckPhone(per.Phone));printf("QQ:");scanf("%s",per.QQ);AddPerson(per);SaveData();printf("添加联系人成功!\n");}break;case 2:{char name[15];printf("输入查找姓名:");scanf("%s",name);Contact *per=FindPerson(name);if(NULL!=per){printf("%s %s %s",per->NAME,per->Phone,per->QQ);}else{printf("%s联系人不存在,查询失败!",name);}}break;case 3:{char name[15];printf("输入需要修改的联系人:\n");scanf("%s",name);Contact *per=FindPerson(name);if(NULL==per){printf("%s联系人不存在,修改失败!",name);}else{printf("新姓名:");scanf("%s",per->NAME);printf("\n新号码:");scanf("%s",per->Phone);printf("\n新QQ号:");scanf("%s",per->QQ);SaveData();printf("更新联系人成功!\n");}}break;case 4:{char name[20];printf("输入需要删除的联系人:");scanf("%s",name);Contact *per=FindPerson(name);if(per==NULL){printf("%s联系人不存在,删除失败!",name);}else{DelPerson(name);SaveData();printf("\n成功删除联系人!\n");}}break;case 5:{ShowAll();}break;case 6:{system("cls");for(int i=1;i<=80;i++){printf("@");}printf("\t\t\t\t1.显示全部移动用户\n");//2printf("\t\t\t\t2.显示全部联通用户\n");//1printf("\t\t\t\t3.显示全部电信用户\n");//3printf("\t\t\t\t0.返回主菜单\n");for(i=1;i<=80;i++){printf("@");}int m=1,op;while(m){Node *p=head;printf("请输入指令:");fflush(stdin);if(0==scanf("%d",&op)){printf("您输入的指令无效,重新输入:");continue;}switch(op){case 0:{system("cls");face();m=0;}break;case 1:{while(NULL!=p){if(2==JudgePhone(p->person.Phone)){printf("%s %s %s \n",p->,p->person.Phone,p->person.QQ);}p=p->next;}}break;case 2:{while(NULL!=p){if(1==JudgePhone(p->person.Phone)){printf("%s %s %s \n",p->,p->person.Phone,p->person.QQ);}p=p->next;}}break;case 3:{while(NULL!=p){if(3==JudgePhone(p->person.Phone)){printf("%s %s %s \n",p->,p->person.Phone,p->person.QQ);}p=p->next;}}break;default:{printf("输入不合法,重新输入:");}}}}break;default:{printf("您输入的内容不合法,请重新输入!\n");}}}return 0;}void AddPerson(Contact person) //添加联系人Node *pNewNode;pNewNode=(Node*)malloc(sizeof(Node));pNewNode->person=person;pNewNode->next=NULL;if(NULL==head){head=pNewNode;}else{Node *pNode=head;while(NULL!=pNode->next){pNode=pNode->next;}pNode->next=pNewNode;}}void ShowAll() //显示所有联系人{Node *pNode=head;int icnt=0;while(NULL!=pNode){printf("%s %s %s \n",pNode->,pNode->person.Phone,pNode->person.QQ);pNode=pNode->next;icnt++;}printf("一共有%d个联系人\n",icnt);}Contact *FindPerson(char *name) //查找联系人{Node *pNode=head;while(NULL!=pNode){if(strcmp(pNode->,name)==0){break;}elsepNode=pNode->next;}return pNode?(&(pNode->person)):NULL;}void DelPerson(char *name){if(strcmp(head->,name)==0){Node *pNewHead=head->next;free(head);head=pNewHead;return;}Node *p1=head;while(strcmp(p1->next->,name)!=0) {p1=p1->next;}Node *p2=p1->next->next;free(p1->next);p1->next=p2;}void LoadData(){FILE *fp=fopen("data","rb");if(NULL==fp){return;}Contact ct;while(fread(&ct,sizeof(Contact),1,fp)){AddPerson(ct);}fclose(fp);}void SaveData(){FILE *fp=fopen("data","wb"); //以二进制写入Node *pNode=head;while(NULL!=pNode){fwrite(&(pNode->person),sizeof(Contact),1,fp);pNode=pNode->next;}fclose(fp);}void face(){for(int i=1;i<=80;i++)printf("=");for(i=1;i<=30;i++)printf("=");printf("通讯录管理系统v1.0");for(i=0;i<=30;i++)printf("=");for(i=1;i<=80;i++)printf("=");printf("\t\t\t\t1.添加联系人\n");printf("\t\t\t\t2.查找联系人\n");printf("\t\t\t\t3.修改联系人\n");printf("\t\t\t\t4.删除联系人\n");printf("\t\t\t\t5.显示所有联系人\n");printf("\t\t\t\t6.分类显示联系人\n");printf("\t\t\t\t0.退出通讯录\n");for(i=1;i<=80;i++){printf("=");}for(i=1;i<=80;i++){printf("=");}}int CheckPhone(char *num){if(11!=strlen(num)){return 0;}int i;for(i=0;i<11;i++){if(num[i]<'0'||num[i]>'9'){return 0;}}return 1;}int JudgePhone(char *num) //判断电话号码的用户类型{if('1'!=num[0]){return 0;}if('1'==num[0]){if('3'==num[1]){switch(num[2]){case '0':case '1':case '2':return 1;break;case '3':return 3;break;case '4':case '5':case '6':case '7':case '8':case '9':return 2;break;default:return 0;}}else if('5'==num[1]){switch(num[2]){case '0':case '1':case '2':case '7':case '8':case '9':return 2;break;case '5':case '6':return 1;break;case '3':return 3;break;default:return 0;}}else if('8'==num[1]){switch(num[2]){case'5':case'6':return 1;break;case'0':case'1':case'2':case'7':case'8':case'9':return 2;break;case'3':return 3;break;default:return 0;break;}}else{return 0;}}return 0;}。
python面向对象写通讯录代码
Python是一种面向对象的编程语言,在Python中,我们可以使用面向对象的方式来编写通讯录代码。
面向对象编程能够使代码更加清晰、易于维护,并且可以提高代码的重用性。
本文将介绍如何使用Python 面向对象的方式来编写通讯录代码。
一、设计通讯录类我们首先需要设计一个通讯录类,这个类将包含通讯录的基本功能,比如添加通联人、删除通联人、查找通联人等操作。
通讯录类的设计如下:```pythonclass AddressBook:def __init__(self):self.contacts = {}def add_contact(self, name, phone_number):self.contacts[name] = phone_numberdef delete_contact(self, name):if name in self.contacts:del self.contacts[name]def search_contact(self, name):if name in self.contacts:return self.contacts[name]else:return "Contact not found"```在这个通讯录类中,我们使用了一个字典来存储通联人的尊称和通联方式号码,add_contact方法用于添加通联人,delete_contact方法用于删除通联人,search_contact方法用于查找通联人。
二、编写通讯录管理程序有了通讯录类之后,我们可以编写一个通讯录管理程序来演示这个类的使用。
程序的基本逻辑如下:```pythondef m本人n():address_book = AddressBook()while True:print("1. Add contact")print("2. Delete contact")print("3. Search contact")print("4. Exit")choice = input("Please enter your choice: ")if choice == "1":name = input("Please enter the name: ")phone_number = input("Please enter the phone number: ")address_book.add_contact(name, phone_number)elif choice == "2":name = input("Please enter the name: ")address_book.delete_contact(name)elif choice == "3":name = input("Please enter the name: ")result = address_book.search_contact(name)print(result)elif choice == "4":breakelse:print("Invalid choice, please try ag本人n")if __name__ == '__m本人n__':m本人n()```在这个通讯录管理程序中,我们首先创建了一个AddressBook对象,然后进入一个循环当中,用户可以输入相应的选项来执行相应的操作,直到用户选择退出为止。
android 通讯录源码
android:id="@+id/lv_userlist" android:layout_above="@+id/gv_buttom_menu" android:layout_width="fill_parent" android:layout_height="wrap_content"> </ListView> </LinearLayout>
android:textSize="18sp">
</EditText>
</LinearLayout>
</RelativeLayout>
位于菜单上方
2.2 main_menu_grid.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <GridView
android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="3" android:verticalSpacing="10dip" android:horizontalSpacing="10dip" android:stretchMode="columnWidth" android:gravity="center" /> </LinearLayout>
通讯录源代码
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <malloc.h>#define LEN sizeof(struct record) //计算字节//#define NULL 0int num;//通讯录文件中的联系人计数器struct record{char name[100];char gender[100];char tel[100];char city[100];char eip[100];struct record *next;};struct record *head;void menu();//显示英文提示选单函数void creat();//创建新的通讯录void add();//将某联系人增加到通讯录中void find();//综合查询某联系人的通讯信息void alter();//修改通讯录中某联系人的信息void deleteb();//删除通讯录中某联系人的信息void list();//显示通讯录中的所有记录void save();//用于将对通讯录的更新保存到文件中void load();//创建新的通讯录void quit(int *f);//退出选单void shifang();// 释放内存函数声明void main(){int choic;head=NULL;int flag=1;printf("使用说明:在当通讯录中存在信息时每次使用通讯录前应先加载通讯录文件!\n");while(flag){menu();scanf("%d",&choic);switch(choic){case 1:{if(head==NULL)creat(); //创建else{shifang();creat(); //重新创建}}break;case 2:{ add();save();//将追加的记录保存到文件中}break;case 3:find();printf("\t");system("pause"); //使系统暂停break;case 4:{ alter();save();//将修改后的记录保存到文件中}printf("\t");system("pause");break;case 5:deleteb();printf("\t");system("pause");break;case 6:load();break;case 7:quit(&flag);break;case 8:list();printf("\t");system("pause");break;}}}void menu(){system("cls");printf( "\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★\n");printf( "\t\t※※\n"); printf( "\t\t※欢迎使用通讯录※\n"); printf( "\t\t※※\n"); printf( "\t\t※ 1.创建新的通讯录 2.增加联系人※\n"); printf( "\t\t※※\n"); printf( "\t\t※ 3.查询联系人信息 4.修改联系人信息※\n"); printf( "\t\t※※\n"); printf( "\t\t※ 5.删除某联系人信息 6.加载通讯录文件※\n"); printf( "\t\t※※\n"); printf( "\t\t※7.退出选单8.显示通讯录中所有记录※\n"); printf( "\t\t※※\n"); printf( "\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n"); printf("\n\t\t请输入您选择的操作:");}void creat() /*函数void creat()创建联系人的个人信息*/{struct record *p1,*p2;char name[100];num=0;p1=head=(struct record *)malloc(LEN);p2=p1;system("cls");printf("请输入姓名,性别,电话,城市及邮编(结束操作请按0号键)\n"); getchar();printf("输入姓名:");gets(name);if(strcmp(name,"0")!=0&&name){strcpy(p1->name,name);printf("输入性别(男or 女):");gets(p1->gender);printf("输入8位电话号码或11位手机号(0-9):");gets(p1->tel);printf("输入所在城市:");gets(p1->city);printf("输入邮编(0-9):");gets(p1->eip);p1->next=NULL;while(1){num=num+1;//通讯录文件中的联系人计数器增1if(num==1)head=p1;elsep2->next=p1;p2=p1;printf("请输入姓名:");gets(name);if(strcmp(name,"0")==0)//当输入姓名为0时则表示此次对记录的录入结束{break;}else//继续录入{p1=(struct record *)malloc(LEN);strcpy(p1->name,name);printf("输入性别(男or 女):");gets(p1->gender);printf("输入8位电话号码或11位手机号(0-9):");gets( p1->tel);printf("输入所在城市:");gets(p1->city);printf("输入邮编(0-9):");gets(p1->eip);p1->next=NULL;}}p2->next=NULL;save();return;}elsereturn;}void list()//用于输出通讯录中的所有联系人信息的函数{struct record *p;if(head!=NULL)//通讯录非空时,列出所有联系人信息{ system("cls");p=head;printf("本通讯录现在共有%d人:\n",num);printf("---姓名-------性别------手机--------城市---------邮编\n");while(p!=NULL){printf("== %s",p->name); printf(" ");printf("%s",p ->gender); printf(" ");printf("%s",p->tel); printf(" ");printf("%s",p->city); printf(" ");printf("%s",p->eip); printf(" \n");p=p->next;}printf("==================================\n"); }else //当通讯录为空时,给出提示信息printf("通讯录为空,无法输出!");}void add()//增加记录函数{struct record *p0,*p1,*p2;system("cls");//进行系统清屏char name[100],ch;p1=head;printf("请输入所要增加的联系人的各项信息:\n");getchar();//吸收回车符或空格printf("请输入姓名:");gets(name);if((strcmp(name,"0")==0)&&name){printf("姓名不能为0,增加失败!\n");return;}else{p0=(struct record *)malloc(LEN);strcpy(p0->name,name);printf("输入性别(男or 女):");gets(p0->gender);printf("输入8位电话号码或11位手机号(0-9):");gets(p0->tel);printf("输入所在城市:");gets(p0->city);printf("输入邮编(0-9):");gets(p0->eip);num=num+1;if(head==NULL){head=p0;p0->next=NULL;return;}else{while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL))//查找结点所应添加的相应位置{p2=p1;p1=p1->next;}if(strcmp(p0->name,p1->name)<0||strcmp(p0->name,p1->name)==0)//把结点有序地增加到链表中{if(head==p1){head=p0;//把结点添加到表头}else{p2->next=p0;}p0->next=p1;}else //把结点添加到表尾{p1->next=p0;p0->next=NULL;}printf("\n是否继续添加?(Y/N):");ch=getchar();if((ch=='y')||(ch=='Y'))add();return;}}}void deleteb() //删除记录{system("cls");struct record *p,*q;char sname[100],ch;p=head;if(head==NULL){printf("通讯录为空!无法删除!\n");return;}printf("请输入欲删除记录的姓名:");scanf("%s",sname);while(strcmp(p->name,sname)!=0 && p->next!=NULL) //查找节点并删除该节点{q=p;p=p->next;}if(strcmp(p->name,sname)==0){printf("%s的通讯内容如下:\n",sname);printf("---姓名-------性别------手机--------城市---------邮编\n");printf("==================================\n");printf("== %s",p->name);printf(" ");printf("%s",p->gender);printf(" ");printf("%s",p->tel);printf(" ");printf("%s",p->city);printf(" ");printf("%s",p->eip); printf(" \n");printf("==================================\n");getchar();//吸收回车键和空格printf("您确认要删除此人的通讯记录吗?(Y/N):");ch=getchar();if((ch=='Y')||(ch=='y')){if(p==head) //当通讯录中只有一条记录时head=p->next;elseq->next=p->next;num=num-1;//通讯录文件中的联系人计数器减1printf("删除成功!\n");save();//保存到文件中}else if((ch=='N')||(ch=='n'))return;}else{printf("通讯录中无此人信息!\n");}return;}void quit(int *f)//退出选单{*f=0 ;printf("谢谢您本次的使用!\n");}void save()//将通讯录写入文件的函数{FILE *fp;struct record *p1;char tong[100];if(head==NULL){fp=fopen("tongxun.txt","w");fp=NULL;//将通讯录文件清空return;}getchar();//吸收回车键和空格printf("请输入要保存通讯录的文件名:"); gets(tong);fp=fopen("tongxun.txt","w");if(fp==NULL){printf("打开通讯录文件失败!\n");return;}p1=head;fprintf(fp,"姓名性别手机城市邮编\n");for(;p1!=NULL;){fprintf(fp,"%s %s %s %s %s\n",p1->name,p1->ge nder,p1->tel,p1->city,p1->eip);p1=p1->next;}printf("保存完毕!\n");fclose(fp);}void load()//文件加载函数{FILE *fp;char tong[100];struct record *p1,*p2;system("cls");getchar();printf("正在加载通讯录文件!\n");getchar();printf("请先输入要加载的通讯录信息所在的文件名称:");gets(tong);if((fp=fopen("tongxun.txt","r"))==NULL){ printf("此通讯录名不存在,无法输出\n");return;}else{shifang();//释放内存}p1=(struct record *)malloc(LEN);fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->gender,&p1->tel,&p1->city,&p1->eip); if(feof(fp)!=0){printf("文件为空,无法打开!\n");return;}else{rewind(fp);p2=p1;head=p1;num=0;while(feof(fp)==0){fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->gender,&p1->tel,&p1->city,&p1->eip);if(feof(fp)!=0)break;p2->next=p1;p2=p1;p1=(struct record *)malloc(LEN);num=num+1;}p2->next=NULL;p1=head;head=head->next;num=num-1;free(p1);list();//显示所有记录printf("加载完毕!\n");return;}fclose(fp);}void shifang()//释放内存函数{struct record *p1;while(head!=NULL){p1=head;head=head->next;free(p1);}return;}void findbyname()//按姓名查询某联系人的通讯录信息{struct record *p1,*p2;char name[100];int m;system("cls");if(head==NULL){printf("通讯录为空,无法显示!\n");return;}p1=head;getchar();printf("请输入需要查找人的姓名:");m=0;gets(name);while(p1!=NULL){while((strcmp(p1->name,name))!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(p1->name,name)==0){m++;printf("%s的通讯内容如下:\n",name);printf("---姓名-------性别------手机--------城市---------邮编\n");printf("==================================\n");printf("== %s",p1->name);printf(" ");printf("%s",p1->gender);printf(" ");printf("%s",p1->tel);printf(" ");printf("%s",p1->city);printf(" ");printf("%s",p1->eip); printf(" \n");printf("==================================\n");printf("\n是否继续查找某联系人的姓名信息(Y/N):");if((getchar()=='y')||(getchar()=='Y'))findbyname();break;}p1=p1->next;}if(m==0)printf("此人未在本通讯录中!\n");return;}void findbytel()//按电话查询某联系人的通讯录信息{struct record *p1,*p2;char tel[100];int m;system("cls");if(head==NULL){printf("通讯录为空,无法显示!\n");return;}p1=head;getchar();printf("请输入需要查找人的电话:");m=0;gets(tel);while(p1!=NULL){while((strcmp(p1->tel,tel))!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(p1->tel,tel)==0){m++;printf("%s的通讯内容如下:\n",p1->name);printf("---姓名-------性别------手机--------城市---------邮编\n");printf("==================================\n");printf("== %s",p1->name);printf(" ");printf("%s",p1->gender);printf(" ");printf("%s",p1->tel);printf(" ");printf("%s",p1->city);printf(" ");printf("%s",p1->eip); printf(" \n");printf("==================================\n");printf("\n是否继续查找某联系人的电话信息(Y/N):");if((getchar()=='y')||(getchar()=='Y'))findbytel();break;}p1=p1->next;}if(m==0)printf("此人未在本通讯录中!\n");return;}void find(){int m;printf("\n请选择查询方式:\n");printf("\t 1------姓名\n");printf("\t 2------电话\n");printf("\t 3------返回\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3){printf("输入错误,请重新选择:");scanf("%d",&m);}if(m==1)findbyname();if(m==2)findbytel();}void altertel() //修改电话记录{struct record *p;int a = 0;char name[100];system("cls");getchar();printf("请键入需要修改的联系人的姓名:");gets(name);for(p=head;p!=NULL;p=p->next){if(strcmp(p->name,name)==0){printf("%s的通讯内容如下:\n",name);printf("---姓名-------性别------手机--------城市---------邮编\n");printf("==================================\n");printf("== %s",p->name);printf(" ");printf("%s",p->gender);printf(" ");printf("%s",p->tel);printf(" ");printf("%s",p->city);printf(" ");printf("%s",p->eip); printf(" \n");printf("==================================\n");printf("请键入新电话:");gets(p->tel);printf("修改成功!\n");a=1;break;}}if(a != 1)printf("无此通讯录!\n");return;}void altereip(struct record *p1)//修改邮编信息{printf("请键入新邮编:");gets(p1->eip);}void altercity() //修改城市信息{struct record *p;int a = 0;char name[100];system("cls");getchar();printf("请键入需要修改的联系人的姓名:");gets(name);for(p=head;p!=NULL;p=p->next){if(strcmp(p->name,name)==0){printf("%s的通讯内容如下:\n",name);printf("---姓名-------性别------手机--------城市---------邮编\n");printf("==================================\n");printf("== %s",p->name);printf(" ");printf("%s",p->gender);printf(" ");printf("%s",p->tel);printf(" ");printf("%s",p->city);printf(" ");printf("%s",p->eip); printf(" \n");printf("==================================\n");printf("请键入联系人目前所在城市:");gets(p->city);altereip(p);printf("修改成功!\n");a = 1;break;}}if(a != 1)printf("无此通讯录!\n");return;}void alter(){int m;system("cls");if(head==NULL){printf("通讯录为空!无法修改!\n"); return;}printf("\n请选择修改方式:\n");printf("\t 1------电话\n");printf("\t 2------城市\n");printf("\t 3------返回\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3){printf("输入错误,请重新选择:");scanf("%d",&m);}if(m==1)altertel();if(m==2)altercity();}。
Python编程基础与应用 简易通讯录系统[5页]
简易通讯录系统【案例描述】现在各大手机都有自己的、各种通讯录程序,但是这些公司都有自己的版权,我们也不可能得到这些源代码,而且大型的通讯录程序也相当复杂。
现在我们通过Python开发一个简单易懂的电话号码查询系统程序,从中更深入了解一下面向对象编程的思想。
该简易通讯录系统,能够实现了查找联系人并输出其联系号码、添加新联系人及其号码、删除联系人、更新联系人号码、输出所有联系人及其号码功能。
【案例分析】1)首先使用列表存储联系人及其号码。
2)定义联系人这个类,定义联系人的行为,包括增加、修改、删除等行为。
3)在整个程序过程中,通过输入功能编号,执行不同的功能,在不同的功能代码中,生成具体的对象实例,调用其具体的行为。
4)使用的是二维列表,在第一列中存储的是联系人的姓名,第二列存储号码。
在查找联系人的行为中,可以针对第一列进行。
选择使用循环语句完成对数据的对比。
它主要用的技术要点:使用面向对象思维创建联系人类,通过二维列表存储数据,在使用功能上,可以使用数字进行选择,并对数字进行判断,然后实例化对象,调用对象行为,实现需求功能。
【实施步骤】新建Python文件“address.py”,代码如下:#定义一个列表,保存联系人信息frilist = [['张三','138****8888'],["李四",'139****9999'],["张五",'188****8888'],["李六", '188****9999']]#定义一个类class Person:name = ""telnum = ''def __init__(self,name): = name#查询显示def saysome(self):print("你朋友%s,的电话号码是:%s "%(, frilist[snu][1])) #增加def addperson(self,name,telnum): = nameself.telnum = telnumnewlist =[,self.telnum]frilist.append(newlist)print ('Succlessful!')#删除def delperson(self,name): = namedel frilist[snu]print('Success DEL')#修改def alterperson(self,sname,telnum):=snamefrilist[snu][1] = telnumprint ('Succlessful update!')print ('''本程序是一个简易的通讯录程序.请选择以下几项服务:[1] : 请输入你要查找的朋友姓名[2] : 添加新的朋友到通讯录[3] : 删除通讯录中的朋友[4] : 修改通讯录中朋友的联系电话[5] : 显示所有的通讯录列表[6] : 退出程序''')#下面开始实例化类并调用它,展示通讯录的功能snu = 0 #定义snu用于保存列表中的行号,初始化为0while True:flag = Falsenum = input('请选择号码[1,2,3,4,5] -->')if (num == '1'):sname = input('请输入姓名-->')namelist = [i[0] for i in frilist]for strname in namelist:if sname == strname:flag = Truebreakif (flag):snu = namelist.index(sname)p = Person(sname)p.saysome()else:print('Not in it')elif (num=='2'):sname = input('请输入姓名-->')telnum = input('请输入联系电话号码-->')p = Person(sname) #实例化p.addperson(sname,telnum) #调用“增加”addperson()print(frilist)elif (num=='3'):sname = input('请输入姓名-->')namelist = [i[0] for i in frilist]for strname in namelist:if sname == strname:flag = Truebreakif (flag):snu = namelist.index(sname)p = Person(sname)p.delperson(sname)print(frilist)else:print('Not in it')elif (num == '4'):sname = input('请输入姓名-->')namelist = [i[0] for i in frilist]for strname in namelist:if sname == strname:flag = Truebreakif (flag):snu = namelist.index(sname)telnum = input('请输入联系电话号码-->')p = Person(sname)p.alterperson(sname, telnum)print(frilist)else:print('Not in it')elif (num == '5'):print(frilist)input()elif (num == '6'):print("再见!")exit()else:print("请输入列表中的号码!")【调试结果】可以直接在文件夹路径中双击“address.py ”文件,即可调用。
python通讯录题讲解
python通讯录题讲解在Python中,我们可以使用字典来实现一个简单的通讯录。
首先,我们需要定义一个空字典来存储通讯录的联系人信息: ```pythoncontacts = {}```接下来,我们可以编写一个函数来添加联系人到通讯录中:```pythondef add_contact(name, phone):contacts[name] = phoneprint("联系人已添加成功!")```这个函数接受两个参数:姓名和电话号码。
它将姓名作为键,电话号码作为值存储到字典中。
然后,我们可以编写一个函数来查找通讯录中的联系人信息: ```pythondef search_contact(name):if name in contacts:print(f"姓名:{name},电话:{contacts[name]}")else:print("该联系人不存在!")```这个函数接受一个参数:姓名。
它会检查通讯录中是否存在该联系人,并打印出对应的电话号码。
最后,我们可以编写一个函数来删除通讯录中的联系人信息:```pythondef delete_contact(name):if name in contacts:del contacts[name]print("联系人已删除成功!")else:print("该联系人不存在!")```这个函数接受一个参数:姓名。
它会检查通讯录中是否存在该联系人,并将其从字典中删除。
通过以上几个函数,我们可以实现一个简单的通讯录功能。
你可以根据自己的需求进行扩展和修改,例如添加更多的联系人信息字段,实现编辑联系人信息的功能等。
使用这些函数,你可以通过调用它们来在Python中创建一个通讯录,并进行添加、查找和删除联系人的操作。
手机通讯录代码
#include<stdio.h>#include<string.h>struct friends_list{char name[10];char age[12];char telephone[13];char banji[6];char sn[13];char address[8];char sex[4];};int Count=0;FILE *fp;void new_friend(struct friends_list friends[]);void show_friend(struct friends_list friends[]);void search_friend(struct friends_list friends[]);void statistics_friend(struct friends_list friends[]);void xiugai_friend(struct friends_list friends[]);void shanchu_friend(struct friends_list friends[]);int main(void){int choice;char name[10];char sn[12];struct friends_list friends[50];do{printf("\t***********************************************\n"); printf("\t$ $\n"); printf("\t$ 学生通讯系统功能选项 $\n");printf("\t$ $\n"); printf("\t***********************************************\n"); printf("\t1:新建2:显示3:查询4:统计5:修改6:删除0:退出\n"); printf("请选择功能:");scanf("%d",&choice);switch(choice){case 1:new_friend(friends);break;case 2:show_friend(friends);break;case 3:search_friend(friends);break;case 4:statistics_friend(friends);break;case 5:xiugai_friend(friends);break;case 6:shanchu_friend(friends);break;case 0:break;}}while(choice!=0);printf("谢谢使用通讯录功能!\n");return 0;}//新建void new_friend(struct friends_list friends[]){struct friends_list f;int choice;if(Count==50){printf("通讯录已满!\n");return;}printf("请输入新联系人的姓名:");scanf("%s",&);printf("请输入新联系人的年龄:");scanf("%s",&f.age);printf("请输入新联系人的联系电话:");scanf("%s",&f.telephone);printf("请输入新联系人的学号:");scanf("%s",&f.sn);printf("请输入新联系人的班级:");scanf("%s",&f.banji);printf("请输入新联系人的地址:");scanf("%s",&f.address);printf("请输入新联系人的性别<男/女>:");scanf("%s",&f.sex);printf("您添加了一个记录,内容如下:\n");printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t 姓名性别班级学号地址电话年龄 \n");printf("\t %s %s %s %s %s %s %s\n",,f.sex,f.banji,f.sn,f.address,f.telephone,f.age);printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("您确定要添加吗<1:确定:否>?");scanf("%d",&choice);if(choice==1){fp=fopen("file1.txt","a");fprintf(fp,"%s %s %s %s %s %s %s\n",,f.sex,f.banji,f.sn,f.address,f.telephone,f.age);fclose(fp);printf("\t& & & & & & & &\n");printf("\t&您已添加成功&\n");printf("\t& & & & & & & &\n");}elsereturn;friends[Count]=f;Count++;}//显示void show_friend(struct friends_list friends[]){struct friends_list f;printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t 姓名性别班级学号地址电话年龄 \n");printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");fp=fopen("file1.txt","r");while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %s\n",&,&f.sex,&f.banji,&f.sn,&f.address,&f.telephone,&f .age);printf("\t %s %s %s %s %s %s %s\n",,f.sex,f.banji,f.sn,f.address,f.telephone,f.age);}fclose(fp);printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");}//查询void search_friend(struct friends_list friends[]){ char name[10];char sn[12];int i,flag=0,a=0;int choice=0;struct friends_list f;fp=fopen("file1.txt","r");while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %s\n",&,&f.sex,&f.banji,&f.sn,&f.address,&f.telephone,&f .age);printf("\t %s %s %s %s %s %s %s\n",,f.sex,f.banji,f.sn,f.address,f.telephone,f.age);a++;}printf("一共有记录数为:%d\n",a);printf("请选择查询方法<1:按姓名:按学号>");scanf("%d",&choice);if(choice==1){printf("^ ^您选择了按姓名查询\n");printf("请输入要查询学生的姓名:");scanf("%s",name);fp=fopen("file1.txt","r");for(i=0;i<a;i++){fscanf(fp,"%s %s %s %s %s %s %s\n",&friends[i].name,&friends[i].sex,&friends[i].banji,&friends[i ].sn,&friends[i].address,&friends[i].telephone,&friends[i].age);if(strcmp(name,friends[i].name)==0){printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t 姓名性别班级学号地址电话年龄 \n");printf("\t %s %s %s %s %s %s %s\n",friends[i].name,friends[i].sex,friends[i].banji,friends[i].sn,friends[i].address,friends[i].telephone,friends[i].age);printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");}elseprintf("无此联系人!\n");}}if(choice==2){printf("^ ^您选择了按学号查询");printf("请输入要查询学生的学号:");scanf("%s",&sn);fp=fopen("file1.txt","r");for(i=0;i<a;i++){fscanf(fp,"%s %s %s %s %s %s %s\n",&friends[i].name,&friends[i].sex,&friends[i].banji,&frie nds[i].sn,&friends[i].address,&friends[i].telephone,&friends[i].age);if(strcmp(sn,friends[i].sn)==0){printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t 姓名性别班级学号地址电话年龄 \n");printf("\t %s %s %s %s %s %s %s \n",,f.sex,f.banji,f.sn,f.address,f.telephone,f.age);printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");}elseprintf("无此联系人!\n");}fclose(fp);}}//统计void statistics_friend(struct friends_list friends[]){int s=0;int b=0;int i,flag=0,a=0;int choice=0;char banji[10];char sex[12];struct friends_list f;a++;printf("一共有学生的数目:%d\n",a);printf("请选择查询方法<1:按班级:按性别>");scanf("%d",&choice);if(choice==1){printf("~ ~您选择了按班级查询\n");printf("请输入要查询学生的班级:");scanf("%s",banji);fp=fopen("file1.txt","r");for(i=0;i<a;i++){fscanf(fp,"%s %s %s %s %s %s %s\n",&friends[i].name,&friends[i].sex,&friends[i].banji,&frie nds[i].sn,&friends[i].address,&friends[i].telephone,&friends[i].age);if(strcmp(banji,friends[i].banji)==0)b++;}printf("%s共有%d个学生\n",banji,b);}if(choice==2){printf("~ ~您选择了按性别查询\n");printf("请输入要查询学生的性别:");scanf("%s",sex);fp=fopen("file1.txt","r");for(i=0;i<a;i++){fscanf(fp,"%s %s %s %s %s %s %s\n",&friends[i].name,&friends[i].sex,&friends[i].banji,&frie nds[i].sn,&friends[i].address,&friends[i].telephone,&friends[i].age);if(strcmp(sex,friends[i].sex)==0)s++;}printf("%s共有%d个学生\n",sex,s);}fclose(fp);}//修改void xiugai_friend(struct friends_list friends[]){ char name[10];char sn[12];int i;int choice=0;char ch[12];printf("请选择查询方法<1:按姓名:按学号>");scanf("%d",&choice);if(choice==1){printf("* *您选择了按姓名查询\n");printf("请输入要查询学生的姓名:");scanf("%s",name);}else{printf("* *您选择了按学号查询");printf("请输入要查询学生的学号:");scanf("%s",&sn);}fp=fopen("file1.txt","r");for(i=0;i<Count;i++){fscanf(fp,"%s %s %s %s %s %s %s\n",&friends[i].name,&friends[i].sex,&friends[i].banji,&frie nds[i].sn,&friends[i].address,&friends[i].telephone,&friends[i].age);if((strcmp(name,friends[i].name)==0)||(strcmp(sn,friends[i].sn)==0)){printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t 姓名性别班级学号地址电话年龄 \n");printf("\t %s %s %s %s %s %s %s\n",friends[i].name,friends[i].sex,friends[i].banji,friends[i].sn,friends[i].address,friends[i].telephone,friends[i].age);printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("请选择要修改的项目<1:姓名:性别:班级:学号:地址:电话:年龄:退出>:\n");scanf("%d",&choice);printf("请输入要修改的内容:");scanf("%s",ch);switch(choice){case 1:strcpy(friends[i].name,ch);break;case 2:strcpy(friends[i].sex,ch);break;case 3:strcpy(friends[i].banji,ch);break;case 4:strcpy(friends[i].sn,ch);break;case 5:strcpy(friends[i].address,ch);break;case 6:strcpy(friends[i].telephone,ch);break;case 7:strcpy(friends[i].age,ch);break;case 0:break;}printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t 修改后的信息如下: \n");printf("\t 姓名性别班级学号地址电话年龄 \n");printf("\t %s %s %s %s %s %s %s\n",friends[i].name,friends[i].sex,friends[i].banji,friends[i].sn,friends[i].address,friends[i].telephone,friends[i].age);printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t& & & & & & & &\n");printf("\t&您已添加成功&\n");printf("\t& & & & & & & &\n");}}fclose(fp);}//删除void shanchu_friend(struct friends_list friends[]){int i;int choice=0;char name[10];char sn[12];char ch[12];printf("请选择查询方法<1:按姓名:按学号>");scanf("%d",&choice);if(choice==1){printf("& &您选择了按姓名删除\n");printf("请输入要删除学生的姓名:");scanf("%s",name);}if(choice==2){printf("& &您选择了按学号删除");printf("请输入要删除学生的学号:");scanf("%s",&sn);}fp=fopen("file1.txt","r");for(i=0;i<Count;i++){fscanf(fp,"%s %s %s %s %s %s %s\n",&friends[i].name,&friends[i].sex,&friends[i].banji,&frie nds[i].sn,&friends[i].address,&friends[i].telephone,&friends[i].age);if((strcmp(name,friends[i].name)==0)||(strcmp(sn,friends[i].sn)==0)){printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("\t 姓名性别班级学号地址电话年龄 \n");printf("\t %s %s %s %s %s %s %s\n",friends[i].name,friends[i].sex,friends[i].banji,friends[i].sn, friends[i].address,friends[i].telephone,friends[i].age); printf("\t~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");printf("是否删除?<1:是:否>:");scanf("%d",&choice);if(choice==1){printf("\t& & & & & & & &\n");printf("\t&您已删除成功&\n");printf("\t& & & & & & & &\n");}elsereturn;}}fclose(fp);}。
基于C语言实现个人通讯录管理系统
基于C语⾔实现个⼈通讯录管理系统之前利⽤C语⾔完成了⼀个关于个⼈通讯录管理系统的课题,主要是关于联系⼈的添加、查找、删除、修改、输出以及⽂件的写⼊与读出,还有⼀个甜点功能—模拟通话,它的实现原理也很容易理解,⽂章末尾会介绍到。
主框架:1、函数声明关于这⾥的函数声明,主要是为了可以清楚的了解整个系统的功能,这⾥不做过多介绍。
还有结构体链表的创建,贯穿了各个功能代码部分,必不可少。
2、联系⼈的添加这部分主要涉及联系⼈的姓名、地址、电话、QQ号和邮箱(当然需要其他功能可⾃⾏添加),考虑到数组操作不便前提下,使⽤链表的尾插法,通过不断开创新的结点,然后不断将新的结点的地址指向尾结点,使尾结点不断后移,⽽新创的结点时按照添加的先后顺序进⾏连接(参考下图可快速理解,此图⽚来源于⽹络),当然其中某些项的条件限制也是必不可少的。
⽐如:电话、QQ号、邮箱int Addpeo() //添加联系⼈{int t,n,a;char flag='y'; //仅作为第⼀次执⾏条件ptcs p=head,q;while(flag!='n'&&flag!='N') //判断是否继续添加{q=(ptcs)malloc(sizeof(pcs)); //申请内存p->next=q; //赋予下⼀个节点p=q;q->next=NULL; //尾结点地址赋空值,尾插法printf("\n\t请输⼊:\n");printf("\t\t姓名:");scanf("\t\t%s",q->);printf("\t\t地址:");scanf("\t\t%s",q->chat.add);printf("\t\t⼿机号:");scanf("\t\t%s",q->chat.tel);do{n=0; //仅做记录if(strlen(q->chat.tel)!=11) //计算⼿机号的长度,判断是否输⼊规范 {n=1;printf("\t\t您输⼊的⼿机号格式不存在,请重新输⼊:");scanf("\t\t%s",q->chat.tel);}else{for(t=0;t<11;t++){if(q->chat.tel[t]<'0'||q->chat.tel[t]>'9'){n=1;printf("\t\t您输⼊的⼿机号格式不合理,请重新输⼊:");scanf("\t\t%s",q->chat.tel);break;}}}}while(n);//输⼊QQ号printf("\t\tQQ号:");scanf("\t\t%s",q->chat.tecent);do{n=0;if(strlen(q->chat.tecent)>10) //以10位QQ号为准,判断是否符合规范 {n=1;printf("\t\t您输⼊的QQ号格式不存在,请重新输⼊:");scanf("\t\t%s",q->chat.tecent);}else{for(t=0;t<10;t++){if(q->chat.tecent[t]<'0'||q->chat.tecent[t]>'9'){n=1;printf("\t\t您输⼊的QQ号格式不合理,请重新输⼊:");scanf("\t\t%s",q->chat.tecent);break;}}}}while(n);//输⼊邮箱printf("\t\tEmail:");scanf("\t\t%s",q->chat.email);do{//判断邮箱 @符号输⼊规范(这⾥不限定邮箱号码位数)a=0;for(t=0;q->chat.email[t]!='\0';t++){if(q->chat.email[t]=='@')a++; //@数为1}if(a!=1){printf("\t\t输⼊的邮箱格式不合理,请重新输⼊:");scanf("\t\t%s",q->chat.email);}}while(a!=1); //是否输⼊@ ,为1则终⽌循环printf("\n\t是否继续添加?(Y/N)");scanf("\t%c",&flag);}return 0;}3、联系⼈的查询这步使⽤的是遍历查询,共设置了三种⽅式,在定义链表指针的前提下,通过遍历链表进⾏信息的对⽐,从⽽判断联系⼈是否存在,如果存在就直接显⽰给⽤户,不存在就直接退回功能选项。
- 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)