软件技术基础课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件技术基础
课程设计报告题目:单位员工通讯录管理系统
所在学院:信息工程学院班级:1111111111
学号:1111111111
姓名:111111
指导教师:111111
2015年12月30 日
目录
一、题目概述与需求分析 (1)
二、数据结构设计(逻辑结构与物理结构) (1)
三、代码实现 (3)
四、测试结果 (18)
五、总结 (21)
一、题目概述与需求分析
本课程设计为单位建立一个员工通讯录管理系统,可以查询每个员工的编号、姓名、办公室电话号码、手机号码及电子邮箱。
其功能包括:
(1)通讯录链表的建立。
(2)员工通讯信息的查询、修改、插入与删除。
(3)显示通讯录表的信息。
(4)查询员工编号重复
二、数据结构设计(逻辑结构与物理结构)
2.1 物理结构设计
图1
2.2 逻辑结构设计
(1)创建员工信息数据结构体DataType,其中包括员工编号、员工姓名、办公室电话号码、手机号码、电子邮箱信息。创建节点结构体,其中包括数据域和指针域。代码如下:
typedef struct
{
char num[5]; /*员工编号*/
char name[10]; /*员工姓名*/
char phone[15]; /*办公室电话号码*/
char call[15]; /*手机号码*/
char e_mail[30]; /*电子邮箱*/
}DataType;
typedef struct node
{
DataType data; /*结点的数据域*/
struct node *next; /*结点的指针域*/
}ListNode;
(2)建立通讯录单链表。本设计运用尾插入法将新插入的结点接到单链表的尾部。核心部分代码如下:
rear->next=p;
rear=p;
(3)插入结点。结点插入式按照通讯录中员工编号的顺序进行插入,以保证其编号按照从小到大顺序依次排列,方便查询。核心代码如下:p1=head;
p2=p1->next;
while(p2!=NULL&&strcmp(p2->data.num,p->data.num)<0)
{
p1=p2; //p1指向刚访问过的结点
p2=p2->next; //p2指向表的下一个结
}
p1->next=p; //插入p所指向的结点
p->next=p2; //连接表中剩余部分
(4)删除结点。从头结点处依次访问表中的结点并与需要删除的结点进行比较,信息吻合则删除。核心代码如下:
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
p=NULL;
(5)查询结点。从头结点处依次访问表中的结点并与需要查询的结点进行比较,信息吻合则返回一个指针。核心代码如下:
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
p=NULL;
return p;
(6)输出信息。从头结点处依次访问表中的结点并输出,直到表尾。
(7)修改结点信息。从头结点处依次访问表中的结点,直到找到需要修改的结点并修改。核心代码如下:
printf("修改员工姓名\n");
strcpy(q->,k);
printf("请输入修改后的姓名:\n");
getchar();
gets(k);
printf("\n");
strcpy(q->,k);
(8)查询重复信息。在创建链表和添加结点的时候调用查询函数,查询是否有重复的员工编号,重复则会跳出一个重新输入提示框。核心代码如下:if(judge(head,p)==1)
三、代码实现
#include
#include
#include
/*员工通讯录信息的结构类型定义*/
typedef struct
{
char num[5]; /*员工编号*/
char name[10]; /*员工姓名*/
char phone[15]; /*办公室电话号码*/
char call[15]; /*手机号码*/
char e_mail[30]; /*电子邮箱*/
}DataType;
//节点定义
typedef struct node
{
DataType data; /*结点的数据域*/
struct node *next; /*结点的指针域*/
}ListNode;
ListNode *head;
ListNode *p;
typedef struct node linklist;
int menu(); //菜单函数
ListNode *createlist(); //通讯录单链表函数
void Add(ListNode *head,ListNode *p); //插入函数
void Delete(ListNode *head); //删除函数
ListNode *research(ListNode *head); //查找函数
void print_list(ListNode *head); //显示信息函数