第一篇:通讯录管理系统 (c 和 链表)
通讯录管理系统(c 和 链表)
通讯录(add_book)中的联系人包含以下信息项:姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)。
Name Mobile phones Office phone Family telephone E-mail In cities Work units0 Address Group classification(relative, colleagues, friends, classmates, other).系统的主要功能包括:
1.输入联系人的信息,要求:至少输入10个联系人的数据,且注意数据的多样性。
2.按姓名对联系人信息进行排序,并将排序后信息存放到一个文本文件中。
3.添加联系人的信息,在已经存在的通讯录文件中添加若干个联系人。要求:添加后仍按联系人的姓名排序,并保存至原文件。
4.删除联系人的信息,输入一个姓名,若通讯录中有该联系人的信息,则删除该联系人,否则输出提示信息,并提示用户选择是否继续进行删除操作。
5.修改联系人的信息,输入一个姓名,根据具体需要修改该联系人的某一项信息,将修改后的信息重新保存到通讯录文件中,并提示用户选择是否继续进行修改操作。
6.按不同条件对通讯录进行查询操作,输出满足条件的联系人的信息。
(1)按姓名查询,包括精确查询(输入全名),模糊查询(输入姓);(2)按手机号码查询,输入全部号码或号码位段(如输入130、133、139等);
(3)按群组分类查询,输入分类名称,输出该群组的全部联系人信息。
7.输出联系人的信息Contact information,按一定格式输出信息,保证信息排列整齐美观。ContactPerson 程序源代码如下:
#include “stdio.h” #include “stdlib.h” #include “string.h” #include “conio.h”
#define LEN sizeof(struct LinkPerson)#define FORMAT printf(“n姓名 手机
办公电话
家庭电话
电子邮箱
所在省市
工作单位
家庭住址
群组n”);void print(struct LinkPerson *head);int nn=0;//统计联系人的个数 char selete[10];
//姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)typedef struct LinkPerson { char name[20], mobile[15], office_ph[15], home_ph[15], E_mail[40], in_cities[20], work_units[40],address[40],group[20];struct LinkPerson *next;}LP;LP *creat()//创建 { LP *head,*p1,*p2;char ch[2]={“1”};printf(“n请输入通讯录联系人信息:nn”);FORMAT;p1=p2=(struct LinkPerson *)malloc(LEN);
scanf(“%s%s%s%s%s%s%s%s%s”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group);while(strcmp(p1->name,“0”)!=0){
nn++;
if(nn==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct LinkPerson *)malloc(LEN);
scanf(“%s%s%s%s%s%s%s%s%s”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group);} p2->next=NULL;free(p1);return head;} void save(LP *head)//函数功能:保存文件 { FILE *out;LP *p1=head;putchar(10);if((out=fopen(“people.txt”, “w+”))==NULL)
{ printf(“Can not open this file!n”);exit(0);} fclose(out);if((out=fopen(“people.txt”, “r+”))==NULL)
{ printf(“Can not open this file!n”);exit(0);} for(int i=0;i fprintf(out,“%st%st%st%st%st%st%st%st%sn”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); p1=p1->next;} fclose(out); putchar(10);} LP *read(void)//函数功能:读取文件 { FILE *fp;LP *head=NULL, *p1=NULL, *p2=NULL;int m=0; if((fp=fopen(“people.txt”, “r”))==NULL) { printf(“Can not open this file!n”);exit(0);} while(!feof(fp)){ p1=(LP *)malloc(LEN); fscanf(fp,“%s%s%s%s%s%s%s%s%sn”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); m+=1; if(m == 1)head=p1; else p2->next=p1; p2=p1; } p2->next=NULL;fclose(fp);nn=m;return(head);} LP *array(LP *head)//函数功能:排序 { LP *p0,*p1,*p2,*h;h=p1=p2=head;if(nn<=1)return(h);for(int i=0;i p1=p2=h; for(int j=0;j { p2=p1->next; if((p1==h)&& strcmp(p1->name,p2->name)>0) { h=p2; p1->next=p2->next; p2->next=p1; p0=p2; } else if(strcmp(p1->name,p2->name)>0) { p0->next=p2; p1->next=p2->next; p2->next=p1; p0=p2; } else { p0=p1;p1=p2;p2=p2->next;} } } return(h);} void print()//函数功能 :输出信息 { LP *p1,*head;p1=head=read(); printf(“共有联系人 %d 名nn”,nn);FORMAT;if(head!=NULL) do { printf(“%s %s %s %s %s %s %s %s %sn”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); p1=p1->next; }while(p1!=NULL);} LP *add(void)//函数功能:增加联系人信息 { LP *head,*p1,*p2;head=read();p2=head;while(p2->next!= NULL)//找到原先数据的终点,作为新增数据的起点 { p2=p2->next;} p1=(LP *)malloc(LEN);printf(“请输入增加联系人的信息:n”);FORMAT; scanf(“%s%s%s%s%s%s%s%s%s”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group);while(strcmp(p1->name,“0”)!=0){ nn++; if(nn==1)head=p1; else p2->next=p1; p2=p1; p1=(struct LinkPerson *)malloc(LEN); scanf(“%s%s%s%s%s%s%s%s%s”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); // } p2->next=NULL;free(p1); head=array(head);save(head); return(head);} LP *del()//函数功能:删除信息 { start_del: char name[20];LP *head,*p1,*p2;p1=p2=head=read();printf(“请输入要删除的联系人姓名: ”);scanf(“%s”,name);while(strcmp(p1->name,name)!=0 &&(p1->next!=NULL)) { p2=p1;p1=p1->next;} //找出p1指向的节点 if(strcmp(p1->name,name)==0){ if(p1==head)head=p1->next; else p2->next=p1->next; printf(“del: %sn”,name); free(p1); nn--; printf(“还有联系人%d位n”,nn);} else printf(“没有你要删除的联系人!n”);save(head); printf(“n是否继续进行删除操作? 1.是 2.返回主菜单 3.退出 n请输入:”);scanf(“%s”,selete);if(strcmp(selete,“1”)==0)goto start_del;else if(strcmp(selete,“2”)==0)return 0;else if(strcmp(selete,“3”)==0)exit(0);else return(head); } LP *modify()//函数功能:修改联系人信息 { start_mod: char name[20];int select;LP *head,*p1,*p2;p1=p2=head=read();printf(“请输入要修改的联系人姓名: ”);scanf(“%s”,name);while(strcmp(p1->name,name)!=0 &&(p1->next!=NULL)) { p2=p1;p1=p1->next;} //找出p1指向的节点 if(strcmp(p1->name,name)==0){ printf(“将要修改的联系人的信息n”); FORMAT; printf(“%s %s %s %s %s %s %s %s %sn”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); printf(“请输入要修改的选项n”); printf(“ 1.姓名t 2.手机t3.办公电话t4.家庭电话 5.电子邮箱n 6.所在省市 7.工作单位 8.家庭住址t9.群组n请输入:”); scanf(“%d”,&select); printf(“请输入该项新的信息:”); if(select==1){ scanf(“%s”, p1->name);} if(select==2){ scanf(“%s”,p1->mobile);} if(select==3){ scanf(“%s”,p1->office_ph);} if(select==4){ scanf(“%s”,p1->home_ph);} if(select==5){ scanf(“%s”,p1->E_mail);} if(select==6){ scanf(“%s”,p1->in_cities);} if(select==7){ scanf(“%s”,p1->work_units);} if(select==8){ scanf(“%s”,p1->address);} if(select==9){ scanf(“%s”,p1->group);} save(head);} else { printf(“n没有该联系人,请重新输入!nn”);goto start_mod;} printf(“n是否继续进行修改操作? 1.是 2.返回主菜单 3.退出 n请输入:”);scanf(“%s”,selete);if(strcmp(selete,“1”)==0)goto start_mod;else if(strcmp(selete,“2”)==0)return 0;else if(strcmp(selete,“3”)==0)exit(0);else return(head);} find()//函数功能 :查找 { char select[10];char name[20],mobile[15],group[20];LP *p1,*p2,*head;start_f: p1=p2=head=read();printf(“按下列选项查询联系人信息n”);printf(“ 1.按姓名 2.按手机号码 3.按群组分类 n 请选择:”);scanf(“%s”,select);if(strcmp(select,“1”)==0){ printf(“请输入姓名:”); scanf(“%s”,name); while(strcmp(p1->name,name)!=0 &&(p1->next!=NULL)) { p2=p1;p1=p1->next;} //找出p1指向的节点 if(strcmp(p1->name,name)==0) { FORMAT; printf(“%s %s %s %s %s %s %s %s %sn”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); } else printf(“没有要查找的联系人信息!n”);} else if(strcmp(select,“2”)==0){ printf(“请输入手机号码:”); scanf(“%s”,mobile); while(strcmp(p1->mobile,mobile)!=0 &&(p1->next!=NULL)) { p2=p1;p1=p1->next;} //找出p1指向的节点 if(strcmp(p1->mobile,mobile)==0) { FORMAT; printf(“%s %s %s %s %s %s %s %s %sn”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); } else printf(“没有要查找的联系人信息!n”); } else if(strcmp(select,“3”)==0){ int n_n=0; printf(“请输入群组:”); scanf(“%s”,group); while(strcmp(p1->group,group)!=0 &&(p1->next!=NULL)) { p2=p1;p1=p1->next;} //找出p1指向的节点 if(strcmp(p1->group,group)==0) { FORMAT; printf(“%s %s %s %s %s %s %s %s %sn”,p1->name,p1->mobile,p1->office_ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group); } else printf(“没有要查找的联系人信息!n”);} else { printf(“n请输入正确的选择!n”);goto start_f;} printf(“n 1.继续查找 2.返回主菜单 3.退出 n请选择:”);scanf(“%s”,select);if(strcmp(select,“1”)==0)goto start_f;else if(strcmp(select,“2”)==0)return 0;else if(strcmp(select,“3”)==0)exit(0);else return 0;} void main(){ printf(“n 21ttt 欢迎使用通讯录管理系统 nn”);start: LP *head;printf(“n 1.新建联系人 2.添加联系人 3.删除 4.修改 5.查询 6.输出联系人的信息 7.退出 n请输入选择:”);scanf(“%s”,selete);if(strcmp(selete,“1”)==0){ head=creat();head=array(head);goto start;} else if(strcmp(selete,“2”)==0){ head=add();goto start;} else if(strcmp(selete,“3”)==0){ head=del();goto start;} else if(strcmp(selete,“4”)==0){ modify();goto start;} else if(strcmp(selete,“5”)==0){ find();goto start;} else if(strcmp(selete,“6”)==0){ print();goto start;} else if(strcmp(selete,“7”)==0)exit(0);else goto start;// } #include intfind_record(int flag);intdelete_record(int flag);voidpaixu_record(int flag);intsave_record(int flag);void main(){ for(;;){ switch(menu_select()) { case 1: printf(“ ***********************************************n”);printf(“ ************** 通讯录的建立 ***************n”);printf(“ ***********************************************n”);flag=create_record();break;case 2: printf(“ ***********************************************n”);printf(“ ************** 通讯录信息的添加 *****************n”);printf(“ ***********************************************n”);flag=add_record(flag);break;case 3: printf(“ ******************************n”);printf(“ ******* 通讯录信息查询 *******n”);printf(“ ******************************n”);find_record(flag); break;case 4: printf(“ ***********************************n”);printf(“ **********通讯信息的删除***********n”);printf(“ ***********************************n”);delete_record(flag);break;case 5: printf(“ ***********************************n”);printf(“ **********通讯录的存储(D:)*********n”);printf(“ ***********************************n”);save_record(flag);break;case 6: printf(“ ***********************************n”);printf(“ **********通讯者的排序*********n”);printf(“ ***********************************n”);paixu_record(flag);break;case 0: printf(“t 谢谢您的使用!n”);break; default : break;} } } intmenu_select(){ int i;printf(“ ******************** n”);printf(“ Welcome! n ”);printf(“ Form kuangminn”);printf(“ ******************** n”);printf(“ n”);printf(“ n”);printf(“ n”);printf(“ 通讯录管理系统 n”);printf(“ n”);printf(“ ======================n”);printf(“ 1.通讯录的建立n”);printf(“ 2.通讯者的添加n”);printf(“ 3.通讯录的查询n”);printf(“ 4.通讯者的删除n”);printf(“ 5.通讯录的存储n”);printf(“ 6.通讯者的排序n”);printf(“ 0.退出通讯录管理系统n”);printf(“ ======================n”);printf(“ 请选择操作0-5 nn”);for(;;){ scanf(“%d”,&i);if(i<0||i>6)printf(“t对不起,您的输入错误n”);else break;} return i;} intcreate_record(){inti,j;for(i=0;;) { printf(“ 学号(12)姓名(10)出生年月(10)家庭住址(30)邮编(10)电话(15)n”);printf(“-------------n”);scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);i++;printf(“ 想继续创建吗?(1.是/0.不):”);scanf(“%d”,&j);if(!j) return i;else printf(“恭喜你,创建成功!请继续创建!n”); } return i;} intadd_record(int flag){ int i=flag,j;for(i;;) { printf(“ 学号(12)姓名(10)出生年月(10)家庭住址(30)邮编(10)电话(15)n”);printf(“-------------n”); scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday,data[i].post, data[i].phone);i++;printf(“ 想继续添加吗?(1.是/0.不):”);scanf(“%d”,&j);if(!j)return i;else printf(“恭喜你,添加成功!请继续添加!n”); } return(i);} intfind_record(){ int i;char number[6];char named[10];intxz;printf(“--------------------n”);printf(“ 1.按学号查询n”);printf(“ 2.按姓名查询n”);printf(“--------------------n”);printf(“ 请选择 : n”); scanf(“%d”,&xz);if(xz==1){ printf(“ 请输入要查找的学号: ”);scanf(“%s”,number);for(i=0;i if(strcmp(data[i].num,number)==0) { printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;} } else if(xz=2){ printf(“请输入要查找的姓名: ”);scanf(“%s”,named);for(i=0;i { printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;else {printf(“对不起,没有你要找的人!n”);return 0;} } else {printf(“对不起,没有你要找的人!n”);return 0;} } } intdelete_record(int flag) { inti,j;intdeletemark=0;char number[20];printf(“ttt请输入要删除学号:n”);scanf(“%s”,number);for(i=0;i { if(strcmp(data[i].num, number)==0) { printf(“ttt以下是您要删除的用户纪录:n”);printf(“ ** 学号姓名出生年月家庭住址邮编电话**n”);printf(“------------------------------n”); printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”); printf(“ttt是否删除?(y/n)”);if(getch()=='y' || getch()=='Y') { for(j=i;j } else return; } continue; } if(deletemark==0) { printf(“ttt没有该用户的纪录”); return; } return; } voidpaixu_record(int flag){inti,j;struct record tmp; printf(“ 1.按姓名排序n”);printf(“ 2.按学号排序n”);scanf(“%d”,&i);if(i==1){for(i=1;i { if(strcmp(data[i].name, data [i-1].name)<0) { tmp= data[i]; j=i-1;do { data [j+1]= data [j];j--;}while((strcmp(tmp.name, data [j].name)<0&&j>=0));data [j+1]=tmp; } } printf(“ttt排序成功!”);} if(i==2){for(j=0;j {tmp=data[i];data[i]=data[i+1];data[i+1]=tmp;} } } intsave_record(int flag){ FILE*fp;int i;if((fp=fopen(“D:data.txt”,“w+”))==NULL) {printf(“无法打开文件!”);exit(0);} for(i=0;i {fprintf(fp,“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);printf(“n”);} fclose(fp);return 0;} #include typedef struct student { int num;char name[10];char passwd[6];int age;int class;int math;int clan;int chinese;int mingci;struct student *next;}STU,*pstu; pstu stu_numsort(pstu head);pstu stu_sumsort(pstu head);pstu stu_mathsort(pstu head);pstu stu_chisort(pstu head);pstu stu_clansort(pstu head);pstu stu_searchbynum(pstu head,int num);pstu stu_searchbyname(pstu head,char name[]);pstu stu_searchbyclass(pstu head,int class);pstu stu_create(){ pstu head=NULL;pstu s=NULL;int num;char name[10];char passwd[6];int age;int class;int math;int clan;int chinese;int mingci;printf(“请输入任意一个数非0的数继续 :”);scanf(“%d”,&num);while(num!=0){ s=(pstu)malloc(sizeof(STU)); if(s==NULL) { printf(“nmalloc errorn”); return NULL; } printf(“输入学生学号:”); scanf(“%d”,&s->num); printf(“请输入学生姓名:”); scanf(“%s”,s->name); printf(“请输入登陆密码:”);//学生权限(error) scanf(“%s”,s->passwd); printf(“请输入学生年龄:”); scanf(“%d”,&s->age); printf(“请输入学生班级:”); scanf(“%d”,&s->class); printf(“请输入数学成绩:”); scanf(“%d”,&s->math); printf(“请输入c语言成绩:”); scanf(“%d”,&s->clan); printf(“请输入语文成绩:”); scanf(“%d”,&s->chinese); printf(“enter next studentn”); if(head==NULL) { s->next=NULL; head=s; } else { s->next=NULL; s->next=head; head=s; } scanf(“%d”,&num);} return head;} //保存 void stu_write(pstu head){ int flag=0;FILE *fp=NULL;pstu p=head;fp=fopen(“num”,“w”);if(fp==NULL){ printf(“open errorn”); return;} while(p!=NULL){ flag=fwrite(p,sizeof(STU),1,fp); if(flag!=1) { printf(“write errorn”); return; } p->next;} fclose(fp);} //读函数 pstu stu_read(){ FILE *fp=NULL;pstu head=NULL;pstu s=NULL;fp=fopen(“num”,“r”);s=(pstu)malloc(sizeof(STU));while(fread(s,sizeof(STU),1,fp)==1){ if(head==NULL) { s->next=NULL; head=s; } else { s->next=NULL; s->next=head; head=s; } s=(pstu)malloc(sizeof(STU));} fclose(fp);return head;} //删除学生信息(学号)pstu stu_del(pstu head,int num){ pstu p=head;pstu q=NULL;printf(“输入删除的学号:”);scanf(“%d”,&num);if(head->num==num){ head=head->next;} else { while(p->next!=NULL) { if(p->next->num==num) { q=p->next; p->next=q->next; free(q); q=NULL; break; } p=p->next; } } return head;} pstu stu_searchbynum();//按学号修改学生信息 void stu_changebynum(pstu head){ pstu p=head;int num;char name[10];char passwd[6];int age;int class;int math,chinese,clan;int n;printf(“请输入查找的学号:”);scanf(“%d”,&num);while(p!=NULL){ if(p->num==num) { printf(“学号t姓名t密码t年龄t班级t数学tc语言t语文t名次n”); printf(“%dt%st%st%dt%dt%dt%dt%dt%dn”,p->num,p->name,p->passwd,p->age,p->class,p->math,p->clan,p->chinese,p->mingci); break; } p=p->next;} printf(“请选择需要修改的学生信息:n”);printf(“-------------------------n”);printf(“1:姓名n”);printf(“2:密码n”);printf(“3:年龄n”);printf(“4:班级n”);printf(“5:数学成绩n”);printf(“6:c成绩n”);printf(“7:语文成绩n”);printf(“0:退出”);printf(“---------------------------n”);printf(“请输入需要修改的信息:”);scanf(“%d”,&n);switch(n){ case 0: return; case 1: printf(“请输入新的姓名:”); scanf(“%s”,p->name); break; case 2: printf(“请输入新的密码:”); scanf(“%s”,p->passwd); break; case 3: printf(“请输入新的年龄:”); scanf(“%d”,&p->age); break; case 4: printf(“请输入新的班级:”); scanf(“%d”,&p->class); break; case 5: printf(“请输入新的数学成绩:”); scanf(“%d”,&p->math); break; case 6: printf(“请输入新的c语言成绩:”); scanf(“%d”,&p->clan); break; case 7: printf(“请输入新的语文成绩:”); scanf(“%d”,&p->chinese); break; default: printf(“n无效选项n”); break;} printf(“修改成功!n”);printf(“学号t姓名t密码t年龄t班级t数学tc语言t语文t名次n”); printf(“%dt%st%st%dt%dt%dt%dt%dt%dn”,p->num,p->name,p->passwd,p->age,p->class,p->math,p->clan,p->chinese,p->mingci);} //按学生姓名修改 void stu_changebyname(pstu head){ pstu p=head;int num;char name[10];char passwd[6];int age;int class;int math,chinese,clan;int n;printf(“请输入查找的姓名:”);scanf(“%s”,name);while(p!=NULL){ if(strcmp(p->name,name)==0) { printf(“学号t姓名t密码t年龄t班级t数学tc语言t语文t名次n”); printf(“%dt%st%st%dt%dt%dt%dt%dt%dn”,p->num,p->name,p->passwd,p->age,p->class,p->math,p->clan,p->chinese,p->mingci); break;} p=p->next;} printf(“请选择需要修改的学生信息:n”);printf(“-------------------------n”);printf(“1:学号n”);printf(“2:密码n”);printf(“3:年龄n”);printf(“4:班级n”);printf(“5:数学成绩n”);printf(“6:c成绩n”);printf(“7:语文成绩n”);printf(“0:退出”);printf(“---------------------------n”);printf(“请输入需要修改的信息:”);scanf(“%d”,&n);switch(n){ case 0: return;case 1: printf(“请输入新的学号:”); scanf(“%d”,&p->num); break;case 2: printf(“请输入新的密码:”); scanf(“%s”,p->passwd); break;case 3: printf(“请输入新的年龄:”); scanf(“%d”,&p->age); break;case 4: printf(“请输入新的班级:”); scanf(“%d”,&p->class); break;case 5: printf(“请输入新的数学成绩:”); scanf(“%d”,&p->math); break;case 6: printf(“请输入新的c语言成绩:”); scanf(“%d”,&p->clan); break; case 7: printf(“请输入新的语文成绩:”); scanf(“%d”,&p->chinese); break; default: printf(“n无效选项n”); break;} printf(“修改成功!n”);printf(“学号t姓名t密码t年龄t班级t数学tc语言t语文t名次n”); printf(“%dt%st%st%dt%dt%dt%dt%dt%dn”,p->num,p->name,p->passwd,p->age,p->class,p->math,p->clan,p->chinese,p->mingci); } void change_printf(pstu head){ pstu p=head;int n;printf(“请选择修改学生信息的方式:n”);printf(“-------n”);printf(“1:按学生学号修改n”);printf(“2:按学生姓名修改n”);printf(“0:退出n”);printf(“---------n”);scanf(“%d”,&n);switch(n){ case 1: stu_changebynum(head); printf(“显示全部学生信息:”); break; case 2: stu_changebyname(head); printf(“显示全部学生信息:”); break; case 3: return;} } //查找学生信息 void search_printf(pstu head){ pstu p=head;int n;int num;char name[10];int class;printf(“请选择查找学生信息的方式:n”);printf(“-------n”);printf(“1:按学生学号查找n”);printf(“2:按学生姓名查找n”);printf(“3:按班级群体查找n”);printf(“0:退出n”);printf(“---------n”);scanf(“%d”,&n);switch(n){ case 1: stu_searchbynum(head,num); break; case 2: stu_searchbyname(head,name); break; case 3: stu_searchbyclass(head,class); break; case 0: return;} } //1:学号查找 pstu stu_searchbynum(pstu head,int num){ pstu p=head;printf(“请输入查找的学号:”);scanf(“%d”,&num);while(p!=NULL){ if(p->num==num) break; p=p->next;} return p;} //2:按姓名查找 pstu stu_searchbyname(pstu head,char name[]){ pstu p=head;printf(“请输入要查找的姓名:”);scanf(“%s”,name);while(p!=NULL){ if(strcmp(name,p->name)==0) break; p=p->next;} return p;} //班级群体查找 pstu stu_searchbyclass(pstu head,int class){ pstu p=head;printf(“请输入要查找的班级:”);scanf(“%d”,&class);while(p!=NULL){ if(p->class==class) break; p=p->next;} return p;} //显示所有学生信息列表 void sort_printf(pstu head){ pstu p=head;int n;printf(“请选择显示学生信息的方式:n”);printf(“-----n”);printf(“1:按学号顺序显示n”);printf(“2:按名次显示n”);printf(“3:按数学成绩显示n”);printf(“4:按c语言成绩显示n”);printf(“5:按语文成绩显示n”);printf(“--------n”);printf(“请输入你要选择的操作:”);scanf(“%d”,&n);switch(n){ case 1: stu_numsort(head); printf(“显示学生信息n”); break; case 2: stu_sumsort(head); printf(“显示学生信息n”); break; case 3: stu_mathsort(head); printf(“显示学生信息n”); break; case 4: stu_clansort(head); printf(“显示学生信息n”); break; case 5: stu_chisort(head); printf(“显示学生信息n”); break; case 6: return; default: printf(“输入错误n”); break;} } int stu_len(pstu head){ pstu p=head;int len=0;while(p!=NULL){ len++; p=p->next;} return len;} //1:按学号顺序显示 pstu getnummax(pstu head){ pstu pmax=head;if(head==NULL){ return NULL;} pstu p=head->next;while(p!=NULL){ if(pmax->num num) { pmax=p; } p=p->next;} return pmax;} pstu removefromold(pstu head,pstu pmax){ pstu p=head;if(head==pmax){ head=head->next;} else { while(p!=NULL) { if(p->next==pmax) { p->next=pmax->next; break; } } p=p->next;} return head;} pstu add(pstu pnew,pstu pmax){ pmax->next=pnew;pnew=pmax;return pnew;} pstu stu_numsort(pstu head){ pstu pold=head;pstu pmax=NULL;pstu pnew=NULL;while(pold!=NULL){ pmax=getnummax(pold); pold=removefromold(pold,pmax); pnew=add(pnew,pmax);} return pnew;} //按名次显示 pstu getsummin(pstu head){ pstu pmin=head;if(head==NULL){ return NULL;} pstu p=head->next;while(p!=NULL){ if(pmin->math+pmin->clan+pmin->chinese>p->math+p->clan+p->chinese) { pmin=p; } p=p->next;} return pmin;} pstu removefromtold(pstu head,pstu pmin){ pstu p=head;if(head==pmin){ head=head->next;} else { while(p!=NULL) { if(p->next==pmin) p->next=pmin->next; break; } p=p->next;} return head;} pstu addt(pstu pnew,pstu pmin){ pmin->next=pnew;pnew=pmin;return pnew;} pstu stu_sumsort(pstu head){ pstu pold=head;pstu pmin=NULL;pstu pnew=NULL;int i=stu_len(head);while(pold!=NULL){ pmin=getsummin(pold); pold=removefromtold(pold,pmin); pnew=addt(pnew,pmin); pnew->mingci=i--;} return pnew;} //按数学成绩显示 pstu getmathmin(pstu head){ pstu pmin=head;if(head==NULL){ return NULL;} pstu p=head->next;while(p!=NULL){ if(pmin->math>p->math) { pmin=p; } p=p->next;} return pmin;} pstu stu_mathsort(pstu head){ int i=stu_len(head);pstu pold=head;pstu pmin=NULL;pstu pnew=NULL;while(pold!=NULL){ pmin=getmathmin(pold); pold=removefromold(pold,pmin); pnew=add(pnew,pmin); pnew->mingci=i--;} return pnew;} //按c语言成绩显示 pstu getclanmin(pstu head){ pstu pmin=head;if(head==NULL){ return NULL;} pstu p=head->next;while(p!=NULL){ if(pmin->clan>p->clan) { pmin=p; } p=p->next;} return pmin;} pstu stu_clansort(pstu head){ int i=stu_len(head);pstu pold=head;pstu pmin=NULL;pstu pnew=NULL;while(pold!=NULL){ pmin=getclanmin(pold); pold=removefromtold(pold,pmin); pnew=addt(pnew,pmin); pnew->mingci=i--;} return pnew;} //按语文成绩显示 pstu getchimin(pstu head){ pstu pmin=head;if(head==NULL){ return NULL;} pstu p=head->next;while(p!=NULL){ if(pmin->chinese>p->chinese) { pmin=p; } p=p->next;} return pmin;} pstu stu_chisort(pstu head){ int i=stu_len(head);pstu pold=head;pstu pmin=NULL;pstu pnew=NULL;while(pold!=NULL){ pmin=getchimin(pold); pold=removefromtold(pold,pmin); pnew=addt(pnew,pmin); pnew->mingci=i--;} return pnew;} void stu_printf(pstu head){ pstu tmp=head;printf(“学号t姓名t密码t年龄t班级t数学tc语言t语文t名次n”);while(tmp!=NULL){ printf(“%dt%st%st%dt%dt%dt%dt%dt%dn”,tmp->num,tmp->name,tmp->passwd,tmp->age,tmp->class,tmp->math,tmp->clan,tmp->chinese,tmp->mingci); tmp=tmp->next;} printf(“n”);} void stun_printf(pstu head){ pstu tmp=head;printf(“学号t姓名t密码t年龄t班级t数学tc语言t语文t名次n”);while(tmp!=NULL){ printf(“%dt%st%st%dt%dt%dt%dt%dt%dn”,tmp->num,tmp->name,tmp->passwd,tmp->age,tmp->class,tmp->math,tmp->clan,tmp->chinese,tmp->mingci); break;} printf(“n”);} //2: int main(){ // int m;int num;int class;int len;char name[10];pstu head=stu_create();stu_printf(head);len=stu_len(head);// pstu p=stu_del(head, num);// stu_printf(p);/* pstu k=stu_searchbynum(head,num);if(k!=NULL) stun_printf(k);else printf(“no find”); pstu l=stu_searchbyname(head,name); // // // // // // // // // // // // } if(l!=NULL)stun_printf(l);else printf(“no find”);pstu h=stu_searchbyclass(head,class);if(h!=NULL)stun_printf(h);else printf(“no find”);*/ stu_changebynum(head);printf(“显示全部学生信息:”);stu_printf(head);stu_changebyname(head);printf(“显示全部学生信息:”);stu_printf(head);search_printf(head);stun_printf(head);change_printf(head);stu_printf(head);pstu p1=stu_numsort(head);stu_printf(p1);pstu p2=stu_sumsort(head);stu_printf(p2);pstu p3=stu_mathsort(head);stu_printf(p3);sort_printf(head);stu_printf(head); #include “stdio.h” #include “stdlib.h” #include “string.h” #include “conio.h” #include “stdlib.h” #define null 0 struct record { char name[20];char phone[20];char adress[40];char postcode[10];char e_mail[30];}student[500];struct LinkList { struct record US;struct LinkList *next;}a;struct LinkList *head=null;int num=0;FILE *fp;int menu_select();int adduser();int list();int search();int display();int add();int listbyname();int dele();int save();int exit(); void main(){ system(“cls”);for(;;){ switch(menu_select()){ case 0:adduser();break;case 1:list();break;case 2:search();break;case 3:add();break;case 4:dele();break;case 5:save();break;case 6:exit(0);} } } menu_select(){ char s[80];int a;printf(“*_* press any key enter menu!*_* n”);getch();system(“cls”);printf(“tt********************MENU*********************nn”);printf(“tt 0.输入记录n”);printf(“tt 1.显示记录 n”);printf(“tt 2.按姓名查找n”);printf(“tt 3.插入记录 n”);printf(“tt 4.删除记录n”);printf(“tt 5.记录保存文件n”);printf(“tt 6.Quitn”);printf(“tt***********************************************n”);do{ printf(“n Enter you choice(0~11):”);scanf(“%s”,s);a=atoi(s);} while(a<0||a>11);return a;} adduser(){ printf(“ntt**************** 请输入用户信息 ****************n”);printf(“ntt输入姓名:”);scanf(“%s”,&student[num].name);printf(“ntt输入电话号码:”);scanf(“%s”,&student[num].phone);printf(“ntt输入地址:”);scanf(“%s”,&student[num].adress);printf(“ntt输入邮编:”);scanf(“%s”,&student[num].postcode);printf(“ntt输入e-mail:”);scanf(“%s”,&student[num].e_mail);num++;printf(“ntt是否继续添加?(Y/N):”);if(getch()=='y')adduser();return(0);} list(){ int i;system(“cls”);if(num!=0){ printf(“ntt*************** 以下为通讯录所有信息************”);for(i=0;i printf(“ntt姓名: %s”,student[i].name);printf(“ntt电话: %s”,student[i].phone);printf(“ntt地址: %s”,student[i].adress);printf(“ntt邮编: %s”,student[i].postcode);printf(“ntte-mail:%s”,student[i].e_mail);printf(“tt”);if(i+1 add(){ int i;if((fp=fopen(“student.bin”,“wb”))==NULL){ printf(“ntt文件打开失败”);} for(i=0;i save(){ int j;FILE*fp;fp=fopen(“student.txt”,“w”);if(fp==NULL)printf(“can't open the file.”);if(num!=0){ for(j=0;j fwrite(student,sizeof(student),1,fp);} } printf(“保存成功!”);fclose(fp);return(0);} 摘 要 为了人们对他人信息的记忆方便而设计,开发的一套“通讯录管理系统“软件。通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。得到软件工程的综合训练,提高解决实际问题的能力。 关键字:信息;管理;实用 Abstract Designed for people to others the memory of information convenient, developed a set of “mail list management system” software.Through the design process of this subject, students can be structured programming ideas, deepen our understanding of the advanced language basic language elements and control the understanding of the structure, conduct training for emphasis and difficulty in C language, independently complete the program design has a certain work tasks, while emphasizing the good programming style.Comprehensive training in software engineering, improving the ability to solve practical problems.Keywords: Information;management;practical 目 录 概述.........................................................................1 1.1设计目的..................................................................1 1.2设计要求..................................................................1 1.3系统功能需求分析..........................................................2 2 总体设计.....................................................................3 2.1总体功能模块图............................................................3 2.2程序的数据设计............................................................4 3详细设计.....................................................................5 3.1功能及工作流程图..........................................................5 3.2源程序代码................................................................8 4调试分析....................................................................19 4.1测试.....................................................................19 4.2问题思考与调试:.........................................................27 5总结........................................................................28 参考文献......................................................................29 致 谢........................................................................27 概述 1.1设计目的 随着信息社会的高速发展,人与人之间的联系越来越频繁,通讯方式越来越多样化,如何保证与朋友、同学、同事、领导、亲戚等之间的联系,并能方便快捷的查找、记录、修改其相关通讯信息。仅靠以前单独的手工记录已远远不能满足当前的需要。 开发一个通讯录管理系统,借助计算机可以方便、快捷、灵活的管理个人的朋友及相关人员的通讯信息,了解友人相关信息,帮助与友人保持联络。 所以设计一个通讯录管理系统管理各人的通讯信息是是非必要的。 设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。(1)数据包括:人名、工作单位、电话号码和E-mail地址。(2)可对记录中的姓名和电话号码进行修改。(3)可增加或删除记录。(4)可显示所有保存的记录。(5)可按人名或电话号码进行查询。 1.2设计要求 建立通讯录信息,信息至少包含姓名、住址、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、E-mail、QQ等。 该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修改,按姓名、单位、分类方式查找。 将通讯录保存在文件中。能够输出通讯录中的信息。 1.3系统功能需求分析 主要包含一下多种功能: 添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 查询:查询通讯录记录 修改:修改通讯录记录 保存:将信息保存到文件 本系统为通讯录管理系统,可由用户自由添加,删除和修改信息,还可以将通讯录信息导出到文本文档,极大的方便了用户的使用。 总体设计 思路:我们首先设计出了主函数,然后根据去要实现的功能分别设计录入联系人信息、浏览、查询、修改、删除功能的子函数。删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环实现删除。修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。 2.1总体功能模块图 图2.1 总体功能模块图 添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。 显示:可以以表格形式输出所有通讯录里的记录。 删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容。查询:可以选择用姓名、电话、地址三种方式查询。 修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改。 保存:输入文件名(带后缀名)后,即可将通讯录信息保存到文件。运行所需环境:win7及以下各版本windows,visual C++6.0。2.2程序的数据设计 该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。下面六个模块都是利用C语言文件,向文件中追加数据、修改数据、查询数据和除数据。 创建:用fopen()建立一个文本文件,然后用fprintf()向其中输入数据(例如,向文件中输入“姓名”,“地址”等),并对文件进行命名。 添加:可以添加通讯录记录,利用C语言文件,向文件中按顺序输入姓名、住址、单位、固定电话、手机号码、分类(如同事、朋友、同学、家人等)、E-mail、QQ,再用fclose()函数关闭并保存文件。 输出:也是用通过循环依次输出文件中的数据,即输出所有通讯录里的记录。删除:输入你要删除的人的姓名后,系统会自动删除他(她)的记录,在删除通过switch语句满足提示你确认删除的功能,只有等你确认删除后才会删除。查找:为了满足用户的实际需求,设计了三种查询方式,可以用姓名、单位、分类三种方式查找通讯录记录。这里用到strcmp()函数,通过比较字符串是否相同来判别是否找到相关信息,找到后,就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上。 修改:输入你要修改的那个人的姓名后,系统会查找该通讯录文件(此时用发ftell()函数来跟踪文件指针的指向地址,找到个人的记录后,会显示他(她)的记录,然后通过fseek()函数来找到修改处的地址,然后用户再依次输入他(她)的相关信息来替代以前的记录。 保存:用到fclose()函数,每次操作成功后会自动保存到指定的文件中。 3详细设计 3.1功能及工作流程图 ①添加:添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。 图3.1(1)添加流程图 ②显示:以表格形式输出所有通讯录里的 图3.1(2)显示流程图 ③删除::输入欲删除的那个人的名字后,会自动删除他(她)的记录内容。 图3.1(3)删除流程图 ④查询:可以选择用姓名、电话、地址三种方式查询。 图3.1(4)查询流程图 ⑤修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改。 图3.1(5)修改流程图 3.2源程序代码 #include typedef struct Person pe[80]; int menu_select() { char c;do{ system(“cls”); printf(“tt *****通讯录***** n”); printf(“tt┌───────┐n”); printf(“tt│ 1.添加记录 │n”);printf(“tt│ 2.显示记录 │n”);printf(“tt│ 3.删除记录 │n”);printf(“tt│ 4.查询记录 │n”);printf(“tt│ 5.修改记录 │n”);{ char score; /*编号*/ char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20];char age[8];char adds[20]; /*邮箱*/ /*年龄*/ /*住址*/ }Person; } printf(“tt│ 6.保存记录 │n”);printf(“tt│ 0.退出程序 │n”);printf(“tt└───────┘n”);printf(“tt请您选择(0-6):”);c=getchar(); }while(c<'0'||c>'6');return(c-'0'); int Input(Person per[],int n){ gets(x); int i=0; char sign,x[10]; while(sign!='n'&&sign!='N'){ printf(“t编号:”); scanf(“t%d”,&per[n+i].score);printf(“t姓名:”); scanf(“t%s”,per[n+i].name);printf(“t年龄:”);scanf(“t%s”,per[n+i].age);printf(“t电话号码:”);scanf(“t%s”,per[n+i].num);printf(“t通讯住址:”);scanf(“t%s”,per[n+i].adds);printf(“t电子邮箱:”);scanf(“t%s”,per[n+i].email); } } printf(“nt是否继续添加?(Y/N)”);scanf(“t%c”,&sign);i++; return(n+i); void Display(Person per[],int n) { int i; printf(“--------n”); /*格式*/ printf(“%-5d%-8s%-6s%-13s%-15s%-15sn”,per[i-1].score,per[i-1].name,per[i-1].age,perprintf(“编号 姓名 年龄 电话号码 通讯地址 电子邮箱n”);printf(“--------n”); for(i=1;i { [i-1].num,per[i-1].adds,per[i-1].email); } printf(“--------n”);system(“pause”);if(i>1&&i%10==0) { } printf(“t----n”);printf(“t”);system(“pause”); printf(“t----n”);} int Delete_a_record(Person per[],int n){ } char s[20];int i=0,j; printf(“t请输入想删除记录中的名字:”);scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i } for(j=i;j } printf(“ttt已经成功删除!n”);return(n-1);strcpy(per[j].num,per[j+1].num);strcpy(per[j].name,per[j+1].name);strcpy(per[j].age,per[j+1].age);strcpy(per[j].adds,per[j+1].adds);strcpy(per[j].email,per[j+1].email);per[j].score=per[j+1].score;printf(“t通讯录中没有此人!n”);return(n);void Query_a_record(Person per[],int n){ int m;printf(“tn请选择查询方式:n”); printf(“t┌──────┐n”); printf(“t│1------姓名 │n”); printf(“t│2------电话 │n”); printf(“t│3------地址 │n”); printf(“t│4------返回 │n”); printf(“t└──────┘n”); printf(“请选择:”); scanf(“%d”,&m); while(m!=1&&m!=2&&m!=3&&m!=4) { if(m==1){ char s[20];int i=0; printf(“t请输入想查询的姓名:”);scanf(“t%s”,s); while(strcmp(per[i].name,s)!=0&&i } printf(“输入错误,请重新选择:”);scanf(“%d”,&m); };} return; printf(“t此人编号: %dn”,per[i].score);printf(“t此人年龄: %sn”,per[i].age);printf(“t电话号码: %sn”,per[i].num);printf(“t通讯地址: %sn”,per[i].adds);printf(“t电子邮箱: %sn”,per[i].email);if(m==2){ char s[20];int i=0; printf(“t请输入想查询的电话:”);scanf(“t%s”,s); while(strcmp(per[i].num,s)!=0&&i };} printf(“t此人编号: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年龄: %sn”,per[i].age);printf(“t通讯地址: %sn”,per[i].adds);printf(“t电子邮箱: %sn”,per[i].email); } if(m==3){ };char s[20];int i=0; printf(“t请输入想查询的地址:”);scanf(“t%s”,s); while(strcmp(per[i].adds,s)!=0&&i } printf(“t此人编号: %dn”,per[i].score);printf(“t此人姓名: %sn”,per[i].name);printf(“t此人年龄: %sn”,per[i].age);printf(“t电话号码: %sn”,per[i].num);printf(“t电子邮箱: %sn”,per[i].email);printf(“t通讯录中没有此人!n”);return; void Change(Person per[],int n){ char s[20];int i=0; printf(“t请输入想修改的记录中的名字:”);scanf(“%s”,s); while(strcmp(per[i].name,s)!=0&&i printf(“t通讯录中没有此人!n”); return; } printf(“t编号:”); scanf(“t%d”,&per[i].score); printf(“t姓名:”); scanf(“t%s”,per[i].name); printf(“t年龄:”); scanf(“t%s”,per[i].age);printf(“t电话号码:”); scanf(“t%s”,per[i].num); printf(“t通讯住址:”); scanf(“t%s”,per[i].adds);printf(“t电子邮箱:”);scanf(“t%s”,per[i].email);printf(“t修改成功!”);} void WritetoText(Person per[],int n) { int i=0; FILE *fp; char filename[20]; printf(“t保存到文件n”); printf(“t请输入所保存的文件名:”); scanf(“t%s”,filename); if((fp=fopen(filename,“w”))==NULL) /*定义文件指针*/ /*定义文件名*/ /*输入文件名*/ { } fprintf(fp,“****************************************** 通 讯 录printf(”t无法打开文件n“);system(”pause“);return; ******************************************n”);fprintf(fp,“编号 姓名 年龄 电话号码 通讯地址 电子邮箱n”);; fprintf(fp,“%-3dt%-6st%-3st%-13st%-20st%-20sn”,per[i].score,per[i].name,per[i].agwhile(i ;fprintf(fp,“***************************************共有%d 条记录 } fprintf(fp,”----------------------------n“)i++; ****************************************n”,n); } void main() /*主函数*/ { int n=0;fclose(fp); /*关闭文件*/ printf(“保存成功!n”);for(;;){ switch(menu_select()) { case 1: printf(“nt添加记录到通讯录n”); n=Input(pe,n);break; case 2: printf(“nttt 通讯录记录表n”);Display(pe,n); break; case 3: printf(“nt从通讯录中删除记录n”);n=Delete_a_record(pe,n); printf(“t”); system(“pause”);break; case 4: printf(“nt在通讯录中查找记录n”);Query_a_record(pe,n); printf(“t”); system(“pause”); break; case 5: /*添加记录*/ /*显示记录*/ /*删除记录*/ /*查找记录*/ printf(“nt修改通讯录中的记录n”); Change(pe,n); printf(“t”); system(“pause”); break; case 6: printf(“nt保存功能n”); WritetoText(pe,n); printf(“t”); system(“pause”); break; case 0: printf(“ntt谢谢使用,再见!n”); printf(“ntt”); system(“pause”); exit(0); } } } /*修改数据*/ /*保存数据*/ /*结束程序*/ 4调试分析 调试的意义和目的:在管理信息系统的开发过程中,面对着错综复杂的各种问题,人的主观认识不可能完全符合客观现实,开发人员之间的思想交流也不可能十分完善。所以,在管理信息系统开发周期的各个阶段都不可避免地会出现差错。开发人员应力求在每个阶段结束之前进行认真、严格的技术审查,尽可能早的发现并纠正错误,否则等到系统投入运行后再回头来改正错误将在人力、物力上造成很大的浪费,有时甚至导致整个系统的瘫痪。然而,经验表明,单凭审查并不能发现全部差错,加之在程序设计阶段也不可避免还会产生新的错误,所以,对系统进行调试是不可缺少的,是保证系统质量的关键步骤。统计资料表明,对于一些较大规模的系统来说,系统调试的工作量往往占程序系统编制开发总工作量的40%以上。 调试的目的在于发现其中的错误并及时纠正,所以在调试时应想方设法使程序的各个部分都投入运行,力图找出所有错误。错误多少与程序质量有关。即使这样,调试通过也不能证明系统绝对无误,只不过说明各模块、各子系统的功能和运行情况正常,相互之间连接无误,系统交付用户使用以后,在系统的维护阶段仍有可能发现少量错误并进行纠正,这也是正常的。 4.1测试 1).显示的主菜单界面: 图4.1(1)主菜单界面 2).添加界面: 图4.1(2)添加界面 3).显示界面: 图4.1(3)显示界面 4).删除界面: 图4.1(4)删除前界面 删除后,通讯录里的显示记录: 图(4)删除后界面 5).查询界面:以姓名查询方式为例: 图4.1(5)查询界面 6).修改界面: 图4.1(6)修改前界面 修改后,通讯录里的显示记录: 图4.1(6)修改后界面 7).保存界面: 图4.1(7)保存界面 通讯录.txt 文件截图: 图4.1文件截图 4.2问题思考与调试: 1.当我在进行删除、查询、修改、保存等功能时,以查询为例,输入名字按回车后,虽然会显示该人的所有记录,但是显示后,它马上自动消失了,还没来得及等我看内容。因此,向别人请教后,在一些地方加入了system(“pause”);这个语言,用来对某项操作完成后进行暂停。 2.现在这个程序的界面个人感觉很清爽。但在最初,每次进行一项操作,运行窗口里的内容会一直保留着,感觉很杂乱,如下图(添加后,进行显示操作): 图4.2分析图 之后,我去网上寻求解决办法,知道可以使用system(“cls”);这一语句可以解决这个问题,最后,修改成功。5总结 这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。 当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。 还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序。 总体来说,这次C语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。 最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和好心人对我的帮助与支持。 参考文献 [1]谭浩强,张基温。C语言程序设计教程。第三版。北京:高等教育出版社,2006 [2]谭浩强,张基温。C语言习题集与上机指导。第三版。北京:高等教育出版社,2006 [3]谭浩强。C程序设计(第三版)。北京:清华大学,2005 [4]谭浩强。C程序设计(第二版)。北京:清华大学,1999 [5]林建秋,韩静萍,等.C语言程序设计【M】.电子工业出版社,2004.[6]谭浩强.C语言程序设计【M】.清华大学出版社,2006.[7]黄维通.C语言设计教程.清华大学出版社,2005.[8]王成瑞.C语言程序设计.中国水利水电出版社,2005.[9]张基温.C语言程序设计案例教程.清华大学出版社,2004.[10]苏小红,陈惠鹏.C语言大学实用教程【M】.电子工业出版社,2007.致 谢 在这里我要感谢杨书鸿老师,她对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此向帮助和指导过我的各位老师表示最中心的感谢!感谢这篇论文所涉及到的各位学者,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。感谢我的同学和朋友,在我写论文的过程中给予我很多素材,还在论文的撰写和排版等过程中提供热情的帮助。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!第二篇:C语言-通讯录管理系统
第三篇:学生管理系统学生链表
第四篇:C语言程序设计学生通讯录管理系统
第五篇:通讯录管理系统