通讯录程序
通讯录程序设计
通讯录程序设计设计一个实用的小型通讯录程序,具有添加,查询和删除功能。
由姓名,籍贯,电话号码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++功能简化的通讯录管理程序
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 ——增加学生信息时,出现对话框,先输入增加的数量。
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#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的手机通讯录(附程序)
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 面向对象的方式来编写通讯录代码。
一、设计通讯录类我们首先需要设计一个通讯录类,这个类将包含通讯录的基本功能,比如添加通联人、删除通联人、查找通联人等操作。
通讯录类的设计如下:```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对象,然后进入一个循环当中,用户可以输入相应的选项来执行相应的操作,直到用户选择退出为止。
java通讯录课程设计报告
课程设计报告:Java通讯录一、引言本次课程设计是关于Java通讯录的开发,旨在让我们更深入地理解Java编程语言在现实生活中的应用。
通讯录是一种常见的应用程序,它可以帮助我们管理联系人信息,方便我们与朋友和家人保持联系。
二、需求分析本次课程设计的目标是根据用户需求,设计并实现一个功能齐全的Java通讯录应用程序。
具体需求如下:用户可以添加联系人信息,包括姓名、电话号码、电子邮件地址等。
用户可以删除联系人信息。
用户可以编辑联系人信息。
用户可以按姓名、电话号码或电子邮件地址搜索联系人信息。
用户可以查看所有联系人信息。
三、设计数据库设计为了存储联系人信息,我们选择使用Java内置的ArrayList类作为数据库。
ArrayList是一个动态数组,可以根据需要自动增长。
我们将使用ArrayList的add()方法添加联系人信息,使用get()方法获取联系人信息,使用remove()方法删除联系人信息。
界面设计我们使用Java Swing库来创建用户界面。
界面包括以下组件:JLabel:显示提示信息和标题。
JTextField:用于输入和编辑联系人信息。
JButton:用于触发添加、删除、编辑和搜索等操作。
JTable:用于显示所有联系人信息。
JComboBox:用于选择搜索条件。
四、实现添加联系人信息当用户点击“添加”按钮时,程序会创建一个新的联系人对象,并将用户输入的信息设置到该对象中。
然后,程序将该对象添加到ArrayList中。
删除联系人信息当用户选择要删除的联系人并点击“删除”按钮时,程序会从ArrayList中删除该联系人对象。
编辑联系人信息当用户选择要编辑的联系人并点击“编辑”按钮时,程序会将该联系人的信息显示在文本框中,以便用户进行修改。
修改完成后,程序会将修改后的信息保存到ArrayList中。
搜索联系人信息当用户选择搜索条件并输入搜索关键字时,程序会在ArrayList 中查找符合条件的联系人对象,并将其显示在表格中。
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.附件本文档附带通讯录管理系统的源代码和数据库文件。
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 ”文件,即可调用。
通讯录管理系统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)查询联系人模块:该模块用于根据姓名或电话号码查询已有的联系人信息。
Android通讯录小软件(可以导入手机上的联系人、发短信、打电话、增加、修改联系人等)
Android通讯录这是本人学习android一个月以来的第一个比较实用的小程序,此程序可以读取手机自带通讯录上的所有联系人,并且可以导入到这个通讯录列表,不用用户一个一个地输入,将导入的联系人信息保存在SQLite3数据库中,还具有向指定联系人发送短信、打电话、增加、修改联系人等基本功能。
效果图如下所示:代码如下(直接复制即可掩饰效果):====================== DatabaseHelper======================= package liu.sqlite3.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;//DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能,//第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作public class DatabaseHelper extends SQLiteOpenHelper {private static final int VERSION = 1;//在SQLiteOepnHelper的子类当中,必须有该构造函数public DatabaseHelper(Context context, String name, CursorFactory factory,int version) {//必须通过super调用父类当中的构造函数super(context, name, factory, version);// TODO Auto-generated constructor stub}public DatabaseHelper(Context context,String name){this(context,name,VERSION);}public DatabaseHelper(Context context,String name,int version){this(context, name,null,version);}//该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubSystem.out.println("create a Database");//execSQL函数用于执行SQL语句db.execSQL("create table user(name varchar(20),phone text,qq text,mail text,address text)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubSystem.out.println("update a Database");}}package net.yxarm;import java.util.ArrayList;import java.util.HashMap;import liu.sqlite3.db.DatabaseHelper;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.view.ContextMenu.ContextMenuInfo;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class Add_people extends Activity {private EditText editName = null;private EditText editPhone = null;private EditText editQQ = null;private EditText editEmail = null;private EditText editAddress = null;private Button buttonAdd = null;private Button buttonCancel = null;public static int n ;//==============重写Activity中创建Activity的方法========================================@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.second);editName = (EditText) findViewById(R.id.edit_name);editPhone = (EditText) findViewById(R.id.edit_phone);editQQ = (EditText) findViewById(R.id.edit_QQ);editEmail = (EditText) findViewById(R.id.edit_mail);editAddress = (EditText) findViewById(R.id.edit_address);buttonAdd = (Button) findViewById(R.id.button1_add);buttonCancel= (Button) findViewById(R.id.button2_cancel);//判断是否是修改联系人还是重新创建,修改的话将原始信息重新填写到编辑框内,然后下面根据n的值决定调用新建还是修改数据的方法Intent intent = getIntent(); //接收上一个Activity通过intent传过来的数据n = intent.getIntExtra("editpeople", 0);if(n == 1){System.out.println("----上一个Activity传进来的(editpeople)值:" + n);editName.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("name").toString()); editPhone.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("phone").toString());editQQ.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("qq").toString());editEmail.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("mail").toString());editAddress.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("address").toString());}//设置两个按钮监听事件buttonAdd.setOnClickListener(new MyButtonOnClickListener());buttonCancel.setOnClickListener(new MyButtonOnClickListener());}//======================两个按钮监听处理事件============================================class MyButtonOnClickListener implements OnClickListener {private static final int REQUESCODE2 = 2;public void onClick(View v) {switch(v.getId()) {case R.id.button1_add: //--------------------确定添加此联系人//判断联系人是否可以添加(如:姓名不能为空、电话要有效)if(editName.getText().toString().length()>0 & editPhone.getText().toString().length()>=3 ) {CreateDatabaseHelper(); //创建数据库,将联系人信息保存到数据库(若数据库存在则不会重建)if(n != 1) { //新建联系人,若是修改联系人则不会再添加Address_Book.LIST = Insert(); //返回全部数据给LIST静态列表变量Toast.makeText(Add_people.this, "添加成功", 1).show();System.out.println(".......选择新建联系人");}else if(n == 1) { //修改联系人(n:是点击了修改联系人后传进来的值)Address_Book.LIST = modfiy(); //返回全部数据给LIST静态列表变量Toast.makeText(Add_people.this, "修改成功", 1).show();System.out.println(".......选择修改联系人");}//返回到第一个Activity中显示(所有数据已经保存在LIST静态列表变量中)Intent intent = new Intent();intent.setClass(Add_people.this,Address_Book.class);intent.putExtra("nothing2", 2);startActivityForResult(intent, REQUESCODE2);}else if(editName.getText().toString().equals("")){ //没有输入名字不能添加Toast.makeText(Add_people.this, "请输入联系人姓名", 1).show();}else if( editPhone.getText().toString().length()<3 ) { //电话无效不能添加Toast.makeText(Add_people.this, "请输入有效电话", 1).show();}break;case R.id.button2_cancel: //------------------取消此联系人的添加回到列表界面Toast.makeText(Add_people.this, "取消", 1).show();Intent intent = new Intent(Add_people.this,Address_Book.class);startActivity(intent);break;default: break;}}}//================================创建数据库==========================================public void CreateDatabaseHelper() {//创建一个DatabaseHelper对象DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db");//只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库SQLiteDatabase db = dbHelper.getReadableDatabase();}//===========================插入数据并返回全部数据list================================public ArrayList Insert() {//---------------插入新数据-----------------//生成ContentValues对象ContentValues values = new ContentValues();//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致values.put("name",editName.getText().toString());values.put("phone",editPhone.getText().toString());values.put("qq",editQQ.getText().toString());values.put("mail",editEmail.getText().toString());values.put("address",editAddress.getText().toString());DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db",2);SQLiteDatabase db = dbHelper.getWritableDatabase();//调用insert方法,就可以将数据插入到数据库当中db.insert("user", null, values);//------将更新后的全部数据返回---------//定义一个键值对数组将数据返回到第一个列表Activity中更新进行显示ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();DatabaseHelper dbHelper1 = new DatabaseHelper(Add_people.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();Cursor cursor = db1.query("user", new String[]{"name","phone","qq","mail","address"}, null, null, null, null, null);while(cursor.moveToNext()){HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", cursor.getString(cursor.getColumnIndex("name")));map.put("phone", cursor.getString(cursor.getColumnIndex("phone")));map.put("qq", cursor.getString(cursor.getColumnIndex("qq")));map.put("mail", cursor.getString(cursor.getColumnIndex("mail")));map.put("address", cursor.getString(cursor.getColumnIndex("address")));}return list; //返回全部数据list用于列表显示}//===========================查询所有数据=================================== public void Query(){DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db");SQLiteDatabase db = dbHelper.getReadableDatabase();Cursor cursor = db.query("user", new String[]{"name","phone","qq","mail","address"},"name=?", new String[]{editName.getText().toString()}, null, null, null);while(cursor.moveToNext()){String name1 = cursor.getString(cursor.getColumnIndex("name"));String name2 = cursor.getString(cursor.getColumnIndex("phone"));String name3 = cursor.getString(cursor.getColumnIndex("qq"));String name4 = cursor.getString(cursor.getColumnIndex("mail"));String name5 = cursor.getString(cursor.getColumnIndex("address"));System.out.println("query--->" + name1);System.out.println("query--->" + name2);System.out.println("query--->" + name3);System.out.println("query--->" + name4);System.out.println("query--->" + name5);System.out.println("======================================================");}}//===========================更新(修改)数据===================================public ArrayList modfiy(){//生成ContentValues对象ContentValues values = new ContentValues();//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致values.put("name",editName.getText().toString());values.put("phone",editPhone.getText().toString());values.put("qq",editQQ.getText().toString());values.put("mail",editEmail.getText().toString());values.put("address",editAddress.getText().toString());DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db",2);SQLiteDatabase db = dbHelper.getWritableDatabase();System.out.println("************修改联系人之前: " + Address_Book.LIST.get(Address_Book.CLICK_ID).toString());db.update("user", values, "name = ?", new String[]{Address_Book.LIST.get(Address_Book.CLICK_ID).get("name").toString()});//------将更新后的全部数据返回---------//定义一个键值对数组将数据返回到第一个列表Activity中更新进行显示ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();DatabaseHelper dbHelper1 = new DatabaseHelper(Add_people.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();Cursor cursor = db1.query("user", new String[]{"name","phone","qq","mail","address"}, null, null, null, null, null);while(cursor.moveToNext()){HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", cursor.getString(cursor.getColumnIndex("name")));map.put("phone", cursor.getString(cursor.getColumnIndex("phone")));map.put("qq", cursor.getString(cursor.getColumnIndex("qq")));map.put("mail", cursor.getString(cursor.getColumnIndex("mail")));map.put("address", cursor.getString(cursor.getColumnIndex("address")));}return list; //返回全部数据list用于列表显示}}================== Address_Book=========================package net.yxarm;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import liu.sqlite3.db.DatabaseHelper;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.app.AlertDialog.Builder;import android.content.ContentResolver;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.graphics.Color;import .Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.ContextMenu.ContextMenuInfo;import android.view.MenuItem.OnMenuItemClickListener;import android.view.View.OnFocusChangeListener;import android.view.View.OnLongClickListener;import android.view.View.OnTouchListener;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;public class Address_Book extends Activity {private AutoCompleteTextView autotext = null ; //快速查找时对话框中的控件autoTextViewprivate static List<String> listCheck = new ArrayList<String>(); //将所有人的名字保存这数组中实现autoTextViewprivate static final int REQUESCODE1 = 1; //Activity之间传递数据用的startActivityForResult(intent, REQUESCODE);public static int CLICK_ID = 600 ; //保存选中需要删除的id号,默认设置为600表示没选中联系人private ListView listview = null; //列表显示所有联系人数据private SimpleAdapter simpleadapter = null; //适配器public static ArrayList<HashMap<String, Object>> LIST = new ArrayList<HashMap<String,Object>>(); //静态变量,别的Activity使用要用类名引用//==============重写Activity中创建Activity的方法========================================@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.first);Toast.makeText(Address_Book.this, "欢迎使用^@^", 1).show();CLICK_ID = 600 ; //返回这里是都将CLICK_ID初始化为无效值(所以没有点击联系人是不会执行删除、修改动作)//接收mainActivity通过intent传过来的数据,然后判断是否显示快速查找对话框Intent intent1 = getIntent();int n = intent1.getIntExtra("Search_flag", 0);System.out.println("MainActivity传进来的(Search_flag)值:" + n);if(n == 1) {dialogShow(); //显示对话框快速查找}//先查询所有联系人数据并显示出来LIST = Query(); //查询所有联系人并返回到listint size = LIST.size();//---------------------打印输出测试----------------------------System.out.println("---------------->>>>> " + size);for(int i=0;i<size;i++) {System.out.println( Address_Book.LIST.get(i).toString());}listview=(ListView) findViewById(R.id.listview);//注册快捷菜单(长按textView大于2秒就可以弹出快捷菜单)registerForContextMenu(listview);//取消注册//unregisterForContextMenu(textView);simpleadapter = new SimpleAdapter(this, LIST, yout.listviewitem,new String[]{"name","phone"} , new int[]{1,R.id.phone1});listview.setAdapter(simpleadapter);//(点击事件)联系人列表选中单项监听事件,将选中的位置传给静态变量CLICK_ID = position,并Toast提示语listview.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {CLICK_ID = position; //将选中列表的那个的位置传给静态变量CLICK_ID//Toast.makeText(Address_Book.this, "想"+LIST.get(CLICK_ID).get("name").toString()+"啦^@^", 1).show();System.out.println("--Click选中--CLICK_ID-:" + CLICK_ID );//点击后显示背景色绿色if (((ListView)parent).getTag() != null) {((View)((ListView)parent).getTag()).setBackgroundDrawable(null);}((ListView)parent).setTag(view);view.setBackgroundColor(Color.GREEN);}});//(选中事件)联系人列表选中单项监听事件,将选中的位置传给静态变量CLICK_ID = position,并Toast提示语listview.setOnItemSelectedListener(new OnItemSelectedListener() {public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {CLICK_ID = position; //将选中列表的那个的位置传给静态变量CLICK_ID// Toast.makeText(Address_Book.this, "想"+LIST.get(CLICK_ID).get("name").toString()+"啦^@^", 1).show();System.out.println("--Selected选中--CLICK_ID-:" + CLICK_ID );//点击后显示背景色红色if (((ListView)parent).getTag() != null) {((View)((ListView)parent).getTag()).setBackgroundDrawable(null);}((ListView)parent).setTag(view);view.setBackgroundColor(Color.GREEN);}public void onNothingSelected(AdapterView<?> parent) {}});}//==============重写Activity中创建菜单的方法=============================================@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//添加菜单方法2//第一个参数:组//第一个参数:id//第一个参数:排序//第一个参数:菜单名字menu.add(0,0, 0, "从手机导入联系人").setIcon(R.drawable.go);menu.add(0,1, 0, "添加联系人").setIcon(R.drawable.go).setShortcut('1', 'b'); //'b'是快捷键menu.add(0,2, 0, "快速查询").setIcon(R.drawable.jiji);menu.add(0,3, 0, "删除联系人").setIcon(R.drawable.jiji);menu.add(0,4, 0, "拨号").setIcon(oren);menu.add(0,5, 0, "发送短信").setIcon(R.drawable.jiji);menu.add(0,6, 0, "修改联系人").setIcon(R.drawable.jiji);/*//添加菜单方法3//inflater过滤器,后面的menu是public boolean onCreateOptionsMenu(Menu menu)传进来的//前面的menu是引用自己新建的menu.xml文件的ID,里面设置好了所有菜单MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu, menu);*/return true;}//==============重写Activity中的主菜单监听事件的方法,根据按下的菜单做相应处理============@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if(item.getItemId() == 0) { //从手机中导入联系人Toast.makeText(Address_Book.this, "正在导入,请稍后···", 3).show();getContactInformation(); //将手机上的联系人导入列表Toast.makeText(Address_Book.this, "导入完成", 3).show();Intent intent = new Intent(Address_Book.this,Address_Book.class);startActivity(intent);} else if(item.getItemId() == 1) { //添加联系人,转到另一个ActivityIntent intent = new Intent();intent.setClass(Address_Book.this,Add_people.class);intent.putExtra("nothing1", 1);startActivityForResult(intent, REQUESCODE1);}else if(item.getItemId() == 2) { //快速查找,弹出对话框dialogShow(); //显示对话框快速查找}else if(item.getItemId() == 3) { //删除联系人if(CLICK_ID != 600) {dialogShow_dele();} else {Toast.makeText(Address_Book.this, "请选择需要删除的联系人", 1).show();}}else if(item.getItemId() == 4) { //拨号if(CLICK_ID != 600) {Intent intent = new Intent();Uri uri ;String data ;data = "tel:"+LIST.get(CLICK_ID).get("phone").toString();uri = Uri.parse(data);intent.setAction(Intent.ACTION_CALL);intent.setData(uri);startActivity(intent);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}}else if(item.getItemId() == 5) { //发送短信if(CLICK_ID != 600) {Intent intent = new Intent();intent.putExtra("phone_num", LIST.get(CLICK_ID).get("phone").toString()); //将选中的号码传过去intent.putExtra("name", LIST.get(CLICK_ID).get("name").toString()); //将选中的名字传过去intent.setClass(Address_Book.this, SendMessage.class);startActivityForResult(intent, 1);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}}else if(item.getItemId() == 6) { //修改联系人if(CLICK_ID != 600) {System.out.println("************点击了修改联系人: " + LIST.get(CLICK_ID).get("name").toString());Intent intent = new Intent(); //跳转到编辑Activity,并发送编辑联系人标志("editpeople", 1)intent.setClass(Address_Book.this,Add_people.class);intent.putExtra("editpeople", 1); //根据这个参数(键值对)选择是否修改还是重新创建联系人startActivityForResult(intent, REQUESCODE1);} else {Toast.makeText(Address_Book.this, "请选择需要修改的联系人", 1).show();}}return true;}//=================创建一个对话框(快速查找时会弹出)=================================private void dialogShow() {//创建一个对话框AlertDialog.Builder builder = new Builder(this);//设置图标builder.setIcon(R.drawable.jiji);//设置标题builder.setTitle("快速查找联系人").setIcon(oren);//设置文本信息builder.setMessage("请输入'空格+第一个字':").setIcon(R.drawable.jiji);//设置编辑框autotext = new AutoCompleteTextView(this);//创建一个ArrayAdapter对象ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,yout.autocoplist_item,listCheck);//将ArrayAdapter设置给AutoCompleteTextView对象autotext.setAdapter(arrayAdapter);builder.setView(autotext);//设置两个按钮,并设置按钮监听事件builder.setPositiveButton("确定", new MyOnClickListener());builder.setNegativeButton("取消", new MyOnClickListener());//创建显示对话框(必须)builder.create().show();}//=======对话框的"确定"、"取消"按钮监听事件处理(查找时)============class MyOnClickListener implements android.content.DialogInterface.OnClickListener {public void onClick(DialogInterface dialog, int which) {switch(which) {case Dialog.BUTTON_POSITIVE ://将查到的这个联系人找到并显示在可视界面String strname = autotext.getText().toString();listview.setSelection(listCheck.indexOf(strname));break;case Dialog.BUTTON_NEGATIVE :System.out.println("按下取消");break;}}}//=================删除时弹出一个对话框================================private void dialogShow_dele() {//创建一个对话框AlertDialog.Builder builder = new Builder(this);//设置图标builder.setIcon(R.drawable.jiji);//设置标题builder.setTitle(" 对话框").setIcon(oren);//设置文本信息builder.setMessage(" 确定删除吗?").setIcon(R.drawable.jiji);//设置两个按钮,并设置按钮监听事件builder.setPositiveButton("确定", new My1OnClickListener());builder.setNegativeButton("取消", new My1OnClickListener());//创建显示对话框(必须)builder.create().show();}//===========对话框的"确定"、"取消"按钮监听事件处理(删除时)===============class My1OnClickListener implements android.content.DialogInterface.OnClickListener {public void onClick(DialogInterface dialog, int which) {switch(which) {case Dialog.BUTTON_POSITIVE :deleteItem(); //调用上面的删除数据库中对应数据的方法System.out.println("==============删除: " + LIST.get(CLICK_ID).get("name").toString());System.out.println("-------删除联系人--------------"+CLICK_ID);break;case Dialog.BUTTON_NEGATIVE :System.out.println("按下取消");break;}}}//===========================查询所有数据==============================================public ArrayList Query() {//------将更新后的全部数据返回---------//定义一个键值对数组将数据返回到第一个列表Activity中更新进行显示ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();DatabaseHelper dbHelper1 = new DatabaseHelper(Address_Book.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();Cursor cursor = db1.query("user", new String[]{"name","phone","qq","mail","address"}, null, null, null, null, null);while(cursor.moveToNext()){HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", cursor.getString(cursor.getColumnIndex("name")));map.put("phone", cursor.getString(cursor.getColumnIndex("phone")));map.put("qq", cursor.getString(cursor.getColumnIndex("qq")));map.put("mail", cursor.getString(cursor.getColumnIndex("mail")));map.put("address", cursor.getString(cursor.getColumnIndex("address")));listCheck.add(" " + cursor.getString(cursor.getColumnIndex("name")));//为了将所有人的名字保存数组中实现autoTextViewlist.add(map);}return list; //返回全部数据list用于列表显示}//===========================删除其中的一条数据===================================================public void deleteItem() {DatabaseHelper dbHelper1 = new DatabaseHelper(Address_Book.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();db1.delete("user", "name=?", new String[]{LIST.get(CLICK_ID).get("name").toString()});System.out.println("||||||||||||||||||||删除"+LIST.get(CLICK_ID).get("name").toString()+" 成功");//删除联系人以后刷新联系人界面,跳转到当前界面,重新显示更新后的联系人列表Intent intent = new Intent();intent.setClass(Address_Book.this, Address_Book.class);startActivity(intent);}//================重写方法,添加快捷菜单,长按textView大于2秒就可以弹出快捷菜单=============================//在Activity中注册快捷菜单:registerForContextMenu(textView);@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {Toast.makeText(Address_Book.this, "你想对"+LIST.get(CLICK_ID).get("name").toString()+"干嘛^@^", 1).show();menu.add("拨号").getIcon();menu.add("发送短信息").setIcon(oren);menu.add("修改联系人").setIcon(R.drawable.jiji);menu.add("删除联系人").setIcon(oren);}//===================================快捷菜单监听事件===================================================@Overridepublic boolean onContextItemSelected(MenuItem item) {if(item.toString().equals("删除联系人")) {if(CLICK_ID != 600) {dialogShow_dele();} else {Toast.makeText(Address_Book.this, "请选择需要删除的联系人", 1).show();}} else if(item.toString().equals("修改联系人")) {if(CLICK_ID != 600) {System.out.println("************点击了修改联系人: " + LIST.get(CLICK_ID).get("name").toString());Intent intent = new Intent(); //跳转到编辑Activity,并发送编辑联系人标志("editpeople", 1)intent.setClass(Address_Book.this,Add_people.class);intent.putExtra("editpeople", 1); //根据这个参数(键值对)选择是否修改还是重新创建联系人startActivityForResult(intent, REQUESCODE1);} else {Toast.makeText(Address_Book.this, "请选择需要修改的联系人", 1).show();}}else if(item.toString().equals("拨号")) {if(CLICK_ID != 600) {Intent intent = new Intent();Uri uri ;String data ;data = "tel:"+LIST.get(CLICK_ID).get("phone").toString();uri = Uri.parse(data);intent.setAction(Intent.ACTION_CALL);intent.setData(uri);startActivity(intent);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}} else if(item.toString().equals("发送短信息")) {if(CLICK_ID != 600) {Intent intent = new Intent();intent.putExtra("phone_num", LIST.get(CLICK_ID).get("phone").toString()); //将选中的号码传过去intent.putExtra("name", LIST.get(CLICK_ID).get("name").toString()); //将选中的名字传过去intent.setClass(Address_Book.this, SendMessage.class);startActivityForResult(intent, 1);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}}return super.onContextItemSelected(item);}//====================下面的3个方法,读取手机上电话联系人Contact的信息并导入列表===============================//============读取手机上电话联系人Contact的信息(为了将所有联系人导入列表)============================public void getContactInformation() {//得到ContentResolver对象ContentResolver cr = getContentResolver();//取得电话本中开始一项的光标Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);while (cursor.moveToNext()){// 取得联系人名字int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);String name = cursor.getString(nameFieldColumnIndex);// string += (name);// 取得联系人IDString contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));Cursor phone = cr.query(monDataKinds.Phone.CONTENT_URI, null, monDataKinds.Phone.CONTACT_ID + " = "+ contactId, null, null);// 取得电话号码(可能存在多个号码)while (phone.moveToNext()){String strPhoneNumber = phone.getString(phone.getColumnIndex(monDataKinds.Phone.NUMBER));// string += (":" + strPhoneNumber);/* System.out.println("$$$获得联系人名字:" + name);System.out.println("$$$获得联系人电话:" + strPhoneNumber);System.out.println("=========================================");*/String str = Query2(name); //先判断是否存在此人if(str == null) {insret_Contant(name,strPhoneNumber);System.out.println("============可以导入--------------");} else {System.out.println("==========已经存在此人-------------");}}// string += "\n";phone.close();}cursor.close();}。
通讯录管理系统代码(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);}}}。
通讯录课程设计
通讯录课程设计Revised on November 25, 2020课程设计报告课程名称 C语言程序设计课题名称简单的通讯录程序设计专业电气工程及其自动化班级 1281班学号姓名姚景昌指导教师王颖2013年 6 月 20 日湖南工程学院课程设计任务书课程名称《C语言程序设计》课题通讯录课程设计专业班级电气1281学生姓名姚景昌学号指导老师王颖审批王颖目录一、绪论1、《C语言数据结构课程设计》是我国高校计算机相关专业在近几年来所面临的一个新课题。
自问世以来,以其功能丰富多彩、应用面广、表达能力强、使用灵活方便和可移植性好多等特点,一直是最受欢迎、最活跃的高级语言之一。
时间就是金钱,但是就是在一些琐碎的事上面浪费了大量的时间,例如查询资料之类.如果我们把浪费的时间用于其他方面,势必会有更大的收益.应此需求,为使广大教师掌握更多的时间,相应的开发出此软件为学生成绩管理软件系统.而编写详细设计说明书是软件开发过程必不可少的部分,其目的是为了使开发人员在完成概要设计说明书的基础上完成概要设计规定的各项模块的具体实现的设计工作。
本软件属于绿色软件, 适合任何层次的用户, 因此本说明书的预期读者范围相当广。
笔考提出用数据结构实验来深化课程设计的观点,并对此进行一系列的论述。
强调首次设计的重要性,就如何进行选题,调动学生产生浓厚的兴趣,发挥团队精神与运用综合知识的能力等方面采取具体的措施,以其达到课程设计的目标,为今后从事项目开发积累经验。
本次设计,设计一个“通讯录管理系统”,使其具有数据插入、修改、删除、显示和查询等功能。
[关键词]:C语言;数据结构;通讯录;经验;兴趣2、引言:数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。
该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。
通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在校和离校后的学习和工作,也有着重要的意义。
通讯录文本程序
#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#define N 1000void xingjian();void chazhao();void shanchu();void xiugai();void charu();void zhuijia();void tongji();void paixu();void mingci();void xianshi();struct score{int xh,a;char xm[100],dh[100],yx[100],y[100],xx[100],dd[100],x1[100],x2[100],zy[100],w[100]; };void main(){int choice=1;while(choice>0){printf("\n=============================\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("9..................显示任意文件类容\n");printf("0..................结束\n");scanf("%d",&choice);switch(choice){case 1:{xingjian(); break;}case 2:{chazhao();break;}case 3:{shanchu();break;}case 4:{xiugai();break;}case 5:{charu();;break;}case 6:{zhuijia();break;}case 7:{tongji();break;}case 8:{paixu();break;}case 9:{xianshi();break;}}}}void xingjian(){struct score a;char name[100];int i=0;FILE *fp;printf("请输入新文件名:");scanf("%s",name);fflush(stdin);fp=fopen(name,"w");while(1){printf("请输入姓名:");scanf("%s",a.xm);fflush(stdin);printf("请输入电话:");scanf("%s",a.dh);fflush(stdin);printf("请输入邮箱:");scanf("%s",a.yx);fflush(stdin);printf("请输入学校代码:");scanf("%s",a.y);fflush(stdin);printf("请输入学校名称:");scanf("%s",a.xx);fflush(stdin);printf("请输入城市代码:");scanf("%d",&a.a);fflush(stdin);printf("请输入地址:");scanf("%s",a.dd);fflush(stdin);printf("请输入邮编:");scanf("%s",a.x1);fflush(stdin);printf("请输入专业代码:");scanf("%s",a.x2);fflush(stdin);printf("请输入专业:");scanf("%s",a.zy);fflush(stdin);printf("请输入类型:");scanf("%s",a.w);fflush(stdin);a.xh=i;printf("输入姓名为\"-1\"结束输入");if(strcmp(a.xm,"-1")==0){break;}else{fprintf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",a.xh,a.xm,a.dh,a.yx,a.y,a.xx,a.a,a.dd,a.x1,a.x2, a.zy,a.w);i++;}}printf("新的文件已经写入%s中",name);fclose(fp);}void chazhao(){struct score a;int i=0;char x[30];FILE *fp;fp=fopen("通信录.txt","r");printf("请输入你要查找人的名字:");scanf("%s",x);while(!feof(fp)){fscanf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",&a.xh,a.xm,a.dh,a.yx,a.y,a.xx,&a.a,a.dd,a .x1,a.x2,a.zy,a.w);if(strcmp(x,a.xm)==0){printf("%d %s %s %s %s %s %d %s %s %s %s %s",a.xh,a.xm,a.dh,a.yx,a.y,a.xx,a.a,a.dd,a.x1,a.x 2,a.zy,a.w);i=1;break;}}if(i!=1)printf("没有找到%s",x);fclose(fp);}void shanchu(){struct score a;int i=0;char x[30];FILE *fp,*fp2;fp=fopen("通信录.txt","r");fp2=fopen("shanchu.txt","w");printf("请输入你要删除人的名字:");scanf("%s",x);while(!feof(fp)){fscanf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",&a.xh,a.xm,a.dh,a.yx,a.y,a.xx,&a.a,a.dd,a .x1,a.x2,a.zy,a.w);if(strcmp(x,a.xm)==0){continue;}elsefprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",a.xh,a.xm,a.dh,a.yx,a.y,a.xx,a.a,a.dd, a.x1,a.x2,a.zy,a.w);}printf("新的文件已经写入shanchu.txt中,请查看!");fclose(fp);fclose(fp2);}void xiugai(){struct score a,b;int i=0;char x[30];FILE *fp,*fp2;fp=fopen("通信录.txt","r");fp2=fopen("xiugai.txt","w");printf("请输入你要修改人的名字:"); scanf("%s",x);printf("请输入姓名:");scanf("%s",b.xm);fflush(stdin);printf("请输入电话:");scanf("%s",b.dh);fflush(stdin);printf("请输入邮箱:");scanf("%s",b.yx);fflush(stdin);printf("请输入学校代码:");scanf("%s",b.y);fflush(stdin);printf("请输入学校名称:");scanf("%s",b.xx);fflush(stdin);printf("请输入城市代码:");scanf("%d",&b.a);fflush(stdin);printf("请输入地址:");scanf("%s",b.dd);fflush(stdin);printf("请输入邮编:");scanf("%s",b.x1);fflush(stdin);printf("请输入专业代码:");scanf("%s",b.x2);fflush(stdin);printf("请输入专业:");scanf("%s",b.zy);fflush(stdin);printf("请输入类型:");scanf("%s",b.w);fflush(stdin);while(!feof(fp)){fscanf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",&a.xh,a.xm,a.dh,a.yx,a.y,a.xx,&a.a,a.dd,a .x1,a.x2,a.zy,a.w);if(strcmp(x,a.xm)==0){b.xh=a.xh;fprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",b.xh,b.xm,b.dh,b.yx,b.y,b.xx,b.a,b.dd, b.x1,b.x2,b.zy,b.w);}elsefprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",a.xh,a.xm,a.dh,a.yx,a.y,a.xx,a.a,a.dd, a.x1,a.x2,a.zy,a.w);}printf("新的文件已经写入xiugai.txt中,请查看!");fclose(fp);fclose(fp2);}void charu(){struct score a,b;int i=0;char x[30];FILE *fp,*fp2;fp=fopen("通信录.txt","r");fp2=fopen("charu.txt","w");printf("请输入你要插入人的名字:");scanf("%s",x);printf("请输入姓名:");scanf("%s",b.xm);fflush(stdin);printf("请输入电话:");scanf("%s",b.dh);fflush(stdin);printf("请输入邮箱:");scanf("%s",b.yx);fflush(stdin);printf("请输入学校代码:");scanf("%s",b.y);fflush(stdin);printf("请输入学校名称:");scanf("%s",b.xx);fflush(stdin);printf("请输入城市代码:");scanf("%d",&b.a);fflush(stdin);printf("请输入地址:");scanf("%s",b.dd);fflush(stdin);printf("请输入邮编:");scanf("%s",b.x1);fflush(stdin);printf("请输入专业代码:");scanf("%s",b.x2);fflush(stdin);printf("请输入专业:");scanf("%s",b.zy);fflush(stdin);printf("请输入类型:");scanf("%s",b.w);fflush(stdin);while(!feof(fp)){fscanf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",&a.xh,a.xm,a.dh,a.yx,a.y,a.xx,&a.a,a.dd,a .x1,a.x2,a.zy,a.w);if(strcmp(x,a.xm)==0){b.xh=a.xh++;fprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",b.xh,b.xm,b.dh,b.yx,b.y,b.xx,b.a,b.dd, b.x1,b.x2,b.zy,b.w);i=1;fprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",a.xh,a.xm,a.dh,a.yx,a.y,a.xx,a.a,a.dd, a.x1,a.x2,a.zy,a.w);}else{if(i==1){a.xh++;}fprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",a.xh,a.xm,a.dh,a.yx,a.y,a.xx,a.a,a.dd, a.x1,a.x2,a.zy,a.w);}}printf("新的文件已经写入charu.txt中,请查看!");fclose(fp);fclose(fp2);}void zhuijia(){struct score a,b;int i=0;char x[30];FILE *fp,*fp2;fp=fopen("通信录.txt","r");fp2=fopen("zhuijia.txt","w");printf("请输入追加的姓名:");scanf("%s",b.xm);fflush(stdin);printf("请输入追加的电话:");scanf("%s",b.dh);fflush(stdin);printf("请输入追加的邮箱:");scanf("%s",b.yx);fflush(stdin);printf("请输入追加的学校代码:");scanf("%s",b.y);fflush(stdin);printf("请输入追加的学校名称:");scanf("%s",b.xx);fflush(stdin);printf("请输入追加的城市代码:");scanf("%d",&b.a);fflush(stdin);printf("请输入追加的地址:");scanf("%s",b.dd);fflush(stdin);printf("请输入追加的邮编:");scanf("%s",b.x1);fflush(stdin);printf("请输入追加的专业代码:");scanf("%s",b.x2);fflush(stdin);printf("请输入追加的专业:");scanf("%s",b.zy);fflush(stdin);printf("请输入追加的类型:");scanf("%s",b.w);fflush(stdin);while(!feof(fp)){fscanf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",&a.xh,a.xm,a.dh,a.yx,a.y,a.xx,&a.a,a.dd,a .x1,a.x2,a.zy,a.w);fprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",a.xh,a.xm,a.dh,a.yx,a.y,a.xx,a.a,a.dd, a.x1,a.x2,a.zy,a.w);}b.xh=a.xh+1;fprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",b.xh,b.xm,b.dh,b.yx,b.y,b.xx,b.a,b.dd, b.x1,b.x2,b.zy,b.w);printf("新的文件已经写入zhuijia.txt中,请查看!");fclose(fp);fclose(fp2);}void tongji(){struct score a;int tj[5]={0,0,0,0,0};FILE *fp;fp=fopen("通信录.txt","r");while(!feof(fp)){fscanf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",&a.xh,a.xm,a.dh,a.yx,a.y,a.xx,&a.a,a.dd,a.x1,a .x2,a.zy,a.w);if(a.a>=1&&a.a<4)tj[0]++;elseif(a.a>=4&&a.a<7)tj[1]++;elseif(a.a>=7&&a.a<10)tj[2]++;elseif(a.a>=10&&a.a<13)tj[3]++;elsetj[4]++;}printf("1=<城市代码<4:%d\n",tj[0]);printf("4=<城市代码<7:%d\n",tj[1]);printf("7=<城市代码<10:%d\n",tj[2]);printf("10=<城市代码<13:%d\n",tj[3]);printf("13=<城市代码:%d\n",tj[4]);fclose(fp);}void paixu(){struct score a[1000],b;FILE *fp,*fp2;int i=0,j=0,n=0;fp=fopen("通信录.txt","r");fp2=fopen("paixu.txt","w");while(!feof(fp)){fscanf(fp,"%d %s %s %s %s %s %d %s %s %s %s %s",&a[n].xh,a[n].xm,a[n].dh,a[n].yx,a[n].y,a[n].xx ,&a[n].a,a[n].dd,a[n].x1,a[n].x2,a[n].zy,a[n].w);n++;}for(i=0;i<n-1;i++)for(j=0;j<n-1;j++){if(a[j].a>a[j+1].a){b=a[j];a[j]=a[j+1];a[j+1]=b;}}for(i=0;i<n;i++){fprintf(fp2,"%d %s %s %s %s %s %d %s %s %s %s %s\n",a[i].xh,a[i].xm,a[i].dh,a[i].yx,a[i].y,a[i] .xx,a[i].a,a[i].dd,a[i].x1,a[i].x2,a[i].zy,a[i].w);}printf("新的文件已经写入paixu.txt中,请查看!");fclose(fp);fclose(fp2);}void xianshi(){char c,filename[30];FILE *fp;printf("请输入你想要打开得文件名:");scanf("%s",filename);fflush(stdin);fp=fopen(filename,"r");if(fp==NULL){printf("error");return;}while(!feof(fp)){c=fgetc(fp);fputc(c,stdout);}fclose(fp);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从文件加载联系人信息功能应该能够实现将联系人信息文件 以写入的顺序读入内存,并可以增加、删除等操作。
➢ 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章
通讯录
开发背景 需求及功能分析 系统功能的实现 系统运行 开发过程常见问题及解决