当前位置:文档之家› 班级通讯录(大数据结构,C语言)

班级通讯录(大数据结构,C语言)

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

2、设计要求一个学生的数据包括:学号、、、手机、QQ号。

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

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

设计条件:硬件条件:(1)学生用微机(2)多媒体教室(3)局域网环境软件条件:(1)Windows XP中文操作系统(2)Turbo C 3.03、课程设计的容3.1、需求分析:随着科技的进步和信息产业的发展,通讯录成为了现代生活中的一个重要的工具。

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

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

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

进行测试的数据和执行情况如下图所示:程序主观图:添加记录:显示所有记录:删除一条记录:根据学号查找:对记录的排序:主要是对添加新纪录在链表中按升序排列,如新加伟这条记录,对它采取排序,具体结果如下:进行排序:输入6即退出:3.2、概要设计:对该系统各种函数的定义在源代码给出,先给出函数的定义,然后给出菜单的执行函数,建立链表,并对各个功能的实现编出程序,直到调试成功为止。

3.3、详细设计主要给出程序的流程图,如下所示:菜单函数:链表构造:按学号显示学生数据:删除记录:显示所有信息:排序:3.4、程序调试与测试结果:经过认真调试最终结果为正确。

如图:3.5、结果分析:在编译过程中遇到很多困难,程序也基本上符合要求,但是有一点目前还没解决,就是基于链表的修改还没掌握,因此花了很大的力气,但是还是没有完成,只好采取的修改方式为:删除,添加,排序的方法对链表中的元素进行修改。

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

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

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

5、参考文献[1] 宁正元,王秀丽.算法与数据结构.:清华大学,2006[2] 姜灵芝,余键.C语言课程设计案例精编:清华大学,20086、附录该程序的源代码:#include<stdio.h>#include<conio.h>#include<malloc.h>#include<string.h>#include<process.h>typedef struct student{char Number[10]; //学号char name[20]; //char telephone[20]; //char cellphone[20]; //手机char QQ[10]; //QQstruct student *next;}student;student *headLink; //链表表头指针void DesplayMenu(); //以下是函数声明void CreateHeadLink();student *MallocNode();void GetInformation(student *t);void OutputInformation();void DesplayInfoByNumber();void DesplayOneNode(student *t);void InsertOneNode(student *t);void rangebyNumber();void DeleteNodeByNumber();void DesplayInfoByName();int choose; //用于接受用户的选择void main() //主函数{CreateHeadLink();DesplayMenu();}void DesplayMenu() //显示菜单,根据用户的输入完成相应的功能{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){case 1:OutputInformation();break;case 2:p=MallocNode(); //先申请一个新结点GetInformation(p); //要求用户输入信息到新结点中InsertOneNode(p); //将新结点加到链表中break;case 3:DeleteNodeByNumber();break;case 4:DesplayInfoByNumber();break;case 5:rangebyNumber();break;case 6:free(headLink); //先释放存空间exit(1);break;default:break;}DesplayMenu(); //递归调用}void CreateHeadLink() //建立链表表头{student *p;p=(student*)malloc(sizeof(student));headLink=p;p->next=NULL;}student *MallocNode() //申请一个新结点,并将其初始化student *p;int i;p=(student*)malloc(sizeof(student));if(p==NULL)return NULL;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;return p;}void GetInformation(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);}void InsertOneNode(student *t) //在链表的结尾处增加一个结点{student *p;p=headLink;while(p->next){p=p->next;}p->next=t;}void DesplayInfoByNumber() //根据学号显示该学号学生的信息{student *p;char good[10];char flag=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);}void DesplayOneNode(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);}void DeleteNodeByNumber() //根据学号删除该学生信息{char good[10];student *p,*q;char flag=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");}void OutputInformation() //显示所有学生的信息{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;}}void rangebyNumber() //根据输入的学号,按低到高排序{char Number[10];student exchange,*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(,q->name);strcpy(exchange.telephone,q->telephone);strcpy(q->Number,p->Number); //再复制p结点信息到qstrcpy(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,);strcpy(p->telephone,exchange.telephone);}q=q->next;}r=r->next;}}。

相关主题