通讯录程序

合集下载

通讯录程序设计

通讯录程序设计

通讯录程序设计设计一个实用的小型通讯录程序,具有添加,查询和删除功能。

由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。

电话号码可由字符和数字组成。

实现功能:(1)系统以菜单方式工作(2)信息录入功能(3)信息浏览功能(4)信息查询功能(5)信息修改功能(6)系统退出功能//WREN编取材网路(适用于VC++)本题有细节上的缺陷,请自身予以修改。

#include <stdio.h>#include <conio.h>#include <string.h>#include <stdlib.h>#define PF printf#define SF scanfint n=0,i;struct address_book{char name[20];char place[20];long num1;long num2;char mail[40];}stud[200];void add(){char j;front1:system("cls");//清屏PF("\n请输入要添加的姓名:");SF("%s",stud[n].name);PF("\n请输入要添加的籍贯:");SF("%s",stud[n].place);PF("\n请输入要添加的电话号码一:");SF("%d",&stud[n].num1);PF("\n请输入要添加的电话号码二:");SF("%d",&stud[n].num2);PF("\n请输入要添加的电子邮箱:");SF("%s",stud[n].mail);getchar();n++;PF("是否继续(Y/N)?:");j=getchar();getchar();if(j=='y'||j=='Y') goto front1;//再次输入记录}void del(){int k=0,m,i;char j;front2:system("cls");//清屏PF("\n请输入要删除的联系人:");SF("%d",&m);getchar();for(i=0;i<n;i++)//查找记录if(strcmp(m,stud[i].name)==0){k=1;break;}if(k==1)//删除记录{for(k=i;k<n-1;k++)stud[k]=stud[k+1];n--;PF("已删除\n\n");}else{PF("找不到要删除的记录!\n");PF("按回车键返回:");getchar();}PF("是否继续(Y/N)?:");j=getchar();getchar();if(j=='y'||j=='Y') goto front2;getchar();}void arrange(){int k,i;struct address_book t;system("cls");//清屏PF("姓名籍贯电话号码一电话号码二电子邮箱\n");for(k=0;k<n-1;k++)for(i=0;i<n-k-1;i++)if(strcmp(stud[i].name,stud[i+1].name)<0){t=stud[i];stud[i]=stud[i+1];stud[i+1]=t;}for(i=0;i<=n-1;i++)PF("%-10s%-8s %-15ld %-15ld %-20s",stud[i].name,stud[i].place,stud[i].num1 ,stud[i].num2,stud[i].mail);PF("按回车键返回!");getchar();getchar();}void change(){int k=0;char j,m[20];front5:system("cls");//清屏PF("\n请输入要修改记录的姓名:");SF("%s",m);getchar();for(i=0;i<n;i++)//查找if(strcmp(m,stud[i].name)==0){k=1;break;}if(k==1){PF("\n");PF("\n请输入修改后的姓名:");SF("%s",stud[i].name);PF("\n请输入修改后的籍贯:");SF("%s",stud[i].place);PF("\n请输入修改后的电话号码一:");SF("%d",&stud[i].num1);PF("\n请输入修改后的电话号码二:");SF("%d",&stud[i].num2);PF("\n请输入修改后的电子邮箱:");SF("%s",stud[i].mail);PF("修改成功\n");getchar();}if(k==0){PF("找不到要修改的记录!\n");PF("按回车键返回:");getchar();}getchar();PF("是否继续(Y/N)?:");j=getchar();getchar();if(j=='y'||j=='Y') goto front5;}void find(){int k=0;char j,m[20];front3:system("cls");//清屏PF("\n请输入要修改记录的姓名:");SF("%s",m);getchar();for(i=0;i<n;i++)//查找if(strcmp(m,stud[i].name)==0){k=1;break;}if(k==1){PF("姓名籍贯电话号码一电话号码二电子邮箱\n");PF("%-10s%-8s %-15ld %-15ld %-20s",stud[i].name,stud[i].place,stud[i].num1 ,stud[i].num2,stud[i].mail);}else{PF("找不到该联系人!请重新输入!按回车返回!");getchar();goto front3;}PF("是否继续(Y/N)?:");j=getchar();getchar();if(j=='y'||j=='Y') goto front3;}void main(){char j;PF("\n\n\n\n\n\n\t\t\t 欢迎使用简单通讯录");PF("\n\n\n\t\t\t\t制作人:王靖焱");PF("\n\n\n\t\t\t\t 2012年2月");PF("\n\n\n\n\n\n\n\n\n\n\n\n按回车键进入主菜单:");getchar();loop:system("cls");PF("\n");PF("\t\t\t\t ************\n");PF("\t\t\t\t ***主菜单***\n");PF("\t\t\t\t ************\n\n\n\n\n\n");PF("\t\t 1、录入联系人信息2、删除联系人信息\n\n");PF("\t\t 3、查询联系人信息4、联系人信息游览\n\n");PF("\t\t 5、修改联系人信息6、保存退出系统\n\n");PF("\n\n\n\n\n\n\n\n\n请选择[1/2/3/4/5/6]:");j=getchar();if(j=='\n') goto loop;//返回主菜单switch(j){case '1': add();goto loop;//返回主菜单case '2': del();goto loop;case '3': find();goto loop;case '4': arrange();goto loop;case '5': change();goto loop;case '6':{FILE *fp;fp=fopen("student.dat","w");for(i=0;i<n;i++)fwrite(&stud[i],sizeof(struct address_book),1,fp);fclose(fp);exit(0);}default: goto loop;} }。

C++功能简化的通讯录管理程序

C++功能简化的通讯录管理程序

private:
void sortinsert(PRECORD pRec);
long binarySearch(string& name);
void cleanlink();
};
WorkingSet::WorkingSet()
{
m_pLink = new LINK;
m_pLink->next = NULL;
#include <stdlib.h>
using namespace std;
class WorkingSet
{
typedef struct _tagRECORD
{
string name;
string address;
string pinCode;
string telNum;
{
ofstream fout(strPath.c_str());
string strLine;
PLINK pVar = m_pLink->next;
for(;pVar!=NULL;pVar=pVar->next)
{
PRECORD pRec = pVar->rec;
strLine = pRec->name+','+pRec->address+','+pRec->pinCode+','+pRec->telNum+'\n';
}
return 0;
}
void insert(string& name,string& addres,string& pinCode,string& telNum);

C 简单通讯录管理 程序

C 简单通讯录管理 程序

#include<iostream.h>#include<process.h>#include<fstream.h>#include<stdlib.h>#include<string.h>#include<iomanip.h>class AddrList;class Node{char ID[20];char Name[20];char OfficePhone[20];char HomePhone[20];char MobilePhone[20];char Email[20];Node *Next;public:Node(char* id=0,char *name=0,char* op=0,char* hp=0,char *mp=0,char *email=0,Node *next=NULL){strcpy(ID,id);strcpy(Name,name);strcpy(OfficePhone,op);strcpy(HomePhone,hp);strcpy(MobilePhone,mp);strcpy(Email,email);Next=next;}void Show(){cout<<setw(12)<<ID<<setw(6) <<Name<< setw(12) <<OfficePhone<< setw(12) <<HomePhone<<setw(12)<<MobilePhone<<setw(20)<<Email<<endl;}friend class AddrList;friend void add(AddrList &addrlist);friend void query(AddrList &addrlist);friend void modify(AddrList &addrlist);};class AddrList{Node *HeadPtr;int Tag;public:AddrList(Node *headptr=NULL,Node *tailptr=NULL,int tag=0){ //构造函数,创建空链表,将Tag的值置为1HeadPtr=headptr;Tag=tag;} //将p指向的结点加入到链表尾部void AddSort(char* id,char *name,char* op,char* hp,char *mp,char *email);//将p指向的结点按Tag指定的顺序插入到链表中Node *LookUp(char *name); //按姓名查找结点,返回该结点指针void Delete(char *name);//删除指定姓名的结点int Sort(int); //按tag指定的关键字重新排序int ShowAll() ;//显示全部结点,每10个显示一//取Tag的值//统计链表中结点个数//取首指针~AddrList();//释放链表空间void CreateList(char *filename);//从二进制文件中读入数据,构造链表void WriteToFile(char *filename); //将链表中数据写入指定的二制文件void WriteToTxtFile(char *filename); //将链表写到文本文件中void CreateFromTxt(char *filename);friend void sort(AddrList &addrlist); // 按姓名或办公室电话排序};void AddrList::AddSort(char* id,char *name,char* op,char* hp,char *mp,char *email) //将p指向的结点按Tag指定的顺序插入到链表中{Node *p;p=new Node(id,name,op,hp,mp,email);Node* x1=HeadPtr;Node* x2=x1;if( id){if(HeadPtr){while(x1=x1->Next) {x2=x1;}x2->Next=p;p->Next=NULL;}else HeadPtr=p,p->Next=NULL;}}Node * AddrList::LookUp(char *name) //按姓名查找结点,返回该结点指针{Node* x=HeadPtr;while(x!=NULL && strcmp(x->Name,name)!=0) {x=x->Next;}if(x) {return x;}else return 0;}void AddrList::Delete(char *name) //删除指定姓名的结点{Node* x1=HeadPtr;Node *x2=x1;while(strcmp(x2->Name,name)!=0 && x2!=NULL) {x1=x2;x2=x2->Next;} if(x1!=x2){if(x2){x1->Next=x2->Next;delete x2;cout<<"已删除"<<endl;}else {cout<<"未找到,请确认后再输入"<<endl;}}else {HeadPtr=x1->Next;delete x2;}}int AddrList::Sort(int T_T) //按tag指定的关键字重新排序{switch(T_T){case 1:{Node* x=HeadPtr,*t;if(!HeadPtr) return 0;int m=0,n=0;Node *p[100]={0};while(x) {p[m]=x;m++;x=x->Next;}n=m;int i, j, k;for (i=0; i<n-1; i++){k=i;for (j=i+1; j<n; j++){if(strcmp(p[j]->Name,p[k]->Name)<=0){k=j;}}{t=p[k]; p[k]=p[i]; p[i]=t;}}HeadPtr=p[0];i=0;while(i<m-1){p[i]->Next=p[i+1];i++;}p[i]->Next=NULL;Tag=1;break;}case 2:{Node* x=HeadPtr,*t;if(!HeadPtr) return 0;int m=0,n=0;Node *p[100]={0};while(x) {p[m]=x;m++;x=x->Next;}n=m;int i, j, k;for (i=0; i<n-1; i++){k=i;for (j=i+1; j<n; j++){if(strcmp(p[j]->ID,p[k]->ID)<=0){k=j;}}{t=p[k]; p[k]=p[i]; p[i]=t;}}HeadPtr=p[0];i=0;while(i<m-1){p[i]->Next=p[i+1];i++;}p[i]->Next=NULL;Tag=2;break;} }}int AddrList::ShowAll() //显示全部结点,每10个显示一屏{Node* x=HeadPtr;if(x);else return 0;int i=1;while(1){cout << setw(12)<<"学号"<<setw(6) <<"姓名"<< setw(12) <<"办公电话"<< setw(12) <<"家庭电话"<<setw(12)<< "移动电话"<<setw(20)<<"电子邮件"<<endl;while(i<=10){x->Show();i++;if(x=x->Next);else break;}system("pause");i=1;if(x);else break;}}AddrList::~AddrList() //释放链表空间{Node *x1=HeadPtr;Node *x2=x1;while(x2=x2->Next){delete x1;x1=x2;}delete x2;}void AddrList::CreateList(char *filename) //从二进制文件中读入数据,构造链表{char a[30]={0},b[30]={0},c[30]={0},d[30]={0},e[30]={0},f[30]={0};ifstream in(filename,ios::binary);while(in>>a){in>>b>>c>>d>>e>>f;AddSort(a,b,c,d,e,f);}in.close();}void AddrList::CreateFromTxt(char *filename) //从文本文件中读入数据,构造链表{char a[30],b[30],c[30],d[30],e[30],f[30];ifstream in(filename);while(in>>a){in>>b>>c>>d>>e>>f;AddSort(a,b,c,d,e,f);}}void AddrList::WriteToFile(char *filename) //将链表中数据写入指定的二进制文件{Node *p=HeadPtr;ofstream out(filename,ios::binary);out<<p->ID<<" ";out<<p->Name<<" ";out<<p->OfficePhone<<" ";out<<p->HomePhone<<" ";out<<p->MobilePhone<<" ";out<<p->Email<<" ";while(p=p->Next){out<<p->ID<<" ";out<<p->Name<<" ";out<<p->OfficePhone<<" ";out<<p->HomePhone<<" ";out<<p->MobilePhone<<" ";out<<p->Email<<" ";}out.close();}void AddrList::WriteToTxtFile(char *filename) //将链表写到文本文件中{Node *x=HeadPtr;ofstream out(filename);out << setw(12)<<"学号"<<setw(6) <<"姓名"<< setw(12) <<"办公电话"<< setw(12) <<"家庭电话"<<setw(12)<< "移动电话"<<setw(20)<<"E-mail"<<endl;out<<setw(12)<<x->ID<<setw(6) <<x->Name<< setw(12) <<x->OfficePhone<< setw(12) <<x->HomePhone<<setw(12)<<x->MobilePhone<<setw(20)<<x->Email<<endl;while(x=x->Next){out<<setw(12)<<x->ID<<setw(12) <<x->Name<< setw(12) <<x->OfficePhone<< setw(12) <<x->HomePhone<<setw(12)<<x->MobilePhone<<setw(12)<<x->Email<<endl;}out.close();}void DisplayMenu() //显示菜单{int i;char *menu[]={ " "," "," "," "," ***********小巧通讯录管理系统************* "," "," 1. 新增一个联系人"," 2. 删除一个联系人"," 3. 显示所有联系人"," 4. 查找联系人"," 5. 更改联系人记录"," 6. 从TXT文档中增加记录"," 7. 导出联系人到Txt文档"," 8. 排序"," 9. 退出"," ","****************************************** "," "" ^_^ 欢迎使用^_^" ,NULL } ;system("cls");for(i=0;menu[i];i++)cout << menu[i]<<endl;cout<< "请选择(1--9) :";}void add(AddrList &addrlist) //按当前Tag标志插入结点,插入结点后,链表仍然保持升序{system("cls");char a[30],b[30],c[30],d[30],e[30],f[30];cout<<" 添加记录"<<endl<<" **************************************"<<endl<<" 请输入一个联系人数据"<<endl;cout << "学号"<<setw(6) <<"姓名"<< setw(12) <<"办公电话"<< setw(12) <<"家庭电话"<<setw(12)<< "移动电话"<<setw(20)<<"电子邮件"<<endl;cin>>a>>b>>c>>d>>e>>f;addrlist.AddSort(a,b,c,d,e,f);cout<<"添加完成"<<endl;system("pause");}void del(AddrList &addrlist) //删除一个结点{system("cls");char p[30];cout<<" 删除记录"<<endl<<" **************************************"<<endl<<" 请输入一个联系人的姓名"<<endl;cin>>p;addrlist.Delete(p);cout<<"删除完成"<<endl;system("pause");}void showall(AddrList &addrlist) //显示所有结点{system("cls");cout<<" 显示所有联系人"<<endl<<" **************************************"<<endl;if(addrlist.ShowAll()) ;else cout<<"空记录!"<<endl;system("pause");}void query(AddrList &addrlist) //按姓名查找一个结点{system("cls");char name[30];Node *p;cout<<" 查找联系人"<<endl<<" **************************************"<<endl<<" 请输入一个联系人的姓名"<<endl;cin>>name;if(p=addrlist.LookUp(name)){cout<< setw(12)<<"学号"<<setw(6) <<"姓名"<< setw(12) <<"办公电话"<< setw(12) <<"家庭电话"<<setw(12)<< "移动电话"<<setw(20)<<"电子邮件"<<endl<<setw(12)<<p->ID<<setw(6) <<p->Name<< setw(12) <<p->OfficePhone<< setw(12) <<p->HomePhone<<setw(12)<<p->MobilePhone<<setw(12)<<p->Email<<endl;}else cout<<"未找到"<<endl;system("pause");}void modify(AddrList &addrlist) //修改一个结点{system("cls");char name[30];Node *p;cout<<" 修改联系人"<<endl<<" **************************************"<<endl<<" 请输入一个联系人的姓名"<<endl;cin>>name;if(p=addrlist.LookUp(name)){cout<<"请输入修改后的联系人"<<endl;cout << "学号"<<setw(6) <<"姓名"<< setw(12) <<"办公电话"<< setw(12) <<"家庭电话"<<setw(12)<< "移动电话"<<setw(20)<<"电子邮件"<<endl;cin>>p->ID>>p->Name>>p->OfficePhone>>p->HomePhone>>p->MobilePhone>>p->Email;cout<<"修改完成"<<endl;}else cout<<"未找到"<<endl;system("pause");}void addfromtxtfile(AddrList &addrlist) //从正文文件增加记录{system("cls");char filename[30];cout<<" 从TXT文档中增加记录"<<endl<<" **************************************"<<endl<<" 请输入要加入的文件名"<<endl;cin>>filename;addrlist.CreateFromTxt(filename);cout<<"载入完成"<<endl;system("pause");}void writetotxtfile(AddrList &addrlist) //将链表写到正文文件中{system("cls");char filename[30];cout<<" 导出联系人到Txt文档"<<endl<<" **************************************"<<endl<<" 请输入要导出的文件名"<<endl;cin>>filename;addrlist.WriteToTxtFile(filename);cout<<"导出完成"<<endl;system("pause");}void sort(AddrList &addrlist) // 按姓名或办公室电话排序{system("cls");int T_T;int choice=0;switch(addrlist.Tag){case 0: {cout<<"此文档未排序"<<endl;break;}case 1: {cout<<"此文档已按"<<"姓名"<<"排序,将按另一种方式排序"<<endl;break;}case 2: {cout<<"此文档已按"<<"学号"<<"排序,将按另一种方式排序"<<endl;break;}}cout<<"请输入排序方式:1.姓名2.学号"<<endl;cin>>T_T;if(addrlist.Sort(T_T))cout<<"已排序"<<endl;else cout<<"空记录!";system("pause");}void quit(AddrList &addrlist) //退出前将链表写入二进制文件中{addrlist.WriteToFile("通讯录数据文件.bin");}void main(){system("color 0A");int choice=0,state;char ch;AddrList addrlist;addrlist.CreateList("通讯录数据文件.bin"); //从二进制文件中读入数据,构建链表while (choice!=9){DisplayMenu(); //显示主菜单cin>>ch;if (ch < '1' || ch > '9') continue;choice=ch-'0';switch (choice){case 1: add(addrlist); break;case 2: del(addrlist); break;case 3: showall(addrlist); break;case 4: query(addrlist); break;case 5: modify(addrlist); break;case 6: addfromtxtfile(addrlist); break;case 7: writetotxtfile(addrlist); break;case 8: sort(addrlist); break;case 9: quit(addrlist); break;}system("cls");}}。

C语言通讯录管理系统程序代码

C语言通讯录管理系统程序代码

C语言通讯录管理系统程序代码作者:日期:计科1001 赖祥燃一、课程设计题目及要求题目通讯录管理系统任务:自学C 语言中相关知识,设计出通讯录管理系统。

要求如下所述:建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;;能够提供添加、删除和修改通讯录信息的功能;能够提供按姓名或电话等查询;将通讯录保存在文件中;能够按表格方式输出通讯录信息。

二、系统设计方案(一)总体框架图:通讯录管理系统:1、录入通讯录信息2 、修改通讯录信息3 、查询通讯录信息4 、浏览通讯录信息5 、增加通讯录信息6 、推出系通讯录统(二) 模块设计模块一:头文件,变量定义,函数的声明对系统所使用的变量进行定义,对函数进行声明模块二:录入通讯录信息声明函数void readfile() ,说明一个文件指针FILE *fp 打开文件"student.txt"模块三:通讯录信息的查找声明void seek() 为查找函数,通过switch(item) 设定用学号查找,用姓名查找两个分支模块四:通讯录信息的修改声明void modify() 为学生信息修改函数,通过switch(item) 设定所要修改的项目计科1001 赖祥燃模块五:通讯录信息按学号排序声明void sort() 将录入通讯录信息系按升序排列,用的是“冒泡排序法”实现排序模块六:加通讯录信息声明void insert() 插入通讯录信息,先通过判断通讯录是否存在,若否则继续输入,若是跳出,重新循环模块七:通讯录信息声明void del() 实现通讯录信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。

模块八:示学生信息通过display() 函数输出通讯录信息模块九; 存信息通过fp=fopen("student.txt","w"); 写入信息模块十:界面菜单通过switch(num) 调用,以上各函数,实现功能三、设计详情1. 主函数主函数设计要求简洁,只提供部分提示语和函数的调用图1. 主函数流程图void menu()/* 界面 */ { int num;printf(" \n\nscanf("%d",&num); switch(num){case 1:readfile();break; case 2:seek();break; case 3:modify();break; case 4:insert();break; case 5:del();break; case 6:display();break; case 7:save();break; case 8:k=0;break;default:printf(" 请在 1-8 之间选择 \n"); }}四、源代码printf("printf(" * 制作人 : 翁行兴 * printf(" \n\n"); \n \n");\n\n");\n");printf(" -------------------------------- printf("* 1. 刷新学生信息printf(" * 3. 修改学生信息printf(" * 5. 按学号删除信息 printf("* 7. 保存当前学生信息printf("printf(" 请选择菜单编号 :");printf("--------------- \n");2. 查询学生信息\n")4. 增加学生信息\n")6. 显示当前信息\n")8. 退出系统\n")\n");自动化 0901 通讯录管理系统 \n\n");#include<stdio.h> #include<stdlib.h> #include<string.h> #define BUFLEN 100 #define LEN 15 #define N 100 struct record /* 结构体*/{char code[LEN+1]; /* 学号*/姓名*/char name[LEN+1]; /*int age; /* 年龄*/char sex[3]; /* 性别*/char time[LEN+1]; /* 出生年月*/家庭地址*/char add[30]; /*电话号码*/char tel[LEN+1]; /*char mail[30]; /* 电子邮件地址*/}stu[N];int k=1,n,m; /* 定义全局变量*/void readfile();/* 函数声明*/void seek();void modify();void insert();void del();void display();void save();void menu();int main(){while(k)menu();system("pause");return 0;}void readfile()/* 建立信息*/{char *p="student.txt";FILE *fp;int i=0;if ((fp=fopen("student.txt","r"))==NULL){printf("Open file %s error! Strike any key to exit!",p);system("pause");exit(0);}while(fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,&stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8){i++; i=i;}fclose(fp);n=i;printf(" 录入完毕!\n");}void seek() /* 查找*/{int i,item,flag;char s1[21]; /* 以姓名和学号最长长度+1 为准*/printf(" ----------- ----- \n");printf(" ---- 1.按学号查询-- ---\n");printf(" ---- 2.按姓名查询-- ---\n");计科1001 赖祥燃printf(" 3. 退出本菜单\n");printf(" ----------------- \n");while(1){printf(" 请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item){ case 1:printf(" 请输入要查询的学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(stu[i].code,s1)==0){flag=1;printf(" 学号姓名年龄性别出生年月地址电话E-mail\n");printf(" -------------------------------------------------------------------- \n");printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);}if(flag==0) printf(" 该学号不存在!\n"); break;case 2:printf(" 请输入要查询的学生的姓名:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(stu[i].name,s1)==0){flag=1;printf(" 学号姓名年龄性别出生年月地址电话第8 页E-mail\n");printf(" \n");printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);if(flag==0)printf(" 该姓名不存在!\n"); break;case 3:return;default:printf(" 请在1-3 之间选择\n");void modify() /* 修改信息*/{int i,item,num;char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和学号最长长度+1 为准*/ printf(" 请输入要要修改的学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(stu[i].code,s1)==0) /* num=i; printf(" ----------------- \n");printf("1. 修改姓名\n");printf("2. 修改年龄\n");printf("3. 修改性别\n");printf("4. 修改出生年月\n");printf("5. 修改地址\n");printf("6. 修改电话号码\n");printf("7. 修改E-mail 地址\n"); printf("8. 退出本菜单\n");printf("比较字符串是否相等*/\n");while(1){printf(" 请选择子菜单编号:");scanf("%d",&item);switch(item){case 1:printf(" 请输入新的姓名:\n"); scanf("%s",s2); strcpy(stu[num].name,s2); break; case 2: printf(" 请输入新的年龄:\n"); scanf("%d",&stu[num].age);break; case 3:printf(" 请输入新的性别:\n"); scanf("%s",sex1); strcpy(stu[num].sex,sex1); break; case 4: printf(" 请输入新的出生年月:\n");scanf("%s",s2); strcpy(stu[num].time,s2); break; case 5:printf(" 请输入新的地址:\n"); scanf("%s",s2); strcpy(stu[num].add,s2); break; case 6: printf(" 请输入新的电话号码:\n");scanf("%s",s2);strcpy(stu[num].tel,s2); break;case 7:计科1001 赖祥燃printf(" 请输入新的E-mail 地址:\n");scanf("%s",s2);strcpy(stu[num].mail,s2); break;case 8:return;default:printf(" 请在1-8 之间选择\n");}}}void sort()/* 按学号排序*/{int i,j,*p,*q,s;char temp[10];for(i=0;i<n-1;i++){for(j=n-1;j>i;j--)if(strcmp(stu[j-1].code,stu[j].code)>0){strcpy(temp,stu[j-1].code);strcpy(stu[j-1].code,stu[j].code);strcpy(stu[j].code,temp);strcpy(temp,stu[j-1].name);strcpy(stu[j-1].name,stu[j].name);strcpy(stu[j].name,temp);strcpy(temp,stu[j-1].sex);strcpy(stu[j-1].sex,stu[j].sex);strcpy(stu[j].sex,temp);strcpy(temp,stu[j-1].time);strcpy(stu[j-1].time,stu[j].time);strcpy(stu[j].time,temp);strcpy(temp,stu[j-1].add);计科1001 赖祥燃strcpy(stu[j-1].add,stu[j].add);strcpy(stu[j].add,temp);strcpy(temp,stu[j-1].tel);strcpy(stu[j-1].tel,stu[j].tel);strcpy(stu[j].tel,temp);strcpy(temp,stu[j-1].mail);strcpy(stu[j-1].mail,stu[j].mail);strcpy(stu[j].mail,temp);p=&stu[j-1].age;q=&stu[j].age;s=*q;*q=*p;*p=s;}}}void insert() /* 插入函数*/{int i=n,j,flag;printf(" 请输入待增加的学生数:\n");scanf("%d",&m);do{flag=1;while(flag){flag=0;printf(" 请输入第%d 个学生的学号:\n",i+1);scanf("%s",stu[i].code);for(j=0;j<i;j++)计科1001 赖祥燃if(strcmp(stu[i].code,stu[j].code)==0){printf(" 已有该学号, 请检查后重新录入!\n");flag=1;break; /* 如有重复立即退出该层循环,提高判断速度*/ scanf("%s",stu[i].mail);printf(" 请输入第%d 个学生的姓名:\n",i+1);scanf("%s",stu[i].name);printf(" 请输入第%d 个学生的年龄:\n",i+1);scanf("%d",&stu[i].age);printf(" 请输入第%d 个学生的性别:\n",i+1);scanf("%s",stu[i].sex);printf(" 请输入第%d 个学生的出生年月:( 格式: 年.月)\n",i+1);scanf("%s",stu[i].time);printf(" 请输入第%d 个学生的地址:\n",i+1);scanf("%s",stu[i].add);printf(" 请输入第%d 个学生的电话:\n",i+1);scanf("%s",stu[i].tel);printf(" 请输入第%d 个学生的E-mail:\n",i+1);if(flag==0)i=i;i++;while(i<n+m);n+=m;printf(" 录入完毕!\n\n");--------- 计科1001 赖祥燃sort(); }void del(){int i,j,flag=0;char s1[LEN+1];printf(" 请输入要删除学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(stu[i].code,s1)==0){flag=1;for(j=i;j<n-1;j++)stu[j]=stu[j+1];}if(flag==0)printf(" 该学号不存在!\n");if(flag==1){printf(" 删除成功,显示结果请选择菜单6\n");n--;}}void display(){int i;printf(" 所有学生的信息为:\n");printf(" 学号姓名年龄性别出生年月地址电话E-mail\n");printf(" -------------------------------------------------------------------- \n");for(i=0;i<n;i++)计科1001 赖祥燃{printf("%6s %7s %5d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);}}void save(){int i;FILE *fp; fp=fopen("student.txt","w"); /* 写入*/for(i=0;i<n;i++){fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);} fclose(fp);void menu()/*{int num;printf(" \n\n界面*/自动化0901 学生信息管理系统\n\n");printf(" \n\n");printf(" * 制作人: 翁行兴* \n \n");printf(" \n\n");系统功能菜单\n"); printf(" --------------------- ------------------------------------- \n");printf(" * 1. 刷新学生信息* * 2. 查询学生信息\n");printf(" * 3. 修改学生信息* * 4. 增加学生信息\n"); printf(" * 5. 按学号删除信息* * 6. 显示当前信息\n"); printf(" * 7. 保存当前学生信息* * 8. 退出系统\n");第printf("计科1001 赖祥燃printf(" --------------------------------\n"); printf(" 请选择菜单编号:"); scanf("%d",&num);switch(num){case 1:readfile();break;case 2:seek();break;case 3:modify();break;case 4:insert();break;case 5:del();break;case 6:display();break;case 7:save();break;case 8:k=0;break;default:printf(" 请在1-8 之间选择\n");}}五.调试过程一.主界面计科1001 赖祥燃二.测试数据当选择4 ——增加学生信息时,出现对话框,先输入增加的数量。

python通讯录程序设计总结

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语言和数据结构的理解。

c语言中通讯录代码

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);}}}```这个程序使用了结构体来表示联系人的信息,并通过全局数组来保存所有联系人。

基于android的手机通讯录(附程序)

基于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按的点击,显示底部菜框,包含有增加查找、除、菜单、返回功能,菜单按键则包含显示所有、删除所有等实用功能。

五、实验结果与分析通讯录界面要求布局合理简约,颜色舒,控制按钮简单明了,让用户一眼就能看出各个按钮的作用及操方法。

python面向对象写通讯录代码

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对象,然后进入一个循环当中,用户可以输入相应的选项来执行相应的操作,直到用户选择退出为止。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
➢ 6. 加载联系人信息模块
从文件加载联系人信息功能应该能够实现将联系人信息文件 以写入的顺序读入内存,并可以增加、删除等操作。
➢ 7. 显示所有联系人模块
将系统运行过程中的所有联系人信息全部输出。
➢ 8. 退出模块
退出通讯录管理系统的功能应该是能够结束死循环,退出管 理系统。
.
30.3 系统功能的实现
增加联系人功能应该能够实现新增联系人。当需要一次加入多个 联系人信息时,最好不要重复选择此功能,应该是在增加联系 人之前,就需要用户输入一次增加的联系人个数,然后进行存 储,并一个个地增加。
➢ 2. 删除联系人模块 该模块主要完成删除联系人的操作。在删除联系人时需要输入将 要删除的联系人的姓名,然后进行存储。
➢ 结构体定义代码如下(代码30-1.txt)。
.
30.2.1 总体功能分析
01 typedef struct
02 {
03 char name[50];/*姓名*/
04 char corp[50]; /*工作单位*/
05 char phone[15];
/*联系手机*/
06 char address[100]; /*家庭住址*/
➢ 30.3.1 系统选择菜单的实现 ➢ 30.3.2 增加联系人功能的实现 ➢ 30.3.3 删除联系人功能的实现 ➢ 30.3.4 查找联系人模块的实现 ➢ 30.3.5 插入联系人模块的实现 ➢ 30.3.6 保存联系人文件模块的实现 ➢ 30.3.7 从文件加载联系人信息模块的实现 ➢ 30.3.8 显示所有联系人信息模块的实现
退
























.
30.2.1 总体功能分析
➢ 此外,由于该系统设计了一些图书和读者的 信息存储,而为简单起见,这里没有设置数 据库。因此,就应该定义一个数据结构来存 储这些信息。通过前面的学习知道,类和结 构体都可以实现多个不同类型数据的存储。 而为了重点体现C的特点,我们采用类来存 储这些数据类型。
⑵ 在Visual C++ 6.0下开发清屏时,由于对屏幕控制的权 限不多,因此,可使用“system("cls");”语句清屏。
⑶ C语言较高级的地方还在于对内存的访问与处理,内存申 请、内存复制、内存置位、释放内存,具体函数有: malloc、memcpy、memset、free等,使用方法请参 考头文件。
.
30.4 系统运行
➢ 系统设计好了,现在就来看看设计的成果。
.
30.5 开发过程常见问题及解决
➢ 开发过程常见问题及解决办法如下,仅供参考。
⑴ 如果出现“warning C4013: 'exit' undefined; assuming extern returning int”的编译错误,在程序 开头加上对应的头文件包括语句,通常就能解决问题。
.
.
30.1 开发背景
➢ 在信息化不断发展的今天,社会成员相互之间联系 越来越紧密,联系方式也越来越多。我们除了手机, 移动电话等常规联系方式外,现在还有了电子邮箱、 MSN、QQ等信息化的联系方式,那么为了方便我 们将每个联系人的多个联系方式保存在一起,方便 由于一种联系方式联系不到某人时,可查询其他联 系方式,以前的“纸质”通讯录已经越来越赶不上 信息化的速度,势必被淘汰,所以我们用所学过的 知识实现一个“非纸质”通讯录。
07 char qq[15]; /*联系QQ*/
08 char msn[50]; /*联系MSN*/
09 char mail[50]; /*email*/
10 }AddressInfo; /*通讯录结构体*/
.
30.2.2 功能模块分析
➢ 下面依次分析各模块应具备的功能。 ➢ 1. 增加联系人模块
➢ 本章通过建立一个较为完整的通讯录,让读者全面 掌握使用C语言开发应用程序的流程。
.
30.2 需求及功能分析
➢ 30.2.1 总体功能分析 ➢ 30.2.2 功能模块分析
.
30.2.1 总体功能分析
➢ 本系统主要划分为8个子模块,如下图所示。
通讯录管理系统
人增 人删 人查 人插 人保 人加 人显
.
第30章
通讯录
开发背景 需求及功能分析 系统功能的实现 系统运行 开发过程常见问题及解决
.
第30章
通讯录
开发背景 需求及功能分析 系统功能的实现 系统运行 开发过程常见问题及解决.第Fra bibliotek0章通讯录
开发背景 需求及功能分析 系统功能的实现 系统运行 开发过程常见问题及解决
➢ 3. 查找联系人模块 查找联系人功能应该能够实现查找联系人信息,要求输入联系人 姓名,再根据姓名查找所有符合条件的信息。
➢ 4. 插入联系人模块 该模块主要完成在某个联系人之前插入另外一个联系人。
.
30.2.2 功能模块分析
➢ 5. 保存联系人模块
保存联系人信息功能应该能够实现将联系人信息经过增加、 删除等修改性操作后,将内存信息保存至文件。
第30章
通讯录
开发背景 需求及功能分析 系统功能的实现 系统运行 开发过程常见问题及解决
.
第30章
通讯录
开发背景 需求及功能分析 系统功能的实现 系统运行 开发过程常见问题及解决
.
第30章
通讯录
开发背景 需求及功能分析 系统功能的实现 系统运行 开发过程常见问题及解决
相关文档
最新文档