当前位置:文档之家› 课程设计--通讯录管理的设计与实现

课程设计--通讯录管理的设计与实现

课程设计--通讯录管理的设计与实现课程设计(大作业)报告课程名称:数据结构课程设计设计题目:通讯录管理的设计与实现院系:信息技术学院班级:10级计算机应用技术班设计者:李婷学号:201011020120指导教师:阿圆设计时间:2011-12-26~2011-12-30信息技术学院昆明学院课程设计(大作业)任务书姓名:李婷院(系):信息技术学院专业:计算机应用技术学号:201011020120任务起止日期:2011-12-26~2011-12-30课程设计题目:通讯录管理的设计与实现课程设计要求:1)问题描述通讯录管理系统一般包括通讯者结点信息的插入、查询、删除、输出功能,通讯者结点的信息一般包括编号、姓名、性别、电话、地址等项。

2) 基本功能(1)通讯录的建立;(2)通讯者信息的插入;(3)通讯者信息的查询(按姓名或编号查询);(4)通讯者信息的删除;(5)通讯录信息的输出;工作计划及安排:1、问题分析和任务定义;(0.5天)2、数据类型和结点结构设计;(0.5天)3、算法设计与分析(1.5天)4、编码实现和上机调试;(1.5天)5、总结和整理课程设计报告。

(1天)指导教师签字2011年12 月29 日课程设计(大作业)成绩学号:201011020120 姓名:李婷指导教师:阿圆课程设计题目:通讯录管理的设计与实现总结:我们经过一个星期的时间把我们的通讯录管理的设计与实现做了出来,时间有些赶,做出来的有点不是很好,我们主要做了菜单模块:显示通讯员信息的菜单,共用户选择所需功能;输出模块:添加删除功能:能根据通讯员人事的变动情况,添加删除记录,利用void Add(Link l)实现添加,利用void Del(Link l)实现删除;显示模块:把通讯员的信息显示出来,通过void Disp(Link l)来实现;查询功能:能根据编号和姓名进行查询通过void Qur(Link l)实现;编辑功能(高级):根据查询对相应的记录进行修改,并存储;保存功能:能对输入的数据进行相应的存储;而我主要的是完成主菜单,添加,删除,显示四个模块和其他的模块的完善,我们分工合作,而另一些部分,我虽然没写,但是组员是在一边写一边跟我讲解每条语句的意思是什么,而我写的时候,组员也在一边听,所以我们都相当于写了全部的模块。

指导教师评语:成绩:填表时间:指导教师签名:课程设计(大作业)报告一、题目分析根据题目要求,人事信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加,删除,查询,编辑,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。

另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件中重新储存,这样的方法容易理解、容易编写;而我们使用的是单链表的形式,它的好处就是对于频繁进行插入与删除的线性表适用。

二、总体设计思路根据以上需求分析,将程序分成以下几个模块:1.添加和删除****添加人员信息并保存(1)****按名称和编号查询与删除记录并保存(2)2.查询与编辑****按名称和编号查询****重新编辑信息并保存3.主菜单4. 文件的导入5. 文件的保存6.信息的显示Y三、实验环境根据N选者下列执行添加删除查询修改插入显示保存按职工号按姓名号按职工号按职工号是否创是否继续YN结束开始Visual C++ 四、方案比较无法运行的程序代码1.struct employee//定义一个employee的结构体{char num[10];//通讯员编号char name[15];//通讯员姓名char sex[15];//通讯员性别long int telephone;//通讯员电话char address[30];//通讯员地址int age;//通讯员年龄}typedef struct node {struct employee 正确运行的程序代码1.struct employee{char name[15]; /*通讯员姓名*/char num[10];/* 工号*/char sex[4]; //通讯员性别long int telephone;//通讯员电话char address[30];//通讯员地址int age;//通讯员年龄};typedef struct node {struct employee data;data;struct node *next;//建立一个链表}Node;错误点:意外的结构节点('struct' 'node')2.void Disp(Node * employee)//输出通讯员信息{Node *p;p=employee->next; if(!p){printf("\n>>>>>>>>>提示:没有资料可以显示!\n");return;}struct node *next; }Node,*Link;2. void Disp(Link l) //显示单链表l中存储的通讯员记录,内容为employee结构中定义的内容{int count=0;Node *p;p=l->next; // l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息if(!p)/*p==NULL,NUll在stdlib中定义为0*/ {错误点:发现“{”在文件范围内(缺少函数头?)printf("\n=====>提示:没有通讯员记录可以显示!\n");return;}五、程序代码//C语言课程设计职工信息管理系统-单链表实现#include "stdio.h"#include "stdlib.h"#include "string.h"int saveflag=0; /*是否需要存盘的标志变量*/ struct employee{char name[15]; /*通讯员姓名*/char num[10];/* 工号*/char sex[4]; //通讯员性别long int telephone;//通讯员电话char address[30];//通讯员地址int age;//通讯员年龄};typedef struct node{struct employee data;struct node *next;}Node,*Link;//Link l (注意是:字母l不是数字1)void add(Link l);void disp(Link l); //查看职工所有信息void del(Link l); //删除功能Node* Locate(Link l,char findmess[],char nameornum[]);void Qur(Link l); //查询功能void Tongji(Link l); //统计void Sort(Link l); //排序void Modify(Link l); //修改功能void save(Link l); //将单链表l中的数据写入文件void printe(Node *p); //本函数用于打印链表中某个结点的数据内容*///以下4个函数用于输出中文标题void printstart();void Wrong();void Nofind();void printc();void menu(){printf("\t******************************* **********************************\n"); printf("\t**\n");printf("\t* 通讯员信息管理系统*\n"); printf("\t**\n");printf("\t* [1] 增加职工信息[2] 删除职工信息*\n");printf("\t* [3] 查询职工信息[4] 修改职工信息*\n");printf("\t* [5] 插入职工记录[6] 保存职工信息*\n");printf("\t* [7] 显示数据[0] 退出系统*\n");printf("\t**\n");printf("\t******************************* **********************************\n");} //void menu菜单结束void Disp(Link l) //显示单链表l中存储的通讯员记录,内容为employee结构中定义的内容{int count=0;Node *p;p=l->next; // l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息if(!p) /*p==NULL,NUll在stdlib中定义为0*/{printf("\n=====>提示:没有通讯员记录可以显示!\n");return;}printf("\t\t\t\t显示结果\n");printstart(); //打印横线printc(); //打印各学科标题printf("\n");while(p) //逐条输出链表中存储的通讯员信息{printe(p);p=p->next;}printstart();printf("\n");} //void Disp结束void printstart()//打印横线{printf("-----------------------------------------------------------------------\n");}void Wrong()//如果你的输入有错误的话就会输出{printf("\n=====>提示:输入错误!\n");}void Nofind()//通讯员信息找不到{printf("\n=====>提示:没有找到该职工!\n"); }void printc() /* 本函数用于输出中文*/{printf(" 工号\t 姓名\t 性别\t 电话\t 住址\t 年龄\n");}void printe(Node *p)/* 本函数用于打印链表中某个结点的数据内容*/{printf("%s\t%s\t%s\t%d\t%s\t%d\t\n",p->d ata.num,p->,p->data.sex,p->data.tele phone,p->data.address,p->data.age);}//Locate(l,findmess,"num");/* 该函数用于定位连表中符合要求的结点,并返回该指针*/Node* Locate(Link l,char findmess[],char zcornum[]){Node *r;if(strcmp(zcornum,"num")==0) /* 按工号查询*/{r=l->next;while(r!=NULL){if(strcmp(r->data.num,findmess)==0) /*若找到findmess值的工号*/return r;r=r->next;}}else if(strcmp(zcornum,"name")==0) /* 按姓名查询*/{r=l->next;while(r!=NULL){if(strcmp(r->,findmess)==0) /*若找到findmess值的职工职称*/return r;r=r->next;}}return 0; /*若未找到,返回一个空指针*/}//add()函数中,无结点时,r指向list头,有节点时,r 指向末尾结点void Add(Link l) /* 增加通讯员信息*/{Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/char num[10];int flag=0;r=l;s=l->next; //链表没有结点时,s=null;/链表有结点时,指向第一个职工结点while(r->next!=NULL) //如果存在后继结点时,r指针后移一个r=r->next; /*将指针移至于链表最末尾,准备添加记录*/while(1){printf("请你输入工号(以'0'返回上一级菜单:)");scanf("%s",num);if(strcmp(num,"0")==0) //输入'0',跳出while(1),即跳出add()函数break;s=l->next; //作用每次从第一个结点开始找,看num是否重复。

相关主题