1、C语言课程设计汇报课题名称 通讯录管理系统 姓 名 系 别 班 级 指导老师 日 期 江 海 职 业 技 术 学 院目 录一、 需求分析二、 概要设计1系统功效组成框图2模块功效说明三、 具体设计1. 数据结构设计 2主函数设计 3输入模块设计 4浏览模块设计5查询模块设计6. 插入模块设计7. 删除模块设计8、排序模块设计9、修改模块设计四、 设计及调试分析五、 用户手册六、 测试数据七、 心得体会八、 附录 附录1:程序代码 附录2:参考文件通讯录管理系统一、 需求分析1 操作对象有多个属性,故其类型为结构体类型2 多个对象数据录入采取循环实现3 通讯录信息保留到文件中,包含到文件读写操作
2、。4 排序操作可采取冒泡排序和选择法排序5 主函数中依据用户不一样选择实施不一样操作可经过“多分支选择语句switch”实现二、 概要设计1系统功效组成框图通讯录管理系统录入显示查询删除修改排序姓名升序姓名降序电话号码升序电话号码降序按姓名查询按电话号码查询2数据结构设计通讯录为结构体,组员包含姓名、电话号码、住址struct 结构体名 姓名类型定义; 电话号码类型定义; 住址类型定义; ;3模块功效说明本程序包含七个组要模块31主程序模块main() 清屏并显示主菜单提醒用户选择所要实施操作 依据用户选择实施对应模块32录入模块实现通讯信息录入33显示模块实现通讯录信息显示34查询模块按用户
3、指定要求(姓名或电话号码)查询指定对象通讯信息35删除模块删除对应对象通讯信息36修改模块修改对应对象通讯信息37排序模块按用户指定要求(姓名或电话号码)将通讯信息进行排序三、 具体设计1、通讯录类型定义typedef struct person char name10; /* 姓名 */ char tel20; /* 电话号码 */ char addr50; /* 住址 */ PERSON;2、通讯录基础操作实现void showTitle(); /* 显示标题行 */void sortSubMenu(); /* 排序菜单 */void inputFileName(); /* 输入通讯录文件
4、名 */void createBook(); /* 新建通信录 */void displayBook();/* 显示通信录信息*/void searchBook(); /* 按姓名查找统计 */void appendBook(); /* 添加统计 */void modifyBook(); /* 依据姓名修改统计 */void deleteBook(); /* 按姓名删除统计 */void saveBook(PERSON *, int); /* 保留通信录 */int loadBook(PERSON *); /* 装载通信录 */void swap(PERSON *, PERSON *); /*
5、 交换统计 */void sDescByName(); /* 按姓名降序排序 */void sAscByName(); /* 按姓名升序排序 */void sDescByTelephone(); /* 按电话号码降序排序 */void sAscByTelephone(); /* 按电话号码升序排序 */3、程序具体代码/* 源程序名:myfile.C程序功效:编程建立一通讯簿,存放有姓名、电话号码、住址,完成新建、查找、添加、修改、删除及排序等功效。*/#include /* 标准I/O函数 */#include conio.h /* 屏幕操作函数 */typedef struct perso
6、n char name10; /* 姓名 */ char tel20; /* 电话号码 */ char addr50; /* 住址 */ PERSON;char filename20;FILE *fp;void showTitle(); /* 显示标题行 */void sortSubMenu(); /* 排序菜单 */void inputFileName(); /* 输入通讯录文件名 */void createBook(); /* 新建通信录 */void displayBook(); /* 显示通信录信息 V1 */void dispBook();/* 显示通信录信息 V2*/void se
7、archBook(); /* 按姓名查找统计 */void appendBook(); /* 添加统计 */void modifyBook(); /* 依据姓名修改统计 */void deleteBook(); /* 按姓名删除统计 */void saveBook(PERSON *, int); /* 保留通信录 */int loadBook(PERSON *); /* 装载通信录 */void swap(PERSON *, PERSON *); /* 交换统计 */void sDescByName(); /* 按姓名降序排序 */void sAscByName(); /* 按姓名升序排序 *
8、/void sDescByTelephone(); /* 按电话号码降序排序 */void sAscByTelephone(); /* 按电话号码升序排序 */* 输入通讯录文件名 */void inputFileName() printf(nInput FileName(请输入通讯录文件名):); scanf(%s,filename);/* 新建通信录 */void createBook() PERSON one;fp = fopen(filename, wb);if(fp= = NULL) printf(n不能建立通讯簿!); exit(0); clrscr();printf(nInput
9、 Name, Telephone, Address(0-End)请输入姓名、电话号码及住址(以0结束): n); scanf(%s, one.name); while(strcmp(one.name, 0)!0) scanf(%s%s, one.tel, one.addr); fprintf(fp, %-10s %-20s %-50s, one.name, one.tel, one.addr); scanf(%s, one.name); fclose(fp);/* 显示表头 */void showTitle() clrscr(); gotoxy(20, 5); printf(%sn,TXL(通
10、 讯 簿); printf(%50sn,=); printf(%-10s%-20s%-50sn, Name, Telephone, Address);/* 交换统计*/void swap(PERSON *pi, PERSON *pj) PERSON temp; /* 临时变量做交换数据用 */ strcpy(temp.name, pi-name); strcpy(temp.tel, pi-tel); strcpy(temp.addr, pi-addr); strcpy(pi-name, pj-name); strcpy(pi-tel, pj-tel); strcpy(pi-addr, pj-a
11、ddr); strcpy(pj-name, temp.name); strcpy(pj-tel, temp.tel); strcpy(pj-addr, temp.addr);/* 保留函数,参数为指向结构体数组指针和统计数 */void saveBook(PERSON *p, int recordNum) int i; FILE *fp; /*指向文件指针*/fp = fopen(filename, wb);if(fp= = NULL) /*打开文件,并判定打开是否正常*/ printf(can not open filen);/* 打开文件犯错 */ exit(1); /*退出*/ /* 保
12、留文件信息 */ for(i = 0; i name, p-tel, p-addr); p+; fclose(fp);/*关闭文件*/* 读入函数,参数为指向结构体数组指针,返回统计数 */int loadBook(PERSON *p) int recordNum; /* 统计统计数 */ FILE *fp; /* 指向文件指针 */fp = fopen(filename, rb)if(fp= = NULL) /* 打开文件 */ printf(can not open filen); /*不能打开*/ exit(0); /*退出*/ recordNum = 0; while(feof(fp)
13、!=1)/*未到文件末尾*/ fscanf(fp, %s%s%sn, p-name, p-tel, p-addr);/*从文件读入统计*/ p+; recordNum+; fclose(fp); return recordNum; /*返回统计数*/* 显示通信录信息,一次性读入后再显示,适适用于小文件 */void displayBook() PERSON ones50; int count = 0;int recordNum;recordNum = loadBook(ones); /* 装载整个文件统计 */ showTitle(); while(count recordNum) prin
14、tf(%-10s%-20s%-50s, onescount.name, onescount.tel, onescount.addr); count+; if (!(count % 10) printf(nPress any key to continue.nn); getch(); showTitle(); getch();/* 按姓名查找统计 */void searchBook() int k=0; char namekey10;PERSON one; printf(n请输入姓名:); scanf(%s,namekey);fp=fopen(filename, rb);if(fp= =NULL
15、) printf(n不能打开通讯簿!); exit(); while(!feof(fp)/*未到文件末尾*/ fscanf(fp, %s%s%sn, one.name, one.tel, one.addr); if(strcmp(namekey,one.name)= =0) printf(nn已查到,统计为:); printf(n%-10s%-18s%-50s, one.name, one.tel, one.addr); k=1; if(k=0) printf(nn对不起,通讯簿中没有此人统计。); fclose(fp); getch();/* 添加统计 */void appendBook()
16、/* 按姓名修改统计 */void modifyBook() /* 按姓名删除统计 */void deleteBook()/* 选择排序 */* 按姓名进行降序排序 */void sDescByName() int i, j, k; int recordNum; /* 统计数 */ PERSON ones50; recordNum = loadBook(ones); /* 装载整个文件统计 */ for(i = 0; i recordNum - 1; i+) k = i; for(j = i+1; j recordNum; j+) if(strcmp(onesk.name, onesj.nam
17、e) AscByName 2 DescByName 3 AscByTelephone 4 DescByTelephone */void main()/*主程序*/ clrscr(); inputFileName(); char temp20,ch; while(1) clrscr(); /*清屏幕*/ gotoxy(1, 1); /*移动光标*/ textcolor(WHITE); /*设置文本显示颜色为白色*/ textbackground(BLUE); /*设置背景颜色为蓝色*/ window(1, 1, 99, 99); /* 制作显示菜单窗口,大小依据菜单条数设计*/ clrscr()
18、; printf(nnnnn); printf(t* welcome to use TXL manage *n); printf(t* *n); printf(t* = *n); printf(t* *n); printf(t* 1 createBook 2 appendBook *n); printf(t* 3 searchBook 4 modifyBook *n); printf(t* 5 deleteBook 6 sortBook *n); printf(t* 7 displayBook 0 exit *n); printf(t* - *n); printf(t Please input
19、 which you want(0-7):); ch = getch(); switch(ch) case 1: createBook(); break; case 2: appendBook(); break; case 3: searchBook(); break; case 4: modifyBook(); break; case 5: deleteBook(); break; case 6: sortSubMenu(); break; case 7: displayBook(); break; case 0: exit(0); default: continue; SDescByNam
20、e SDescByTelephone sAscByName sAscByTelephoneCreatBookDisplayBookSearchBookAppendBookModifyBooksortSubMenuDeleteBookmain4、函数调用五、设计和调试分析1、因为每个通讯统计包含三个组员,所以其类型为自定义结构体类型2、为方便调试及扩充程序功效,采取了模块化程序设计方法(每个同学依据自己设计和调试情况进行充实)六、用户手册1. 本程序运行环境为DOS操作系统,实施文件为myfile.exe。2. 进入程序myfile.exe后进入界面,提醒输入结果文件名:3. 进入系统主菜单,依据需要实施操作输入对应数字:1:创建通讯录 2:添加统计 3:按姓名查找统计 4:修改统计5:删除统计 6:排序 7:显示全部 8:退出当输入数字6进行排序操作时,会出现子菜单提醒选择排序方法:1:按姓名升序排列 2:按电话号码升序排列3:按姓名降序排列 4:按电话号码降序排列七、测试数据姓名 电话号码 住址hyh 7799000 JG-1-203zhangsan 5566435 XS-10-405liwen 4 XS-5-304八、附件myfile.c /*源程序*/readme.txt /*程序说明*/九、心得体会汇报不许可雷同,不然无法给成绩!