1. 学生通讯录管理系统的设计与实现

1.1 问题的描述

学生通讯录管理系统是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。

1.2 问题分析和任务定义

(1)输入数据建立通讯录;

(2)查询通讯录中满足要求的信息;

(3)插入新的通讯录信息;

(4)删除不需要的通讯录信息;

(5)查看所有的通讯录信息。

1.3 数据类型和系统设计

1)存储结构设计

采用链表来存储“学生通讯信息”,其中链表结点有4个分量构成:通讯录成员学号、姓名、电话号码、指向下一个成员的指针。

2)系统功能设计

本系统设置了5个子功能菜单,5个子功能的设计描述如下:

① 建立通讯录系统。可以一次输入多个成员通讯录的信息,建立通讯录。该功能有由creatIncreLink() 函数实现。

② 插入通讯录记录。每次可以插入一个成员通讯录的信息,如果要连续插入多个成员通讯录信息必须多次选择该功能。该功能由insertYouXu() 函数实现。

③ 查询通讯录记录。可以按两种方式查询所需要的通讯录成员记录,一是按学号查询,而是按姓名查询。分别由searchNum() 和searchName() 函数实现。

④ 删除通讯记录。可以对通讯录中不再需要的信息进行删除。有三种删除方式,按序号进行删除,按学号进行删除和按姓名进行删除。分别由deleteElem() ,delNum() 和delName() 三个函数实现。

⑤ 显示通讯录记录。可以查看通讯录中所有通讯录成员记录。该功能由printList() 函数实现。

3)系统主界面的设计

为了实现学生通讯管理系统各功能的管理,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图1所示。

图1 “学生通讯录管理系统”主菜单

1.4 编码实现

(1)链表结点类型的定义

typedef struct LNode

{ int number;

double telenum;

char name[20];

struct LNode *next;

}LNode,*LinkList;

(2)建立链表的函数,主要用来建立通讯录。

LinkList creatIncreLink() //创建一个存放通讯录成员的非递减有序表,返回头结点地址

{ LinkList L=(LinkList)malloc(LEN);  //头结点

L->next=NULL;

LinkList p;

int num=1;

int number;

double telenum;

char name[20];

printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n");

printf("请输入学号 %d:",num);

scanf("%d",&number);

printf("请输入姓名 %d: ",num);

char temp=getchar();

gets(name);

printf("请输入电话号码 %d:",num);

scanf("%lf",&telenum);

while (number>=0)

{

p=(LinkList)malloc(LEN); //新结点

p->number=number;

p->telenum=telenum;

strcpy(p->name,name);

insertYouXu(L,p);       //有序的插入新结点

num++;

printf("请输入学号 %d:",num);

scanf("%d",&number);

printf("请输入姓名 %d: ",num);

temp=getchar();

gets(name);

printf("请输入电话号码 %d:",num);

scanf("%lf",&telenum);

} return(L);

}

(3)插入通讯记录

void insertYouXu(LinkList L,LinkList Elem)

{              //插入一个元素,使原有序表仍为有序

LinkList p=L->next;

while(p!=NULL && Elem->number>=p->number)

{

if(p->number==Elem->number)

{                   printf("重复输入!!\n");return;

}

p=p->next;

}         //确定Elem插入的位置

if(p==NULL)

{

p=prior(L,p); Elem->next=NULL;p->next=Elem;

}

else       //若为空表,插到头结点之后

{            p=prior(L,p); Elem->next=p->next; p->next=Elem;

}

}

(4)按学号查询通讯录记录

int searchNum(LinkList L,int n)

{    // 按学号查找通讯者

int flag=0;

LinkList p=L->next;

seat=1;

if(L->next==NULL) printf("该链表中没有元素,查找失败\n");

else  {

while(p !=NULL)

{

if(p->number<=n)

if(p->number==n)

{       flag=1;

printf("要查找的是第%d位通讯者:\n",seat);

printf("                        学号: %d   姓名: %s   电话号码.:%.0f\n",p->number,p->name,p->telenum);

}

p=p->next;seat++;//!!!!

}

}

return flag;

}

(5)按姓名查询通讯录记录

int searchName(LinkList L,char n[])

{    // 按姓名查找通讯者

int flag=0;

LinkList p=L->next;

seat=1;

if(L->next==NULL||L==NULL)

printf("该通讯录中没有元素,查找失败\n");

else  {

while(p !=NULL)

{

if(!strcmp(p->name,n))

{

flag=1;

printf("要查找的是第%d位通讯者:\n",seat);

printf("                        Number: %d   Name: %s   TeleNo.:%.0f\n",p->number,p->name,p->telenum);

}

p=p->next;seat++;//!!!!!

}

} return flag;

}

(6)按序号进行删除,删除通讯录第i个元素

void deleteElem(LinkList L,int i)       //从通讯录中删除第i个元素

{

LinkList p=L;

int j=0;

while (p->next&&j<i-1)

{

p = p->next;j++;

}

if(!(p->next))

{printf("第%d个元素删除失败\n",i);return ;}

//判断i是否合法,i既不能大于元素的个数,也不能小于等于0

LinkList q = p->next;

p->next = q->next;

free(q); //释放删除的结点

}

(7)按学号删除通讯者

int delNum(LinkList L,int n)

{    // 按学号删除通讯者

int flag=0;

LinkList p=L->next;

seat=1;

if(L->next==NULL)

printf("该链表中没有元素,删除失败\n");

else  {

while(p !=NULL)

{

if(p->number<=n)

{

if(p->number==n)

{       flag=1;

printf("%d ",p->number);

p=p->next;

deleteElem(L,seat);

}

}

else {p=p->next;seat++;}

}

printf("被删除\n");

}

return flag;

}

(8)按姓名删除通讯者

int delName(LinkList L,char n[])

{    // 按姓名删除通讯者

int flag=0;

LinkList p=L->next;

seat=1;

if(L->next==NULL)

printf("该链表中没有元素,查找失败\n");

else {

while(p !=NULL)

{

if(!strcmp(p->name,n))

{

flag=1;

printf("%s ",p->name);

p=p->next;

deleteElem(L,seat);

}

else {p=p->next;seat++;}

}

if(flag)printf("被删除\n");

} return flag;

}

(9)显示通讯录

void printList(LinkList L)

{    // 打印头结点地址为L的通讯录

printf("\n          ---------------------------------------\n");

printf("               学号       姓名     电话号码\n");

printf("          ----------------------------------------\n");

LinkList p=L;

int n=1;

if(L==NULL||L->next==NULL) printf("该通讯录中没有元素\n");

else

while(p->next !=NULL)

{

printf("          %2d   %-9d",n,p->next->number);

printf("    %-5s  %.0f\n",p->next->name,p->next->telenum);

p=p->next;

n++;

}

printf("          ----------------------------------------\n");

return ;

}

(10)主菜单,main函数

void main(){

system("color 1f");

LinkList L=NULL;

printf("\n           ***************** ^@^欢迎使用通讯录系统***********\n");

printf("           *               1 通讯录的建立                   *\n");

printf("           *               2 插入通讯记录                   *\n");

printf("           *               3 查询通讯记录                   *\n");

printf("           *               4 删除通讯记录                   *\n");

printf("           *               5 显示通讯录信息                 *\n");

printf("           *               0 退出管理系统                   *\n");

printf("           **************** ^@^欢迎使用通讯录系统************\n");

int flag=0;

int menu;

printf("请选择0-5:");

scanf("%d",&menu);

while(menu!=0)

{

switch(menu) {

case 1:       {

L=creatIncreLink();

printf("建立通讯录:");

printList(L);

flag=1;

break;

}

case 2:       {          if(flag==1)

{int number,telenum;

char name[20];

printf("请输入通讯者的学号和姓名:\n");

printf("请输入学号: ");

scanf("%d",&number);

printf("请输入姓名: ");

char temp=getchar();

gets(name);

printf("请输入电话号码: ");

scanf("%d",&telenum);

LinkList p=(LinkList)malloc(LEN); //新结点

p->number=number;

strcpy(p->name,name);

p->telenum=telenum;

insertYouXu(L,p);       //有序的插入新结点

printf("插入后:");

printList(L);

}

else printf("\nERROR: 通讯录还没有建立,请先建立通讯录\n");

break;

}

case 3:{    int way,n;

char na[20];

int s;

if(L!=NULL)

{

if(flag) {

printf("选择查找方式:\n");

printf("               1.按学号   2.按姓名");

scanf("%d",&way);

if(way==1)

{

printf("\n请输入学号:");

scanf("%d",&n);

s=searchNum(L,n);

if(s==0) printf("无此通讯者,查找失败!\n");

}

else if(way==2)

{        printf("\n请输入姓名:");

char temp=getchar();

gets(na);

s=searchName(L,na);

if(s==0) printf("无此通讯者,查找失败!\n");

}

else printf("通讯录中无记录!\n");

}

break;

}

else printf("通讯录中无记录!\n");break;

}

case 4:{

int way;

printf("选择删除方式:1.按序号  2. 按学号  3.按姓名 \n");

scanf("%d",&way);

if(way==1)

{

int n;

printf("请输入通讯录序号: ");

scanf("%d",&n);

printf("删除后:\n");

deleteElem(L,n);

printList(L);

}

else if(way==2)

{

int n,f;

printf("请输入学号: ");

scanf("%d",&n);

f=delNum(L,n);

if(f!=0)

{

printf("删除后:\n");

printList(L);

}

else printf("无该学号,删除失败!\n");

}

else if(way==3)

{

char na[20];

int f;

printf("\n请输入姓名:");

char temp=getchar();

gets(na);

f=delName(L,na);

if(f!=0)

{

printf("删除后:\n");

printList(L);

}

else printf("无该学号,删除失败!\n");

}

else printf("ERROR!!\n");

break;

}

case 5: {

printf("当前通讯录内容如下:\n");

printList(L);

break;

}

case 0: exit(0);

default:  printf("\n没有此功能,重新输入\n");

}

printf("选择功能:");

scanf("%d",&menu);

}

}

1.5 测试结果

1.建立通讯录

2.插入通讯记录

3.查询通讯记录

4.删除通讯记录

5.显示通讯录信息

6.退出管理系统

学生通讯录管理系统的设计与实现相关推荐

  1. C 语言课程设计 最终答辩版 学生通讯录管理系统

    <span style="font-family: Arial, Helvetica, sans-serif;">/*</span> *********** ...

  2. netbeans基于mysql学生信息_学生信息管理系统的设计与实现(NetBeans IDE,MySQL)

    学生信息管理系统的设计与实现(NetBeans IDE,MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文16000字,程序代码,MySQL数据库) 本系统是在管理信息系统的理论 ...

  3. java销售管理系统实验报告_java学生通讯录管理系统实验报告

    java学生通讯录管理系统实验报告 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 宁波大红鹰学院 课课程程设设计计课程设计名称: ...

  4. 学生通讯录管理系统【用 结构数组 实现 通讯录管理】【C语言】

    目录 说明 1.实训目的 2.实训内容 3.系统需求分析 4.系统设计与实现 完整程序代码(纯C语言?代码) 5.系统测试与运行结果分析 6.心得体会 原创性声明 说明 大一下学期(2019年 上半年 ...

  5. 教你如何用python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了python实现学生通讯录管理系统的具 ...

  6. javaee校园信息服务器,基于javaEE服务器 学生考勤管理系统的设计与实现开题报告...

    基于javaEE服务器 学生考勤管理系统的设计与实现开题报告 毕业论文(设计)开题报告 姓 名 学 号 所在专业 软件工程 论文(设计)题目 基于 javaEE 服务器 学生考勤管理系统的设计与实现 ...

  7. php简单学生管理系统设计与实现,基于PHP的学生成绩管理系统的设计与实现.doc...

    基于PHP的学生成绩管理系统的设计与实现.doc 基于PHP的学生成绩管理系统的设计与实现 摘 要: 我国高等职业教育迎来了蓬勃发展的新局面,各院校招生规模不断扩大,学校的教学管理负担越来越重.为了提 ...

  8. python基础项目实践之: 学生通讯录管理系统

    Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...

  9. 学生社团管理系统java_基于JavaEE的学生社团管理系统的设计与实现

    一.基本信息 标题:基于JavaEE的学生社团管理系统的设计与实现 作者:郝平 时间:2018 来源:中国知网 二.研究背景 伴随着互联网技术的高速发展和进步,网络对于人类社会的经济与教育.文化与军事 ...

  10. jsp mysql电子档案管理系统_学生档案管理系统的设计与实现(JSP,MySQL)(含录像)

    学生档案管理系统的设计与实现(,MySQL)(含录像)(开题报告,毕业论文12100字,程序代码,MySQL数据库,答辩PPT) 本文主要工作内容是梳理学生档案管理系统工作的流程,吸收.借鉴先进的指导 ...

最新文章

  1. python中的连续比较是什么_在python中提取连续行之间的差异
  2. 解决IIS中HTTP/1.1 500 Server Error错误的方法
  3. 平凡的世界和你我 (武惠良与杜丽丽)
  4. 获取用户精准地理位置信息(百度地图)
  5. 使用第三方《UITableView+FDTemplateLayoutCell》自动计算UITableViewCell高度(Masonry约束)...
  6. readUnsignedInt () 自动移动字节流位置,和.net是一样的
  7. 【未解决】Reporting Services报表在浏览器中的显示
  8. Linux下如何搭建Java环境
  9. 如何用10万资金炒房到1000万
  10. Makefile系列之五 :函数
  11. opencv提取图像的缺陷并用最小矩形框出来
  12. kali linux 2020.4 自带浏览器英文改中文
  13. linux微软雅黑字体库_一条命令搞定Linux字体渲染——Ubuntu系发行版微软雅黑+宋体终极解决方案...
  14. 《12个工作的基本》读书分享
  15. 区块链+人工智能+大数据等技术能否让我们构建三体文明
  16. 国内首家专注影视文化产业的数藏平台“神缘”即将上线
  17. GNS3 思科(Cisco)PIX虚拟防火墙简单配置
  18. python安装包问题小结
  19. MATLAB设计控制系统仿真实验,基于MATLAB的自动控制原理实验仿真系统的设计
  20. Java反射API简介

热门文章

  1. 小程序开发合同_如何开发微信小程序?
  2. 企业致胜在于人本管理--盖洛普著名的Q12
  3. CentOS系统中常用查看日志命令
  4. Redis官方中文翻译系列 - Redis文档
  5. Java 正则表达式 匹配英文字母
  6. 中华老黄历下载手机版免费_中华老黄历下载安装到手机-中华老黄历软件下载5.4.5 官方下载最新版-东坡下载...
  7. 网线制作相关基础知识
  8. 医院计算机管理办法试行,医院信息工作制度七、计算机中心机房管理制度
  9. 推荐几个在线SQL编程的网站,良心!
  10. 基于欧拉-拉格朗日方程的机器人动力学模型