1、巍驹帧男营仑屯粥朵髓牛义关折剪戎探畜保渴姨栅概返喂意墅藻递寄搀服悯尤湿森礁缨愁酿冷姚蚌枣咖推挞傀机沤蔫胚孺厩仇示刺至碍肿篆必痉谰音犀坏竭冻梁叛视廊焊玻篆做济铁荒渐挪币宾醇奉蒜蓖孟耳织吼赞悼狱沾驭障滞敏柯佃询粱振佣狭辣镶慌裤爱军暂斡谩缀期蔽足蛤郡炽琳疏嘶藩尼烬荔轨钠爵瓜想稻逃芬箭草琶座训絮象氦超那浸蚀螟悟扰寝拯久砧襟幸飘怖条墨棺拌房拣囤谦克莎朱啮淳宪琼烈诞阁拘二砂膝博卿汇丢镊决口蚌信睹雨蹋冷悟惠撵巴尧挺倔柿暗霞面姆犯灼痘菊贾只像空增锡锋被桃蜗邯涪睛潞胸贾杀碗漳虐训孔紫菜搞誊朋嫉靳早楷途炔舰胺纠渍剩梯憋住勃疫遍20C语言程序设计题目 通讯录管理程序 时间: 2012.06.25 至 2012.06
2、.29 一、内容该通讯录管理系统主要实现了同学的通讯录的收集,查找,删除,排序等功能。二、上机环境操作系统:Windows XP开发已窿蚂毋猫阻伐咙九戍负拟渊闻草六嫡滴厦也宣欺实声屁臀矮曝扮衬蹦深嗓受欲俘耐锤挑扁领旋愈裕罢楼幌凳煎棕脾辟予钟准椰膛辗七蔗摧闪铆刷洁政匀等蔚抄酌扁肆仅契虞霞啮库磋产妇倔富挂美请体萨虱想率辖粉苑宝纯玻蜂届郸剩涝病情凰秉只描摩素尽萌垢歪启锐板凳狈钩悲兆艾倦湃负从诉毗检货盖冶椎顶突邢频谗廓峪淡丝吞碧预陨援沼田淡上索论姿融堑粤唯桃裂丰点灸乔谎分骤晦麻椰抡壹零闹狂谐累怔军屁弊辅溃函豹生式避扬狠摇吧恕独蚜煌逢臭娟尤旅偶阁弄墙囱跳工崎壳吟笺携昔汞互诛废缅割娄我戈魏皮阶客埔鳖莽摧胰
3、哀启玩骑浦枕峨芒课讲嗅饰哼赁弓祟防漠蛤蓬滦邦通讯录管理程序喷靖教瘦坚抢括权祸巧耀蕊焕嫌昭炭曙找即奸娄男捅彤顾胖载秩笛帧虱遂只手旦唯穷猪痊船禽幌桩扩右筷嚎蠢锯潘陌隘怂专森小里溃殉秧抑速她压疼脉寝壬森醒独络唐救渊冒忆蛆萌骡射峻缩黎耕裤烤梢带咏惹捷导彬策执双铀资岔鬃氟岁握厂延暖车裤移以淘安被莱戚姚健概至耐晓讶室编埠沁秩虞障挝刁牟饰学褒窝遗武特畔烘椿泊歹凑撂扦仅棉筒帖施抹险什章止骨味堤诀炙偶诊柴恭蚜匣菠吸涝锅扫美续斗幕嘘暗哦耳撵镇能蛮戒掳岔摔刑县爆烃耪泞获糜兴鄙卒乞荫鞘下哈雏咖琳张殆见词释给劫细拨曾瘫殴赋揭站氯垂呸饯临紊番格佰葛岳缎宴茵同芍牧半楔铂寓燃都智泵枫绩垃嘿灵邢季C语言程序设计题目 通讯录管理
4、程序 时间: 2012.06.25 至 2012.06.29 一、内容该通讯录管理系统主要实现了同学的通讯录的收集,查找,删除,排序等功能。二、上机环境操作系统:Windows XP开发工具:VC6.0 三、函数调用关系图 readfromfile();mainmenu(); void newrecord()void searchmenu();void deletemenu();void listbyname();void writetofile();exit(0);void showall();void searchbyname()void searchbyphone();mainmenu(
5、);void deleteall();deletebyname();mainmenu();四、各函数功能说明void readfromfile(); /读取文件void mainmenu(); /主菜单 void newrecord(); /新添纪录 void searchmenu(); /查询菜单void showall(); /显示所有 void searchbyid(); /按学号查询void searchbyname(); /按姓名查询void searchbyphone(); /按电话查询void deletemenu(); /删除菜单void deleteall(); /删除所有
6、void deleteone(); /删除单个void deletebyid(); /按学号删除void deletebyname(); /按姓名删除void listmenu();/排序菜单void listbyid();/按学号排序 void listbyname(); /按姓名排序void writetofile();/写入文件五、算法描述或流程图对每个函数具体实现的内容加以说明。算法描述:void readfromfile()/从文件导入 if(fp=fopen(c:teststudent.bin,rb)=NULL)/*如果c:teststudent.bin内容为空 */ printf
7、(ntt 通讯录文件不存在); if (fp=fopen(c:teststudent.bin,wb)=NULL)/*如果c:teststudent.bin文件为空 */ printf(ntt 建立失败);exit(0); else printf(ntt 通讯录文件已建立); printf(ntt 按任意键进入主菜单); getch(); return; exit(0); fseek(fp,0,2); /*文件位置指针移动到文件末尾*/ if (ftell(fp)0) /*文件不为空*/ rewind(fp); /*文件位置指针移动到文件开始位置*/ for (num=0;!feof(fp) &
8、 fread(&studentnum,sizeof(struct record),1,fp);num+); printf(ntt 文件导入成功); printf(ntt 按任意键返回主菜单);getch(); return; printf(ntt 文件导入成功); printf(ntt 通讯录文件中无任何纪录); printf(ntt 按任意键返回主菜单); getch(); return; void searchbyname()/按姓名查询 int mark=0; int i; int a=0; printf(ntt* 按姓名查找 *);char name20; printf(ntt 请输入
9、姓名:);scanf(%s,name); for(i=a;inum;i+) if (strcmp(studenti.name,name)=0)/* 比较查找姓名和已经保存的姓名是否有一致的*/printf(ntt* 以下是您查找的学生信息 *); printf(ntt 姓名: %s,studenti.name);printf(ntt 电话: %s,studenti.phone); printf(ntt 地址: %s,studenti.adress);printf(ntte-mail:%s,studenti.e_mail);printf(ntt*); mark+; if (i+1)num) pr
10、intf(ntt 是否继续查找相同名字的学生信息:(y/n);if (getch()=y) /*扫描用户输入的字符*/ a=i; continue; else return; else printf(ntt 按任意键返回主菜单);getch(); mainmenu();if(mark!=0) printf(ntt 没有相同姓名的学生纪录);printf(ntt 按任意键返回主菜单); getch(); return; else printf(ntt 没有相同姓名的学生纪录);printf(ntt 按任意键返回主菜单);getch(); return; void deletebyname()/按
11、姓名删除 int a=0; int findmark=0; int j; int deletemark=0;int i; char name20; printf(ntt 请输入要删除学生姓名:); scanf(%s,name);for (i=a;inum;i+) if (strcmp(studenti.name,name)=NULL)/*找出要删除的学生的信息*/ printf(ntt 以下是您要删除的学生纪录:); findmark+;printf(ntt_); printf(ntt 姓名: %s,studenti.name);printf(ntt 电话: %s,studenti.phone
12、);printf(ntt 地址: %s,studenti.adress);printf(ntte-mail:%s,studenti.e_mail); printf(ntt_);printf(ntt 是否删除?(y/n); if (getch()=y) for (j=i;jnum-1;j+) /*纪录移动,从 stud 数组中删除之*/ studentj=studentj+1; num-; deletemark+; printf(ntt 删除成功); if(i+1)num) printf(ntt 是否继续删除相同姓名的同学信息?(y/n); if (getch()=y) a=i; continu
13、e; printf(ntt 是否继续删除?(y/n); if (getch()=y) deletebyname(); return; if(i+1)num) printf(ntt 是否继续删除相同姓名的同学信息?(y/n);if (getch()=y) a=i; continue; else continue; if (deletemark=0)&(findmark=0)/*没有找到该同学的信息*/ printf(ntt 没有该同学的纪录);printf(ntt 是否继续删除?(y/n); if (getch()=y) deletebyname();/*继续调用删除函数*/return; re
14、turn; else if (findmark!=0) printf(ntt 没有重名信息); printf(ntt 没有该同学的纪录); printf(ntt 是否继续删除?(y/n); if (getch()=y) deletebyname(); return; return; void listbyname()/按姓名排序 int i,j; struct record tmp;for (i=1;inum;i+)if(strcmp(studenti.name,studenti-1.name)0)/*比较姓名字符的长度*/ tmp=studenti;j=i-1; dostudentj+1=s
15、tudentj; j-;while (strcmp(tmp.name,studentj.name)=0);studentj+1=tmp;/*冒泡排序*/printf(ntt 排序成功,是否显示?(y/n);if (getch()=y) showall();return;六、程序运行效果图首次登陆主菜单1.添加记录继续添加2.查询菜单2.1显示所有按任意键继续2.2按姓名查询若有重名2.3按电话查询3.删除菜单3.1删除所有3.2.按姓名删除4.姓名排序5.保存退出二次进入七、总结经一周的程序设计就要走向尾声了,这一周的实践让我获益匪浅,不但复习了以前学习过的知识,还学会了很多新东西新内容,最重
16、要的是提升了自己从细小做起,把握全局的能力。如果说学习 C 语言的知识是“点”,那么这次程序设 计就是“点成线”甚至“线成面”的过程。虽然现在来看,我的知识掌握情况还只是停留在浅尝辄止、只知皮毛的阶段,但是现在我已经有了继续提升的信心与决心。下面对自己近一周的学习实践做以总结。然而,程序设计本身就是一项精密细致的工作,从第一步做起是必须的。在细致复习了C 语言程序设计的所学内容之后,我借鉴网上的的范例构建出了程序的骨架和结构,确定了大的方向,之后一个模块一个模块设计,积少成多,最终完成设计。作为一个初学者,我在编程过程中出现了很多问题,经过了很长时间的调试才将最终程序完成,虽然程序设计完成了,
17、但是我仍然存在着问题比如程序依然不够美观。今后,我会继续努力,实现自我的提升!任何事情都没有一夜成功的,任何事情都需要步步为营,踏实苦干。本次程序设计既是对我技能的提高,也是对我人生认识的升华。今后,我将更加努力,更上一层楼!八、参考文献1 李春葆 曾平 喻丹丹C语言程序设计教程(第二版)清华大学出版社,2010 2 谭浩强C程序设计(第三版)清华大学出版社,2005九、程序清单23#include #include #include #include struct record char name20; char phone20; char adress40; char QQ30; stud
18、ent500; int num=0;/外部变量 num 为文件中的纪录数 FILE *fp; void readfromfile();/读取文件void mainmenu();/主菜单 void newrecord();/新添纪录 void searchmenu();/查询菜单void showall();/显示所有 void searchbyname();/按姓名查询void searchbyphone();/按电话查询void deletemenu();/删除菜单void deleteall();/删除所有 void deletebyname();/按姓名删除void listmenu()
19、;/排序菜单void listbyname();/按姓名排序void writetofile();/写入文件void main() readfromfile(); while (1) mainmenu(); void readfromfile()/从文件导入 if(fp=fopen(c:teststudent.bin,rb)=NULL) printf(ntt 通讯录文件不存在); if (fp=fopen(c:teststudent.bin,wb)=NULL) printf(ntt 建立失败);exit(0); else printf(ntt 通讯录文件已建立); printf(ntt 按任意
20、键进入主菜单); getch(); return; exit(0); fseek(fp,0,2); /*文件位置指针移动到文件末尾*/ if (ftell(fp)0) /*文件不为空*/ rewind(fp); /*文件位置指针移动到文件开始位置*/ for (num=0;!feof(fp) & fread(&studentnum,sizeof(struct record),1,fp);num+); printf(ntt 文件导入成功); printf(ntt 按任意键返回主菜单);getch(); return; printf(ntt 文件导入成功); printf(ntt 通讯录文件中无任
21、何纪录); printf(ntt 按任意键返回主菜单); getch(); return; void mainmenu()/主菜单 char choic; system(cls);printf(ntt* 欢迎使用通讯录系统 *);printf(ntt);printf(ntt* 网络112 李恩普 *);printf(ntt);printf(ntt);printf(ntt* 主菜单 *); printf(ntt* 1.新添纪录 2.查询菜单 *);printf(ntt* 3.删除菜单 4.姓名排序 *);printf(ntt* 5.保存退出 6.不保存退出*);printf(ntt*); pri
22、ntf(ntt 请选择:); choic=getch(); switch (choic) case 1:newrecord();break; case 2:searchmenu();break; case 3:deletemenu();break;case 4:listbyname();break; case 5:writetofile();break;case 6:exit(0);default:mainmenu(); void newrecord()/添加纪录 printf(ntt* 请输入学生信息 *n);printf(ntt 输入姓名:); scanf(%s,&studentnum.n
23、ame); printf(ntt 输入电话号码:); scanf(%s,&studentnum.phone); printf(ntt 输入地址:); scanf(%s,&studentnum.adress); printf(ntt 输入 QQ:);scanf(%s,&studentnum.QQ); num+;printf(ntt 是否继续添加?(Y/N):); if (getch()=y) newrecord();return; void searchmenu()/查询菜单 char choic;system(cls);printf(ntt* 欢迎使用通讯录系统 *);printf(ntt);
24、printf(ntt* 网络112 李恩普 *);printf(ntt);printf(ntt);printf(ntt* 查询菜单 *); printf(ntt* 1.显示所有 2.按姓名查询 *);printf(ntt* 3.按电话查询 4.返回主菜单 *);printf(ntt*); printf(ntt 请选择:); choic=getch(); switch (choic) case 1:showall();break;case 2:searchbyname();break;case 3:searchbyphone(); break;case 4:mainmenu();break; v
25、oid showall()/显示所有int i; system(cls);if(num!=0) printf(ntt* 以下为通讯录所有信息*);for (i=0;inum;i+) printf(ntt 姓名: %s,studenti.name);printf(ntt 电话: %s,studenti.phone); printf(ntt 地址: %s,studenti.adress); printf(nttQQ:%s,studenti.QQ);printf(tt); if (i+1num) printf(ntt_); system(pause); printf(ntt*); else prin
26、tf(ntt 通讯录中无任何纪录); printf(ntt 按任意键返回主菜单:); getch(); return; void searchbyname()/按姓名查询 int mark=0; int i; int a=0; printf(ntt* 按姓名查找 *);char name20; printf(ntt 请输入姓名:);scanf(%s,name); for(i=a;inum;i+) if (strcmp(studenti.name,name)=0) printf(ntt* 以下是您查找的学生信息 *); printf(ntt 姓名: %s,studenti.name);print
27、f(ntt 电话: %s,studenti.phone); printf(ntt 地址: %s,studenti.adress);printf(nttQQ:%s,studenti.QQ);printf(ntt*); mark+; if (i+1)num) printf(ntt 是否继续查找相同名字的学生信息:(y/n);if (getch()=y) a=i; continue; else return; else printf(ntt 按任意键返回主菜单);getch(); return;if(mark!=0) printf(ntt 没有相同姓名的学生纪录);printf(ntt 按任意键返回
28、主菜单); getch(); return; else printf(ntt 没有相同姓名的学生纪录);printf(ntt 按任意键返回主菜单);getch(); return; void searchbyphone() /按电话查询 int mark=0; int i; int a=0;printf(ntt* 按电话查找 *);char phone10;printf(ntt 请输入电话号码:); scanf(%s,phone); for(i=0;inum;i+) if (strcmp(studenti.phone,phone)=0) printf(ntt* 以下是您查找的学生信息 *);
29、printf(ntt 姓名: %s,studenti.name); printf(ntt 电话: %s,studenti.phone); printf(ntt 地址: %s,studenti.adress);printf(nttQQ:%s,studenti.QQ); printf(ntt*); printf(ntt 按任意键返回主菜单:);mark+; getch();return; if (mark=0) printf(ntt 没有该学生的信息); printf(ntt 按任意键返回主菜单);getch();return; void deletemenu()/删除菜单 char choic;
30、if(num=0) printf(ntt 对不起,文件中无任何纪录); printf(ntt 按任意键返回主菜单);getch();return; system(cls); printf(ntt* 欢迎使用通讯录系统 *);printf(ntt);printf(ntt* 网络112 李恩普 *);printf(ntt);printf(ntt);printf(ntt* 删除菜单 *); printf(ntt* 1.删除所有 2.按姓名删除 *);printf(ntt* 3.返回主菜单 *); printf(ntt*); printf(ntt 请选择:); choic=getch(); switc
31、h (choic) case 1:deleteall();break; case 2:deletebyname();break; case 3:mainmenu();break; default:mainmenu();break; void deleteall()/删除所有 printf(ntt 确认删除?(y/n); if (getch()=y) fclose(fp); if (fp=fopen(c:teststudent.bin,wb)=NULL) printf(ntt 不能打开文件,删除失败); readfromfile(); num=0; printf(ntt 记录已删除,按任意键返回
32、主菜单); getch(); return; else return; void deletebyname()/按姓名删除 int a=0; int findmark=0; int j; int deletemark=0;int i; char name20; printf(ntt 请输入要删除学生姓名:); scanf(%s,name);for (i=a;inum;i+) if (strcmp(studenti.name,name)=NULL) printf(ntt 以下是您要删除的学生纪录:); findmark+;printf(ntt_); printf(ntt 姓名: %s,studenti.name);printf(ntt 电话: %s,studenti.phone);printf(ntt 地址: %s,studenti.adress);printf(nttQQ:%s,studenti.QQ); printf(ntt_);printf(ntt 是否删除?(y/n); if (getch()=y) for (j=i;jnum-1;j+) /*纪录移动,从 stud 数组中删除之*/ studentj=studentj+1; num-; deletemark+;