班级通讯录数据结构C语言.docx

上传人:b****6 文档编号:8499549 上传时间:2023-01-31 格式:DOCX 页数:16 大小:167.87KB
下载 相关 举报
班级通讯录数据结构C语言.docx_第1页
第1页 / 共16页
班级通讯录数据结构C语言.docx_第2页
第2页 / 共16页
班级通讯录数据结构C语言.docx_第3页
第3页 / 共16页
班级通讯录数据结构C语言.docx_第4页
第4页 / 共16页
班级通讯录数据结构C语言.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

班级通讯录数据结构C语言.docx

《班级通讯录数据结构C语言.docx》由会员分享,可在线阅读,更多相关《班级通讯录数据结构C语言.docx(16页珍藏版)》请在冰豆网上搜索。

班级通讯录数据结构C语言.docx

班级通讯录数据结构C语言

班级通讯录

1、设计目的

设计一个计算机管理系统对班级通讯录进行管理。

2、设计要求

一个学生的数据包括:

学号、姓名、电话号码、手机、QQ号。

要求设计一个计算机管理系统对班级通讯录进行管理,具有的功能是能够进行录入、修改、删除、查找和输出所有记录。

为提高数据的可访问性,电话号码、手机、QQ号建立索引表,索引表可以在维护数据时动态维护,也可能最后一次建立。

设计条件:

硬件条件:

(1)学生用微机

(2)多媒体教室(3)局域网环境

软件条件:

(1)WindowsXP中文操作系统

(2)TurboC3.0

3、课程设计的内容

3.1、需求分析:

随着科技的进步和信息产业的发展,通讯录成为了现代生活中的一个重要的工具。

利用通讯录管理系统对通讯录进行统一管理,包括添加,修改,查询记录等功能,实现通讯录管理工作的系统化,规范化和自动化,为生活提供便利。

在设计的通讯录中,学生学号,电话号码,手机号码,QQ均以数字的形式进行输入,学生姓名则以中文,英文输入均可进行记录,输出的形式与输入形式相同。

按要求,设计的通讯录管理系统可以实现添加、修改、删除、查找,对学号的排序和输出所有学生记录。

进行测试的数据和执行情况如下图所示:

程序主观图:

添加记录:

显示所有记录:

删除一条记录:

根据学号查找:

对记录的排序:

主要是对添加新纪录在链表中按升序排列,如新加李伟这条记录,对它采取排序,具体结果如下:

进行排序:

输入6即退出:

3.2、概要设计:

对该系统各种函数的定义在源代码给出,先给出函数的定义,然后给出菜单的执行函数,建立链表,并对各个功能的实现编出程序,直到调试成功为止。

3.3、详细设计

主要给出程序的流程图,如下所示:

菜单函数:

链表构造:

按学号显示学生数据:

删除记录:

显示所有信息:

排序:

3.4、程序调试与测试结果:

经过认真调试最终结果为正确。

如图:

3.5、结果分析:

在编译过程中遇到很多困难,程序也基本上符合要求,但是有一点目前还没解决,就是基于链表的修改还没掌握,因此花了很大的力气,但是还是没有完成,只好采取的修改方式为:

删除,添加,排序的方法对链表中的元素进行修改。

4、总结

本系统基本实现了班级通讯录系统的典型功能,如添加查找等功能,而且具有较高的安全性。

但是因为能力有限,还有部分功能未能完善,这些局限性都是有待逐步完善的方面。

而且通过这次课程设计,我培养了自己对C编程的兴趣,进一步了解了数据结构的特色和,编程能力也有所提高,但仍存在许多不足,不能独自编写完整代码,写代码要参考很多资料,所以今后应培养自己独立写代码的能力。

5、参考文献

[1]宁正元,王秀丽.算法与数据结构.北京:

清华大学出版社,2006

[2]姜灵芝,余键.C语言课程设计案例精编北京:

清华大学出版社,2008

6、附录

该程序的源代码:

#include

#include

#include

#include

#include

typedefstructstudent

{

charNumber[10];//学号

charname[20];//姓名

chartelephone[20];//电话号码

charcellphone[20];//手机号码

charQQ[10];//QQ

structstudent*next;

}student;

student*headLink;//链表表头指针

voidDesplayMenu();//以下是函数声明

voidCreateHeadLink();

student*MallocNode();

voidGetInformation(student*t);

voidOutputInformation();

voidDesplayInfoByNumber();

voidDesplayOneNode(student*t);

voidInsertOneNode(student*t);

voidrangebyNumber();

voidDeleteNodeByNumber();

voidDesplayInfoByName();

intchoose;//用于接受用户的选择

voidmain()//主函数

{

CreateHeadLink();

DesplayMenu();

}

voidDesplayMenu()//显示菜单,根据用户的输入完成相应的功能

{

student*p;

printf("\n-------请选择相应功能-------------\n\n");

printf("1显示所有学生信息\n");

printf("2增加一条学生信息\n");

printf("3删除一条学生信息\n");

printf("4根据学号查找学生的信息\n");

printf("5按学号高到低排序\n");

printf("6退出\n");

printf("请输入序号:

\n");

scanf("%d",&choose);//取得用户的选择

switch(choose)

{

case1:

OutputInformation();

break;

case2:

p=MallocNode();//先申请一个新结点

GetInformation(p);//要求用户输入信息到新结点中

InsertOneNode(p);//将新结点加到链表中

break;

case3:

DeleteNodeByNumber();

break;

case4:

DesplayInfoByNumber();

break;

case5:

rangebyNumber();

break;

case6:

free(headLink);//先释放内存空间

exit

(1);

break;

default:

break;

}

DesplayMenu();//递归调用

}

voidCreateHeadLink()//建立链表表头

{

student*p;

p=(student*)malloc(sizeof(student));

headLink=p;

p->next=NULL;

}

student*MallocNode()//申请一个新结点,并将其初始化

{

student*p;

inti;

p=(student*)malloc(sizeof(student));

if(p==NULL)

returnNULL;

for(i=0;i<10;i++)

p->Number[i]='\0';

for(i=0;i<20;i++)

p->name[i]='\0';

for(i=0;i<20;i++)

p->telephone[i]='\0';

for(i=0;i<10;i++)

p->cellphone[i]='\0';

for(i=0;i<10;i++)

p->QQ[i]='\0';

p->next=NULL;

returnp;

}

voidGetInformation(student*t)//添加学生信息

{

printf("请输入序号:

\n");

scanf("%s",t->Number);

printf("请输入姓名:

\n");

scanf("%s",t->name);

printf("请输入电话:

\n");

scanf("%s",t->telephone);

printf("请输入手机号:

\n");

scanf("%s",t->cellphone);

printf("请输入QQ:

\n");

scanf("%s",t->QQ);

}

voidInsertOneNode(student*t)//在链表的结尾处增加一个结点

{

student*p;

p=headLink;

while(p->next)

{

p=p->next;

}

p->next=t;

}

voidDesplayInfoByNumber()//根据学号显示该学号学生的信息

{

student*p;

chargood[10];

charflag=0;

p=headLink->next;

if(p==NULL)

{

printf("对不起,现在没有学生信息!

\n");

return;

}

printf("请输入序号:

\n");

scanf("%s",good);

printf("学号\t姓名\t电话\t手机号\tQQ\t\n");

while(p)

{

if(strcmp(p->Number,good)==0)

{

DesplayOneNode(p);

flag=1;

break;

}

p=p->next;

}

if(!

flag)

printf("对不起,不存在序号为%s的学生\n",good);

}

voidDesplayOneNode(student*t)//输出一个学生结点的信息

{

printf("%s\t",t->Number);

printf("%s\t",t->name);

printf("%s\t",t->telephone);

printf("%s\t",t->cellphone);

printf("%s\t\n",t->QQ);

}

voidDeleteNodeByNumber()//根据学号删除该学生信息

{

chargood[10];

student*p,*q;

charflag=0;

printf("请输入要删除的学生序号:

");

scanf("%s",good);

p=headLink;

q=headLink->next;

while(q)

{

if(strcmp(q->Number,good)==0)

{

p->next=q->next;

free(q);

flag=1;

break;

}

p=p->next;

q=q->next;

}

if(!

flag)

printf("不存在这学生\n");

}

voidOutputInformation()//显示所有学生的信息

{

student*p;

p=headLink->next;

if(p==NULL)

{

printf("现在没有任何信息,请先输入学生信息\n\n");

return;

}

printf("学号\t姓名\t电话\t手机号\tQQ\t\n");

while(p)

{

DesplayOneNode(p);

p=p->next;

}

}

voidrangebyNumber()//根据输入的学号,按低到高排序

{

charNumber[10];

studentexchange,*r,*p,*q;

r=headLink->next;

if(r==NULL)

{

printf("现在还没任何信息,请先输入学生信息\n");

return;

}

printf("请输入学号:

\n");

scanf("%s",Number);

while(r)//两层while循环实现排序

{

p=r;

q=r->next;

while(q)

{

if((strcmp(p->Number,q->Number)>0))//学号大时才交换

{

strcpy(exchange.Number,q->Number);//先复制q结点信息到exchange

strcpy(exchange.QQ,q->QQ);

strcpy(exchange.cellphone,q->cellphone);

strcpy(exchange.name,q->name);

strcpy(exchange.telephone,q->telephone);

strcpy(q->Number,p->Number);//再复制p结点信息到q

strcpy(q->QQ,p->QQ);

strcpy(q->cellphone,p->cellphone);

strcpy(q->name,p->name);

strcpy(q->telephone,p->telephone);

strcpy(p->Number,exchange.Number);//最后复制exchange结点信息到p

strcpy(p->QQ,exchange.QQ);

strcpy(p->cellphone,exchange.cellphone);

strcpy(p->name,exchange.name);

strcpy(p->telephone,exchange.telephone);

}

q=q->next;

}

r=r->next;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1