当前位置:文档之家› 学生通讯录管理系统广东海洋大学

学生通讯录管理系统广东海洋大学

《程序设计基础》课程设计学生姓名张三学生学号201311610000所在专业电子信息工程所在班级1132班任课老师李四实习时间2014年 6 月 7 日一.功能需求分析学生通讯录管理系统是对学生的基本信息(包括学号,姓名,年龄,性别,电话和地址)的管理。

开发工具采用Visual C++ 6.0,主要实现对于学生的学号,姓名等自然信息进行增加、查询、修改、删除及保存到文件等操作。

系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项、调用系统提供的管理功能。

主要功能需求描述如下。

1.系统主控平台允许用户选择想要的操作,包括添加联系人、显示联系人、查询联系人、格式化通讯录、删除联系人以及推出通讯录管理系统等。

通过输入相应的序号选择相应的操作。

2.添加联系人用户根据提示输入学生的学号、姓名、年龄、性别、电话以及地址等。

用户可根据需要输入所需数量的学生信息,可根据提示输入学生数量或者继续其他操作。

输入完的学生信息会自动保存到相应的文本文件中,然后等待下一步操作。

3.显示联系人在选择了显示联系人后,系统将将文本文件中的学生信息调出显示,如果没有数据,系统则会提示“文件为空。

”4.查询联系人可以分别根据姓名、学号从文本文件中对学生的所有信息进行查询,如果没有查询到任何信息,系统将会提示“没有找到符合您要求的联系人,请核查您的信息!!”,反之将会输出查询的学生信息。

5.初始化通讯录选择该项操作将会初始化文本文件中的所有信息,请慎重操作。

选择该项操作时,系统将会提示“是否初始化通讯录(y或n)”,防止错误操作产生不良后果。

选择y时,将会初始化文本文件并提示“初始化成功”。

6.退出主菜单退出通讯录管理系统二. 系统总体结构分析根据实际情况,我们使用原型法,即以少量代价快速地构造一个可执行的软件系统模型,使用户和开发人员可以较快的确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐加上去,直到所有的性质全部满足。

以下为系统逻辑模型图:1.数据类型的选择struct studentchar xh[20];char xm[10];char nl[5];char xb[10];char dh[20];char dz[50];2.主要函数原型char caidan();//菜单void add();//增加联系人函数void print(struct student a[],int);//输入所有联系人void dele(struct student a[],int);//删除联系人void chazhao(struct lianxiren a[],int);//查找联系人void chazhao_xm(struct lianxiren a[],int n);//用名字查找void chazhao_xh(struct lianxiren a[],int n);//用年龄查找void chazhao(struct student t[],int n)//格式化通讯录3. 调用到的函数通过switch(表达式){case 常量表达式1:语句1case 常量表达式2:语句2case 常量表达式n:语句n}调用六个函数。

void add();void print(struct student a[],int);void dele(struct student a[],int);void chazhao(struct student a[],int);void chazhao_xm(struct student a[],int n);void chazhao_xh(struct student a[],int n);void chazhao(struct student t[],int n);4模块设计与介绍对本系统的功能进行分析后可作如下的模块化设计:输入模块实现功能:按顺序将有学号(xh)、姓名(xm)、年龄(nl)、性别(xb)、电话(dh)、地址(dz)依次输入,并建立链表将其连接。

当输入数据完毕时Enter,输入结束。

删除模块实现功能:在已经存储的文件中删除指定的通信录信息,并释放内存空间。

删除所有相关通信录信息。

查找模块实现功能:在已经存储的文件中查找指定的通信录信息。

可以按照查找姓名或方法进行。

输出模块实现功能:在输入特定的文件名之后,输出该文件中所包含的全部通信录信息。

添加模块实现功能:添加相应信息保存操作,链表中的信息以文件形式被长期。

保存。

格式模块实现功能:在已经存储的文件中删除全部的通讯录信息,并释放内存空间。

删除所有相关通讯录信息。

主序模块实现功能:完成系统的界面处理,包括开始界面和主菜单界面。

三.模块介绍和总体实现1. Add( )增加模块建立链表的具体操作就是逐一输入各结点数据,并建立其前后相链的关系。

void add(){int i;FILE *fp;if((fp=fopen("通讯录.txt","a"))==NULL){printf("无法打开文件,按任意键退出!!\n");char a;scanf("%c",&a);exit(0);}int num;printf("您想要增加几个联系人:\n");scanf("%d",&num);struct student t[100];printf("请输入联系人信息\n");printf("学号名字年龄性别电话地址\n");printf("--------------------------------------------------------\n");for(i=0;i<num;i++){scanf("%s %s %s %s %s %s",t[i].xh ,t[i].xm ,t[i].nl ,t[i].xb ,t[i].dh ,t[i].dz );printf("_________________________________________________\n");}for(i=0;i<num;i++){fprintf(fp,"\n");fprintf(fp,"%s %s %s %s %s %s",t[i].xh ,t[i].xm ,t[i].nl ,t[i].xb ,t[i].dh ,t[i].dz );}printf("******已成功添加%d个联系人******\n",num);fclose(fp);}2. dele( )删除模块删除模块:删除链表节点,通过此节点指针的上一个节点找到此节点next指针,删除节点指针p和后续节点指针p->next,后把next指向p->next。

在释放p指针。

要完成的是链表的删除操作,只需修改链表中要删除结点的前一个结点的链指针。

使之指向被删除结点的后面一个结点即可。

void dele(struct student a[],int n){struct student temp[5];char mingzi[20];int i,j=0,s=0;printf("输入你要删除人得名字:");scanf("%s",mingzi);printf("\n");for(i=0;i<n;i++){if(strcmp(mingzi,a[i].xm)!=0){strcpy(temp[j].xh,a[i].xh);strcpy(temp[j].xm,a[i].xm);strcpy(temp[j].nl,a[i].nl);strcpy(temp[j].xb,a[i].xb);strcpy(temp[j].dh,a[i].dh);strcpy(temp[j].dz,a[i].dz);j++;}else{s++;printf("你要删除得人得信息是:\n");printf("--------------------------------------------------------\n");printf("学号名字年龄性别电话地址\n");printf("--------------------------------------------------------\n");printf("%-12s%-10s%-8s%-15s%-20s\n",a[i].xh,a[i].xm,a[i].nl,a[i].xb,a[i].dh,a[i].dz);}}FILE *fp;if((fp=fopen("通讯录.txt","w"))==NULL){printf("无法打开文件,按任意键退出!!\n");char a;scanf("%c",&a);exit(0);}for(i=0;i<j;i++){fprintf(fp,"\n");fprintf(fp,"%s %s %s %s%s %s",temp[i].xh ,temp[i].xm ,temp[i].nl ,temp[i].xb,temp[i].dh ,temp[i].dz);}if(s!=0) printf("****删除成功!!!****\n");else printf("您所要删除的联系人不存在,请核查拼写及大小写\n");fclose(fp);}3. print( )输入模块将最终想要保留的数据信息保存于文件中。

void print(struct student t[],int n){if(n==0){printf("*****文件为空!!****\n");return;}int i;printf("****************************通讯录********************************\n");printf("学号名字年龄性别电话地址\n");printf("__________________________________________________________________\n" );for(i=0;i<n;i++){printf("%-20s%-10s%-8s%-6s%-15s%-20s\n",t[i].xh,t[i].xm,t[i].nl,t[i].xb,t[i].dh,t[i].dz);printf("\n");}}4. search ( )查找模块链表的查找操作是指在已知链表中查找值为某指定值的结点。

相关主题