课程设计(论文)-电话簿管理系统.doc
电话簿管理系统-课程设计报告学生成绩管理系统课程设计报告 编写人: 同组成员: (课程设计负责人) 完成日期: 2010/12/18 辅导教师: 批阅日期: 分数: 一、 功能描述此电话簿管理系统主要利用线性表实现,由如下六个功能模块实现1、 输入模块。主要完成将电话记录存入线性表的工作。2、 输出模块。主要完成将所有记录输出显示的功能。3、 建表模块。主要完成建立线性表,开辟空间的功能。4、 插入模块。主要完成插入记录的功能。5、 查询功能。主要完成查询记录的功能。6、 删除功能。主要完成从线性表中删除记录的功能。电话簿管理系统输入记录模块建表模块输出记录模块建表模块建表模块从文件读入从键盘输入插入模块查询模块删除模块 二、 数据结构设计电话簿信息结构体 struct telbook /定义一个电话簿结构体,用来存储电话簿信息/ /定义各结构体成员的数据类型/char tel20; /定义电话号码/char name20; /定义机主姓名/char sex10; /定义机主性别/char addr50; /定义所在地址/; 三、 函数功能描述1、建表:函数原型:struct telbook *initsl(int m) /建立线性表/struct telbook *v;v=(struct telbook*)malloc(m*sizeof(struct telbook); /分配此结构体一定的空间,并初始化/ return v;参数含义:m线性表的空间大小 V指向线性表表头的指针2、Input1( )函数原型:void input1(struct telbook *v,int m,int n) /输入函数1,由键盘输入 int i;if(n<=0) printf("输入错误"); else if(n>m) printf("n输入错误,最多只能输入%d个相关信息!",m); /线性表溢出else for(i=0;i<n;i+) /可以多次输入printf("n你即将输入第%d个信息n: ",i+1); printf("n姓名,性别,电话,地址:"); scanf("%s %s %s %s",vi.name,vi.sex,vi.tel,vi.addr); getchar(); /输入相关信息 printf("n OK!"); 参数含义:m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置3、Input2()函数原型:void input2(struct telbook *v,int m,int n) /输入函数2,由文件导入 int i; FILE *fp; /定义一个指向文件的指针 if(fp=fopen("telbook.txt","r")=NULL) printf("n打开文件失败!"); exit(0); for(i=0;i<n;i+)fscanf(fp,"%s%s%s%s",vi.name,vi.sex,vi.tel,vi.addr);fprintf(fp,"%s%s%s%s",&vi.name,&vi.sex,&vi.tel,&vi.addr);printf("n成功从文件中导入了%d个信息!n",n);参数含义:m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置 4、output()函数原型:void output(struct telbook *v,int m,int n) / 输出函数int i; printf("n以下是全部电话簿信息:"); printf("n-"); printf("nt姓名 t性别 t电话 t地址t"); for(i=0;i<n;i+) printf("nt%st%st%st%st",vi.name,vi.sex,vi.tel,vi.addr); printf("n-");参数含义:m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置5、insert() 函数原型: void insert(struct telbook *v,int m,int n) /定义插入函数int i; if(n>m) printf("n存储空间已满,请停止插入!"); /实际长度超出了表的容量 else printf("n你还可以添加%d个信息:",m-n+1); /输入信息 printf("n姓名,性别,电话,地址:"); scanf("%s %s %s %s",&vi.name,&vi.sex,&vi.tel,&vi.addr); getchar(); printf("n成功添加信息n");参数含义:m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置6、search1()函数原型:void search1(struct telbook *v,int m,int n) /按电话号码查找int i;char tel120;printf("n请输入你要查找信息的电话号码:");scanf("%s",&tel1);for(i=0;i<=n;i+) if(strcmp(tel1,vi.tel)=0l) break;if(i>n) printf("n对不起,没有你要查找的相关信息!"); else printf("n你所查找的信息如下:"); printf("nt姓名 t性别 t电话 t地址t"); printf("nt%st%st%st%st",vi.name,vi.sex,vi.tel,vi.addr); 参数含义:tel1查找时输入的电话号码 m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置7、search2()函数原型:void search2(struct telbook *v,int m,int n) /按姓名查找int i;char name120;printf("n请输入你要查找姓名:");scanf("%s",name1);for(i=0;i<=n;i+) if(strcmp(name1,vi.name)=0) break; if(i>n) printf("n对不起,没有你要查找的信息!"); else printf("n你所查找的信息如下:"); printf("nt姓名 t性别 t电话 t地址t"); printf("nt%st%st%st%st",vi.name,vi.sex,vi.tel,vi.addr); 参数含义:name1查找时输入的姓名 m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置8、search3()函数原型:void search3(struct telbook *v,int m,int n) /按地址查找int i;char addr150;printf("n请输入你要查找地址:");scanf("%s",addr1);for(i=0;i<=n;i+) if(strcmp(addr1,vi.addr)=0) break;if(i>n) printf("n对不起,没有你要查找的信息!"); else printf("n你所查找的信息如下:"); printf("nt姓名 t性别 t电话 t地址t"); printf("nt%st%st%st%st",vi.name,vi.sex,vi.tel,vi.addr); 参数含义:addr1查找时输入的地址 m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置9、delet1()函数原型;void delet1(struct telbook *v,int m,int n) /按电话号码删除相关信息int i;char tel120;printf("n请输入你想要删除信息的电话号码:"); /输入要删除信息的电话号码scanf("%s",&tel1);for(i=0;i<n;i+) if(strcmp(tel1,vi.tel)=0) /从第一个开始查找,找到后删除 break; if(i>=n) printf("n没有找到你要删除的相关信息!"); /若超出了表,则不存在此号码 else for(i=0;i<n;i+) vi=vi+1;printf("n删除成功!");参数含义:tel1删除时输入的电话号码 m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置10、delet2()函数原型:void delet2(struct telbook *v,int m,int n) /按姓名删除信息int i;char name120;printf("n请输入你要删除的信息的机主姓名:"); /输入要删除信息的机主姓名scanf("%s",name1); for(i=0;i<n;i+) if(strcmp(name1,vi.name)=0) break; /从第一个开始查找,找到后删除 if(i>=n) printf("n对不起,没有找到你要删除的信息!"); /若超出了表,则存在此姓名 else for(i=0;i<n;i+)vi=vi+1;printf("n删除成功!");参数含义:name1删除时输入的姓名 m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置11、delet3()函数原型:void delet3(struct telbook *v,int m,int n) /按地址删除信息int i;char addr120;printf("n请输入你要删除的信息的机主姓名:"); /输入要删除信息的地址scanf("%s",addr1);for(i=0;i<n;i+)if(strcmp(addr1,vi.addr)=0) break; /从第一个开始查找,找到后删除 if(i>=n) printf("n对不起,没有找到你要删除的信息!"); /若超出了表,则不存在此地址 else for(i=0;i<n;i+)vi=vi+1;printf("n删除成功!");参数含义:addr1删除时输入的地址 m线性表的空间大小 v指向线性表表头的指针n线性表的长度i电话簿信息在表中的位置五、程序实现1、源代码分析程序预处理包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。加载头文件:#include <stdio.h>#include <stdlib.h>#include <malloc.h>定义结构体:struct telbook /定义一个电话簿结构体,用来存储电话簿信息/ /定义各结构体成员的数据类型/char tel20; /定义电话号码/char name20; /定义机主姓名/char sex10; /定义机主性别/char addr50; /定义所在地址/; 定义常量和变量,并对它们进行初始化工作:struct telbook *initsl(int m) /建立线性表/struct telbook *v; v=(struct telbook*)malloc(m*sizeof(struct telbook); / 分配此结构体一定的空间,并初始化/ return v;主函数main() void main() struct telbook *v; /定义结构体 int m,n,x,ans; n=0; while(1) /进入循环 system("cls"); menu(); /调用菜单 scanf("%d",&ans);/选择菜单内容 switch(ans) /进入选择结构 case 1: printf("n请输入该表允许输入的最大容量:");/ 确定表的容量 scanf("%d",&m); v=initsl(m,n); / 表初始化 printf("n建表成功!n:"); system("pause"); break; case 2: printf("n 请选择输入方式: n"); / 选择输入方式 printf("n 1 由键盘输入信息 2 由文件导入信息 n"); printf("n "); printf("t请选择:"); scanf("%d",&x); switch(x) case 1:printf("n请输入你要输入的人数:"); scanf("%d",&n); input1(v,m,n); /调用输入函数1,由键盘输入 break; case 2:printf("n请输入你要输入的人数:"); scanf("%d",&n); input2(v,m,n); /调用输入函数2,由文件导入 printf("n导入的信息为:"); output(v,m,n); break; system("pause"); break; case 3: n=n+1; insert(v,m,n); /调用插入函数 system("pause"); output(v,m,n); break; case 4: printf("nt 请选择删除方式: n"); printf("t 1 按电话删除 n"); printf("t 2 按姓名删除 n"); printf("t 3 按地址删除 n"); printf("t n"); printf("t请选择:"); scanf("%d",&x); switch(x) case 1: delet1(v,m,n);/调用删除函数1,按电话号码删除 n-; break; case 2: delet2(v,m,n);/调用删除函数2,按姓名删除 n-; break; case 3: delet3(v,m,n);/调用删除函数3,按地址删除 n-; break; system("pause"); output(v,m,n); break;case 5: printf("nt 请选择查询方式: n"); printf("t 1 按电话查询 n"); printf("t 2 按姓名查询 n"); printf("t 3 按地址查询 n"); printf("t n"); printf("t请选择:"); scanf("%d",&x); switch(x) case 1: search1(v,m,n);/调用查找函数1,按电话号码查找 stem("pause"); break; case 2: search2(v,m,n);/调用查找函数2,按姓名查找 system("pause"); break; case 3: search3(v,m,n);/调用查找函数3,按地址查找 system("pause"); break; break; case 6: output(v,m,n); /调用输出函数,显示全部学生信息 printf("n"); system("pause"); break; case 7: printf(" 请输入88 n");/输入相应的信息,退出系统 scanf("%d",&ans); printf(" 谢谢使用本系统! 欢迎下次使用! n"); break;if(ans=88) /若输入为“88”,则跳出循环 break; else ; /否则继续主菜单界面运行结果图为:1、建表:2、 输入信息:(1) 键盘输入:(2) 文件导入:3、 插入信息:4、 删除信息:(1)按电话号码删除:(2)按姓名删除:(3)按地址删除:5、查找信息(1)按电话号码查找:(2)按姓名查找:(3) 按地址查找:6、输出全部信息7、退出系统六、不足点:插入有问题,插入元素不成功!第 18 页 共 18 页