通讯录管理程序
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 简单通讯录管理 程序

#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语言通讯录管理系统程序代码作者:日期:计科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 ——增加学生信息时,出现对话框,先输入增加的数量。
通讯录管理系统V1.0

C语言程序设计实训报告课程名称:电子通讯录的实现班级:学号:姓名:指导老师:实训时间:一、需求分析具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。
(1)数据包括:人名、工作单位、电话号码和E-MAIL地址。
(2)可对记录中的姓名和电话号码进行修改。
(3)可增加和删除记录。
(4)可显示所有的保存记录。
(5)可按人名或电话号码进行查询。
[提示]建议采用结构体数组和文件系统实现。
结构体成员包括人名、工作单位、电话号码和E-MAIL地址。
根据题目的要求程序应该采用结构体数组和文件系统实现。
应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。
二、概要设计根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。
三、详细设计1、主函数;主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
流程图N【程序】int main() //主函数{Man man[500],*pman=man;;char control;int size;printf("\t\t**********************************************\n"); //窗口初始化printf("\t\t********** 欢迎使用通讯录管理系统! ***********\n");printf("\t\t*--------------------------------------------*\n");printf("\t\t* 请按回车键继续! *\n");printf("\t\t**********************************************\n");scanf("%c",&control);if(control){size=Scan(pman); //判断文件是否存在printf("\t\t\t请输入相应操作数操作\n");for(;;) //菜单生成{printf("\t\t**********************************************\n");printf("\t\t* 1--插入信息*\n");printf("\t\t* 2--按姓名查找*\n");printf("\t\t* 3--按电话查找*\n");printf("\t\t* 4--删除信息*\n");printf("\t\t* 5--显示信息*\n");printf("\t\t* 6--修改信息*\n");printf("\t\t* 0--退出系统*\n");printf("\t\t**********************************************\n");scanf("%s",&control);switch(control){case '1': size=Insert(pman,size);break; //插入新的通讯录case '2': S_asname(pman,size);break; //按姓名查找case '3': S_astel(pman,size);break; //按电话查找case '4': Delete(pman,size);break; //删除信息case '5': Display(pman,size);break; //显示所有信息case '6': Modify(pman,size);break; //修改信息case '0': printf("**************谢谢使用!再见!**************\n"); //退出系统return 0;default: printf("**********输入数字有误,请重新输入**********\n");break;}}}return 0;}2、插入模块此模块为插入信息模块,插入后再调用保存函数来保存所插入的数据,支持多条信息的插入。
通讯录管理制度

1.目的为增强对公司通讯录发放、更新等管理,特制定此制度。
2.适用范围公司通讯录。
3.职责3.1行政人事部负责本制度拟定、完善、更新及下发。
3.2行政人事助理负责定期更新、发放通讯录。
3.3各部门负责人负责本部门工作联系更新信息传递至行政人事助理。
3.4各员工负责自身联系更新信息传递至行政人事助理。
4.工作程序4.1通讯录版本及内容4.1.1公司通讯录分为“内部”和“外部”二个版本。
“内部”通讯录记录公司所有人员的通讯信息,仅发放于公司总部相关部门;“外部”通讯录记录部门负责人、部门助理,及经常与办事处沟通人员的通讯信息,发放于办事处。
4.1.2公司通讯录按照部门顺序记录以下内容:大部名称、部门名称、姓名、岗位、分机、手机、固定电话、传真、邮箱等信息。
4.2通讯录更新4.2.1行政人事助理依据上周发生的人员入职、离职、调岗等信息更新通讯录,于每周一下班前以邮件方式发放最新通讯录。
4.2.2公司各员工在自身通讯方式发生变更三个工作日内,把更新通讯信息传递至行政人事助理处。
4.2.3各部门对外工作联系信息,包括但不限于办公地址、办公电话、传真等发生变化时,由部门负责人或部门助理在变更后三个工作日内传递更新信息至行政人事助理处。
4.2.4公司部门架构、公司对外工作联系信息等发生变化时,经CEO审批后,由行政人事助理直接更新。
4.3通讯录发放接收人员4.3.1《通讯录(内部)》发放接受人员为:CEO、CTO、COO;各大部总监;部门经理;需与外部经常联系的部门助理、岗位人员。
4.3.2《通讯录(外部)》发放接受人员为:大区经理、办事处经理、办事处文秘。
4.4通讯录管理4.4.1公司通讯录为公司受控文件,严禁接受人员随意转发。
如发现转发的,处于200元/次经济处罚。
4.4.2如因正常工作需要,需取得通讯录的,由行政人事部总监审批。
4.4.3工作之外,要求取得通讯录的,由行政人事部总监审核后,由CEO审批。
通讯录管理系统

通讯录管理系统一、引言随着科技的不断发展,电子设备的运用愈发广泛,通讯工具也从最早的电话、传真、邮件演变到如今的移动电话、微信等APP软件。
同时,人们通讯的宽带和速度也得到了很大的进步,这里提到的速度指的是通讯的速度和传输的速度。
在日常生活中,人们需要不断联系和交流,而一个完善的通讯管理系统能够辅助人们做到这一点。
二、通讯录管理系统的概述通讯录管理系统是一个集成化的系统,它包括通讯录的建立、搜索、编辑、删除等基本功能,同时也有通讯录的导入、导出、备份、恢复等高级功能。
对于个人而言,通讯录管理系统是一个非常有用的工具,可以让我们对日常生活中的联系人实现精细化管理。
对于企业和组织而言,通讯录管理系统则是一个不可或缺的管理工具,它可以让企业和组织对内外联系人进行统一管理,提高工作效率,实现快速响应与灵活沟通。
三、通讯录管理系统的需求分析1. 用户管理需求通讯录管理系统的用户一般包括个人、企业和组织等,他们的管理需求有所不同,例如个人通讯录管理系统需要支持用户自主导入、导出、备份、恢复,企业通讯录管理系统需要支持管理员进行用户管理和权限控制等。
2. 数据整合需求通讯录管理系统需要支持将人员信息从不同的来源整合到一个集中的库中,这可以通过数据导入、数据同步、数据抓取等方式实现。
3. 可扩展性和可定制化需求通讯录管理系统应该具有良好的可扩展性和可定制化的能力,以满足企业和组织不同的需求。
4. 安全性需求通讯录管理系统需要具有安全性,防止数据泄漏和恶意攻击等安全问题,同时还要实现数据备份、数据恢复等功能。
五、通讯录管理系统的设计1. 系统结构设计通讯录管理系统应该是一个分层结构的系统,分为表示层、业务层、数据访问层和数据存储层四个层级。
其中,表示层为用户提供了用户界面,业务层处理用户请求,数据访问层为业务层提供数据访问接口,数据存储层则负责数据存储管理。
2. 系统模块设计通讯录管理系统主要包括三个模块:用户管理模块、通讯录管理模块和数据备份恢复模块。
通讯录 通讯录管理制度通用8篇

通讯录通讯录管理制度通用8篇在不断进步的社会中,需要使用制度的场合越来越多,制度就是在人类社会当中人们行为的准则。
制度到底怎么拟定才合适呢?这里作者为大家分享了8篇通讯录管理制度,希望在通讯录的写作这方面对您有一定的启发与帮助。
通讯录管理制度篇一一、通讯设备指办公电子话、手机、对讲机、传真机由行政办公室统一管理。
二、通讯设备购买、使用、增加功能、转移,由部门申请,经理办公会批准,到行政办公室办理有关手续。
三、电子话为办公设备,私事打市内电子话不得妨碍联系公务。
四、办公电子话应根据业务需要,由行政办公室定期核定每部电子话费用标准,非正常大额或连续超支需由各部门书面说明,如非正常使用须追究责任人进行赔偿。
五、传真电子话由专人管理,经使用部门主管批准后,到行政办公室登记使用。
任何人未经允许严禁使用。
六、个人使用的通讯设备要妥善保管,人为损坏照价赔偿。
七、由单位负责缴纳手机费的人员须保证24小时开机,对故意不开机或不接听电子话的按违纪处理并停止为其缴纳手机费。
八、调离或调岗不须使用的`一律交回行政办公室。
通讯录管理制度篇二一、认真做好本单位车辆、通讯设备管理工作,落实专人保养、维护、确保器材完好。
二、车辆、通讯设备由专人管理,保持车容整洁,车辆完好,不带病行驶,每半月对车辆检测一次,保证警务用车始终处于良好运行状态。
三、车辆只能用于警务工作,不得出私车或借与非警务人员,经常对驾驶员进行安全教育,严格遵守交通法规。
四、车辆每天存放在单位(除冬季存放车库外),无特殊任务,每天17时前须归队,如有情况请示领导批准。
五、单位通讯设备(电子话、无线对讲机等)应保持良好畅通状态,发现出现故障,要及时向领导报告并立即维修。
六、通讯设备不得私自外借或挪为他用。
七、通讯设备的保管须做到:防水、防火、防盗、防潮、防冻、防尘、防蛀。
无丢失、无损坏、无变质、无锈蚀、无鼠害。
八、如有车辆、通讯设备因保管或使用不当损坏,应照价赔偿。
学生通讯录管理系统c语言编程

学生通讯录管理系统c语言编程以下是一个简单的C语言程序,用于管理学生通讯录。
该程序可以添加、显示、查找和删除学生信息。
c复制代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_STUDENTS 100#define MAX_NAME_LENGTH 50// 学生结构体struct Student {char name[MAX_NAME_LENGTH];int age;char gender;char phone[15];char email[50];};// 学生数组struct Student students[MAX_STUDENTS];int num_students = 0;// 添加学生信息void add_student() {if (num_students >= MAX_STUDENTS) {printf("Error: Reached maximum number of students\n");return;}struct Student new_student;printf("Enter name: ");scanf("%s", new_);printf("Enter age: ");scanf("%d", &new_student.age);printf("Enter gender (M/F): ");scanf(" %c", &new_student.gender);printf("Enter phone number: ");scanf("%s", new_student.phone);printf("Enter email: ");scanf("%s", new_student.email);students[num_students] = new_student;num_students++;}// 显示所有学生信息void display_students() {printf("Name\tAge\tGender\tPhone\tEmail\n");for (int i = 0; i < num_students; i++) {printf("%s\t%d\t%c\t%s\t%s\n", students[i].name, students[i].age, students[i].gender, students[i].phone, students[i].email);}}// 查找学生信息void find_student() {char name[MAX_NAME_LENGTH];printf("Enter student name: ");scanf("%s", name);for (int i = 0; i < num_students; i++) {if (strcmp(students[i].name, name) == 0) {printf("Name: %s\n", students[i].name);printf("Age: %d\n", students[i].age);printf("Gender: %c\n", students[i].gender); printf("Phone: %s\n", students[i].phone); printf("Email: %s\n", students[i].email); return;}}printf("Error: Student not found\n");}// 删除学生信息void delete_student() {char name[MAX_NAME_LENGTH];printf("Enter student name: ");scanf("%s", name);int found = 0;for (int i = 0; i < num_students; i++) {if (strcmp(students[i].name, name) == 0) { found = 1;for (int j = i; j < num_students - 1; j++) { students[j] = students[j+1];}num_students--;break;}}if (!found) {printf("Error: Student not found\n");} else {printf("Student deleted successfully\n"); }}int main() {int choice;do {printf("\nMenu:\n");printf("1. Add student\n");printf("2. Display students\n");printf("3. Find student\n");printf("4. Delete student\n");printf("5. Exit\n");printf("Enter choice: ");scanf("%d", &choice);switch (choice) {case 1: add_student(); break;case 2: display_students(); break;case 3: find_student(); break;case 4: delete_student(); break;case 5: printf("Exiting...\n"); break; default: printf("Invalid choice\n"); break; }} while (choice != 5);return 0。
C++程序设计通讯录管理系统

C++程序设计通讯录管理系统通讯录管理系统文档1.引言本文档描述了一个C++程序设计的通讯录管理系统的设计和实现细节。
本系统旨在提供一个用户友好的界面,帮助用户轻松管理其通讯录信息。
本文档将详细介绍系统的需求分析、设计、实现和测试过程。
2.需求分析2.1 系统介绍通讯录管理系统是一个用于存储和管理个人联系人信息的工具。
它允许用户创建、查看、编辑和删除联系人信息,同时提供搜索和排序等功能。
2.2 功能需求①用户登录与注册功能用户通过输入用户名和密码进行登录,如果没有账号,可以进行注册。
②联系人管理功能用户可以创建、查看、编辑和删除联系人信息。
③联系人搜索功能用户可以根据姓名、方式号码等关键字进行联系人的搜索。
④联系人排序功能用户可以按照姓名、拼音首字母或方式号码等属性对联系人进行排序。
⑤联系人导入和导出功能用户可以将联系人信息导入和导出到外部文件,以便在不同设备之间共享和备份。
2.3 非功能性需求①用户界面友好性界面应简洁、直观,方便用户操作。
②数据安全性用户数据应进行加密存储,确保用户隐私的安全。
3.系统设计3.1 系统架构系统采用MVC(Model-View-Controller)架构,将数据模型、用户界面和控制逻辑分离。
3.2 数据库设计系统使用关系型数据库存储联系人信息,包括姓名、方式号码、电子邮件等属性。
3.3 用户界面设计系统采用图形用户界面(GUI),提供直观的操作界面,包括菜单、按钮、输入框等。
4.系统实现4.1 开发环境本系统使用C++编程语言开发,开发工具为Visual Studio。
4.2 数据库操作使用SQL语句实现数据库的创建、查询、插入、更新和删除等操作。
4.3 用户界面实现使用C++中的图形库实现用户界面,包括菜单栏、按钮、文本框等控件。
5.系统测试在开发完成后,对系统进行功能测试和性能测试,确保系统能够稳定运行并满足用户需求。
6.附件本文档附带通讯录管理系统的源代码和数据库文件。
通讯录管理系统需求分析

通讯录管理系统需求分析一、引言通讯录管理系统是一种用于管理个人或组织之间联系人信息的应用程序。
它通常包括存储联系人的基本信息,如姓名、电话号码、电子邮件地址等,并提供快速查找和编辑功能。
随着数字化时代的发展,通讯录管理系统在日常工作和生活中扮演着越来越重要的角色。
本文将对通讯录管理系统的需求进行详细分析。
二、功能需求1.添加联系人:用户应该能够通过系统向通讯录中添加新的联系人信息,包括姓名、电话号码、电子邮件地址等。
2.编辑联系人:用户可以对已有联系人信息进行编辑,修改或更新联系人的信息。
3.删除联系人:用户可以从通讯录中删除不再需要的联系人信息。
4.查找联系人:系统应该提供快速查找联系人的功能,用户可以通过姓名或其他关键词来查找特定联系人。
5.联系人分组:用户可以将联系人进行分组管理,方便对不同类别的联系人进行管理和查找。
6.导入导出联系人:系统应该支持从外部导入联系人信息,以及导出联系人信息到外部文件。
7.备份和恢复:系统应该具备备份和恢复通讯录数据的功能,以防止数据丢失或损坏。
三、性能需求1.安全性:通讯录管理系统应该保证用户联系人信息的隐私和安全性,防止未经授权的访问。
2.稳定性:系统应该具备良好的稳定性和可靠性,在高并发、大数据量的情况下也能够正常运行。
3.响应速度:系统应该具备较快的响应速度,用户在操作时能够获得即时的反馈。
4.易用性:系统应该具备良好的用户界面和友好的操作流程,方便用户快速上手并进行操作。
四、扩展性需求1.跨平台:通讯录管理系统应该具备跨平台的特性,支持在不同设备和操作系统上进行使用。
2.第三方应用集成:系统应该支持与第三方应用程序进行集成,例如与电子邮件客户端、日历应用等的数据互通。
3.自定义设置:用户可以根据自己的需求对系统进行定制设置,包括界面风格、提醒设置等。
五、总结通过对通讯录管理系统的功能、性能和扩展性需求进行分析,可以为系统的设计和开发提供指导。
在设计通讯录管理系统时,需要充分考虑用户的实际需求,保证系统的稳定性和易用性,满足用户对通讯录管理的各种需求。
C语言课程设计-通讯录管理系统

3.1.3 显示删除功能的界面
3.1.4 查找功能:
通过5:find—by—name 用姓名来查找个人的通讯录信息 通过6:find—by—tel 用电话号码来查找个人的通讯录信息
3.1.5 修改功能的界面:
输入姓名后的系统界面: 输入修改信息后的系统界面:
3.1.6添加功能的界面:
选择1后的系统界面:
struct student one; printf("\nInput tel:"); scanf("%s",telkey); if((fp=fopen(filename,"rb"))==NULL) { printf("\nCann't open this addressbook!!!"); exit(); } while(!feof(fp)) { fscanf(fp,"%s%s%s%s%s\n",,one.num,one.dis,one.tel,one.addr); if(!strcmp(telkey,one.tel)) { printf("\n\nHave finded,as follow:\n"); printf(" name num dis tel addr"); printf("\n%-10s%-10s%-10s%-20s%-20s\n",,one.num,one.dis,one.tel,one.addr); k=1; } } if(!k) printf("\n\nSorry,there is no this student!!"); fclose(fp); } void output() { struct student one; if((fp=fopen(filename,"r"))==NULL) { printf("\nCann't open this addressbook!!!"); exit(0); } /* printf("\n\n%20s\n"," \nCann't open this addressbook\n");*/ while(!feof(fp)) {
通讯录管理系统java课程设计源代码

通讯录管理系统简介通讯录是一种记录联系人信息的工具,用于存储和管理与个人、组织或机构相关的联系信息。
通讯录管理系统是一个用于创建、编辑、查找和删除联系人信息的软件应用程序。
本文将介绍一个使用Java编写的通讯录管理系统的设计源代码。
功能需求通讯录管理系统需要具备以下功能: 1. 添加联系人:用户可以输入联系人的姓名、电话号码、电子邮件地址等信息,并将其添加到通讯录中。
2. 编辑联系人:用户可以选择要编辑的联系人,并可以修改其姓名、电话号码、电子邮件地址等信息。
3. 查找联系人:用户可以输入关键字进行搜索,系统将根据关键字在通讯录中查找匹配的联系人并显示出来。
4. 删除联系人:用户可以选择要删除的联系人,并将其从通讯录中删除。
5. 显示所有联系人:系统可以列出所有已存储在通讯录中的联系人信息。
设计思路数据结构为了实现上述功能,我们需要设计合适的数据结构来存储联系人信息。
在这里,我们可以使用一个类来表示每个联系人,其中包含姓名、电话号码和电子邮件地址等属性。
然后,我们可以使用一个集合(如ArrayList)来存储所有的联系人对象。
用户界面为了方便用户操作,我们可以使用命令行界面(CLI)来实现通讯录管理系统。
用户可以通过输入不同的命令来执行相应的操作,如添加联系人、编辑联系人、查找联系人等。
功能实现1.添加联系人:用户输入联系人的姓名、电话号码和电子邮件地址,系统创建一个联系人对象,并将其添加到集合中。
2.编辑联系人:用户选择要编辑的联系人,并输入要修改的信息,系统更新该联系人对象的属性。
3.查找联系人:用户输入关键字,系统遍历所有联系人对象并检查是否包含该关键字,将匹配的结果显示出来。
4.删除联系人:用户选择要删除的联系人,系统从集合中移除该对象。
5.显示所有联系人:系统遍历集合中的所有联系人对象,并将其属性逐个显示出来。
代码实现import java.util.ArrayList;import java.util.Scanner;class Contact {private String name;private String phoneNumber;private String email;public Contact(String name, String phoneNumber, String email) { = name;this.phoneNumber = phoneNumber;this.email = email;}public String getName() {return name;}public void setName(String name) { = name;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}public class AddressBook {private ArrayList<Contact> contacts;public AddressBook() {contacts = new ArrayList<>();}public void addContact(Contact contact) {contacts.add(contact);System.out.println("Contact added successfully!");}public void editContact(int index, Contact contact) {if (index >= 0 && index < contacts.size()) {contacts.set(index, contact);System.out.println("Contact edited successfully!");} else {System.out.println("Invalid index!");}}public void searchContacts(String keyword) {boolean found = false;for (Contact contact : contacts) {if (contact.getName().contains(keyword) || contact.getPhoneNumber ().contains(keyword)|| contact.getEmail().contains(keyword)) {System.out.println(contact.getName() + " | " + contact.getPhon eNumber() + " | " + contact.getEmail());found = true;}}if (!found) {System.out.println("No matching contacts found.");}}public void deleteContact(int index) {if (index >= 0 && index < contacts.size()) {contacts.remove(index);System.out.println("Contact deleted successfully!");} else {System.out.println("Invalid index!");}}public void displayAllContacts() {for (Contact contact : contacts) {System.out.println(contact.getName() + " | " + contact.getPhoneNum ber() + " | " + contact.getEmail());}}public static void main(String[] args) {AddressBook addressBook = new AddressBook();Scanner scanner = new Scanner(System.in);while (true) {System.out.println("\nAddress Book Management System");System.out.println("1. Add Contact");System.out.println("2. Edit Contact");System.out.println("3. Search Contacts");System.out.println("4. Delete Contact");System.out.println("5. Display All Contacts");System.out.println("6. Exit");System.out.print("\nEnter your choice: ");int choice = scanner.nextInt();switch (choice) {case 1:scanner.nextLine(); // Consume newline characterSystem.out.print("Enter name: ");String name = scanner.nextLine();System.out.print("Enter phone number: ");String phoneNumber = scanner.nextLine();System.out.print("Enter email address: ");String email = scanner.nextLine();Contact contact = new Contact(name, phoneNumber, email);addressBook.addContact(contact);break;case 2:System.out.print("Enter index of the contact to edit: ");int indexToEdit = scanner.nextInt();if (indexToEdit >= 0 && indexToEdit < addressBook.contacts. size()) {scanner.nextLine(); // Consume newline characterSystem.out.print("Enter name: ");String newName = scanner.nextLine();System.out.print("Enter phone number: ");String newPhoneNumber = scanner.nextLine();System.out.print("Enter email address: ");String newEmail = scanner.nextLine();Contact newContact = new Contact(newName, newPhoneNumb er, newEmail);addressBook.editContact(indexToEdit, newContact);} else {System.out.println("Invalid index!");}break;case 3:scanner.nextLine(); // Consume newline characterSystem.out.print("Enter keyword to search contacts: ");String keyword = scanner.nextLine();addressBook.searchContacts(keyword);break;case 4:System.out.print("Enter index of the contact to delete: "); int indexToDelete = scanner.nextInt();addressBook.deleteContact(indexToDelete);break;case 5:addressBook.displayAllContacts();break;case 6:System.exit(0);break;default:System.out.println("Invalid choice!");}}}}总结通过以上的设计和实现,我们创建了一个简单的通讯录管理系统。
简单的c语言程序设计班级通讯录管理系统

简单的c语言程序设计班级通讯录管理系统一、引言班级通讯录管理系统是一款基于C语言的简单程序,旨在帮助班级管理者更好地管理班级通讯录信息。
本文将从需求分析、系统设计、代码实现等方面详细介绍该系统。
二、需求分析1. 功能需求(1)添加联系人:可以添加新的联系人信息,包括姓名、性别、电话号码等。
(2)删除联系人:可以删除已有的联系人信息。
(3)修改联系人:可以修改已有的联系人信息,包括姓名、性别、电话号码等。
(4)查询联系人:可以根据姓名或电话号码查询已有的联系人信息。
(5)显示所有联系人:可以查看当前所有已有的联系人信息。
2. 性能需求(1)稳定性:程序应该具有较高的稳定性,不会因为输入错误或其他异常情况导致崩溃。
(2)响应速度:程序应该具有较快的响应速度,不会因为数据量过大或其他原因导致卡顿或延迟。
3. 可靠性需求(1)数据安全:程序应该具有较高的数据安全性,保证用户输入的数据不会被损坏或丢失。
(2)用户友好性:程序应该具有较好的用户友好性,使用户能够轻松使用。
三、系统设计1. 总体设计(1)系统结构:本系统采用单层结构,包含若干个函数模块。
(2)数据结构:本系统采用链表数据结构,将每个联系人信息存储在一个节点中,并通过指针将各个节点连接起来。
(3)界面设计:本系统采用命令行界面,用户可以通过输入不同的命令实现不同的功能。
2. 模块设计(1)添加联系人模块:该模块用于添加新的联系人信息,包括姓名、性别、电话号码等。
用户需要输入相应的信息后,程序将新建一个节点并将其插入到链表中。
(2)删除联系人模块:该模块用于删除已有的联系人信息。
用户需要输入要删除的联系人姓名或电话号码后,程序将在链表中查找相应节点并将其删除。
(3)修改联系人模块:该模块用于修改已有的联系人信息。
用户需要输入要修改的联系人姓名或电话号码后,程序将在链表中查找相应节点并允许用户修改其中的信息。
(4)查询联系人模块:该模块用于根据姓名或电话号码查询已有的联系人信息。
通讯录管理系统代码(C程序)

#include<stdio.h> /*标准输入输出函数库*/ #include<stdlib.h> /*标准函数库*/#include<string.h> /*字符串函数库*/#define FILENAME "phone.dat"struct date //定义一个结构体类型数组{char name[10]; /*姓名*/char phone[12];char email[20]; /*邮箱*/char QQ[20];}per[10];int menu() //主菜单选择函数{int c; //定义一个整型变量do{system("cls"); //清屏printf("\t*******通讯录*******\n");printf("\t--------------------\n");printf("\t 1、通讯信息录入\n");printf("\t 2、通讯信息显示\n");printf("\t 3、通讯信息保存\n");printf("\t 4、通讯信息删除\n");printf("\t 5、通讯信息修改\n");printf("\t 6、通讯信息增加\n");printf("\t 7、通讯信息查询\n");printf("\t 0. 退出\n");printf("\t--------------------\n");printf("\t请您选择(0-7):");scanf("%d",&c);}while(c>7&&c<0);return(c);}int Input(struct date per[10],int n){int i=0;char sign,x[10];while(sign!='n'&&sign!='N'){printf("\t姓名:");scanf("%s",per[n+i].name);printf("\t电话号码:");scanf("%s",per[n+i].phone);printf("\t电子邮箱:");scanf("%s",per[n+i].email);printf("\tQQ:");scanf("%s",per[n+i].QQ);gets(x);printf("\n\t是否继续添加?(Y/N)");fflush(stdin);//清空缓存scanf("%c",&sign);i++;}return(n+i);}void writeToFile(struct date per[10],int n){FILE *fp=NULL;int i=0;fp=fopen("phone.dat","wb");if(fp==NULL){printf("打开文件出错!\n");exit(0);}for(i=0;i<10;i++)fwrite(&per[i],sizeof(per),1,fp); //把字节为1的信息写入文件fclose(fp);}void Display(struct date per[10],int n){int i;printf("----------------------------------------------------------------------\n");//格式/printf(" 姓名电话号码QQ 电子邮箱\n");printf("----------------------------------------------------------------------\n");for(i=1;i<n+1;i++){printf("%-15s%-14s%-14s%-14s\n",per[i-1].name,per[i-1].phone,per[i-1].QQ,per[i-1].email);if(i>1&&i%10==0){printf("\t-----------------------------------\n");printf("\t");system("pause");printf("\t-----------------------------------\n");}}printf("----------------------------------------------------------------------\n");system("pause");}int Delete_a_record(struct date per[10],int n){char s[20];int i=0,j;printf("\t请输入想删除记录中的名字:");scanf("%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return(n);}for(j=i;j<n-1;j++){strcpy(per[j].phone,per[j+1].phone);strcpy(per[j].name,per[j+1].name);strcpy(per[j].QQ,per[j+1].QQ);strcpy(per[j].email,per[j+1].email);}printf("\t\t\t已经成功删除!\n");return(n-1);}void Query_a_record(struct date per[10],int n){int m;printf("\t\n请选择查询方式:\n");printf("\t┌──────┐\n");printf("\t│1------姓名│\n");printf("\t│2------电话│\n");printf("\t│3------返回│\n");printf("\t└──────┘\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3&&m!=4){printf("输入错误,请重新选择:");scanf("%d",&m);}if(m==1){char s[20];int i=0;printf("\t请输入想查询的姓名:");scanf("\t%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t此人QQ: %s\n",per[i].QQ);printf("\t电话号码: %s\n",per[i].phone);printf("\t电子邮箱: %s\n",per[i].email);} ;if(m==2){char s[20];int i=0;printf("\t请输入想查询的电话:");scanf("\t%s",s);while(strcmp(per[i].phone,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t此人姓名: %s\n",per[i].name);printf("\t此人QQ: %s\n",per[i].QQ);printf("\t电子邮箱: %s\n",per[i].email);} ;}void Change(struct date per[10],int n){char s[20];int i=0;printf("\t请输入想修改的记录中的名字:");scanf("%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("姓名:");scanf("%s",per[i].name);printf("电话号码:");scanf("%s",per[i].phone);printf("QQ:");scanf("%s",per[i].QQ);printf("电子邮箱:");scanf("%s",per[i].email);printf("\n修改成功!");}void WritetoText(struct date per[10],int n){int i=0;FILE *fp; //定义文件指针char filename[20]; //定义文件名printf("\t保存到文件\n"); //输入文件名if((fp=fopen("phone.dat","w"))==NULL){printf("\t无法打开文件\n");system("pause");return;}fprintf(fp,"***************************************通讯录********************************\n");fprintf(fp," 姓名电话号码QQ 电子邮箱\n");fprintf(fp,"-----------------------------------------------------------------------------\n");while(i<n){fprintf(fp,"%-10s\t%-3s\t%-20s\t%-20s\n",per[i].name,per[i].phone,per[i].QQ,per[i].email);i++;}fprintf(fp,"-------------------------------------------------------------------------\n");fprintf(fp,"********************************共有%d条记录***************************\n",n);fclose(fp); //关闭文件printf("保存成功!\n");}void main() //主函数{int n=0,i;while(1){switch (menu()){case 1:{printf("\n\t 通讯信息录入\n"); //信息录入n=Input(per, n);}break;case 2:printf("\n\t\t\t 通讯录记录表\n"); //显示记录Display(per,n);break;case 3:printf("\n\t保存功能\n");WritetoText(per,n); //保存数据printf("\t");system("pause"); //操作完成后进行暂停break;case 4:printf("\n\t从通讯录中删除记录\n");n=Delete_a_record(per,n); //删除记录printf("\t");system("pause");break;case 5:printf("\n\t修改通讯录中的记录\n");Change(per,n); //修改数据printf("\t");system("pause");break;case 6:printf("\n\t添加记录到通讯录\n"); //添加记录n=Input(per,n);break;case 7:printf("\n\t在通讯录中查找记录\n");Query_a_record(per,n); //查找记录printf("\t");system("pause");break;case 0:printf("\n\t\t谢谢使用,再见!\n"); //结束程序printf("\n\t\t");system("pause");exit(0);}}}。
个人通讯录管理系统..

{
for(int j=0;j<3;j++)
{
str=m_list.GetItemText(i,j);
str+=' ';
outfile<<str;
}
outfile<<endl;
}
outfile.close();
k=1;
【导入】按钮的成员函数为:void CMy1111Dlg::OnBUTTONload()
图13.1
图13.2
}
}
else
{
if(IDOK==MessageBox("确定删除?","Information",MB_OKCANCEL))
{
m_list.DeleteItem(index);
}
}
}
【修改记录】按钮的成员函数为:void CMy1111Dlg::OnBUTTONmodify()
相应代码:if(!m_list.GetItemCount())
int index=0;
index=m_list.GetNextItem(0,LVNI_SELECTED);
if(-1==index)
{
dlg.m_name=m_list.GetItemText(0,0);
dlg.m_phone=m_list.GetItemText(0,1);
dlg.m_email=m_list.GetItemText(0,2);
(3)输入信息对话框的设计:添加对话框,双击该对话框,创建一个新类,添加类名为Inputdlg,其设计如图7.1,整体效果设计图为7.2
手机通讯录管理系统

《面向对象技术大作业》报告书题目:手机通讯录管理系统姓名:韩劲松学号:090505110日期:2010年11月8日管理科学与工程学院2010-2011学年第1学期目录摘要 (I)第1章绪论 (2)第2章需求分析 (3)2.1编写目的 (3)2.2需求概述 (3)2.3需求说明 (3)第3章总体设计 (4)3.1编写目的 (4)3.2总体结构 (4)3.3数据结构 (4)第4章流程图 (5)第5章详细设计 (6)5.1编写目的 (6)5.2详细设计 (6)5.3程序运行 (12)参考文献 (14)结束语 (15)摘要本次C程序设计课程设计我选择手机通讯录管理系统,在菜单上显示各功能的选项。
在增加功能中可按照编号、姓名、电话号码和类型等输入每个人的通讯信息。
在查看时,可按三种类型如办公类、个人类和商务类等查询,并把各类型的通讯人信息列出。
修改功能中,可以先选中某个人的姓名在进行数据修改,删除功能同上。
在查询功能中可通过姓名和电话号码查询此人信息。
而且在此次设计过程中,我特别地增加了一项拨号功能,在拨号时,在屏幕上显示所拨的号码。
关键词:手机通讯录管理系统菜单输入功能修改功能删除功能查询查看1.设计的原始资料及依据通过课程设计使学生进一步加深对课程内容的理解,利用程序设计的基本思想进行程序的开发,进一步掌握C++编程的技巧,提高学生用程序的思想来解决实际问题的能力。
2.设计的主要内容及要求a设计题目:通讯录管理系统b需要完成的功能:⑴查看功能;⑵增加功能;⑶拨号功能;⑷修改功能;⑸删除功能;⑹菜单功能;⑺查询功能。
必须用到链表,能将生成的文件存储与外部存储器上,并且从外部存储器上可以编写该文件的功能。
第1章绪论在本次C++大作业中,我设计手机通讯录管理系统,在主函数中,主要用到了多分支语句(switch)。
在无限循环时也能用到了语句for,当每一个功能使用完毕或输入错误时就会返回,再次调用菜单函数进入菜单界面。
整理工作通讯录活动

整理工作通讯录活动
1. 收集信息,首先收集所有需要整理的通讯录信息,包括姓名、职务、部门、联系方式等。
2. 清理数据,对收集到的通讯录信息进行清理,删除重复、错
误或过时的信息,确保数据的准确性和完整性。
3. 分类整理,根据部门、职务或其他分类标准,将通讯录信息
进行分类整理,使其更易于查找和管理。
4. 更新信息,对已有的通讯录信息进行更新,包括联系方式、
职务变动等,确保信息的及时性。
5. 建立备份,建立通讯录信息的备份,以防意外丢失或损坏,
同时确保信息的安全性。
6. 定期维护,定期对通讯录信息进行维护和更新,保持其准确
性和实用性。
以上是整理工作通讯录活动的一般步骤,希望能对您有所帮助。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆C++课程设计--通讯录管理程序作者:----学号:----完成时间:2006.6.18☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆*/ #include#include#include#include#include#includevoid DisplayMenu()//主菜单{char *menu[]={"\t\t\t1.增加记录","\t\t\t2.删除记录","\t\t\t3.显示所有记录","\t\t\t4.按姓名查找并显示一个记录","\t\t\t5.按姓名查找并修改一个记录","\t\t\t6.从正文文件中添加数据到库表中","\t\t\t7.将库表中的数据写入正文文件","\t\t\t8.排序库表\n\n","\t\t\t9.退出系统",NULL};cout<<"\n\n\t\t★★★★★欢迎使用通讯录管理系统!★★★★★\n\n";for(int i=0; menu[i]; i++) cout<<MENU[I]<<ENDL;cout<<"\n\t\t★★★★★★★★★★★★★★★★★★★★★★\n";cout<<"请输入相应功能的序号:";}//功能5有子菜单:void ShowModiMenu(){ char *submenu[]={"(1) 修改姓名","(2) 修改办公室电话","(3) 修改住宅电话","(4) 修改手机号码","(5) 修改email地址\n","(0) 不修改,返回主菜单",NULL};cout<<ENDL;for(int i=0; submenu[i]; i++) cout<<SUBMENU[I]<<ENDL;cout<<"请输入选择:";}//结点类class Node{char Name[10];//姓名char OfficePhone[15];//办公室电话char HomePhone[15];//住宅电话char MobilePhone[15];//手机号码char EMail[20];//email地址Node *Next;//下一结点指针public:Node(char *pname=NULL, char *ophone=NULL, char *hphone=NULL, char *pmphone=NULL, char *pemail=NULL)//构造函数,各参数均有缺省值{if(pname) strcpy(Name, pname);else strcpy(Name, " ");if(ophone) strcpy(OfficePhone, ophone);else strcpy(OfficePhone, " ");if(hphone) strcpy(HomePhone, hphone);else strcpy(HomePhone, " ");if(pmphone) strcpy(MobilePhone, pmphone);else strcpy(MobilePhone, " ");if(pemail) strcpy(EMail, pemail);else strcpy(EMail, " ");}void Show()//显示结点数据{cout<<SETW(10)<<NAME<<SETW(11)<<OFFICEPHONE<<"(O)"<<SETW(11)<<HOMEPHONE<<"(H)"<<SETW(14)<<MOBILEPHONE<<"(M)"<<SETW(20)<<EMAIL<<ENDL;}void SetName(char *s)//修改姓名{strcpy(Name, s);}void SetOfficePhone(char *op)//修改办公室电话{strcpy(OfficePhone, op);}void SetHomePhone(char *hp)//修改住宅电话{strcpy(HomePhone, hp);}void SetMobilePhone(char *s)//修改手机号码{strcpy(MobilePhone, s);}void SetEMail(char *s)//修改email地址{strcpy(EMail, s);}friend class AddrList;//将AddrList类说明为友元类friend void addfromtxtfile(AddrList &);//将addfromtxtfile说明为友元函数friend void writetotxtfile(AddrList &);//将writetotxtfile说明为友元函数};//链表类class AddrList{Node *HeadPtr;//链表首指针Node *TailPtr;//链表尾指针int Tag;//排序状态标志,当Tag=1时,按姓名排序//当Tag=2时,按办公室电话排序public://成员函数AddrList(Node *head=NULL, Node *tail=NULL, int tag=1)//构造函数,产生空链表,将tag的值置为1{HeadPtr=head;TailPtr=tail;Tag=tag;}void AddTail(Node *p)//将p指向的结点加入到链表尾部{if(HeadPtr==NULL){HeadPtr=p;TailPtr=p;p->Next=NULL;}else{TailPtr->Next=p;p->Next=NULL;TailPtr=p;}}void AddSort(Node *p)//将p指向的结点按Tag指定的顺序插入到链表中{Node *p1, *p2;if(Tag==1)//按姓名排序{if(HeadPtr==NULL)//如果插入前原始链表为空链表{HeadPtr=p;TailPtr=p;p->Next=NULL;}else{if(strcmp(p->Name, HeadPtr->Name)<=0)//插在链表首部p->Next=HeadPtr;HeadPtr=p;}else//插在链表中间或尾部{p1=HeadPtr;p2=HeadPtr;while(p2->Next&&(strcmp(p2->Name, p->Name)<0))//查找待插入位置{p1=p2; p2=p2->Next;}if(strcmp(p2->Name, p->Name)<0)//插在链表尾部{p2->Next=p; p->Next=NULL; TailPtr=p;}else//插在链表中间,p2之前{p->Next=p2; p1->Next=p;}}}}else//按办公室电话排序{if(HeadPtr==NULL)//如果插入前原始链表为空链表{HeadPtr=p;TailPtr=p;p->Next=NULL;}else{if(strcmp(p->OfficePhone, HeadPtr->OfficePhone)<=0)//插在链表首部{p->Next=HeadPtr;HeadPtr=p;}else//插在链表中间或尾部{p1=HeadPtr;p2=HeadPtr;while(p2->Next&&(strcmp(p2->OfficePhone, p->OfficePhone)<0))//查找待插入位置{p1=p2; p2=p2->Next;}if(strcmp(p2->OfficePhone, p->OfficePhone)<0)//插在链表尾部{p2->Next=p; p->Next=NULL; TailPtr=p;}else//插在链表中间,p2之前{p->Next=p2; p1->Next=p;}}}}Node *LookUp(char *name)//按姓名查找结点,返回该结点指针{Node *p;p=HeadPtr;while(p!=NULL){if(strcmp(p->Name, name)==0) return p;p=p->Next;}return NULL;}void 删除(char *name)//删除指定姓名的结点{Node *p1, *p2;if(strcmp(HeadPtr->Name, name)==0)//若待删除的结点为首结点{p1=HeadPtr;HeadPtr=HeadPtr->Next;删除p1;cout<<"删除了联系人"<<NAME<<"的信息!"<<ENDL;system("pause");}else//删除其他结点{p1=HeadPtr;p2=HeadPtr;while(strcmp(p2->Name, name)!=0&&p2->Next!=NULL){p1=p2;p2=p2->Next;}if(strcmp(p2->Name, name)==0){p1->Next=p2->Next;删除p2;cout<<"删除了一个联系人的信息!"<<ENDL;system("pause");}}}void Sort(int tag)//按tag指定的关键字重新排序{Node *p1, *p2;Tag=tag;p2=HeadPtr;HeadPtr=NULL;TailPtr=NULL;while(p2){p1=p2->Next;AddSort(p2);p2=p1;}TailPtr->Next=NULL;}void ShowAll()//显示全部结点,每10个显示一屏{int n=0;Node *p;if(HeadPtr==NULL){cout<<"链表为空,没有记录可显示!"<<ENDL; }else for(p=HeadPtr; p!=NULL; p=p->Next){p->Show();n++;if(n%10==0) {cout<<"按任意键显示下一屏:"< }}void SetTag(int t)//置Tag值{Tag=t;}int GetTag()//取tag值{return Tag;}Node *GetHeadPtr()//取首指针{return HeadPtr;}~AddrList()//释放链表空间{Node *p;if(HeadPtr==NULL) ;else{while(HeadPtr){HeadPtr=HeadPtr->Next;删除p;}}}void CreateList(char *filename)//从二进制文件中读入数据,//构造链表{ifstream infile(filename, ios::in|ios::binary|ios::nocreate);if(!infile) {cout<<"文件"<<FILENAME<<"不存在,链表为空!"; return;} //如果文件不存在,直接返回,空表else{infile.read((char *)&Tag, 4);//读出二进制文件的第1个数据T agint n;infile.read((char *)&n, 4);//读出记录数cout<<"正在从数据中加载"<<N<<"个联系人的记录……"<<ENDL; Node *p;for(int i=0; i{p=new Node;infile.read((char *)p, sizeof(Node));AddTail(p);}}infile.close();cout<<"数据从二进制文件加载成功!"<}void WriteToFile(char *filename)//将链表中数据//写入指定的二进制文件{ofstream outfile;outfile.open(filename, ios::out|ios::binary);outfile.write((char *)&Tag, 4);Node *p, *p1;int n=0;for(p1=HeadPtr; p1!=NULL; p1=p1->Next) n++;outfile.write((char *)&n, 4);p=HeadPtr;while(p){outfile.write((char *)p, sizeof(Node));}cout<<"成功导出二进制文件!共有"<<N<<"个联系人的记录!"<<ENDL;outfile.close();}};//以下为处理函数void add(AddrList &addrlist)//增加记录,按照当前排序标志Tag//插入结点,插入结点后,链表仍然//保持有序{cout<<"请输入姓名、办公室电话、住宅电话、手机号码、email地址(以空格、Tab或回车分隔):"<<ENDL;char n[10], op[15], hp[15], mp[15], em[20];cin>>n>>op>>hp>>mp>>em;Node *p;p=new Node(n, op, hp, mp, em);p->Show();addrlist.AddSort(p);cout<<"添加成功!是否继续添加?[y/n]";char t;cin>>t;if(t=='y') add(addrlist);}void del(AddrList &addrlist)//删除记录{if(addrlist.GetHeadPtr()==NULL){cout<<"链表为空,没有记录可删!"<cout<<"请输入要删除的联系人的姓名:";char n[10]; cin>>n;Node *p;p=addrlist.LookUp(n);if(p==NULL) {cout<<"链表上没有联系人"<<N<<"!"<p->Show();cout<<"确认删除?[y/n]";char t;cin>>t;if(t=='y') addrlist.删除(n);}void showall(AddrList &addrlist)//显示所有记录{addrlist.ShowAll();system("pause");}void query(AddrList &addrlist)//按姓名查找并显示一条记录{if(addrlist.GetHeadPtr()==NULL){cout<<"链表为空,没有联系人可查找!"<cout<<"请输入要查找的联系人的姓名:";char n[10]; cin>>n;Node *p;p=addrlist.LookUp(n);if(p==NULL){cout<<"没有"<<N<<"的记录!"<cout<<"该联系人的记录为:"<<ENDL;p->Show();system("pause");}void modify(AddrList &addrlist)//按姓名修改一条记录//当修改姓名后,如果当前排序关键字//为姓名,需重新排序。